aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFabio Berger <me@fabioberger.com>2018-07-19 23:48:06 +0800
committerFabio Berger <me@fabioberger.com>2018-07-19 23:48:06 +0800
commitd8898cf9a30cc349868afcf2b78e6369e57aa726 (patch)
treef96d1aa76c7e5aa9e3311d5cdbd0d31c8ec8d7fb
parent1aaf633df883f62fad890b2d87a2dc89067821c5 (diff)
parent3de88d5345c7a4549bc69e2ca28f0601f5d42189 (diff)
downloaddexon-sol-tools-d8898cf9a30cc349868afcf2b78e6369e57aa726.tar
dexon-sol-tools-d8898cf9a30cc349868afcf2b78e6369e57aa726.tar.gz
dexon-sol-tools-d8898cf9a30cc349868afcf2b78e6369e57aa726.tar.bz2
dexon-sol-tools-d8898cf9a30cc349868afcf2b78e6369e57aa726.tar.lz
dexon-sol-tools-d8898cf9a30cc349868afcf2b78e6369e57aa726.tar.xz
dexon-sol-tools-d8898cf9a30cc349868afcf2b78e6369e57aa726.tar.zst
dexon-sol-tools-d8898cf9a30cc349868afcf2b78e6369e57aa726.zip
merge v2-prototype
-rw-r--r--.circleci/config.yml10
-rw-r--r--.prettierignore2
-rw-r--r--PULL_REQUEST_TEMPLATE.md10
-rw-r--r--lerna.json2
-rw-r--r--package.json4
-rw-r--r--packages/0x.js/CHANGELOG.json53
-rw-r--r--packages/0x.js/CHANGELOG.md4
-rw-r--r--packages/0x.js/package.json43
-rw-r--r--packages/0x.js/src/0x.ts115
-rw-r--r--packages/0x.js/src/artifacts.ts7
-rw-r--r--packages/0x.js/src/artifacts/ZRXToken.json10031
-rw-r--r--packages/0x.js/src/compact_artifacts/DummyToken.json22
-rw-r--r--packages/0x.js/src/compact_artifacts/EtherToken.json287
-rw-r--r--packages/0x.js/src/compact_artifacts/Exchange.json610
-rw-r--r--packages/0x.js/src/compact_artifacts/Token.json172
-rw-r--r--packages/0x.js/src/compact_artifacts/TokenRegistry.json547
-rw-r--r--packages/0x.js/src/compact_artifacts/TokenTransferProxy.json187
-rw-r--r--packages/0x.js/src/compact_artifacts/ZRX.json20
-rw-r--r--packages/0x.js/src/index.ts59
-rw-r--r--packages/0x.js/src/schemas/zero_ex_private_network_config_schema.ts8
-rw-r--r--packages/0x.js/src/schemas/zero_ex_public_network_config_schema.ts4
-rw-r--r--packages/0x.js/test/0x.js_test.ts74
-rw-r--r--packages/0x.js/test/artifacts_test.ts48
-rw-r--r--packages/0x.js/test/global_hooks.ts8
-rw-r--r--packages/0x.js/test/utils/token_utils.ts39
-rw-r--r--packages/0x.js/test/utils/web3_wrapper.ts10
-rw-r--r--packages/abi-gen/CHANGELOG.json13
-rw-r--r--packages/abi-gen/CHANGELOG.md4
-rwxr-xr-xpackages/abi-gen/bin/abi-gen.js2
-rw-r--r--packages/abi-gen/coverage/.gitkeep0
-rw-r--r--packages/abi-gen/package.json24
-rw-r--r--packages/abi-gen/src/index.ts26
-rw-r--r--packages/abi-gen/src/utils.ts24
-rw-r--r--packages/abi-gen/test/utils_test.ts86
-rw-r--r--packages/assert/CHANGELOG.json9
-rw-r--r--packages/assert/CHANGELOG.md4
-rw-r--r--packages/assert/package.json6
-rw-r--r--packages/assert/src/index.ts32
-rw-r--r--packages/assert/test/assert_test.ts2
-rw-r--r--packages/base-contract/CHANGELOG.json9
-rw-r--r--packages/base-contract/CHANGELOG.md4
-rw-r--r--packages/base-contract/package.json10
-rw-r--r--packages/base-contract/src/index.ts12
-rw-r--r--packages/connect/CHANGELOG.json18
-rw-r--r--packages/connect/CHANGELOG.md4
-rw-r--r--packages/connect/package.json17
-rw-r--r--packages/connect/src/http_client.ts6
-rw-r--r--packages/connect/src/index.ts3
-rw-r--r--packages/connect/src/orderbook_channel_factory.ts32
-rw-r--r--packages/connect/src/schemas/schemas.ts2
-rw-r--r--packages/connect/src/schemas/websocket_orderbook_channel_config_schema.ts10
-rw-r--r--packages/connect/src/types.ts13
-rw-r--r--packages/connect/src/utils/assert.ts26
-rw-r--r--packages/connect/src/utils/orderbook_channel_message_parser.ts8
-rw-r--r--packages/connect/src/utils/type_converters.ts6
-rw-r--r--packages/connect/src/ws_orderbook_channel.ts185
-rw-r--r--packages/connect/test/orderbook_channel_factory_test.ts45
-rw-r--r--packages/connect/test/ws_orderbook_channel_test.ts60
-rw-r--r--packages/contract-wrappers/CHANGELOG.json9
-rw-r--r--packages/contract-wrappers/CHANGELOG.md4
-rw-r--r--packages/contract-wrappers/package.json26
-rw-r--r--packages/contract-wrappers/src/contract_wrappers/contract_wrapper.ts36
-rw-r--r--packages/contract-wrappers/src/contract_wrappers/erc20_token_wrapper.ts3
-rw-r--r--packages/contract-wrappers/src/contract_wrappers/erc721_token_wrapper.ts23
-rw-r--r--packages/contract-wrappers/src/contract_wrappers/ether_token_wrapper.ts3
-rw-r--r--packages/contract-wrappers/src/contract_wrappers/exchange_wrapper.ts10
-rw-r--r--packages/contract-wrappers/src/index.ts14
-rw-r--r--packages/contract-wrappers/src/schemas/contract_wrappers_private_network_config_schema.ts8
-rw-r--r--packages/contract-wrappers/src/schemas/contract_wrappers_public_network_config_schema.ts4
-rw-r--r--packages/contract-wrappers/src/utils/assert.ts2
-rw-r--r--packages/contract-wrappers/test/erc20_wrapper_test.ts3
-rw-r--r--packages/contract-wrappers/test/erc721_wrapper_test.ts3
-rw-r--r--packages/contract-wrappers/test/ether_token_wrapper_test.ts14
-rw-r--r--packages/contract-wrappers/test/exchange_wrapper_test.ts14
-rw-r--r--packages/contract-wrappers/test/global_hooks.ts2
-rw-r--r--packages/contract-wrappers/test/subscription_test.ts38
-rw-r--r--packages/contracts/compiler.json1
-rw-r--r--packages/contracts/package.json22
-rw-r--r--packages/contracts/src/1.0.0/MultiSigWalletWithTImeLockExceptRemoveAuthorizedAddress/MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress.sol4
-rw-r--r--packages/contracts/src/2.0.0/forwarder/Forwarder.sol1
-rw-r--r--packages/contracts/src/2.0.0/protocol/AssetProxyOwner/AssetProxyOwner.sol27
-rw-r--r--packages/contracts/src/2.0.0/protocol/Exchange/MixinExchangeCore.sol16
-rw-r--r--packages/contracts/src/2.0.0/protocol/Exchange/MixinWrapperFunctions.sol16
-rw-r--r--packages/contracts/src/2.0.0/protocol/Exchange/interfaces/IWrapperFunctions.sol8
-rw-r--r--packages/contracts/src/2.0.0/test/TestAssetProxyOwner/TestAssetProxyOwner.sol23
-rw-r--r--packages/contracts/src/2.0.0/utils/LibBytes/LibBytes.sol3
-rw-r--r--packages/contracts/src/2.0.0/utils/SafeMath/SafeMath.sol18
-rw-r--r--packages/contracts/test/asset_proxy/proxies.ts37
-rw-r--r--packages/contracts/test/exchange/core.ts194
-rw-r--r--packages/contracts/test/exchange/dispatcher.ts6
-rw-r--r--packages/contracts/test/exchange/libs.ts8
-rw-r--r--packages/contracts/test/exchange/match_orders.ts180
-rw-r--r--packages/contracts/test/exchange/signature_validator.ts8
-rw-r--r--packages/contracts/test/exchange/transactions.ts20
-rw-r--r--packages/contracts/test/exchange/wrapper.ts274
-rw-r--r--packages/contracts/test/forwarder/forwarder.ts107
-rw-r--r--packages/contracts/test/libraries/lib_bytes.ts11
-rw-r--r--packages/contracts/test/multisig/asset_proxy_owner.ts26
-rw-r--r--packages/contracts/test/multisig/multi_sig_with_time_lock.ts2
-rw-r--r--packages/contracts/test/utils/asset_wrapper.ts20
-rw-r--r--packages/contracts/test/utils/block_timestamp.ts (renamed from packages/contracts/test/utils/increase_time.ts)9
-rw-r--r--packages/contracts/test/utils/constants.ts5
-rw-r--r--packages/contracts/test/utils/core_combinatorial_utils.ts8
-rw-r--r--packages/contracts/test/utils/erc20_wrapper.ts14
-rw-r--r--packages/contracts/test/utils/erc721_wrapper.ts10
-rw-r--r--packages/contracts/test/utils/exchange_wrapper.ts10
-rw-r--r--packages/contracts/test/utils/forwarder_wrapper.ts18
-rw-r--r--packages/contracts/test/utils/log_decoder.ts6
-rw-r--r--packages/contracts/test/utils/match_order_tester.ts22
-rw-r--r--packages/contracts/test/utils/multi_sig_wrapper.ts13
-rw-r--r--packages/contracts/test/utils/order_factory.ts15
-rw-r--r--packages/contracts/test/utils/order_factory_from_scenario.ts36
-rw-r--r--packages/contracts/test/utils/simple_asset_balance_and_proxy_allowance_fetcher.ts2
-rw-r--r--packages/contracts/test/utils/simple_order_filled_cancelled_fetcher.ts4
-rw-r--r--packages/contracts/test/utils/token_registry_wrapper.ts4
-rw-r--r--packages/contracts/test/utils/transaction_factory.ts6
-rw-r--r--packages/contracts/test/utils/type_encoding_utils.ts21
-rw-r--r--packages/contracts/test/utils/web3_wrapper.ts6
-rw-r--r--packages/dev-utils/CHANGELOG.json9
-rw-r--r--packages/dev-utils/CHANGELOG.md4
-rw-r--r--packages/dev-utils/package.json15
-rw-r--r--packages/dev-utils/src/blockchain_lifecycle.ts43
-rw-r--r--packages/dev-utils/src/web3_factory.ts21
-rw-r--r--packages/ethereum-types/package.json2
-rw-r--r--packages/fill-scenarios/CHANGELOG.json9
-rw-r--r--packages/fill-scenarios/CHANGELOG.md4
-rw-r--r--packages/fill-scenarios/package.json18
-rw-r--r--packages/fill-scenarios/src/artifacts.ts6
-rw-r--r--packages/fill-scenarios/src/constants.ts1
-rw-r--r--packages/fill-scenarios/src/fill_scenarios.ts300
-rw-r--r--packages/fill-scenarios/src/index.ts223
-rw-r--r--packages/json-schemas/CHANGELOG.json13
-rw-r--r--packages/json-schemas/CHANGELOG.md4
-rw-r--r--packages/json-schemas/package.json6
-rw-r--r--packages/json-schemas/schemas/call_data_schema.ts2
-rw-r--r--packages/json-schemas/src/schema_validator.ts2
-rw-r--r--packages/metacoin/package.json25
-rw-r--r--packages/metacoin/test/utils/web3_wrapper.ts8
-rw-r--r--packages/migrations/CHANGELOG.json9
-rw-r--r--packages/migrations/CHANGELOG.md4
-rw-r--r--packages/migrations/artifacts/2.0.0/AssetProxyOwner.json43828
-rw-r--r--packages/migrations/artifacts/2.0.0/DummyERC20Token.json46
-rw-r--r--packages/migrations/artifacts/2.0.0/DummyERC721Receiver.json14
-rw-r--r--packages/migrations/artifacts/2.0.0/DummyERC721Token.json42
-rw-r--r--packages/migrations/artifacts/2.0.0/ERC20Proxy.json42
-rw-r--r--packages/migrations/artifacts/2.0.0/ERC20Token.json22
-rw-r--r--packages/migrations/artifacts/2.0.0/ERC721Proxy.json42
-rw-r--r--packages/migrations/artifacts/2.0.0/ERC721Token.json30
-rw-r--r--packages/migrations/artifacts/2.0.0/Exchange.json159
-rw-r--r--packages/migrations/artifacts/2.0.0/ExchangeWrapper.json38
-rw-r--r--packages/migrations/artifacts/2.0.0/Forwarder.json341
-rw-r--r--packages/migrations/artifacts/2.0.0/IAssetData.json4
-rw-r--r--packages/migrations/artifacts/2.0.0/IAssetProxy.json8
-rw-r--r--packages/migrations/artifacts/2.0.0/IValidator.json6
-rw-r--r--packages/migrations/artifacts/2.0.0/IWallet.json6
-rw-r--r--packages/migrations/artifacts/2.0.0/MixinAuthorizable.json34
-rw-r--r--packages/migrations/artifacts/2.0.0/MultiSigWallet.json18
-rw-r--r--packages/migrations/artifacts/2.0.0/MultiSigWalletWithTimeLock.json22
-rw-r--r--packages/migrations/artifacts/2.0.0/MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress.json723
-rw-r--r--packages/migrations/artifacts/2.0.0/TestAssetProxyDispatcher.json32
-rw-r--r--packages/migrations/artifacts/2.0.0/TestAssetProxyOwner.json47499
-rw-r--r--packages/migrations/artifacts/2.0.0/TestLibBytes.json22
-rw-r--r--packages/migrations/artifacts/2.0.0/TestLibs.json26
-rw-r--r--packages/migrations/artifacts/2.0.0/TestSignatureValidator.json38
-rw-r--r--packages/migrations/artifacts/2.0.0/TestValidator.json22
-rw-r--r--packages/migrations/artifacts/2.0.0/TestWallet.json26
-rw-r--r--packages/migrations/artifacts/2.0.0/TokenRegistry.json16
-rw-r--r--packages/migrations/artifacts/2.0.0/WETH9.json18
-rw-r--r--packages/migrations/artifacts/2.0.0/Whitelist.json42
-rw-r--r--packages/migrations/artifacts/2.0.0/ZRXToken.json9785
-rw-r--r--packages/migrations/compiler.json2
-rw-r--r--packages/migrations/package.json23
-rw-r--r--packages/migrations/src/2.0.0/migration.ts18
-rw-r--r--packages/migrations/src/utils/artifact_writer.ts4
-rw-r--r--packages/migrations/src/utils/provider_factory.ts12
-rw-r--r--packages/monorepo-scripts/package.json7
-rw-r--r--packages/monorepo-scripts/src/constants.ts2
-rw-r--r--packages/monorepo-scripts/src/find_unused_dependencies.ts11
-rw-r--r--packages/monorepo-scripts/src/globals.d.ts19
-rw-r--r--packages/monorepo-scripts/src/postpublish_utils.ts21
-rw-r--r--packages/monorepo-scripts/src/prepublish_checks.ts43
-rw-r--r--packages/monorepo-scripts/src/publish.ts35
-rw-r--r--packages/monorepo-scripts/src/test_installation.ts16
-rw-r--r--packages/monorepo-scripts/src/types.ts14
-rw-r--r--packages/monorepo-scripts/src/utils/changelog_utils.ts8
-rw-r--r--packages/monorepo-scripts/src/utils/utils.ts52
-rw-r--r--packages/order-utils/CHANGELOG.json13
-rw-r--r--packages/order-utils/CHANGELOG.md4
-rw-r--r--packages/order-utils/package.json15
-rw-r--r--packages/order-utils/src/abstract/abstract_order_filled_cancelled_lazy_store.ts12
-rw-r--r--packages/order-utils/src/assert.ts2
-rw-r--r--packages/order-utils/src/asset_data_utils.ts (renamed from packages/order-utils/src/asset_proxy_utils.ts)112
-rw-r--r--packages/order-utils/src/constants.ts1
-rw-r--r--packages/order-utils/src/crypto.ts2
-rw-r--r--packages/order-utils/src/exchange_transfer_simulator.ts2
-rw-r--r--packages/order-utils/src/index.ts3
-rw-r--r--packages/order-utils/src/order_state_utils.ts4
-rw-r--r--packages/order-utils/src/order_validation_utils.ts2
-rw-r--r--packages/order-utils/src/remaining_fillable_calculator.ts14
-rw-r--r--packages/order-utils/src/signature_utils.ts20
-rw-r--r--packages/order-utils/src/store/balance_and_proxy_allowance_lazy_store.ts18
-rw-r--r--packages/order-utils/src/store/order_filled_cancelled_lazy_store.ts65
-rw-r--r--packages/order-utils/test/exchange_transfer_simulator_test.ts9
-rw-r--r--packages/order-utils/test/utils/simple_erc20_balance_and_proxy_allowance_fetcher.ts4
-rw-r--r--packages/order-watcher/CHANGELOG.json17
-rw-r--r--packages/order-watcher/CHANGELOG.md4
-rw-r--r--packages/order-watcher/package.json32
-rw-r--r--packages/order-watcher/src/artifacts.ts19
-rw-r--r--packages/order-watcher/src/compact_artifacts/DummyToken.json22
-rw-r--r--packages/order-watcher/src/compact_artifacts/ERC20Token.json49
-rw-r--r--packages/order-watcher/src/compact_artifacts/ERC721Token.json71
-rw-r--r--packages/order-watcher/src/compact_artifacts/EtherToken.json287
-rw-r--r--packages/order-watcher/src/compact_artifacts/Exchange.json543
-rw-r--r--packages/order-watcher/src/compact_artifacts/Token.json172
-rw-r--r--packages/order-watcher/src/compact_artifacts/TokenRegistry.json547
-rw-r--r--packages/order-watcher/src/compact_artifacts/TokenTransferProxy.json187
-rw-r--r--packages/order-watcher/src/compact_artifacts/WETH9.json100
-rw-r--r--packages/order-watcher/src/compact_artifacts/ZRX.json20
-rw-r--r--packages/order-watcher/src/fetchers/asset_balance_and_proxy_allowance_fetcher.ts74
-rw-r--r--packages/order-watcher/src/fetchers/order_filled_cancelled_fetcher.ts27
-rw-r--r--packages/order-watcher/src/index.ts3
-rw-r--r--packages/order-watcher/src/order_watcher/collision_resistant_abi_decoder.ts54
-rw-r--r--packages/order-watcher/src/order_watcher/dependent_order_hashes_tracker.ts230
-rw-r--r--packages/order-watcher/src/order_watcher/event_watcher.ts26
-rw-r--r--packages/order-watcher/src/order_watcher/expiration_watcher.ts14
-rw-r--r--packages/order-watcher/src/order_watcher/order_watcher.ts427
-rw-r--r--packages/order-watcher/src/schemas/order_watcher_partial_config_schema.ts13
-rw-r--r--packages/order-watcher/src/types.ts16
-rw-r--r--packages/order-watcher/src/utils/assert.ts16
-rw-r--r--packages/order-watcher/test/expiration_watcher_test.ts110
-rw-r--r--packages/order-watcher/test/global_hooks.ts8
-rw-r--r--packages/order-watcher/test/order_watcher_test.ts525
-rw-r--r--packages/order-watcher/test/utils/token_utils.ts2
-rw-r--r--packages/order-watcher/test/utils/web3_wrapper.ts2
-rw-r--r--packages/order-watcher/tslint.json3
-rw-r--r--packages/react-docs-example/package.json4
-rw-r--r--packages/react-docs/CHANGELOG.json12
-rw-r--r--packages/react-docs/CHANGELOG.md4
-rw-r--r--packages/react-docs/package.json8
-rw-r--r--packages/react-docs/src/docs_info.ts2
-rw-r--r--packages/react-docs/src/utils/doxity_utils.ts22
-rw-r--r--packages/react-docs/src/utils/typedoc_utils.ts2
-rw-r--r--packages/react-shared/CHANGELOG.json9
-rw-r--r--packages/react-shared/CHANGELOG.md4
-rw-r--r--packages/react-shared/package.json4
-rw-r--r--packages/react-shared/src/components/nested_sidebar_menu.tsx2
-rw-r--r--packages/sol-compiler/CHANGELOG.json9
-rw-r--r--packages/sol-compiler/CHANGELOG.md4
-rw-r--r--packages/sol-compiler/package.json15
-rw-r--r--packages/sol-compiler/src/compiler.ts19
-rw-r--r--packages/sol-compiler/test/compiler_test.ts2
-rw-r--r--packages/sol-cov/CHANGELOG.json9
-rw-r--r--packages/sol-cov/CHANGELOG.md4
-rw-r--r--packages/sol-cov/package.json16
-rw-r--r--packages/sol-cov/src/artifact_adapters/sol_compiler_artifact_adapter.ts4
-rw-r--r--packages/sol-cov/src/artifact_adapters/truffle_artifact_adapter.ts4
-rw-r--r--packages/sol-cov/src/ast_visitor.ts14
-rw-r--r--packages/sol-cov/src/coverage_subprovider.ts2
-rw-r--r--packages/sol-cov/src/get_source_range_snippet.ts2
-rw-r--r--packages/sol-cov/src/profiler_subprovider.ts2
-rw-r--r--packages/sol-cov/src/revert_trace_subprovider.ts4
-rw-r--r--packages/sol-cov/src/trace_collection_subprovider.ts6
-rw-r--r--packages/sol-cov/src/trace_collector.ts8
-rw-r--r--packages/sol-resolver/package.json2
-rw-r--r--packages/sol-resolver/src/resolvers/fallthrough_resolver.ts2
-rw-r--r--packages/sol-resolver/src/resolvers/name_resolver.ts2
-rw-r--r--packages/sol-resolver/src/resolvers/npm_resolver.ts2
-rw-r--r--packages/sol-resolver/src/resolvers/relative_fs_resolver.ts2
-rw-r--r--packages/sra-report/CHANGELOG.json9
-rw-r--r--packages/sra-report/CHANGELOG.md4
-rw-r--r--packages/sra-report/package.json14
-rw-r--r--packages/subproviders/CHANGELOG.json12
-rw-r--r--packages/subproviders/CHANGELOG.md4
-rw-r--r--packages/subproviders/package.json13
-rw-r--r--packages/subproviders/src/index.ts2
-rw-r--r--packages/subproviders/src/subproviders/eth_lightwallet_subprovider.ts4
-rw-r--r--packages/subproviders/src/subproviders/fake_gas_estimate_subprovider.ts2
-rw-r--r--packages/subproviders/src/subproviders/ganache.ts2
-rw-r--r--packages/subproviders/src/subproviders/ledger.ts12
-rw-r--r--packages/subproviders/src/subproviders/mnemonic_wallet.ts4
-rw-r--r--packages/subproviders/src/subproviders/nonce_tracker.ts2
-rw-r--r--packages/subproviders/src/subproviders/private_key_wallet.ts4
-rw-r--r--packages/subproviders/src/subproviders/redundant_subprovider.ts2
-rw-r--r--packages/subproviders/src/subproviders/rpc_subprovider.ts90
-rw-r--r--packages/subproviders/src/subproviders/signer.ts2
-rw-r--r--packages/subproviders/src/subproviders/subprovider.ts24
-rw-r--r--packages/subproviders/src/utils/subprovider_utils.ts4
-rw-r--r--packages/subproviders/src/utils/wallet_utils.ts4
-rw-r--r--packages/subproviders/test/integration/ledger_subprovider_test.ts10
-rw-r--r--packages/subproviders/test/unit/eth_lightwallet_subprovider_test.ts3
-rw-r--r--packages/subproviders/test/unit/ledger_subprovider_test.ts5
-rw-r--r--packages/subproviders/test/unit/mnemonic_wallet_subprovider_test.ts3
-rw-r--r--packages/subproviders/test/unit/nonce_tracker_subprovider_test.ts27
-rw-r--r--packages/subproviders/test/unit/private_key_wallet_subprovider_test.ts3
-rw-r--r--packages/subproviders/test/unit/redundant_rpc_subprovider_test.ts8
-rw-r--r--packages/subproviders/tsconfig.json3
-rw-r--r--packages/testnet-faucets/package.json17
-rw-r--r--packages/testnet-faucets/src/ts/dispatch_queue.ts4
-rw-r--r--packages/testnet-faucets/src/ts/error_reporter.ts4
-rw-r--r--packages/testnet-faucets/src/ts/handler.ts19
-rw-r--r--packages/testnet-faucets/src/ts/server.ts24
-rw-r--r--packages/tslint-config/package.json2
-rw-r--r--packages/tslint-config/rules/customNoMagicNumbersRule.ts1
-rw-r--r--packages/tslint-config/tslint.json75
-rw-r--r--packages/types/package.json2
-rw-r--r--packages/types/src/index.ts8
-rw-r--r--packages/typescript-typings/CHANGELOG.json15
-rw-r--r--packages/typescript-typings/CHANGELOG.md4
-rw-r--r--packages/typescript-typings/package.json2
-rw-r--r--packages/typescript-typings/types/detect-node/index.d.ts3
-rw-r--r--packages/typescript-typings/types/ethereumjs-abi/index.d.ts7
-rw-r--r--packages/typescript-typings/types/json-rpc-error/index.d.ts8
-rw-r--r--packages/typescript-typings/types/lerna-get-packages/index.d.ts16
-rw-r--r--packages/utils/CHANGELOG.json9
-rw-r--r--packages/utils/CHANGELOG.md4
-rw-r--r--packages/utils/package.json11
-rw-r--r--packages/utils/src/abi_decoder.ts2
-rw-r--r--packages/utils/src/abi_utils.ts6
-rw-r--r--packages/utils/src/fetchAsync.ts37
-rw-r--r--packages/utils/src/index.ts1
-rw-r--r--packages/web3-wrapper/CHANGELOG.json9
-rw-r--r--packages/web3-wrapper/CHANGELOG.md4
-rw-r--r--packages/web3-wrapper/package.json8
-rw-r--r--packages/web3-wrapper/src/marshaller.ts12
-rw-r--r--packages/web3-wrapper/src/utils.ts4
-rw-r--r--packages/web3-wrapper/src/web3_wrapper.ts2
-rw-r--r--packages/website/md/docs/sol_cov/usage.md4
-rw-r--r--packages/website/package.json30
-rw-r--r--packages/website/public/images/team/peter.jpgbin0 -> 26748 bytes
-rw-r--r--packages/website/public/images/token_icons/EOS.png (renamed from packages/website/public/images/token_icons/eos.png)bin6979 -> 6979 bytes
-rw-r--r--packages/website/public/images/token_icons/QTUM.png (renamed from packages/website/public/images/token_icons/qtum.png)bin32496 -> 32496 bytes
-rw-r--r--packages/website/public/images/token_icons/TAAS.png (renamed from packages/website/public/images/token_icons/taas.png)bin14580 -> 14580 bytes
-rw-r--r--packages/website/public/images/token_icons/WINGS.png (renamed from packages/website/public/images/token_icons/wings.png)bin3822 -> 3822 bytes
-rw-r--r--packages/website/public/index.html6
-rw-r--r--packages/website/public/js/rollbar.umd.min.js2
-rw-r--r--packages/website/public/js/rollbar.umd.nojson.min.js1
-rw-r--r--packages/website/ts/blockchain.ts62
-rw-r--r--packages/website/ts/blockchain_watcher.ts6
-rw-r--r--packages/website/ts/components/dialogs/u2f_not_supported_dialog.tsx4
-rw-r--r--packages/website/ts/components/eth_weth_conversion_button.tsx4
-rw-r--r--packages/website/ts/components/fill_order.tsx22
-rw-r--r--packages/website/ts/components/fill_warning_dialog.tsx6
-rw-r--r--packages/website/ts/components/forms/subscribe_form.tsx4
-rw-r--r--packages/website/ts/components/generate_order/asset_picker.tsx2
-rw-r--r--packages/website/ts/components/generate_order/generate_order_form.tsx40
-rw-r--r--packages/website/ts/components/inputs/allowance_toggle.tsx16
-rw-r--r--packages/website/ts/components/inputs/balance_bounded_input.tsx4
-rw-r--r--packages/website/ts/components/inputs/expiration_input.tsx2
-rw-r--r--packages/website/ts/components/legacy_portal/legacy_portal.tsx339
-rw-r--r--packages/website/ts/components/legacy_portal/legacy_portal_menu.tsx73
-rw-r--r--packages/website/ts/components/onboarding/portal_onboarding_flow.tsx17
-rw-r--r--packages/website/ts/components/order_json.tsx8
-rw-r--r--packages/website/ts/components/portal/portal.tsx13
-rw-r--r--packages/website/ts/components/relayer_index/relayer_grid_tile.tsx8
-rw-r--r--packages/website/ts/components/relayer_index/relayer_top_tokens.tsx13
-rw-r--r--packages/website/ts/components/send_button.tsx2
-rw-r--r--packages/website/ts/components/token_balances.tsx8
-rw-r--r--packages/website/ts/components/top_bar/top_bar.tsx23
-rw-r--r--packages/website/ts/components/ui/menu_item.tsx2
-rw-r--r--packages/website/ts/components/ui/overlay.tsx2
-rw-r--r--packages/website/ts/components/ui/simple_menu.tsx4
-rw-r--r--packages/website/ts/components/wallet/wallet.tsx10
-rw-r--r--packages/website/ts/components/wallet/wrap_ether_item.tsx33
-rw-r--r--packages/website/ts/containers/legacy_portal.ts92
-rw-r--r--packages/website/ts/containers/zero_ex_js_documentation.ts26
-rw-r--r--packages/website/ts/index.tsx17
-rw-r--r--packages/website/ts/local_storage/local_storage.ts8
-rw-r--r--packages/website/ts/local_storage/tracked_token_storage.ts4
-rw-r--r--packages/website/ts/local_storage/trade_history_storage.tsx18
-rw-r--r--packages/website/ts/pages/about/about.tsx25
-rw-r--r--packages/website/ts/pages/jobs/jobs.tsx2
-rw-r--r--packages/website/ts/pages/landing/landing.tsx2
-rw-r--r--packages/website/ts/pages/wiki/wiki.tsx2
-rw-r--r--packages/website/ts/redux/analyticsMiddleware.ts36
-rw-r--r--packages/website/ts/redux/dispatcher.ts2
-rw-r--r--packages/website/ts/redux/store.ts7
-rw-r--r--packages/website/ts/types.ts9
-rw-r--r--packages/website/ts/utils/analytics.ts104
-rw-r--r--packages/website/ts/utils/backend_client.ts6
-rw-r--r--packages/website/ts/utils/configs.ts10
-rw-r--r--packages/website/ts/utils/constants.ts4
-rw-r--r--packages/website/ts/utils/doc_utils.ts6
-rw-r--r--packages/website/ts/utils/error_reporter.ts33
-rw-r--r--packages/website/ts/utils/fetch_utils.ts9
-rw-r--r--packages/website/ts/utils/utils.ts79
-rw-r--r--packages/website/webpack.config.js68
-rw-r--r--tsconfig.json1
-rw-r--r--yarn.lock1114
388 files changed, 117301 insertions, 8379 deletions
diff --git a/.circleci/config.yml b/.circleci/config.yml
index 7027e3999..a1c237122 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -64,7 +64,8 @@ jobs:
- restore_cache:
keys:
- repo-{{ .Environment.CIRCLE_SHA1 }}
- - run: yarn wsrun test:circleci @0xproject/0x.js
+ - run: yarn wsrun test:circleci 0x.js
+ - run: yarn wsrun test:circleci @0xproject/abi-gen
- run: yarn wsrun test:circleci @0xproject/assert
- run: yarn wsrun test:circleci @0xproject/base-contract
- run: yarn wsrun test:circleci @0xproject/connect
@@ -84,6 +85,10 @@ jobs:
paths:
- ~/repo/packages/0x.js/coverage/lcov.info
- save_cache:
+ key: coverage-abi-gen-{{ .Environment.CIRCLE_SHA1 }}
+ paths:
+ - ~/repo/packages/abi-gen/coverage/lcov.info
+ - save_cache:
key: coverage-assert-{{ .Environment.CIRCLE_SHA1 }}
paths:
- ~/repo/packages/assert/coverage/lcov.info
@@ -162,6 +167,9 @@ jobs:
- coverage-0xjs-{{ .Environment.CIRCLE_SHA1 }}
- restore_cache:
keys:
+ - coverage-abi-gen-{{ .Environment.CIRCLE_SHA1 }}
+ - restore_cache:
+ keys:
- coverage-assert-{{ .Environment.CIRCLE_SHA1 }}
- restore_cache:
keys:
diff --git a/.prettierignore b/.prettierignore
index fe21d0bfc..1b2a75b4a 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -10,7 +10,7 @@ lib
/packages/migrations/src/1.0.0/contract_wrappers
/packages/migrations/src/2.0.0/contract_wrappers
/packages/migrations/src/2.0.0-beta-testnet/contract_wrappers
-/packages/0x.js/test/artifacts
+/packages/0x.js/src/artifacts
/packages/contracts/src/artifacts
/packages/metacoin/artifacts
/packages/contract-wrappers/test/artifacts
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/lerna.json b/lerna.json
index 5f975fff9..39905618d 100644
--- a/lerna.json
+++ b/lerna.json
@@ -1,5 +1,5 @@
{
- "lerna": "2.5.1",
+ "lerna": "3.0.0-beta.14",
"packages": ["packages/*"],
"commands": {
"publish": {
diff --git a/package.json b/package.json
index 1ef8a24b5..a5641c721 100644
--- a/package.json
+++ b/package.json
@@ -31,7 +31,7 @@
"stage_docs": "wsrun docs:stage $PKG --fast-exit --parallel --exclude-missing",
"lint": "wsrun lint $PKG --fast-exit --parallel --exclude-missing",
"comment:postinstall": "HACK: For some reason `yarn` is not setting up symlinks properly for order-utils. We temporarily set them manually. Remove this after V2 refactor is complete.",
- "postinstall": "rm -rf `pwd`/packages/order-utils/node_modules/@0xproject; mkdir `pwd`/packages/order-utils/node_modules/@0xproject; ln -s `pwd`/packages/json-schemas `pwd`/packages/order-utils/node_modules/@0xproject/json-schemas; ln -s `pwd`/packages/assert `pwd`/packages/order-utils/node_modules/@0xproject/assert; ln -s `pwd`/packages/types `pwd`/packages/order-utils/node_modules/@0xproject/types; rm -f `pwd`/packages/contracts/node_modules/@0xproject/types; ln -s `pwd`/packages/types `pwd`/packages/contracts/node_modules/@0xproject/types; rm -rf `pwd`/packages/fill-scenarios/node_modules/@0xproject; mkdir -p `pwd`/packages/fill-scenarios/node_modules/@0xproject; ln -s `pwd`/packages/types `pwd`/packages/fill-scenarios/node_modules/@0xproject/types; ln -s `pwd`/packages/json-schemas `pwd`/packages/fill-scenarios/node_modules/@0xproject/json-schemas; ln -s `pwd`/packages/order-utils `pwd`/packages/fill-scenarios/node_modules/@0xproject/order-utils; rm -rf `pwd`/packages/contract-wrappers/node_modules/@0xproject; mkdir -p `pwd`/packages/contract-wrappers/node_modules/@0xproject; ln -s `pwd`/packages/order-utils `pwd`/packages/contract-wrappers/node_modules/@0xproject/order-utils; ln -s `pwd`/packages/assert `pwd`/packages/contract-wrappers/node_modules/@0xproject/assert; ln -s `pwd`/packages/json-schemas `pwd`/packages/contract-wrappers/node_modules/@0xproject/json-schemas; ln -s `pwd`/packages/types `pwd`/packages/contract-wrappers/node_modules/@0xproject/types; ln -s `pwd`/packages/fill-scenarios `pwd`/packages/contract-wrappers/node_modules/@0xproject/fill-scenarios; rm -rf `pwd`/packages/assert/node_modules/@0xproject; mkdir -p `pwd`/packages/assert/node_modules/@0xproject; ln -s `pwd`/packages/json-schemas `pwd`/packages/assert/node_modules/@0xproject/json-schemas"
+ "postinstall": "rm -rf `pwd`/packages/0x.js/node_modules/@0xproject; mkdir `pwd`/packages/0x.js/node_modules/@0xproject; ln -s `pwd`/packages/contract-wrappers `pwd`/packages/0x.js/node_modules/@0xproject/contract-wrappers; ln -s `pwd`/packages/order-utils `pwd`/packages/0x.js/node_modules/@0xproject/order-utils; ln -s `pwd`/packages/types `pwd`/packages/0x.js/node_modules/@0xproject/types; rm -rf `pwd`/packages/order-utils/node_modules/@0xproject; mkdir `pwd`/packages/order-utils/node_modules/@0xproject; ln -s `pwd`/packages/json-schemas `pwd`/packages/order-utils/node_modules/@0xproject/json-schemas; ln -s `pwd`/packages/assert `pwd`/packages/order-utils/node_modules/@0xproject/assert; ln -s `pwd`/packages/types `pwd`/packages/order-utils/node_modules/@0xproject/types; rm -rf `pwd`/packages/fill-scenarios/node_modules/@0xproject; mkdir -p `pwd`/packages/fill-scenarios/node_modules/@0xproject; ln -s `pwd`/packages/types `pwd`/packages/fill-scenarios/node_modules/@0xproject/types; ln -s `pwd`/packages/json-schemas `pwd`/packages/fill-scenarios/node_modules/@0xproject/json-schemas; ln -s `pwd`/packages/order-utils `pwd`/packages/fill-scenarios/node_modules/@0xproject/order-utils; rm -rf `pwd`/packages/contract-wrappers/node_modules/@0xproject; mkdir -p `pwd`/packages/contract-wrappers/node_modules/@0xproject; ln -s `pwd`/packages/order-utils `pwd`/packages/contract-wrappers/node_modules/@0xproject/order-utils; ln -s `pwd`/packages/assert `pwd`/packages/contract-wrappers/node_modules/@0xproject/assert; ln -s `pwd`/packages/json-schemas `pwd`/packages/contract-wrappers/node_modules/@0xproject/json-schemas; ln -s `pwd`/packages/types `pwd`/packages/contract-wrappers/node_modules/@0xproject/types; ln -s `pwd`/packages/fill-scenarios `pwd`/packages/contract-wrappers/node_modules/@0xproject/fill-scenarios; rm -rf `pwd`/packages/assert/node_modules/@0xproject; mkdir -p `pwd`/packages/assert/node_modules/@0xproject; ln -s `pwd`/packages/json-schemas `pwd`/packages/assert/node_modules/@0xproject/json-schemas; rm -rf `pwd`/packages/order-watcher/node_modules/@0xproject; mkdir `pwd`/packages/order-watcher/node_modules/@0xproject; ln -s `pwd`/packages/assert `pwd`/packages/order-watcher/node_modules/@0xproject/assert; ln -s `pwd`/packages/json-schemas `pwd`/packages/order-watcher/node_modules/@0xproject/json-schemas; ln -s `pwd`/packages/order-utils `pwd`/packages/order-watcher/node_modules/@0xproject/order-utils; ln -s `pwd`/packages/types `pwd`/packages/order-watcher/node_modules/@0xproject/types; ln -s `pwd`/packages/contract-wrappers `pwd`/packages/order-watcher/node_modules/@0xproject/contract-wrappers; rm -rf `pwd`/packages/contracts/node_modules/@0xproject; mkdir `pwd`/packages/contracts/node_modules/@0xproject; ln -s `pwd`/packages/order-utils `pwd`/packages/contracts/node_modules/@0xproject/order-utils; ln -s `pwd`/packages/types `pwd`/packages/contracts/node_modules/@0xproject/types; rm -rf `pwd`/packages/migrations/node_modules/@0xproject; mkdir `pwd`/packages/migrations/node_modules/@0xproject; ln -s `pwd`/packages/order-utils `pwd`/packages/migrations/node_modules/@0xproject/order-utils"
},
"config": {
"mnemonic": "concert load couple harbor equip island argue ramp clarify fence smart topic"
@@ -41,7 +41,7 @@
"coveralls": "^3.0.0",
"ganache-cli": "6.1.3",
"lcov-result-merger": "^3.0.0",
- "lerna": "^2.5.1",
+ "lerna": "3.0.0-beta.14",
"npm-run-all": "^4.1.2",
"prettier": "^1.11.1",
"wsrun": "^2.2.0",
diff --git a/packages/0x.js/CHANGELOG.json b/packages/0x.js/CHANGELOG.json
index b39079ff2..27dafe4ca 100644
--- a/packages/0x.js/CHANGELOG.json
+++ b/packages/0x.js/CHANGELOG.json
@@ -1,5 +1,58 @@
[
{
+ "version": "1.0.0",
+ "changes": [
+ {
+ "note": "Remove tokenRegistry wrapper",
+ "pr": 863
+ },
+ {
+ "note": "Rename zeroEx.token to zeroEx.erc20Token, and add zeroEx.erc721Token",
+ "pr": 863
+ },
+ {
+ "note": "Rename zeroEx.proxy to zeroEx.erc20Proxy and add zeroEx.erc721Proxy",
+ "pr": 863
+ },
+ {
+ "note":
+ "Refactored ZeroEx.isValidSignature to zeroEx.isValidSignatureAsync. It is now async so that it can verify contract-dependent signature types",
+ "pr": 863
+ },
+ {
+ "note":
+ "Refactored signOrderHashAsync to ecSignOrderHashAsync. There are now many non-ECSignature ways to sign orders too.",
+ "pr": 863
+ },
+ {
+ "note":
+ "Removed createOrderWatcherAsync method. Will be added back once OrderWatcher is refactored for V2",
+ "pr": 863
+ },
+ {
+ "note": "0x.js exports renamed contract events and event arg types",
+ "pr": 863
+ },
+ {
+ "note": "Remove stateLayer config from OrderWatcher. It now always operates on the latest block",
+ "pr": 875
+ },
+ {
+ "note": "Export ZeroEx.assetData with methods to decode/encode assetData fields found in 0x orders",
+ "pr": 884
+ }
+ ]
+ },
+ {
+ "timestamp": 1531919263,
+ "version": "0.38.6",
+ "changes": [
+ {
+ "note": "Dependencies updated"
+ }
+ ]
+ },
+ {
"timestamp": 1531149657,
"version": "0.38.5",
"changes": [
diff --git a/packages/0x.js/CHANGELOG.md b/packages/0x.js/CHANGELOG.md
index 00048f610..f38529715 100644
--- a/packages/0x.js/CHANGELOG.md
+++ b/packages/0x.js/CHANGELOG.md
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
+## v0.38.6 - _July 18, 2018_
+
+ * Dependencies updated
+
## v0.38.5 - _July 9, 2018_
* Dependencies updated
diff --git a/packages/0x.js/package.json b/packages/0x.js/package.json
index 226452dbe..538eafd59 100644
--- a/packages/0x.js/package.json
+++ b/packages/0x.js/package.json
@@ -1,6 +1,6 @@
{
"name": "0x.js",
- "version": "0.38.5",
+ "version": "0.38.6",
"engines": {
"node": ">=6.12"
},
@@ -18,9 +18,10 @@
"watch_without_deps": "yarn pre_build && tsc -w",
"build": "yarn pre_build && yarn build:all && copyfiles -u 3 './lib/src/monorepo_scripts/**/*' ./scripts",
"build:all": "run-p build:umd:prod build:commonjs; exit 0;",
- "pre_build": "run-s generate_contract_wrappers copy_artifacts",
- "copy_artifacts": "copyfiles -u 2 './src/compact_artifacts/**/*.json' ./lib/src/compact_artifacts",
- "generate_contract_wrappers": "abi-gen --abis 'src/compact_artifacts/@(Exchange|Token|TokenTransferProxy|EtherToken|TokenRegistry|DummyToken).json' --template ../contract_templates/contract.handlebars --partials '../contract_templates/partials/**/*.handlebars' --output src/generated_contract_wrappers --backend ethers",
+ "pre_build": "run-s update_artifacts generate_contract_wrappers",
+ "copy_artifacts": "copyfiles -u 2 './src/artifacts/**/*.json' ./lib/src/artifacts",
+ "update_artifacts": "for i in ${npm_package_config_contracts}; do copyfiles -u 4 ../migrations/artifacts/2.0.0/$i.json src/artifacts; done;",
+ "generate_contract_wrappers": "abi-gen --abis 'src/artifacts/@(ZRXToken).json' --template ../contract_templates/contract.handlebars --partials '../contract_templates/partials/**/*.handlebars' --output src/generated_contract_wrappers --backend ethers",
"lint": "tslint --project . --exclude **/src/generated_contract_wrappers/**/*",
"test:circleci": "run-s test:coverage",
"test": "yarn run_mocha",
@@ -29,7 +30,7 @@
"coverage:report:lcov": "nyc report --reporter=text-lcov > coverage/lcov.info",
"clean": "shx rm -rf _bundles lib test_temp scripts src/generated_contract_wrappers",
"build:umd:prod": "NODE_ENV=production webpack",
- "build:commonjs": "tsc && copyfiles -u 2 './src/compact_artifacts/**/*.json' ./lib/src/compact_artifacts && copyfiles -u 3 './lib/src/monorepo_scripts/**/*' ./scripts",
+ "build:commonjs": "tsc && yarn copy_artifacts && copyfiles -u 3 './lib/src/monorepo_scripts/**/*' ./scripts",
"run_mocha": "mocha --require source-map-support/register --require make-promises-safe lib/test/**/*_test.js lib/test/global_hooks.js --timeout 10000 --bail --exit",
"manual:postpublish": "yarn build; node ./scripts/postpublish.js",
"docs:stage": "node scripts/stage_docs.js",
@@ -37,7 +38,7 @@
"upload_docs_json": "aws s3 cp generated_docs/index.json $S3_URL --profile 0xproject --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers --content-type application/json"
},
"config": {
- "compact_artifacts": "Exchange DummyToken ZRXToken Token EtherToken TokenTransferProxy TokenRegistry",
+ "contracts": "ZRXToken",
"postpublish": {
"assets": [
"packages/0x.js/_bundles/index.js",
@@ -69,12 +70,11 @@
},
"license": "Apache-2.0",
"devDependencies": {
- "@0xproject/abi-gen": "^0.3.3",
- "@0xproject/dev-utils": "^0.4.5",
- "@0xproject/migrations": "^0.0.9",
+ "@0xproject/abi-gen": "^0.3.4",
+ "@0xproject/dev-utils": "^0.4.6",
+ "@0xproject/migrations": "^0.0.10",
"@0xproject/monorepo-scripts": "^0.2.2",
"@0xproject/tslint-config": "^0.4.21",
- "@0xproject/sol-compiler": "^0.5.2",
"@types/lodash": "4.14.104",
"@types/mocha": "^2.2.42",
"@types/node": "^8.0.53",
@@ -94,22 +94,23 @@
"shx": "^0.2.2",
"sinon": "^4.0.0",
"source-map-support": "^0.5.0",
- "tslint": "5.8.0",
+ "tslint": "5.11.0",
"typedoc": "0xProject/typedoc",
"typescript": "2.7.1",
"webpack": "^3.1.0"
},
"dependencies": {
- "@0xproject/assert": "^0.2.13",
- "@0xproject/base-contract": "^0.3.5",
- "@0xproject/contract-wrappers": "^0.0.5",
- "@0xproject/order-utils": "^0.0.8",
- "@0xproject/order-watcher": "^0.0.7",
- "@0xproject/sol-compiler": "^0.5.3",
- "@0xproject/types": "^0.8.2",
- "@0xproject/typescript-typings": "^0.4.2",
- "@0xproject/utils": "^0.7.2",
- "@0xproject/web3-wrapper": "^0.7.2",
+ "@0xproject/assert": "^0.2.14",
+ "@0xproject/base-contract": "^0.3.6",
+ "@0xproject/contract-wrappers": "^0.1.1",
+ "@0xproject/order-utils": "^1.0.0",
+ "@0xproject/sol-compiler": "^0.5.4",
+ "@0xproject/subproviders": "^0.10.6",
+ "@0xproject/types": "^1.0.0",
+ "@0xproject/typescript-typings": "^0.4.3",
+ "@0xproject/utils": "^0.7.3",
+ "@0xproject/web3-wrapper": "^0.7.3",
+ "ethereum-types": "^0.0.2",
"ethers": "3.0.22",
"lodash": "^4.17.4"
},
diff --git a/packages/0x.js/src/0x.ts b/packages/0x.js/src/0x.ts
index 001f336e7..7c06a53af 100644
--- a/packages/0x.js/src/0x.ts
+++ b/packages/0x.js/src/0x.ts
@@ -2,23 +2,28 @@ import { assert } from '@0xproject/assert';
import {
ContractWrappers,
ContractWrappersConfig,
+ ERC20ProxyWrapper,
+ ERC20TokenWrapper,
+ ERC721ProxyWrapper,
+ ERC721TokenWrapper,
EtherTokenWrapper,
ExchangeWrapper,
- TokenRegistryWrapper,
- TokenTransferProxyWrapper,
- TokenWrapper,
} from '@0xproject/contract-wrappers';
import {
+ assetDataUtils,
+ ecSignOrderHashAsync,
generatePseudoRandomSalt,
- getOrderHashHex,
- isValidOrderHash,
- isValidSignature,
- signOrderHashAsync,
+ isValidSignatureAsync,
+ MessagePrefixOpts,
+ orderHashUtils,
} from '@0xproject/order-utils';
-import { OrderWatcher, OrderWatcherConfig } from '@0xproject/order-watcher';
-import { ECSignature, Order, Provider, SignedOrder, TransactionReceiptWithDecodedLogs } from '@0xproject/types';
+// HACK: Since we export assetDataUtils from ZeroEx and it has AssetProxyId, ERC20AssetData and ERC721AssetData
+// in it's public interface, we need to import these types here.
+// tslint:disable-next-line:no-unused-variable
+import { AssetProxyId, ECSignature, ERC20AssetData, ERC721AssetData, Order, SignedOrder } from '@0xproject/types';
import { BigNumber } from '@0xproject/utils';
import { Web3Wrapper } from '@0xproject/web3-wrapper';
+import { Provider, TransactionReceiptWithDecodedLogs } from 'ethereum-types';
import { constants } from './utils/constants';
@@ -34,29 +39,37 @@ export class ZeroEx {
*/
public static NULL_ADDRESS = constants.NULL_ADDRESS;
/**
+ * A set of methods to easily decode/encode assetData fields found in 0x orders.
+ */
+ public static assetData = assetDataUtils;
+ /**
* An instance of the ExchangeWrapper class containing methods for interacting with the 0x Exchange smart contract.
*/
public exchange: ExchangeWrapper;
/**
- * An instance of the TokenRegistryWrapper class containing methods for interacting with the 0x
- * TokenRegistry smart contract.
+ * An instance of the ERC20TokenWrapper class containing methods for interacting with any ERC20 token smart contract.
*/
- public tokenRegistry: TokenRegistryWrapper;
+ public erc20Token: ERC20TokenWrapper;
/**
- * An instance of the TokenWrapper class containing methods for interacting with any ERC20 token smart contract.
+ * An instance of the ERC721TokenWrapper class containing methods for interacting with any ERC721 token smart contract.
*/
- public token: TokenWrapper;
+ public erc721Token: ERC721TokenWrapper;
/**
* An instance of the EtherTokenWrapper class containing methods for interacting with the
* wrapped ETH ERC20 token smart contract.
*/
public etherToken: EtherTokenWrapper;
/**
- * An instance of the TokenTransferProxyWrapper class containing methods for interacting with the
- * tokenTransferProxy smart contract.
+ * An instance of the ERC20ProxyWrapper class containing methods for interacting with the
+ * ERC20 proxy smart contract.
+ */
+ public erc20Proxy: ERC20ProxyWrapper;
+ /**
+ * An instance of the ERC721ProxyWrapper class containing methods for interacting with the
+ * ERC721 proxy smart contract.
*/
- public proxy: TokenTransferProxyWrapper;
- private _contractWrappers: ContractWrappers;
+ public erc721Proxy: ERC721ProxyWrapper;
+ private readonly _contractWrappers: ContractWrappers;
/**
* Generates a pseudo-random 256-bit salt.
* The salt can be included in a 0x order, ensuring that the order generates a unique orderHash
@@ -67,23 +80,12 @@ export class ZeroEx {
return generatePseudoRandomSalt();
}
/**
- * Verifies that the elliptic curve signature `signature` was generated
- * by signing `data` with the private key corresponding to the `signerAddress` address.
- * @param data The hex encoded data signed by the supplied signature.
- * @param signature An object containing the elliptic curve signature parameters.
- * @param signerAddress The hex encoded address that signed the data, producing the supplied signature.
- * @return Whether the signature is valid for the supplied signerAddress and data.
- */
- public static isValidSignature(data: string, signature: ECSignature, signerAddress: string): boolean {
- return isValidSignature(data, signature, signerAddress);
- }
- /**
* Computes the orderHash for a supplied order.
* @param order An object that conforms to the Order or SignedOrder interface definitions.
* @return The resulting orderHash from hashing the supplied order.
*/
public static getOrderHashHex(order: Order | SignedOrder): string {
- return getOrderHashHex(order);
+ return orderHashUtils.getOrderHashHex(order);
}
/**
* Checks if the supplied hex encoded order hash is valid.
@@ -93,7 +95,7 @@ export class ZeroEx {
* @return Whether the supplied orderHash has the expected format.
*/
public static isValidOrderHash(orderHash: string): boolean {
- return isValidOrderHash(orderHash);
+ return orderHashUtils.isValidOrderHash(orderHash);
}
/**
* A unit amount is defined as the amount of a token above the specified decimal places (integer part).
@@ -134,13 +136,30 @@ export class ZeroEx {
assert.isWeb3Provider('provider', provider);
this._contractWrappers = new ContractWrappers(provider, config);
- this.proxy = this._contractWrappers.proxy;
- this.token = this._contractWrappers.token;
+ this.erc20Proxy = this._contractWrappers.erc20Proxy;
+ this.erc721Proxy = this._contractWrappers.erc721Proxy;
+ this.erc20Token = this._contractWrappers.erc20Token;
+ this.erc721Token = this._contractWrappers.erc721Token;
this.exchange = this._contractWrappers.exchange;
- this.tokenRegistry = this._contractWrappers.tokenRegistry;
this.etherToken = this._contractWrappers.etherToken;
}
/**
+ * Verifies that the provided signature is valid according to the 0x Protocol smart contracts
+ * @param data The hex encoded data signed by the supplied signature.
+ * @param signature The hex encoded signature.
+ * @param signerAddress The hex encoded address that signed the data, producing the supplied signature.
+ * @return Whether the signature is valid for the supplied signerAddress and data.
+ */
+ public async isValidSignatureAsync(data: string, signature: string, signerAddress: string): Promise<boolean> {
+ const isValid = await isValidSignatureAsync(
+ this._contractWrappers.getProvider(),
+ data,
+ signature,
+ signerAddress,
+ );
+ return isValid;
+ }
+ /**
* Sets a new web3 provider for 0x.js. Updating the provider will stop all
* subscriptions so you will need to re-subscribe to all events relevant to your app after this call.
* @param provider The Web3Provider you would like the 0x.js library to use from now on.
@@ -172,23 +191,21 @@ export class ZeroEx {
* @param orderHash Hex encoded orderHash to sign.
* @param signerAddress The hex encoded Ethereum address you wish to sign it with. This address
* must be available via the Provider supplied to 0x.js.
- * @param shouldAddPersonalMessagePrefix Some signers add the personal message prefix `\x19Ethereum Signed Message`
- * themselves (e.g Parity Signer, Ledger, TestRPC) and others expect it to already be done by the client
- * (e.g Metamask). Depending on which signer this request is going to, decide on whether to add the prefix
- * before sending the request.
+ * @param MessagePrefixOpts Options regarding the desired prefix and whether to add it before calling `eth_sign`
* @return An object containing the Elliptic curve signature parameters generated by signing the orderHash.
*/
- public async signOrderHashAsync(
+ public async ecSignOrderHashAsync(
orderHash: string,
signerAddress: string,
- shouldAddPersonalMessagePrefix: boolean,
+ messagePrefixOpts: MessagePrefixOpts,
): Promise<ECSignature> {
- return signOrderHashAsync(
+ const signature = await ecSignOrderHashAsync(
this._contractWrappers.getProvider(),
orderHash,
signerAddress,
- shouldAddPersonalMessagePrefix,
+ messagePrefixOpts,
);
+ return signature;
}
/**
* Waits for a transaction to be mined and returns the transaction receipt.
@@ -211,18 +228,4 @@ export class ZeroEx {
);
return transactionReceiptWithDecodedLogs;
}
- /**
- * Instantiates and returns a new OrderWatcher instance.
- * Defaults to watching the pending state.
- * @param config The configuration object. Look up the type for the description.
- * @return An instance of the 0x.js OrderWatcher class.
- */
- public async createOrderWatcherAsync(config?: OrderWatcherConfig): Promise<OrderWatcher> {
- // Hack: Get Web3Wrapper from ContractWrappers
- const web3Wrapper: Web3Wrapper = (this._contractWrappers as any)._web3Wrapper;
- const networkId = await web3Wrapper.getNetworkIdAsync();
- const provider = this._contractWrappers.getProvider();
- const orderWatcher = new OrderWatcher(provider, networkId, config);
- return orderWatcher;
- }
}
diff --git a/packages/0x.js/src/artifacts.ts b/packages/0x.js/src/artifacts.ts
new file mode 100644
index 000000000..f68969d28
--- /dev/null
+++ b/packages/0x.js/src/artifacts.ts
@@ -0,0 +1,7 @@
+import { ContractArtifact } from '@0xproject/sol-compiler';
+
+import * as ZRXToken from './artifacts/ZRXToken.json';
+
+export const artifacts = {
+ ZRXToken: (ZRXToken as any) as ContractArtifact,
+};
diff --git a/packages/0x.js/src/artifacts/ZRXToken.json b/packages/0x.js/src/artifacts/ZRXToken.json
new file mode 100644
index 000000000..0ce91c1c1
--- /dev/null
+++ b/packages/0x.js/src/artifacts/ZRXToken.json
@@ -0,0 +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": "[]"
+ }
+ }
+} \ No newline at end of file
diff --git a/packages/0x.js/src/compact_artifacts/DummyToken.json b/packages/0x.js/src/compact_artifacts/DummyToken.json
deleted file mode 100644
index f64a8cd3d..000000000
--- a/packages/0x.js/src/compact_artifacts/DummyToken.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "contract_name": "DummyToken",
- "abi": [
- {
- "constant": false,
- "inputs": [
- {
- "name": "_target",
- "type": "address"
- },
- {
- "name": "_value",
- "type": "uint256"
- }
- ],
- "name": "setBalance",
- "outputs": [],
- "payable": false,
- "type": "function"
- }
- ]
-}
diff --git a/packages/0x.js/src/compact_artifacts/EtherToken.json b/packages/0x.js/src/compact_artifacts/EtherToken.json
deleted file mode 100644
index 26cca57cd..000000000
--- a/packages/0x.js/src/compact_artifacts/EtherToken.json
+++ /dev/null
@@ -1,287 +0,0 @@
-{
- "contract_name": "EtherToken",
- "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": false,
- "inputs": [
- {
- "name": "amount",
- "type": "uint256"
- }
- ],
- "name": "withdraw",
- "outputs": [],
- "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": false,
- "inputs": [],
- "name": "deposit",
- "outputs": [],
- "payable": true,
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "name": "_owner",
- "type": "address"
- },
- {
- "name": "_spender",
- "type": "address"
- }
- ],
- "name": "allowance",
- "outputs": [
- {
- "name": "",
- "type": "uint256"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "payable": true,
- "type": "fallback"
- },
- {
- "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"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "name": "_owner",
- "type": "address"
- },
- {
- "indexed": false,
- "name": "_value",
- "type": "uint256"
- }
- ],
- "name": "Deposit",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "name": "_owner",
- "type": "address"
- },
- {
- "indexed": false,
- "name": "_value",
- "type": "uint256"
- }
- ],
- "name": "Withdrawal",
- "type": "event"
- }
- ],
- "networks": {
- "1": {
- "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"
- },
- "3": {
- "address": "0xc00fd9820cd2898cc4c054b7bf142de637ad129a"
- },
- "4": {
- "address": "0xc778417e063141139fce010982780140aa0cd5ab"
- },
- "42": {
- "address": "0x653e49e301e508a13237c0ddc98ae7d4cd2667a1"
- },
- "50": {
- "address": "0x871dd7c2b4b25e1aa18728e9d5f2af4c4e431f5c"
- }
- }
-}
diff --git a/packages/0x.js/src/compact_artifacts/Exchange.json b/packages/0x.js/src/compact_artifacts/Exchange.json
deleted file mode 100644
index af8db7360..000000000
--- a/packages/0x.js/src/compact_artifacts/Exchange.json
+++ /dev/null
@@ -1,610 +0,0 @@
-{
- "contract_name": "Exchange",
- "abi": [
- {
- "constant": true,
- "inputs": [
- {
- "name": "numerator",
- "type": "uint256"
- },
- {
- "name": "denominator",
- "type": "uint256"
- },
- {
- "name": "target",
- "type": "uint256"
- }
- ],
- "name": "isRoundingError",
- "outputs": [
- {
- "name": "",
- "type": "bool"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "name": "",
- "type": "bytes32"
- }
- ],
- "name": "filled",
- "outputs": [
- {
- "name": "",
- "type": "uint256"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "name": "",
- "type": "bytes32"
- }
- ],
- "name": "cancelled",
- "outputs": [
- {
- "name": "",
- "type": "uint256"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "name": "orderAddresses",
- "type": "address[5][]"
- },
- {
- "name": "orderValues",
- "type": "uint256[6][]"
- },
- {
- "name": "fillTakerTokenAmount",
- "type": "uint256"
- },
- {
- "name": "shouldThrowOnInsufficientBalanceOrAllowance",
- "type": "bool"
- },
- {
- "name": "v",
- "type": "uint8[]"
- },
- {
- "name": "r",
- "type": "bytes32[]"
- },
- {
- "name": "s",
- "type": "bytes32[]"
- }
- ],
- "name": "fillOrdersUpTo",
- "outputs": [
- {
- "name": "",
- "type": "uint256"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "name": "orderAddresses",
- "type": "address[5]"
- },
- {
- "name": "orderValues",
- "type": "uint256[6]"
- },
- {
- "name": "cancelTakerTokenAmount",
- "type": "uint256"
- }
- ],
- "name": "cancelOrder",
- "outputs": [
- {
- "name": "",
- "type": "uint256"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [],
- "name": "ZRX_TOKEN_CONTRACT",
- "outputs": [
- {
- "name": "",
- "type": "address"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "name": "orderAddresses",
- "type": "address[5][]"
- },
- {
- "name": "orderValues",
- "type": "uint256[6][]"
- },
- {
- "name": "fillTakerTokenAmounts",
- "type": "uint256[]"
- },
- {
- "name": "v",
- "type": "uint8[]"
- },
- {
- "name": "r",
- "type": "bytes32[]"
- },
- {
- "name": "s",
- "type": "bytes32[]"
- }
- ],
- "name": "batchFillOrKillOrders",
- "outputs": [],
- "payable": false,
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "name": "orderAddresses",
- "type": "address[5]"
- },
- {
- "name": "orderValues",
- "type": "uint256[6]"
- },
- {
- "name": "fillTakerTokenAmount",
- "type": "uint256"
- },
- {
- "name": "v",
- "type": "uint8"
- },
- {
- "name": "r",
- "type": "bytes32"
- },
- {
- "name": "s",
- "type": "bytes32"
- }
- ],
- "name": "fillOrKillOrder",
- "outputs": [],
- "payable": false,
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "name": "orderHash",
- "type": "bytes32"
- }
- ],
- "name": "getUnavailableTakerTokenAmount",
- "outputs": [
- {
- "name": "",
- "type": "uint256"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "name": "signer",
- "type": "address"
- },
- {
- "name": "hash",
- "type": "bytes32"
- },
- {
- "name": "v",
- "type": "uint8"
- },
- {
- "name": "r",
- "type": "bytes32"
- },
- {
- "name": "s",
- "type": "bytes32"
- }
- ],
- "name": "isValidSignature",
- "outputs": [
- {
- "name": "",
- "type": "bool"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "name": "numerator",
- "type": "uint256"
- },
- {
- "name": "denominator",
- "type": "uint256"
- },
- {
- "name": "target",
- "type": "uint256"
- }
- ],
- "name": "getPartialAmount",
- "outputs": [
- {
- "name": "",
- "type": "uint256"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [],
- "name": "TOKEN_TRANSFER_PROXY_CONTRACT",
- "outputs": [
- {
- "name": "",
- "type": "address"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "name": "orderAddresses",
- "type": "address[5][]"
- },
- {
- "name": "orderValues",
- "type": "uint256[6][]"
- },
- {
- "name": "fillTakerTokenAmounts",
- "type": "uint256[]"
- },
- {
- "name": "shouldThrowOnInsufficientBalanceOrAllowance",
- "type": "bool"
- },
- {
- "name": "v",
- "type": "uint8[]"
- },
- {
- "name": "r",
- "type": "bytes32[]"
- },
- {
- "name": "s",
- "type": "bytes32[]"
- }
- ],
- "name": "batchFillOrders",
- "outputs": [],
- "payable": false,
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "name": "orderAddresses",
- "type": "address[5][]"
- },
- {
- "name": "orderValues",
- "type": "uint256[6][]"
- },
- {
- "name": "cancelTakerTokenAmounts",
- "type": "uint256[]"
- }
- ],
- "name": "batchCancelOrders",
- "outputs": [],
- "payable": false,
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "name": "orderAddresses",
- "type": "address[5]"
- },
- {
- "name": "orderValues",
- "type": "uint256[6]"
- },
- {
- "name": "fillTakerTokenAmount",
- "type": "uint256"
- },
- {
- "name": "shouldThrowOnInsufficientBalanceOrAllowance",
- "type": "bool"
- },
- {
- "name": "v",
- "type": "uint8"
- },
- {
- "name": "r",
- "type": "bytes32"
- },
- {
- "name": "s",
- "type": "bytes32"
- }
- ],
- "name": "fillOrder",
- "outputs": [
- {
- "name": "filledTakerTokenAmount",
- "type": "uint256"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "name": "orderAddresses",
- "type": "address[5]"
- },
- {
- "name": "orderValues",
- "type": "uint256[6]"
- }
- ],
- "name": "getOrderHash",
- "outputs": [
- {
- "name": "",
- "type": "bytes32"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [],
- "name": "EXTERNAL_QUERY_GAS_LIMIT",
- "outputs": [
- {
- "name": "",
- "type": "uint16"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [],
- "name": "VERSION",
- "outputs": [
- {
- "name": "",
- "type": "string"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "inputs": [
- {
- "name": "_zrxToken",
- "type": "address"
- },
- {
- "name": "_tokenTransferProxy",
- "type": "address"
- }
- ],
- "payable": false,
- "type": "constructor"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "name": "maker",
- "type": "address"
- },
- {
- "indexed": false,
- "name": "taker",
- "type": "address"
- },
- {
- "indexed": true,
- "name": "feeRecipient",
- "type": "address"
- },
- {
- "indexed": false,
- "name": "makerToken",
- "type": "address"
- },
- {
- "indexed": false,
- "name": "takerToken",
- "type": "address"
- },
- {
- "indexed": false,
- "name": "filledMakerTokenAmount",
- "type": "uint256"
- },
- {
- "indexed": false,
- "name": "filledTakerTokenAmount",
- "type": "uint256"
- },
- {
- "indexed": false,
- "name": "paidMakerFee",
- "type": "uint256"
- },
- {
- "indexed": false,
- "name": "paidTakerFee",
- "type": "uint256"
- },
- {
- "indexed": true,
- "name": "tokens",
- "type": "bytes32"
- },
- {
- "indexed": false,
- "name": "orderHash",
- "type": "bytes32"
- }
- ],
- "name": "LogFill",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "name": "maker",
- "type": "address"
- },
- {
- "indexed": true,
- "name": "feeRecipient",
- "type": "address"
- },
- {
- "indexed": false,
- "name": "makerToken",
- "type": "address"
- },
- {
- "indexed": false,
- "name": "takerToken",
- "type": "address"
- },
- {
- "indexed": false,
- "name": "cancelledMakerTokenAmount",
- "type": "uint256"
- },
- {
- "indexed": false,
- "name": "cancelledTakerTokenAmount",
- "type": "uint256"
- },
- {
- "indexed": true,
- "name": "tokens",
- "type": "bytes32"
- },
- {
- "indexed": false,
- "name": "orderHash",
- "type": "bytes32"
- }
- ],
- "name": "LogCancel",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "name": "errorId",
- "type": "uint8"
- },
- {
- "indexed": true,
- "name": "orderHash",
- "type": "bytes32"
- }
- ],
- "name": "LogError",
- "type": "event"
- }
- ],
- "networks": {
- "1": {
- "address": "0x12459c951127e0c374ff9105dda097662a027093"
- },
- "3": {
- "address": "0x479cc461fecd078f766ecc58533d6f69580cf3ac"
- },
- "4": {
- "address": "0x1d16ef40fac01cec8adac2ac49427b9384192c05"
- },
- "42": {
- "address": "0x90fe2af704b34e0224bf2299c838e04d4dcf1364"
- },
- "50": {
- "address": "0x48bacb9266a570d521063ef5dd96e61686dbe788"
- }
- }
-}
diff --git a/packages/0x.js/src/compact_artifacts/Token.json b/packages/0x.js/src/compact_artifacts/Token.json
deleted file mode 100644
index 3b5a86ae0..000000000
--- a/packages/0x.js/src/compact_artifacts/Token.json
+++ /dev/null
@@ -1,172 +0,0 @@
-{
- "contract_name": "Token",
- "abi": [
- {
- "constant": false,
- "inputs": [
- {
- "name": "_spender",
- "type": "address"
- },
- {
- "name": "_value",
- "type": "uint256"
- }
- ],
- "name": "approve",
- "outputs": [
- {
- "name": "success",
- "type": "bool"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [],
- "name": "totalSupply",
- "outputs": [
- {
- "name": "supply",
- "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": "success",
- "type": "bool"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "name": "_owner",
- "type": "address"
- }
- ],
- "name": "balanceOf",
- "outputs": [
- {
- "name": "balance",
- "type": "uint256"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "name": "_to",
- "type": "address"
- },
- {
- "name": "_value",
- "type": "uint256"
- }
- ],
- "name": "transfer",
- "outputs": [
- {
- "name": "success",
- "type": "bool"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "name": "_owner",
- "type": "address"
- },
- {
- "name": "_spender",
- "type": "address"
- }
- ],
- "name": "allowance",
- "outputs": [
- {
- "name": "remaining",
- "type": "uint256"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "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"
- }
- ]
-}
diff --git a/packages/0x.js/src/compact_artifacts/TokenRegistry.json b/packages/0x.js/src/compact_artifacts/TokenRegistry.json
deleted file mode 100644
index 0f583628c..000000000
--- a/packages/0x.js/src/compact_artifacts/TokenRegistry.json
+++ /dev/null
@@ -1,547 +0,0 @@
-{
- "contract_name": "TokenRegistry",
- "abi": [
- {
- "constant": false,
- "inputs": [
- {
- "name": "_token",
- "type": "address"
- },
- {
- "name": "_index",
- "type": "uint256"
- }
- ],
- "name": "removeToken",
- "outputs": [],
- "payable": false,
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "name": "_name",
- "type": "string"
- }
- ],
- "name": "getTokenAddressByName",
- "outputs": [
- {
- "name": "",
- "type": "address"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "name": "_symbol",
- "type": "string"
- }
- ],
- "name": "getTokenAddressBySymbol",
- "outputs": [
- {
- "name": "",
- "type": "address"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "name": "_token",
- "type": "address"
- },
- {
- "name": "_swarmHash",
- "type": "bytes"
- }
- ],
- "name": "setTokenSwarmHash",
- "outputs": [],
- "payable": false,
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "name": "_token",
- "type": "address"
- }
- ],
- "name": "getTokenMetaData",
- "outputs": [
- {
- "name": "",
- "type": "address"
- },
- {
- "name": "",
- "type": "string"
- },
- {
- "name": "",
- "type": "string"
- },
- {
- "name": "",
- "type": "uint8"
- },
- {
- "name": "",
- "type": "bytes"
- },
- {
- "name": "",
- "type": "bytes"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [],
- "name": "owner",
- "outputs": [
- {
- "name": "",
- "type": "address"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "name": "_token",
- "type": "address"
- },
- {
- "name": "_name",
- "type": "string"
- },
- {
- "name": "_symbol",
- "type": "string"
- },
- {
- "name": "_decimals",
- "type": "uint8"
- },
- {
- "name": "_ipfsHash",
- "type": "bytes"
- },
- {
- "name": "_swarmHash",
- "type": "bytes"
- }
- ],
- "name": "addToken",
- "outputs": [],
- "payable": false,
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "name": "_token",
- "type": "address"
- },
- {
- "name": "_name",
- "type": "string"
- }
- ],
- "name": "setTokenName",
- "outputs": [],
- "payable": false,
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "name": "",
- "type": "address"
- }
- ],
- "name": "tokens",
- "outputs": [
- {
- "name": "token",
- "type": "address"
- },
- {
- "name": "name",
- "type": "string"
- },
- {
- "name": "symbol",
- "type": "string"
- },
- {
- "name": "decimals",
- "type": "uint8"
- },
- {
- "name": "ipfsHash",
- "type": "bytes"
- },
- {
- "name": "swarmHash",
- "type": "bytes"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "name": "",
- "type": "uint256"
- }
- ],
- "name": "tokenAddresses",
- "outputs": [
- {
- "name": "",
- "type": "address"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "name": "_name",
- "type": "string"
- }
- ],
- "name": "getTokenByName",
- "outputs": [
- {
- "name": "",
- "type": "address"
- },
- {
- "name": "",
- "type": "string"
- },
- {
- "name": "",
- "type": "string"
- },
- {
- "name": "",
- "type": "uint8"
- },
- {
- "name": "",
- "type": "bytes"
- },
- {
- "name": "",
- "type": "bytes"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [],
- "name": "getTokenAddresses",
- "outputs": [
- {
- "name": "",
- "type": "address[]"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "name": "_token",
- "type": "address"
- },
- {
- "name": "_ipfsHash",
- "type": "bytes"
- }
- ],
- "name": "setTokenIpfsHash",
- "outputs": [],
- "payable": false,
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "name": "_symbol",
- "type": "string"
- }
- ],
- "name": "getTokenBySymbol",
- "outputs": [
- {
- "name": "",
- "type": "address"
- },
- {
- "name": "",
- "type": "string"
- },
- {
- "name": "",
- "type": "string"
- },
- {
- "name": "",
- "type": "uint8"
- },
- {
- "name": "",
- "type": "bytes"
- },
- {
- "name": "",
- "type": "bytes"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "name": "_token",
- "type": "address"
- },
- {
- "name": "_symbol",
- "type": "string"
- }
- ],
- "name": "setTokenSymbol",
- "outputs": [],
- "payable": false,
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "name": "newOwner",
- "type": "address"
- }
- ],
- "name": "transferOwnership",
- "outputs": [],
- "payable": false,
- "type": "function"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "name": "token",
- "type": "address"
- },
- {
- "indexed": false,
- "name": "name",
- "type": "string"
- },
- {
- "indexed": false,
- "name": "symbol",
- "type": "string"
- },
- {
- "indexed": false,
- "name": "decimals",
- "type": "uint8"
- },
- {
- "indexed": false,
- "name": "ipfsHash",
- "type": "bytes"
- },
- {
- "indexed": false,
- "name": "swarmHash",
- "type": "bytes"
- }
- ],
- "name": "LogAddToken",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "name": "token",
- "type": "address"
- },
- {
- "indexed": false,
- "name": "name",
- "type": "string"
- },
- {
- "indexed": false,
- "name": "symbol",
- "type": "string"
- },
- {
- "indexed": false,
- "name": "decimals",
- "type": "uint8"
- },
- {
- "indexed": false,
- "name": "ipfsHash",
- "type": "bytes"
- },
- {
- "indexed": false,
- "name": "swarmHash",
- "type": "bytes"
- }
- ],
- "name": "LogRemoveToken",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "name": "token",
- "type": "address"
- },
- {
- "indexed": false,
- "name": "oldName",
- "type": "string"
- },
- {
- "indexed": false,
- "name": "newName",
- "type": "string"
- }
- ],
- "name": "LogTokenNameChange",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "name": "token",
- "type": "address"
- },
- {
- "indexed": false,
- "name": "oldSymbol",
- "type": "string"
- },
- {
- "indexed": false,
- "name": "newSymbol",
- "type": "string"
- }
- ],
- "name": "LogTokenSymbolChange",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "name": "token",
- "type": "address"
- },
- {
- "indexed": false,
- "name": "oldIpfsHash",
- "type": "bytes"
- },
- {
- "indexed": false,
- "name": "newIpfsHash",
- "type": "bytes"
- }
- ],
- "name": "LogTokenIpfsHashChange",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "name": "token",
- "type": "address"
- },
- {
- "indexed": false,
- "name": "oldSwarmHash",
- "type": "bytes"
- },
- {
- "indexed": false,
- "name": "newSwarmHash",
- "type": "bytes"
- }
- ],
- "name": "LogTokenSwarmHashChange",
- "type": "event"
- }
- ],
- "networks": {
- "1": {
- "address": "0x926a74c5c36adf004c87399e65f75628b0f98d2c"
- },
- "3": {
- "address": "0x6b1a50f0bb5a7995444bd3877b22dc89c62843ed"
- },
- "4": {
- "address": "0x4e9aad8184de8833365fea970cd9149372fdf1e6"
- },
- "42": {
- "address": "0xf18e504561f4347bea557f3d4558f559dddbae7f"
- },
- "50": {
- "address": "0x0b1ba0af832d7c05fd64161e0db78e85978e8082"
- }
- }
-}
diff --git a/packages/0x.js/src/compact_artifacts/TokenTransferProxy.json b/packages/0x.js/src/compact_artifacts/TokenTransferProxy.json
deleted file mode 100644
index 8cf551ddb..000000000
--- a/packages/0x.js/src/compact_artifacts/TokenTransferProxy.json
+++ /dev/null
@@ -1,187 +0,0 @@
-{
- "contract_name": "TokenTransferProxy",
- "abi": [
- {
- "constant": false,
- "inputs": [
- {
- "name": "token",
- "type": "address"
- },
- {
- "name": "from",
- "type": "address"
- },
- {
- "name": "to",
- "type": "address"
- },
- {
- "name": "value",
- "type": "uint256"
- }
- ],
- "name": "transferFrom",
- "outputs": [
- {
- "name": "",
- "type": "bool"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "name": "target",
- "type": "address"
- }
- ],
- "name": "addAuthorizedAddress",
- "outputs": [],
- "payable": false,
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "name": "",
- "type": "uint256"
- }
- ],
- "name": "authorities",
- "outputs": [
- {
- "name": "",
- "type": "address"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "name": "target",
- "type": "address"
- }
- ],
- "name": "removeAuthorizedAddress",
- "outputs": [],
- "payable": false,
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [],
- "name": "owner",
- "outputs": [
- {
- "name": "",
- "type": "address"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "name": "",
- "type": "address"
- }
- ],
- "name": "authorized",
- "outputs": [
- {
- "name": "",
- "type": "bool"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [],
- "name": "getAuthorizedAddresses",
- "outputs": [
- {
- "name": "",
- "type": "address[]"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "name": "newOwner",
- "type": "address"
- }
- ],
- "name": "transferOwnership",
- "outputs": [],
- "payable": false,
- "type": "function"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "name": "target",
- "type": "address"
- },
- {
- "indexed": true,
- "name": "caller",
- "type": "address"
- }
- ],
- "name": "LogAuthorizedAddressAdded",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "name": "target",
- "type": "address"
- },
- {
- "indexed": true,
- "name": "caller",
- "type": "address"
- }
- ],
- "name": "LogAuthorizedAddressRemoved",
- "type": "event"
- }
- ],
- "networks": {
- "1": {
- "address": "0x8da0d80f5007ef1e431dd2127178d224e32c2ef4"
- },
- "3": {
- "address": "0x4e9aad8184de8833365fea970cd9149372fdf1e6"
- },
- "4": {
- "address": "0xa8e9fa8f91e5ae138c74648c9c304f1c75003a8d"
- },
- "42": {
- "address": "0x087eed4bc1ee3de49befbd66c662b434b15d49d4"
- },
- "50": {
- "address": "0x1dc4c1cefef38a777b15aa20260a54e584b16c48"
- }
- }
-}
diff --git a/packages/0x.js/src/compact_artifacts/ZRX.json b/packages/0x.js/src/compact_artifacts/ZRX.json
deleted file mode 100644
index e40b8f268..000000000
--- a/packages/0x.js/src/compact_artifacts/ZRX.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "contract_name": "ZRX",
- "networks": {
- "1": {
- "address": "0xe41d2489571d322189246dafa5ebde1f4699f498"
- },
- "3": {
- "address": "0xa8e9fa8f91e5ae138c74648c9c304f1c75003a8d"
- },
- "4": {
- "address": "0x00f58d6d585f84b2d7267940cede30ce2fe6eae8"
- },
- "42": {
- "address": "0x6ff6c0ff1d68b964901f986d4c9fa3ac68346570"
- },
- "50": {
- "address": "0x1d7022f5b17d2f8b695918fb48fa1089c9f85401"
- }
- }
-}
diff --git a/packages/0x.js/src/index.ts b/packages/0x.js/src/index.ts
index 5c7ad6e1c..95ca07eea 100644
--- a/packages/0x.js/src/index.ts
+++ b/packages/0x.js/src/index.ts
@@ -1,32 +1,38 @@
export { ZeroEx } from './0x';
+export { MessagePrefixType, MessagePrefixOpts } from '@0xproject/order-utils';
+export { Web3ProviderEngine, RPCSubprovider } from '@0xproject/subproviders';
+
export {
- BlockParamLiteral,
- FilterObject,
- BlockParam,
- ContractEventArg,
ExchangeContractErrs,
- LogWithDecodedArgs,
Order,
- Provider,
SignedOrder,
ECSignature,
OrderStateValid,
OrderStateInvalid,
OrderState,
Token,
- TransactionReceipt,
- TransactionReceiptWithDecodedLogs,
+ ERC20AssetData,
+ ERC721AssetData,
+ AssetProxyId,
} from '@0xproject/types';
-export { OrderWatcherConfig } from '@0xproject/order-watcher';
+export {
+ BlockParamLiteral,
+ FilterObject,
+ BlockParam,
+ LogWithDecodedArgs,
+ ContractEventArg,
+ Provider,
+ TransactionReceipt,
+ TransactionReceiptWithDecodedLogs,
+} from 'ethereum-types';
export {
EventCallback,
ContractEvent,
IndexedFilterValues,
BlockRange,
- OrderCancellationRequest,
OrderFillRequest,
ContractEventArgs,
MethodOpts,
@@ -36,18 +42,25 @@ export {
DecodedLogEvent,
OnOrderStateChangeCallback,
ContractWrappersError,
- EtherTokenContractEventArgs,
- WithdrawalContractEventArgs,
- DepositContractEventArgs,
- EtherTokenEvents,
- TransferContractEventArgs,
- ApprovalContractEventArgs,
- TokenContractEventArgs,
- TokenEvents,
- LogErrorContractEventArgs,
- LogCancelContractEventArgs,
- LogFillContractEventArgs,
- ExchangeContractEventArgs,
- ExchangeEvents,
+ WETH9Events,
+ WETH9WithdrawalEventArgs,
+ WETH9ApprovalEventArgs,
+ WETH9EventArgs,
+ WETH9DepositEventArgs,
+ WETH9TransferEventArgs,
+ ERC20TokenTransferEventArgs,
+ ERC20TokenApprovalEventArgs,
+ ERC20TokenEvents,
+ ERC20TokenEventArgs,
+ ERC721TokenApprovalEventArgs,
+ ERC721TokenApprovalForAllEventArgs,
+ ERC721TokenTransferEventArgs,
+ ERC721TokenEvents,
+ ExchangeCancelUpToEventArgs,
+ ExchangeAssetProxyRegisteredEventArgs,
+ ExchangeFillEventArgs,
+ ExchangeCancelEventArgs,
+ ExchangeEventArgs,
ContractWrappersConfig,
+ OrderInfo,
} from '@0xproject/contract-wrappers';
diff --git a/packages/0x.js/src/schemas/zero_ex_private_network_config_schema.ts b/packages/0x.js/src/schemas/zero_ex_private_network_config_schema.ts
index f7f649a6d..378b86e77 100644
--- a/packages/0x.js/src/schemas/zero_ex_private_network_config_schema.ts
+++ b/packages/0x.js/src/schemas/zero_ex_private_network_config_schema.ts
@@ -8,8 +8,8 @@ export const zeroExPrivateNetworkConfigSchema = {
gasPrice: { $ref: '/Number' },
zrxContractAddress: { $ref: '/Address' },
exchangeContractAddress: { $ref: '/Address' },
- tokenRegistryContractAddress: { $ref: '/Address' },
- tokenTransferProxyContractAddress: { $ref: '/Address' },
+ erc20ProxyContractAddress: { $ref: '/Address' },
+ erc721ProxyContractAddress: { $ref: '/Address' },
orderWatcherConfig: {
type: 'object',
properties: {
@@ -29,7 +29,7 @@ export const zeroExPrivateNetworkConfigSchema = {
'networkId',
'zrxContractAddress',
'exchangeContractAddress',
- 'tokenRegistryContractAddress',
- 'tokenTransferProxyContractAddress',
+ 'erc20ProxyContractAddress',
+ 'erc721ProxyContractAddress',
],
};
diff --git a/packages/0x.js/src/schemas/zero_ex_public_network_config_schema.ts b/packages/0x.js/src/schemas/zero_ex_public_network_config_schema.ts
index f7f6727f0..f2a9a4d56 100644
--- a/packages/0x.js/src/schemas/zero_ex_public_network_config_schema.ts
+++ b/packages/0x.js/src/schemas/zero_ex_public_network_config_schema.ts
@@ -22,8 +22,8 @@ export const zeroExPublicNetworkConfigSchema = {
gasPrice: { $ref: '/Number' },
zrxContractAddress: { $ref: '/Address' },
exchangeContractAddress: { $ref: '/Address' },
- tokenRegistryContractAddress: { $ref: '/Address' },
- tokenTransferProxyContractAddress: { $ref: '/Address' },
+ erc20ProxyContractAddress: { $ref: '/Address' },
+ erc721ProxyContractAddress: { $ref: '/Address' },
orderWatcherConfig: {
type: 'object',
properties: {
diff --git a/packages/0x.js/test/0x.js_test.ts b/packages/0x.js/test/0x.js_test.ts
index 425fc6380..b4baecb1e 100644
--- a/packages/0x.js/test/0x.js_test.ts
+++ b/packages/0x.js/test/0x.js_test.ts
@@ -2,14 +2,13 @@ import { ContractWrappers } from '@0xproject/contract-wrappers';
import { BlockchainLifecycle } from '@0xproject/dev-utils';
import { BigNumber } from '@0xproject/utils';
import * as chai from 'chai';
-import * as _ from 'lodash';
import 'mocha';
-import { ApprovalContractEventArgs, LogWithDecodedArgs, TokenEvents, ZeroEx } from '../src';
+import { ERC20TokenApprovalEventArgs, ERC20TokenEvents, LogWithDecodedArgs, ZeroEx } from '../src';
import { chaiSetup } from './utils/chai_setup';
import { constants } from './utils/constants';
-import { TokenUtils } from './utils/token_utils';
+import { tokenUtils } from './utils/token_utils';
import { provider, web3Wrapper } from './utils/web3_wrapper';
const blockchainLifecycle = new BlockchainLifecycle(web3Wrapper);
@@ -28,9 +27,7 @@ describe('ZeroEx library', () => {
it('overrides provider in nested web3s and invalidates contractInstances', async () => {
// Instantiate the contract instances with the current provider
await (zeroEx.exchange as any)._getExchangeContractAsync();
- await (zeroEx.tokenRegistry as any)._getTokenRegistryContractAsync();
expect((zeroEx.exchange as any)._exchangeContractIfExists).to.not.be.undefined();
- expect((zeroEx.tokenRegistry as any)._tokenRegistryContractIfExists).to.not.be.undefined();
// Add property to newProvider so that we can differentiate it from old provider
(provider as any).zeroExTestId = 1;
@@ -38,52 +35,43 @@ describe('ZeroEx library', () => {
// Check that contractInstances with old provider are removed after provider update
expect((zeroEx.exchange as any)._exchangeContractIfExists).to.be.undefined();
- expect((zeroEx.tokenRegistry as any)._tokenRegistryContractIfExists).to.be.undefined();
// Check that all nested zeroExContract/web3Wrapper instances return the updated provider
const nestedWeb3WrapperProvider = ((zeroEx as any)._contractWrappers as ContractWrappers).getProvider();
expect((nestedWeb3WrapperProvider as any).zeroExTestId).to.be.a('number');
const exchangeWeb3WrapperProvider = (zeroEx.exchange as any)._web3Wrapper.getProvider();
expect(exchangeWeb3WrapperProvider.zeroExTestId).to.be.a('number');
- const tokenRegistryWeb3WrapperProvider = (zeroEx.tokenRegistry as any)._web3Wrapper.getProvider();
- expect(tokenRegistryWeb3WrapperProvider.zeroExTestId).to.be.a('number');
});
});
describe('#isValidSignature', () => {
- // The Exchange smart contract `isValidSignature` method only validates orderHashes and assumes
- // the length of the data is exactly 32 bytes. Thus for these tests, we use data of this size.
const dataHex = '0x6927e990021d23b1eb7b8789f6a6feaf98fe104bb0cf8259421b79f9a34222b0';
- const signature = {
- v: 27,
- r: '0x61a3ed31b43c8780e905a260a35faefcc527be7516aa11c0256729b5b351bc33',
- s: '0x40349190569279751135161d22529dc25add4f6069af05be04cacbda2ace2254',
- };
+ const ethSignSignature =
+ '0x1B61a3ed31b43c8780e905a260a35faefcc527be7516aa11c0256729b5b351bc3340349190569279751135161d22529dc25add4f6069af05be04cacbda2ace225403';
const address = '0x5409ed021d9299bf6814279a6a1411a7e866a631';
it("should return false if the data doesn't pertain to the signature & address", async () => {
- return expect(
- (zeroEx.exchange as any)._isValidSignatureUsingContractCallAsync('0x0', signature, address),
- ).to.become(false);
+ return expect((zeroEx.exchange as any).isValidSignatureAsync('0x0', address, ethSignSignature)).to.become(
+ false,
+ );
});
it("should return false if the address doesn't pertain to the signature & data", async () => {
const validUnrelatedAddress = '0x8b0292b11a196601ed2ce54b665cafeca0347d42';
return expect(
- (zeroEx.exchange as any)._isValidSignatureUsingContractCallAsync(
- dataHex,
- signature,
- validUnrelatedAddress,
- ),
+ (zeroEx.exchange as any).isValidSignatureAsync(dataHex, validUnrelatedAddress, ethSignSignature),
).to.become(false);
});
it("should return false if the signature doesn't pertain to the dataHex & address", async () => {
- const wrongSignature = _.assign({}, signature, { v: 28 });
- return expect(
- (zeroEx.exchange as any)._isValidSignatureUsingContractCallAsync(dataHex, wrongSignature, address),
- ).to.become(false);
+ const signatureArray = ethSignSignature.split('');
+ // tslint:disable-next-line:custom-no-magic-numbers
+ signatureArray[5] = 'C'; // V = 28, instead of 27
+ const wrongSignature = signatureArray.join('');
+ return expect((zeroEx.exchange as any).isValidSignatureAsync(dataHex, address, wrongSignature)).to.become(
+ false,
+ );
});
it('should return true if the signature does pertain to the dataHex & address', async () => {
- return expect(
- (zeroEx.exchange as any)._isValidSignatureUsingContractCallAsync(dataHex, signature, address),
- ).to.become(true);
+ return expect((zeroEx.exchange as any).isValidSignatureAsync(dataHex, address, ethSignSignature)).to.become(
+ true,
+ );
});
});
describe('#toUnitAmount', () => {
@@ -128,18 +116,16 @@ describe('ZeroEx library', () => {
it('returns transaction receipt with decoded logs', async () => {
const availableAddresses = await zeroEx.getAvailableAddressesAsync();
const coinbase = availableAddresses[0];
- const tokens = await zeroEx.tokenRegistry.getTokensAsync();
- const tokenUtils = new TokenUtils(tokens);
- const zrxTokenAddress = tokenUtils.getProtocolTokenOrThrow().address;
- const proxyAddress = zeroEx.proxy.getContractAddress();
- const txHash = await zeroEx.token.setUnlimitedProxyAllowanceAsync(zrxTokenAddress, coinbase);
+ const zrxTokenAddress = tokenUtils.getProtocolTokenAddress();
+ const erc20ProxyAddress = zeroEx.erc20Proxy.getContractAddress();
+ const txHash = await zeroEx.erc20Token.setUnlimitedProxyAllowanceAsync(zrxTokenAddress, coinbase);
const txReceiptWithDecodedLogs = await zeroEx.awaitTransactionMinedAsync(txHash);
// tslint:disable-next-line:no-unnecessary-type-assertion
- const log = txReceiptWithDecodedLogs.logs[0] as LogWithDecodedArgs<ApprovalContractEventArgs>;
- expect(log.event).to.be.equal(TokenEvents.Approval);
+ const log = txReceiptWithDecodedLogs.logs[0] as LogWithDecodedArgs<ERC20TokenApprovalEventArgs>;
+ expect(log.event).to.be.equal(ERC20TokenEvents.Approval);
expect(log.args._owner).to.be.equal(coinbase);
- expect(log.args._spender).to.be.equal(proxyAddress);
- expect(log.args._value).to.be.bignumber.equal(zeroEx.token.UNLIMITED_ALLOWANCE_IN_BASE_UNITS);
+ expect(log.args._spender).to.be.equal(erc20ProxyAddress);
+ expect(log.args._value).to.be.bignumber.equal(zeroEx.erc20Token.UNLIMITED_ALLOWANCE_IN_BASE_UNITS);
});
});
describe('#config', () => {
@@ -151,15 +137,13 @@ describe('ZeroEx library', () => {
const zeroExWithWrongExchangeAddress = new ZeroEx(provider, zeroExConfig);
expect(zeroExWithWrongExchangeAddress.exchange.getContractAddress()).to.be.equal(ZeroEx.NULL_ADDRESS);
});
- it('allows to specify token registry token contract address', async () => {
+ it('allows to specify erc20Proxy contract address', async () => {
const zeroExConfig = {
- tokenRegistryContractAddress: ZeroEx.NULL_ADDRESS,
+ erc20ProxyContractAddress: ZeroEx.NULL_ADDRESS,
networkId: constants.TESTRPC_NETWORK_ID,
};
- const zeroExWithWrongTokenRegistryAddress = new ZeroEx(provider, zeroExConfig);
- expect(zeroExWithWrongTokenRegistryAddress.tokenRegistry.getContractAddress()).to.be.equal(
- ZeroEx.NULL_ADDRESS,
- );
+ const zeroExWithWrongERC20ProxyAddress = new ZeroEx(provider, zeroExConfig);
+ expect(zeroExWithWrongERC20ProxyAddress.erc20Proxy.getContractAddress()).to.be.equal(ZeroEx.NULL_ADDRESS);
});
});
});
diff --git a/packages/0x.js/test/artifacts_test.ts b/packages/0x.js/test/artifacts_test.ts
deleted file mode 100644
index e65b85ad6..000000000
--- a/packages/0x.js/test/artifacts_test.ts
+++ /dev/null
@@ -1,48 +0,0 @@
-import { web3Factory } from '@0xproject/dev-utils';
-
-import { ZeroEx } from '../src';
-
-import { chaiSetup } from './utils/chai_setup';
-import { constants } from './utils/constants';
-
-chaiSetup.configure();
-
-// Those tests are slower cause they're talking to a remote node
-const TIMEOUT = 10000;
-
-describe('Artifacts', () => {
- describe('contracts are deployed on kovan', () => {
- const kovanRpcUrl = constants.KOVAN_RPC_URL;
- const provider = web3Factory.getRpcProvider({ rpcUrl: kovanRpcUrl });
- const config = {
- networkId: constants.KOVAN_NETWORK_ID,
- };
- const zeroEx = new ZeroEx(provider, config);
- it('token registry contract is deployed', async () => {
- await (zeroEx.tokenRegistry as any)._getTokenRegistryContractAsync();
- }).timeout(TIMEOUT);
- it('proxy contract is deployed', async () => {
- await (zeroEx.proxy as any)._getTokenTransferProxyContractAsync();
- }).timeout(TIMEOUT);
- it('exchange contract is deployed', async () => {
- await (zeroEx.exchange as any)._getExchangeContractAsync();
- }).timeout(TIMEOUT);
- });
- describe('contracts are deployed on ropsten', () => {
- const ropstenRpcUrl = constants.ROPSTEN_RPC_URL;
- const provider = web3Factory.getRpcProvider({ rpcUrl: ropstenRpcUrl });
- const config = {
- networkId: constants.ROPSTEN_NETWORK_ID,
- };
- const zeroEx = new ZeroEx(provider, config);
- it('token registry contract is deployed', async () => {
- await (zeroEx.tokenRegistry as any)._getTokenRegistryContractAsync();
- }).timeout(TIMEOUT);
- it('proxy contract is deployed', async () => {
- await (zeroEx.proxy as any)._getTokenTransferProxyContractAsync();
- }).timeout(TIMEOUT);
- it('exchange contract is deployed', async () => {
- await (zeroEx.exchange as any)._getExchangeContractAsync();
- }).timeout(TIMEOUT);
- });
-});
diff --git a/packages/0x.js/test/global_hooks.ts b/packages/0x.js/test/global_hooks.ts
index 9d6903af5..364828231 100644
--- a/packages/0x.js/test/global_hooks.ts
+++ b/packages/0x.js/test/global_hooks.ts
@@ -1,5 +1,5 @@
import { devConstants } from '@0xproject/dev-utils';
-import { runV1MigrationsAsync } from '@0xproject/migrations';
+import { runV2MigrationsAsync } from '@0xproject/migrations';
import { provider } from './utils/web3_wrapper';
@@ -7,11 +7,11 @@ before('migrate contracts', async function(): Promise<void> {
// HACK: Since the migrations take longer then our global mocha timeout limit
// we manually increase it for this before hook.
const mochaTestTimeoutMs = 20000;
- this.timeout(mochaTestTimeoutMs);
+ this.timeout(mochaTestTimeoutMs); // tslint:disable-line:no-invalid-this
const txDefaults = {
gas: devConstants.GAS_LIMIT,
from: devConstants.TESTRPC_FIRST_ADDRESS,
};
- const artifactsDir = `../migrations/artifacts/1.0.0`;
- await runV1MigrationsAsync(provider, artifactsDir, txDefaults);
+ const artifactsDir = `../migrations/artifacts/2.0.0`;
+ await runV2MigrationsAsync(provider, artifactsDir, txDefaults);
});
diff --git a/packages/0x.js/test/utils/token_utils.ts b/packages/0x.js/test/utils/token_utils.ts
index fe4886ba4..a439c464d 100644
--- a/packages/0x.js/test/utils/token_utils.ts
+++ b/packages/0x.js/test/utils/token_utils.ts
@@ -1,34 +1,9 @@
-import { Token } from '@0xproject/types';
-import * as _ from 'lodash';
+import { artifacts } from '../../src/artifacts';
-import { InternalZeroExError } from '../../src/types';
+import { constants } from './constants';
-const PROTOCOL_TOKEN_SYMBOL = 'ZRX';
-const WETH_TOKEN_SYMBOL = 'WETH';
-
-export class TokenUtils {
- private _tokens: Token[];
- constructor(tokens: Token[]) {
- this._tokens = tokens;
- }
- public getProtocolTokenOrThrow(): Token {
- const zrxToken = _.find(this._tokens, { symbol: PROTOCOL_TOKEN_SYMBOL });
- if (_.isUndefined(zrxToken)) {
- throw new Error(InternalZeroExError.ZrxNotInTokenRegistry);
- }
- return zrxToken;
- }
- public getWethTokenOrThrow(): Token {
- const wethToken = _.find(this._tokens, { symbol: WETH_TOKEN_SYMBOL });
- if (_.isUndefined(wethToken)) {
- throw new Error(InternalZeroExError.WethNotInTokenRegistry);
- }
- return wethToken;
- }
- public getDummyTokens(): Token[] {
- const dummyTokens = _.filter(this._tokens, token => {
- return !_.includes([PROTOCOL_TOKEN_SYMBOL, WETH_TOKEN_SYMBOL], token.symbol);
- });
- return dummyTokens;
- }
-}
+export const tokenUtils = {
+ getProtocolTokenAddress(): string {
+ return artifacts.ZRXToken.networks[constants.TESTRPC_NETWORK_ID].address;
+ },
+};
diff --git a/packages/0x.js/test/utils/web3_wrapper.ts b/packages/0x.js/test/utils/web3_wrapper.ts
index f7d11f138..02c8c5918 100644
--- a/packages/0x.js/test/utils/web3_wrapper.ts
+++ b/packages/0x.js/test/utils/web3_wrapper.ts
@@ -1,8 +1,12 @@
-import { web3Factory } from '@0xproject/dev-utils';
-import { Provider } from '@0xproject/types';
+import { devConstants, web3Factory } from '@0xproject/dev-utils';
import { Web3Wrapper } from '@0xproject/web3-wrapper';
+import { Provider } from 'ethereum-types';
+const txDefaults = {
+ from: devConstants.TESTRPC_FIRST_ADDRESS,
+ gas: devConstants.GAS_LIMIT,
+};
const provider: Provider = web3Factory.getRpcProvider({ shouldUseInProcessGanache: true });
const web3Wrapper = new Web3Wrapper(provider);
-export { provider, web3Wrapper };
+export { provider, web3Wrapper, txDefaults };
diff --git a/packages/abi-gen/CHANGELOG.json b/packages/abi-gen/CHANGELOG.json
index 38b72dbf3..048972041 100644
--- a/packages/abi-gen/CHANGELOG.json
+++ b/packages/abi-gen/CHANGELOG.json
@@ -9,6 +9,19 @@
{
"note": "Remove the output directory before writing to it",
"pr": 822
+ },
+ {
+ "note": "skip generation of wrappers that are already up to date",
+ "pr": 788
+ }
+ ]
+ },
+ {
+ "timestamp": 1531919263,
+ "version": "0.3.4",
+ "changes": [
+ {
+ "note": "Dependencies updated"
}
]
},
diff --git a/packages/abi-gen/CHANGELOG.md b/packages/abi-gen/CHANGELOG.md
index 33bc3276a..d7de561c8 100644
--- a/packages/abi-gen/CHANGELOG.md
+++ b/packages/abi-gen/CHANGELOG.md
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
+## v0.3.4 - _July 18, 2018_
+
+ * Dependencies updated
+
## v0.3.3 - _July 9, 2018_
* Dependencies updated
diff --git a/packages/abi-gen/bin/abi-gen.js b/packages/abi-gen/bin/abi-gen.js
index c46eb9b66..8d6bdccf8 100755
--- a/packages/abi-gen/bin/abi-gen.js
+++ b/packages/abi-gen/bin/abi-gen.js
@@ -1,2 +1,2 @@
#!/usr/bin/env node
-require('../lib/index.js')
+require('../lib/src/index.js')
diff --git a/packages/abi-gen/coverage/.gitkeep b/packages/abi-gen/coverage/.gitkeep
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/packages/abi-gen/coverage/.gitkeep
diff --git a/packages/abi-gen/package.json b/packages/abi-gen/package.json
index 7d7a20e68..5e52662d0 100644
--- a/packages/abi-gen/package.json
+++ b/packages/abi-gen/package.json
@@ -1,6 +1,6 @@
{
"name": "@0xproject/abi-gen",
- "version": "0.3.3",
+ "version": "0.3.4",
"engines": {
"node": ">=6.12"
},
@@ -12,6 +12,11 @@
"lint": "tslint --project .",
"clean": "shx rm -rf lib scripts",
"build": "tsc && copyfiles -u 2 './lib/monorepo_scripts/**/*' ./scripts",
+ "test": "yarn run_mocha",
+ "run_mocha": "mocha --require source-map-support/register --require make-promises-safe lib/test/**/*_test.js --bail --exit",
+ "test:circleci": "yarn test:coverage",
+ "test:coverage": "nyc npm run test --all && yarn coverage:report:lcov",
+ "coverage:report:lcov": "nyc report --reporter=text-lcov > coverage/lcov.info",
"manual:postpublish": "yarn build; node ./scripts/postpublish.js"
},
"bin": {
@@ -27,15 +32,16 @@
},
"homepage": "https://github.com/0xProject/0x-monorepo/packages/abi-gen/README.md",
"dependencies": {
- "@0xproject/typescript-typings": "^0.4.2",
- "@0xproject/utils": "^0.7.2",
- "ethereum-types": "^0.0.2",
+ "@0xproject/typescript-typings": "^0.4.3",
+ "@0xproject/utils": "^0.7.3",
"chalk": "^2.3.0",
+ "ethereum-types": "^0.0.2",
"glob": "^7.1.2",
"handlebars": "^4.0.11",
"lodash": "^4.17.4",
- "rimraf": "^2.6.2",
"mkdirp": "^0.5.1",
+ "sleep": "^5.1.1",
+ "tmp": "^0.0.33",
"to-snake-case": "^1.0.0",
"yargs": "^10.0.3"
},
@@ -43,16 +49,20 @@
"@0xproject/monorepo-scripts": "^0.2.2",
"@0xproject/tslint-config": "^0.4.21",
"@types/glob": "5.0.35",
- "@types/rimraf": "^2.0.2",
"@types/handlebars": "^4.0.36",
"@types/mkdirp": "^0.5.1",
"@types/node": "^8.0.53",
+ "@types/sleep": "^0.0.7",
+ "@types/tmp": "^0.0.33",
"@types/yargs": "^10.0.0",
+ "chai": "^4.1.2",
"copyfiles": "^1.2.0",
+ "dirty-chai": "^2.0.1",
"make-promises-safe": "^1.1.0",
+ "mocha": "^5.2.0",
"npm-run-all": "^4.1.2",
"shx": "^0.2.2",
- "tslint": "5.8.0",
+ "tslint": "5.11.0",
"typescript": "2.7.1"
},
"publishConfig": {
diff --git a/packages/abi-gen/src/index.ts b/packages/abi-gen/src/index.ts
index 47f2c404b..753bb2cce 100644
--- a/packages/abi-gen/src/index.ts
+++ b/packages/abi-gen/src/index.ts
@@ -3,16 +3,12 @@
import { abiUtils, logUtils } from '@0xproject/utils';
import chalk from 'chalk';
import { AbiDefinition, ConstructorAbi, EventAbi, MethodAbi } from 'ethereum-types';
-import * as fs from 'fs';
import { sync as globSync } from 'glob';
import * as Handlebars from 'handlebars';
import * as _ from 'lodash';
import * as mkdirp from 'mkdirp';
-import * as rimraf from 'rimraf';
import * as yargs from 'yargs';
-import toSnakeCase = require('to-snake-case');
-
import { ContextData, ContractsBackend, ParamKind } from './types';
import { utils } from './utils';
@@ -71,16 +67,6 @@ function registerPartials(partialsGlob: string): void {
}
}
-function writeOutputFile(name: string, renderedTsCode: string): void {
- let fileName = toSnakeCase(name);
- // HACK: Snake case doesn't make a lot of sense for abbreviated names but we can't reliably detect abbreviations
- // so we special-case the abbreviations we use.
- fileName = fileName.replace('z_r_x', 'zrx').replace('e_r_c', 'erc');
- const filePath = `${args.output}/${fileName}.ts`;
- fs.writeFileSync(filePath, renderedTsCode);
- logUtils.log(`Created: ${chalk.bold(filePath)}`);
-}
-
Handlebars.registerHelper('parameterType', utils.solTypeToTsType.bind(utils, ParamKind.Input, args.backend));
Handlebars.registerHelper('returnType', utils.solTypeToTsType.bind(utils, ParamKind.Output, args.backend));
if (args.partials) {
@@ -97,7 +83,6 @@ if (_.isEmpty(abiFileNames)) {
process.exit(1);
} else {
logUtils.log(`Found ${chalk.green(`${abiFileNames.length}`)} ${chalk.bold('ABI')} files`);
- rimraf.sync(args.output);
mkdirp.sync(args.output);
}
for (const abiFileName of abiFileNames) {
@@ -120,6 +105,14 @@ for (const abiFileName of abiFileNames) {
process.exit(1);
}
+ const outFileName = utils.makeOutputFileName(namedContent.name);
+ const outFilePath = `${args.output}/${outFileName}.ts`;
+
+ if (utils.isOutputFileUpToDate(abiFileName, outFilePath)) {
+ logUtils.log(`Aready up to date: ${chalk.bold(outFilePath)}`);
+ continue;
+ }
+
let ctor = ABI.find((abi: AbiDefinition) => abi.type === ABI_TYPE_CONSTRUCTOR) as ConstructorAbi;
if (_.isUndefined(ctor)) {
ctor = utils.getEmptyConstructor(); // The constructor exists, but it's implicit in JSON's ABI definition
@@ -154,5 +147,6 @@ for (const abiFileName of abiFileNames) {
events: eventAbis,
};
const renderedTsCode = template(contextData);
- writeOutputFile(namedContent.name, renderedTsCode);
+ utils.writeOutputFile(outFilePath, renderedTsCode);
+ logUtils.log(`Created: ${chalk.bold(outFilePath)}`);
}
diff --git a/packages/abi-gen/src/utils.ts b/packages/abi-gen/src/utils.ts
index 66390174c..56b996ce3 100644
--- a/packages/abi-gen/src/utils.ts
+++ b/packages/abi-gen/src/utils.ts
@@ -2,6 +2,7 @@ import { AbiType, ConstructorAbi, DataItem } from 'ethereum-types';
import * as fs from 'fs';
import * as _ from 'lodash';
import * as path from 'path';
+import toSnakeCase = require('to-snake-case');
import { ContractsBackend, ParamKind } from './types';
@@ -92,4 +93,27 @@ export const utils = {
inputs: [],
};
},
+ makeOutputFileName(name: string): string {
+ let fileName = toSnakeCase(name);
+ // HACK: Snake case doesn't make a lot of sense for abbreviated names but we can't reliably detect abbreviations
+ // so we special-case the abbreviations we use.
+ fileName = fileName.replace('z_r_x', 'zrx').replace('e_r_c', 'erc');
+ return fileName;
+ },
+ writeOutputFile(filePath: string, renderedTsCode: string): void {
+ fs.writeFileSync(filePath, renderedTsCode);
+ },
+ isOutputFileUpToDate(abiFile: string, outputFile: string): boolean {
+ const abiFileModTimeMs = fs.statSync(abiFile).mtimeMs;
+ try {
+ const outFileModTimeMs = fs.statSync(outputFile).mtimeMs;
+ return outFileModTimeMs > abiFileModTimeMs;
+ } catch (err) {
+ if (err.code === 'ENOENT') {
+ return false;
+ } else {
+ throw err;
+ }
+ }
+ },
};
diff --git a/packages/abi-gen/test/utils_test.ts b/packages/abi-gen/test/utils_test.ts
new file mode 100644
index 000000000..820c0c675
--- /dev/null
+++ b/packages/abi-gen/test/utils_test.ts
@@ -0,0 +1,86 @@
+import * as chai from 'chai';
+import * as dirtyChai from 'dirty-chai';
+import * as fs from 'fs';
+import 'mocha';
+import * as tmp from 'tmp';
+
+import { utils } from '../src/utils';
+
+tmp.setGracefulCleanup(); // remove tmp files even if there are failures
+
+chai.use(dirtyChai);
+
+const expect = chai.expect;
+
+describe('makeOutputFileName()', () => {
+ it('should handle Metacoin usage', () => {
+ expect(utils.makeOutputFileName('Metacoin')).to.equal('metacoin');
+ });
+ it('should handle special zrx_token case', () => {
+ expect(utils.makeOutputFileName('ZRXToken')).to.equal('zrx_token');
+ });
+ it('should handle special erc_token case', () => {
+ expect(utils.makeOutputFileName('ERC20Token')).to.equal('erc20_token');
+ });
+});
+
+describe('writeOutputFile()', () => {
+ let tempFilePath: string;
+ before(() => {
+ tempFilePath = tmp.fileSync(
+ { discardDescriptor: true }, // close file (so we can update it)
+ ).name;
+ });
+ it('should write content to output file', () => {
+ const content = 'hello world';
+
+ utils.writeOutputFile(tempFilePath, content);
+
+ expect(fs.readFileSync(tempFilePath).toString()).to.equal(content);
+ });
+});
+
+describe('isOutputFileUpToDate()', () => {
+ it('should throw ENOENT when there is no abi file', () => {
+ expect(utils.isOutputFileUpToDate.bind('nonexistant1', 'nonexistant2')).to.throw('ENOENT');
+ });
+
+ describe('when the abi input file exists', () => {
+ let abiFile: string;
+ before(() => {
+ abiFile = tmp.fileSync(
+ { discardDescriptor: true }, // close file (set timestamp)
+ ).name;
+ });
+
+ describe('without an existing output file', () => {
+ it('should return false', () => {
+ expect(utils.isOutputFileUpToDate(abiFile, 'nonexistant_file')).to.be.false();
+ });
+ });
+
+ describe('with an existing output file', () => {
+ let outputFile: string;
+ before(() => {
+ 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 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', () => {
+ 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/assert/CHANGELOG.json b/packages/assert/CHANGELOG.json
index 1ddc6d280..e72b0e9a4 100644
--- a/packages/assert/CHANGELOG.json
+++ b/packages/assert/CHANGELOG.json
@@ -10,6 +10,15 @@
]
},
{
+ "timestamp": 1531919263,
+ "version": "0.2.14",
+ "changes": [
+ {
+ "note": "Dependencies updated"
+ }
+ ]
+ },
+ {
"timestamp": 1531149657,
"version": "0.2.13",
"changes": [
diff --git a/packages/assert/CHANGELOG.md b/packages/assert/CHANGELOG.md
index f0d2f55b0..663b06c0f 100644
--- a/packages/assert/CHANGELOG.md
+++ b/packages/assert/CHANGELOG.md
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
+## v0.2.14 - _July 18, 2018_
+
+ * Dependencies updated
+
## v0.2.13 - _July 9, 2018_
* Dependencies updated
diff --git a/packages/assert/package.json b/packages/assert/package.json
index 3b9ecbb49..e734fa40b 100644
--- a/packages/assert/package.json
+++ b/packages/assert/package.json
@@ -44,13 +44,13 @@
"npm-run-all": "^4.1.2",
"nyc": "^11.0.1",
"shx": "^0.2.2",
- "tslint": "5.8.0",
+ "tslint": "5.11.0",
"typescript": "2.7.1"
},
"dependencies": {
"@0xproject/json-schemas": "^1.0.0",
- "@0xproject/typescript-typings": "^0.4.2",
- "@0xproject/utils": "^0.7.2",
+ "@0xproject/typescript-typings": "^0.4.3",
+ "@0xproject/utils": "^0.7.3",
"lodash": "^4.17.4",
"valid-url": "^1.0.9"
},
diff --git a/packages/assert/src/index.ts b/packages/assert/src/index.ts
index 8e18416c5..ccf2c9ad8 100644
--- a/packages/assert/src/index.ts
+++ b/packages/assert/src/index.ts
@@ -8,33 +8,33 @@ const HEX_REGEX = /^0x[0-9A-F]*$/i;
export const assert = {
isBigNumber(variableName: string, value: BigNumber): void {
const isBigNumber = _.isObject(value) && (value as any).isBigNumber;
- this.assert(isBigNumber, this.typeAssertionMessage(variableName, 'BigNumber', value));
+ assert.assert(isBigNumber, assert.typeAssertionMessage(variableName, 'BigNumber', value));
},
isValidBaseUnitAmount(variableName: string, value: BigNumber): void {
assert.isBigNumber(variableName, value);
const isNegative = value.lessThan(0);
- this.assert(!isNegative, `${variableName} cannot be a negative number, found value: ${value.toNumber()}`);
+ assert.assert(!isNegative, `${variableName} cannot be a negative number, found value: ${value.toNumber()}`);
const hasDecimals = value.decimalPlaces() !== 0;
- this.assert(
+ assert.assert(
!hasDecimals,
`${variableName} should be in baseUnits (no decimals), found value: ${value.toNumber()}`,
);
},
isString(variableName: string, value: string): void {
- this.assert(_.isString(value), this.typeAssertionMessage(variableName, 'string', value));
+ assert.assert(_.isString(value), assert.typeAssertionMessage(variableName, 'string', value));
},
isFunction(variableName: string, value: any): void {
- this.assert(_.isFunction(value), this.typeAssertionMessage(variableName, 'function', value));
+ assert.assert(_.isFunction(value), assert.typeAssertionMessage(variableName, 'function', value));
},
isHexString(variableName: string, value: string): void {
- this.assert(
+ assert.assert(
_.isString(value) && HEX_REGEX.test(value),
- this.typeAssertionMessage(variableName, 'HexString', value),
+ assert.typeAssertionMessage(variableName, 'HexString', value),
);
},
isETHAddressHex(variableName: string, value: string): void {
- this.assert(_.isString(value), this.typeAssertionMessage(variableName, 'string', value));
- this.assert(addressUtils.isAddress(value), this.typeAssertionMessage(variableName, 'ETHAddressHex', value));
+ assert.assert(_.isString(value), assert.typeAssertionMessage(variableName, 'string', value));
+ assert.assert(addressUtils.isAddress(value), assert.typeAssertionMessage(variableName, 'ETHAddressHex', value));
},
doesBelongToStringEnum(
variableName: string,
@@ -51,17 +51,17 @@ export const assert = {
);
},
hasAtMostOneUniqueValue(value: any[], errMsg: string): void {
- this.assert(_.uniq(value).length <= 1, errMsg);
+ assert.assert(_.uniq(value).length <= 1, errMsg);
},
isNumber(variableName: string, value: number): void {
- this.assert(_.isFinite(value), this.typeAssertionMessage(variableName, 'number', value));
+ assert.assert(_.isFinite(value), assert.typeAssertionMessage(variableName, 'number', value));
},
isBoolean(variableName: string, value: boolean): void {
- this.assert(_.isBoolean(value), this.typeAssertionMessage(variableName, 'boolean', value));
+ assert.assert(_.isBoolean(value), assert.typeAssertionMessage(variableName, 'boolean', value));
},
isWeb3Provider(variableName: string, value: any): void {
const isWeb3Provider = _.isFunction(value.send) || _.isFunction(value.sendAsync);
- this.assert(isWeb3Provider, this.typeAssertionMessage(variableName, 'Provider', value));
+ assert.assert(isWeb3Provider, assert.typeAssertionMessage(variableName, 'Provider', value));
},
doesConformToSchema(variableName: string, value: any, schema: Schema, subSchemas?: Schema[]): void {
if (_.isUndefined(value)) {
@@ -76,15 +76,15 @@ export const assert = {
const msg = `Expected ${variableName} to conform to schema ${schema.id}
Encountered: ${JSON.stringify(value, null, '\t')}
Validation errors: ${validationResult.errors.join(', ')}`;
- this.assert(!hasValidationErrors, msg);
+ assert.assert(!hasValidationErrors, msg);
},
isWebUri(variableName: string, value: any): void {
const isValidUrl = !_.isUndefined(validUrl.isWebUri(value));
- this.assert(isValidUrl, this.typeAssertionMessage(variableName, 'web uri', value));
+ assert.assert(isValidUrl, assert.typeAssertionMessage(variableName, 'web uri', value));
},
isUri(variableName: string, value: any): void {
const isValidUri = !_.isUndefined(validUrl.isUri(value));
- this.assert(isValidUri, this.typeAssertionMessage(variableName, 'uri', value));
+ assert.assert(isValidUri, assert.typeAssertionMessage(variableName, 'uri', value));
},
assert(condition: boolean, message: string): void {
if (!condition) {
diff --git a/packages/assert/test/assert_test.ts b/packages/assert/test/assert_test.ts
index 15fd3e6a8..cbbfe39db 100644
--- a/packages/assert/test/assert_test.ts
+++ b/packages/assert/test/assert_test.ts
@@ -49,7 +49,7 @@ describe('Assertions', () => {
});
describe('#isFunction', () => {
it('should not throw for valid input', () => {
- const validInputs = [BigNumber, assert.isString];
+ const validInputs = [BigNumber, assert.isString.bind(assert)];
validInputs.forEach(input => expect(assert.isFunction.bind(assert, variableName, input)).to.not.throw());
});
it('should throw for invalid input', () => {
diff --git a/packages/base-contract/CHANGELOG.json b/packages/base-contract/CHANGELOG.json
index 400489afa..3376a44f7 100644
--- a/packages/base-contract/CHANGELOG.json
+++ b/packages/base-contract/CHANGELOG.json
@@ -1,5 +1,14 @@
[
{
+ "timestamp": 1531919263,
+ "version": "0.3.6",
+ "changes": [
+ {
+ "note": "Dependencies updated"
+ }
+ ]
+ },
+ {
"timestamp": 1531149657,
"version": "0.3.5",
"changes": [
diff --git a/packages/base-contract/CHANGELOG.md b/packages/base-contract/CHANGELOG.md
index ad73a1863..3118bc0d7 100644
--- a/packages/base-contract/CHANGELOG.md
+++ b/packages/base-contract/CHANGELOG.md
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
+## v0.3.6 - _July 18, 2018_
+
+ * Dependencies updated
+
## v0.3.5 - _July 9, 2018_
* Dependencies updated
diff --git a/packages/base-contract/package.json b/packages/base-contract/package.json
index afde81561..32910cd80 100644
--- a/packages/base-contract/package.json
+++ b/packages/base-contract/package.json
@@ -1,6 +1,6 @@
{
"name": "@0xproject/base-contract",
- "version": "0.3.5",
+ "version": "0.3.6",
"engines": {
"node": ">=6.12"
},
@@ -39,14 +39,14 @@
"mocha": "^4.0.1",
"npm-run-all": "^4.1.2",
"shx": "^0.2.2",
- "tslint": "5.8.0",
+ "tslint": "5.11.0",
"typescript": "2.7.1"
},
"dependencies": {
"ethereum-types": "^0.0.2",
- "@0xproject/typescript-typings": "^0.4.2",
- "@0xproject/utils": "^0.7.2",
- "@0xproject/web3-wrapper": "^0.7.2",
+ "@0xproject/typescript-typings": "^0.4.3",
+ "@0xproject/utils": "^0.7.3",
+ "@0xproject/web3-wrapper": "^0.7.3",
"ethers": "3.0.22",
"lodash": "^4.17.4"
},
diff --git a/packages/base-contract/src/index.ts b/packages/base-contract/src/index.ts
index 6b970ec27..a240fb8b6 100644
--- a/packages/base-contract/src/index.ts
+++ b/packages/base-contract/src/index.ts
@@ -72,15 +72,13 @@ export class BaseContract {
// 1. Optional param passed in to public method call
// 2. Global config passed in at library instantiation
// 3. Gas estimate calculation + safety margin
- const removeUndefinedProperties = _.pickBy;
- const txDataWithDefaults: TxData = {
+ const removeUndefinedProperties = _.pickBy.bind(_);
+ const txDataWithDefaults = {
...removeUndefinedProperties(txDefaults),
- ...removeUndefinedProperties(txData as any),
- // HACK: TS can't prove that T is spreadable.
- // Awaiting https://github.com/Microsoft/TypeScript/pull/13288 to be merged
- } as any;
+ ...removeUndefinedProperties(txData),
+ };
if (_.isUndefined(txDataWithDefaults.gas) && !_.isUndefined(estimateGasAsync)) {
- txDataWithDefaults.gas = await estimateGasAsync(txDataWithDefaults as any);
+ txDataWithDefaults.gas = await estimateGasAsync(txDataWithDefaults);
}
return txDataWithDefaults;
}
diff --git a/packages/connect/CHANGELOG.json b/packages/connect/CHANGELOG.json
index c426f974b..c4813f589 100644
--- a/packages/connect/CHANGELOG.json
+++ b/packages/connect/CHANGELOG.json
@@ -1,5 +1,23 @@
[
{
+ "version": "1.0.0",
+ "changes": [
+ {
+ "note":
+ "Remove WebSocketOrderbookChannel from the public interface and replace with orderbookChannelFactory"
+ }
+ ]
+ },
+ {
+ "timestamp": 1531919263,
+ "version": "0.6.17",
+ "changes": [
+ {
+ "note": "Dependencies updated"
+ }
+ ]
+ },
+ {
"timestamp": 1531149657,
"version": "0.6.16",
"changes": [
diff --git a/packages/connect/CHANGELOG.md b/packages/connect/CHANGELOG.md
index 5ae4cfbe3..acef109e0 100644
--- a/packages/connect/CHANGELOG.md
+++ b/packages/connect/CHANGELOG.md
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
+## v0.6.17 - _July 18, 2018_
+
+ * Dependencies updated
+
## v0.6.16 - _July 9, 2018_
* Dependencies updated
diff --git a/packages/connect/package.json b/packages/connect/package.json
index 469d47d33..71fd60f6a 100644
--- a/packages/connect/package.json
+++ b/packages/connect/package.json
@@ -1,6 +1,6 @@
{
"name": "@0xproject/connect",
- "version": "0.6.16",
+ "version": "0.6.17",
"engines": {
"node": ">=6.12"
},
@@ -51,14 +51,14 @@
},
"homepage": "https://github.com/0xProject/0x-monorepo/packages/connect/README.md",
"dependencies": {
- "@0xproject/assert": "^0.2.13",
- "@0xproject/json-schemas": "0.8.2",
+ "@0xproject/assert": "^0.2.14",
+ "@0xproject/json-schemas": "0.8.3",
"@0xproject/types": "^0.8.2",
- "@0xproject/typescript-typings": "^0.4.2",
- "@0xproject/utils": "^0.7.2",
- "isomorphic-fetch": "^2.2.1",
+ "@0xproject/typescript-typings": "^0.4.3",
+ "@0xproject/utils": "^0.7.3",
"lodash": "^4.17.4",
"query-string": "^5.0.1",
+ "sinon": "^4.0.0",
"websocket": "^1.0.25"
},
"devDependencies": {
@@ -68,7 +68,8 @@
"@types/lodash": "4.14.104",
"@types/mocha": "^2.2.42",
"@types/query-string": "^5.0.1",
- "@types/websocket": "^0.0.34",
+ "@types/sinon": "^2.2.2",
+ "@types/websocket": "^0.0.39",
"async-child-process": "^1.1.1",
"chai": "^4.0.1",
"chai-as-promised": "^7.1.0",
@@ -80,7 +81,7 @@
"npm-run-all": "^4.1.2",
"nyc": "^11.0.1",
"shx": "^0.2.2",
- "tslint": "5.8.0",
+ "tslint": "5.11.0",
"typedoc": "~0.8.0",
"typescript": "2.7.1"
},
diff --git a/packages/connect/src/http_client.ts b/packages/connect/src/http_client.ts
index f6503835a..03cc590e4 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';
@@ -38,7 +38,7 @@ const OPTS_TO_QUERY_FIELD_MAP = {
* that implement the standard relayer API v0
*/
export class HttpClient implements Client {
- private _apiEndpointUrl: string;
+ private readonly _apiEndpointUrl: string;
/**
* Format parameters to be appended to http requests into query string form
*/
@@ -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/connect/src/index.ts b/packages/connect/src/index.ts
index ef5d8683e..7f5eb8ed3 100644
--- a/packages/connect/src/index.ts
+++ b/packages/connect/src/index.ts
@@ -1,5 +1,5 @@
export { HttpClient } from './http_client';
-export { WebSocketOrderbookChannel } from './ws_orderbook_channel';
+export { orderbookChannelFactory } from './orderbook_channel_factory';
export {
Client,
FeesRequest,
@@ -14,7 +14,6 @@ export {
TokenPairsItem,
TokenPairsRequestOpts,
TokenTradeInfo,
- WebSocketOrderbookChannelConfig,
} from './types';
export { Order, SignedOrder } from '@0xproject/types';
diff --git a/packages/connect/src/orderbook_channel_factory.ts b/packages/connect/src/orderbook_channel_factory.ts
new file mode 100644
index 000000000..5134af323
--- /dev/null
+++ b/packages/connect/src/orderbook_channel_factory.ts
@@ -0,0 +1,32 @@
+import * as WebSocket from 'websocket';
+
+import { OrderbookChannel, OrderbookChannelHandler } from './types';
+import { assert } from './utils/assert';
+import { WebSocketOrderbookChannel } from './ws_orderbook_channel';
+
+export const orderbookChannelFactory = {
+ /**
+ * Instantiates a new WebSocketOrderbookChannel instance
+ * @param url The relayer API base WS url you would like to interact with
+ * @param handler An OrderbookChannelHandler instance that responds to various
+ * channel updates
+ * @return An OrderbookChannel Promise
+ */
+ async createWebSocketOrderbookChannelAsync(
+ url: string,
+ handler: OrderbookChannelHandler,
+ ): Promise<OrderbookChannel> {
+ assert.isUri('url', url);
+ assert.isOrderbookChannelHandler('handler', handler);
+ return new Promise<OrderbookChannel>((resolve, reject) => {
+ const client = new WebSocket.w3cwebsocket(url);
+ client.onopen = () => {
+ const orderbookChannel = new WebSocketOrderbookChannel(client, handler);
+ resolve(orderbookChannel);
+ };
+ client.onerror = err => {
+ reject(err);
+ };
+ });
+ },
+};
diff --git a/packages/connect/src/schemas/schemas.ts b/packages/connect/src/schemas/schemas.ts
index b9a8472fb..0b8b798a9 100644
--- a/packages/connect/src/schemas/schemas.ts
+++ b/packages/connect/src/schemas/schemas.ts
@@ -3,7 +3,6 @@ import { orderBookRequestSchema } from './orderbook_request_schema';
import { ordersRequestOptsSchema } from './orders_request_opts_schema';
import { pagedRequestOptsSchema } from './paged_request_opts_schema';
import { tokenPairsRequestOptsSchema } from './token_pairs_request_opts_schema';
-import { webSocketOrderbookChannelConfigSchema } from './websocket_orderbook_channel_config_schema';
export const schemas = {
feesRequestSchema,
@@ -11,5 +10,4 @@ export const schemas = {
ordersRequestOptsSchema,
pagedRequestOptsSchema,
tokenPairsRequestOptsSchema,
- webSocketOrderbookChannelConfigSchema,
};
diff --git a/packages/connect/src/schemas/websocket_orderbook_channel_config_schema.ts b/packages/connect/src/schemas/websocket_orderbook_channel_config_schema.ts
deleted file mode 100644
index 81c0cac9c..000000000
--- a/packages/connect/src/schemas/websocket_orderbook_channel_config_schema.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-export const webSocketOrderbookChannelConfigSchema = {
- id: '/WebSocketOrderbookChannelConfig',
- type: 'object',
- properties: {
- heartbeatIntervalMs: {
- type: 'number',
- minimum: 10,
- },
- },
-};
diff --git a/packages/connect/src/types.ts b/packages/connect/src/types.ts
index f5e52f50d..fc7a4b24d 100644
--- a/packages/connect/src/types.ts
+++ b/packages/connect/src/types.ts
@@ -11,18 +11,11 @@ export interface Client {
}
export interface OrderbookChannel {
- subscribe: (subscriptionOpts: OrderbookChannelSubscriptionOpts, handler: OrderbookChannelHandler) => void;
+ subscribe: (subscriptionOpts: OrderbookChannelSubscriptionOpts) => void;
close: () => void;
}
/**
- * heartbeatInterval: Interval in milliseconds that the orderbook channel should ping the underlying websocket. Default: 15000
- */
-export interface WebSocketOrderbookChannelConfig {
- heartbeatIntervalMs?: number;
-}
-
-/**
* baseTokenAddress: The address of token designated as the baseToken in the currency pair calculation of price
* quoteTokenAddress: The address of token designated as the quoteToken in the currency pair calculation of price
* snapshot: If true, a snapshot of the orderbook will be sent before the updates to the orderbook
@@ -46,8 +39,8 @@ export interface OrderbookChannelHandler {
subscriptionOpts: OrderbookChannelSubscriptionOpts,
order: SignedOrder,
) => void;
- onError: (channel: OrderbookChannel, subscriptionOpts: OrderbookChannelSubscriptionOpts, err: Error) => void;
- onClose: (channel: OrderbookChannel, subscriptionOpts: OrderbookChannelSubscriptionOpts) => void;
+ onError: (channel: OrderbookChannel, err: Error, subscriptionOpts?: OrderbookChannelSubscriptionOpts) => void;
+ onClose: (channel: OrderbookChannel) => void;
}
export type OrderbookChannelMessage =
diff --git a/packages/connect/src/utils/assert.ts b/packages/connect/src/utils/assert.ts
new file mode 100644
index 000000000..a0fd12fbd
--- /dev/null
+++ b/packages/connect/src/utils/assert.ts
@@ -0,0 +1,26 @@
+import { assert as sharedAssert } from '@0xproject/assert';
+// HACK: We need those two unused imports because they're actually used by sharedAssert which gets injected here
+// tslint:disable-next-line:no-unused-variable
+import { Schema, schemas } from '@0xproject/json-schemas';
+// tslint:disable-next-line:no-unused-variable
+import { ECSignature } from '@0xproject/types';
+// tslint:disable-next-line:no-unused-variable
+import { BigNumber } from '@0xproject/utils';
+import * as _ from 'lodash';
+
+export const assert = {
+ ...sharedAssert,
+ isOrderbookChannelSubscriptionOpts(variableName: string, subscriptionOpts: any): void {
+ sharedAssert.doesConformToSchema(
+ variableName,
+ subscriptionOpts,
+ schemas.relayerApiOrderbookChannelSubscribePayload,
+ );
+ },
+ isOrderbookChannelHandler(variableName: string, handler: any): void {
+ sharedAssert.isFunction(`${variableName}.onSnapshot`, _.get(handler, 'onSnapshot'));
+ sharedAssert.isFunction(`${variableName}.onUpdate`, _.get(handler, 'onUpdate'));
+ sharedAssert.isFunction(`${variableName}.onError`, _.get(handler, 'onError'));
+ sharedAssert.isFunction(`${variableName}.onClose`, _.get(handler, 'onClose'));
+ },
+};
diff --git a/packages/connect/src/utils/orderbook_channel_message_parser.ts b/packages/connect/src/utils/orderbook_channel_message_parser.ts
index 9a9ca8901..593288078 100644
--- a/packages/connect/src/utils/orderbook_channel_message_parser.ts
+++ b/packages/connect/src/utils/orderbook_channel_message_parser.ts
@@ -8,10 +8,16 @@ import { relayerResponseJsonParsers } from './relayer_response_json_parsers';
export const orderbookChannelMessageParser = {
parse(utf8Data: string): OrderbookChannelMessage {
+ // parse the message
const messageObj = JSON.parse(utf8Data);
+ // ensure we have a type parameter to switch on
const type: string = _.get(messageObj, 'type');
assert.assert(!_.isUndefined(type), `Message is missing a type parameter: ${utf8Data}`);
assert.isString('type', type);
+ // ensure we have a request id for the resulting message
+ const requestId: number = _.get(messageObj, 'requestId');
+ assert.assert(!_.isUndefined(requestId), `Message is missing a requestId parameter: ${utf8Data}`);
+ assert.isNumber('requestId', requestId);
switch (type) {
case OrderbookChannelMessageTypes.Snapshot: {
assert.doesConformToSchema('message', messageObj, schemas.relayerApiOrderbookChannelSnapshotSchema);
@@ -28,7 +34,7 @@ export const orderbookChannelMessageParser = {
default: {
return {
type: OrderbookChannelMessageTypes.Unknown,
- requestId: 0,
+ requestId,
payload: undefined,
};
}
diff --git a/packages/connect/src/utils/type_converters.ts b/packages/connect/src/utils/type_converters.ts
index c1808ce8a..210d452b9 100644
--- a/packages/connect/src/utils/type_converters.ts
+++ b/packages/connect/src/utils/type_converters.ts
@@ -6,12 +6,12 @@ export const typeConverters = {
const bids = _.get(orderbook, 'bids', []);
const asks = _.get(orderbook, 'asks', []);
return {
- bids: bids.map((order: any) => this.convertOrderStringFieldsToBigNumber(order)),
- asks: asks.map((order: any) => this.convertOrderStringFieldsToBigNumber(order)),
+ bids: bids.map((order: any) => typeConverters.convertOrderStringFieldsToBigNumber(order)),
+ asks: asks.map((order: any) => typeConverters.convertOrderStringFieldsToBigNumber(order)),
};
},
convertOrderStringFieldsToBigNumber(order: any): any {
- return this.convertStringsFieldsToBigNumbers(order, [
+ return typeConverters.convertStringsFieldsToBigNumbers(order, [
'makerTokenAmount',
'takerTokenAmount',
'makerFee',
diff --git a/packages/connect/src/ws_orderbook_channel.ts b/packages/connect/src/ws_orderbook_channel.ts
index bdcc8a75d..fa9f5e37f 100644
--- a/packages/connect/src/ws_orderbook_channel.ts
+++ b/packages/connect/src/ws_orderbook_channel.ts
@@ -1,166 +1,105 @@
-import { assert } from '@0xproject/assert';
-import { schemas } from '@0xproject/json-schemas';
import * as _ from 'lodash';
import * as WebSocket from 'websocket';
-import { schemas as clientSchemas } from './schemas/schemas';
import {
OrderbookChannel,
OrderbookChannelHandler,
OrderbookChannelMessageTypes,
OrderbookChannelSubscriptionOpts,
- WebsocketClientEventType,
- WebsocketConnectionEventType,
- WebSocketOrderbookChannelConfig,
} from './types';
+import { assert } from './utils/assert';
import { orderbookChannelMessageParser } from './utils/orderbook_channel_message_parser';
-const DEFAULT_HEARTBEAT_INTERVAL_MS = 15000;
-const MINIMUM_HEARTBEAT_INTERVAL_MS = 10;
-
/**
* This class includes all the functionality related to interacting with a websocket endpoint
* that implements the standard relayer API v0
*/
export class WebSocketOrderbookChannel implements OrderbookChannel {
- private _apiEndpointUrl: string;
- private _client: WebSocket.client;
- private _connectionIfExists?: WebSocket.connection;
- private _heartbeatTimerIfExists?: NodeJS.Timer;
- private _subscriptionCounter = 0;
- private _heartbeatIntervalMs: number;
+ private readonly _client: WebSocket.w3cwebsocket;
+ private readonly _handler: OrderbookChannelHandler;
+ private readonly _subscriptionOptsList: OrderbookChannelSubscriptionOpts[] = [];
/**
* Instantiates a new WebSocketOrderbookChannel instance
- * @param url The relayer API base WS url you would like to interact with
- * @param config The configuration object. Look up the type for the description.
+ * @param client A WebSocket client
+ * @param handler An OrderbookChannelHandler instance that responds to various
+ * channel updates
* @return An instance of WebSocketOrderbookChannel
*/
- constructor(url: string, config?: WebSocketOrderbookChannelConfig) {
- assert.isUri('url', url);
- if (!_.isUndefined(config)) {
- assert.doesConformToSchema('config', config, clientSchemas.webSocketOrderbookChannelConfigSchema);
- }
- this._apiEndpointUrl = url;
- this._heartbeatIntervalMs =
- _.isUndefined(config) || _.isUndefined(config.heartbeatIntervalMs)
- ? DEFAULT_HEARTBEAT_INTERVAL_MS
- : config.heartbeatIntervalMs;
- this._client = new WebSocket.client();
+ constructor(client: WebSocket.w3cwebsocket, handler: OrderbookChannelHandler) {
+ assert.isOrderbookChannelHandler('handler', handler);
+ // set private members
+ this._client = client;
+ this._handler = handler;
+ // attach client callbacks
+ this._client.onerror = err => {
+ this._handler.onError(this, err);
+ };
+ this._client.onclose = () => {
+ this._handler.onClose(this);
+ };
+ this._client.onmessage = message => {
+ this._handleWebSocketMessage(message);
+ };
}
/**
* Subscribe to orderbook snapshots and updates from the websocket
* @param subscriptionOpts An OrderbookChannelSubscriptionOpts instance describing which
* token pair to subscribe to
- * @param handler An OrderbookChannelHandler instance that responds to various
- * channel updates
*/
- public subscribe(subscriptionOpts: OrderbookChannelSubscriptionOpts, handler: OrderbookChannelHandler): void {
- assert.doesConformToSchema(
- 'subscriptionOpts',
- subscriptionOpts,
- schemas.relayerApiOrderbookChannelSubscribePayload,
- );
- assert.isFunction('handler.onSnapshot', _.get(handler, 'onSnapshot'));
- assert.isFunction('handler.onUpdate', _.get(handler, 'onUpdate'));
- assert.isFunction('handler.onError', _.get(handler, 'onError'));
- assert.isFunction('handler.onClose', _.get(handler, 'onClose'));
- this._subscriptionCounter += 1;
+ public subscribe(subscriptionOpts: OrderbookChannelSubscriptionOpts): void {
+ assert.isOrderbookChannelSubscriptionOpts('subscriptionOpts', subscriptionOpts);
+ assert.assert(this._client.readyState === WebSocket.w3cwebsocket.OPEN, 'WebSocket connection is closed');
+ this._subscriptionOptsList.push(subscriptionOpts);
+ // TODO: update requestId management to use UUIDs for v2
const subscribeMessage = {
type: 'subscribe',
channel: 'orderbook',
- requestId: this._subscriptionCounter,
+ requestId: this._subscriptionOptsList.length - 1,
payload: subscriptionOpts,
};
- this._getConnection((error, connection) => {
- if (!_.isUndefined(error)) {
- handler.onError(this, subscriptionOpts, error);
- } else if (!_.isUndefined(connection) && connection.connected) {
- connection.on(WebsocketConnectionEventType.Error, wsError => {
- handler.onError(this, subscriptionOpts, wsError);
- });
- connection.on(WebsocketConnectionEventType.Close, (_code: number, _desc: string) => {
- handler.onClose(this, subscriptionOpts);
- });
- connection.on(WebsocketConnectionEventType.Message, message => {
- this._handleWebSocketMessage(subscribeMessage.requestId, subscriptionOpts, message, handler);
- });
- connection.sendUTF(JSON.stringify(subscribeMessage));
- }
- });
+ this._client.send(JSON.stringify(subscribeMessage));
}
/**
* Close the websocket and stop receiving updates
*/
public close(): void {
- if (!_.isUndefined(this._connectionIfExists)) {
- this._connectionIfExists.close();
- }
- if (!_.isUndefined(this._heartbeatTimerIfExists)) {
- clearInterval(this._heartbeatTimerIfExists);
- }
+ this._client.close();
}
- private _getConnection(callback: (error?: Error, connection?: WebSocket.connection) => void): void {
- if (!_.isUndefined(this._connectionIfExists) && this._connectionIfExists.connected) {
- callback(undefined, this._connectionIfExists);
- } else {
- this._client.on(WebsocketClientEventType.Connect, connection => {
- this._connectionIfExists = connection;
- if (this._heartbeatIntervalMs >= MINIMUM_HEARTBEAT_INTERVAL_MS) {
- this._heartbeatTimerIfExists = setInterval(() => {
- connection.ping('');
- }, this._heartbeatIntervalMs);
- } else {
- callback(
- new Error(
- `Heartbeat interval is ${
- this._heartbeatIntervalMs
- }ms which is less than the required minimum of ${MINIMUM_HEARTBEAT_INTERVAL_MS}ms`,
- ),
- undefined,
- );
- }
- callback(undefined, this._connectionIfExists);
- });
- this._client.on(WebsocketClientEventType.ConnectFailed, error => {
- callback(error, undefined);
- });
- this._client.connect(this._apiEndpointUrl);
+ private _handleWebSocketMessage(message: any): void {
+ if (_.isUndefined(message.data)) {
+ this._handler.onError(this, new Error(`Message does not contain data. Url: ${this._client.url}`));
+ return;
}
- }
- private _handleWebSocketMessage(
- requestId: number,
- subscriptionOpts: OrderbookChannelSubscriptionOpts,
- message: WebSocket.IMessage,
- handler: OrderbookChannelHandler,
- ): void {
- if (!_.isUndefined(message.utf8Data)) {
- try {
- const utf8Data = message.utf8Data;
- const parserResult = orderbookChannelMessageParser.parse(utf8Data);
- if (parserResult.requestId === requestId) {
- switch (parserResult.type) {
- case OrderbookChannelMessageTypes.Snapshot: {
- handler.onSnapshot(this, subscriptionOpts, parserResult.payload);
- break;
- }
- case OrderbookChannelMessageTypes.Update: {
- handler.onUpdate(this, subscriptionOpts, parserResult.payload);
- break;
- }
- default: {
- handler.onError(
- this,
- subscriptionOpts,
- new Error(`Message has missing a type parameter: ${utf8Data}`),
- );
- }
- }
+ try {
+ const data = message.data;
+ const parserResult = orderbookChannelMessageParser.parse(data);
+ const subscriptionOpts = this._subscriptionOptsList[parserResult.requestId];
+ if (_.isUndefined(subscriptionOpts)) {
+ this._handler.onError(
+ this,
+ new Error(`Message has unknown requestId. Url: ${this._client.url} Message: ${data}`),
+ );
+ return;
+ }
+ switch (parserResult.type) {
+ case OrderbookChannelMessageTypes.Snapshot: {
+ this._handler.onSnapshot(this, subscriptionOpts, parserResult.payload);
+ break;
+ }
+ case OrderbookChannelMessageTypes.Update: {
+ this._handler.onUpdate(this, subscriptionOpts, parserResult.payload);
+ break;
+ }
+ default: {
+ this._handler.onError(
+ this,
+ new Error(`Message has unknown type parameter. Url: ${this._client.url} Message: ${data}`),
+ subscriptionOpts,
+ );
}
- } catch (error) {
- handler.onError(this, subscriptionOpts, error);
}
- } else {
- handler.onError(this, subscriptionOpts, new Error(`Message does not contain utf8Data`));
+ } catch (error) {
+ this._handler.onError(this, error);
}
}
}
diff --git a/packages/connect/test/orderbook_channel_factory_test.ts b/packages/connect/test/orderbook_channel_factory_test.ts
new file mode 100644
index 000000000..2ce361bd2
--- /dev/null
+++ b/packages/connect/test/orderbook_channel_factory_test.ts
@@ -0,0 +1,45 @@
+import * as chai from 'chai';
+import * as dirtyChai from 'dirty-chai';
+import * as _ from 'lodash';
+import 'mocha';
+
+import { orderbookChannelFactory } from '../src/orderbook_channel_factory';
+
+chai.config.includeStack = true;
+chai.use(dirtyChai);
+const expect = chai.expect;
+const emptyOrderbookChannelHandler = {
+ onSnapshot: () => {
+ _.noop();
+ },
+ onUpdate: () => {
+ _.noop();
+ },
+ onError: () => {
+ _.noop();
+ },
+ onClose: () => {
+ _.noop();
+ },
+};
+
+describe('orderbookChannelFactory', () => {
+ const websocketUrl = 'ws://localhost:8080';
+ describe('#createWebSocketOrderbookChannelAsync', () => {
+ it('throws when input is not a url', () => {
+ const badUrlInput = 54;
+ expect(
+ orderbookChannelFactory.createWebSocketOrderbookChannelAsync(
+ badUrlInput as any,
+ emptyOrderbookChannelHandler,
+ ),
+ ).to.be.rejected();
+ });
+ it('throws when handler has the incorrect members', () => {
+ const badHandlerInput = {};
+ expect(
+ orderbookChannelFactory.createWebSocketOrderbookChannelAsync(websocketUrl, badHandlerInput as any),
+ ).to.be.rejected();
+ });
+ });
+});
diff --git a/packages/connect/test/ws_orderbook_channel_test.ts b/packages/connect/test/ws_orderbook_channel_test.ts
index ce404d934..5a63cbdcc 100644
--- a/packages/connect/test/ws_orderbook_channel_test.ts
+++ b/packages/connect/test/ws_orderbook_channel_test.ts
@@ -2,60 +2,58 @@ import * as chai from 'chai';
import * as dirtyChai from 'dirty-chai';
import * as _ from 'lodash';
import 'mocha';
+import * as Sinon from 'sinon';
+import * as WebSocket from 'websocket';
import { WebSocketOrderbookChannel } from '../src/ws_orderbook_channel';
chai.config.includeStack = true;
chai.use(dirtyChai);
const expect = chai.expect;
+const emptyOrderbookChannelHandler = {
+ onSnapshot: () => {
+ _.noop();
+ },
+ onUpdate: () => {
+ _.noop();
+ },
+ onError: () => {
+ _.noop();
+ },
+ onClose: () => {
+ _.noop();
+ },
+};
describe('WebSocketOrderbookChannel', () => {
const websocketUrl = 'ws://localhost:8080';
- const orderbookChannel = new WebSocketOrderbookChannel(websocketUrl);
+ const openClient = new WebSocket.w3cwebsocket(websocketUrl);
+ Sinon.stub(openClient, 'readyState').get(() => WebSocket.w3cwebsocket.OPEN);
+ Sinon.stub(openClient, 'send').callsFake(_.noop.bind(_));
+ const openOrderbookChannel = new WebSocketOrderbookChannel(openClient, emptyOrderbookChannelHandler);
const subscriptionOpts = {
baseTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
quoteTokenAddress: '0xef7fff64389b814a946f3e92105513705ca6b990',
snapshot: true,
limit: 100,
};
- const emptyOrderbookChannelHandler = {
- onSnapshot: () => {
- _.noop();
- },
- onUpdate: () => {
- _.noop();
- },
- onError: () => {
- _.noop();
- },
- onClose: () => {
- _.noop();
- },
- };
describe('#subscribe', () => {
it('throws when subscriptionOpts does not conform to schema', () => {
- const badSubscribeCall = orderbookChannel.subscribe.bind(
- orderbookChannel,
- {},
- emptyOrderbookChannelHandler,
- );
+ const badSubscribeCall = openOrderbookChannel.subscribe.bind(openOrderbookChannel, {});
expect(badSubscribeCall).throws(
'Expected subscriptionOpts to conform to schema /RelayerApiOrderbookChannelSubscribePayload\nEncountered: {}\nValidation errors: instance requires property "baseTokenAddress", instance requires property "quoteTokenAddress"',
);
});
- it('throws when handler has the incorrect members', () => {
- const badSubscribeCall = orderbookChannel.subscribe.bind(orderbookChannel, subscriptionOpts, {});
- expect(badSubscribeCall).throws(
- 'Expected handler.onSnapshot to be of type function, encountered: undefined',
- );
- });
it('does not throw when inputs are of correct types', () => {
- const goodSubscribeCall = orderbookChannel.subscribe.bind(
- orderbookChannel,
- subscriptionOpts,
- emptyOrderbookChannelHandler,
- );
+ const goodSubscribeCall = openOrderbookChannel.subscribe.bind(openOrderbookChannel, subscriptionOpts);
expect(goodSubscribeCall).to.not.throw();
});
+ it('throws when client is closed', () => {
+ const closedClient = new WebSocket.w3cwebsocket(websocketUrl);
+ Sinon.stub(closedClient, 'readyState').get(() => WebSocket.w3cwebsocket.CLOSED);
+ const closedOrderbookChannel = new WebSocketOrderbookChannel(closedClient, emptyOrderbookChannelHandler);
+ const badSubscribeCall = closedOrderbookChannel.subscribe.bind(closedOrderbookChannel, subscriptionOpts);
+ expect(badSubscribeCall).throws('WebSocket connection is closed');
+ });
});
});
diff --git a/packages/contract-wrappers/CHANGELOG.json b/packages/contract-wrappers/CHANGELOG.json
index 24f722f15..c6b5d07f7 100644
--- a/packages/contract-wrappers/CHANGELOG.json
+++ b/packages/contract-wrappers/CHANGELOG.json
@@ -13,6 +13,15 @@
"timestamp": 1531149657
},
{
+ "timestamp": 1531919263,
+ "version": "0.1.1",
+ "changes": [
+ {
+ "note": "Dependencies updated"
+ }
+ ]
+ },
+ {
"timestamp": 1529397769,
"version": "0.0.5",
"changes": [
diff --git a/packages/contract-wrappers/CHANGELOG.md b/packages/contract-wrappers/CHANGELOG.md
index a2cc44f0d..822d0b486 100644
--- a/packages/contract-wrappers/CHANGELOG.md
+++ b/packages/contract-wrappers/CHANGELOG.md
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
+## v0.1.1 - _July 18, 2018_
+
+ * Dependencies updated
+
## v0.1.0 - _July 9, 2018_
* Update Blockstream dep. to V5.0 and no longer force unsubscribe on blockstream error (which are not recoverable)
diff --git a/packages/contract-wrappers/package.json b/packages/contract-wrappers/package.json
index b8fd8bd50..c37030797 100644
--- a/packages/contract-wrappers/package.json
+++ b/packages/contract-wrappers/package.json
@@ -1,6 +1,6 @@
{
"name": "@0xproject/contract-wrappers",
- "version": "0.1.0",
+ "version": "0.1.1",
"description": "Smart TS wrappers for 0x smart contracts",
"keywords": [
"0xproject",
@@ -43,12 +43,12 @@
"node": ">=6.0.0"
},
"devDependencies": {
- "@0xproject/abi-gen": "^0.3.3",
- "@0xproject/dev-utils": "^0.4.5",
- "@0xproject/migrations": "^0.0.9",
+ "@0xproject/abi-gen": "^0.3.4",
+ "@0xproject/dev-utils": "^0.4.6",
+ "@0xproject/migrations": "^0.0.10",
"@0xproject/monorepo-scripts": "^0.2.2",
- "@0xproject/sol-compiler": "^0.5.3",
- "@0xproject/subproviders": "^0.10.5",
+ "@0xproject/sol-compiler": "^0.5.4",
+ "@0xproject/subproviders": "^0.10.6",
"@0xproject/tslint-config": "^0.4.21",
"@types/lodash": "4.14.104",
"@types/mocha": "^2.2.42",
@@ -69,17 +69,17 @@
"shx": "^0.2.2",
"sinon": "^4.0.0",
"source-map-support": "^0.5.0",
- "tslint": "5.8.0",
- "typescript": "2.7.1",
- "web3-provider-engine": "14.0.6"
+ "web3-provider-engine": "14.0.6",
+ "tslint": "5.11.0",
+ "typescript": "2.7.1"
},
"dependencies": {
"@0xproject/assert": "^0.3.0",
- "@0xproject/base-contract": "^0.3.5",
+ "@0xproject/base-contract": "^0.3.6",
"@0xproject/order-utils": "^1.0.0",
- "@0xproject/typescript-typings": "^0.4.2",
- "@0xproject/utils": "^0.7.2",
- "@0xproject/web3-wrapper": "^0.7.2",
+ "@0xproject/typescript-typings": "^0.4.3",
+ "@0xproject/utils": "^0.7.3",
+ "@0xproject/web3-wrapper": "^0.7.3",
"@0xproject/fill-scenarios": "^1.0.0",
"@0xproject/json-schemas": "^1.0.0",
"@0xproject/types": "^1.0.0",
diff --git a/packages/contract-wrappers/src/contract_wrappers/contract_wrapper.ts b/packages/contract-wrappers/src/contract_wrappers/contract_wrapper.ts
index b8ca4d29b..daf70253a 100644
--- a/packages/contract-wrappers/src/contract_wrappers/contract_wrapper.ts
+++ b/packages/contract-wrappers/src/contract_wrappers/contract_wrapper.ts
@@ -1,5 +1,5 @@
import { ContractArtifact } from '@0xproject/sol-compiler';
-import { AbiDecoder, intervalUtils } from '@0xproject/utils';
+import { AbiDecoder, intervalUtils, logUtils } from '@0xproject/utils';
import { Web3Wrapper } from '@0xproject/web3-wrapper';
import { BlockParamLiteral, ContractAbi, FilterObject, LogEntry, LogWithDecodedArgs, RawLog } from 'ethereum-types';
import { Block, BlockAndLogStreamer, Log } from 'ethereumjs-blockstream';
@@ -41,6 +41,13 @@ export abstract class ContractWrapper {
};
private _onLogAddedSubscriptionToken: string | undefined;
private _onLogRemovedSubscriptionToken: string | undefined;
+ private static _onBlockAndLogStreamerError(isVerbose: boolean, err: Error): void {
+ // Since Blockstream errors are all recoverable, we simply log them if the verbose
+ // config is passed in.
+ if (isVerbose) {
+ logUtils.warn(err);
+ }
+ }
constructor(web3Wrapper: Web3Wrapper, networkId: number, blockPollingIntervalMs?: number) {
this._web3Wrapper = web3Wrapper;
this._networkId = networkId;
@@ -79,10 +86,11 @@ export abstract class ContractWrapper {
indexFilterValues: IndexedFilterValues,
abi: ContractAbi,
callback: EventCallback<ArgsType>,
+ isVerbose: boolean = false,
): string {
const filter = filterUtils.getFilter(address, eventName, indexFilterValues, abi);
if (_.isUndefined(this._blockAndLogStreamerIfExists)) {
- this._startBlockAndLogStream();
+ this._startBlockAndLogStream(isVerbose);
}
const filterToken = filterUtils.generateUUID();
this._filters[filterToken] = filter;
@@ -151,21 +159,21 @@ export abstract class ContractWrapper {
}
});
}
- private _startBlockAndLogStream(): void {
+ private _startBlockAndLogStream(isVerbose: boolean): void {
if (!_.isUndefined(this._blockAndLogStreamerIfExists)) {
throw new Error(ContractWrappersError.SubscriptionAlreadyPresent);
}
this._blockAndLogStreamerIfExists = new BlockAndLogStreamer(
this._web3Wrapper.getBlockAsync.bind(this._web3Wrapper),
this._web3Wrapper.getLogsAsync.bind(this._web3Wrapper),
- this._onBlockAndLogStreamerError.bind(this),
+ ContractWrapper._onBlockAndLogStreamerError.bind(this, isVerbose),
);
const catchAllLogFilter = {};
this._blockAndLogStreamerIfExists.addLogFilter(catchAllLogFilter);
this._blockAndLogStreamIntervalIfExists = intervalUtils.setAsyncExcludingInterval(
this._reconcileBlockAsync.bind(this),
this._blockPollingIntervalMs,
- this._onReconcileBlockError.bind(this),
+ ContractWrapper._onBlockAndLogStreamerError.bind(this, isVerbose),
);
let isRemoved = false;
this._onLogAddedSubscriptionToken = this._blockAndLogStreamerIfExists.subscribeToOnLogAdded(
@@ -176,20 +184,10 @@ export abstract class ContractWrapper {
this._onLogStateChanged.bind(this, isRemoved),
);
}
- private _onBlockAndLogStreamerError(err: Error): void {
- // Propogate all Blockstream subscriber errors to all
- // top-level subscriptions
- const filterCallbacks = _.values(this._filterCallbacks);
- _.each(filterCallbacks, filterCallback => {
- filterCallback(err);
- });
- }
- private _onReconcileBlockError(err: Error): void {
- const filterTokens = _.keys(this._filterCallbacks);
- _.each(filterTokens, filterToken => {
- this._unsubscribe(filterToken, err);
- });
- }
+ // HACK: This should be a package-scoped method (which doesn't exist in TS)
+ // We don't want this method available in the public interface for all classes
+ // who inherit from ContractWrapper, and it is only used by the internal implementation
+ // of those higher classes.
// tslint:disable-next-line:no-unused-variable
private _setNetworkId(networkId: number): void {
this._networkId = networkId;
diff --git a/packages/contract-wrappers/src/contract_wrappers/erc20_token_wrapper.ts b/packages/contract-wrappers/src/contract_wrappers/erc20_token_wrapper.ts
index 29c63564e..17bda5085 100644
--- a/packages/contract-wrappers/src/contract_wrappers/erc20_token_wrapper.ts
+++ b/packages/contract-wrappers/src/contract_wrappers/erc20_token_wrapper.ts
@@ -347,6 +347,7 @@ export class ERC20TokenWrapper extends ContractWrapper {
* @param indexFilterValues An object where the keys are indexed args returned by the event and
* the value is the value you are interested in. E.g `{maker: aUserAddressHex}`
* @param callback Callback that gets called when a log is added/removed
+ * @param isVerbose Enable verbose subscription warnings (e.g recoverable network issues encountered)
* @return Subscription token used later to unsubscribe
*/
public subscribe<ArgsType extends ERC20TokenEventArgs>(
@@ -354,6 +355,7 @@ export class ERC20TokenWrapper extends ContractWrapper {
eventName: ERC20TokenEvents,
indexFilterValues: IndexedFilterValues,
callback: EventCallback<ArgsType>,
+ isVerbose: boolean = false,
): string {
assert.isETHAddressHex('tokenAddress', tokenAddress);
assert.doesBelongToStringEnum('eventName', eventName, ERC20TokenEvents);
@@ -366,6 +368,7 @@ export class ERC20TokenWrapper extends ContractWrapper {
indexFilterValues,
artifacts.ERC20Token.compilerOutput.abi,
callback,
+ isVerbose,
);
return subscriptionToken;
}
diff --git a/packages/contract-wrappers/src/contract_wrappers/erc721_token_wrapper.ts b/packages/contract-wrappers/src/contract_wrappers/erc721_token_wrapper.ts
index b7e5519c4..7c2b41c62 100644
--- a/packages/contract-wrappers/src/contract_wrappers/erc721_token_wrapper.ts
+++ b/packages/contract-wrappers/src/contract_wrappers/erc721_token_wrapper.ts
@@ -342,15 +342,17 @@ export class ERC721TokenWrapper extends ContractWrapper {
const normalizedSenderAddress = senderAddress.toLowerCase();
const tokenContract = await this._getTokenContractAsync(normalizedTokenAddress);
const ownerAddress = await this.getOwnerOfAsync(tokenAddress, tokenId);
- const isApprovedForAll = await this.isApprovedForAllAsync(
- normalizedTokenAddress,
- ownerAddress,
- normalizedSenderAddress,
- );
- if (!isApprovedForAll) {
- const approvedAddress = await this.getApprovedIfExistsAsync(normalizedTokenAddress, tokenId);
- if (approvedAddress !== senderAddress) {
- throw new Error(ContractWrappersError.ERC721NoApproval);
+ if (normalizedSenderAddress !== ownerAddress) {
+ const isApprovedForAll = await this.isApprovedForAllAsync(
+ normalizedTokenAddress,
+ ownerAddress,
+ normalizedSenderAddress,
+ );
+ if (!isApprovedForAll) {
+ const approvedAddress = await this.getApprovedIfExistsAsync(normalizedTokenAddress, tokenId);
+ if (approvedAddress !== normalizedSenderAddress) {
+ throw new Error(ContractWrappersError.ERC721NoApproval);
+ }
}
}
const txHash = await tokenContract.transferFrom.sendTransactionAsync(
@@ -372,6 +374,7 @@ export class ERC721TokenWrapper extends ContractWrapper {
* @param indexFilterValues An object where the keys are indexed args returned by the event and
* the value is the value you are interested in. E.g `{maker: aUserAddressHex}`
* @param callback Callback that gets called when a log is added/removed
+ * @param isVerbose Enable verbose subscription warnings (e.g recoverable network issues encountered)
* @return Subscription token used later to unsubscribe
*/
public subscribe<ArgsType extends ERC721TokenEventArgs>(
@@ -379,6 +382,7 @@ export class ERC721TokenWrapper extends ContractWrapper {
eventName: ERC721TokenEvents,
indexFilterValues: IndexedFilterValues,
callback: EventCallback<ArgsType>,
+ isVerbose: boolean = false,
): string {
assert.isETHAddressHex('tokenAddress', tokenAddress);
assert.doesBelongToStringEnum('eventName', eventName, ERC721TokenEvents);
@@ -391,6 +395,7 @@ export class ERC721TokenWrapper extends ContractWrapper {
indexFilterValues,
artifacts.ERC721Token.compilerOutput.abi,
callback,
+ isVerbose,
);
return subscriptionToken;
}
diff --git a/packages/contract-wrappers/src/contract_wrappers/ether_token_wrapper.ts b/packages/contract-wrappers/src/contract_wrappers/ether_token_wrapper.ts
index 01440a5e1..5046d3667 100644
--- a/packages/contract-wrappers/src/contract_wrappers/ether_token_wrapper.ts
+++ b/packages/contract-wrappers/src/contract_wrappers/ether_token_wrapper.ts
@@ -146,6 +146,7 @@ export class EtherTokenWrapper extends ContractWrapper {
* @param indexFilterValues An object where the keys are indexed args returned by the event and
* the value is the value you are interested in. E.g `{_owner: aUserAddressHex}`
* @param callback Callback that gets called when a log is added/removed
+ * @param isVerbose Enable verbose subscription warnings (e.g recoverable network issues encountered)
* @return Subscription token used later to unsubscribe
*/
public subscribe<ArgsType extends WETH9EventArgs>(
@@ -153,6 +154,7 @@ export class EtherTokenWrapper extends ContractWrapper {
eventName: WETH9Events,
indexFilterValues: IndexedFilterValues,
callback: EventCallback<ArgsType>,
+ isVerbose: boolean = false,
): string {
assert.isETHAddressHex('etherTokenAddress', etherTokenAddress);
const normalizedEtherTokenAddress = etherTokenAddress.toLowerCase();
@@ -165,6 +167,7 @@ export class EtherTokenWrapper extends ContractWrapper {
indexFilterValues,
artifacts.EtherToken.compilerOutput.abi,
callback,
+ isVerbose,
);
return subscriptionToken;
}
diff --git a/packages/contract-wrappers/src/contract_wrappers/exchange_wrapper.ts b/packages/contract-wrappers/src/contract_wrappers/exchange_wrapper.ts
index 8b7148aed..3e7619228 100644
--- a/packages/contract-wrappers/src/contract_wrappers/exchange_wrapper.ts
+++ b/packages/contract-wrappers/src/contract_wrappers/exchange_wrapper.ts
@@ -1,4 +1,5 @@
import { schemas } from '@0xproject/json-schemas';
+import { assetDataUtils } from '@0xproject/order-utils';
import { AssetProxyId, Order, SignedOrder } from '@0xproject/types';
import { BigNumber } from '@0xproject/utils';
import { Web3Wrapper } from '@0xproject/web3-wrapper';
@@ -988,12 +989,14 @@ export class ExchangeWrapper extends ContractWrapper {
* @param indexFilterValues An object where the keys are indexed args returned by the event and
* the value is the value you are interested in. E.g `{maker: aUserAddressHex}`
* @param callback Callback that gets called when a log is added/removed
+ * @param isVerbose Enable verbose subscription warnings (e.g recoverable network issues encountered)
* @return Subscription token used later to unsubscribe
*/
public subscribe<ArgsType extends ExchangeEventArgs>(
eventName: ExchangeEvents,
indexFilterValues: IndexedFilterValues,
callback: EventCallback<ArgsType>,
+ isVerbose: boolean = false,
): string {
assert.doesBelongToStringEnum('eventName', eventName, ExchangeEvents);
assert.doesConformToSchema('indexFilterValues', indexFilterValues, schemas.indexFilterValuesSchema);
@@ -1005,6 +1008,7 @@ export class ExchangeWrapper extends ContractWrapper {
indexFilterValues,
artifacts.Exchange.compilerOutput.abi,
callback,
+ isVerbose,
);
return subscriptionToken;
}
@@ -1068,9 +1072,9 @@ export class ExchangeWrapper extends ContractWrapper {
* Returns the ZRX asset data used by the exchange contract.
* @return ZRX asset data
*/
- public async getZRXAssetDataAsync(): Promise<string> {
- const exchangeInstance = await this._getExchangeContractAsync();
- const zrxAssetData = exchangeInstance.ZRX_ASSET_DATA.callAsync();
+ public getZRXAssetData(): string {
+ const zrxTokenAddress = this.getZRXTokenAddress();
+ const zrxAssetData = assetDataUtils.encodeERC20AssetData(zrxTokenAddress);
return zrxAssetData;
}
// tslint:disable:no-unused-variable
diff --git a/packages/contract-wrappers/src/index.ts b/packages/contract-wrappers/src/index.ts
index b3c4b2c60..e5485d7a6 100644
--- a/packages/contract-wrappers/src/index.ts
+++ b/packages/contract-wrappers/src/index.ts
@@ -1,7 +1,10 @@
export { ContractWrappers } from './contract_wrappers';
export { ERC20TokenWrapper } from './contract_wrappers/erc20_token_wrapper';
+export { ERC721TokenWrapper } from './contract_wrappers/erc721_token_wrapper';
export { EtherTokenWrapper } from './contract_wrappers/ether_token_wrapper';
+export { ExchangeWrapper } from './contract_wrappers/exchange_wrapper';
export { ERC20ProxyWrapper } from './contract_wrappers/erc20_proxy_wrapper';
+export { ERC721ProxyWrapper } from './contract_wrappers/erc721_proxy_wrapper';
export {
ContractWrappersError,
@@ -23,7 +26,15 @@ export {
OrderInfo,
} from './types';
-export { Order, SignedOrder, ECSignature, OrderStateValid, OrderStateInvalid, OrderState } from '@0xproject/types';
+export {
+ Order,
+ SignedOrder,
+ ECSignature,
+ OrderStateValid,
+ OrderStateInvalid,
+ OrderState,
+ AssetProxyId,
+} from '@0xproject/types';
export {
BlockParamLiteral,
@@ -57,6 +68,7 @@ export {
ERC721TokenApprovalForAllEventArgs,
ERC721TokenTransferEventArgs,
ERC721TokenEvents,
+ ERC721TokenEventArgs,
} from './contract_wrappers/generated/erc721_token';
export {
diff --git a/packages/contract-wrappers/src/schemas/contract_wrappers_private_network_config_schema.ts b/packages/contract-wrappers/src/schemas/contract_wrappers_private_network_config_schema.ts
index 4b68daf1a..7e2eca61c 100644
--- a/packages/contract-wrappers/src/schemas/contract_wrappers_private_network_config_schema.ts
+++ b/packages/contract-wrappers/src/schemas/contract_wrappers_private_network_config_schema.ts
@@ -8,8 +8,8 @@ export const contractWrappersPrivateNetworkConfigSchema = {
gasPrice: { $ref: '/Number' },
zrxContractAddress: { $ref: '/Address' },
exchangeContractAddress: { $ref: '/Address' },
- tokenRegistryContractAddress: { $ref: '/Address' },
- tokenTransferProxyContractAddress: { $ref: '/Address' },
+ erc20ProxyContractAddress: { $ref: '/Address' },
+ erc721ProxyContractAddress: { $ref: '/Address' },
blockPollingIntervalMs: { type: 'number' },
orderWatcherConfig: {
type: 'object',
@@ -30,7 +30,7 @@ export const contractWrappersPrivateNetworkConfigSchema = {
'networkId',
'zrxContractAddress',
'exchangeContractAddress',
- 'tokenRegistryContractAddress',
- 'tokenTransferProxyContractAddress',
+ 'erc20ProxyContractAddress',
+ 'erc721ProxyContractAddress',
],
};
diff --git a/packages/contract-wrappers/src/schemas/contract_wrappers_public_network_config_schema.ts b/packages/contract-wrappers/src/schemas/contract_wrappers_public_network_config_schema.ts
index 988872376..b80e04310 100644
--- a/packages/contract-wrappers/src/schemas/contract_wrappers_public_network_config_schema.ts
+++ b/packages/contract-wrappers/src/schemas/contract_wrappers_public_network_config_schema.ts
@@ -22,8 +22,8 @@ export const contractWrappersPublicNetworkConfigSchema = {
gasPrice: { $ref: '/Number' },
zrxContractAddress: { $ref: '/Address' },
exchangeContractAddress: { $ref: '/Address' },
- tokenRegistryContractAddress: { $ref: '/Address' },
- tokenTransferProxyContractAddress: { $ref: '/Address' },
+ erc20ProxyContractAddress: { $ref: '/Address' },
+ erc721ProxyContractAddress: { $ref: '/Address' },
blockPollingIntervalMs: { type: 'number' },
orderWatcherConfig: {
type: 'object',
diff --git a/packages/contract-wrappers/src/utils/assert.ts b/packages/contract-wrappers/src/utils/assert.ts
index da6697b08..842b16fa0 100644
--- a/packages/contract-wrappers/src/utils/assert.ts
+++ b/packages/contract-wrappers/src/utils/assert.ts
@@ -1,5 +1,5 @@
import { assert as sharedAssert } from '@0xproject/assert';
-// We need those two unused imports because they're actually used by sharedAssert which gets injected here
+// HACK: We need those two unused imports because they're actually used by sharedAssert which gets injected here
import { Schema } from '@0xproject/json-schemas'; // tslint:disable-line:no-unused-variable
import { isValidSignatureAsync } from '@0xproject/order-utils';
import { ECSignature } from '@0xproject/types'; // tslint:disable-line:no-unused-variable
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/contract-wrappers/test/ether_token_wrapper_test.ts b/packages/contract-wrappers/test/ether_token_wrapper_test.ts
index 0a860884a..48bd6d3f6 100644
--- a/packages/contract-wrappers/test/ether_token_wrapper_test.ts
+++ b/packages/contract-wrappers/test/ether_token_wrapper_test.ts
@@ -336,15 +336,19 @@ describe('EtherTokenWrapper', () => {
describe('#getLogsAsync', () => {
let etherTokenAddress: string;
let erc20ProxyAddress: string;
- const blockRange: BlockRange = {
- fromBlock: 0,
- toBlock: BlockParamLiteral.Latest,
- };
+ let blockRange: BlockRange;
let txHash: string;
- before(() => {
+ before(async () => {
addressWithETH = userAddresses[0];
etherTokenAddress = tokenUtils.getWethTokenAddress();
erc20ProxyAddress = contractWrappers.erc20Proxy.getContractAddress();
+ // Start the block range after all migrations to avoid unexpected logs
+ const currentBlock = await web3Wrapper.getBlockNumberAsync();
+ const fromBlock = currentBlock + 1;
+ blockRange = {
+ fromBlock,
+ toBlock: BlockParamLiteral.Latest,
+ };
});
it('should get logs with decoded args emitted by Approval', async () => {
txHash = await contractWrappers.erc20Token.setUnlimitedProxyAllowanceAsync(
diff --git a/packages/contract-wrappers/test/exchange_wrapper_test.ts b/packages/contract-wrappers/test/exchange_wrapper_test.ts
index b2c716008..dca212f65 100644
--- a/packages/contract-wrappers/test/exchange_wrapper_test.ts
+++ b/packages/contract-wrappers/test/exchange_wrapper_test.ts
@@ -1,6 +1,6 @@
import { BlockchainLifecycle, callbackErrorReporter } from '@0xproject/dev-utils';
import { FillScenarios } from '@0xproject/fill-scenarios';
-import { assetProxyUtils, orderHashUtils } from '@0xproject/order-utils';
+import { assetDataUtils, orderHashUtils } from '@0xproject/order-utils';
import { DoneCallback, SignedOrder } from '@0xproject/types';
import { BigNumber } from '@0xproject/utils';
import * as chai from 'chai';
@@ -53,7 +53,6 @@ describe('ExchangeWrapper', () => {
await blockchainLifecycle.startAsync();
contractWrappers = new ContractWrappers(provider, config);
exchangeContractAddress = contractWrappers.exchange.getContractAddress();
- const erc20ProxyAddress = contractWrappers.erc20Proxy.getContractAddress();
userAddresses = await web3Wrapper.getAvailableAddressesAsync();
zrxTokenAddress = tokenUtils.getProtocolTokenAddress();
fillScenarios = new FillScenarios(
@@ -61,13 +60,14 @@ describe('ExchangeWrapper', () => {
userAddresses,
zrxTokenAddress,
exchangeContractAddress,
- erc20ProxyAddress,
+ contractWrappers.erc20Proxy.getContractAddress(),
+ contractWrappers.erc721Proxy.getContractAddress(),
);
[coinbase, makerAddress, takerAddress, feeRecipient, anotherMakerAddress] = userAddresses;
[makerTokenAddress, takerTokenAddress] = tokenUtils.getDummyERC20TokenAddresses();
[makerAssetData, takerAssetData] = [
- assetProxyUtils.encodeERC20AssetData(makerTokenAddress),
- assetProxyUtils.encodeERC20AssetData(takerTokenAddress),
+ assetDataUtils.encodeERC20AssetData(makerTokenAddress),
+ assetDataUtils.encodeERC20AssetData(takerTokenAddress),
];
signedOrder = await fillScenarios.createFillableSignedOrderAsync(
makerAssetData,
@@ -264,8 +264,8 @@ describe('ExchangeWrapper', () => {
});
});
describe('#getZRXAssetData', () => {
- it('should get the asset data', async () => {
- const ZRX_ASSET_DATA = await contractWrappers.exchange.getZRXAssetDataAsync();
+ it('should get the asset data', () => {
+ const ZRX_ASSET_DATA = contractWrappers.exchange.getZRXAssetData();
const ASSET_DATA_HEX_LENGTH = 74;
expect(ZRX_ASSET_DATA).to.have.length(ASSET_DATA_HEX_LENGTH);
});
diff --git a/packages/contract-wrappers/test/global_hooks.ts b/packages/contract-wrappers/test/global_hooks.ts
index bf80e0908..05b23d5b8 100644
--- a/packages/contract-wrappers/test/global_hooks.ts
+++ b/packages/contract-wrappers/test/global_hooks.ts
@@ -7,7 +7,7 @@ before('migrate contracts', async function(): Promise<void> {
// HACK: Since the migrations take longer then our global mocha timeout limit
// we manually increase it for this before hook.
const mochaTestTimeoutMs = 50000;
- this.timeout(mochaTestTimeoutMs);
+ this.timeout(mochaTestTimeoutMs); // tslint:disable-line:no-invalid-this
const txDefaults = {
gas: devConstants.GAS_LIMIT,
from: devConstants.TESTRPC_FIRST_ADDRESS,
diff --git a/packages/contract-wrappers/test/subscription_test.ts b/packages/contract-wrappers/test/subscription_test.ts
index adda4ab78..80d17576f 100644
--- a/packages/contract-wrappers/test/subscription_test.ts
+++ b/packages/contract-wrappers/test/subscription_test.ts
@@ -49,44 +49,6 @@ describe('SubscriptionTest', () => {
_.each(stubs, s => s.restore());
stubs = [];
});
- it('Should receive the Error when an error occurs while fetching the block', (done: DoneCallback) => {
- (async () => {
- const errMsg = 'Error fetching block';
- const callback = callbackErrorReporter.assertNodeCallbackError(done, errMsg);
- stubs = [Sinon.stub((contractWrappers as any)._web3Wrapper, 'getBlockAsync').throws(new Error(errMsg))];
- contractWrappers.erc20Token.subscribe(
- tokenAddress,
- ERC20TokenEvents.Approval,
- indexFilterValues,
- callback,
- );
- await contractWrappers.erc20Token.setAllowanceAsync(
- tokenAddress,
- coinbase,
- addressWithoutFunds,
- allowanceAmount,
- );
- })().catch(done);
- });
- it('Should receive the Error when an error occurs while reconciling the new block', (done: DoneCallback) => {
- (async () => {
- const errMsg = 'Error fetching logs';
- const callback = callbackErrorReporter.assertNodeCallbackError(done, errMsg);
- stubs = [Sinon.stub((contractWrappers as any)._web3Wrapper, 'getLogsAsync').throws(new Error(errMsg))];
- contractWrappers.erc20Token.subscribe(
- tokenAddress,
- ERC20TokenEvents.Approval,
- indexFilterValues,
- callback,
- );
- await contractWrappers.erc20Token.setAllowanceAsync(
- tokenAddress,
- coinbase,
- addressWithoutFunds,
- allowanceAmount,
- );
- })().catch(done);
- });
it('Should allow unsubscribeAll to be called successfully after an error', (done: DoneCallback) => {
(async () => {
const callback = (err: Error | null, _logEvent?: DecodedLogEvent<ERC20TokenApprovalEventArgs>) =>
diff --git a/packages/contracts/compiler.json b/packages/contracts/compiler.json
index 5ace566d8..2a7f8bbb9 100644
--- a/packages/contracts/compiler.json
+++ b/packages/contracts/compiler.json
@@ -25,6 +25,7 @@
"DummyERC721Token",
"ERC20Proxy",
"ERC20Token",
+ "ERC721Token",
"ERC721Proxy",
"Exchange",
"ExchangeWrapper",
diff --git a/packages/contracts/package.json b/packages/contracts/package.json
index 98b133e63..e3f06f16a 100644
--- a/packages/contracts/package.json
+++ b/packages/contracts/package.json
@@ -1,7 +1,7 @@
{
"private": true,
"name": "contracts",
- "version": "2.1.34",
+ "version": "2.1.35",
"engines": {
"node": ">=6.12"
},
@@ -46,11 +46,11 @@
},
"homepage": "https://github.com/0xProject/0x-monorepo/packages/contracts/README.md",
"devDependencies": {
- "@0xproject/abi-gen": "^0.3.3",
- "@0xproject/dev-utils": "^0.4.5",
+ "@0xproject/abi-gen": "^0.3.4",
+ "@0xproject/dev-utils": "^0.4.6",
"@0xproject/tslint-config": "^0.4.21",
- "@0xproject/subproviders": "^0.10.5",
- "@0xproject/sol-cov": "^0.1.2",
+ "@0xproject/subproviders": "^0.10.6",
+ "@0xproject/sol-cov": "^0.1.3",
"@types/lodash": "4.14.104",
"@types/bn.js": "^4.11.0",
"@types/node": "^8.0.53",
@@ -67,18 +67,18 @@
"shx": "^0.2.2",
"solc": "^0.4.24",
"solhint": "^1.2.1",
- "tslint": "5.8.0",
+ "tslint": "5.11.0",
"typescript": "2.7.1",
"yargs": "^10.0.3"
},
"dependencies": {
- "@0xproject/base-contract": "^0.3.5",
+ "@0xproject/base-contract": "^0.3.6",
"@0xproject/order-utils": "^1.0.0",
- "@0xproject/sol-compiler": "^0.5.3",
+ "@0xproject/sol-compiler": "^0.5.4",
"@0xproject/types": "^1.0.0",
- "@0xproject/typescript-typings": "^0.4.2",
- "@0xproject/utils": "^0.7.2",
- "@0xproject/web3-wrapper": "^0.7.2",
+ "@0xproject/typescript-typings": "^0.4.3",
+ "@0xproject/utils": "^0.7.3",
+ "@0xproject/web3-wrapper": "^0.7.3",
"ethereum-types": "^0.0.2",
"bn.js": "^4.11.8",
"ethereumjs-abi": "^0.6.4",
diff --git a/packages/contracts/src/1.0.0/MultiSigWalletWithTImeLockExceptRemoveAuthorizedAddress/MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress.sol b/packages/contracts/src/1.0.0/MultiSigWalletWithTImeLockExceptRemoveAuthorizedAddress/MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress.sol
index 241e02d4a..aee722c53 100644
--- a/packages/contracts/src/1.0.0/MultiSigWalletWithTImeLockExceptRemoveAuthorizedAddress/MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress.sol
+++ b/packages/contracts/src/1.0.0/MultiSigWalletWithTImeLockExceptRemoveAuthorizedAddress/MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress.sol
@@ -18,7 +18,7 @@
pragma solidity ^0.4.10;
-import "../../current/multisig/MultiSigWalletWithTimeLock.sol";
+import "../../2.0.0/multisig/MultiSigWalletWithTimeLock.sol";
contract MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress is MultiSigWalletWithTimeLock {
@@ -79,4 +79,4 @@ contract MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress is MultiSigWall
}
return true;
}
-} \ No newline at end of file
+}
diff --git a/packages/contracts/src/2.0.0/forwarder/Forwarder.sol b/packages/contracts/src/2.0.0/forwarder/Forwarder.sol
index fc17a4c72..546e7f22c 100644
--- a/packages/contracts/src/2.0.0/forwarder/Forwarder.sol
+++ b/packages/contracts/src/2.0.0/forwarder/Forwarder.sol
@@ -40,7 +40,6 @@ contract Forwarder is
address _exchange,
address _etherToken,
address _zrxToken,
- bytes4 _erc20AssetProxyId,
bytes memory _zrxAssetData,
bytes memory _wethAssetData
)
diff --git a/packages/contracts/src/2.0.0/protocol/AssetProxyOwner/AssetProxyOwner.sol b/packages/contracts/src/2.0.0/protocol/AssetProxyOwner/AssetProxyOwner.sol
index e7cf4ab5c..8b7333646 100644
--- a/packages/contracts/src/2.0.0/protocol/AssetProxyOwner/AssetProxyOwner.sol
+++ b/packages/contracts/src/2.0.0/protocol/AssetProxyOwner/AssetProxyOwner.sol
@@ -16,16 +16,14 @@
*/
-pragma solidity ^0.4.10;
+pragma solidity 0.4.10;
import "../../multisig/MultiSigWalletWithTimeLock.sol";
-import "../../utils/LibBytes/LibBytes.sol";
contract AssetProxyOwner is
MultiSigWalletWithTimeLock
{
- using LibBytes for bytes;
event AssetProxyRegistration(address assetProxyContract, bool isRegistered);
@@ -40,7 +38,7 @@ contract AssetProxyOwner is
modifier validRemoveAuthorizedAddressAtIndexTx(uint256 transactionId) {
Transaction storage tx = transactions[transactionId];
require(isAssetProxyRegistered[tx.destination]);
- require(tx.data.readBytes4(0) == REMOVE_AUTHORIZED_ADDRESS_AT_INDEX_SELECTOR);
+ require(readBytes4(tx.data, 0) == REMOVE_AUTHORIZED_ADDRESS_AT_INDEX_SELECTOR);
_;
}
@@ -97,4 +95,25 @@ contract AssetProxyOwner is
tx.executed = false;
}
}
+
+ /// @dev Reads an unpadded bytes4 value from a position in a byte array.
+ /// @param b Byte array containing a bytes4 value.
+ /// @param index Index in byte array of bytes4 value.
+ /// @return bytes4 value from byte array.
+ function readBytes4(
+ bytes memory b,
+ uint256 index
+ )
+ internal
+ returns (bytes4 result)
+ {
+ require(b.length >= index + 4);
+ assembly {
+ result := mload(add(b, 32))
+ // Solidity does not require us to clean the trailing bytes.
+ // We do it anyway
+ result := and(result, 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000)
+ }
+ return result;
+ }
}
diff --git a/packages/contracts/src/2.0.0/protocol/Exchange/MixinExchangeCore.sol b/packages/contracts/src/2.0.0/protocol/Exchange/MixinExchangeCore.sol
index ec84b1e19..6f435892b 100644
--- a/packages/contracts/src/2.0.0/protocol/Exchange/MixinExchangeCore.sol
+++ b/packages/contracts/src/2.0.0/protocol/Exchange/MixinExchangeCore.sol
@@ -154,6 +154,9 @@ contract MixinExchangeCore is
// Compute the order hash
orderInfo.orderHash = getOrderHash(order);
+ // Fetch filled amount
+ orderInfo.orderTakerAssetFilledAmount = filled[orderInfo.orderHash];
+
// If order.makerAssetAmount is zero, we also reject the order.
// While the Exchange contract handles them correctly, they create
// edge cases in the supporting infrastructure because they have
@@ -172,6 +175,12 @@ contract MixinExchangeCore is
return orderInfo;
}
+ // Validate order availability
+ if (orderInfo.orderTakerAssetFilledAmount >= order.takerAssetAmount) {
+ orderInfo.orderStatus = uint8(OrderStatus.FULLY_FILLED);
+ return orderInfo;
+ }
+
// Validate order expiration
// solhint-disable-next-line not-rely-on-time
if (block.timestamp >= order.expirationTimeSeconds) {
@@ -189,13 +198,6 @@ contract MixinExchangeCore is
return orderInfo;
}
- // Fetch filled amount and validate order availability
- orderInfo.orderTakerAssetFilledAmount = filled[orderInfo.orderHash];
- if (orderInfo.orderTakerAssetFilledAmount >= order.takerAssetAmount) {
- orderInfo.orderStatus = uint8(OrderStatus.FULLY_FILLED);
- return orderInfo;
- }
-
// All other statuses are ruled out: order is Fillable
orderInfo.orderStatus = uint8(OrderStatus.FILLABLE);
return orderInfo;
diff --git a/packages/contracts/src/2.0.0/protocol/Exchange/MixinWrapperFunctions.sol b/packages/contracts/src/2.0.0/protocol/Exchange/MixinWrapperFunctions.sol
index a16d2f897..d420f7e85 100644
--- a/packages/contracts/src/2.0.0/protocol/Exchange/MixinWrapperFunctions.sol
+++ b/packages/contracts/src/2.0.0/protocol/Exchange/MixinWrapperFunctions.sol
@@ -529,4 +529,20 @@ contract MixinWrapperFunctions is
cancelOrder(orders[i]);
}
}
+
+ /// @dev Fetches information for all passed in orders.
+ /// @param orders Array of order specifications.
+ /// @return Array of OrderInfo instances that correspond to each order.
+ function getOrdersInfo(LibOrder.Order[] memory orders)
+ public
+ view
+ returns (LibOrder.OrderInfo[] memory)
+ {
+ uint256 length = orders.length;
+ LibOrder.OrderInfo[] memory ordersInfo = new LibOrder.OrderInfo[](length);
+ for (uint256 i = 0; i < length; i++) {
+ ordersInfo[i] = getOrderInfo(orders[i]);
+ }
+ return ordersInfo;
+ }
}
diff --git a/packages/contracts/src/2.0.0/protocol/Exchange/interfaces/IWrapperFunctions.sol b/packages/contracts/src/2.0.0/protocol/Exchange/interfaces/IWrapperFunctions.sol
index ad7a56a06..56a533646 100644
--- a/packages/contracts/src/2.0.0/protocol/Exchange/interfaces/IWrapperFunctions.sol
+++ b/packages/contracts/src/2.0.0/protocol/Exchange/interfaces/IWrapperFunctions.sol
@@ -149,4 +149,12 @@ contract IWrapperFunctions {
/// @param orders Array of order specifications.
function batchCancelOrders(LibOrder.Order[] memory orders)
public;
+
+ /// @dev Fetches information for all passed in orders
+ /// @param orders Array of order specifications.
+ /// @return Array of OrderInfo instances that correspond to each order.
+ function getOrdersInfo(LibOrder.Order[] memory orders)
+ public
+ view
+ returns (LibOrder.OrderInfo[] memory);
}
diff --git a/packages/contracts/src/2.0.0/test/TestAssetProxyOwner/TestAssetProxyOwner.sol b/packages/contracts/src/2.0.0/test/TestAssetProxyOwner/TestAssetProxyOwner.sol
index d6b6b29f2..75e782d43 100644
--- a/packages/contracts/src/2.0.0/test/TestAssetProxyOwner/TestAssetProxyOwner.sol
+++ b/packages/contracts/src/2.0.0/test/TestAssetProxyOwner/TestAssetProxyOwner.sol
@@ -16,7 +16,7 @@
*/
-pragma solidity 0.4.24;
+pragma solidity 0.4.10;
import "../../protocol/AssetProxyOwner/AssetProxyOwner.sol";
@@ -26,7 +26,7 @@ contract TestAssetProxyOwner is
AssetProxyOwner
{
- constructor(
+ function TestAssetProxyOwner(
address[] memory _owners,
address[] memory _assetProxyContracts,
uint256 _required,
@@ -38,7 +38,6 @@ contract TestAssetProxyOwner is
function testValidRemoveAuthorizedAddressAtIndexTx(uint256 id)
public
- view
validRemoveAuthorizedAddressAtIndexTx(id)
returns (bool)
{
@@ -51,9 +50,23 @@ contract TestAssetProxyOwner is
/// @return Successful if data is a call to `removeAuthorizedAddressAtIndex`.
function isFunctionRemoveAuthorizedAddressAtIndex(bytes memory data)
public
- pure
returns (bool)
{
- return data.readBytes4(0) == REMOVE_AUTHORIZED_ADDRESS_AT_INDEX_SELECTOR;
+ return readBytes4(data, 0) == REMOVE_AUTHORIZED_ADDRESS_AT_INDEX_SELECTOR;
+ }
+
+ /// @dev Reads an unpadded bytes4 value from a position in a byte array.
+ /// @param b Byte array containing a bytes4 value.
+ /// @param index Index in byte array of bytes4 value.
+ /// @return bytes4 value from byte array.
+ function publicReadBytes4(
+ bytes memory b,
+ uint256 index
+ )
+ public
+ returns (bytes4 result)
+ {
+ result = readBytes4(b, index);
+ return result;
}
}
diff --git a/packages/contracts/src/2.0.0/utils/LibBytes/LibBytes.sol b/packages/contracts/src/2.0.0/utils/LibBytes/LibBytes.sol
index 01d34fa8f..504e950a8 100644
--- a/packages/contracts/src/2.0.0/utils/LibBytes/LibBytes.sol
+++ b/packages/contracts/src/2.0.0/utils/LibBytes/LibBytes.sol
@@ -457,7 +457,8 @@ library LibBytes {
/// @return bytes4 value from byte array.
function readBytes4(
bytes memory b,
- uint256 index)
+ uint256 index
+ )
internal
pure
returns (bytes4 result)
diff --git a/packages/contracts/src/2.0.0/utils/SafeMath/SafeMath.sol b/packages/contracts/src/2.0.0/utils/SafeMath/SafeMath.sol
index 4413244db..190989181 100644
--- a/packages/contracts/src/2.0.0/utils/SafeMath/SafeMath.sol
+++ b/packages/contracts/src/2.0.0/utils/SafeMath/SafeMath.sol
@@ -7,8 +7,14 @@ contract SafeMath {
pure
returns (uint256)
{
+ if (a == 0) {
+ return 0;
+ }
uint256 c = a * b;
- assert(a == 0 || c / a == b);
+ require(
+ c / a == b,
+ "UINT256_OVERFLOW"
+ );
return c;
}
@@ -26,7 +32,10 @@ contract SafeMath {
pure
returns (uint256)
{
- assert(b <= a);
+ require(
+ b <= a,
+ "UINT256_OVERFLOW"
+ );
return a - b;
}
@@ -36,7 +45,10 @@ contract SafeMath {
returns (uint256)
{
uint256 c = a + b;
- assert(c >= a);
+ require(
+ c >= a,
+ "UINT256_OVERFLOW"
+ );
return c;
}
diff --git a/packages/contracts/test/asset_proxy/proxies.ts b/packages/contracts/test/asset_proxy/proxies.ts
index e1167b156..39674a030 100644
--- a/packages/contracts/test/asset_proxy/proxies.ts
+++ b/packages/contracts/test/asset_proxy/proxies.ts
@@ -1,5 +1,5 @@
import { BlockchainLifecycle } from '@0xproject/dev-utils';
-import { assetProxyUtils, generatePseudoRandomSalt } from '@0xproject/order-utils';
+import { assetDataUtils, generatePseudoRandomSalt } from '@0xproject/order-utils';
import { RevertReason } from '@0xproject/types';
import { BigNumber } from '@0xproject/utils';
import * as chai from 'chai';
@@ -23,6 +23,7 @@ import { constants } from '../utils/constants';
import { ERC20Wrapper } from '../utils/erc20_wrapper';
import { ERC721Wrapper } from '../utils/erc721_wrapper';
import { LogDecoder } from '../utils/log_decoder';
+import { typeEncodingUtils } from '../utils/type_encoding_utils';
import { provider, txDefaults, web3Wrapper } from '../utils/web3_wrapper';
chaiSetup.configure();
@@ -107,7 +108,7 @@ describe('Asset Transfer Proxies', () => {
describe('transferFrom', () => {
it('should successfully transfer tokens', async () => {
// Construct ERC20 asset data
- const encodedAssetData = assetProxyUtils.encodeERC20AssetData(zrxToken.address);
+ const encodedAssetData = assetDataUtils.encodeERC20AssetData(zrxToken.address);
// Perform a transfer from makerAddress to takerAddress
const erc20Balances = await erc20Wrapper.getBalancesAsync();
const amount = new BigNumber(10);
@@ -137,7 +138,7 @@ describe('Asset Transfer Proxies', () => {
it('should do nothing if transferring 0 amount of a token', async () => {
// Construct ERC20 asset data
- const encodedAssetData = assetProxyUtils.encodeERC20AssetData(zrxToken.address);
+ const encodedAssetData = assetDataUtils.encodeERC20AssetData(zrxToken.address);
// Perform a transfer from makerAddress to takerAddress
const erc20Balances = await erc20Wrapper.getBalancesAsync();
const amount = new BigNumber(0);
@@ -167,7 +168,7 @@ describe('Asset Transfer Proxies', () => {
it('should throw if allowances are too low', async () => {
// Construct ERC20 asset data
- const encodedAssetData = assetProxyUtils.encodeERC20AssetData(zrxToken.address);
+ const encodedAssetData = assetDataUtils.encodeERC20AssetData(zrxToken.address);
// Create allowance less than transfer amount. Set allowance on proxy.
const allowance = new BigNumber(0);
const amount = new BigNumber(10);
@@ -196,7 +197,7 @@ describe('Asset Transfer Proxies', () => {
it('should throw if requesting address is not authorized', async () => {
// Construct ERC20 asset data
- const encodedAssetData = assetProxyUtils.encodeERC20AssetData(zrxToken.address);
+ const encodedAssetData = assetDataUtils.encodeERC20AssetData(zrxToken.address);
// Perform a transfer from makerAddress to takerAddress
const amount = new BigNumber(10);
const data = assetProxyInterface.transferFrom.getABIEncodedTransactionData(
@@ -227,7 +228,7 @@ describe('Asset Transfer Proxies', () => {
describe('transferFrom', () => {
it('should successfully transfer tokens', async () => {
// Construct ERC721 asset data
- const encodedAssetData = assetProxyUtils.encodeERC721AssetData(erc721Token.address, erc721MakerTokenId);
+ const encodedAssetData = assetDataUtils.encodeERC721AssetData(erc721Token.address, erc721MakerTokenId);
// Verify pre-condition
const ownerMakerAsset = await erc721Token.ownerOf.callAsync(erc721MakerTokenId);
expect(ownerMakerAsset).to.be.bignumber.equal(makerAddress);
@@ -254,7 +255,7 @@ describe('Asset Transfer Proxies', () => {
it('should call onERC721Received when transferring to a smart contract without receiver data', async () => {
// Construct ERC721 asset data
- const encodedAssetData = assetProxyUtils.encodeERC721AssetData(erc721Token.address, erc721MakerTokenId);
+ const encodedAssetData = assetDataUtils.encodeERC721AssetData(erc721Token.address, erc721MakerTokenId);
// Verify pre-condition
const ownerMakerAsset = await erc721Token.ownerOf.callAsync(erc721MakerTokenId);
expect(ownerMakerAsset).to.be.bignumber.equal(makerAddress);
@@ -272,7 +273,7 @@ describe('Asset Transfer Proxies', () => {
to: erc721Proxy.address,
data,
from: exchangeAddress,
- gas: constants.TRANSFER_FROM_GAS,
+ gas: constants.MAX_TRANSFER_FROM_GAS,
}),
);
// Verify that no log was emitted by erc721 receiver
@@ -288,8 +289,8 @@ describe('Asset Transfer Proxies', () => {
it('should call onERC721Received when transferring to a smart contract with receiver data', async () => {
// Construct ERC721 asset data
- const receiverData = ethUtil.bufferToHex(assetProxyUtils.encodeUint256(generatePseudoRandomSalt()));
- const encodedAssetData = assetProxyUtils.encodeERC721AssetData(
+ const receiverData = ethUtil.bufferToHex(typeEncodingUtils.encodeUint256(generatePseudoRandomSalt()));
+ const encodedAssetData = assetDataUtils.encodeERC721AssetData(
erc721Token.address,
erc721MakerTokenId,
receiverData,
@@ -311,7 +312,7 @@ describe('Asset Transfer Proxies', () => {
to: erc721Proxy.address,
data,
from: exchangeAddress,
- gas: constants.TRANSFER_FROM_GAS,
+ gas: constants.MAX_TRANSFER_FROM_GAS,
}),
);
// Validate log emitted by erc721 receiver
@@ -327,8 +328,8 @@ describe('Asset Transfer Proxies', () => {
it('should throw if there is receiver data but contract does not have onERC721Received', async () => {
// Construct ERC721 asset data
- const receiverData = ethUtil.bufferToHex(assetProxyUtils.encodeUint256(generatePseudoRandomSalt()));
- const encodedAssetData = assetProxyUtils.encodeERC721AssetData(
+ const receiverData = ethUtil.bufferToHex(typeEncodingUtils.encodeUint256(generatePseudoRandomSalt()));
+ const encodedAssetData = assetDataUtils.encodeERC721AssetData(
erc721Token.address,
erc721MakerTokenId,
receiverData,
@@ -349,7 +350,7 @@ describe('Asset Transfer Proxies', () => {
to: erc721Proxy.address,
data,
from: exchangeAddress,
- gas: constants.TRANSFER_FROM_GAS,
+ gas: constants.MAX_TRANSFER_FROM_GAS,
}),
RevertReason.TransferFailed,
);
@@ -357,7 +358,7 @@ describe('Asset Transfer Proxies', () => {
it('should throw if transferring 0 amount of a token', async () => {
// Construct ERC721 asset data
- const encodedAssetData = assetProxyUtils.encodeERC721AssetData(erc721Token.address, erc721MakerTokenId);
+ const encodedAssetData = assetDataUtils.encodeERC721AssetData(erc721Token.address, erc721MakerTokenId);
// Verify pre-condition
const ownerMakerAsset = await erc721Token.ownerOf.callAsync(erc721MakerTokenId);
expect(ownerMakerAsset).to.be.bignumber.equal(makerAddress);
@@ -381,7 +382,7 @@ describe('Asset Transfer Proxies', () => {
it('should throw if transferring > 1 amount of a token', async () => {
// Construct ERC721 asset data
- const encodedAssetData = assetProxyUtils.encodeERC721AssetData(erc721Token.address, erc721MakerTokenId);
+ const encodedAssetData = assetDataUtils.encodeERC721AssetData(erc721Token.address, erc721MakerTokenId);
// Verify pre-condition
const ownerMakerAsset = await erc721Token.ownerOf.callAsync(erc721MakerTokenId);
expect(ownerMakerAsset).to.be.bignumber.equal(makerAddress);
@@ -405,7 +406,7 @@ describe('Asset Transfer Proxies', () => {
it('should throw if allowances are too low', async () => {
// Construct ERC721 asset data
- const encodedAssetData = assetProxyUtils.encodeERC721AssetData(erc721Token.address, erc721MakerTokenId);
+ const encodedAssetData = assetDataUtils.encodeERC721AssetData(erc721Token.address, erc721MakerTokenId);
// Remove transfer approval for makerAddress.
await web3Wrapper.awaitTransactionSuccessAsync(
await erc721Token.approve.sendTransactionAsync(constants.NULL_ADDRESS, erc721MakerTokenId, {
@@ -433,7 +434,7 @@ describe('Asset Transfer Proxies', () => {
it('should throw if requesting address is not authorized', async () => {
// Construct ERC721 asset data
- const encodedAssetData = assetProxyUtils.encodeERC721AssetData(erc721Token.address, erc721MakerTokenId);
+ const encodedAssetData = assetDataUtils.encodeERC721AssetData(erc721Token.address, erc721MakerTokenId);
// Perform a transfer from makerAddress to takerAddress
const amount = new BigNumber(1);
const data = assetProxyInterface.transferFrom.getABIEncodedTransactionData(
diff --git a/packages/contracts/test/exchange/core.ts b/packages/contracts/test/exchange/core.ts
index d9f3851d1..33246a681 100644
--- a/packages/contracts/test/exchange/core.ts
+++ b/packages/contracts/test/exchange/core.ts
@@ -1,5 +1,5 @@
import { BlockchainLifecycle } from '@0xproject/dev-utils';
-import { assetProxyUtils, orderHashUtils } from '@0xproject/order-utils';
+import { assetDataUtils, orderHashUtils } from '@0xproject/order-utils';
import { RevertReason, SignedOrder } from '@0xproject/types';
import { BigNumber } from '@0xproject/utils';
import { Web3Wrapper } from '@0xproject/web3-wrapper';
@@ -15,13 +15,14 @@ import { ERC721ProxyContract } from '../../generated_contract_wrappers/erc721_pr
import { ExchangeCancelEventArgs, ExchangeContract } from '../../generated_contract_wrappers/exchange';
import { artifacts } from '../utils/artifacts';
import { expectTransactionFailedAsync } from '../utils/assertions';
+import { getLatestBlockTimestampAsync, increaseTimeAndMineBlockAsync } from '../utils/block_timestamp';
import { chaiSetup } from '../utils/chai_setup';
import { constants } from '../utils/constants';
import { ERC20Wrapper } from '../utils/erc20_wrapper';
import { ERC721Wrapper } from '../utils/erc721_wrapper';
import { ExchangeWrapper } from '../utils/exchange_wrapper';
import { OrderFactory } from '../utils/order_factory';
-import { ERC20BalancesByOwner } from '../utils/types';
+import { ERC20BalancesByOwner, OrderStatus } from '../utils/types';
import { provider, txDefaults, web3Wrapper } from '../utils/web3_wrapper';
chaiSetup.configure();
@@ -87,7 +88,7 @@ describe('Exchange core', () => {
artifacts.Exchange,
provider,
txDefaults,
- assetProxyUtils.encodeERC20AssetData(zrxToken.address),
+ assetDataUtils.encodeERC20AssetData(zrxToken.address),
);
exchangeWrapper = new ExchangeWrapper(exchange, provider);
await exchangeWrapper.registerAssetProxyAsync(erc20Proxy.address, owner);
@@ -114,8 +115,8 @@ describe('Exchange core', () => {
exchangeAddress: exchange.address,
makerAddress,
feeRecipientAddress,
- makerAssetData: assetProxyUtils.encodeERC20AssetData(defaultMakerAssetAddress),
- takerAssetData: assetProxyUtils.encodeERC20AssetData(defaultTakerAssetAddress),
+ makerAssetData: assetDataUtils.encodeERC20AssetData(defaultMakerAssetAddress),
+ takerAssetData: assetDataUtils.encodeERC20AssetData(defaultTakerAssetAddress),
};
const privateKey = constants.TESTRPC_PRIVATE_KEYS[accounts.indexOf(makerAddress)];
orderFactory = new OrderFactory(privateKey, defaultOrderParams);
@@ -129,11 +130,11 @@ describe('Exchange core', () => {
describe('fillOrder', () => {
beforeEach(async () => {
erc20Balances = await erc20Wrapper.getBalancesAsync();
- signedOrder = orderFactory.newSignedOrder();
+ signedOrder = await orderFactory.newSignedOrderAsync();
});
it('should throw if signature is invalid', async () => {
- signedOrder = orderFactory.newSignedOrder({
+ signedOrder = await orderFactory.newSignedOrderAsync({
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
});
@@ -151,7 +152,7 @@ describe('Exchange core', () => {
});
it('should throw if no value is filled', async () => {
- signedOrder = orderFactory.newSignedOrder();
+ signedOrder = await orderFactory.newSignedOrderAsync();
await exchangeWrapper.fillOrderAsync(signedOrder, takerAddress);
return expectTransactionFailedAsync(
exchangeWrapper.fillOrderAsync(signedOrder, takerAddress),
@@ -163,7 +164,7 @@ describe('Exchange core', () => {
describe('cancelOrder', () => {
beforeEach(async () => {
erc20Balances = await erc20Wrapper.getBalancesAsync();
- signedOrder = orderFactory.newSignedOrder();
+ signedOrder = await orderFactory.newSignedOrderAsync();
});
it('should throw if not sent by maker', async () => {
@@ -174,7 +175,7 @@ describe('Exchange core', () => {
});
it('should throw if makerAssetAmount is 0', async () => {
- signedOrder = orderFactory.newSignedOrder({
+ signedOrder = await orderFactory.newSignedOrderAsync({
makerAssetAmount: new BigNumber(0),
});
@@ -185,7 +186,7 @@ describe('Exchange core', () => {
});
it('should throw if takerAssetAmount is 0', async () => {
- signedOrder = orderFactory.newSignedOrder({
+ signedOrder = await orderFactory.newSignedOrderAsync({
takerAssetAmount: new BigNumber(0),
});
@@ -229,8 +230,9 @@ describe('Exchange core', () => {
});
it('should throw if order is expired', async () => {
- signedOrder = orderFactory.newSignedOrder({
- expirationTimeSeconds: new BigNumber(Math.floor((Date.now() - 10000) / 1000)),
+ const currentTimestamp = await getLatestBlockTimestampAsync();
+ signedOrder = await orderFactory.newSignedOrderAsync({
+ expirationTimeSeconds: new BigNumber(currentTimestamp).sub(10),
});
return expectTransactionFailedAsync(
exchangeWrapper.cancelOrderAsync(signedOrder, makerAddress),
@@ -239,7 +241,7 @@ describe('Exchange core', () => {
});
it('should throw if rounding error is greater than 0.1%', async () => {
- signedOrder = orderFactory.newSignedOrder({
+ signedOrder = await orderFactory.newSignedOrderAsync({
makerAssetAmount: new BigNumber(1001),
takerAssetAmount: new BigNumber(3),
});
@@ -288,22 +290,22 @@ describe('Exchange core', () => {
// Since we cancelled with orderEpoch=1, orders with orderEpoch<=1 will not be processed
erc20Balances = await erc20Wrapper.getBalancesAsync();
const signedOrders = [
- orderFactory.newSignedOrder({
+ await orderFactory.newSignedOrderAsync({
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(9), 18),
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(9), 18),
salt: new BigNumber(0),
}),
- orderFactory.newSignedOrder({
+ await orderFactory.newSignedOrderAsync({
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(79), 18),
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(79), 18),
salt: new BigNumber(1),
}),
- orderFactory.newSignedOrder({
+ await orderFactory.newSignedOrderAsync({
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(979), 18),
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(979), 18),
salt: new BigNumber(2),
}),
- orderFactory.newSignedOrder({
+ await orderFactory.newSignedOrderAsync({
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(7979), 18),
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(7979), 18),
salt: new BigNumber(3),
@@ -350,11 +352,11 @@ describe('Exchange core', () => {
// Construct Exchange parameters
const makerAssetId = erc721TakerAssetIds[0];
const takerAssetId = erc721TakerAssetIds[1];
- signedOrder = orderFactory.newSignedOrder({
+ signedOrder = await orderFactory.newSignedOrderAsync({
makerAssetAmount: new BigNumber(1),
takerAssetAmount: new BigNumber(1),
- makerAssetData: assetProxyUtils.encodeERC721AssetData(erc721Token.address, makerAssetId),
- takerAssetData: assetProxyUtils.encodeERC721AssetData(erc721Token.address, takerAssetId),
+ makerAssetData: assetDataUtils.encodeERC721AssetData(erc721Token.address, makerAssetId),
+ takerAssetData: assetDataUtils.encodeERC721AssetData(erc721Token.address, takerAssetId),
});
// Verify pre-conditions
const initialOwnerMakerAsset = await erc721Token.ownerOf.callAsync(makerAssetId);
@@ -373,11 +375,11 @@ describe('Exchange core', () => {
// Construct Exchange parameters
const makerAssetId = erc721MakerAssetIds[0];
const takerAssetId = erc721MakerAssetIds[1];
- signedOrder = orderFactory.newSignedOrder({
+ signedOrder = await orderFactory.newSignedOrderAsync({
makerAssetAmount: new BigNumber(1),
takerAssetAmount: new BigNumber(1),
- makerAssetData: assetProxyUtils.encodeERC721AssetData(erc721Token.address, makerAssetId),
- takerAssetData: assetProxyUtils.encodeERC721AssetData(erc721Token.address, takerAssetId),
+ makerAssetData: assetDataUtils.encodeERC721AssetData(erc721Token.address, makerAssetId),
+ takerAssetData: assetDataUtils.encodeERC721AssetData(erc721Token.address, takerAssetId),
});
// Verify pre-conditions
const initialOwnerMakerAsset = await erc721Token.ownerOf.callAsync(makerAssetId);
@@ -396,11 +398,11 @@ describe('Exchange core', () => {
// Construct Exchange parameters
const makerAssetId = erc721MakerAssetIds[0];
const takerAssetId = erc721TakerAssetIds[0];
- signedOrder = orderFactory.newSignedOrder({
+ signedOrder = await orderFactory.newSignedOrderAsync({
makerAssetAmount: new BigNumber(2),
takerAssetAmount: new BigNumber(1),
- makerAssetData: assetProxyUtils.encodeERC721AssetData(erc721Token.address, makerAssetId),
- takerAssetData: assetProxyUtils.encodeERC721AssetData(erc721Token.address, takerAssetId),
+ makerAssetData: assetDataUtils.encodeERC721AssetData(erc721Token.address, makerAssetId),
+ takerAssetData: assetDataUtils.encodeERC721AssetData(erc721Token.address, takerAssetId),
});
// Verify pre-conditions
const initialOwnerMakerAsset = await erc721Token.ownerOf.callAsync(makerAssetId);
@@ -419,11 +421,11 @@ describe('Exchange core', () => {
// Construct Exchange parameters
const makerAssetId = erc721MakerAssetIds[0];
const takerAssetId = erc721TakerAssetIds[0];
- signedOrder = orderFactory.newSignedOrder({
+ signedOrder = await orderFactory.newSignedOrderAsync({
makerAssetAmount: new BigNumber(1),
takerAssetAmount: new BigNumber(500),
- makerAssetData: assetProxyUtils.encodeERC721AssetData(erc721Token.address, makerAssetId),
- takerAssetData: assetProxyUtils.encodeERC721AssetData(erc721Token.address, takerAssetId),
+ makerAssetData: assetDataUtils.encodeERC721AssetData(erc721Token.address, makerAssetId),
+ takerAssetData: assetDataUtils.encodeERC721AssetData(erc721Token.address, takerAssetId),
});
// Verify pre-conditions
const initialOwnerMakerAsset = await erc721Token.ownerOf.callAsync(makerAssetId);
@@ -441,11 +443,11 @@ describe('Exchange core', () => {
it('should throw on partial fill', async () => {
// Construct Exchange parameters
const makerAssetId = erc721MakerAssetIds[0];
- signedOrder = orderFactory.newSignedOrder({
+ signedOrder = await orderFactory.newSignedOrderAsync({
makerAssetAmount: new BigNumber(1),
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 18),
- makerAssetData: assetProxyUtils.encodeERC721AssetData(erc721Token.address, makerAssetId),
- takerAssetData: assetProxyUtils.encodeERC20AssetData(defaultTakerAssetAddress),
+ makerAssetData: assetDataUtils.encodeERC721AssetData(erc721Token.address, makerAssetId),
+ takerAssetData: assetDataUtils.encodeERC20AssetData(defaultTakerAssetAddress),
});
// Call Exchange
const takerAssetFillAmount = signedOrder.takerAssetAmount.div(2);
@@ -459,14 +461,12 @@ describe('Exchange core', () => {
// Construct Exchange parameters
const makerAssetId = erc721MakerAssetIds[0];
const takerAssetId = erc721TakerAssetIds[0];
- const makerAssetData = assetProxyUtils
- .encodeERC721AssetData(erc721Token.address, makerAssetId)
- .slice(0, -2);
- signedOrder = orderFactory.newSignedOrder({
+ const makerAssetData = assetDataUtils.encodeERC721AssetData(erc721Token.address, makerAssetId).slice(0, -2);
+ signedOrder = await orderFactory.newSignedOrderAsync({
makerAssetAmount: new BigNumber(1),
takerAssetAmount: new BigNumber(1),
makerAssetData,
- takerAssetData: assetProxyUtils.encodeERC721AssetData(erc721Token.address, takerAssetId),
+ takerAssetData: assetDataUtils.encodeERC721AssetData(erc721Token.address, takerAssetId),
});
// Verify pre-conditions
const initialOwnerMakerAsset = await erc721Token.ownerOf.callAsync(makerAssetId);
@@ -481,6 +481,124 @@ describe('Exchange core', () => {
);
});
});
+
+ describe('getOrderInfo', () => {
+ beforeEach(async () => {
+ signedOrder = await orderFactory.newSignedOrderAsync();
+ });
+ it('should return the correct orderInfo for an unfilled valid order', async () => {
+ const orderInfo = await exchangeWrapper.getOrderInfoAsync(signedOrder);
+ const expectedOrderHash = orderHashUtils.getOrderHashHex(signedOrder);
+ const expectedTakerAssetFilledAmount = new BigNumber(0);
+ const expectedOrderStatus = OrderStatus.FILLABLE;
+ expect(orderInfo.orderHash).to.be.equal(expectedOrderHash);
+ expect(orderInfo.orderTakerAssetFilledAmount).to.be.bignumber.equal(expectedTakerAssetFilledAmount);
+ expect(orderInfo.orderStatus).to.equal(expectedOrderStatus);
+ });
+ it('should return the correct orderInfo for a fully filled order', async () => {
+ await exchangeWrapper.fillOrderAsync(signedOrder, takerAddress);
+ const orderInfo = await exchangeWrapper.getOrderInfoAsync(signedOrder);
+ const expectedOrderHash = orderHashUtils.getOrderHashHex(signedOrder);
+ const expectedTakerAssetFilledAmount = signedOrder.takerAssetAmount;
+ const expectedOrderStatus = OrderStatus.FULLY_FILLED;
+ expect(orderInfo.orderHash).to.be.equal(expectedOrderHash);
+ expect(orderInfo.orderTakerAssetFilledAmount).to.be.bignumber.equal(expectedTakerAssetFilledAmount);
+ expect(orderInfo.orderStatus).to.equal(expectedOrderStatus);
+ });
+ it('should return the correct orderInfo for a partially filled order', async () => {
+ const takerAssetFillAmount = signedOrder.takerAssetAmount.div(2);
+ await exchangeWrapper.fillOrderAsync(signedOrder, takerAddress, { takerAssetFillAmount });
+ const orderInfo = await exchangeWrapper.getOrderInfoAsync(signedOrder);
+ const expectedOrderHash = orderHashUtils.getOrderHashHex(signedOrder);
+ const expectedTakerAssetFilledAmount = takerAssetFillAmount;
+ const expectedOrderStatus = OrderStatus.FILLABLE;
+ expect(orderInfo.orderHash).to.be.equal(expectedOrderHash);
+ expect(orderInfo.orderTakerAssetFilledAmount).to.be.bignumber.equal(expectedTakerAssetFilledAmount);
+ expect(orderInfo.orderStatus).to.equal(expectedOrderStatus);
+ });
+ it('should return the correct orderInfo for a cancelled and unfilled order', async () => {
+ await exchangeWrapper.cancelOrderAsync(signedOrder, makerAddress);
+ const orderInfo = await exchangeWrapper.getOrderInfoAsync(signedOrder);
+ const expectedOrderHash = orderHashUtils.getOrderHashHex(signedOrder);
+ const expectedTakerAssetFilledAmount = new BigNumber(0);
+ const expectedOrderStatus = OrderStatus.CANCELLED;
+ expect(orderInfo.orderHash).to.be.equal(expectedOrderHash);
+ expect(orderInfo.orderTakerAssetFilledAmount).to.be.bignumber.equal(expectedTakerAssetFilledAmount);
+ expect(orderInfo.orderStatus).to.equal(expectedOrderStatus);
+ });
+ it('should return the correct orderInfo for a cancelled and partially filled order', async () => {
+ const takerAssetFillAmount = signedOrder.takerAssetAmount.div(2);
+ await exchangeWrapper.fillOrderAsync(signedOrder, takerAddress, { takerAssetFillAmount });
+ await exchangeWrapper.cancelOrderAsync(signedOrder, makerAddress);
+ const orderInfo = await exchangeWrapper.getOrderInfoAsync(signedOrder);
+ const expectedOrderHash = orderHashUtils.getOrderHashHex(signedOrder);
+ const expectedTakerAssetFilledAmount = takerAssetFillAmount;
+ const expectedOrderStatus = OrderStatus.CANCELLED;
+ expect(orderInfo.orderHash).to.be.equal(expectedOrderHash);
+ expect(orderInfo.orderTakerAssetFilledAmount).to.be.bignumber.equal(expectedTakerAssetFilledAmount);
+ expect(orderInfo.orderStatus).to.equal(expectedOrderStatus);
+ });
+ it('should return the correct orderInfo for an expired and unfilled order', async () => {
+ const currentTimestamp = await getLatestBlockTimestampAsync();
+ const timeUntilExpiration = signedOrder.expirationTimeSeconds.minus(currentTimestamp).toNumber();
+ await increaseTimeAndMineBlockAsync(timeUntilExpiration);
+ const orderInfo = await exchangeWrapper.getOrderInfoAsync(signedOrder);
+ const expectedOrderHash = orderHashUtils.getOrderHashHex(signedOrder);
+ const expectedTakerAssetFilledAmount = new BigNumber(0);
+ const expectedOrderStatus = OrderStatus.EXPIRED;
+ expect(orderInfo.orderHash).to.be.equal(expectedOrderHash);
+ expect(orderInfo.orderTakerAssetFilledAmount).to.be.bignumber.equal(expectedTakerAssetFilledAmount);
+ expect(orderInfo.orderStatus).to.equal(expectedOrderStatus);
+ });
+ it('should return the correct orderInfo for an expired and partially filled order', async () => {
+ const takerAssetFillAmount = signedOrder.takerAssetAmount.div(2);
+ await exchangeWrapper.fillOrderAsync(signedOrder, takerAddress, { takerAssetFillAmount });
+ const currentTimestamp = await getLatestBlockTimestampAsync();
+ const timeUntilExpiration = signedOrder.expirationTimeSeconds.minus(currentTimestamp).toNumber();
+ await increaseTimeAndMineBlockAsync(timeUntilExpiration);
+ const orderInfo = await exchangeWrapper.getOrderInfoAsync(signedOrder);
+ const expectedOrderHash = orderHashUtils.getOrderHashHex(signedOrder);
+ const expectedTakerAssetFilledAmount = takerAssetFillAmount;
+ const expectedOrderStatus = OrderStatus.EXPIRED;
+ expect(orderInfo.orderHash).to.be.equal(expectedOrderHash);
+ expect(orderInfo.orderTakerAssetFilledAmount).to.be.bignumber.equal(expectedTakerAssetFilledAmount);
+ expect(orderInfo.orderStatus).to.equal(expectedOrderStatus);
+ });
+ it('should return the correct orderInfo for an expired and fully filled order', async () => {
+ await exchangeWrapper.fillOrderAsync(signedOrder, takerAddress);
+ const currentTimestamp = await getLatestBlockTimestampAsync();
+ const timeUntilExpiration = signedOrder.expirationTimeSeconds.minus(currentTimestamp).toNumber();
+ await increaseTimeAndMineBlockAsync(timeUntilExpiration);
+ const orderInfo = await exchangeWrapper.getOrderInfoAsync(signedOrder);
+ const expectedOrderHash = orderHashUtils.getOrderHashHex(signedOrder);
+ const expectedTakerAssetFilledAmount = signedOrder.takerAssetAmount;
+ // FULLY_FILLED takes precedence over EXPIRED
+ const expectedOrderStatus = OrderStatus.FULLY_FILLED;
+ expect(orderInfo.orderHash).to.be.equal(expectedOrderHash);
+ expect(orderInfo.orderTakerAssetFilledAmount).to.be.bignumber.equal(expectedTakerAssetFilledAmount);
+ expect(orderInfo.orderStatus).to.equal(expectedOrderStatus);
+ });
+ it('should return the correct orderInfo for an order with a makerAssetAmount of 0', async () => {
+ signedOrder = await orderFactory.newSignedOrderAsync({ makerAssetAmount: new BigNumber(0) });
+ const orderInfo = await exchangeWrapper.getOrderInfoAsync(signedOrder);
+ const expectedOrderHash = orderHashUtils.getOrderHashHex(signedOrder);
+ const expectedTakerAssetFilledAmount = new BigNumber(0);
+ const expectedOrderStatus = OrderStatus.INVALID_MAKER_ASSET_AMOUNT;
+ expect(orderInfo.orderHash).to.be.equal(expectedOrderHash);
+ expect(orderInfo.orderTakerAssetFilledAmount).to.be.bignumber.equal(expectedTakerAssetFilledAmount);
+ expect(orderInfo.orderStatus).to.equal(expectedOrderStatus);
+ });
+ it('should return the correct orderInfo for an order with a takerAssetAmount of 0', async () => {
+ signedOrder = await orderFactory.newSignedOrderAsync({ takerAssetAmount: new BigNumber(0) });
+ const orderInfo = await exchangeWrapper.getOrderInfoAsync(signedOrder);
+ const expectedOrderHash = orderHashUtils.getOrderHashHex(signedOrder);
+ const expectedTakerAssetFilledAmount = new BigNumber(0);
+ const expectedOrderStatus = OrderStatus.INVALID_TAKER_ASSET_AMOUNT;
+ expect(orderInfo.orderHash).to.be.equal(expectedOrderHash);
+ expect(orderInfo.orderTakerAssetFilledAmount).to.be.bignumber.equal(expectedTakerAssetFilledAmount);
+ expect(orderInfo.orderStatus).to.equal(expectedOrderStatus);
+ });
+ });
});
// tslint:disable:max-file-line-count
// tslint:enable:no-unnecessary-type-assertion
diff --git a/packages/contracts/test/exchange/dispatcher.ts b/packages/contracts/test/exchange/dispatcher.ts
index 11f74d776..81d142ca4 100644
--- a/packages/contracts/test/exchange/dispatcher.ts
+++ b/packages/contracts/test/exchange/dispatcher.ts
@@ -1,5 +1,5 @@
import { BlockchainLifecycle } from '@0xproject/dev-utils';
-import { assetProxyUtils } from '@0xproject/order-utils';
+import { assetDataUtils } from '@0xproject/order-utils';
import { AssetProxyId, RevertReason } from '@0xproject/types';
import { BigNumber } from '@0xproject/utils';
import * as chai from 'chai';
@@ -180,7 +180,7 @@ describe('AssetProxyDispatcher', () => {
constants.AWAIT_TRANSACTION_MINED_MS,
);
// Construct metadata for ERC20 proxy
- const encodedAssetData = assetProxyUtils.encodeERC20AssetData(zrxToken.address);
+ const encodedAssetData = assetDataUtils.encodeERC20AssetData(zrxToken.address);
// Perform a transfer from makerAddress to takerAddress
const erc20Balances = await erc20Wrapper.getBalancesAsync();
@@ -207,7 +207,7 @@ describe('AssetProxyDispatcher', () => {
it('should throw if dispatching to unregistered proxy', async () => {
// Construct metadata for ERC20 proxy
- const encodedAssetData = assetProxyUtils.encodeERC20AssetData(zrxToken.address);
+ const encodedAssetData = assetDataUtils.encodeERC20AssetData(zrxToken.address);
// Perform a transfer from makerAddress to takerAddress
const amount = new BigNumber(10);
return expectTransactionFailedAsync(
diff --git a/packages/contracts/test/exchange/libs.ts b/packages/contracts/test/exchange/libs.ts
index 6ded6329c..2e95fa96c 100644
--- a/packages/contracts/test/exchange/libs.ts
+++ b/packages/contracts/test/exchange/libs.ts
@@ -1,5 +1,5 @@
import { BlockchainLifecycle } from '@0xproject/dev-utils';
-import { assetProxyUtils, EIP712Utils, orderHashUtils } from '@0xproject/order-utils';
+import { assetDataUtils, EIP712Utils, orderHashUtils } from '@0xproject/order-utils';
import { SignedOrder } from '@0xproject/types';
import { BigNumber } from '@0xproject/utils';
import * as chai from 'chai';
@@ -38,8 +38,8 @@ describe('Exchange libs', () => {
exchangeAddress: libs.address,
makerAddress,
feeRecipientAddress: addressUtils.generatePseudoRandomAddress(),
- makerAssetData: assetProxyUtils.encodeERC20AssetData(addressUtils.generatePseudoRandomAddress()),
- takerAssetData: assetProxyUtils.encodeERC20AssetData(addressUtils.generatePseudoRandomAddress()),
+ makerAssetData: assetDataUtils.encodeERC20AssetData(addressUtils.generatePseudoRandomAddress()),
+ takerAssetData: assetDataUtils.encodeERC20AssetData(addressUtils.generatePseudoRandomAddress()),
};
const privateKey = constants.TESTRPC_PRIVATE_KEYS[accounts.indexOf(makerAddress)];
orderFactory = new OrderFactory(privateKey, defaultOrderParams);
@@ -71,7 +71,7 @@ describe('Exchange libs', () => {
});
describe('getOrderHash', () => {
it('should output the correct orderHash', async () => {
- signedOrder = orderFactory.newSignedOrder();
+ signedOrder = await orderFactory.newSignedOrderAsync();
const orderHashHex = await libs.publicGetOrderHash.callAsync(signedOrder);
expect(orderHashUtils.getOrderHashHex(signedOrder)).to.be.equal(orderHashHex);
});
diff --git a/packages/contracts/test/exchange/match_orders.ts b/packages/contracts/test/exchange/match_orders.ts
index 16041e968..440097562 100644
--- a/packages/contracts/test/exchange/match_orders.ts
+++ b/packages/contracts/test/exchange/match_orders.ts
@@ -1,5 +1,5 @@
import { BlockchainLifecycle } from '@0xproject/dev-utils';
-import { assetProxyUtils } from '@0xproject/order-utils';
+import { assetDataUtils } from '@0xproject/order-utils';
import { RevertReason } from '@0xproject/types';
import { BigNumber } from '@0xproject/utils';
import { Web3Wrapper } from '@0xproject/web3-wrapper';
@@ -100,7 +100,7 @@ describe('matchOrders', () => {
artifacts.Exchange,
provider,
txDefaults,
- assetProxyUtils.encodeERC20AssetData(zrxToken.address),
+ assetDataUtils.encodeERC20AssetData(zrxToken.address),
);
exchangeWrapper = new ExchangeWrapper(exchange, provider);
await exchangeWrapper.registerAssetProxyAsync(erc20Proxy.address, owner);
@@ -126,8 +126,8 @@ describe('matchOrders', () => {
const defaultOrderParams = {
...constants.STATIC_ORDER_PARAMS,
exchangeAddress: exchange.address,
- makerAssetData: assetProxyUtils.encodeERC20AssetData(defaultERC20MakerAssetAddress),
- takerAssetData: assetProxyUtils.encodeERC20AssetData(defaultERC20TakerAssetAddress),
+ makerAssetData: assetDataUtils.encodeERC20AssetData(defaultERC20MakerAssetAddress),
+ takerAssetData: assetDataUtils.encodeERC20AssetData(defaultERC20TakerAssetAddress),
};
const privateKeyLeft = constants.TESTRPC_PRIVATE_KEYS[accounts.indexOf(makerAddressLeft)];
orderFactoryLeft = new OrderFactory(privateKeyLeft, defaultOrderParams);
@@ -150,16 +150,16 @@ describe('matchOrders', () => {
it('should transfer the correct amounts when orders completely fill each other', async () => {
// Create orders to match
- const signedOrderLeft = orderFactoryLeft.newSignedOrder({
+ const signedOrderLeft = await orderFactoryLeft.newSignedOrderAsync({
makerAddress: makerAddressLeft,
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(5), 18),
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
feeRecipientAddress: feeRecipientAddressLeft,
});
- const signedOrderRight = orderFactoryRight.newSignedOrder({
+ const signedOrderRight = await orderFactoryRight.newSignedOrderAsync({
makerAddress: makerAddressRight,
- makerAssetData: assetProxyUtils.encodeERC20AssetData(defaultERC20TakerAssetAddress),
- takerAssetData: assetProxyUtils.encodeERC20AssetData(defaultERC20MakerAssetAddress),
+ makerAssetData: assetDataUtils.encodeERC20AssetData(defaultERC20TakerAssetAddress),
+ takerAssetData: assetDataUtils.encodeERC20AssetData(defaultERC20MakerAssetAddress),
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(2), 18),
feeRecipientAddress: feeRecipientAddressRight,
@@ -182,16 +182,16 @@ describe('matchOrders', () => {
it('should transfer the correct amounts when orders completely fill each other and taker doesnt take a profit', async () => {
// Create orders to match
- const signedOrderLeft = orderFactoryLeft.newSignedOrder({
+ const signedOrderLeft = await orderFactoryLeft.newSignedOrderAsync({
makerAddress: makerAddressLeft,
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(5), 18),
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
feeRecipientAddress: feeRecipientAddressLeft,
});
- const signedOrderRight = orderFactoryRight.newSignedOrder({
+ const signedOrderRight = await orderFactoryRight.newSignedOrderAsync({
makerAddress: makerAddressRight,
- makerAssetData: assetProxyUtils.encodeERC20AssetData(defaultERC20TakerAssetAddress),
- takerAssetData: assetProxyUtils.encodeERC20AssetData(defaultERC20MakerAssetAddress),
+ makerAssetData: assetDataUtils.encodeERC20AssetData(defaultERC20TakerAssetAddress),
+ takerAssetData: assetDataUtils.encodeERC20AssetData(defaultERC20MakerAssetAddress),
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(5), 18),
feeRecipientAddress: feeRecipientAddressRight,
@@ -225,16 +225,16 @@ describe('matchOrders', () => {
it('should transfer the correct amounts when left order is completely filled and right order is partially filled', async () => {
// Create orders to match
- const signedOrderLeft = orderFactoryLeft.newSignedOrder({
+ const signedOrderLeft = await orderFactoryLeft.newSignedOrderAsync({
makerAddress: makerAddressLeft,
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(5), 18),
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
feeRecipientAddress: feeRecipientAddressLeft,
});
- const signedOrderRight = orderFactoryRight.newSignedOrder({
+ const signedOrderRight = await orderFactoryRight.newSignedOrderAsync({
makerAddress: makerAddressRight,
- makerAssetData: assetProxyUtils.encodeERC20AssetData(defaultERC20TakerAssetAddress),
- takerAssetData: assetProxyUtils.encodeERC20AssetData(defaultERC20MakerAssetAddress),
+ makerAssetData: assetDataUtils.encodeERC20AssetData(defaultERC20TakerAssetAddress),
+ takerAssetData: assetDataUtils.encodeERC20AssetData(defaultERC20MakerAssetAddress),
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(20), 18),
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(4), 18),
feeRecipientAddress: feeRecipientAddressRight,
@@ -257,16 +257,16 @@ describe('matchOrders', () => {
it('should transfer the correct amounts when right order is completely filled and left order is partially filled', async () => {
// Create orders to match
- const signedOrderLeft = orderFactoryLeft.newSignedOrder({
+ const signedOrderLeft = await orderFactoryLeft.newSignedOrderAsync({
makerAddress: makerAddressLeft,
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(50), 18),
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 18),
feeRecipientAddress: feeRecipientAddressLeft,
});
- const signedOrderRight = orderFactoryRight.newSignedOrder({
+ const signedOrderRight = await orderFactoryRight.newSignedOrderAsync({
makerAddress: makerAddressRight,
- makerAssetData: assetProxyUtils.encodeERC20AssetData(defaultERC20TakerAssetAddress),
- takerAssetData: assetProxyUtils.encodeERC20AssetData(defaultERC20MakerAssetAddress),
+ makerAssetData: assetDataUtils.encodeERC20AssetData(defaultERC20TakerAssetAddress),
+ takerAssetData: assetDataUtils.encodeERC20AssetData(defaultERC20MakerAssetAddress),
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(2), 18),
feeRecipientAddress: feeRecipientAddressRight,
@@ -289,16 +289,16 @@ describe('matchOrders', () => {
it('should transfer the correct amounts when consecutive calls are used to completely fill the left order', async () => {
// Create orders to match
- const signedOrderLeft = orderFactoryLeft.newSignedOrder({
+ const signedOrderLeft = await orderFactoryLeft.newSignedOrderAsync({
makerAddress: makerAddressLeft,
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(50), 18),
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 18),
feeRecipientAddress: feeRecipientAddressLeft,
});
- const signedOrderRight = orderFactoryRight.newSignedOrder({
+ const signedOrderRight = await orderFactoryRight.newSignedOrderAsync({
makerAddress: makerAddressRight,
- makerAssetData: assetProxyUtils.encodeERC20AssetData(defaultERC20TakerAssetAddress),
- takerAssetData: assetProxyUtils.encodeERC20AssetData(defaultERC20MakerAssetAddress),
+ makerAssetData: assetDataUtils.encodeERC20AssetData(defaultERC20TakerAssetAddress),
+ takerAssetData: assetDataUtils.encodeERC20AssetData(defaultERC20MakerAssetAddress),
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(2), 18),
feeRecipientAddress: feeRecipientAddressRight,
@@ -326,10 +326,10 @@ describe('matchOrders', () => {
// Note: This order needs makerAssetAmount=90/takerAssetAmount=[anything <= 45] to fully fill the right order.
// However, we use 100/50 to ensure a partial fill as we want to go down the "left fill"
// branch in the contract twice for this test.
- const signedOrderRight2 = orderFactoryRight.newSignedOrder({
+ const signedOrderRight2 = await orderFactoryRight.newSignedOrderAsync({
makerAddress: makerAddressRight,
- makerAssetData: assetProxyUtils.encodeERC20AssetData(defaultERC20TakerAssetAddress),
- takerAssetData: assetProxyUtils.encodeERC20AssetData(defaultERC20MakerAssetAddress),
+ makerAssetData: assetDataUtils.encodeERC20AssetData(defaultERC20TakerAssetAddress),
+ takerAssetData: assetDataUtils.encodeERC20AssetData(defaultERC20MakerAssetAddress),
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 18),
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(50), 18),
feeRecipientAddress: feeRecipientAddressRight,
@@ -356,17 +356,17 @@ describe('matchOrders', () => {
it('should transfer the correct amounts when consecutive calls are used to completely fill the right order', async () => {
// Create orders to match
- const signedOrderLeft = orderFactoryLeft.newSignedOrder({
+ const signedOrderLeft = await orderFactoryLeft.newSignedOrderAsync({
makerAddress: makerAddressLeft,
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(2), 18),
feeRecipientAddress: feeRecipientAddressLeft,
});
- const signedOrderRight = orderFactoryRight.newSignedOrder({
+ const signedOrderRight = await orderFactoryRight.newSignedOrderAsync({
makerAddress: makerAddressRight,
- makerAssetData: assetProxyUtils.encodeERC20AssetData(defaultERC20TakerAssetAddress),
- takerAssetData: assetProxyUtils.encodeERC20AssetData(defaultERC20MakerAssetAddress),
+ makerAssetData: assetDataUtils.encodeERC20AssetData(defaultERC20TakerAssetAddress),
+ takerAssetData: assetDataUtils.encodeERC20AssetData(defaultERC20MakerAssetAddress),
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(50), 18),
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 18),
feeRecipientAddress: feeRecipientAddressRight,
@@ -394,7 +394,7 @@ describe('matchOrders', () => {
// Note: This order needs makerAssetAmount=96/takerAssetAmount=48 to fully fill the right order.
// However, we use 100/50 to ensure a partial fill as we want to go down the "right fill"
// branch in the contract twice for this test.
- const signedOrderLeft2 = orderFactoryLeft.newSignedOrder({
+ const signedOrderLeft2 = await orderFactoryLeft.newSignedOrderAsync({
makerAddress: makerAddressLeft,
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 18),
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(50), 18),
@@ -425,16 +425,16 @@ describe('matchOrders', () => {
it('should transfer the correct amounts if fee recipient is the same across both matched orders', async () => {
const feeRecipientAddress = feeRecipientAddressLeft;
- const signedOrderLeft = orderFactoryLeft.newSignedOrder({
+ const signedOrderLeft = await orderFactoryLeft.newSignedOrderAsync({
makerAddress: makerAddressLeft,
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(5), 18),
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
feeRecipientAddress,
});
- const signedOrderRight = orderFactoryRight.newSignedOrder({
+ const signedOrderRight = await orderFactoryRight.newSignedOrderAsync({
makerAddress: makerAddressRight,
- makerAssetData: assetProxyUtils.encodeERC20AssetData(defaultERC20TakerAssetAddress),
- takerAssetData: assetProxyUtils.encodeERC20AssetData(defaultERC20MakerAssetAddress),
+ makerAssetData: assetDataUtils.encodeERC20AssetData(defaultERC20TakerAssetAddress),
+ takerAssetData: assetDataUtils.encodeERC20AssetData(defaultERC20MakerAssetAddress),
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(2), 18),
feeRecipientAddress,
@@ -451,16 +451,16 @@ describe('matchOrders', () => {
it('should transfer the correct amounts if taker is also the left order maker', async () => {
// Create orders to match
- const signedOrderLeft = orderFactoryLeft.newSignedOrder({
+ const signedOrderLeft = await orderFactoryLeft.newSignedOrderAsync({
makerAddress: makerAddressLeft,
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(5), 18),
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
feeRecipientAddress: feeRecipientAddressLeft,
});
- const signedOrderRight = orderFactoryRight.newSignedOrder({
+ const signedOrderRight = await orderFactoryRight.newSignedOrderAsync({
makerAddress: makerAddressRight,
- makerAssetData: assetProxyUtils.encodeERC20AssetData(defaultERC20TakerAssetAddress),
- takerAssetData: assetProxyUtils.encodeERC20AssetData(defaultERC20MakerAssetAddress),
+ makerAssetData: assetDataUtils.encodeERC20AssetData(defaultERC20TakerAssetAddress),
+ takerAssetData: assetDataUtils.encodeERC20AssetData(defaultERC20MakerAssetAddress),
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(2), 18),
feeRecipientAddress: feeRecipientAddressRight,
@@ -478,16 +478,16 @@ describe('matchOrders', () => {
it('should transfer the correct amounts if taker is also the right order maker', async () => {
// Create orders to match
- const signedOrderLeft = orderFactoryLeft.newSignedOrder({
+ const signedOrderLeft = await orderFactoryLeft.newSignedOrderAsync({
makerAddress: makerAddressLeft,
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(5), 18),
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
feeRecipientAddress: feeRecipientAddressLeft,
});
- const signedOrderRight = orderFactoryRight.newSignedOrder({
+ const signedOrderRight = await orderFactoryRight.newSignedOrderAsync({
makerAddress: makerAddressRight,
- makerAssetData: assetProxyUtils.encodeERC20AssetData(defaultERC20TakerAssetAddress),
- takerAssetData: assetProxyUtils.encodeERC20AssetData(defaultERC20MakerAssetAddress),
+ makerAssetData: assetDataUtils.encodeERC20AssetData(defaultERC20TakerAssetAddress),
+ takerAssetData: assetDataUtils.encodeERC20AssetData(defaultERC20MakerAssetAddress),
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(2), 18),
feeRecipientAddress: feeRecipientAddressRight,
@@ -505,16 +505,16 @@ describe('matchOrders', () => {
it('should transfer the correct amounts if taker is also the left fee recipient', async () => {
// Create orders to match
- const signedOrderLeft = orderFactoryLeft.newSignedOrder({
+ const signedOrderLeft = await orderFactoryLeft.newSignedOrderAsync({
makerAddress: makerAddressLeft,
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(5), 18),
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
feeRecipientAddress: feeRecipientAddressLeft,
});
- const signedOrderRight = orderFactoryRight.newSignedOrder({
+ const signedOrderRight = await orderFactoryRight.newSignedOrderAsync({
makerAddress: makerAddressRight,
- makerAssetData: assetProxyUtils.encodeERC20AssetData(defaultERC20TakerAssetAddress),
- takerAssetData: assetProxyUtils.encodeERC20AssetData(defaultERC20MakerAssetAddress),
+ makerAssetData: assetDataUtils.encodeERC20AssetData(defaultERC20TakerAssetAddress),
+ takerAssetData: assetDataUtils.encodeERC20AssetData(defaultERC20MakerAssetAddress),
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(2), 18),
feeRecipientAddress: feeRecipientAddressRight,
@@ -532,16 +532,16 @@ describe('matchOrders', () => {
it('should transfer the correct amounts if taker is also the right fee recipient', async () => {
// Create orders to match
- const signedOrderLeft = orderFactoryLeft.newSignedOrder({
+ const signedOrderLeft = await orderFactoryLeft.newSignedOrderAsync({
makerAddress: makerAddressLeft,
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(5), 18),
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
feeRecipientAddress: feeRecipientAddressLeft,
});
- const signedOrderRight = orderFactoryRight.newSignedOrder({
+ const signedOrderRight = await orderFactoryRight.newSignedOrderAsync({
makerAddress: makerAddressRight,
- makerAssetData: assetProxyUtils.encodeERC20AssetData(defaultERC20TakerAssetAddress),
- takerAssetData: assetProxyUtils.encodeERC20AssetData(defaultERC20MakerAssetAddress),
+ makerAssetData: assetDataUtils.encodeERC20AssetData(defaultERC20TakerAssetAddress),
+ takerAssetData: assetDataUtils.encodeERC20AssetData(defaultERC20MakerAssetAddress),
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(2), 18),
feeRecipientAddress: feeRecipientAddressRight,
@@ -559,16 +559,16 @@ describe('matchOrders', () => {
it('should transfer the correct amounts if left maker is the left fee recipient and right maker is the right fee recipient', async () => {
// Create orders to match
- const signedOrderLeft = orderFactoryLeft.newSignedOrder({
+ const signedOrderLeft = await orderFactoryLeft.newSignedOrderAsync({
makerAddress: makerAddressLeft,
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(5), 18),
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
feeRecipientAddress: makerAddressLeft,
});
- const signedOrderRight = orderFactoryRight.newSignedOrder({
+ const signedOrderRight = await orderFactoryRight.newSignedOrderAsync({
makerAddress: makerAddressRight,
- makerAssetData: assetProxyUtils.encodeERC20AssetData(defaultERC20TakerAssetAddress),
- takerAssetData: assetProxyUtils.encodeERC20AssetData(defaultERC20MakerAssetAddress),
+ makerAssetData: assetDataUtils.encodeERC20AssetData(defaultERC20TakerAssetAddress),
+ takerAssetData: assetDataUtils.encodeERC20AssetData(defaultERC20MakerAssetAddress),
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(2), 18),
feeRecipientAddress: makerAddressRight,
@@ -585,16 +585,16 @@ describe('matchOrders', () => {
it('Should throw if left order is not fillable', async () => {
// Create orders to match
- const signedOrderLeft = orderFactoryLeft.newSignedOrder({
+ const signedOrderLeft = await orderFactoryLeft.newSignedOrderAsync({
makerAddress: makerAddressLeft,
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(5), 18),
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
feeRecipientAddress: feeRecipientAddressLeft,
});
- const signedOrderRight = orderFactoryRight.newSignedOrder({
+ const signedOrderRight = await orderFactoryRight.newSignedOrderAsync({
makerAddress: makerAddressRight,
- makerAssetData: assetProxyUtils.encodeERC20AssetData(defaultERC20TakerAssetAddress),
- takerAssetData: assetProxyUtils.encodeERC20AssetData(defaultERC20MakerAssetAddress),
+ makerAssetData: assetDataUtils.encodeERC20AssetData(defaultERC20TakerAssetAddress),
+ takerAssetData: assetDataUtils.encodeERC20AssetData(defaultERC20MakerAssetAddress),
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(2), 18),
feeRecipientAddress: feeRecipientAddressRight,
@@ -610,16 +610,16 @@ describe('matchOrders', () => {
it('Should throw if right order is not fillable', async () => {
// Create orders to match
- const signedOrderLeft = orderFactoryLeft.newSignedOrder({
+ const signedOrderLeft = await orderFactoryLeft.newSignedOrderAsync({
makerAddress: makerAddressLeft,
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(5), 18),
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
feeRecipientAddress: feeRecipientAddressLeft,
});
- const signedOrderRight = orderFactoryRight.newSignedOrder({
+ const signedOrderRight = await orderFactoryRight.newSignedOrderAsync({
makerAddress: makerAddressRight,
- makerAssetData: assetProxyUtils.encodeERC20AssetData(defaultERC20TakerAssetAddress),
- takerAssetData: assetProxyUtils.encodeERC20AssetData(defaultERC20MakerAssetAddress),
+ makerAssetData: assetDataUtils.encodeERC20AssetData(defaultERC20TakerAssetAddress),
+ takerAssetData: assetDataUtils.encodeERC20AssetData(defaultERC20MakerAssetAddress),
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(2), 18),
feeRecipientAddress: feeRecipientAddressRight,
@@ -635,16 +635,16 @@ describe('matchOrders', () => {
it('should throw if there is not a positive spread', async () => {
// Create orders to match
- const signedOrderLeft = orderFactoryLeft.newSignedOrder({
+ const signedOrderLeft = await orderFactoryLeft.newSignedOrderAsync({
makerAddress: makerAddressLeft,
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(5), 18),
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 18),
feeRecipientAddress: feeRecipientAddressLeft,
});
- const signedOrderRight = orderFactoryRight.newSignedOrder({
+ const signedOrderRight = await orderFactoryRight.newSignedOrderAsync({
makerAddress: makerAddressRight,
- makerAssetData: assetProxyUtils.encodeERC20AssetData(defaultERC20TakerAssetAddress),
- takerAssetData: assetProxyUtils.encodeERC20AssetData(defaultERC20MakerAssetAddress),
+ makerAssetData: assetDataUtils.encodeERC20AssetData(defaultERC20TakerAssetAddress),
+ takerAssetData: assetDataUtils.encodeERC20AssetData(defaultERC20MakerAssetAddress),
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(1), 18),
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(200), 18),
feeRecipientAddress: feeRecipientAddressRight,
@@ -658,16 +658,16 @@ describe('matchOrders', () => {
it('should throw if the left maker asset is not equal to the right taker asset ', async () => {
// Create orders to match
- const signedOrderLeft = orderFactoryLeft.newSignedOrder({
+ const signedOrderLeft = await orderFactoryLeft.newSignedOrderAsync({
makerAddress: makerAddressLeft,
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(5), 18),
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
feeRecipientAddress: feeRecipientAddressLeft,
});
- const signedOrderRight = orderFactoryRight.newSignedOrder({
+ const signedOrderRight = await orderFactoryRight.newSignedOrderAsync({
makerAddress: makerAddressRight,
- makerAssetData: assetProxyUtils.encodeERC20AssetData(defaultERC20TakerAssetAddress),
- takerAssetData: assetProxyUtils.encodeERC20AssetData(defaultERC20TakerAssetAddress),
+ makerAssetData: assetDataUtils.encodeERC20AssetData(defaultERC20TakerAssetAddress),
+ takerAssetData: assetDataUtils.encodeERC20AssetData(defaultERC20TakerAssetAddress),
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(2), 18),
feeRecipientAddress: feeRecipientAddressRight,
@@ -685,18 +685,18 @@ describe('matchOrders', () => {
it('should throw if the right maker asset is not equal to the left taker asset', async () => {
// Create orders to match
- const signedOrderLeft = orderFactoryLeft.newSignedOrder({
+ const signedOrderLeft = await orderFactoryLeft.newSignedOrderAsync({
makerAddress: makerAddressLeft,
- makerAssetData: assetProxyUtils.encodeERC20AssetData(defaultERC20MakerAssetAddress),
- takerAssetData: assetProxyUtils.encodeERC20AssetData(defaultERC20MakerAssetAddress),
+ makerAssetData: assetDataUtils.encodeERC20AssetData(defaultERC20MakerAssetAddress),
+ takerAssetData: assetDataUtils.encodeERC20AssetData(defaultERC20MakerAssetAddress),
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(5), 18),
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
feeRecipientAddress: feeRecipientAddressLeft,
});
- const signedOrderRight = orderFactoryRight.newSignedOrder({
+ const signedOrderRight = await orderFactoryRight.newSignedOrderAsync({
makerAddress: makerAddressRight,
- makerAssetData: assetProxyUtils.encodeERC20AssetData(defaultERC20TakerAssetAddress),
- takerAssetData: assetProxyUtils.encodeERC20AssetData(defaultERC20MakerAssetAddress),
+ makerAssetData: assetDataUtils.encodeERC20AssetData(defaultERC20TakerAssetAddress),
+ takerAssetData: assetDataUtils.encodeERC20AssetData(defaultERC20MakerAssetAddress),
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(2), 18),
feeRecipientAddress: feeRecipientAddressRight,
@@ -711,18 +711,18 @@ describe('matchOrders', () => {
it('should transfer correct amounts when left order maker asset is an ERC721 token', async () => {
// Create orders to match
const erc721TokenToTransfer = erc721LeftMakerAssetIds[0];
- const signedOrderLeft = orderFactoryLeft.newSignedOrder({
+ const signedOrderLeft = await orderFactoryLeft.newSignedOrderAsync({
makerAddress: makerAddressLeft,
- makerAssetData: assetProxyUtils.encodeERC721AssetData(defaultERC721AssetAddress, erc721TokenToTransfer),
- takerAssetData: assetProxyUtils.encodeERC20AssetData(defaultERC20TakerAssetAddress),
+ makerAssetData: assetDataUtils.encodeERC721AssetData(defaultERC721AssetAddress, erc721TokenToTransfer),
+ takerAssetData: assetDataUtils.encodeERC20AssetData(defaultERC20TakerAssetAddress),
makerAssetAmount: new BigNumber(1),
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
feeRecipientAddress: feeRecipientAddressLeft,
});
- const signedOrderRight = orderFactoryRight.newSignedOrder({
+ const signedOrderRight = await orderFactoryRight.newSignedOrderAsync({
makerAddress: makerAddressRight,
- makerAssetData: assetProxyUtils.encodeERC20AssetData(defaultERC20TakerAssetAddress),
- takerAssetData: assetProxyUtils.encodeERC721AssetData(defaultERC721AssetAddress, erc721TokenToTransfer),
+ makerAssetData: assetDataUtils.encodeERC20AssetData(defaultERC20TakerAssetAddress),
+ takerAssetData: assetDataUtils.encodeERC721AssetData(defaultERC721AssetAddress, erc721TokenToTransfer),
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
takerAssetAmount: new BigNumber(1),
feeRecipientAddress: feeRecipientAddressRight,
@@ -746,18 +746,18 @@ describe('matchOrders', () => {
it('should transfer correct amounts when right order maker asset is an ERC721 token', async () => {
// Create orders to match
const erc721TokenToTransfer = erc721RightMakerAssetIds[0];
- const signedOrderLeft = orderFactoryLeft.newSignedOrder({
+ const signedOrderLeft = await orderFactoryLeft.newSignedOrderAsync({
makerAddress: makerAddressLeft,
- makerAssetData: assetProxyUtils.encodeERC20AssetData(defaultERC20MakerAssetAddress),
- takerAssetData: assetProxyUtils.encodeERC721AssetData(defaultERC721AssetAddress, erc721TokenToTransfer),
+ makerAssetData: assetDataUtils.encodeERC20AssetData(defaultERC20MakerAssetAddress),
+ takerAssetData: assetDataUtils.encodeERC721AssetData(defaultERC721AssetAddress, erc721TokenToTransfer),
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
takerAssetAmount: new BigNumber(1),
feeRecipientAddress: feeRecipientAddressLeft,
});
- const signedOrderRight = orderFactoryRight.newSignedOrder({
+ const signedOrderRight = await orderFactoryRight.newSignedOrderAsync({
makerAddress: makerAddressRight,
- makerAssetData: assetProxyUtils.encodeERC721AssetData(defaultERC721AssetAddress, erc721TokenToTransfer),
- takerAssetData: assetProxyUtils.encodeERC20AssetData(defaultERC20MakerAssetAddress),
+ makerAssetData: assetDataUtils.encodeERC721AssetData(defaultERC721AssetAddress, erc721TokenToTransfer),
+ takerAssetData: assetDataUtils.encodeERC20AssetData(defaultERC20MakerAssetAddress),
makerAssetAmount: new BigNumber(1),
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), 18),
feeRecipientAddress: feeRecipientAddressRight,
diff --git a/packages/contracts/test/exchange/signature_validator.ts b/packages/contracts/test/exchange/signature_validator.ts
index 8cd6409a5..ef154bf9b 100644
--- a/packages/contracts/test/exchange/signature_validator.ts
+++ b/packages/contracts/test/exchange/signature_validator.ts
@@ -1,5 +1,5 @@
import { BlockchainLifecycle } from '@0xproject/dev-utils';
-import { addSignedMessagePrefix, assetProxyUtils, MessagePrefixType, orderHashUtils } from '@0xproject/order-utils';
+import { addSignedMessagePrefix, assetDataUtils, MessagePrefixType, orderHashUtils } from '@0xproject/order-utils';
import { RevertReason, SignatureType, SignedOrder } from '@0xproject/types';
import * as chai from 'chai';
import { LogWithDecodedArgs } from 'ethereum-types';
@@ -78,8 +78,8 @@ describe('MixinSignatureValidator', () => {
exchangeAddress: signatureValidator.address,
makerAddress,
feeRecipientAddress: addressUtils.generatePseudoRandomAddress(),
- makerAssetData: assetProxyUtils.encodeERC20AssetData(addressUtils.generatePseudoRandomAddress()),
- takerAssetData: assetProxyUtils.encodeERC20AssetData(addressUtils.generatePseudoRandomAddress()),
+ makerAssetData: assetDataUtils.encodeERC20AssetData(addressUtils.generatePseudoRandomAddress()),
+ takerAssetData: assetDataUtils.encodeERC20AssetData(addressUtils.generatePseudoRandomAddress()),
};
signerPrivateKey = constants.TESTRPC_PRIVATE_KEYS[accounts.indexOf(makerAddress)];
notSignerPrivateKey = constants.TESTRPC_PRIVATE_KEYS[accounts.indexOf(notSignerAddress)];
@@ -95,7 +95,7 @@ describe('MixinSignatureValidator', () => {
describe('isValidSignature', () => {
beforeEach(async () => {
- signedOrder = orderFactory.newSignedOrder();
+ signedOrder = await orderFactory.newSignedOrderAsync();
});
it('should revert when signature is empty', async () => {
diff --git a/packages/contracts/test/exchange/transactions.ts b/packages/contracts/test/exchange/transactions.ts
index 0d66b11b8..2bdd96b16 100644
--- a/packages/contracts/test/exchange/transactions.ts
+++ b/packages/contracts/test/exchange/transactions.ts
@@ -1,5 +1,5 @@
import { BlockchainLifecycle } from '@0xproject/dev-utils';
-import { assetProxyUtils, generatePseudoRandomSalt } from '@0xproject/order-utils';
+import { assetDataUtils, generatePseudoRandomSalt } from '@0xproject/order-utils';
import { OrderWithoutExchangeAddress, RevertReason, SignedOrder } from '@0xproject/types';
import { BigNumber } from '@0xproject/utils';
import * as chai from 'chai';
@@ -88,7 +88,7 @@ describe('Exchange transactions', () => {
artifacts.Exchange,
provider,
txDefaults,
- assetProxyUtils.encodeERC20AssetData(zrxToken.address),
+ assetDataUtils.encodeERC20AssetData(zrxToken.address),
);
exchangeWrapper = new ExchangeWrapper(exchange, provider);
await exchangeWrapper.registerAssetProxyAsync(erc20Proxy.address, owner);
@@ -107,8 +107,8 @@ describe('Exchange transactions', () => {
exchangeAddress: exchange.address,
makerAddress,
feeRecipientAddress,
- makerAssetData: assetProxyUtils.encodeERC20AssetData(defaultMakerTokenAddress),
- takerAssetData: assetProxyUtils.encodeERC20AssetData(defaultTakerTokenAddress),
+ makerAssetData: assetDataUtils.encodeERC20AssetData(defaultMakerTokenAddress),
+ takerAssetData: assetDataUtils.encodeERC20AssetData(defaultTakerTokenAddress),
};
makerPrivateKey = constants.TESTRPC_PRIVATE_KEYS[accounts.indexOf(makerAddress)];
takerPrivateKey = constants.TESTRPC_PRIVATE_KEYS[accounts.indexOf(takerAddress)];
@@ -121,7 +121,7 @@ describe('Exchange transactions', () => {
let takerAssetFillAmount: BigNumber;
beforeEach(async () => {
erc20Balances = await erc20Wrapper.getBalancesAsync();
- signedOrder = orderFactory.newSignedOrder();
+ signedOrder = await orderFactory.newSignedOrderAsync();
orderWithoutExchangeAddress = orderUtils.getOrderWithoutExchangeAddress(signedOrder);
takerAssetFillAmount = signedOrder.takerAssetAmount.div(2);
@@ -226,7 +226,7 @@ describe('Exchange transactions', () => {
it("should cancel an order if called from the order's sender", async () => {
const orderSalt = new BigNumber(0);
- signedOrder = orderFactory.newSignedOrder({
+ signedOrder = await orderFactory.newSignedOrderAsync({
senderAddress: exchangeWrapperContract.address,
salt: orderSalt,
});
@@ -265,7 +265,7 @@ describe('Exchange transactions', () => {
it("should not cancel an order if not called from the order's sender", async () => {
const orderSalt = new BigNumber(0);
- signedOrder = orderFactory.newSignedOrder({
+ signedOrder = await orderFactory.newSignedOrderAsync({
senderAddress: exchangeWrapperContract.address,
salt: orderSalt,
});
@@ -349,14 +349,14 @@ describe('Exchange transactions', () => {
exchangeAddress: exchange.address,
makerAddress,
feeRecipientAddress,
- makerAssetData: assetProxyUtils.encodeERC20AssetData(defaultMakerTokenAddress),
- takerAssetData: assetProxyUtils.encodeERC20AssetData(defaultTakerTokenAddress),
+ makerAssetData: assetDataUtils.encodeERC20AssetData(defaultMakerTokenAddress),
+ takerAssetData: assetDataUtils.encodeERC20AssetData(defaultTakerTokenAddress),
};
whitelistOrderFactory = new OrderFactory(makerPrivateKey, defaultOrderParams);
});
beforeEach(async () => {
- signedOrder = whitelistOrderFactory.newSignedOrder();
+ signedOrder = await whitelistOrderFactory.newSignedOrderAsync();
erc20Balances = await erc20Wrapper.getBalancesAsync();
});
diff --git a/packages/contracts/test/exchange/wrapper.ts b/packages/contracts/test/exchange/wrapper.ts
index 655d55b83..d48441dca 100644
--- a/packages/contracts/test/exchange/wrapper.ts
+++ b/packages/contracts/test/exchange/wrapper.ts
@@ -1,5 +1,5 @@
import { BlockchainLifecycle } from '@0xproject/dev-utils';
-import { assetProxyUtils } from '@0xproject/order-utils';
+import { assetDataUtils, orderHashUtils } from '@0xproject/order-utils';
import { RevertReason, SignedOrder } from '@0xproject/types';
import { BigNumber } from '@0xproject/utils';
import { Web3Wrapper } from '@0xproject/web3-wrapper';
@@ -13,13 +13,14 @@ import { ERC721ProxyContract } from '../../generated_contract_wrappers/erc721_pr
import { ExchangeContract } from '../../generated_contract_wrappers/exchange';
import { artifacts } from '../utils/artifacts';
import { expectTransactionFailedAsync } from '../utils/assertions';
+import { getLatestBlockTimestampAsync, increaseTimeAndMineBlockAsync } from '../utils/block_timestamp';
import { chaiSetup } from '../utils/chai_setup';
import { constants } from '../utils/constants';
import { ERC20Wrapper } from '../utils/erc20_wrapper';
import { ERC721Wrapper } from '../utils/erc721_wrapper';
import { ExchangeWrapper } from '../utils/exchange_wrapper';
import { OrderFactory } from '../utils/order_factory';
-import { ERC20BalancesByOwner } from '../utils/types';
+import { ERC20BalancesByOwner, OrderStatus } from '../utils/types';
import { provider, txDefaults, web3Wrapper } from '../utils/web3_wrapper';
chaiSetup.configure();
@@ -84,7 +85,7 @@ describe('Exchange wrappers', () => {
artifacts.Exchange,
provider,
txDefaults,
- assetProxyUtils.encodeERC20AssetData(zrxToken.address),
+ assetDataUtils.encodeERC20AssetData(zrxToken.address),
);
exchangeWrapper = new ExchangeWrapper(exchange, provider);
await exchangeWrapper.registerAssetProxyAsync(erc20Proxy.address, owner);
@@ -111,8 +112,8 @@ describe('Exchange wrappers', () => {
exchangeAddress: exchange.address,
makerAddress,
feeRecipientAddress,
- makerAssetData: assetProxyUtils.encodeERC20AssetData(defaultMakerAssetAddress),
- takerAssetData: assetProxyUtils.encodeERC20AssetData(defaultTakerAssetAddress),
+ makerAssetData: assetDataUtils.encodeERC20AssetData(defaultMakerAssetAddress),
+ takerAssetData: assetDataUtils.encodeERC20AssetData(defaultTakerAssetAddress),
};
const privateKey = constants.TESTRPC_PRIVATE_KEYS[accounts.indexOf(makerAddress)];
orderFactory = new OrderFactory(privateKey, defaultOrderParams);
@@ -126,7 +127,7 @@ describe('Exchange wrappers', () => {
});
describe('fillOrKillOrder', () => {
it('should transfer the correct amounts', async () => {
- const signedOrder = orderFactory.newSignedOrder({
+ const signedOrder = await orderFactory.newSignedOrderAsync({
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 18),
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(200), 18),
});
@@ -170,8 +171,9 @@ describe('Exchange wrappers', () => {
});
it('should throw if a signedOrder is expired', async () => {
- const signedOrder = orderFactory.newSignedOrder({
- expirationTimeSeconds: new BigNumber(Math.floor((Date.now() - 10000) / 1000)),
+ const currentTimestamp = await getLatestBlockTimestampAsync();
+ const signedOrder = await orderFactory.newSignedOrderAsync({
+ expirationTimeSeconds: new BigNumber(currentTimestamp).sub(10),
});
return expectTransactionFailedAsync(
@@ -181,7 +183,7 @@ describe('Exchange wrappers', () => {
});
it('should throw if entire takerAssetFillAmount not filled', async () => {
- const signedOrder = orderFactory.newSignedOrder();
+ const signedOrder = await orderFactory.newSignedOrderAsync();
await exchangeWrapper.fillOrderAsync(signedOrder, takerAddress, {
takerAssetFillAmount: signedOrder.takerAssetAmount.div(2),
@@ -196,7 +198,7 @@ describe('Exchange wrappers', () => {
describe('fillOrderNoThrow', () => {
it('should transfer the correct amounts', async () => {
- const signedOrder = orderFactory.newSignedOrder({
+ const signedOrder = await orderFactory.newSignedOrderAsync({
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(100), 18),
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(200), 18),
});
@@ -245,7 +247,7 @@ describe('Exchange wrappers', () => {
});
it('should not change erc20Balances if maker erc20Balances are too low to fill order', async () => {
- const signedOrder = orderFactory.newSignedOrder({
+ const signedOrder = await orderFactory.newSignedOrderAsync({
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(100000), 18),
});
@@ -255,7 +257,7 @@ describe('Exchange wrappers', () => {
});
it('should not change erc20Balances if taker erc20Balances are too low to fill order', async () => {
- const signedOrder = orderFactory.newSignedOrder({
+ const signedOrder = await orderFactory.newSignedOrderAsync({
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(100000), 18),
});
@@ -265,7 +267,7 @@ describe('Exchange wrappers', () => {
});
it('should not change erc20Balances if maker allowances are too low to fill order', async () => {
- const signedOrder = orderFactory.newSignedOrder();
+ const signedOrder = await orderFactory.newSignedOrderAsync();
await web3Wrapper.awaitTransactionSuccessAsync(
await erc20TokenA.approve.sendTransactionAsync(erc20Proxy.address, new BigNumber(0), {
from: makerAddress,
@@ -285,7 +287,7 @@ describe('Exchange wrappers', () => {
});
it('should not change erc20Balances if taker allowances are too low to fill order', async () => {
- const signedOrder = orderFactory.newSignedOrder();
+ const signedOrder = await orderFactory.newSignedOrderAsync();
await web3Wrapper.awaitTransactionSuccessAsync(
await erc20TokenB.approve.sendTransactionAsync(erc20Proxy.address, new BigNumber(0), {
from: takerAddress,
@@ -306,10 +308,10 @@ describe('Exchange wrappers', () => {
it('should not change erc20Balances if makerAssetAddress is ZRX, makerAssetAmount + makerFee > maker balance', async () => {
const makerZRXBalance = new BigNumber(erc20Balances[makerAddress][zrxToken.address]);
- const signedOrder = orderFactory.newSignedOrder({
+ const signedOrder = await orderFactory.newSignedOrderAsync({
makerAssetAmount: makerZRXBalance,
makerFee: new BigNumber(1),
- makerAssetData: assetProxyUtils.encodeERC20AssetData(zrxToken.address),
+ makerAssetData: assetDataUtils.encodeERC20AssetData(zrxToken.address),
});
await exchangeWrapper.fillOrderNoThrowAsync(signedOrder, takerAddress);
const newBalances = await erc20Wrapper.getBalancesAsync();
@@ -318,10 +320,10 @@ describe('Exchange wrappers', () => {
it('should not change erc20Balances if makerAssetAddress is ZRX, makerAssetAmount + makerFee > maker allowance', async () => {
const makerZRXAllowance = await zrxToken.allowance.callAsync(makerAddress, erc20Proxy.address);
- const signedOrder = orderFactory.newSignedOrder({
+ const signedOrder = await orderFactory.newSignedOrderAsync({
makerAssetAmount: new BigNumber(makerZRXAllowance),
makerFee: new BigNumber(1),
- makerAssetData: assetProxyUtils.encodeERC20AssetData(zrxToken.address),
+ makerAssetData: assetDataUtils.encodeERC20AssetData(zrxToken.address),
});
await exchangeWrapper.fillOrderNoThrowAsync(signedOrder, takerAddress);
const newBalances = await erc20Wrapper.getBalancesAsync();
@@ -330,10 +332,10 @@ describe('Exchange wrappers', () => {
it('should not change erc20Balances if takerAssetAddress is ZRX, takerAssetAmount + takerFee > taker balance', async () => {
const takerZRXBalance = new BigNumber(erc20Balances[takerAddress][zrxToken.address]);
- const signedOrder = orderFactory.newSignedOrder({
+ const signedOrder = await orderFactory.newSignedOrderAsync({
takerAssetAmount: takerZRXBalance,
takerFee: new BigNumber(1),
- takerAssetData: assetProxyUtils.encodeERC20AssetData(zrxToken.address),
+ takerAssetData: assetDataUtils.encodeERC20AssetData(zrxToken.address),
});
await exchangeWrapper.fillOrderNoThrowAsync(signedOrder, takerAddress);
const newBalances = await erc20Wrapper.getBalancesAsync();
@@ -342,10 +344,10 @@ describe('Exchange wrappers', () => {
it('should not change erc20Balances if takerAssetAddress is ZRX, takerAssetAmount + takerFee > taker allowance', async () => {
const takerZRXAllowance = await zrxToken.allowance.callAsync(takerAddress, erc20Proxy.address);
- const signedOrder = orderFactory.newSignedOrder({
+ const signedOrder = await orderFactory.newSignedOrderAsync({
takerAssetAmount: new BigNumber(takerZRXAllowance),
takerFee: new BigNumber(1),
- takerAssetData: assetProxyUtils.encodeERC20AssetData(zrxToken.address),
+ takerAssetData: assetDataUtils.encodeERC20AssetData(zrxToken.address),
});
await exchangeWrapper.fillOrderNoThrowAsync(signedOrder, takerAddress);
const newBalances = await erc20Wrapper.getBalancesAsync();
@@ -356,11 +358,11 @@ describe('Exchange wrappers', () => {
// Construct Exchange parameters
const makerAssetId = erc721MakerAssetId;
const takerAssetId = erc721TakerAssetId;
- const signedOrder = orderFactory.newSignedOrder({
+ const signedOrder = await orderFactory.newSignedOrderAsync({
makerAssetAmount: new BigNumber(1),
takerAssetAmount: new BigNumber(1),
- makerAssetData: assetProxyUtils.encodeERC721AssetData(erc721Token.address, makerAssetId),
- takerAssetData: assetProxyUtils.encodeERC721AssetData(erc721Token.address, takerAssetId),
+ makerAssetData: assetDataUtils.encodeERC721AssetData(erc721Token.address, makerAssetId),
+ takerAssetData: assetDataUtils.encodeERC721AssetData(erc721Token.address, takerAssetId),
});
// Verify pre-conditions
const initialOwnerMakerAsset = await erc721Token.ownerOf.callAsync(makerAssetId);
@@ -388,9 +390,9 @@ describe('Exchange wrappers', () => {
let signedOrders: SignedOrder[];
beforeEach(async () => {
signedOrders = [
- orderFactory.newSignedOrder(),
- orderFactory.newSignedOrder(),
- orderFactory.newSignedOrder(),
+ await orderFactory.newSignedOrderAsync(),
+ await orderFactory.newSignedOrderAsync(),
+ await orderFactory.newSignedOrderAsync(),
];
});
@@ -696,11 +698,11 @@ describe('Exchange wrappers', () => {
it('should throw when a signedOrder does not use the same takerAssetAddress', async () => {
signedOrders = [
- orderFactory.newSignedOrder(),
- orderFactory.newSignedOrder({
- takerAssetData: assetProxyUtils.encodeERC20AssetData(zrxToken.address),
+ await orderFactory.newSignedOrderAsync(),
+ await orderFactory.newSignedOrderAsync({
+ takerAssetData: assetDataUtils.encodeERC20AssetData(zrxToken.address),
}),
- orderFactory.newSignedOrder(),
+ await orderFactory.newSignedOrderAsync(),
];
return expectTransactionFailedAsync(
@@ -796,10 +798,10 @@ describe('Exchange wrappers', () => {
it('should not fill a signedOrder that does not use the same takerAssetAddress', async () => {
signedOrders = [
- orderFactory.newSignedOrder(),
- orderFactory.newSignedOrder(),
- orderFactory.newSignedOrder({
- takerAssetData: assetProxyUtils.encodeERC20AssetData(zrxToken.address),
+ await orderFactory.newSignedOrderAsync(),
+ await orderFactory.newSignedOrderAsync(),
+ await orderFactory.newSignedOrderAsync({
+ takerAssetData: assetDataUtils.encodeERC20AssetData(zrxToken.address),
}),
];
const takerAssetFillAmount = Web3Wrapper.toBaseUnitAmount(new BigNumber(100000), 18);
@@ -914,11 +916,11 @@ describe('Exchange wrappers', () => {
it('should throw when a signedOrder does not use the same makerAssetAddress', async () => {
signedOrders = [
- orderFactory.newSignedOrder(),
- orderFactory.newSignedOrder({
- makerAssetData: assetProxyUtils.encodeERC20AssetData(zrxToken.address),
+ await orderFactory.newSignedOrderAsync(),
+ await orderFactory.newSignedOrderAsync({
+ makerAssetData: assetDataUtils.encodeERC20AssetData(zrxToken.address),
}),
- orderFactory.newSignedOrder(),
+ await orderFactory.newSignedOrderAsync(),
];
return expectTransactionFailedAsync(
@@ -1012,10 +1014,10 @@ describe('Exchange wrappers', () => {
it('should not fill a signedOrder that does not use the same makerAssetAddress', async () => {
signedOrders = [
- orderFactory.newSignedOrder(),
- orderFactory.newSignedOrder(),
- orderFactory.newSignedOrder({
- makerAssetData: assetProxyUtils.encodeERC20AssetData(zrxToken.address),
+ await orderFactory.newSignedOrderAsync(),
+ await orderFactory.newSignedOrderAsync(),
+ await orderFactory.newSignedOrderAsync({
+ makerAssetData: assetDataUtils.encodeERC20AssetData(zrxToken.address),
}),
];
@@ -1069,5 +1071,189 @@ describe('Exchange wrappers', () => {
expect(erc20Balances).to.be.deep.equal(newBalances);
});
});
+
+ describe('getOrdersInfo', () => {
+ beforeEach(async () => {
+ signedOrders = [
+ await orderFactory.newSignedOrderAsync(),
+ await orderFactory.newSignedOrderAsync(),
+ await orderFactory.newSignedOrderAsync(),
+ ];
+ });
+ it('should get the correct information for multiple unfilled orders', async () => {
+ const ordersInfo = await exchangeWrapper.getOrdersInfoAsync(signedOrders);
+ expect(ordersInfo.length).to.be.equal(3);
+ _.forEach(signedOrders, (signedOrder, index) => {
+ const expectedOrderHash = orderHashUtils.getOrderHashHex(signedOrder);
+ const expectedTakerAssetFilledAmount = new BigNumber(0);
+ const expectedOrderStatus = OrderStatus.FILLABLE;
+ const orderInfo = ordersInfo[index];
+ expect(orderInfo.orderHash).to.be.equal(expectedOrderHash);
+ expect(orderInfo.orderTakerAssetFilledAmount).to.be.bignumber.equal(expectedTakerAssetFilledAmount);
+ expect(orderInfo.orderStatus).to.equal(expectedOrderStatus);
+ });
+ });
+ it('should get the correct information for multiple partially filled orders', async () => {
+ const takerAssetFillAmounts = _.map(signedOrders, signedOrder => signedOrder.takerAssetAmount.div(2));
+ await exchangeWrapper.batchFillOrdersAsync(signedOrders, takerAddress, { takerAssetFillAmounts });
+ const ordersInfo = await exchangeWrapper.getOrdersInfoAsync(signedOrders);
+ expect(ordersInfo.length).to.be.equal(3);
+ _.forEach(signedOrders, (signedOrder, index) => {
+ const expectedOrderHash = orderHashUtils.getOrderHashHex(signedOrder);
+ const expectedTakerAssetFilledAmount = signedOrder.takerAssetAmount.div(2);
+ const expectedOrderStatus = OrderStatus.FILLABLE;
+ const orderInfo = ordersInfo[index];
+ expect(orderInfo.orderHash).to.be.equal(expectedOrderHash);
+ expect(orderInfo.orderTakerAssetFilledAmount).to.be.bignumber.equal(expectedTakerAssetFilledAmount);
+ expect(orderInfo.orderStatus).to.equal(expectedOrderStatus);
+ });
+ });
+ it('should get the correct information for multiple fully filled orders', async () => {
+ await exchangeWrapper.batchFillOrdersAsync(signedOrders, takerAddress);
+ const ordersInfo = await exchangeWrapper.getOrdersInfoAsync(signedOrders);
+ expect(ordersInfo.length).to.be.equal(3);
+ _.forEach(signedOrders, (signedOrder, index) => {
+ const expectedOrderHash = orderHashUtils.getOrderHashHex(signedOrder);
+ const expectedTakerAssetFilledAmount = signedOrder.takerAssetAmount;
+ const expectedOrderStatus = OrderStatus.FULLY_FILLED;
+ const orderInfo = ordersInfo[index];
+ expect(orderInfo.orderHash).to.be.equal(expectedOrderHash);
+ expect(orderInfo.orderTakerAssetFilledAmount).to.be.bignumber.equal(expectedTakerAssetFilledAmount);
+ expect(orderInfo.orderStatus).to.equal(expectedOrderStatus);
+ });
+ });
+ it('should get the correct information for multiple cancelled and unfilled orders', async () => {
+ await exchangeWrapper.batchCancelOrdersAsync(signedOrders, makerAddress);
+ const ordersInfo = await exchangeWrapper.getOrdersInfoAsync(signedOrders);
+ expect(ordersInfo.length).to.be.equal(3);
+ _.forEach(signedOrders, (signedOrder, index) => {
+ const expectedOrderHash = orderHashUtils.getOrderHashHex(signedOrder);
+ const expectedTakerAssetFilledAmount = new BigNumber(0);
+ const expectedOrderStatus = OrderStatus.CANCELLED;
+ const orderInfo = ordersInfo[index];
+ expect(orderInfo.orderHash).to.be.equal(expectedOrderHash);
+ expect(orderInfo.orderTakerAssetFilledAmount).to.be.bignumber.equal(expectedTakerAssetFilledAmount);
+ expect(orderInfo.orderStatus).to.equal(expectedOrderStatus);
+ });
+ });
+ it('should get the correct information for multiple cancelled and partially filled orders', async () => {
+ const takerAssetFillAmounts = _.map(signedOrders, signedOrder => signedOrder.takerAssetAmount.div(2));
+ await exchangeWrapper.batchFillOrdersAsync(signedOrders, takerAddress, { takerAssetFillAmounts });
+ await exchangeWrapper.batchCancelOrdersAsync(signedOrders, makerAddress);
+ const ordersInfo = await exchangeWrapper.getOrdersInfoAsync(signedOrders);
+ expect(ordersInfo.length).to.be.equal(3);
+ _.forEach(signedOrders, (signedOrder, index) => {
+ const expectedOrderHash = orderHashUtils.getOrderHashHex(signedOrder);
+ const expectedTakerAssetFilledAmount = signedOrder.takerAssetAmount.div(2);
+ const expectedOrderStatus = OrderStatus.CANCELLED;
+ const orderInfo = ordersInfo[index];
+ expect(orderInfo.orderHash).to.be.equal(expectedOrderHash);
+ expect(orderInfo.orderTakerAssetFilledAmount).to.be.bignumber.equal(expectedTakerAssetFilledAmount);
+ expect(orderInfo.orderStatus).to.equal(expectedOrderStatus);
+ });
+ });
+ it('should get the correct information for multiple expired and unfilled orders', async () => {
+ const currentTimestamp = await getLatestBlockTimestampAsync();
+ const timeUntilExpiration = signedOrders[0].expirationTimeSeconds.minus(currentTimestamp).toNumber();
+ await increaseTimeAndMineBlockAsync(timeUntilExpiration);
+ const ordersInfo = await exchangeWrapper.getOrdersInfoAsync(signedOrders);
+ expect(ordersInfo.length).to.be.equal(3);
+ _.forEach(signedOrders, (signedOrder, index) => {
+ const expectedOrderHash = orderHashUtils.getOrderHashHex(signedOrder);
+ const expectedTakerAssetFilledAmount = new BigNumber(0);
+ const expectedOrderStatus = OrderStatus.EXPIRED;
+ const orderInfo = ordersInfo[index];
+ expect(orderInfo.orderHash).to.be.equal(expectedOrderHash);
+ expect(orderInfo.orderTakerAssetFilledAmount).to.be.bignumber.equal(expectedTakerAssetFilledAmount);
+ expect(orderInfo.orderStatus).to.equal(expectedOrderStatus);
+ });
+ });
+ it('should get the correct information for multiple expired and partially filled orders', async () => {
+ const takerAssetFillAmounts = _.map(signedOrders, signedOrder => signedOrder.takerAssetAmount.div(2));
+ await exchangeWrapper.batchFillOrdersAsync(signedOrders, takerAddress, { takerAssetFillAmounts });
+ const currentTimestamp = await getLatestBlockTimestampAsync();
+ const timeUntilExpiration = signedOrders[0].expirationTimeSeconds.minus(currentTimestamp).toNumber();
+ await increaseTimeAndMineBlockAsync(timeUntilExpiration);
+ const ordersInfo = await exchangeWrapper.getOrdersInfoAsync(signedOrders);
+ expect(ordersInfo.length).to.be.equal(3);
+ _.forEach(signedOrders, (signedOrder, index) => {
+ const expectedOrderHash = orderHashUtils.getOrderHashHex(signedOrder);
+ const expectedTakerAssetFilledAmount = signedOrder.takerAssetAmount.div(2);
+ const expectedOrderStatus = OrderStatus.EXPIRED;
+ const orderInfo = ordersInfo[index];
+ expect(orderInfo.orderHash).to.be.equal(expectedOrderHash);
+ expect(orderInfo.orderTakerAssetFilledAmount).to.be.bignumber.equal(expectedTakerAssetFilledAmount);
+ expect(orderInfo.orderStatus).to.equal(expectedOrderStatus);
+ });
+ });
+ it('should get the correct information for a mix of unfilled, partially filled, fully filled, cancelled, and expired orders', async () => {
+ const unfilledOrder = await orderFactory.newSignedOrderAsync();
+ const partiallyFilledOrder = await orderFactory.newSignedOrderAsync();
+ await exchangeWrapper.fillOrderAsync(partiallyFilledOrder, takerAddress, {
+ takerAssetFillAmount: partiallyFilledOrder.takerAssetAmount.div(2),
+ });
+ const fullyFilledOrder = await orderFactory.newSignedOrderAsync();
+ await exchangeWrapper.fillOrderAsync(fullyFilledOrder, takerAddress);
+ const cancelledOrder = await orderFactory.newSignedOrderAsync();
+ await exchangeWrapper.cancelOrderAsync(cancelledOrder, makerAddress);
+ const currentTimestamp = await getLatestBlockTimestampAsync();
+ const expiredOrder = await orderFactory.newSignedOrderAsync({
+ expirationTimeSeconds: new BigNumber(currentTimestamp),
+ });
+ signedOrders = [unfilledOrder, partiallyFilledOrder, fullyFilledOrder, cancelledOrder, expiredOrder];
+ const ordersInfo = await exchangeWrapper.getOrdersInfoAsync(signedOrders);
+ expect(ordersInfo.length).to.be.equal(5);
+
+ const expectedUnfilledOrderHash = orderHashUtils.getOrderHashHex(unfilledOrder);
+ const expectedUnfilledTakerAssetFilledAmount = new BigNumber(0);
+ const expectedUnfilledOrderStatus = OrderStatus.FILLABLE;
+ const unfilledOrderInfo = ordersInfo[0];
+ expect(unfilledOrderInfo.orderHash).to.be.equal(expectedUnfilledOrderHash);
+ expect(unfilledOrderInfo.orderTakerAssetFilledAmount).to.be.bignumber.equal(
+ expectedUnfilledTakerAssetFilledAmount,
+ );
+ expect(unfilledOrderInfo.orderStatus).to.be.equal(expectedUnfilledOrderStatus);
+
+ const expectedPartialOrderHash = orderHashUtils.getOrderHashHex(partiallyFilledOrder);
+ const expectedPartialTakerAssetFilledAmount = partiallyFilledOrder.takerAssetAmount.div(2);
+ const expectedPartialOrderStatus = OrderStatus.FILLABLE;
+ const partialOrderInfo = ordersInfo[1];
+ expect(partialOrderInfo.orderHash).to.be.equal(expectedPartialOrderHash);
+ expect(partialOrderInfo.orderTakerAssetFilledAmount).to.be.bignumber.equal(
+ expectedPartialTakerAssetFilledAmount,
+ );
+ expect(partialOrderInfo.orderStatus).to.be.equal(expectedPartialOrderStatus);
+
+ const expectedFilledOrderHash = orderHashUtils.getOrderHashHex(fullyFilledOrder);
+ const expectedFilledTakerAssetFilledAmount = fullyFilledOrder.takerAssetAmount;
+ const expectedFilledOrderStatus = OrderStatus.FULLY_FILLED;
+ const filledOrderInfo = ordersInfo[2];
+ expect(filledOrderInfo.orderHash).to.be.equal(expectedFilledOrderHash);
+ expect(filledOrderInfo.orderTakerAssetFilledAmount).to.be.bignumber.equal(
+ expectedFilledTakerAssetFilledAmount,
+ );
+ expect(filledOrderInfo.orderStatus).to.be.equal(expectedFilledOrderStatus);
+
+ const expectedCancelledOrderHash = orderHashUtils.getOrderHashHex(cancelledOrder);
+ const expectedCancelledTakerAssetFilledAmount = new BigNumber(0);
+ const expectedCancelledOrderStatus = OrderStatus.CANCELLED;
+ const cancelledOrderInfo = ordersInfo[3];
+ expect(cancelledOrderInfo.orderHash).to.be.equal(expectedCancelledOrderHash);
+ expect(cancelledOrderInfo.orderTakerAssetFilledAmount).to.be.bignumber.equal(
+ expectedCancelledTakerAssetFilledAmount,
+ );
+ expect(cancelledOrderInfo.orderStatus).to.be.equal(expectedCancelledOrderStatus);
+
+ const expectedExpiredOrderHash = orderHashUtils.getOrderHashHex(expiredOrder);
+ const expectedExpiredTakerAssetFilledAmount = new BigNumber(0);
+ const expectedExpiredOrderStatus = OrderStatus.EXPIRED;
+ const expiredOrderInfo = ordersInfo[4];
+ expect(expiredOrderInfo.orderHash).to.be.equal(expectedExpiredOrderHash);
+ expect(expiredOrderInfo.orderTakerAssetFilledAmount).to.be.bignumber.equal(
+ expectedExpiredTakerAssetFilledAmount,
+ );
+ expect(expiredOrderInfo.orderStatus).to.be.equal(expectedExpiredOrderStatus);
+ });
+ });
});
}); // tslint:disable-line:max-file-line-count
diff --git a/packages/contracts/test/forwarder/forwarder.ts b/packages/contracts/test/forwarder/forwarder.ts
index b4555d417..0256d7d81 100644
--- a/packages/contracts/test/forwarder/forwarder.ts
+++ b/packages/contracts/test/forwarder/forwarder.ts
@@ -1,6 +1,6 @@
import { BlockchainLifecycle } from '@0xproject/dev-utils';
-import { assetProxyUtils } from '@0xproject/order-utils';
-import { AssetProxyId, RevertReason, SignedOrder } from '@0xproject/types';
+import { assetDataUtils } from '@0xproject/order-utils';
+import { RevertReason, SignedOrder } from '@0xproject/types';
import { BigNumber } from '@0xproject/utils';
import { Web3Wrapper } from '@0xproject/web3-wrapper';
import * as chai from 'chai';
@@ -88,8 +88,8 @@ describe(ContractName.Forwarder, () => {
weth = new DummyERC20TokenContract(wethContract.abi, wethContract.address, provider);
erc20Wrapper.addDummyTokenContract(weth);
- const wethAssetData = assetProxyUtils.encodeERC20AssetData(wethContract.address);
- const zrxAssetData = assetProxyUtils.encodeERC20AssetData(zrxToken.address);
+ const wethAssetData = assetDataUtils.encodeERC20AssetData(wethContract.address);
+ const zrxAssetData = assetDataUtils.encodeERC20AssetData(zrxToken.address);
const exchangeInstance = await ExchangeContract.deployFrom0xArtifactAsync(
artifacts.Exchange,
provider,
@@ -114,8 +114,8 @@ describe(ContractName.Forwarder, () => {
exchangeAddress: exchangeInstance.address,
makerAddress,
feeRecipientAddress,
- makerAssetData: assetProxyUtils.encodeERC20AssetData(defaultMakerAssetAddress),
- takerAssetData: assetProxyUtils.encodeERC20AssetData(defaultTakerAssetAddress),
+ makerAssetData: assetDataUtils.encodeERC20AssetData(defaultMakerAssetAddress),
+ takerAssetData: assetDataUtils.encodeERC20AssetData(defaultTakerAssetAddress),
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(200), DECIMALS_DEFAULT),
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), DECIMALS_DEFAULT),
makerFee: Web3Wrapper.toBaseUnitAmount(new BigNumber(1), DECIMALS_DEFAULT),
@@ -131,7 +131,6 @@ describe(ContractName.Forwarder, () => {
exchangeInstance.address,
wethContract.address,
zrxToken.address,
- AssetProxyId.ERC20,
zrxAssetData,
wethAssetData,
);
@@ -149,14 +148,14 @@ describe(ContractName.Forwarder, () => {
await blockchainLifecycle.startAsync();
feeProportion = 0;
erc20Balances = await erc20Wrapper.getBalancesAsync();
- signedOrder = orderFactory.newSignedOrder();
+ signedOrder = await orderFactory.newSignedOrderAsync();
signedOrders = [signedOrder];
- feeOrder = orderFactory.newSignedOrder({
- makerAssetData: assetProxyUtils.encodeERC20AssetData(zrxToken.address),
+ feeOrder = await orderFactory.newSignedOrderAsync({
+ makerAssetData: assetDataUtils.encodeERC20AssetData(zrxToken.address),
takerFee: Web3Wrapper.toBaseUnitAmount(new BigNumber(1), DECIMALS_DEFAULT),
});
feeOrders = [feeOrder];
- orderWithFee = orderFactory.newSignedOrder({
+ orderWithFee = await orderFactory.newSignedOrderAsync({
takerFee: Web3Wrapper.toBaseUnitAmount(new BigNumber(1), DECIMALS_DEFAULT),
});
signedOrdersWithFee = [orderWithFee];
@@ -239,8 +238,8 @@ describe(ContractName.Forwarder, () => {
expect(newBalances[forwarderContract.address][weth.address]).to.be.bignumber.equal(new BigNumber(0));
});
it('should fill the order when token is ZRX with fees', async () => {
- orderWithFee = orderFactory.newSignedOrder({
- makerAssetData: assetProxyUtils.encodeERC20AssetData(zrxToken.address),
+ orderWithFee = await orderFactory.newSignedOrderAsync({
+ makerAssetData: assetDataUtils.encodeERC20AssetData(zrxToken.address),
takerFee: Web3Wrapper.toBaseUnitAmount(new BigNumber(1), DECIMALS_DEFAULT),
});
signedOrdersWithFee = [orderWithFee];
@@ -261,8 +260,8 @@ describe(ContractName.Forwarder, () => {
expect(newBalances[forwarderContract.address][weth.address]).to.be.bignumber.equal(new BigNumber(0));
});
it('should fail if sent an ETH amount too high', async () => {
- signedOrder = orderFactory.newSignedOrder({
- makerAssetData: assetProxyUtils.encodeERC20AssetData(zrxToken.address),
+ signedOrder = await orderFactory.newSignedOrderAsync({
+ makerAssetData: assetDataUtils.encodeERC20AssetData(zrxToken.address),
takerFee: Web3Wrapper.toBaseUnitAmount(new BigNumber(1), DECIMALS_DEFAULT),
});
const fillAmount = signedOrder.takerAssetAmount.times(2);
@@ -275,12 +274,12 @@ describe(ContractName.Forwarder, () => {
);
});
it('should fail if fee abstraction amount is too high', async () => {
- orderWithFee = orderFactory.newSignedOrder({
+ orderWithFee = await orderFactory.newSignedOrderAsync({
takerFee: Web3Wrapper.toBaseUnitAmount(new BigNumber(50), DECIMALS_DEFAULT),
});
signedOrdersWithFee = [orderWithFee];
- feeOrder = orderFactory.newSignedOrder({
- makerAssetData: assetProxyUtils.encodeERC20AssetData(zrxToken.address),
+ feeOrder = await orderFactory.newSignedOrderAsync({
+ makerAssetData: assetDataUtils.encodeERC20AssetData(zrxToken.address),
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(1), DECIMALS_DEFAULT),
});
feeOrders = [feeOrder];
@@ -295,11 +294,11 @@ describe(ContractName.Forwarder, () => {
});
it('throws when mixed ERC721 and ERC20 assets with ERC20 first', async () => {
const makerAssetId = erc721MakerAssetIds[0];
- const erc721SignedOrder = orderFactory.newSignedOrder({
+ const erc721SignedOrder = await orderFactory.newSignedOrderAsync({
makerAssetAmount: new BigNumber(1),
- makerAssetData: assetProxyUtils.encodeERC721AssetData(erc721Token.address, makerAssetId),
+ makerAssetData: assetDataUtils.encodeERC721AssetData(erc721Token.address, makerAssetId),
});
- const erc20SignedOrder = orderFactory.newSignedOrder();
+ const erc20SignedOrder = await orderFactory.newSignedOrderAsync();
signedOrders = [erc20SignedOrder, erc721SignedOrder];
const fillAmountWei = erc20SignedOrder.takerAssetAmount.plus(erc721SignedOrder.takerAssetAmount);
return expectTransactionFailedAsync(
@@ -419,8 +418,8 @@ describe(ContractName.Forwarder, () => {
expect(takerBalanceAfter).to.be.bignumber.eq(takerBalanceBefore.plus(makerAssetAmount));
});
it('should buy the exact amount of assets when buying zrx with fee abstraction', async () => {
- signedOrder = orderFactory.newSignedOrder({
- makerAssetData: assetProxyUtils.encodeERC20AssetData(zrxToken.address),
+ signedOrder = await orderFactory.newSignedOrderAsync({
+ makerAssetData: assetDataUtils.encodeERC20AssetData(zrxToken.address),
takerFee: Web3Wrapper.toBaseUnitAmount(new BigNumber(1), DECIMALS_DEFAULT),
});
signedOrdersWithFee = [signedOrder];
@@ -448,8 +447,8 @@ describe(ContractName.Forwarder, () => {
expect(takerWeiBalanceAfter).to.be.bignumber.equal(takerWeiBalanceBefore.minus(expectedCostAfterGas));
});
it('throws if fees are higher than 5% when buying zrx', async () => {
- const highFeeZRXOrder = orderFactory.newSignedOrder({
- makerAssetData: assetProxyUtils.encodeERC20AssetData(zrxToken.address),
+ const highFeeZRXOrder = await orderFactory.newSignedOrderAsync({
+ makerAssetData: assetDataUtils.encodeERC20AssetData(zrxToken.address),
makerAssetAmount: signedOrder.makerAssetAmount,
takerFee: signedOrder.makerAssetAmount.times(0.06),
});
@@ -471,7 +470,7 @@ describe(ContractName.Forwarder, () => {
);
});
it('throws if fees are higher than 5% when buying erc20', async () => {
- const highFeeERC20Order = orderFactory.newSignedOrder({
+ const highFeeERC20Order = await orderFactory.newSignedOrderAsync({
takerFee: signedOrder.makerAssetAmount.times(0.06),
});
signedOrdersWithFee = [highFeeERC20Order];
@@ -545,9 +544,9 @@ describe(ContractName.Forwarder, () => {
describe('marketBuyTokensWithEth - ERC721', async () => {
it('buys ERC721 assets', async () => {
const makerAssetId = erc721MakerAssetIds[0];
- signedOrder = orderFactory.newSignedOrder({
+ signedOrder = await orderFactory.newSignedOrderAsync({
makerAssetAmount: new BigNumber(1),
- makerAssetData: assetProxyUtils.encodeERC721AssetData(erc721Token.address, makerAssetId),
+ makerAssetData: assetDataUtils.encodeERC721AssetData(erc721Token.address, makerAssetId),
});
feeOrders = [];
signedOrders = [signedOrder];
@@ -567,10 +566,10 @@ describe(ContractName.Forwarder, () => {
});
it('buys ERC721 assets with fee abstraction', async () => {
const makerAssetId = erc721MakerAssetIds[0];
- signedOrder = orderFactory.newSignedOrder({
+ signedOrder = await orderFactory.newSignedOrderAsync({
makerAssetAmount: new BigNumber(1),
takerFee: Web3Wrapper.toBaseUnitAmount(new BigNumber(1), DECIMALS_DEFAULT),
- makerAssetData: assetProxyUtils.encodeERC721AssetData(erc721Token.address, makerAssetId),
+ makerAssetData: assetDataUtils.encodeERC721AssetData(erc721Token.address, makerAssetId),
});
signedOrders = [signedOrder];
const makerAssetAmount = new BigNumber(signedOrders.length);
@@ -589,10 +588,10 @@ describe(ContractName.Forwarder, () => {
});
it('buys ERC721 assets with fee abstraction and pays fee to fee recipient', async () => {
const makerAssetId = erc721MakerAssetIds[0];
- signedOrder = orderFactory.newSignedOrder({
+ signedOrder = await orderFactory.newSignedOrderAsync({
makerAssetAmount: new BigNumber(1),
takerFee: Web3Wrapper.toBaseUnitAmount(new BigNumber(1), DECIMALS_DEFAULT),
- makerAssetData: assetProxyUtils.encodeERC721AssetData(erc721Token.address, makerAssetId),
+ makerAssetData: assetDataUtils.encodeERC721AssetData(erc721Token.address, makerAssetId),
});
signedOrders = [signedOrder];
feeProportion = 100;
@@ -631,15 +630,15 @@ describe(ContractName.Forwarder, () => {
it('buys multiple ERC721 assets with fee abstraction and pays fee to fee recipient', async () => {
const makerAssetId1 = erc721MakerAssetIds[0];
const makerAssetId2 = erc721MakerAssetIds[1];
- const signedOrder1 = orderFactory.newSignedOrder({
+ const signedOrder1 = await orderFactory.newSignedOrderAsync({
makerAssetAmount: new BigNumber(1),
takerFee: Web3Wrapper.toBaseUnitAmount(new BigNumber(3), DECIMALS_DEFAULT),
- makerAssetData: assetProxyUtils.encodeERC721AssetData(erc721Token.address, makerAssetId1),
+ makerAssetData: assetDataUtils.encodeERC721AssetData(erc721Token.address, makerAssetId1),
});
- const signedOrder2 = orderFactory.newSignedOrder({
+ const signedOrder2 = await orderFactory.newSignedOrderAsync({
makerAssetAmount: new BigNumber(1),
takerFee: Web3Wrapper.toBaseUnitAmount(new BigNumber(4), DECIMALS_DEFAULT),
- makerAssetData: assetProxyUtils.encodeERC721AssetData(erc721Token.address, makerAssetId2),
+ makerAssetData: assetDataUtils.encodeERC721AssetData(erc721Token.address, makerAssetId2),
});
signedOrders = [signedOrder1, signedOrder2];
feeProportion = 10;
@@ -666,23 +665,23 @@ describe(ContractName.Forwarder, () => {
// There are two fee orders, but the first fee order is partially filled while
// the Forwarding contract tx is in the mempool.
const erc721MakerAssetAmount = new BigNumber(1);
- signedOrder = orderFactory.newSignedOrder({
+ signedOrder = await orderFactory.newSignedOrderAsync({
makerAssetAmount: erc721MakerAssetAmount,
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), DECIMALS_DEFAULT),
takerFee: Web3Wrapper.toBaseUnitAmount(new BigNumber(6), DECIMALS_DEFAULT),
- makerAssetData: assetProxyUtils.encodeERC721AssetData(erc721Token.address, makerAssetId),
+ makerAssetData: assetDataUtils.encodeERC721AssetData(erc721Token.address, makerAssetId),
});
signedOrders = [signedOrder];
- const firstFeeOrder = orderFactory.newSignedOrder({
+ const firstFeeOrder = await orderFactory.newSignedOrderAsync({
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(8), DECIMALS_DEFAULT),
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(0.1), DECIMALS_DEFAULT),
- makerAssetData: assetProxyUtils.encodeERC20AssetData(zrxToken.address),
+ makerAssetData: assetDataUtils.encodeERC20AssetData(zrxToken.address),
takerFee: Web3Wrapper.toBaseUnitAmount(new BigNumber(0), DECIMALS_DEFAULT),
});
- const secondFeeOrder = orderFactory.newSignedOrder({
+ const secondFeeOrder = await orderFactory.newSignedOrderAsync({
makerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(8), DECIMALS_DEFAULT),
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(0.12), DECIMALS_DEFAULT),
- makerAssetData: assetProxyUtils.encodeERC20AssetData(zrxToken.address),
+ makerAssetData: assetDataUtils.encodeERC20AssetData(zrxToken.address),
takerFee: Web3Wrapper.toBaseUnitAmount(new BigNumber(0), DECIMALS_DEFAULT),
});
feeOrders = [firstFeeOrder, secondFeeOrder];
@@ -730,24 +729,24 @@ describe(ContractName.Forwarder, () => {
// There are two fee orders, but the first fee order is partially filled while
// the Forwarding contract tx is in the mempool.
const erc721MakerAssetAmount = new BigNumber(1);
- signedOrder = orderFactory.newSignedOrder({
+ signedOrder = await orderFactory.newSignedOrderAsync({
makerAssetAmount: erc721MakerAssetAmount,
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(10), DECIMALS_DEFAULT),
takerFee: Web3Wrapper.toBaseUnitAmount(new BigNumber(6), DECIMALS_DEFAULT),
- makerAssetData: assetProxyUtils.encodeERC721AssetData(erc721Token.address, makerAssetId),
+ makerAssetData: assetDataUtils.encodeERC721AssetData(erc721Token.address, makerAssetId),
});
const zrxMakerAssetAmount = Web3Wrapper.toBaseUnitAmount(new BigNumber(8), DECIMALS_DEFAULT);
signedOrders = [signedOrder];
- const firstFeeOrder = orderFactory.newSignedOrder({
+ const firstFeeOrder = await orderFactory.newSignedOrderAsync({
makerAssetAmount: zrxMakerAssetAmount,
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(0.1), DECIMALS_DEFAULT),
- makerAssetData: assetProxyUtils.encodeERC20AssetData(zrxToken.address),
+ makerAssetData: assetDataUtils.encodeERC20AssetData(zrxToken.address),
takerFee: Web3Wrapper.toBaseUnitAmount(new BigNumber(0), DECIMALS_DEFAULT),
});
- const secondFeeOrder = orderFactory.newSignedOrder({
+ const secondFeeOrder = await orderFactory.newSignedOrderAsync({
makerAssetAmount: zrxMakerAssetAmount,
takerAssetAmount: Web3Wrapper.toBaseUnitAmount(new BigNumber(0.12), DECIMALS_DEFAULT),
- makerAssetData: assetProxyUtils.encodeERC20AssetData(zrxToken.address),
+ makerAssetData: assetDataUtils.encodeERC20AssetData(zrxToken.address),
takerFee: Web3Wrapper.toBaseUnitAmount(new BigNumber(0), DECIMALS_DEFAULT),
});
feeOrders = [firstFeeOrder, secondFeeOrder];
@@ -779,11 +778,11 @@ describe(ContractName.Forwarder, () => {
});
it('throws when mixed ERC721 and ERC20 assets', async () => {
const makerAssetId = erc721MakerAssetIds[0];
- const erc721SignedOrder = orderFactory.newSignedOrder({
+ const erc721SignedOrder = await orderFactory.newSignedOrderAsync({
makerAssetAmount: new BigNumber(1),
- makerAssetData: assetProxyUtils.encodeERC721AssetData(erc721Token.address, makerAssetId),
+ makerAssetData: assetDataUtils.encodeERC721AssetData(erc721Token.address, makerAssetId),
});
- const erc20SignedOrder = orderFactory.newSignedOrder();
+ const erc20SignedOrder = await orderFactory.newSignedOrderAsync();
signedOrders = [erc721SignedOrder, erc20SignedOrder];
const makerAssetAmount = new BigNumber(signedOrders.length);
const fillAmountWei = erc20SignedOrder.takerAssetAmount.plus(erc721SignedOrder.takerAssetAmount);
@@ -797,11 +796,11 @@ describe(ContractName.Forwarder, () => {
});
it('throws when mixed ERC721 and ERC20 assets with ERC20 first', async () => {
const makerAssetId = erc721MakerAssetIds[0];
- const erc721SignedOrder = orderFactory.newSignedOrder({
+ const erc721SignedOrder = await orderFactory.newSignedOrderAsync({
makerAssetAmount: new BigNumber(1),
- makerAssetData: assetProxyUtils.encodeERC721AssetData(erc721Token.address, makerAssetId),
+ makerAssetData: assetDataUtils.encodeERC721AssetData(erc721Token.address, makerAssetId),
});
- const erc20SignedOrder = orderFactory.newSignedOrder();
+ const erc20SignedOrder = await orderFactory.newSignedOrderAsync();
signedOrders = [erc20SignedOrder, erc721SignedOrder];
const makerAssetAmount = new BigNumber(signedOrders.length);
const fillAmountWei = erc20SignedOrder.takerAssetAmount.plus(erc721SignedOrder.takerAssetAmount);
diff --git a/packages/contracts/test/libraries/lib_bytes.ts b/packages/contracts/test/libraries/lib_bytes.ts
index c80b61e19..1c497a226 100644
--- a/packages/contracts/test/libraries/lib_bytes.ts
+++ b/packages/contracts/test/libraries/lib_bytes.ts
@@ -1,5 +1,5 @@
import { BlockchainLifecycle } from '@0xproject/dev-utils';
-import { assetProxyUtils, generatePseudoRandomSalt } from '@0xproject/order-utils';
+import { generatePseudoRandomSalt } from '@0xproject/order-utils';
import { RevertReason } from '@0xproject/types';
import { BigNumber } from '@0xproject/utils';
import BN = require('bn.js');
@@ -12,6 +12,7 @@ import { artifacts } from '../utils/artifacts';
import { expectContractCallFailed } from '../utils/assertions';
import { chaiSetup } from '../utils/chai_setup';
import { constants } from '../utils/constants';
+import { typeEncodingUtils } from '../utils/type_encoding_utils';
import { provider, txDefaults, web3Wrapper } from '../utils/web3_wrapper';
chaiSetup.configure();
@@ -74,20 +75,20 @@ describe('LibBytes', () => {
shortData = '0xffffaa';
const encodedShortData = ethUtil.toBuffer(shortData);
const shortDataLength = new BigNumber(encodedShortData.byteLength);
- const encodedShortDataLength = assetProxyUtils.encodeUint256(shortDataLength);
+ const encodedShortDataLength = typeEncodingUtils.encodeUint256(shortDataLength);
shortTestBytesAsBuffer = Buffer.concat([encodedShortDataLength, encodedShortData]);
shortTestBytes = ethUtil.bufferToHex(shortTestBytesAsBuffer);
// Create test bytes one word in length
- wordOfData = ethUtil.bufferToHex(assetProxyUtils.encodeUint256(generatePseudoRandomSalt()));
+ wordOfData = ethUtil.bufferToHex(typeEncodingUtils.encodeUint256(generatePseudoRandomSalt()));
const encodedWordOfData = ethUtil.toBuffer(wordOfData);
const wordOfDataLength = new BigNumber(encodedWordOfData.byteLength);
- const encodedWordOfDataLength = assetProxyUtils.encodeUint256(wordOfDataLength);
+ const encodedWordOfDataLength = typeEncodingUtils.encodeUint256(wordOfDataLength);
wordOfTestBytesAsBuffer = Buffer.concat([encodedWordOfDataLength, encodedWordOfData]);
wordOfTestBytes = ethUtil.bufferToHex(wordOfTestBytesAsBuffer);
// Create long test bytes (combines short test bytes with word of test bytes)
longData = ethUtil.bufferToHex(Buffer.concat([encodedShortData, encodedWordOfData]));
const longDataLength = new BigNumber(encodedShortData.byteLength + encodedWordOfData.byteLength);
- const encodedLongDataLength = assetProxyUtils.encodeUint256(longDataLength);
+ const encodedLongDataLength = typeEncodingUtils.encodeUint256(longDataLength);
longTestBytesAsBuffer = Buffer.concat([encodedLongDataLength, encodedShortData, encodedWordOfData]);
longTestBytes = ethUtil.bufferToHex(longTestBytesAsBuffer);
});
diff --git a/packages/contracts/test/multisig/asset_proxy_owner.ts b/packages/contracts/test/multisig/asset_proxy_owner.ts
index 10fed6815..6b98605d3 100644
--- a/packages/contracts/test/multisig/asset_proxy_owner.ts
+++ b/packages/contracts/test/multisig/asset_proxy_owner.ts
@@ -18,9 +18,9 @@ import {
expectContractCreationFailedWithoutReason,
expectTransactionFailedWithoutReasonAsync,
} from '../utils/assertions';
+import { increaseTimeAndMineBlockAsync } from '../utils/block_timestamp';
import { chaiSetup } from '../utils/chai_setup';
import { constants } from '../utils/constants';
-import { increaseTimeAndMineBlockAsync } from '../utils/increase_time';
import { MultiSigWrapper } from '../utils/multi_sig_wrapper';
import { provider, txDefaults, web3Wrapper } from '../utils/web3_wrapper';
@@ -148,6 +148,25 @@ describe('AssetProxyOwner', () => {
});
});
+ describe('readBytes4', () => {
+ it('should revert if byte array has a length < 4', async () => {
+ const byteArrayLessThan4Bytes = '0x010101';
+ return expectContractCallFailedWithoutReasonAsync(
+ testAssetProxyOwner.publicReadBytes4.callAsync(byteArrayLessThan4Bytes, new BigNumber(0)),
+ );
+ });
+ it('should return the first 4 bytes of a byte array of arbitrary length', async () => {
+ const byteArrayLongerThan32Bytes =
+ '0x0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef';
+ const first4Bytes = await testAssetProxyOwner.publicReadBytes4.callAsync(
+ byteArrayLongerThan32Bytes,
+ new BigNumber(0),
+ );
+ const expectedFirst4Bytes = byteArrayLongerThan32Bytes.slice(0, 10);
+ expect(first4Bytes).to.equal(expectedFirst4Bytes);
+ });
+ });
+
describe('registerAssetProxy', () => {
it('should throw if not called by multisig', async () => {
const isRegistered = true;
@@ -238,8 +257,6 @@ describe('AssetProxyOwner', () => {
const registerAssetProxySubmitLog = registerAssetProxySubmitRes.logs[0] as LogWithDecodedArgs<
AssetProxyOwnerSubmissionEventArgs
>;
- const registerAssetProxyTxId = registerAssetProxySubmitLog.args.transactionId;
- await multiSigWrapper.confirmTransactionAsync(registerAssetProxyTxId, owners[1]);
const addAuthorizedAddressData = erc20Proxy.addAuthorizedAddress.getABIEncodedTransactionData(authorized);
const erc20AddAuthorizedAddressSubmitRes = await multiSigWrapper.submitTransactionAsync(
@@ -257,9 +274,12 @@ describe('AssetProxyOwner', () => {
>;
const erc721AddAuthorizedAddressSubmitLog = erc721AddAuthorizedAddressSubmitRes
.logs[0] as LogWithDecodedArgs<AssetProxyOwnerSubmissionEventArgs>;
+
+ const registerAssetProxyTxId = registerAssetProxySubmitLog.args.transactionId;
const erc20AddAuthorizedAddressTxId = erc20AddAuthorizedAddressSubmitLog.args.transactionId;
const erc721AddAuthorizedAddressTxId = erc721AddAuthorizedAddressSubmitLog.args.transactionId;
+ await multiSigWrapper.confirmTransactionAsync(registerAssetProxyTxId, owners[1]);
await multiSigWrapper.confirmTransactionAsync(erc20AddAuthorizedAddressTxId, owners[1]);
await multiSigWrapper.confirmTransactionAsync(erc721AddAuthorizedAddressTxId, owners[1]);
await increaseTimeAndMineBlockAsync(SECONDS_TIME_LOCKED.toNumber());
diff --git a/packages/contracts/test/multisig/multi_sig_with_time_lock.ts b/packages/contracts/test/multisig/multi_sig_with_time_lock.ts
index a8e9243a9..8eeeeca6b 100644
--- a/packages/contracts/test/multisig/multi_sig_with_time_lock.ts
+++ b/packages/contracts/test/multisig/multi_sig_with_time_lock.ts
@@ -9,9 +9,9 @@ import {
} from '../../generated_contract_wrappers/multi_sig_wallet_with_time_lock';
import { artifacts } from '../utils/artifacts';
import { expectTransactionFailedWithoutReasonAsync } from '../utils/assertions';
+import { increaseTimeAndMineBlockAsync } from '../utils/block_timestamp';
import { chaiSetup } from '../utils/chai_setup';
import { constants } from '../utils/constants';
-import { increaseTimeAndMineBlockAsync } from '../utils/increase_time';
import { MultiSigWrapper } from '../utils/multi_sig_wrapper';
import { provider, txDefaults, web3Wrapper } from '../utils/web3_wrapper';
diff --git a/packages/contracts/test/utils/asset_wrapper.ts b/packages/contracts/test/utils/asset_wrapper.ts
index f291170a2..e3a4800c6 100644
--- a/packages/contracts/test/utils/asset_wrapper.ts
+++ b/packages/contracts/test/utils/asset_wrapper.ts
@@ -1,4 +1,4 @@
-import { assetProxyUtils } from '@0xproject/order-utils';
+import { assetDataUtils } from '@0xproject/order-utils';
import { AssetProxyId } from '@0xproject/types';
import { BigNumber, errorUtils } from '@0xproject/utils';
import * as _ from 'lodash';
@@ -17,7 +17,7 @@ interface ProxyIdToAssetWrappers {
* the logic that uses it does not need to care what standard a token belongs to.
*/
export class AssetWrapper {
- private _proxyIdToAssetWrappers: ProxyIdToAssetWrappers;
+ private readonly _proxyIdToAssetWrappers: ProxyIdToAssetWrappers;
constructor(assetWrappers: AbstractAssetWrapper[]) {
this._proxyIdToAssetWrappers = {};
_.each(assetWrappers, assetWrapper => {
@@ -26,7 +26,7 @@ export class AssetWrapper {
});
}
public async getBalanceAsync(userAddress: string, assetData: string): Promise<BigNumber> {
- const proxyId = assetProxyUtils.decodeAssetDataId(assetData);
+ const proxyId = assetDataUtils.decodeAssetProxyId(assetData);
switch (proxyId) {
case AssetProxyId.ERC20: {
const erc20Wrapper = this._proxyIdToAssetWrappers[proxyId] as ERC20Wrapper;
@@ -35,7 +35,7 @@ export class AssetWrapper {
}
case AssetProxyId.ERC721: {
const assetWrapper = this._proxyIdToAssetWrappers[proxyId] as ERC721Wrapper;
- const assetProxyData = assetProxyUtils.decodeERC721AssetData(assetData);
+ const assetProxyData = assetDataUtils.decodeERC721AssetData(assetData);
const isOwner = await assetWrapper.isOwnerAsync(
userAddress,
assetProxyData.tokenAddress,
@@ -49,7 +49,7 @@ export class AssetWrapper {
}
}
public async setBalanceAsync(userAddress: string, assetData: string, desiredBalance: BigNumber): Promise<void> {
- const proxyId = assetProxyUtils.decodeAssetDataId(assetData);
+ const proxyId = assetDataUtils.decodeAssetProxyId(assetData);
switch (proxyId) {
case AssetProxyId.ERC20: {
const erc20Wrapper = this._proxyIdToAssetWrappers[proxyId] as ERC20Wrapper;
@@ -61,7 +61,7 @@ export class AssetWrapper {
throw new Error(`Balance for ERC721 token can only be set to 0 or 1. Got: ${desiredBalance}`);
}
const erc721Wrapper = this._proxyIdToAssetWrappers[proxyId] as ERC721Wrapper;
- const assetProxyData = assetProxyUtils.decodeERC721AssetData(assetData);
+ const assetProxyData = assetDataUtils.decodeERC721AssetData(assetData);
const doesTokenExist = erc721Wrapper.doesTokenExistAsync(
assetProxyData.tokenAddress,
assetProxyData.tokenId,
@@ -107,7 +107,7 @@ export class AssetWrapper {
}
}
public async getProxyAllowanceAsync(userAddress: string, assetData: string): Promise<BigNumber> {
- const proxyId = assetProxyUtils.decodeAssetDataId(assetData);
+ const proxyId = assetDataUtils.decodeAssetProxyId(assetData);
switch (proxyId) {
case AssetProxyId.ERC20: {
const erc20Wrapper = this._proxyIdToAssetWrappers[proxyId] as ERC20Wrapper;
@@ -116,7 +116,7 @@ export class AssetWrapper {
}
case AssetProxyId.ERC721: {
const assetWrapper = this._proxyIdToAssetWrappers[proxyId] as ERC721Wrapper;
- const erc721ProxyData = assetProxyUtils.decodeERC721AssetData(assetData);
+ const erc721ProxyData = assetDataUtils.decodeERC721AssetData(assetData);
const isProxyApprovedForAll = await assetWrapper.isProxyApprovedForAllAsync(
userAddress,
erc721ProxyData.tokenAddress,
@@ -141,7 +141,7 @@ export class AssetWrapper {
assetData: string,
desiredAllowance: BigNumber,
): Promise<void> {
- const proxyId = assetProxyUtils.decodeAssetDataId(assetData);
+ const proxyId = assetDataUtils.decodeAssetProxyId(assetData);
switch (proxyId) {
case AssetProxyId.ERC20: {
const erc20Wrapper = this._proxyIdToAssetWrappers[proxyId] as ERC20Wrapper;
@@ -159,7 +159,7 @@ export class AssetWrapper {
);
}
const erc721Wrapper = this._proxyIdToAssetWrappers[proxyId] as ERC721Wrapper;
- const assetProxyData = assetProxyUtils.decodeERC721AssetData(assetData);
+ const assetProxyData = assetDataUtils.decodeERC721AssetData(assetData);
const doesTokenExist = await erc721Wrapper.doesTokenExistAsync(
assetProxyData.tokenAddress,
diff --git a/packages/contracts/test/utils/increase_time.ts b/packages/contracts/test/utils/block_timestamp.ts
index 4565d8dbc..1159792c4 100644
--- a/packages/contracts/test/utils/increase_time.ts
+++ b/packages/contracts/test/utils/block_timestamp.ts
@@ -29,3 +29,12 @@ export async function increaseTimeAndMineBlockAsync(seconds: number): Promise<nu
return offset;
}
+
+/**
+ * Returns the timestamp of the latest block in seconds since the Unix epoch.
+ * @returns a new Promise which will resolve with the timestamp in seconds.
+ */
+export async function getLatestBlockTimestampAsync(): Promise<number> {
+ const currentBlock = await web3Wrapper.getBlockAsync('latest');
+ return currentBlock.timestamp;
+}
diff --git a/packages/contracts/test/utils/constants.ts b/packages/contracts/test/utils/constants.ts
index 7f3ad62e1..7dac38f56 100644
--- a/packages/contracts/test/utils/constants.ts
+++ b/packages/contracts/test/utils/constants.ts
@@ -17,6 +17,7 @@ const TESTRPC_PRIVATE_KEYS_STRINGS = [
];
export const constants = {
+ BASE_16: 16,
INVALID_OPCODE: 'invalid opcode',
TESTRPC_NETWORK_ID: 50,
// Note(albrow): In practice V8 and most other engines limit the minimum
@@ -24,9 +25,10 @@ export const constants = {
// ensure we always use the minimum interval.
AWAIT_TRANSACTION_MINED_MS: 0,
MAX_ETHERTOKEN_WITHDRAW_GAS: 43000,
+ MAX_EXECUTE_TRANSACTION_GAS: 1000000,
MAX_TOKEN_TRANSFERFROM_GAS: 80000,
MAX_TOKEN_APPROVE_GAS: 60000,
- TRANSFER_FROM_GAS: 150000,
+ MAX_TRANSFER_FROM_GAS: 150000,
DUMMY_TOKEN_NAME: '',
DUMMY_TOKEN_SYMBOL: '',
DUMMY_TOKEN_DECIMALS: new BigNumber(18),
@@ -46,4 +48,5 @@ export const constants = {
makerFee: Web3Wrapper.toBaseUnitAmount(new BigNumber(1), 18),
takerFee: Web3Wrapper.toBaseUnitAmount(new BigNumber(1), 18),
},
+ WORD_LENGTH: 32,
};
diff --git a/packages/contracts/test/utils/core_combinatorial_utils.ts b/packages/contracts/test/utils/core_combinatorial_utils.ts
index 7c16ef201..44a5199c0 100644
--- a/packages/contracts/test/utils/core_combinatorial_utils.ts
+++ b/packages/contracts/test/utils/core_combinatorial_utils.ts
@@ -1,5 +1,5 @@
import {
- assetProxyUtils,
+ assetDataUtils,
BalanceAndProxyAllowanceLazyStore,
ExchangeTransferSimulator,
orderHashUtils,
@@ -72,7 +72,7 @@ export async function coreCombinatorialUtilsFactoryAsync(
erc20EighteenDecimalTokenB,
zrxToken,
] = await erc20Wrapper.deployDummyTokensAsync(erc20EighteenDecimalTokenCount, eighteenDecimals);
- const zrxAssetData = assetProxyUtils.encodeERC20AssetData(zrxToken.address);
+ const zrxAssetData = assetDataUtils.encodeERC20AssetData(zrxToken.address);
const erc20FiveDecimalTokenCount = 2;
const fiveDecimals = new BigNumber(5);
@@ -598,8 +598,8 @@ export class CoreCombinatorialUtils {
break;
case TakerAssetFillAmountScenario.LessThanRemainingFillableTakerAssetAmount:
- const takerAssetProxyId = assetProxyUtils.decodeAssetDataId(signedOrder.takerAssetData);
- const makerAssetProxyId = assetProxyUtils.decodeAssetDataId(signedOrder.makerAssetData);
+ const takerAssetProxyId = assetDataUtils.decodeAssetProxyId(signedOrder.takerAssetData);
+ const makerAssetProxyId = assetDataUtils.decodeAssetProxyId(signedOrder.makerAssetData);
const isEitherAssetERC721 =
takerAssetProxyId === AssetProxyId.ERC721 || makerAssetProxyId === AssetProxyId.ERC721;
if (isEitherAssetERC721) {
diff --git a/packages/contracts/test/utils/erc20_wrapper.ts b/packages/contracts/test/utils/erc20_wrapper.ts
index cf1433791..424aae579 100644
--- a/packages/contracts/test/utils/erc20_wrapper.ts
+++ b/packages/contracts/test/utils/erc20_wrapper.ts
@@ -1,4 +1,4 @@
-import { assetProxyUtils } from '@0xproject/order-utils';
+import { assetDataUtils } from '@0xproject/order-utils';
import { BigNumber } from '@0xproject/utils';
import { Web3Wrapper } from '@0xproject/web3-wrapper';
import { Provider } from 'ethereum-types';
@@ -13,11 +13,11 @@ import { ERC20BalancesByOwner } from './types';
import { txDefaults } from './web3_wrapper';
export class ERC20Wrapper {
- private _tokenOwnerAddresses: string[];
- private _contractOwnerAddress: string;
- private _web3Wrapper: Web3Wrapper;
- private _provider: Provider;
- private _dummyTokenContracts: DummyERC20TokenContract[];
+ private readonly _tokenOwnerAddresses: string[];
+ private readonly _contractOwnerAddress: string;
+ private readonly _web3Wrapper: Web3Wrapper;
+ private readonly _provider: Provider;
+ private readonly _dummyTokenContracts: DummyERC20TokenContract[];
private _proxyContract?: ERC20ProxyContract;
private _proxyIdIfExists?: string;
constructor(provider: Provider, tokenOwnerAddresses: string[], contractOwnerAddress: string) {
@@ -154,7 +154,7 @@ export class ERC20Wrapper {
return tokenAddresses;
}
private _getTokenContractFromAssetData(assetData: string): DummyERC20TokenContract {
- const erc20ProxyData = assetProxyUtils.decodeERC20AssetData(assetData);
+ const erc20ProxyData = assetDataUtils.decodeERC20AssetData(assetData);
const tokenAddress = erc20ProxyData.tokenAddress;
const tokenContractIfExists = _.find(this._dummyTokenContracts, c => c.address === tokenAddress);
if (_.isUndefined(tokenContractIfExists)) {
diff --git a/packages/contracts/test/utils/erc721_wrapper.ts b/packages/contracts/test/utils/erc721_wrapper.ts
index a38dfb811..d023b4d02 100644
--- a/packages/contracts/test/utils/erc721_wrapper.ts
+++ b/packages/contracts/test/utils/erc721_wrapper.ts
@@ -13,11 +13,11 @@ import { ERC721TokenIdsByOwner } from './types';
import { txDefaults } from './web3_wrapper';
export class ERC721Wrapper {
- private _tokenOwnerAddresses: string[];
- private _contractOwnerAddress: string;
- private _web3Wrapper: Web3Wrapper;
- private _provider: Provider;
- private _dummyTokenContracts: DummyERC721TokenContract[];
+ private readonly _tokenOwnerAddresses: string[];
+ private readonly _contractOwnerAddress: string;
+ private readonly _web3Wrapper: Web3Wrapper;
+ private readonly _provider: Provider;
+ private readonly _dummyTokenContracts: DummyERC721TokenContract[];
private _proxyContract?: ERC721ProxyContract;
private _proxyIdIfExists?: string;
private _initialTokenIdsByOwner: ERC721TokenIdsByOwner = {};
diff --git a/packages/contracts/test/utils/exchange_wrapper.ts b/packages/contracts/test/utils/exchange_wrapper.ts
index 155d0eeb0..490ea959b 100644
--- a/packages/contracts/test/utils/exchange_wrapper.ts
+++ b/packages/contracts/test/utils/exchange_wrapper.ts
@@ -11,9 +11,9 @@ import { orderUtils } from './order_utils';
import { OrderInfo, SignedTransaction } from './types';
export class ExchangeWrapper {
- private _exchange: ExchangeContract;
- private _web3Wrapper: Web3Wrapper;
- private _logDecoder: LogDecoder;
+ private readonly _exchange: ExchangeContract;
+ private readonly _web3Wrapper: Web3Wrapper;
+ private readonly _logDecoder: LogDecoder;
constructor(exchangeContract: ExchangeContract, provider: Provider) {
this._exchange = exchangeContract;
this._web3Wrapper = new Web3Wrapper(provider);
@@ -223,6 +223,10 @@ export class ExchangeWrapper {
const orderInfo = (await this._exchange.getOrderInfo.callAsync(signedOrder)) as OrderInfo;
return orderInfo;
}
+ public async getOrdersInfoAsync(signedOrders: SignedOrder[]): Promise<OrderInfo[]> {
+ const ordersInfo = (await this._exchange.getOrdersInfo.callAsync(signedOrders)) as OrderInfo[];
+ return ordersInfo;
+ }
public async matchOrdersAsync(
signedOrderLeft: SignedOrder,
signedOrderRight: SignedOrder,
diff --git a/packages/contracts/test/utils/forwarder_wrapper.ts b/packages/contracts/test/utils/forwarder_wrapper.ts
index d227420ee..e39df14b1 100644
--- a/packages/contracts/test/utils/forwarder_wrapper.ts
+++ b/packages/contracts/test/utils/forwarder_wrapper.ts
@@ -1,4 +1,4 @@
-import { assetProxyUtils } from '@0xproject/order-utils';
+import { assetDataUtils } from '@0xproject/order-utils';
import { AssetProxyId, SignedOrder } from '@0xproject/types';
import { BigNumber } from '@0xproject/utils';
import { Web3Wrapper } from '@0xproject/web3-wrapper';
@@ -18,13 +18,13 @@ const ZERO_AMOUNT = new BigNumber(0);
const INSUFFICENT_ORDERS_FOR_MAKER_AMOUNT = 'Unable to satisfy makerAssetFillAmount with provided orders';
export class ForwarderWrapper {
- private _web3Wrapper: Web3Wrapper;
- private _forwarderContract: ForwarderContract;
- private _logDecoder: LogDecoder;
- private _zrxAddress: string;
+ private readonly _web3Wrapper: Web3Wrapper;
+ private readonly _forwarderContract: ForwarderContract;
+ private readonly _logDecoder: LogDecoder;
+ private readonly _zrxAddress: string;
private static _createOptimizedSellOrders(signedOrders: SignedOrder[]): MarketSellOrders {
const marketSellOrders = formatters.createMarketSellOrders(signedOrders, ZERO_AMOUNT);
- const assetDataId = assetProxyUtils.decodeAssetDataId(signedOrders[0].makerAssetData);
+ const assetDataId = assetDataUtils.decodeAssetProxyId(signedOrders[0].makerAssetData);
// Contract will fill this in for us as all of the assetData is assumed to be the same
for (let i = 0; i < signedOrders.length; i++) {
if (i !== 0 && assetDataId === AssetProxyId.ERC20) {
@@ -90,7 +90,7 @@ export class ForwarderWrapper {
txData: TxDataPayable,
opts: { feeProportion?: number; feeRecipient?: string } = {},
): Promise<TransactionReceiptWithDecodedLogs> {
- const assetDataId = assetProxyUtils.decodeAssetDataId(orders[0].makerAssetData);
+ const assetDataId = assetDataUtils.decodeAssetProxyId(orders[0].makerAssetData);
if (assetDataId !== AssetProxyId.ERC20) {
throw new Error('Asset type not supported by marketSellEthForERC20');
}
@@ -116,7 +116,7 @@ export class ForwarderWrapper {
feeProportion: number,
makerAssetFillAmount: BigNumber,
): Promise<BigNumber> {
- const assetProxyId = assetProxyUtils.decodeAssetDataId(orders[0].makerAssetData);
+ const assetProxyId = assetDataUtils.decodeAssetProxyId(orders[0].makerAssetData);
switch (assetProxyId) {
case AssetProxyId.ERC20: {
const fillAmountWei = this._calculateMarketBuyERC20FillAmountAsync(
@@ -145,7 +145,7 @@ export class ForwarderWrapper {
feeProportion: number,
makerAssetFillAmount: BigNumber,
): Promise<BigNumber> {
- const makerAssetData = assetProxyUtils.decodeAssetData(orders[0].makerAssetData);
+ const makerAssetData = assetDataUtils.decodeAssetDataOrThrow(orders[0].makerAssetData);
const makerAssetToken = makerAssetData.tokenAddress;
const params = formatters.createMarketBuyOrders(orders, makerAssetFillAmount);
diff --git a/packages/contracts/test/utils/log_decoder.ts b/packages/contracts/test/utils/log_decoder.ts
index 07127ba79..5a4801319 100644
--- a/packages/contracts/test/utils/log_decoder.ts
+++ b/packages/contracts/test/utils/log_decoder.ts
@@ -15,9 +15,9 @@ import { artifacts } from './artifacts';
import { constants } from './constants';
export class LogDecoder {
- private _web3Wrapper: Web3Wrapper;
- private _contractAddress: string;
- private _abiDecoder: AbiDecoder;
+ private readonly _web3Wrapper: Web3Wrapper;
+ private readonly _contractAddress: string;
+ private readonly _abiDecoder: AbiDecoder;
public static wrapLogBigNumbers(log: any): any {
const argNames = _.keys(log.args);
for (const argName of argNames) {
diff --git a/packages/contracts/test/utils/match_order_tester.ts b/packages/contracts/test/utils/match_order_tester.ts
index 6145779b0..fa2eabc12 100644
--- a/packages/contracts/test/utils/match_order_tester.ts
+++ b/packages/contracts/test/utils/match_order_tester.ts
@@ -1,4 +1,4 @@
-import { assetProxyUtils, orderHashUtils } from '@0xproject/order-utils';
+import { assetDataUtils, orderHashUtils } from '@0xproject/order-utils';
import { AssetProxyId, SignedOrder } from '@0xproject/types';
import { BigNumber } from '@0xproject/utils';
import * as chai from 'chai';
@@ -14,10 +14,10 @@ chaiSetup.configure();
const expect = chai.expect;
export class MatchOrderTester {
- private _exchangeWrapper: ExchangeWrapper;
- private _erc20Wrapper: ERC20Wrapper;
- private _erc721Wrapper: ERC721Wrapper;
- private _feeTokenAddress: string;
+ private readonly _exchangeWrapper: ExchangeWrapper;
+ private readonly _erc20Wrapper: ERC20Wrapper;
+ private readonly _erc721Wrapper: ERC721Wrapper;
+ private readonly _feeTokenAddress: string;
/// @dev Compares a pair of ERC20 balances and a pair of ERC721 token owners.
/// @param expectedNewERC20BalancesByOwner Expected ERC20 balances.
@@ -233,10 +233,10 @@ export class MatchOrderTester {
const expectedNewERC20BalancesByOwner = _.cloneDeep(erc20BalancesByOwner);
const expectedNewERC721TokenIdsByOwner = _.cloneDeep(erc721TokenIdsByOwner);
// Left Maker Asset (Right Taker Asset)
- const makerAssetProxyIdLeft = assetProxyUtils.decodeAssetDataId(signedOrderLeft.makerAssetData);
+ const makerAssetProxyIdLeft = assetDataUtils.decodeAssetProxyId(signedOrderLeft.makerAssetData);
if (makerAssetProxyIdLeft === AssetProxyId.ERC20) {
// Decode asset data
- const erc20AssetData = assetProxyUtils.decodeERC20AssetData(signedOrderLeft.makerAssetData);
+ const erc20AssetData = assetDataUtils.decodeERC20AssetData(signedOrderLeft.makerAssetData);
const makerAssetAddressLeft = erc20AssetData.tokenAddress;
const takerAssetAddressRight = makerAssetAddressLeft;
// Left Maker
@@ -255,7 +255,7 @@ export class MatchOrderTester {
][makerAssetAddressLeft].add(expectedTransferAmounts.amountReceivedByTaker);
} else if (makerAssetProxyIdLeft === AssetProxyId.ERC721) {
// Decode asset data
- const erc721AssetData = assetProxyUtils.decodeERC721AssetData(signedOrderLeft.makerAssetData);
+ const erc721AssetData = assetDataUtils.decodeERC721AssetData(signedOrderLeft.makerAssetData);
const makerAssetAddressLeft = erc721AssetData.tokenAddress;
const makerAssetIdLeft = erc721AssetData.tokenId;
const takerAssetAddressRight = makerAssetAddressLeft;
@@ -268,10 +268,10 @@ export class MatchOrderTester {
}
// Left Taker Asset (Right Maker Asset)
// Note: This exchange is only between the order makers: the Taker does not receive any of the left taker asset.
- const takerAssetProxyIdLeft = assetProxyUtils.decodeAssetDataId(signedOrderLeft.takerAssetData);
+ const takerAssetProxyIdLeft = assetDataUtils.decodeAssetProxyId(signedOrderLeft.takerAssetData);
if (takerAssetProxyIdLeft === AssetProxyId.ERC20) {
// Decode asset data
- const erc20AssetData = assetProxyUtils.decodeERC20AssetData(signedOrderLeft.takerAssetData);
+ const erc20AssetData = assetDataUtils.decodeERC20AssetData(signedOrderLeft.takerAssetData);
const takerAssetAddressLeft = erc20AssetData.tokenAddress;
const makerAssetAddressRight = takerAssetAddressLeft;
// Left Maker
@@ -286,7 +286,7 @@ export class MatchOrderTester {
);
} else if (takerAssetProxyIdLeft === AssetProxyId.ERC721) {
// Decode asset data
- const erc721AssetData = assetProxyUtils.decodeERC721AssetData(signedOrderRight.makerAssetData);
+ const erc721AssetData = assetDataUtils.decodeERC721AssetData(signedOrderRight.makerAssetData);
const makerAssetAddressRight = erc721AssetData.tokenAddress;
const makerAssetIdRight = erc721AssetData.tokenId;
const takerAssetAddressLeft = makerAssetAddressRight;
diff --git a/packages/contracts/test/utils/multi_sig_wrapper.ts b/packages/contracts/test/utils/multi_sig_wrapper.ts
index 6e7746dfc..8c8055d4a 100644
--- a/packages/contracts/test/utils/multi_sig_wrapper.ts
+++ b/packages/contracts/test/utils/multi_sig_wrapper.ts
@@ -6,12 +6,13 @@ import * as _ from 'lodash';
import { AssetProxyOwnerContract } from '../../generated_contract_wrappers/asset_proxy_owner';
import { MultiSigWalletContract } from '../../generated_contract_wrappers/multi_sig_wallet';
+import { constants } from './constants';
import { LogDecoder } from './log_decoder';
export class MultiSigWrapper {
- private _multiSig: MultiSigWalletContract;
- private _web3Wrapper: Web3Wrapper;
- private _logDecoder: LogDecoder;
+ private readonly _multiSig: MultiSigWalletContract;
+ private readonly _web3Wrapper: Web3Wrapper;
+ private readonly _logDecoder: LogDecoder;
constructor(multiSigContract: MultiSigWalletContract, provider: Provider) {
this._multiSig = multiSigContract;
this._web3Wrapper = new Web3Wrapper(provider);
@@ -36,7 +37,10 @@ export class MultiSigWrapper {
return tx;
}
public async executeTransactionAsync(txId: BigNumber, from: string): Promise<TransactionReceiptWithDecodedLogs> {
- const txHash = await this._multiSig.executeTransaction.sendTransactionAsync(txId, { from });
+ const txHash = await this._multiSig.executeTransaction.sendTransactionAsync(txId, {
+ from,
+ gas: constants.MAX_EXECUTE_TRANSACTION_GAS,
+ });
const tx = await this._logDecoder.getTxWithDecodedLogsAsync(txHash);
return tx;
}
@@ -48,6 +52,7 @@ export class MultiSigWrapper {
const txHash = await (this
._multiSig as AssetProxyOwnerContract).executeRemoveAuthorizedAddressAtIndex.sendTransactionAsync(txId, {
from,
+ gas: constants.MAX_EXECUTE_TRANSACTION_GAS,
});
const tx = await this._logDecoder.getTxWithDecodedLogsAsync(txHash);
return tx;
diff --git a/packages/contracts/test/utils/order_factory.ts b/packages/contracts/test/utils/order_factory.ts
index 009dbc396..63a893695 100644
--- a/packages/contracts/test/utils/order_factory.ts
+++ b/packages/contracts/test/utils/order_factory.ts
@@ -2,25 +2,26 @@ import { generatePseudoRandomSalt, orderHashUtils } from '@0xproject/order-utils
import { Order, SignatureType, SignedOrder } from '@0xproject/types';
import { BigNumber } from '@0xproject/utils';
+import { getLatestBlockTimestampAsync } from './block_timestamp';
import { constants } from './constants';
import { signingUtils } from './signing_utils';
export class OrderFactory {
- private _defaultOrderParams: Partial<Order>;
- private _privateKey: Buffer;
+ private readonly _defaultOrderParams: Partial<Order>;
+ private readonly _privateKey: Buffer;
constructor(privateKey: Buffer, defaultOrderParams: Partial<Order>) {
this._defaultOrderParams = defaultOrderParams;
this._privateKey = privateKey;
}
- public newSignedOrder(
+ public async newSignedOrderAsync(
customOrderParams: Partial<Order> = {},
signatureType: SignatureType = SignatureType.EthSign,
- ): SignedOrder {
- const tenMinutes = 10 * 60 * 1000;
- const randomExpiration = new BigNumber(Date.now() + tenMinutes);
+ ): Promise<SignedOrder> {
+ const tenMinutesInSeconds = 10 * 60;
+ const currentBlockTimestamp = await getLatestBlockTimestampAsync();
const order = ({
senderAddress: constants.NULL_ADDRESS,
- expirationTimeSeconds: randomExpiration,
+ expirationTimeSeconds: new BigNumber(currentBlockTimestamp).add(tenMinutesInSeconds),
salt: generatePseudoRandomSalt(),
takerAddress: constants.NULL_ADDRESS,
...this._defaultOrderParams,
diff --git a/packages/contracts/test/utils/order_factory_from_scenario.ts b/packages/contracts/test/utils/order_factory_from_scenario.ts
index 526505871..a908140b9 100644
--- a/packages/contracts/test/utils/order_factory_from_scenario.ts
+++ b/packages/contracts/test/utils/order_factory_from_scenario.ts
@@ -1,4 +1,4 @@
-import { assetProxyUtils, generatePseudoRandomSalt } from '@0xproject/order-utils';
+import { assetDataUtils, generatePseudoRandomSalt } from '@0xproject/order-utils';
import { Order } from '@0xproject/types';
import { BigNumber, errorUtils } from '@0xproject/utils';
@@ -24,13 +24,13 @@ const FIVE_UNITS_FIVE_DECIMALS = new BigNumber(500_000);
const ONE_NFT_UNIT = new BigNumber(1);
export class OrderFactoryFromScenario {
- private _userAddresses: string[];
- private _zrxAddress: string;
- private _nonZrxERC20EighteenDecimalTokenAddresses: string[];
- private _erc20FiveDecimalTokenAddresses: string[];
- private _erc721Token: DummyERC721TokenContract;
- private _erc721Balances: ERC721TokenIdsByOwner;
- private _exchangeAddress: string;
+ private readonly _userAddresses: string[];
+ private readonly _zrxAddress: string;
+ private readonly _nonZrxERC20EighteenDecimalTokenAddresses: string[];
+ private readonly _erc20FiveDecimalTokenAddresses: string[];
+ private readonly _erc721Token: DummyERC721TokenContract;
+ private readonly _erc721Balances: ERC721TokenIdsByOwner;
+ private readonly _exchangeAddress: string;
constructor(
userAddresses: string[],
zrxAddress: string,
@@ -75,18 +75,16 @@ export class OrderFactoryFromScenario {
switch (orderScenario.makerAssetDataScenario) {
case AssetDataScenario.ZRXFeeToken:
- makerAssetData = assetProxyUtils.encodeERC20AssetData(this._zrxAddress);
+ makerAssetData = assetDataUtils.encodeERC20AssetData(this._zrxAddress);
break;
case AssetDataScenario.ERC20NonZRXEighteenDecimals:
- makerAssetData = assetProxyUtils.encodeERC20AssetData(
- this._nonZrxERC20EighteenDecimalTokenAddresses[0],
- );
+ makerAssetData = assetDataUtils.encodeERC20AssetData(this._nonZrxERC20EighteenDecimalTokenAddresses[0]);
break;
case AssetDataScenario.ERC20FiveDecimals:
- makerAssetData = assetProxyUtils.encodeERC20AssetData(this._erc20FiveDecimalTokenAddresses[0]);
+ makerAssetData = assetDataUtils.encodeERC20AssetData(this._erc20FiveDecimalTokenAddresses[0]);
break;
case AssetDataScenario.ERC721:
- makerAssetData = assetProxyUtils.encodeERC721AssetData(
+ makerAssetData = assetDataUtils.encodeERC721AssetData(
this._erc721Token.address,
erc721MakerAssetIds[0],
);
@@ -97,18 +95,16 @@ export class OrderFactoryFromScenario {
switch (orderScenario.takerAssetDataScenario) {
case AssetDataScenario.ZRXFeeToken:
- takerAssetData = assetProxyUtils.encodeERC20AssetData(this._zrxAddress);
+ takerAssetData = assetDataUtils.encodeERC20AssetData(this._zrxAddress);
break;
case AssetDataScenario.ERC20NonZRXEighteenDecimals:
- takerAssetData = assetProxyUtils.encodeERC20AssetData(
- this._nonZrxERC20EighteenDecimalTokenAddresses[1],
- );
+ takerAssetData = assetDataUtils.encodeERC20AssetData(this._nonZrxERC20EighteenDecimalTokenAddresses[1]);
break;
case AssetDataScenario.ERC20FiveDecimals:
- takerAssetData = assetProxyUtils.encodeERC20AssetData(this._erc20FiveDecimalTokenAddresses[1]);
+ takerAssetData = assetDataUtils.encodeERC20AssetData(this._erc20FiveDecimalTokenAddresses[1]);
break;
case AssetDataScenario.ERC721:
- takerAssetData = assetProxyUtils.encodeERC721AssetData(
+ takerAssetData = assetDataUtils.encodeERC721AssetData(
this._erc721Token.address,
erc721TakerAssetIds[0],
);
diff --git a/packages/contracts/test/utils/simple_asset_balance_and_proxy_allowance_fetcher.ts b/packages/contracts/test/utils/simple_asset_balance_and_proxy_allowance_fetcher.ts
index a295a40c4..598ee6d29 100644
--- a/packages/contracts/test/utils/simple_asset_balance_and_proxy_allowance_fetcher.ts
+++ b/packages/contracts/test/utils/simple_asset_balance_and_proxy_allowance_fetcher.ts
@@ -4,7 +4,7 @@ import { BigNumber } from '@0xproject/utils';
import { AssetWrapper } from './asset_wrapper';
export class SimpleAssetBalanceAndProxyAllowanceFetcher implements AbstractBalanceAndProxyAllowanceFetcher {
- private _assetWrapper: AssetWrapper;
+ private readonly _assetWrapper: AssetWrapper;
constructor(assetWrapper: AssetWrapper) {
this._assetWrapper = assetWrapper;
}
diff --git a/packages/contracts/test/utils/simple_order_filled_cancelled_fetcher.ts b/packages/contracts/test/utils/simple_order_filled_cancelled_fetcher.ts
index 24afe36b7..ed69ecc63 100644
--- a/packages/contracts/test/utils/simple_order_filled_cancelled_fetcher.ts
+++ b/packages/contracts/test/utils/simple_order_filled_cancelled_fetcher.ts
@@ -4,8 +4,8 @@ import { BigNumber } from '@0xproject/utils';
import { ExchangeWrapper } from './exchange_wrapper';
export class SimpleOrderFilledCancelledFetcher implements AbstractOrderFilledCancelledFetcher {
- private _exchangeWrapper: ExchangeWrapper;
- private _zrxAssetData: string;
+ private readonly _exchangeWrapper: ExchangeWrapper;
+ private readonly _zrxAssetData: string;
constructor(exchange: ExchangeWrapper, zrxAssetData: string) {
this._exchangeWrapper = exchange;
this._zrxAssetData = zrxAssetData;
diff --git a/packages/contracts/test/utils/token_registry_wrapper.ts b/packages/contracts/test/utils/token_registry_wrapper.ts
index 0abf20e03..f1c40e8ff 100644
--- a/packages/contracts/test/utils/token_registry_wrapper.ts
+++ b/packages/contracts/test/utils/token_registry_wrapper.ts
@@ -8,8 +8,8 @@ import { Token } from './types';
import { constants } from './constants';
export class TokenRegWrapper {
- private _tokenReg: TokenRegistryContract;
- private _web3Wrapper: Web3Wrapper;
+ private readonly _tokenReg: TokenRegistryContract;
+ private readonly _web3Wrapper: Web3Wrapper;
constructor(tokenRegContract: TokenRegistryContract, provider: Provider) {
this._tokenReg = tokenRegContract;
this._web3Wrapper = new Web3Wrapper(provider);
diff --git a/packages/contracts/test/utils/transaction_factory.ts b/packages/contracts/test/utils/transaction_factory.ts
index 348c0715d..281c1e30d 100644
--- a/packages/contracts/test/utils/transaction_factory.ts
+++ b/packages/contracts/test/utils/transaction_factory.ts
@@ -15,9 +15,9 @@ const EIP712_ZEROEX_TRANSACTION_SCHEMA: EIP712Schema = {
};
export class TransactionFactory {
- private _signerBuff: Buffer;
- private _exchangeAddress: string;
- private _privateKey: Buffer;
+ private readonly _signerBuff: Buffer;
+ private readonly _exchangeAddress: string;
+ private readonly _privateKey: Buffer;
constructor(privateKey: Buffer, exchangeAddress: string) {
this._privateKey = privateKey;
this._exchangeAddress = exchangeAddress;
diff --git a/packages/contracts/test/utils/type_encoding_utils.ts b/packages/contracts/test/utils/type_encoding_utils.ts
new file mode 100644
index 000000000..75307b9bd
--- /dev/null
+++ b/packages/contracts/test/utils/type_encoding_utils.ts
@@ -0,0 +1,21 @@
+import { BigNumber } from '@0xproject/utils';
+import BN = require('bn.js');
+import ethUtil = require('ethereumjs-util');
+
+import { constants } from './constants';
+
+export const typeEncodingUtils = {
+ encodeUint256(value: BigNumber): Buffer {
+ const base = 10;
+ const formattedValue = new BN(value.toString(base));
+ const encodedValue = ethUtil.toBuffer(formattedValue);
+ // tslint:disable-next-line:custom-no-magic-numbers
+ const paddedValue = ethUtil.setLengthLeft(encodedValue, constants.WORD_LENGTH);
+ return paddedValue;
+ },
+ decodeUint256(encodedValue: Buffer): BigNumber {
+ const formattedValue = ethUtil.bufferToHex(encodedValue);
+ const value = new BigNumber(formattedValue, constants.BASE_16);
+ return value;
+ },
+};
diff --git a/packages/contracts/test/utils/web3_wrapper.ts b/packages/contracts/test/utils/web3_wrapper.ts
index c9d83a02d..acb3103b7 100644
--- a/packages/contracts/test/utils/web3_wrapper.ts
+++ b/packages/contracts/test/utils/web3_wrapper.ts
@@ -51,8 +51,10 @@ export const provider = web3Factory.getRpcProvider(providerConfigs);
const isCoverageEnabled = env.parseBoolean(EnvVars.SolidityCoverage);
const isProfilerEnabled = env.parseBoolean(EnvVars.SolidityProfiler);
const isRevertTraceEnabled = env.parseBoolean(EnvVars.SolidityRevertTrace);
-const enabledSubproviderCount = _.filter([isCoverageEnabled, isProfilerEnabled, isRevertTraceEnabled], _.identity)
- .length;
+const enabledSubproviderCount = _.filter(
+ [isCoverageEnabled, isProfilerEnabled, isRevertTraceEnabled],
+ _.identity.bind(_),
+).length;
if (enabledSubproviderCount > 1) {
throw new Error(`Only one of coverage, profiler, or revert trace subproviders can be enabled at a time`);
}
diff --git a/packages/dev-utils/CHANGELOG.json b/packages/dev-utils/CHANGELOG.json
index 56ecd023e..d092ddf55 100644
--- a/packages/dev-utils/CHANGELOG.json
+++ b/packages/dev-utils/CHANGELOG.json
@@ -1,5 +1,14 @@
[
{
+ "timestamp": 1531919263,
+ "version": "0.4.6",
+ "changes": [
+ {
+ "note": "Dependencies updated"
+ }
+ ]
+ },
+ {
"timestamp": 1531149657,
"version": "0.4.5",
"changes": [
diff --git a/packages/dev-utils/CHANGELOG.md b/packages/dev-utils/CHANGELOG.md
index 55e12b2dd..de9287478 100644
--- a/packages/dev-utils/CHANGELOG.md
+++ b/packages/dev-utils/CHANGELOG.md
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
+## v0.4.6 - _July 18, 2018_
+
+ * Dependencies updated
+
## v0.4.5 - _July 9, 2018_
* Dependencies updated
diff --git a/packages/dev-utils/package.json b/packages/dev-utils/package.json
index 1808e23e4..3267f98d9 100644
--- a/packages/dev-utils/package.json
+++ b/packages/dev-utils/package.json
@@ -1,6 +1,6 @@
{
"name": "@0xproject/dev-utils",
- "version": "0.4.5",
+ "version": "0.4.6",
"engines": {
"node": ">=6.12"
},
@@ -41,18 +41,17 @@
"npm-run-all": "^4.1.2",
"nyc": "^11.0.1",
"shx": "^0.2.2",
- "tslint": "5.8.0",
+ "tslint": "5.11.0",
"typescript": "2.7.1"
},
"dependencies": {
- "@0xproject/subproviders": "^0.10.5",
+ "@0xproject/subproviders": "^0.10.6",
"@0xproject/types": "^0.8.2",
- "@0xproject/utils": "^0.7.2",
+ "@0xproject/utils": "^0.7.3",
"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"
+ "@0xproject/typescript-typings": "^0.4.3",
+ "@0xproject/web3-wrapper": "^0.7.3",
+ "lodash": "^4.17.4"
},
"publishConfig": {
"access": "public"
diff --git a/packages/dev-utils/src/blockchain_lifecycle.ts b/packages/dev-utils/src/blockchain_lifecycle.ts
index 9bd65ee5d..a48cb0856 100644
--- a/packages/dev-utils/src/blockchain_lifecycle.ts
+++ b/packages/dev-utils/src/blockchain_lifecycle.ts
@@ -10,8 +10,8 @@ import * as _ from 'lodash';
const MINIMUM_BLOCKS = 3;
export class BlockchainLifecycle {
- private _web3Wrapper: Web3Wrapper;
- private _snapshotIdsStack: number[];
+ private readonly _web3Wrapper: Web3Wrapper;
+ private readonly _snapshotIdsStack: number[];
private _addresses: string[] = [];
private _nodeType: NodeType | undefined;
constructor(web3Wrapper: Web3Wrapper) {
@@ -34,6 +34,12 @@ export class BlockchainLifecycle {
blockNumber = await this._web3Wrapper.getBlockNumberAsync();
}
this._snapshotIdsStack.push(blockNumber);
+ // HACK(albrow) It's possible that we applied a time offset but
+ // the transaction we mined to put that time offset into the
+ // blockchain was reverted. As a workaround, we mine a new dummy
+ // block so that the latest block timestamp accounts for any
+ // possible time offsets.
+ await this._mineDummyBlockAsync();
break;
default:
throw new Error(`Unknown node type: ${nodeType}`);
@@ -59,22 +65,9 @@ export class BlockchainLifecycle {
}
private async _mineMinimumBlocksAsync(): Promise<void> {
logUtils.warn('WARNING: minimum block number for tests not met. Mining additional blocks...');
- if (this._addresses.length === 0) {
- this._addresses = await this._web3Wrapper.getAvailableAddressesAsync();
- if (this._addresses.length === 0) {
- throw new Error('No accounts found');
- }
- }
while ((await this._web3Wrapper.getBlockNumberAsync()) < MINIMUM_BLOCKS) {
logUtils.warn('Mining block...');
- await this._web3Wrapper.awaitTransactionMinedAsync(
- await this._web3Wrapper.sendTransactionAsync({
- from: this._addresses[0],
- to: this._addresses[0],
- value: '0',
- }),
- 0,
- );
+ await this._mineDummyBlockAsync();
}
logUtils.warn('Done mining the minimum number of blocks.');
}
@@ -84,4 +77,22 @@ export class BlockchainLifecycle {
}
return this._nodeType;
}
+ // Sends a transaction that has no real effect on the state and waits for it
+ // to be mined.
+ private async _mineDummyBlockAsync(): Promise<void> {
+ if (this._addresses.length === 0) {
+ this._addresses = await this._web3Wrapper.getAvailableAddressesAsync();
+ if (this._addresses.length === 0) {
+ throw new Error('No accounts found');
+ }
+ }
+ await this._web3Wrapper.awaitTransactionMinedAsync(
+ await this._web3Wrapper.sendTransactionAsync({
+ from: this._addresses[0],
+ to: this._addresses[0],
+ value: '0',
+ }),
+ 0,
+ );
+ }
}
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/ethereum-types/package.json b/packages/ethereum-types/package.json
index 9d4930826..e8652383d 100644
--- a/packages/ethereum-types/package.json
+++ b/packages/ethereum-types/package.json
@@ -40,7 +40,7 @@
"copyfiles": "^1.2.0",
"make-promises-safe": "^1.1.0",
"shx": "^0.2.2",
- "tslint": "5.8.0",
+ "tslint": "5.11.0",
"typescript": "2.7.1"
},
"dependencies": {
diff --git a/packages/fill-scenarios/CHANGELOG.json b/packages/fill-scenarios/CHANGELOG.json
index cf36adf16..b22976d9b 100644
--- a/packages/fill-scenarios/CHANGELOG.json
+++ b/packages/fill-scenarios/CHANGELOG.json
@@ -9,6 +9,15 @@
]
},
{
+ "timestamp": 1531919263,
+ "version": "0.0.6",
+ "changes": [
+ {
+ "note": "Dependencies updated"
+ }
+ ]
+ },
+ {
"timestamp": 1531149657,
"version": "0.0.5",
"changes": [
diff --git a/packages/fill-scenarios/CHANGELOG.md b/packages/fill-scenarios/CHANGELOG.md
index 02618b89c..8b83a04f3 100644
--- a/packages/fill-scenarios/CHANGELOG.md
+++ b/packages/fill-scenarios/CHANGELOG.md
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
+## v0.0.6 - _July 18, 2018_
+
+ * Dependencies updated
+
## v0.0.5 - _July 9, 2018_
* Dependencies updated
diff --git a/packages/fill-scenarios/package.json b/packages/fill-scenarios/package.json
index 4e1ceeac0..45eb1ea6d 100644
--- a/packages/fill-scenarios/package.json
+++ b/packages/fill-scenarios/package.json
@@ -9,14 +9,14 @@
"build": "yarn pre_build && tsc",
"pre_build": "run-s update_artifacts generate_contract_wrappers",
"update_artifacts": "for i in ${npm_package_config_contracts}; do copyfiles -u 4 ../migrations/artifacts/2.0.0/$i.json lib/artifacts; done;",
- "generate_contract_wrappers": "abi-gen --abis 'lib/artifacts/@(Exchange|ERC20Token).json' --template ../contract_templates/contract.handlebars --partials '../contract_templates/partials/**/*.handlebars' --output src/generated_contract_wrappers --backend ethers",
+ "generate_contract_wrappers": "abi-gen --abis 'lib/artifacts/@(Exchange|DummyERC20Token|DummyERC721Token).json' --template ../contract_templates/contract.handlebars --partials '../contract_templates/partials/**/*.handlebars' --output src/generated_contract_wrappers --backend ethers",
"copy_monorepo_scripts": "copyfiles -u 3 './lib/src/monorepo_scripts/**/*' ./scripts",
"clean": "shx rm -rf lib scripts src/generated_contract_wrappers",
"lint": "tslint --project . --exclude **/src/generated_contract_wrappers/**/*",
"manual:postpublish": "yarn build; node ./scripts/postpublish.js"
},
"config": {
- "contracts": "Exchange ERC20Token"
+ "contracts": "Exchange DummyERC20Token DummyERC721Token"
},
"license": "Apache-2.0",
"repository": {
@@ -28,26 +28,26 @@
},
"homepage": "https://github.com/0xProject/0x-monorepo/packages/fill-scenarios/README.md",
"devDependencies": {
- "@0xproject/abi-gen": "^0.3.3",
+ "@0xproject/abi-gen": "^0.3.4",
"@0xproject/monorepo-scripts": "^0.2.2",
- "@0xproject/sol-compiler": "^0.5.3",
+ "@0xproject/sol-compiler": "^0.5.4",
"@0xproject/tslint-config": "^0.4.21",
"@types/lodash": "4.14.104",
"copyfiles": "^1.2.0",
"make-promises-safe": "^1.1.0",
"npm-run-all": "^4.1.2",
"shx": "^0.2.2",
- "tslint": "5.8.0",
+ "tslint": "5.11.0",
"typescript": "2.7.1"
},
"dependencies": {
- "@0xproject/base-contract": "^0.3.5",
+ "@0xproject/base-contract": "^0.3.6",
"@0xproject/order-utils": "^1.0.0",
"@0xproject/types": "1.0.0",
"ethereum-types": "^0.0.2",
- "@0xproject/typescript-typings": "^0.4.2",
- "@0xproject/utils": "^0.7.2",
- "@0xproject/web3-wrapper": "^0.7.2",
+ "@0xproject/typescript-typings": "^0.4.3",
+ "@0xproject/utils": "^0.7.3",
+ "@0xproject/web3-wrapper": "^0.7.3",
"ethers": "3.0.22",
"lodash": "^4.17.4"
},
diff --git a/packages/fill-scenarios/src/artifacts.ts b/packages/fill-scenarios/src/artifacts.ts
index f75374ba2..7f68ae26a 100644
--- a/packages/fill-scenarios/src/artifacts.ts
+++ b/packages/fill-scenarios/src/artifacts.ts
@@ -1,9 +1,11 @@
import { ContractArtifact } from '@0xproject/sol-compiler';
-import * as ERC20Token from './artifacts/ERC20Token.json';
+import * as DummyERC20Token from './artifacts/DummyERC20Token.json';
+import * as DummyERC721Token from './artifacts/DummyERC721Token.json';
import * as Exchange from './artifacts/Exchange.json';
export const artifacts = {
- ERC20Token: (ERC20Token as any) as ContractArtifact,
+ DummyERC20Token: (DummyERC20Token as any) as ContractArtifact,
+ DummyERC721Token: (DummyERC721Token as any) as ContractArtifact,
Exchange: (Exchange as any) as ContractArtifact,
};
diff --git a/packages/fill-scenarios/src/constants.ts b/packages/fill-scenarios/src/constants.ts
index ec2fe744a..5661b059f 100644
--- a/packages/fill-scenarios/src/constants.ts
+++ b/packages/fill-scenarios/src/constants.ts
@@ -1,3 +1,4 @@
export const constants = {
+ AWAIT_TRANSACTION_MINED_MS: 0,
NULL_ADDRESS: '0x0000000000000000000000000000000000000000',
};
diff --git a/packages/fill-scenarios/src/fill_scenarios.ts b/packages/fill-scenarios/src/fill_scenarios.ts
new file mode 100644
index 000000000..8f2766e24
--- /dev/null
+++ b/packages/fill-scenarios/src/fill_scenarios.ts
@@ -0,0 +1,300 @@
+import { assetDataUtils, orderFactory } from '@0xproject/order-utils';
+import { AssetProxyId, ERC721AssetData, OrderWithoutExchangeAddress, SignedOrder } from '@0xproject/types';
+import { BigNumber } from '@0xproject/utils';
+import { Web3Wrapper } from '@0xproject/web3-wrapper';
+import { Provider } from 'ethereum-types';
+import * as _ from 'lodash';
+
+import { artifacts } from './artifacts';
+import { constants } from './constants';
+import { DummyERC20TokenContract } from './generated_contract_wrappers/dummy_erc20_token';
+import { DummyERC721TokenContract } from './generated_contract_wrappers/dummy_erc721_token';
+import { ExchangeContract } from './generated_contract_wrappers/exchange';
+
+export class FillScenarios {
+ private readonly _web3Wrapper: Web3Wrapper;
+ private readonly _userAddresses: string[];
+ private readonly _coinbase: string;
+ private readonly _zrxTokenAddress: string;
+ private readonly _exchangeAddress: string;
+ private readonly _erc20ProxyAddress: string;
+ private readonly _erc721ProxyAddress: string;
+ constructor(
+ provider: Provider,
+ userAddresses: string[],
+ zrxTokenAddress: string,
+ exchangeAddress: string,
+ erc20ProxyAddress: string,
+ erc721ProxyAddress: string,
+ ) {
+ this._web3Wrapper = new Web3Wrapper(provider);
+ this._userAddresses = userAddresses;
+ this._coinbase = userAddresses[0];
+ this._zrxTokenAddress = zrxTokenAddress;
+ this._exchangeAddress = exchangeAddress;
+ this._erc20ProxyAddress = erc20ProxyAddress;
+ this._erc721ProxyAddress = erc721ProxyAddress;
+ }
+ public async createFillableSignedOrderAsync(
+ makerAssetData: string,
+ takerAssetData: string,
+ makerAddress: string,
+ takerAddress: string,
+ fillableAmount: BigNumber,
+ expirationTimeSeconds?: BigNumber,
+ ): Promise<SignedOrder> {
+ return this.createAsymmetricFillableSignedOrderAsync(
+ makerAssetData,
+ takerAssetData,
+ makerAddress,
+ takerAddress,
+ fillableAmount,
+ fillableAmount,
+ expirationTimeSeconds,
+ );
+ }
+ public async createFillableSignedOrderWithFeesAsync(
+ makerAssetData: string,
+ takerAssetData: string,
+ makerFee: BigNumber,
+ takerFee: BigNumber,
+ makerAddress: string,
+ takerAddress: string,
+ fillableAmount: BigNumber,
+ feeRecepientAddress: string,
+ expirationTimeSeconds?: BigNumber,
+ ): Promise<SignedOrder> {
+ return this._createAsymmetricFillableSignedOrderWithFeesAsync(
+ makerAssetData,
+ takerAssetData,
+ makerFee,
+ takerFee,
+ makerAddress,
+ takerAddress,
+ fillableAmount,
+ fillableAmount,
+ feeRecepientAddress,
+ expirationTimeSeconds,
+ );
+ }
+ public async createAsymmetricFillableSignedOrderAsync(
+ makerAssetData: string,
+ takerAssetData: string,
+ makerAddress: string,
+ takerAddress: string,
+ makerFillableAmount: BigNumber,
+ takerFillableAmount: BigNumber,
+ expirationTimeSeconds?: BigNumber,
+ ): Promise<SignedOrder> {
+ const makerFee = new BigNumber(0);
+ const takerFee = new BigNumber(0);
+ const feeRecepientAddress = constants.NULL_ADDRESS;
+ return this._createAsymmetricFillableSignedOrderWithFeesAsync(
+ makerAssetData,
+ takerAssetData,
+ makerFee,
+ takerFee,
+ makerAddress,
+ takerAddress,
+ makerFillableAmount,
+ takerFillableAmount,
+ feeRecepientAddress,
+ expirationTimeSeconds,
+ );
+ }
+ public async createPartiallyFilledSignedOrderAsync(
+ makerAssetData: string,
+ takerAssetData: string,
+ takerAddress: string,
+ fillableAmount: BigNumber,
+ partialFillAmount: BigNumber,
+ ): Promise<SignedOrder> {
+ const [makerAddress] = this._userAddresses;
+ const signedOrder = await this.createAsymmetricFillableSignedOrderAsync(
+ makerAssetData,
+ takerAssetData,
+ makerAddress,
+ takerAddress,
+ fillableAmount,
+ fillableAmount,
+ );
+ const exchangeInstance = new ExchangeContract(
+ artifacts.Exchange.compilerOutput.abi,
+ signedOrder.exchangeAddress,
+ this._web3Wrapper.getProvider(),
+ this._web3Wrapper.getContractDefaults(),
+ );
+
+ const orderWithoutExchangeAddress = _.omit(signedOrder, [
+ 'signature',
+ 'exchangeAddress',
+ ]) as OrderWithoutExchangeAddress;
+
+ const txHash = await exchangeInstance.fillOrder.sendTransactionAsync(
+ orderWithoutExchangeAddress,
+ partialFillAmount,
+ signedOrder.signature,
+ { from: takerAddress },
+ );
+ await this._web3Wrapper.awaitTransactionSuccessAsync(txHash, constants.AWAIT_TRANSACTION_MINED_MS);
+ return signedOrder;
+ }
+ private async _createAsymmetricFillableSignedOrderWithFeesAsync(
+ makerAssetData: string,
+ takerAssetData: string,
+ makerFee: BigNumber,
+ takerFee: BigNumber,
+ makerAddress: string,
+ takerAddress: string,
+ makerFillableAmount: BigNumber,
+ takerFillableAmount: BigNumber,
+ feeRecepientAddress: string,
+ expirationTimeSeconds?: BigNumber,
+ ): Promise<SignedOrder> {
+ const decodedMakerAssetData = assetDataUtils.decodeAssetDataOrThrow(makerAssetData);
+ if (decodedMakerAssetData.assetProxyId === AssetProxyId.ERC20) {
+ await this._increaseERC20BalanceAndAllowanceAsync(
+ decodedMakerAssetData.tokenAddress,
+ makerAddress,
+ makerFillableAmount,
+ );
+ } else {
+ if (!makerFillableAmount.equals(1)) {
+ throw new Error(`ERC721 makerFillableAmount should be equal 1. Found: ${makerFillableAmount}`);
+ }
+ await this._increaseERC721BalanceAndAllowanceAsync(
+ decodedMakerAssetData.tokenAddress,
+ makerAddress,
+ // tslint:disable-next-line:no-unnecessary-type-assertion
+ (decodedMakerAssetData as ERC721AssetData).tokenId,
+ );
+ }
+ const decodedTakerAssetData = assetDataUtils.decodeAssetDataOrThrow(takerAssetData);
+ if (decodedTakerAssetData.assetProxyId === AssetProxyId.ERC20) {
+ const takerTokenAddress = decodedTakerAssetData.tokenAddress;
+ await this._increaseERC20BalanceAndAllowanceAsync(takerTokenAddress, takerAddress, takerFillableAmount);
+ } else {
+ if (!takerFillableAmount.equals(1)) {
+ throw new Error(`ERC721 takerFillableAmount should be equal 1. Found: ${takerFillableAmount}`);
+ }
+ await this._increaseERC721BalanceAndAllowanceAsync(
+ decodedTakerAssetData.tokenAddress,
+ takerAddress,
+ // tslint:disable-next-line:no-unnecessary-type-assertion
+ (decodedMakerAssetData as ERC721AssetData).tokenId,
+ );
+ }
+ // Fees
+ await Promise.all([
+ this._increaseERC20BalanceAndAllowanceAsync(this._zrxTokenAddress, makerAddress, makerFee),
+ this._increaseERC20BalanceAndAllowanceAsync(this._zrxTokenAddress, takerAddress, takerFee),
+ ]);
+ const senderAddress = constants.NULL_ADDRESS;
+
+ const signedOrder = await orderFactory.createSignedOrderAsync(
+ this._web3Wrapper.getProvider(),
+ makerAddress,
+ takerAddress,
+ senderAddress,
+ makerFee,
+ takerFee,
+ makerFillableAmount,
+ makerAssetData,
+ takerFillableAmount,
+ takerAssetData,
+ this._exchangeAddress,
+ feeRecepientAddress,
+ expirationTimeSeconds,
+ );
+ return signedOrder;
+ }
+ private async _increaseERC721BalanceAndAllowanceAsync(
+ tokenAddress: string,
+ address: string,
+ tokenId: BigNumber,
+ ): Promise<void> {
+ await this._increaseERC721BalanceAsync(tokenAddress, address, tokenId);
+ await this._increaseERC721AllowanceAsync(tokenAddress, address, tokenId);
+ }
+ private async _increaseERC721AllowanceAsync(
+ tokenAddress: string,
+ address: string,
+ tokenId: BigNumber,
+ ): Promise<void> {
+ const erc721Token = new DummyERC721TokenContract(
+ artifacts.DummyERC721Token.compilerOutput.abi,
+ tokenAddress,
+ this._web3Wrapper.getProvider(),
+ this._web3Wrapper.getContractDefaults(),
+ );
+ const txHash = await erc721Token.approve.sendTransactionAsync(this._erc721ProxyAddress, tokenId, {
+ from: address,
+ });
+ await this._web3Wrapper.awaitTransactionSuccessAsync(txHash, constants.AWAIT_TRANSACTION_MINED_MS);
+ }
+ private async _increaseERC721BalanceAsync(
+ tokenAddress: string,
+ address: string,
+ tokenId: BigNumber,
+ ): Promise<void> {
+ const erc721Token = new DummyERC721TokenContract(
+ artifacts.DummyERC721Token.compilerOutput.abi,
+ tokenAddress,
+ this._web3Wrapper.getProvider(),
+ this._web3Wrapper.getContractDefaults(),
+ );
+ try {
+ const currentOwner = await erc721Token.ownerOf.callAsync(tokenId);
+ if (currentOwner !== address) {
+ throw new Error(`Token ${tokenAddress}:${tokenId} is already owner by ${currentOwner}`);
+ }
+ } catch (err) {
+ const txHash = await erc721Token.mint.sendTransactionAsync(address, tokenId, { from: this._coinbase });
+ await this._web3Wrapper.awaitTransactionSuccessAsync(txHash, constants.AWAIT_TRANSACTION_MINED_MS);
+ }
+ }
+ private async _increaseERC20BalanceAndAllowanceAsync(
+ tokenAddress: string,
+ address: string,
+ amount: BigNumber,
+ ): Promise<void> {
+ if (amount.isZero() || address === constants.NULL_ADDRESS) {
+ return; // noop
+ }
+ await Promise.all([
+ this._increaseERC20BalanceAsync(tokenAddress, address, amount),
+ this._increaseERC20AllowanceAsync(tokenAddress, address, amount),
+ ]);
+ }
+ private async _increaseERC20BalanceAsync(tokenAddress: string, address: string, amount: BigNumber): Promise<void> {
+ const erc20Token = new DummyERC20TokenContract(
+ artifacts.DummyERC20Token.compilerOutput.abi,
+ tokenAddress,
+ this._web3Wrapper.getProvider(),
+ this._web3Wrapper.getContractDefaults(),
+ );
+ const txHash = await erc20Token.transfer.sendTransactionAsync(address, amount, {
+ from: this._coinbase,
+ });
+ await this._web3Wrapper.awaitTransactionSuccessAsync(txHash, constants.AWAIT_TRANSACTION_MINED_MS);
+ }
+ private async _increaseERC20AllowanceAsync(
+ tokenAddress: string,
+ address: string,
+ amount: BigNumber,
+ ): Promise<void> {
+ const erc20Token = new DummyERC20TokenContract(
+ artifacts.DummyERC20Token.compilerOutput.abi,
+ tokenAddress,
+ this._web3Wrapper.getProvider(),
+ this._web3Wrapper.getContractDefaults(),
+ );
+ const oldMakerAllowance = await erc20Token.allowance.callAsync(address, this._erc20ProxyAddress);
+ const newMakerAllowance = oldMakerAllowance.plus(amount);
+
+ const txHash = await erc20Token.approve.sendTransactionAsync(this._erc20ProxyAddress, newMakerAllowance, {
+ from: address,
+ });
+ await this._web3Wrapper.awaitTransactionSuccessAsync(txHash, constants.AWAIT_TRANSACTION_MINED_MS);
+ }
+}
diff --git a/packages/fill-scenarios/src/index.ts b/packages/fill-scenarios/src/index.ts
index f9b69e1f3..c51145cdb 100644
--- a/packages/fill-scenarios/src/index.ts
+++ b/packages/fill-scenarios/src/index.ts
@@ -1,222 +1 @@
-import { assetProxyUtils, orderFactory } from '@0xproject/order-utils';
-import { OrderWithoutExchangeAddress, SignedOrder } from '@0xproject/types';
-import { BigNumber } from '@0xproject/utils';
-import { Web3Wrapper } from '@0xproject/web3-wrapper';
-import { Provider } from 'ethereum-types';
-import * as _ from 'lodash';
-
-import { artifacts } from './artifacts';
-import { constants } from './constants';
-import { ERC20TokenContract } from './generated_contract_wrappers/erc20_token';
-import { ExchangeContract } from './generated_contract_wrappers/exchange';
-
-export class FillScenarios {
- private _web3Wrapper: Web3Wrapper;
- private _userAddresses: string[];
- private _coinbase: string;
- private _zrxTokenAddress: string;
- private _exchangeAddress: string;
- private _erc20ProxyAddress: string;
- constructor(
- provider: Provider,
- userAddresses: string[],
- zrxTokenAddress: string,
- exchangeAddress: string,
- erc20ProxyAddress: string,
- ) {
- this._web3Wrapper = new Web3Wrapper(provider);
- this._userAddresses = userAddresses;
- this._coinbase = userAddresses[0];
- this._zrxTokenAddress = zrxTokenAddress;
- this._exchangeAddress = exchangeAddress;
- this._erc20ProxyAddress = erc20ProxyAddress;
- }
- public async createFillableSignedOrderAsync(
- makerAssetData: string,
- takerAssetData: string,
- makerAddress: string,
- takerAddress: string,
- fillableAmount: BigNumber,
- expirationTimeSeconds?: BigNumber,
- ): Promise<SignedOrder> {
- return this.createAsymmetricFillableSignedOrderAsync(
- makerAssetData,
- takerAssetData,
- makerAddress,
- takerAddress,
- fillableAmount,
- fillableAmount,
- expirationTimeSeconds,
- );
- }
- public async createFillableSignedOrderWithFeesAsync(
- makerAssetData: string,
- takerAssetData: string,
- makerFee: BigNumber,
- takerFee: BigNumber,
- makerAddress: string,
- takerAddress: string,
- fillableAmount: BigNumber,
- feeRecepientAddress: string,
- expirationTimeSeconds?: BigNumber,
- ): Promise<SignedOrder> {
- return this._createAsymmetricFillableSignedOrderWithFeesAsync(
- makerAssetData,
- takerAssetData,
- makerFee,
- takerFee,
- makerAddress,
- takerAddress,
- fillableAmount,
- fillableAmount,
- feeRecepientAddress,
- expirationTimeSeconds,
- );
- }
- public async createAsymmetricFillableSignedOrderAsync(
- makerAssetData: string,
- takerAssetData: string,
- makerAddress: string,
- takerAddress: string,
- makerFillableAmount: BigNumber,
- takerFillableAmount: BigNumber,
- expirationTimeSeconds?: BigNumber,
- ): Promise<SignedOrder> {
- const makerFee = new BigNumber(0);
- const takerFee = new BigNumber(0);
- const feeRecepientAddress = constants.NULL_ADDRESS;
- return this._createAsymmetricFillableSignedOrderWithFeesAsync(
- makerAssetData,
- takerAssetData,
- makerFee,
- takerFee,
- makerAddress,
- takerAddress,
- makerFillableAmount,
- takerFillableAmount,
- feeRecepientAddress,
- expirationTimeSeconds,
- );
- }
- public async createPartiallyFilledSignedOrderAsync(
- makerAssetData: string,
- takerAssetData: string,
- takerAddress: string,
- fillableAmount: BigNumber,
- partialFillAmount: BigNumber,
- ): Promise<SignedOrder> {
- const [makerAddress] = this._userAddresses;
- const signedOrder = await this.createAsymmetricFillableSignedOrderAsync(
- makerAssetData,
- takerAssetData,
- makerAddress,
- takerAddress,
- fillableAmount,
- fillableAmount,
- );
- const exchangeInstance = new ExchangeContract(
- artifacts.Exchange.compilerOutput.abi,
- signedOrder.exchangeAddress,
- this._web3Wrapper.getProvider(),
- this._web3Wrapper.getContractDefaults(),
- );
-
- const orderWithoutExchangeAddress = _.omit(signedOrder, [
- 'signature',
- 'exchangeAddress',
- ]) as OrderWithoutExchangeAddress;
-
- await exchangeInstance.fillOrder.sendTransactionAsync(
- orderWithoutExchangeAddress,
- partialFillAmount,
- signedOrder.signature,
- { from: takerAddress },
- );
- return signedOrder;
- }
- private async _createAsymmetricFillableSignedOrderWithFeesAsync(
- makerAssetData: string,
- takerAssetData: string,
- makerFee: BigNumber,
- takerFee: BigNumber,
- makerAddress: string,
- takerAddress: string,
- makerFillableAmount: BigNumber,
- takerFillableAmount: BigNumber,
- feeRecepientAddress: string,
- expirationTimeSeconds?: BigNumber,
- ): Promise<SignedOrder> {
- const makerERC20AssetData = assetProxyUtils.decodeERC20AssetData(makerAssetData);
- const makerTokenAddress = makerERC20AssetData.tokenAddress;
- const takerERC20AssetData = assetProxyUtils.decodeERC20AssetData(takerAssetData);
- const takerTokenAddress = takerERC20AssetData.tokenAddress;
- await Promise.all([
- this._increaseERC20BalanceAndAllowanceAsync(makerTokenAddress, makerAddress, makerFillableAmount),
- this._increaseERC20BalanceAndAllowanceAsync(takerTokenAddress, takerAddress, takerFillableAmount),
- ]);
- await Promise.all([
- this._increaseERC20BalanceAndAllowanceAsync(this._zrxTokenAddress, makerAddress, makerFee),
- this._increaseERC20BalanceAndAllowanceAsync(this._zrxTokenAddress, takerAddress, takerFee),
- ]);
- const senderAddress = constants.NULL_ADDRESS;
-
- const signedOrder = await orderFactory.createSignedOrderAsync(
- this._web3Wrapper.getProvider(),
- makerAddress,
- takerAddress,
- senderAddress,
- makerFee,
- takerFee,
- makerFillableAmount,
- makerAssetData,
- takerFillableAmount,
- takerAssetData,
- this._exchangeAddress,
- feeRecepientAddress,
- expirationTimeSeconds,
- );
- return signedOrder;
- }
- private async _increaseERC20BalanceAndAllowanceAsync(
- tokenAddress: string,
- address: string,
- amount: BigNumber,
- ): Promise<void> {
- if (amount.isZero() || address === constants.NULL_ADDRESS) {
- return; // noop
- }
- await Promise.all([
- this._increaseERC20BalanceAsync(tokenAddress, address, amount),
- this._increaseERC20AllowanceAsync(tokenAddress, address, amount),
- ]);
- }
- private async _increaseERC20BalanceAsync(tokenAddress: string, address: string, amount: BigNumber): Promise<void> {
- const token = new ERC20TokenContract(
- artifacts.ERC20Token.compilerOutput.abi,
- tokenAddress,
- this._web3Wrapper.getProvider(),
- this._web3Wrapper.getContractDefaults(),
- );
- await token.transfer.sendTransactionAsync(address, amount, {
- from: this._coinbase,
- });
- }
- private async _increaseERC20AllowanceAsync(
- tokenAddress: string,
- address: string,
- amount: BigNumber,
- ): Promise<void> {
- const tokenInstance = new ERC20TokenContract(
- artifacts.ERC20Token.compilerOutput.abi,
- tokenAddress,
- this._web3Wrapper.getProvider(),
- this._web3Wrapper.getContractDefaults(),
- );
- const oldMakerAllowance = await tokenInstance.allowance.callAsync(address, this._erc20ProxyAddress);
- const newMakerAllowance = oldMakerAllowance.plus(amount);
-
- await tokenInstance.approve.sendTransactionAsync(this._erc20ProxyAddress, newMakerAllowance, {
- from: address,
- });
- }
-}
+export { FillScenarios } from './fill_scenarios';
diff --git a/packages/json-schemas/CHANGELOG.json b/packages/json-schemas/CHANGELOG.json
index 42ef2065e..b69b440cf 100644
--- a/packages/json-schemas/CHANGELOG.json
+++ b/packages/json-schemas/CHANGELOG.json
@@ -9,6 +9,19 @@
{
"note": "Added CallData schema",
"pr": 821
+ },
+ {
+ "note": "Update CallData schema id to CallData",
+ "pr": 894
+ }
+ ]
+ },
+ {
+ "timestamp": 1531919263,
+ "version": "0.8.3",
+ "changes": [
+ {
+ "note": "Dependencies updated"
}
]
},
diff --git a/packages/json-schemas/CHANGELOG.md b/packages/json-schemas/CHANGELOG.md
index 2524cd768..df3150dba 100644
--- a/packages/json-schemas/CHANGELOG.md
+++ b/packages/json-schemas/CHANGELOG.md
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
+## v0.8.3 - _July 18, 2018_
+
+ * Dependencies updated
+
## v0.8.2 - _July 9, 2018_
* Dependencies updated
diff --git a/packages/json-schemas/package.json b/packages/json-schemas/package.json
index 8ecb41721..09360fa05 100644
--- a/packages/json-schemas/package.json
+++ b/packages/json-schemas/package.json
@@ -47,7 +47,7 @@
},
"homepage": "https://github.com/0xProject/0x-monorepo/packages/json-schemas/README.md",
"dependencies": {
- "@0xproject/typescript-typings": "^0.4.2",
+ "@0xproject/typescript-typings": "^0.4.3",
"@types/node": "^8.0.53",
"jsonschema": "^1.2.0",
"lodash.values": "^4.3.0"
@@ -55,7 +55,7 @@
"devDependencies": {
"@0xproject/monorepo-scripts": "^0.2.2",
"@0xproject/tslint-config": "^0.4.21",
- "@0xproject/utils": "^0.7.2",
+ "@0xproject/utils": "^0.7.3",
"@types/lodash.foreach": "^4.5.3",
"@types/lodash.values": "^4.3.3",
"@types/mocha": "^2.2.42",
@@ -68,7 +68,7 @@
"npm-run-all": "^4.1.2",
"nyc": "^11.0.1",
"shx": "^0.2.2",
- "tslint": "5.8.0",
+ "tslint": "5.11.0",
"typedoc": "0xProject/typedoc",
"typescript": "2.7.1"
},
diff --git a/packages/json-schemas/schemas/call_data_schema.ts b/packages/json-schemas/schemas/call_data_schema.ts
index e8fcc7512..b9d00ad2a 100644
--- a/packages/json-schemas/schemas/call_data_schema.ts
+++ b/packages/json-schemas/schemas/call_data_schema.ts
@@ -1,5 +1,5 @@
export const callDataSchema = {
- id: '/TxData',
+ id: '/CallData',
properties: {
from: { $ref: '/Address' },
to: { $ref: '/Address' },
diff --git a/packages/json-schemas/src/schema_validator.ts b/packages/json-schemas/src/schema_validator.ts
index f0392d1d1..3f303137b 100644
--- a/packages/json-schemas/src/schema_validator.ts
+++ b/packages/json-schemas/src/schema_validator.ts
@@ -7,7 +7,7 @@ import { schemas } from './schemas';
* A validator for [JSON-schemas](http://json-schema.org/)
*/
export class SchemaValidator {
- private _validator: Validator;
+ private readonly _validator: Validator;
/**
* Instantiates a SchemaValidator instance
*/
diff --git a/packages/metacoin/package.json b/packages/metacoin/package.json
index 9b96441c4..779be6673 100644
--- a/packages/metacoin/package.json
+++ b/packages/metacoin/package.json
@@ -1,6 +1,6 @@
{
"name": "@0xproject/metacoin",
- "version": "0.0.9",
+ "version": "0.0.10",
"engines": {
"node": ">=6.12"
},
@@ -29,26 +29,25 @@
"author": "",
"license": "Apache-2.0",
"dependencies": {
- "@0xproject/abi-gen": "^0.3.3",
- "@0xproject/base-contract": "^0.3.5",
- "@0xproject/sol-compiler": "^0.5.3",
- "@0xproject/sol-cov": "^0.1.2",
- "@0xproject/subproviders": "^0.10.5",
+ "@0xproject/abi-gen": "^0.3.4",
+ "@0xproject/base-contract": "^0.3.6",
+ "@0xproject/sol-compiler": "^0.5.4",
+ "@0xproject/sol-cov": "^0.1.3",
+ "@0xproject/subproviders": "^0.10.6",
"@0xproject/tslint-config": "^0.4.21",
"@0xproject/types": "^0.8.2",
- "@0xproject/typescript-typings": "^0.4.2",
- "@0xproject/utils": "^0.7.2",
- "@0xproject/web3-wrapper": "^0.7.2",
+ "@0xproject/typescript-typings": "^0.4.3",
+ "@0xproject/utils": "^0.7.3",
+ "@0xproject/web3-wrapper": "^0.7.3",
"@types/mocha": "^5.2.2",
"copyfiles": "^2.0.0",
"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",
+ "@0xproject/dev-utils": "^0.4.6",
"chai": "^4.0.1",
"chai-as-promised": "^7.1.0",
"chai-bignumber": "^2.0.1",
@@ -56,7 +55,7 @@
"make-promises-safe": "^1.1.0",
"npm-run-all": "^4.1.2",
"shx": "^0.2.2",
- "tslint": "5.8.0",
+ "tslint": "5.11.0",
"typescript": "2.7.1"
}
}
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/CHANGELOG.json b/packages/migrations/CHANGELOG.json
index 9852eeb11..ac9309a3b 100644
--- a/packages/migrations/CHANGELOG.json
+++ b/packages/migrations/CHANGELOG.json
@@ -1,5 +1,14 @@
[
{
+ "timestamp": 1531919263,
+ "version": "0.0.10",
+ "changes": [
+ {
+ "note": "Dependencies updated"
+ }
+ ]
+ },
+ {
"timestamp": 1531149657,
"version": "0.0.9",
"changes": [
diff --git a/packages/migrations/CHANGELOG.md b/packages/migrations/CHANGELOG.md
index e97b1fdec..9ec030ada 100644
--- a/packages/migrations/CHANGELOG.md
+++ b/packages/migrations/CHANGELOG.md
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
+## v0.0.10 - _July 18, 2018_
+
+ * Dependencies updated
+
## v0.0.9 - _July 9, 2018_
* Dependencies updated
diff --git a/packages/migrations/artifacts/2.0.0/AssetProxyOwner.json b/packages/migrations/artifacts/2.0.0/AssetProxyOwner.json
index b16cc2906..80751855b 100644
--- a/packages/migrations/artifacts/2.0.0/AssetProxyOwner.json
+++ b/packages/migrations/artifacts/2.0.0/AssetProxyOwner.json
@@ -19,7 +19,6 @@
}
],
"payable": false,
- "stateMutability": "view",
"type": "function"
},
{
@@ -33,7 +32,6 @@
"name": "removeOwner",
"outputs": [],
"payable": false,
- "stateMutability": "nonpayable",
"type": "function"
},
{
@@ -47,7 +45,6 @@
"name": "revokeConfirmation",
"outputs": [],
"payable": false,
- "stateMutability": "nonpayable",
"type": "function"
},
{
@@ -66,7 +63,6 @@
}
],
"payable": false,
- "stateMutability": "view",
"type": "function"
},
{
@@ -89,7 +85,6 @@
}
],
"payable": false,
- "stateMutability": "view",
"type": "function"
},
{
@@ -103,7 +98,6 @@
"name": "executeRemoveAuthorizedAddressAtIndex",
"outputs": [],
"payable": false,
- "stateMutability": "nonpayable",
"type": "function"
},
{
@@ -117,7 +111,6 @@
}
],
"payable": false,
- "stateMutability": "view",
"type": "function"
},
{
@@ -140,7 +133,6 @@
}
],
"payable": false,
- "stateMutability": "view",
"type": "function"
},
{
@@ -158,7 +150,6 @@
"name": "registerAssetProxy",
"outputs": [],
"payable": false,
- "stateMutability": "nonpayable",
"type": "function"
},
{
@@ -172,7 +163,6 @@
"name": "addOwner",
"outputs": [],
"payable": false,
- "stateMutability": "nonpayable",
"type": "function"
},
{
@@ -191,7 +181,6 @@
}
],
"payable": false,
- "stateMutability": "view",
"type": "function"
},
{
@@ -205,7 +194,6 @@
"name": "changeTimeLock",
"outputs": [],
"payable": false,
- "stateMutability": "nonpayable",
"type": "function"
},
{
@@ -224,7 +212,6 @@
}
],
"payable": false,
- "stateMutability": "view",
"type": "function"
},
{
@@ -243,7 +230,6 @@
}
],
"payable": false,
- "stateMutability": "view",
"type": "function"
},
{
@@ -274,7 +260,6 @@
}
],
"payable": false,
- "stateMutability": "view",
"type": "function"
},
{
@@ -288,7 +273,6 @@
}
],
"payable": false,
- "stateMutability": "view",
"type": "function"
},
{
@@ -319,7 +303,6 @@
}
],
"payable": false,
- "stateMutability": "view",
"type": "function"
},
{
@@ -338,7 +321,6 @@
}
],
"payable": false,
- "stateMutability": "view",
"type": "function"
},
{
@@ -352,7 +334,6 @@
}
],
"payable": false,
- "stateMutability": "view",
"type": "function"
},
{
@@ -366,7 +347,6 @@
"name": "changeRequirement",
"outputs": [],
"payable": false,
- "stateMutability": "nonpayable",
"type": "function"
},
{
@@ -380,7 +360,6 @@
"name": "confirmTransaction",
"outputs": [],
"payable": false,
- "stateMutability": "nonpayable",
"type": "function"
},
{
@@ -407,7 +386,6 @@
}
],
"payable": false,
- "stateMutability": "nonpayable",
"type": "function"
},
{
@@ -426,7 +404,6 @@
}
],
"payable": false,
- "stateMutability": "view",
"type": "function"
},
{
@@ -440,7 +417,6 @@
}
],
"payable": false,
- "stateMutability": "view",
"type": "function"
},
{
@@ -454,7 +430,6 @@
}
],
"payable": false,
- "stateMutability": "view",
"type": "function"
},
{
@@ -472,7 +447,6 @@
"name": "replaceOwner",
"outputs": [],
"payable": false,
- "stateMutability": "nonpayable",
"type": "function"
},
{
@@ -486,7 +460,6 @@
"name": "executeTransaction",
"outputs": [],
"payable": false,
- "stateMutability": "nonpayable",
"type": "function"
},
{
@@ -509,12 +482,10 @@
}
],
"payable": false,
- "stateMutability": "nonpayable",
"type": "constructor"
},
{
"payable": true,
- "stateMutability": "payable",
"type": "fallback"
},
{
@@ -687,45 +658,43798 @@
"type": "event"
}
],
+ "metadata": "{\"compiler\":{\"version\":\"0.4.10+commit.f0d539ae\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"owners\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"removeOwner\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"transactionId\",\"type\":\"uint256\"}],\"name\":\"revokeConfirmation\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"isOwner\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"address\"}],\"name\":\"confirmations\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"transactionId\",\"type\":\"uint256\"}],\"name\":\"executeRemoveAuthorizedAddressAtIndex\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"secondsTimeLocked\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"pending\",\"type\":\"bool\"},{\"name\":\"executed\",\"type\":\"bool\"}],\"name\":\"getTransactionCount\",\"outputs\":[{\"name\":\"count\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"assetProxyContract\",\"type\":\"address\"},{\"name\":\"isRegistered\",\"type\":\"bool\"}],\"name\":\"registerAssetProxy\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"addOwner\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"transactionId\",\"type\":\"uint256\"}],\"name\":\"isConfirmed\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_secondsTimeLocked\",\"type\":\"uint256\"}],\"name\":\"changeTimeLock\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"isAssetProxyRegistered\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"transactionId\",\"type\":\"uint256\"}],\"name\":\"getConfirmationCount\",\"outputs\":[{\"name\":\"count\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"transactions\",\"outputs\":[{\"name\":\"destination\",\"type\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\"},{\"name\":\"executed\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getOwners\",\"outputs\":[{\"name\":\"\",\"type\":\"address[]\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"from\",\"type\":\"uint256\"},{\"name\":\"to\",\"type\":\"uint256\"},{\"name\":\"pending\",\"type\":\"bool\"},{\"name\":\"executed\",\"type\":\"bool\"}],\"name\":\"getTransactionIds\",\"outputs\":[{\"name\":\"_transactionIds\",\"type\":\"uint256[]\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"transactionId\",\"type\":\"uint256\"}],\"name\":\"getConfirmations\",\"outputs\":[{\"name\":\"_confirmations\",\"type\":\"address[]\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"transactionCount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_required\",\"type\":\"uint256\"}],\"name\":\"changeRequirement\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"transactionId\",\"type\":\"uint256\"}],\"name\":\"confirmTransaction\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"destination\",\"type\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"submitTransaction\",\"outputs\":[{\"name\":\"transactionId\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"confirmationTimes\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MAX_OWNER_COUNT\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"required\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"replaceOwner\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"transactionId\",\"type\":\"uint256\"}],\"name\":\"executeTransaction\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"inputs\":[{\"name\":\"_owners\",\"type\":\"address[]\"},{\"name\":\"_assetProxyContracts\",\"type\":\"address[]\"},{\"name\":\"_required\",\"type\":\"uint256\"},{\"name\":\"_secondsTimeLocked\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"constructor\"},{\"payable\":true,\"type\":\"fallback\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"assetProxyContract\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"isRegistered\",\"type\":\"bool\"}],\"name\":\"AssetProxyRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"transactionId\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"confirmationTime\",\"type\":\"uint256\"}],\"name\":\"ConfirmationTimeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"secondsTimeLocked\",\"type\":\"uint256\"}],\"name\":\"TimeLockChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"transactionId\",\"type\":\"uint256\"}],\"name\":\"Confirmation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"transactionId\",\"type\":\"uint256\"}],\"name\":\"Revocation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"transactionId\",\"type\":\"uint256\"}],\"name\":\"Submission\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"transactionId\",\"type\":\"uint256\"}],\"name\":\"Execution\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"transactionId\",\"type\":\"uint256\"}],\"name\":\"ExecutionFailure\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnerAddition\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnerRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"required\",\"type\":\"uint256\"}],\"name\":\"RequirementChange\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{\"addOwner(address)\":{\"details\":\"Allows to add a new owner. Transaction has to be sent by wallet.\",\"params\":{\"owner\":\"Address of new owner.\"}},\"changeRequirement(uint256)\":{\"details\":\"Allows to change the number of required confirmations. Transaction has to be sent by wallet.\",\"params\":{\"_required\":\"Number of required confirmations.\"}},\"changeTimeLock(uint256)\":{\"details\":\"Changes the duration of the time lock for transactions.\",\"params\":{\"_secondsTimeLocked\":\"Duration needed after a transaction is confirmed and before it becomes executable, in seconds.\"}},\"confirmTransaction(uint256)\":{\"details\":\"Allows an owner to confirm a transaction.\",\"params\":{\"transactionId\":\"Transaction ID.\"}},\"executeRemoveAuthorizedAddressAtIndex(uint256)\":{\"details\":\"Allows execution of `removeAuthorizedAddressAtIndex` without time lock.\",\"params\":{\"transactionId\":\"Transaction ID.\"}},\"executeTransaction(uint256)\":{\"details\":\"Allows anyone to execute a confirmed transaction.\",\"params\":{\"transactionId\":\"Transaction ID.\"}},\"getConfirmationCount(uint256)\":{\"details\":\"Returns number of confirmations of a transaction.\",\"params\":{\"transactionId\":\"Transaction ID.\"},\"return\":\"Number of confirmations.\"},\"getConfirmations(uint256)\":{\"details\":\"Returns array with owner addresses, which confirmed transaction.\",\"params\":{\"transactionId\":\"Transaction ID.\"},\"return\":\"Returns array of owner addresses.\"},\"getOwners()\":{\"details\":\"Returns list of owners.\",\"return\":\"List of owner addresses.\"},\"getTransactionCount(bool,bool)\":{\"details\":\"Returns total number of transactions after filers are applied.\",\"params\":{\"executed\":\"Include executed transactions.\",\"pending\":\"Include pending transactions.\"},\"return\":\"Total number of transactions after filters are applied.\"},\"getTransactionIds(uint256,uint256,bool,bool)\":{\"details\":\"Returns list of transaction IDs in defined range.\",\"params\":{\"executed\":\"Include executed transactions.\",\"from\":\"Index start position of transaction array.\",\"pending\":\"Include pending transactions.\",\"to\":\"Index end position of transaction array.\"},\"return\":\"Returns array of transaction IDs.\"},\"isConfirmed(uint256)\":{\"details\":\"Returns the confirmation status of a transaction.\",\"params\":{\"transactionId\":\"Transaction ID.\"},\"return\":\"Confirmation status.\"},\"registerAssetProxy(address,bool)\":{\"details\":\"Registers or deregisters an AssetProxy to be able to execute `removeAuthorizedAddressAtIndex` without a timelock.\",\"params\":{\"assetProxyContract\":\"Address of AssetProxy contract.\",\"isRegistered\":\"Status of approval for AssetProxy contract.\"}},\"removeOwner(address)\":{\"details\":\"Allows to remove an owner. Transaction has to be sent by wallet.\",\"params\":{\"owner\":\"Address of owner.\"}},\"replaceOwner(address,address)\":{\"details\":\"Allows to replace an owner with a new owner. Transaction has to be sent by wallet.\",\"params\":{\"owner\":\"Address of new owner.\"}},\"revokeConfirmation(uint256)\":{\"details\":\"Allows an owner to revoke a confirmation for a transaction.\",\"params\":{\"transactionId\":\"Transaction ID.\"}},\"submitTransaction(address,uint256,bytes)\":{\"details\":\"Allows an owner to submit and confirm a transaction.\",\"params\":{\"data\":\"Transaction data payload.\",\"destination\":\"Transaction target address.\",\"value\":\"Transaction ether value.\"},\"return\":\"Returns transaction ID.\"}}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"2.0.0/protocol/AssetProxyOwner/AssetProxyOwner.sol\":\"AssetProxyOwner\"},\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"2.0.0/multisig/MultiSigWallet.sol\":{\"keccak256\":\"0x5ad0f32801e51d60f02235477477b56ff9ccd727d6d2646d7efb84d1ffbd7bff\",\"urls\":[\"bzzr://0ca2767e1cde91f44a40176939eef3a46da233b552520aec19aeb97f4ef6bb00\"]},\"2.0.0/multisig/MultiSigWalletWithTimeLock.sol\":{\"keccak256\":\"0xd90adae0adda1b23bad71a37af6fc78f645204d519b7f4eeadea858241483611\",\"urls\":[\"bzzr://9761abd10cebccfcc948cc04cd7a5ee0a555d67d4510c82ef84422374beb8c8f\"]},\"2.0.0/protocol/AssetProxyOwner/AssetProxyOwner.sol\":{\"keccak256\":\"0x6a77cd3a41d2ff7feab497e257cbc378167ae2d96975957116edf73c203d75d2\",\"urls\":[\"bzzr://b987bce902d5f514cf1d258f490007749a70787bb285805bdb8c613238977e46\"]}},\"version\":1}",
"evm": {
+ "legacyAssembly": {
+ ".code": [
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "60"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "PUSH [tag]",
+ "value": "1"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "INVALID"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "tag",
+ "value": "1"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "PUSHSIZE"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "CODESIZE"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "SUB"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "DUP1"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "PUSHSIZE"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "DUP4"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "CODECOPY"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "DUP2"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "ADD"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "DUP2"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "DUP2"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "DUP4"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "ADD"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "DUP4"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "ADD"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "PUSH",
+ "value": "60"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "DUP5"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "ADD"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "DUP5"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "ADD"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "SWAP4"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "ADD"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "tag",
+ "value": "2"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2381,
+ "end": 2390,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2448,
+ "end": 2466,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2322,
+ "end": 2329,
+ "name": "DUP6"
+ },
+ {
+ "begin": 2331,
+ "end": 2340,
+ "name": "DUP5"
+ },
+ {
+ "begin": 2342,
+ "end": 2360,
+ "name": "DUP5"
+ },
+ {
+ "begin": 1884,
+ "end": 2097,
+ "name": "tag",
+ "value": "3"
+ },
+ {
+ "begin": 1884,
+ "end": 2097,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2018,
+ "end": 2025,
+ "name": "DUP3"
+ },
+ {
+ "begin": 2027,
+ "end": 2036,
+ "name": "DUP3"
+ },
+ {
+ "begin": 2834,
+ "end": 3204,
+ "name": "tag",
+ "value": "4"
+ },
+ {
+ "begin": 2834,
+ "end": 3204,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2979,
+ "end": 2985,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2933,
+ "end": 2940,
+ "name": "DUP3"
+ },
+ {
+ "begin": 2933,
+ "end": 2947,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 2949,
+ "end": 2958,
+ "name": "DUP3"
+ },
+ {
+ "begin": 276,
+ "end": 278,
+ "name": "PUSH",
+ "value": "32"
+ },
+ {
+ "begin": 2256,
+ "end": 2266,
+ "name": "DUP3"
+ },
+ {
+ "begin": 2256,
+ "end": 2284,
+ "name": "GT"
+ },
+ {
+ "begin": 2256,
+ "end": 2322,
+ "name": "DUP1"
+ },
+ {
+ "begin": 2256,
+ "end": 2322,
+ "name": "PUSH [tag]",
+ "value": "6"
+ },
+ {
+ "begin": 2256,
+ "end": 2322,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 2256,
+ "end": 2322,
+ "name": "POP"
+ },
+ {
+ "begin": 2312,
+ "end": 2322,
+ "name": "DUP2"
+ },
+ {
+ "begin": 2300,
+ "end": 2309,
+ "name": "DUP2"
+ },
+ {
+ "begin": 2300,
+ "end": 2322,
+ "name": "GT"
+ },
+ {
+ "begin": 2256,
+ "end": 2322,
+ "name": "tag",
+ "value": "6"
+ },
+ {
+ "begin": 2256,
+ "end": 2322,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2256,
+ "end": 2352,
+ "name": "DUP1"
+ },
+ {
+ "begin": 2256,
+ "end": 2352,
+ "name": "PUSH [tag]",
+ "value": "7"
+ },
+ {
+ "begin": 2256,
+ "end": 2352,
+ "name": "JUMPI"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 2338,
+ "end": 2352,
+ "name": "DUP1"
+ },
+ {
+ "begin": 2338,
+ "end": 2352,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2256,
+ "end": 2352,
+ "name": "tag",
+ "value": "7"
+ },
+ {
+ "begin": 2256,
+ "end": 2352,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2256,
+ "end": 2383,
+ "name": "DUP1"
+ },
+ {
+ "begin": 2256,
+ "end": 2383,
+ "name": "PUSH [tag]",
+ "value": "8"
+ },
+ {
+ "begin": 2256,
+ "end": 2383,
+ "name": "JUMPI"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 2368,
+ "end": 2383,
+ "name": "DUP2"
+ },
+ {
+ "begin": 2368,
+ "end": 2383,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2256,
+ "end": 2383,
+ "name": "tag",
+ "value": "8"
+ },
+ {
+ "begin": 2256,
+ "end": 2383,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2249,
+ "end": 2402,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2249,
+ "end": 2402,
+ "name": "PUSH [tag]",
+ "value": "9"
+ },
+ {
+ "begin": 2249,
+ "end": 2402,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 2397,
+ "end": 2402,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2397,
+ "end": 2402,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2397,
+ "end": 2402,
+ "name": "REVERT"
+ },
+ {
+ "begin": 2249,
+ "end": 2402,
+ "name": "tag",
+ "value": "9"
+ },
+ {
+ "begin": 2249,
+ "end": 2402,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2986,
+ "end": 2987,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2979,
+ "end": 2987,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 2979,
+ "end": 2987,
+ "name": "POP"
+ },
+ {
+ "begin": 2974,
+ "end": 3142,
+ "name": "tag",
+ "value": "11"
+ },
+ {
+ "begin": 2974,
+ "end": 3142,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2991,
+ "end": 2998,
+ "name": "DUP5"
+ },
+ {
+ "begin": 2991,
+ "end": 3005,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 2989,
+ "end": 2990,
+ "name": "DUP4"
+ },
+ {
+ "begin": 2989,
+ "end": 3005,
+ "name": "LT"
+ },
+ {
+ "begin": 2974,
+ "end": 3142,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2974,
+ "end": 3142,
+ "name": "PUSH [tag]",
+ "value": "12"
+ },
+ {
+ "begin": 2974,
+ "end": 3142,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 3030,
+ "end": 3037,
+ "name": "PUSH",
+ "value": "2"
+ },
+ {
+ "begin": 3030,
+ "end": 3049,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3038,
+ "end": 3045,
+ "name": "DUP7"
+ },
+ {
+ "begin": 3046,
+ "end": 3047,
+ "name": "DUP6"
+ },
+ {
+ "begin": 3038,
+ "end": 3048,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3038,
+ "end": 3048,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 3038,
+ "end": 3048,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3038,
+ "end": 3048,
+ "name": "LT"
+ },
+ {
+ "begin": 3038,
+ "end": 3048,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3038,
+ "end": 3048,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3038,
+ "end": 3048,
+ "name": "PUSH [tag]",
+ "value": "14"
+ },
+ {
+ "begin": 3038,
+ "end": 3048,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 3038,
+ "end": 3048,
+ "name": "INVALID"
+ },
+ {
+ "begin": 3038,
+ "end": 3048,
+ "name": "tag",
+ "value": "14"
+ },
+ {
+ "begin": 3038,
+ "end": 3048,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3038,
+ "end": 3048,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 3038,
+ "end": 3048,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3038,
+ "end": 3048,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3038,
+ "end": 3048,
+ "name": "MUL"
+ },
+ {
+ "begin": 3038,
+ "end": 3048,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3038,
+ "end": 3048,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3038,
+ "end": 3048,
+ "name": "ADD"
+ },
+ {
+ "begin": 3038,
+ "end": 3048,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3038,
+ "end": 3048,
+ "name": "ADD"
+ },
+ {
+ "begin": 3038,
+ "end": 3048,
+ "name": "MLOAD"
+ },
+ {
+ "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": 3030,
+ "end": 3049,
+ "name": "AND"
+ },
+ {
+ "begin": 3030,
+ "end": 3049,
+ "name": "DUP3"
+ },
+ {
+ "begin": 3030,
+ "end": 3049,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3030,
+ "end": 3049,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3030,
+ "end": 3049,
+ "name": "ADD"
+ },
+ {
+ "begin": 3030,
+ "end": 3049,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3030,
+ "end": 3049,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3030,
+ "end": 3049,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3030,
+ "end": 3049,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3030,
+ "end": 3049,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 3030,
+ "end": 3049,
+ "name": "ADD"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3030,
+ "end": 3049,
+ "name": "SHA3"
+ },
+ {
+ "begin": 3030,
+ "end": 3049,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 3030,
+ "end": 3049,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": 3030,
+ "end": 3049,
+ "name": "AND"
+ },
+ {
+ "begin": 3030,
+ "end": 3049,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3030,
+ "end": 3068,
+ "name": "PUSH [tag]",
+ "value": "15"
+ },
+ {
+ "begin": 3030,
+ "end": 3068,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 3030,
+ "end": 3068,
+ "name": "POP"
+ },
+ {
+ "begin": 3053,
+ "end": 3060,
+ "name": "DUP5"
+ },
+ {
+ "begin": 3061,
+ "end": 3062,
+ "name": "DUP4"
+ },
+ {
+ "begin": 3053,
+ "end": 3063,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3053,
+ "end": 3063,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 3053,
+ "end": 3063,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3053,
+ "end": 3063,
+ "name": "LT"
+ },
+ {
+ "begin": 3053,
+ "end": 3063,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3053,
+ "end": 3063,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3053,
+ "end": 3063,
+ "name": "PUSH [tag]",
+ "value": "16"
+ },
+ {
+ "begin": 3053,
+ "end": 3063,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 3053,
+ "end": 3063,
+ "name": "INVALID"
+ },
+ {
+ "begin": 3053,
+ "end": 3063,
+ "name": "tag",
+ "value": "16"
+ },
+ {
+ "begin": 3053,
+ "end": 3063,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3053,
+ "end": 3063,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3053,
+ "end": 3063,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 3053,
+ "end": 3063,
+ "name": "ADD"
+ },
+ {
+ "begin": 3053,
+ "end": 3063,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3053,
+ "end": 3063,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 3053,
+ "end": 3063,
+ "name": "MUL"
+ },
+ {
+ "begin": 3053,
+ "end": 3063,
+ "name": "ADD"
+ },
+ {
+ "begin": 3053,
+ "end": 3063,
+ "name": "MLOAD"
+ },
+ {
+ "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": 3053,
+ "end": 3068,
+ "name": "AND"
+ },
+ {
+ "begin": 3067,
+ "end": 3068,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3053,
+ "end": 3068,
+ "name": "EQ"
+ },
+ {
+ "begin": 3030,
+ "end": 3068,
+ "name": "tag",
+ "value": "15"
+ },
+ {
+ "begin": 3030,
+ "end": 3068,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3026,
+ "end": 3091,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3026,
+ "end": 3091,
+ "name": "PUSH [tag]",
+ "value": "17"
+ },
+ {
+ "begin": 3026,
+ "end": 3091,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 3086,
+ "end": 3091,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3086,
+ "end": 3091,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3086,
+ "end": 3091,
+ "name": "REVERT"
+ },
+ {
+ "begin": 3026,
+ "end": 3091,
+ "name": "tag",
+ "value": "17"
+ },
+ {
+ "begin": 3026,
+ "end": 3091,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3127,
+ "end": 3131,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 3105,
+ "end": 3112,
+ "name": "PUSH",
+ "value": "2"
+ },
+ {
+ "begin": 3105,
+ "end": 3124,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3113,
+ "end": 3120,
+ "name": "DUP8"
+ },
+ {
+ "begin": 3121,
+ "end": 3122,
+ "name": "DUP7"
+ },
+ {
+ "begin": 3113,
+ "end": 3123,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3113,
+ "end": 3123,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 3113,
+ "end": 3123,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3113,
+ "end": 3123,
+ "name": "LT"
+ },
+ {
+ "begin": 3113,
+ "end": 3123,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3113,
+ "end": 3123,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3113,
+ "end": 3123,
+ "name": "PUSH [tag]",
+ "value": "18"
+ },
+ {
+ "begin": 3113,
+ "end": 3123,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 3113,
+ "end": 3123,
+ "name": "INVALID"
+ },
+ {
+ "begin": 3113,
+ "end": 3123,
+ "name": "tag",
+ "value": "18"
+ },
+ {
+ "begin": 3113,
+ "end": 3123,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3113,
+ "end": 3123,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 3113,
+ "end": 3123,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3113,
+ "end": 3123,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3113,
+ "end": 3123,
+ "name": "MUL"
+ },
+ {
+ "begin": 3113,
+ "end": 3123,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3113,
+ "end": 3123,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3113,
+ "end": 3123,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3113,
+ "end": 3123,
+ "name": "ADD"
+ },
+ {
+ "begin": 3113,
+ "end": 3123,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3113,
+ "end": 3123,
+ "name": "ADD"
+ },
+ {
+ "begin": 3113,
+ "end": 3123,
+ "name": "MLOAD"
+ },
+ {
+ "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": 3105,
+ "end": 3124,
+ "name": "AND"
+ },
+ {
+ "begin": 3105,
+ "end": 3124,
+ "name": "DUP3"
+ },
+ {
+ "begin": 3105,
+ "end": 3124,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3105,
+ "end": 3124,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3105,
+ "end": 3124,
+ "name": "ADD"
+ },
+ {
+ "begin": 3105,
+ "end": 3124,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3105,
+ "end": 3124,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3105,
+ "end": 3124,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3105,
+ "end": 3124,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3105,
+ "end": 3124,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 3105,
+ "end": 3124,
+ "name": "ADD"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3105,
+ "end": 3124,
+ "name": "SHA3"
+ },
+ {
+ "begin": 3105,
+ "end": 3131,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3105,
+ "end": 3131,
+ "name": "SLOAD"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 3105,
+ "end": 3131,
+ "name": "AND"
+ },
+ {
+ "begin": 3105,
+ "end": 3131,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3105,
+ "end": 3131,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3105,
+ "end": 3131,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3105,
+ "end": 3131,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3105,
+ "end": 3131,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3105,
+ "end": 3131,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3105,
+ "end": 3131,
+ "name": "OR"
+ },
+ {
+ "begin": 3105,
+ "end": 3131,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3105,
+ "end": 3131,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 2974,
+ "end": 3142,
+ "name": "tag",
+ "value": "13"
+ },
+ {
+ "begin": 2974,
+ "end": 3142,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3007,
+ "end": 3010,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 3007,
+ "end": 3010,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3007,
+ "end": 3010,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 3007,
+ "end": 3010,
+ "name": "ADD"
+ },
+ {
+ "begin": 3007,
+ "end": 3010,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 2974,
+ "end": 3142,
+ "name": "PUSH [tag]",
+ "value": "11"
+ },
+ {
+ "begin": 2974,
+ "end": 3142,
+ "name": "JUMP"
+ },
+ {
+ "begin": 2974,
+ "end": 3142,
+ "name": "tag",
+ "value": "12"
+ },
+ {
+ "begin": 2974,
+ "end": 3142,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3151,
+ "end": 3167,
+ "name": "DUP5"
+ },
+ {
+ "begin": 3151,
+ "end": 3167,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 3151,
+ "end": 3167,
+ "name": "PUSH [tag]",
+ "value": "19"
+ },
+ {
+ "begin": 3151,
+ "end": 3167,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3151,
+ "end": 3157,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 3151,
+ "end": 3157,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3151,
+ "end": 3167,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 3151,
+ "end": 3167,
+ "name": "DUP9"
+ },
+ {
+ "begin": 3151,
+ "end": 3167,
+ "name": "ADD"
+ },
+ {
+ "begin": 3151,
+ "end": 3167,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3151,
+ "end": 3167,
+ "name": "PUSH [tag]",
+ "value": "20"
+ },
+ {
+ "begin": 3151,
+ "end": 3167,
+ "name": "JUMP",
+ "value": "[in]"
+ },
+ {
+ "begin": 3151,
+ "end": 3167,
+ "name": "tag",
+ "value": "19"
+ },
+ {
+ "begin": 3151,
+ "end": 3167,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 3177,
+ "end": 3185,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 3177,
+ "end": 3197,
+ "name": "DUP5"
+ },
+ {
+ "begin": 3177,
+ "end": 3197,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3177,
+ "end": 3197,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 2412,
+ "end": 2413,
+ "name": "tag",
+ "value": "10"
+ },
+ {
+ "begin": 2412,
+ "end": 2413,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2834,
+ "end": 3204,
+ "name": "tag",
+ "value": "5"
+ },
+ {
+ "begin": 2834,
+ "end": 3204,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 2052,
+ "end": 2069,
+ "name": "PUSH",
+ "value": "6"
+ },
+ {
+ "begin": 2052,
+ "end": 2090,
+ "name": "DUP4"
+ },
+ {
+ "begin": 2052,
+ "end": 2090,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 2052,
+ "end": 2090,
+ "name": "SSTORE"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 1884,
+ "end": 2097,
+ "name": "tag",
+ "value": "21"
+ },
+ {
+ "begin": 1884,
+ "end": 2097,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1884,
+ "end": 2097,
+ "name": "POP"
+ },
+ {
+ "begin": 1884,
+ "end": 2097,
+ "name": "POP"
+ },
+ {
+ "begin": 1884,
+ "end": 2097,
+ "name": "POP"
+ },
+ {
+ "begin": 2393,
+ "end": 2394,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2381,
+ "end": 2394,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 2381,
+ "end": 2394,
+ "name": "POP"
+ },
+ {
+ "begin": 2376,
+ "end": 2605,
+ "name": "tag",
+ "value": "23"
+ },
+ {
+ "begin": 2376,
+ "end": 2605,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2400,
+ "end": 2420,
+ "name": "DUP5"
+ },
+ {
+ "begin": 2400,
+ "end": 2427,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 2396,
+ "end": 2397,
+ "name": "DUP3"
+ },
+ {
+ "begin": 2396,
+ "end": 2427,
+ "name": "LT"
+ },
+ {
+ "begin": 2376,
+ "end": 2605,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2376,
+ "end": 2605,
+ "name": "PUSH [tag]",
+ "value": "24"
+ },
+ {
+ "begin": 2376,
+ "end": 2605,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 2469,
+ "end": 2489,
+ "name": "DUP5"
+ },
+ {
+ "begin": 2490,
+ "end": 2491,
+ "name": "DUP3"
+ },
+ {
+ "begin": 2469,
+ "end": 2492,
+ "name": "DUP2"
+ },
+ {
+ "begin": 2469,
+ "end": 2492,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 2469,
+ "end": 2492,
+ "name": "DUP2"
+ },
+ {
+ "begin": 2469,
+ "end": 2492,
+ "name": "LT"
+ },
+ {
+ "begin": 2469,
+ "end": 2492,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2469,
+ "end": 2492,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2469,
+ "end": 2492,
+ "name": "PUSH [tag]",
+ "value": "26"
+ },
+ {
+ "begin": 2469,
+ "end": 2492,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 2469,
+ "end": 2492,
+ "name": "INVALID"
+ },
+ {
+ "begin": 2469,
+ "end": 2492,
+ "name": "tag",
+ "value": "26"
+ },
+ {
+ "begin": 2469,
+ "end": 2492,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2469,
+ "end": 2492,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 2469,
+ "end": 2492,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 2469,
+ "end": 2492,
+ "name": "DUP2"
+ },
+ {
+ "begin": 2469,
+ "end": 2492,
+ "name": "MUL"
+ },
+ {
+ "begin": 2469,
+ "end": 2492,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 2469,
+ "end": 2492,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 2469,
+ "end": 2492,
+ "name": "ADD"
+ },
+ {
+ "begin": 2469,
+ "end": 2492,
+ "name": "ADD"
+ },
+ {
+ "begin": 2469,
+ "end": 2492,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 2469,
+ "end": 2492,
+ "name": "SWAP1"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "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": 2514,
+ "end": 2538,
+ "name": "DUP2"
+ },
+ {
+ "begin": 2514,
+ "end": 2538,
+ "name": "AND"
+ },
+ {
+ "begin": 2514,
+ "end": 2538,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2514,
+ "end": 2538,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2506,
+ "end": 2539,
+ "name": "PUSH [tag]",
+ "value": "27"
+ },
+ {
+ "begin": 2506,
+ "end": 2539,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 2506,
+ "end": 2539,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2506,
+ "end": 2539,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2506,
+ "end": 2539,
+ "name": "REVERT"
+ },
+ {
+ "begin": 2506,
+ "end": 2539,
+ "name": "tag",
+ "value": "27"
+ },
+ {
+ "begin": 2506,
+ "end": 2539,
+ "name": "JUMPDEST"
+ },
+ {
+ "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": 2553,
+ "end": 2587,
+ "name": "DUP2"
+ },
+ {
+ "begin": 2553,
+ "end": 2587,
+ "name": "AND"
+ },
+ {
+ "begin": 2553,
+ "end": 2587,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2553,
+ "end": 2587,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 2553,
+ "end": 2587,
+ "name": "DUP2"
+ },
+ {
+ "begin": 2553,
+ "end": 2587,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 2553,
+ "end": 2575,
+ "name": "PUSH",
+ "value": "8"
+ },
+ {
+ "begin": 2553,
+ "end": 2587,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 2553,
+ "end": 2587,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 2553,
+ "end": 2587,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 2553,
+ "end": 2587,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 2553,
+ "end": 2587,
+ "name": "SHA3"
+ },
+ {
+ "begin": 2553,
+ "end": 2594,
+ "name": "DUP1"
+ },
+ {
+ "begin": 2553,
+ "end": 2594,
+ "name": "SLOAD"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 2553,
+ "end": 2594,
+ "name": "AND"
+ },
+ {
+ "begin": 2590,
+ "end": 2594,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 2553,
+ "end": 2594,
+ "name": "OR"
+ },
+ {
+ "begin": 2553,
+ "end": 2594,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 2553,
+ "end": 2594,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 2376,
+ "end": 2605,
+ "name": "tag",
+ "value": "25"
+ },
+ {
+ "begin": 2376,
+ "end": 2605,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2429,
+ "end": 2432,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 2429,
+ "end": 2432,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 2429,
+ "end": 2432,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 2429,
+ "end": 2432,
+ "name": "ADD"
+ },
+ {
+ "begin": 2429,
+ "end": 2432,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 2376,
+ "end": 2605,
+ "name": "PUSH [tag]",
+ "value": "23"
+ },
+ {
+ "begin": 2376,
+ "end": 2605,
+ "name": "JUMP"
+ },
+ {
+ "begin": 2376,
+ "end": 2605,
+ "name": "tag",
+ "value": "24"
+ },
+ {
+ "begin": 2376,
+ "end": 2605,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "tag",
+ "value": "22"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "POP"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "POP"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "POP"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "POP"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "POP"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "POP"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH [tag]",
+ "value": "28"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMP"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "tag",
+ "value": "20"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP3"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP3"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP3"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SHA3"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP2"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "ADD"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP3"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH [tag]",
+ "value": "31"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "MUL"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP3"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "ADD"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "tag",
+ "value": "30"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP3"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP2"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "GT"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH [tag]",
+ "value": "31"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP3"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP3"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "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": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "AND"
+ },
+ {
+ "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": 663,
+ "end": 4608,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "AND"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "OR"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP3"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "ADD"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SWAP2"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "ADD"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH [tag]",
+ "value": "30"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMP"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "tag",
+ "value": "31"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "tag",
+ "value": "29"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH [tag]",
+ "value": "32"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SWAP2"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH [tag]",
+ "value": "33"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMP",
+ "value": "[in]"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "tag",
+ "value": "32"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "POP"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "tag",
+ "value": "33"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH [tag]",
+ "value": "34"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "tag",
+ "value": "35"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP3"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "GT"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH [tag]",
+ "value": "32"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "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": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "AND"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP2"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "ADD"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH [tag]",
+ "value": "35"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMP"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "tag",
+ "value": "36"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "POP"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMP"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "tag",
+ "value": "34"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "tag",
+ "value": "28"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH #[$]",
+ "value": "0000000000000000000000000000000000000000000000000000000000000000"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH [$]",
+ "value": "0000000000000000000000000000000000000000000000000000000000000000"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "CODECOPY"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "RETURN"
+ }
+ ],
+ ".data": {
+ "0": {
+ ".code": [
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "60"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "CALLDATASIZE"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH [tag]",
+ "value": "1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "FFFFFFFF"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "E0"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "2"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "EXP"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DIV"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "AND"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "25E7C27"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP2"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "EQ"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH [tag]",
+ "value": "2"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "173825D9"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "EQ"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH [tag]",
+ "value": "3"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "20EA8D86"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "EQ"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH [tag]",
+ "value": "4"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "2F54BF6E"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "EQ"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH [tag]",
+ "value": "5"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "3411C81C"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "EQ"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH [tag]",
+ "value": "6"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "3589B35C"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "EQ"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH [tag]",
+ "value": "7"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "37BD78A0"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "EQ"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH [tag]",
+ "value": "8"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "54741525"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "EQ"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH [tag]",
+ "value": "9"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "5A1A66AF"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "EQ"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH [tag]",
+ "value": "10"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "7065CB48"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "EQ"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH [tag]",
+ "value": "11"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "784547A7"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "EQ"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH [tag]",
+ "value": "12"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "7AD28C51"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "EQ"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH [tag]",
+ "value": "13"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "83250F79"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "EQ"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH [tag]",
+ "value": "14"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "8B51D13F"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "EQ"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH [tag]",
+ "value": "15"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "9ACE38C2"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "EQ"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH [tag]",
+ "value": "16"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "A0E67E2B"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "EQ"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH [tag]",
+ "value": "17"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "A8ABE69A"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "EQ"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH [tag]",
+ "value": "18"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "B5DC40C3"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "EQ"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH [tag]",
+ "value": "19"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "B77BF600"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "EQ"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH [tag]",
+ "value": "20"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "BA51A6DF"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "EQ"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH [tag]",
+ "value": "21"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "C01A8C84"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "EQ"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH [tag]",
+ "value": "22"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "C6427474"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "EQ"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH [tag]",
+ "value": "23"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "D38F2D82"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "EQ"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH [tag]",
+ "value": "24"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "D74F8EDD"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "EQ"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH [tag]",
+ "value": "25"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "DC8452CD"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "EQ"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH [tag]",
+ "value": "26"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "E20056E6"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "EQ"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH [tag]",
+ "value": "27"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "EE22610B"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "EQ"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH [tag]",
+ "value": "28"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "tag",
+ "value": "1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH [tag]",
+ "value": "29"
+ },
+ {
+ "begin": 2482,
+ "end": 2591,
+ "name": "tag",
+ "value": "30"
+ },
+ {
+ "begin": 2482,
+ "end": 2591,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2539,
+ "end": 2540,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2527,
+ "end": 2536,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 2527,
+ "end": 2540,
+ "name": "GT"
+ },
+ {
+ "begin": 2523,
+ "end": 2584,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2523,
+ "end": 2584,
+ "name": "PUSH [tag]",
+ "value": "32"
+ },
+ {
+ "begin": 2523,
+ "end": 2584,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 2554,
+ "end": 2584,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 2554,
+ "end": 2584,
+ "name": "DUP1"
+ },
+ {
+ "begin": 2554,
+ "end": 2584,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 2574,
+ "end": 2583,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 2554,
+ "end": 2584,
+ "name": "DUP2"
+ },
+ {
+ "begin": 2554,
+ "end": 2584,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 2554,
+ "end": 2584,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 2554,
+ "end": 2584,
+ "name": "MLOAD"
+ },
+ {
+ "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": 2562,
+ "end": 2572,
+ "name": "CALLER"
+ },
+ {
+ "begin": 2554,
+ "end": 2584,
+ "name": "AND"
+ },
+ {
+ "begin": 2554,
+ "end": 2584,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 2554,
+ "end": 2584,
+ "name": "PUSH",
+ "value": "E1FFFCC4923D04B559F4D29A8BFC6CDA04EB5B0D3C460751C2402C5C5CC9109C"
+ },
+ {
+ "begin": 2554,
+ "end": 2584,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 2554,
+ "end": 2584,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 2554,
+ "end": 2584,
+ "name": "DUP2"
+ },
+ {
+ "begin": 2554,
+ "end": 2584,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 2554,
+ "end": 2584,
+ "name": "SUB"
+ },
+ {
+ "begin": 2554,
+ "end": 2584,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 2554,
+ "end": 2584,
+ "name": "ADD"
+ },
+ {
+ "begin": 2554,
+ "end": 2584,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 2554,
+ "end": 2584,
+ "name": "LOG2"
+ },
+ {
+ "begin": 2523,
+ "end": 2584,
+ "name": "tag",
+ "value": "32"
+ },
+ {
+ "begin": 2523,
+ "end": 2584,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2482,
+ "end": 2591,
+ "name": "tag",
+ "value": "31"
+ },
+ {
+ "begin": 2482,
+ "end": 2591,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2482,
+ "end": 2591,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "tag",
+ "value": "29"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "STOP"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "tag",
+ "value": "2"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "PUSH [tag]",
+ "value": "33"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "INVALID"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "tag",
+ "value": "33"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "PUSH [tag]",
+ "value": "34"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "PUSH [tag]",
+ "value": "35"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "JUMP"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "tag",
+ "value": "34"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "DUP1"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "MLOAD"
+ },
+ {
+ "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": 956,
+ "end": 979,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "AND"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "DUP3"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "DUP2"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "SUB"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "ADD"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "RETURN"
+ },
+ {
+ "begin": 3731,
+ "end": 4191,
+ "name": "tag",
+ "value": "3"
+ },
+ {
+ "begin": 3731,
+ "end": 4191,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3731,
+ "end": 4191,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 3731,
+ "end": 4191,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3731,
+ "end": 4191,
+ "name": "PUSH [tag]",
+ "value": "36"
+ },
+ {
+ "begin": 3731,
+ "end": 4191,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 3731,
+ "end": 4191,
+ "name": "INVALID"
+ },
+ {
+ "begin": 3731,
+ "end": 4191,
+ "name": "tag",
+ "value": "36"
+ },
+ {
+ "begin": 3731,
+ "end": 4191,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3731,
+ "end": 4191,
+ "name": "PUSH [tag]",
+ "value": "29"
+ },
+ {
+ "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": 3731,
+ "end": 4191,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 3731,
+ "end": 4191,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 3731,
+ "end": 4191,
+ "name": "AND"
+ },
+ {
+ "begin": 3731,
+ "end": 4191,
+ "name": "PUSH [tag]",
+ "value": "38"
+ },
+ {
+ "begin": 3731,
+ "end": 4191,
+ "name": "JUMP"
+ },
+ {
+ "begin": 3731,
+ "end": 4191,
+ "name": "tag",
+ "value": "37"
+ },
+ {
+ "begin": 3731,
+ "end": 4191,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3731,
+ "end": 4191,
+ "name": "STOP"
+ },
+ {
+ "begin": 3176,
+ "end": 3508,
+ "name": "tag",
+ "value": "4"
+ },
+ {
+ "begin": 3176,
+ "end": 3508,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3176,
+ "end": 3508,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 3176,
+ "end": 3508,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3176,
+ "end": 3508,
+ "name": "PUSH [tag]",
+ "value": "39"
+ },
+ {
+ "begin": 3176,
+ "end": 3508,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 3176,
+ "end": 3508,
+ "name": "INVALID"
+ },
+ {
+ "begin": 3176,
+ "end": 3508,
+ "name": "tag",
+ "value": "39"
+ },
+ {
+ "begin": 3176,
+ "end": 3508,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3176,
+ "end": 3508,
+ "name": "PUSH [tag]",
+ "value": "29"
+ },
+ {
+ "begin": 3176,
+ "end": 3508,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 3176,
+ "end": 3508,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 3176,
+ "end": 3508,
+ "name": "PUSH [tag]",
+ "value": "41"
+ },
+ {
+ "begin": 3176,
+ "end": 3508,
+ "name": "JUMP"
+ },
+ {
+ "begin": 3176,
+ "end": 3508,
+ "name": "tag",
+ "value": "40"
+ },
+ {
+ "begin": 3176,
+ "end": 3508,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3176,
+ "end": 3508,
+ "name": "STOP"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "tag",
+ "value": "5"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "PUSH [tag]",
+ "value": "42"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "INVALID"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "tag",
+ "value": "42"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "PUSH [tag]",
+ "value": "43"
+ },
+ {
+ "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": 910,
+ "end": 950,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "AND"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "PUSH [tag]",
+ "value": "44"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "JUMP"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "tag",
+ "value": "43"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "DUP1"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "DUP3"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "DUP2"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "SUB"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "ADD"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "RETURN"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "tag",
+ "value": "6"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "PUSH [tag]",
+ "value": "45"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "INVALID"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "tag",
+ "value": "45"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "PUSH [tag]",
+ "value": "43"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "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": 840,
+ "end": 904,
+ "name": "PUSH",
+ "value": "24"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "AND"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "PUSH [tag]",
+ "value": "47"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "JUMP"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "tag",
+ "value": "46"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "DUP1"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "DUP3"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "DUP2"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "SUB"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "ADD"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "RETURN"
+ },
+ {
+ "begin": 3320,
+ "end": 3893,
+ "name": "tag",
+ "value": "7"
+ },
+ {
+ "begin": 3320,
+ "end": 3893,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3320,
+ "end": 3893,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 3320,
+ "end": 3893,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3320,
+ "end": 3893,
+ "name": "PUSH [tag]",
+ "value": "48"
+ },
+ {
+ "begin": 3320,
+ "end": 3893,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 3320,
+ "end": 3893,
+ "name": "INVALID"
+ },
+ {
+ "begin": 3320,
+ "end": 3893,
+ "name": "tag",
+ "value": "48"
+ },
+ {
+ "begin": 3320,
+ "end": 3893,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3320,
+ "end": 3893,
+ "name": "PUSH [tag]",
+ "value": "29"
+ },
+ {
+ "begin": 3320,
+ "end": 3893,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 3320,
+ "end": 3893,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 3320,
+ "end": 3893,
+ "name": "PUSH [tag]",
+ "value": "50"
+ },
+ {
+ "begin": 3320,
+ "end": 3893,
+ "name": "JUMP"
+ },
+ {
+ "begin": 3320,
+ "end": 3893,
+ "name": "tag",
+ "value": "49"
+ },
+ {
+ "begin": 3320,
+ "end": 3893,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3320,
+ "end": 3893,
+ "name": "STOP"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "tag",
+ "value": "8"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "PUSH [tag]",
+ "value": "51"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "INVALID"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "tag",
+ "value": "51"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "PUSH [tag]",
+ "value": "52"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "PUSH [tag]",
+ "value": "53"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "JUMP"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "tag",
+ "value": "52"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "DUP3"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "SUB"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "ADD"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "RETURN"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "tag",
+ "value": "9"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "PUSH [tag]",
+ "value": "54"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "INVALID"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "tag",
+ "value": "54"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "PUSH [tag]",
+ "value": "52"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "PUSH",
+ "value": "24"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "PUSH [tag]",
+ "value": "56"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "JUMP"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "tag",
+ "value": "55"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "DUP1"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "DUP3"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "DUP2"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "SUB"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "ADD"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "RETURN"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "tag",
+ "value": "10"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "PUSH [tag]",
+ "value": "57"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "INVALID"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "tag",
+ "value": "57"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "PUSH [tag]",
+ "value": "29"
+ },
+ {
+ "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": 2895,
+ "end": 3184,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "AND"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "PUSH",
+ "value": "24"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "PUSH [tag]",
+ "value": "59"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "JUMP"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "tag",
+ "value": "58"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "STOP"
+ },
+ {
+ "begin": 3331,
+ "end": 3608,
+ "name": "tag",
+ "value": "11"
+ },
+ {
+ "begin": 3331,
+ "end": 3608,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3331,
+ "end": 3608,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 3331,
+ "end": 3608,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3331,
+ "end": 3608,
+ "name": "PUSH [tag]",
+ "value": "60"
+ },
+ {
+ "begin": 3331,
+ "end": 3608,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 3331,
+ "end": 3608,
+ "name": "INVALID"
+ },
+ {
+ "begin": 3331,
+ "end": 3608,
+ "name": "tag",
+ "value": "60"
+ },
+ {
+ "begin": 3331,
+ "end": 3608,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3331,
+ "end": 3608,
+ "name": "PUSH [tag]",
+ "value": "29"
+ },
+ {
+ "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": 3331,
+ "end": 3608,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 3331,
+ "end": 3608,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 3331,
+ "end": 3608,
+ "name": "AND"
+ },
+ {
+ "begin": 3331,
+ "end": 3608,
+ "name": "PUSH [tag]",
+ "value": "62"
+ },
+ {
+ "begin": 3331,
+ "end": 3608,
+ "name": "JUMP"
+ },
+ {
+ "begin": 3331,
+ "end": 3608,
+ "name": "tag",
+ "value": "61"
+ },
+ {
+ "begin": 3331,
+ "end": 3608,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3331,
+ "end": 3608,
+ "name": "STOP"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "tag",
+ "value": "12"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "PUSH [tag]",
+ "value": "63"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "INVALID"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "tag",
+ "value": "63"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "PUSH [tag]",
+ "value": "43"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "PUSH [tag]",
+ "value": "65"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "JUMP"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "tag",
+ "value": "64"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "DUP1"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "DUP3"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "DUP2"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "SUB"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "ADD"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "RETURN"
+ },
+ {
+ "begin": 2301,
+ "end": 2487,
+ "name": "tag",
+ "value": "13"
+ },
+ {
+ "begin": 2301,
+ "end": 2487,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2301,
+ "end": 2487,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 2301,
+ "end": 2487,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2301,
+ "end": 2487,
+ "name": "PUSH [tag]",
+ "value": "66"
+ },
+ {
+ "begin": 2301,
+ "end": 2487,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 2301,
+ "end": 2487,
+ "name": "INVALID"
+ },
+ {
+ "begin": 2301,
+ "end": 2487,
+ "name": "tag",
+ "value": "66"
+ },
+ {
+ "begin": 2301,
+ "end": 2487,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2301,
+ "end": 2487,
+ "name": "PUSH [tag]",
+ "value": "29"
+ },
+ {
+ "begin": 2301,
+ "end": 2487,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 2301,
+ "end": 2487,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 2301,
+ "end": 2487,
+ "name": "PUSH [tag]",
+ "value": "68"
+ },
+ {
+ "begin": 2301,
+ "end": 2487,
+ "name": "JUMP"
+ },
+ {
+ "begin": 2301,
+ "end": 2487,
+ "name": "tag",
+ "value": "67"
+ },
+ {
+ "begin": 2301,
+ "end": 2487,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2301,
+ "end": 2487,
+ "name": "STOP"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "tag",
+ "value": "14"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "PUSH [tag]",
+ "value": "69"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "INVALID"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "tag",
+ "value": "69"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "PUSH [tag]",
+ "value": "43"
+ },
+ {
+ "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": 981,
+ "end": 1036,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "AND"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "PUSH [tag]",
+ "value": "71"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "JUMP"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "tag",
+ "value": "70"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "DUP1"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "DUP3"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "DUP2"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "SUB"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "ADD"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "RETURN"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "tag",
+ "value": "15"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "PUSH [tag]",
+ "value": "72"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "INVALID"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "tag",
+ "value": "72"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "PUSH [tag]",
+ "value": "52"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "PUSH [tag]",
+ "value": "74"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "JUMP"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "tag",
+ "value": "73"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "DUP1"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "DUP3"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "DUP2"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "SUB"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "ADD"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "RETURN"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "tag",
+ "value": "16"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH [tag]",
+ "value": "75"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "INVALID"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "tag",
+ "value": "75"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH [tag]",
+ "value": "76"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH [tag]",
+ "value": "77"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "JUMP"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "tag",
+ "value": "76"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "MLOAD"
+ },
+ {
+ "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": 785,
+ "end": 834,
+ "name": "DUP7"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "AND"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP2"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP2"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "ADD"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP6"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP3"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH",
+ "value": "60"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP3"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "ADD"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH",
+ "value": "80"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP2"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "ADD"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP3"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP2"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP5"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH",
+ "value": "2"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH",
+ "value": "100"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP5"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "AND"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "MUL"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "ADD"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "AND"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DIV"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP3"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "ADD"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP4"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH",
+ "value": "A0"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP4"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "ADD"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP6"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH [tag]",
+ "value": "78"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH",
+ "value": "1F"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "LT"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH [tag]",
+ "value": "79"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH",
+ "value": "100"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP4"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DIV"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "MUL"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP4"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "ADD"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH [tag]",
+ "value": "78"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "JUMP"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "tag",
+ "value": "79"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP3"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "ADD"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SHA3"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "tag",
+ "value": "80"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP2"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP2"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "ADD"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "ADD"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP4"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "GT"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH [tag]",
+ "value": "80"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP3"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SUB"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH",
+ "value": "1F"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "AND"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP3"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "ADD"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "tag",
+ "value": "78"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "POP"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "POP"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP6"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "POP"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "POP"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "POP"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "POP"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "POP"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "POP"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SUB"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "RETURN"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "tag",
+ "value": "17"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "PUSH [tag]",
+ "value": "81"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "INVALID"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "tag",
+ "value": "81"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "PUSH [tag]",
+ "value": "82"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "PUSH [tag]",
+ "value": "83"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "JUMP"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "tag",
+ "value": "82"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "DUP1"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "DUP1"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "DUP3"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "DUP4"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "DUP2"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "DUP4"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "ADD"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "DUP4"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "DUP4"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "DUP4"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "ADD"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "DUP6"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "DUP2"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "ADD"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "MUL"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "DUP1"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "DUP4"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "DUP4"
+ },
+ {
+ "begin": 18,
+ "end": 20,
+ "name": "DUP3"
+ },
+ {
+ "begin": 18,
+ "end": 20,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 13,
+ "end": 16,
+ "name": "PUSH [tag]",
+ "value": "84"
+ },
+ {
+ "begin": 7,
+ "end": 12,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 32,
+ "end": 37,
+ "name": "tag",
+ "value": "85"
+ },
+ {
+ "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": "84"
+ },
+ {
+ "begin": 67,
+ "end": 72,
+ "name": "JUMPI"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "1F"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "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": "85"
+ },
+ {
+ "begin": 167,
+ "end": 171,
+ "name": "JUMP"
+ },
+ {
+ "begin": 181,
+ "end": 184,
+ "name": "tag",
+ "value": "84"
+ },
+ {
+ "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": "ADD"
+ },
+ {
+ "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": 10777,
+ "end": 11453,
+ "name": "tag",
+ "value": "18"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "PUSH [tag]",
+ "value": "86"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "INVALID"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "tag",
+ "value": "86"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "PUSH [tag]",
+ "value": "82"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "PUSH",
+ "value": "24"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "PUSH",
+ "value": "44"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "PUSH",
+ "value": "64"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "PUSH [tag]",
+ "value": "88"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "JUMP"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "tag",
+ "value": "87"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "DUP1"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "DUP1"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "DUP3"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "DUP4"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "DUP2"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "DUP4"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "ADD"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "DUP4"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "DUP4"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "DUP4"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "ADD"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "DUP6"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "DUP2"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "ADD"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "MUL"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "DUP1"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "DUP4"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "DUP4"
+ },
+ {
+ "begin": 18,
+ "end": 20,
+ "name": "DUP3"
+ },
+ {
+ "begin": 18,
+ "end": 20,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 13,
+ "end": 16,
+ "name": "PUSH [tag]",
+ "value": "84"
+ },
+ {
+ "begin": 7,
+ "end": 12,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 32,
+ "end": 37,
+ "name": "tag",
+ "value": "90"
+ },
+ {
+ "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": "84"
+ },
+ {
+ "begin": 67,
+ "end": 72,
+ "name": "JUMPI"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "1F"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "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": "85"
+ },
+ {
+ "begin": 167,
+ "end": 171,
+ "name": "JUMP"
+ },
+ {
+ "begin": 181,
+ "end": 184,
+ "name": "tag",
+ "value": "89"
+ },
+ {
+ "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": "ADD"
+ },
+ {
+ "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": 9853,
+ "end": 10428,
+ "name": "tag",
+ "value": "19"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "PUSH [tag]",
+ "value": "91"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "INVALID"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "tag",
+ "value": "91"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "PUSH [tag]",
+ "value": "82"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "PUSH [tag]",
+ "value": "93"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "JUMP"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "tag",
+ "value": "92"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "DUP1"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "DUP1"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "DUP3"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "DUP4"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "DUP2"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "DUP4"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "ADD"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "DUP4"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "DUP4"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "DUP4"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "ADD"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "DUP6"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "DUP2"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "ADD"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "MUL"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "DUP1"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "DUP4"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "DUP4"
+ },
+ {
+ "begin": 18,
+ "end": 20,
+ "name": "DUP3"
+ },
+ {
+ "begin": 18,
+ "end": 20,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 13,
+ "end": 16,
+ "name": "PUSH [tag]",
+ "value": "84"
+ },
+ {
+ "begin": 7,
+ "end": 12,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 32,
+ "end": 37,
+ "name": "tag",
+ "value": "95"
+ },
+ {
+ "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": "84"
+ },
+ {
+ "begin": 67,
+ "end": 72,
+ "name": "JUMPI"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "1F"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "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": "85"
+ },
+ {
+ "begin": 167,
+ "end": 171,
+ "name": "JUMP"
+ },
+ {
+ "begin": 181,
+ "end": 184,
+ "name": "tag",
+ "value": "94"
+ },
+ {
+ "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": "ADD"
+ },
+ {
+ "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": 1011,
+ "end": 1039,
+ "name": "tag",
+ "value": "20"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "PUSH [tag]",
+ "value": "96"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "INVALID"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "tag",
+ "value": "96"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "PUSH [tag]",
+ "value": "52"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "PUSH [tag]",
+ "value": "98"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "JUMP"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "tag",
+ "value": "97"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "DUP3"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "SUB"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "ADD"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "RETURN"
+ },
+ {
+ "begin": 5010,
+ "end": 5217,
+ "name": "tag",
+ "value": "21"
+ },
+ {
+ "begin": 5010,
+ "end": 5217,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 5010,
+ "end": 5217,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 5010,
+ "end": 5217,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 5010,
+ "end": 5217,
+ "name": "PUSH [tag]",
+ "value": "99"
+ },
+ {
+ "begin": 5010,
+ "end": 5217,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 5010,
+ "end": 5217,
+ "name": "INVALID"
+ },
+ {
+ "begin": 5010,
+ "end": 5217,
+ "name": "tag",
+ "value": "99"
+ },
+ {
+ "begin": 5010,
+ "end": 5217,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 5010,
+ "end": 5217,
+ "name": "PUSH [tag]",
+ "value": "29"
+ },
+ {
+ "begin": 5010,
+ "end": 5217,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 5010,
+ "end": 5217,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 5010,
+ "end": 5217,
+ "name": "PUSH [tag]",
+ "value": "101"
+ },
+ {
+ "begin": 5010,
+ "end": 5217,
+ "name": "JUMP"
+ },
+ {
+ "begin": 5010,
+ "end": 5217,
+ "name": "tag",
+ "value": "100"
+ },
+ {
+ "begin": 5010,
+ "end": 5217,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 5010,
+ "end": 5217,
+ "name": "STOP"
+ },
+ {
+ "begin": 2593,
+ "end": 3052,
+ "name": "tag",
+ "value": "22"
+ },
+ {
+ "begin": 2593,
+ "end": 3052,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2593,
+ "end": 3052,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 2593,
+ "end": 3052,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2593,
+ "end": 3052,
+ "name": "PUSH [tag]",
+ "value": "102"
+ },
+ {
+ "begin": 2593,
+ "end": 3052,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 2593,
+ "end": 3052,
+ "name": "INVALID"
+ },
+ {
+ "begin": 2593,
+ "end": 3052,
+ "name": "tag",
+ "value": "102"
+ },
+ {
+ "begin": 2593,
+ "end": 3052,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2593,
+ "end": 3052,
+ "name": "PUSH [tag]",
+ "value": "29"
+ },
+ {
+ "begin": 2593,
+ "end": 3052,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 2593,
+ "end": 3052,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 2593,
+ "end": 3052,
+ "name": "PUSH [tag]",
+ "value": "104"
+ },
+ {
+ "begin": 2593,
+ "end": 3052,
+ "name": "JUMP"
+ },
+ {
+ "begin": 2593,
+ "end": 3052,
+ "name": "tag",
+ "value": "103"
+ },
+ {
+ "begin": 2593,
+ "end": 3052,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2593,
+ "end": 3052,
+ "name": "STOP"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "tag",
+ "value": "23"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "PUSH [tag]",
+ "value": "105"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "INVALID"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "tag",
+ "value": "105"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "DUP1"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "PUSH",
+ "value": "44"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "DUP2"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "DUP2"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "ADD"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "PUSH",
+ "value": "1F"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "DUP2"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "ADD"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "DUP5"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "DIV"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "DUP5"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "MUL"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "DUP6"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "ADD"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "DUP5"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "ADD"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "SWAP6"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "DUP5"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "DUP5"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "PUSH [tag]",
+ "value": "52"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "SWAP5"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "DUP3"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "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": 5476,
+ "end": 5720,
+ "name": "AND"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "SWAP5"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "PUSH",
+ "value": "24"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "DUP1"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "SWAP6"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "PUSH",
+ "value": "64"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "SWAP5"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "SWAP4"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "ADD"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "DUP2"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "DUP5"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "ADD"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "DUP4"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "DUP3"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "DUP1"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "DUP3"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "DUP5"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "CALLDATACOPY"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "SWAP5"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "SWAP7"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "PUSH [tag]",
+ "value": "107"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "SWAP6"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "JUMP"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "tag",
+ "value": "106"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "DUP1"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "DUP3"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "DUP2"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "SUB"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "ADD"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "RETURN"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "tag",
+ "value": "24"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "PUSH [tag]",
+ "value": "108"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "INVALID"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "tag",
+ "value": "108"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "PUSH [tag]",
+ "value": "52"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "PUSH [tag]",
+ "value": "110"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "JUMP"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "tag",
+ "value": "109"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "DUP3"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "SUB"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "ADD"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "RETURN"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "tag",
+ "value": "25"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "PUSH [tag]",
+ "value": "111"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "INVALID"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "tag",
+ "value": "111"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "PUSH [tag]",
+ "value": "52"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "PUSH [tag]",
+ "value": "113"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "JUMP"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "tag",
+ "value": "112"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "DUP1"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "DUP3"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "DUP2"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "SUB"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "ADD"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "RETURN"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "tag",
+ "value": "26"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "PUSH [tag]",
+ "value": "114"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "INVALID"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "tag",
+ "value": "114"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "PUSH [tag]",
+ "value": "52"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "PUSH [tag]",
+ "value": "116"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "JUMP"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "tag",
+ "value": "115"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "DUP1"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "DUP3"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "DUP2"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "SUB"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "ADD"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "RETURN"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "tag",
+ "value": "27"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "PUSH [tag]",
+ "value": "117"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "INVALID"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "tag",
+ "value": "117"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "PUSH [tag]",
+ "value": "29"
+ },
+ {
+ "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": 4390,
+ "end": 4839,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "DUP2"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "AND"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "PUSH",
+ "value": "24"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "AND"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "PUSH [tag]",
+ "value": "119"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "JUMP"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "tag",
+ "value": "118"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "STOP"
+ },
+ {
+ "begin": 3622,
+ "end": 4094,
+ "name": "tag",
+ "value": "28"
+ },
+ {
+ "begin": 3622,
+ "end": 4094,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3622,
+ "end": 4094,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 3622,
+ "end": 4094,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3622,
+ "end": 4094,
+ "name": "PUSH [tag]",
+ "value": "120"
+ },
+ {
+ "begin": 3622,
+ "end": 4094,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 3622,
+ "end": 4094,
+ "name": "INVALID"
+ },
+ {
+ "begin": 3622,
+ "end": 4094,
+ "name": "tag",
+ "value": "120"
+ },
+ {
+ "begin": 3622,
+ "end": 4094,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3622,
+ "end": 4094,
+ "name": "PUSH [tag]",
+ "value": "29"
+ },
+ {
+ "begin": 3622,
+ "end": 4094,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 3622,
+ "end": 4094,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 3622,
+ "end": 4094,
+ "name": "PUSH [tag]",
+ "value": "122"
+ },
+ {
+ "begin": 3622,
+ "end": 4094,
+ "name": "JUMP"
+ },
+ {
+ "begin": 3622,
+ "end": 4094,
+ "name": "tag",
+ "value": "121"
+ },
+ {
+ "begin": 3622,
+ "end": 4094,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3622,
+ "end": 4094,
+ "name": "STOP"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "tag",
+ "value": "35"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "DUP1"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "DUP3"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "DUP2"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "LT"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "PUSH [tag]",
+ "value": "123"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "INVALID"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "tag",
+ "value": "123"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "SHA3"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "ADD"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "tag",
+ "value": "124"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "POP"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "PUSH",
+ "value": "100"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "EXP"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "DIV"
+ },
+ {
+ "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": 956,
+ "end": 979,
+ "name": "AND"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "DUP2"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 3731,
+ "end": 4191,
+ "name": "tag",
+ "value": "38"
+ },
+ {
+ "begin": 3731,
+ "end": 4191,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3879,
+ "end": 3885,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1228,
+ "end": 1232,
+ "name": "ADDRESS"
+ },
+ {
+ "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": 1206,
+ "end": 1233,
+ "name": "AND"
+ },
+ {
+ "begin": 1206,
+ "end": 1216,
+ "name": "CALLER"
+ },
+ {
+ "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": 1206,
+ "end": 1233,
+ "name": "AND"
+ },
+ {
+ "begin": 1206,
+ "end": 1233,
+ "name": "EQ"
+ },
+ {
+ "begin": 1206,
+ "end": 1233,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "PUSH [tag]",
+ "value": "126"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1247,
+ "end": 1252,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1247,
+ "end": 1252,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1247,
+ "end": 1252,
+ "name": "REVERT"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "tag",
+ "value": "126"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "JUMPDEST"
+ },
+ {
+ "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": 1440,
+ "end": 1454,
+ "name": "DUP3"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "AND"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1440,
+ "end": 1447,
+ "name": "PUSH",
+ "value": "2"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "SHA3"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 3821,
+ "end": 3826,
+ "name": "DUP3"
+ },
+ {
+ "begin": 3821,
+ "end": 3826,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "AND"
+ },
+ {
+ "begin": 1439,
+ "end": 1454,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1435,
+ "end": 1473,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1435,
+ "end": 1473,
+ "name": "PUSH [tag]",
+ "value": "128"
+ },
+ {
+ "begin": 1435,
+ "end": 1473,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1468,
+ "end": 1473,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1468,
+ "end": 1473,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1468,
+ "end": 1473,
+ "name": "REVERT"
+ },
+ {
+ "begin": 1435,
+ "end": 1473,
+ "name": "tag",
+ "value": "128"
+ },
+ {
+ "begin": 1435,
+ "end": 1473,
+ "name": "JUMPDEST"
+ },
+ {
+ "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": 3842,
+ "end": 3856,
+ "name": "DUP4"
+ },
+ {
+ "begin": 3842,
+ "end": 3856,
+ "name": "AND"
+ },
+ {
+ "begin": 3859,
+ "end": 3864,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3842,
+ "end": 3856,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3842,
+ "end": 3856,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3842,
+ "end": 3856,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3842,
+ "end": 3849,
+ "name": "PUSH",
+ "value": "2"
+ },
+ {
+ "begin": 3842,
+ "end": 3856,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 3842,
+ "end": 3856,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3842,
+ "end": 3856,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 3842,
+ "end": 3856,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3842,
+ "end": 3856,
+ "name": "SHA3"
+ },
+ {
+ "begin": 3842,
+ "end": 3864,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3842,
+ "end": 3864,
+ "name": "SLOAD"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 3842,
+ "end": 3864,
+ "name": "AND"
+ },
+ {
+ "begin": 3842,
+ "end": 3864,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3842,
+ "end": 3864,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 3859,
+ "end": 3864,
+ "name": "SWAP2"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 3874,
+ "end": 4044,
+ "name": "tag",
+ "value": "130"
+ },
+ {
+ "begin": 3874,
+ "end": 4044,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3891,
+ "end": 3897,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 3891,
+ "end": 3904,
+ "name": "SLOAD"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 3891,
+ "end": 3908,
+ "name": "ADD"
+ },
+ {
+ "begin": 3889,
+ "end": 3908,
+ "name": "DUP3"
+ },
+ {
+ "begin": 3889,
+ "end": 3908,
+ "name": "LT"
+ },
+ {
+ "begin": 3874,
+ "end": 4044,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3874,
+ "end": 4044,
+ "name": "PUSH [tag]",
+ "value": "131"
+ },
+ {
+ "begin": 3874,
+ "end": 4044,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 3944,
+ "end": 3949,
+ "name": "DUP3"
+ },
+ {
+ "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": 3931,
+ "end": 3949,
+ "name": "AND"
+ },
+ {
+ "begin": 3931,
+ "end": 3937,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 3938,
+ "end": 3939,
+ "name": "DUP4"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "LT"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "PUSH [tag]",
+ "value": "133"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "INVALID"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "tag",
+ "value": "133"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "SHA3"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "ADD"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "tag",
+ "value": "134"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "PUSH",
+ "value": "100"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "EXP"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "DIV"
+ },
+ {
+ "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": 3931,
+ "end": 3940,
+ "name": "AND"
+ },
+ {
+ "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": 3931,
+ "end": 3949,
+ "name": "AND"
+ },
+ {
+ "begin": 3931,
+ "end": 3949,
+ "name": "EQ"
+ },
+ {
+ "begin": 3927,
+ "end": 4044,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3927,
+ "end": 4044,
+ "name": "PUSH [tag]",
+ "value": "135"
+ },
+ {
+ "begin": 3927,
+ "end": 4044,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 3981,
+ "end": 3987,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 3988,
+ "end": 4001,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3988,
+ "end": 4001,
+ "name": "SLOAD"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 3988,
+ "end": 4005,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3988,
+ "end": 4005,
+ "name": "ADD"
+ },
+ {
+ "begin": 3988,
+ "end": 4005,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3981,
+ "end": 4006,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3981,
+ "end": 4006,
+ "name": "LT"
+ },
+ {
+ "begin": 3981,
+ "end": 4006,
+ "name": "PUSH [tag]",
+ "value": "136"
+ },
+ {
+ "begin": 3981,
+ "end": 4006,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 3981,
+ "end": 4006,
+ "name": "INVALID"
+ },
+ {
+ "begin": 3981,
+ "end": 4006,
+ "name": "tag",
+ "value": "136"
+ },
+ {
+ "begin": 3981,
+ "end": 4006,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3981,
+ "end": 4006,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3981,
+ "end": 4006,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3981,
+ "end": 4006,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3981,
+ "end": 4006,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 3981,
+ "end": 4006,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3981,
+ "end": 4006,
+ "name": "SHA3"
+ },
+ {
+ "begin": 3981,
+ "end": 4006,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3981,
+ "end": 4006,
+ "name": "ADD"
+ },
+ {
+ "begin": 3981,
+ "end": 4006,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3981,
+ "end": 4006,
+ "name": "tag",
+ "value": "137"
+ },
+ {
+ "begin": 3981,
+ "end": 4006,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3981,
+ "end": 4006,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3981,
+ "end": 4006,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 3981,
+ "end": 4006,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3981,
+ "end": 4006,
+ "name": "PUSH",
+ "value": "100"
+ },
+ {
+ "begin": 3981,
+ "end": 4006,
+ "name": "EXP"
+ },
+ {
+ "begin": 3981,
+ "end": 4006,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3981,
+ "end": 4006,
+ "name": "DIV"
+ },
+ {
+ "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": 3981,
+ "end": 4006,
+ "name": "AND"
+ },
+ {
+ "begin": 3969,
+ "end": 3975,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 3976,
+ "end": 3977,
+ "name": "DUP4"
+ },
+ {
+ "begin": 3969,
+ "end": 3978,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3969,
+ "end": 3978,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 3969,
+ "end": 3978,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3969,
+ "end": 3978,
+ "name": "LT"
+ },
+ {
+ "begin": 3969,
+ "end": 3978,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3969,
+ "end": 3978,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3969,
+ "end": 3978,
+ "name": "PUSH [tag]",
+ "value": "138"
+ },
+ {
+ "begin": 3969,
+ "end": 3978,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 3969,
+ "end": 3978,
+ "name": "INVALID"
+ },
+ {
+ "begin": 3969,
+ "end": 3978,
+ "name": "tag",
+ "value": "138"
+ },
+ {
+ "begin": 3969,
+ "end": 3978,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3969,
+ "end": 3978,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3969,
+ "end": 3978,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3969,
+ "end": 3978,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3969,
+ "end": 3978,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 3969,
+ "end": 3978,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3969,
+ "end": 3978,
+ "name": "SHA3"
+ },
+ {
+ "begin": 3969,
+ "end": 3978,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3969,
+ "end": 3978,
+ "name": "ADD"
+ },
+ {
+ "begin": 3969,
+ "end": 3978,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3969,
+ "end": 3978,
+ "name": "tag",
+ "value": "139"
+ },
+ {
+ "begin": 3969,
+ "end": 3978,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3969,
+ "end": 4006,
+ "name": "PUSH",
+ "value": "100"
+ },
+ {
+ "begin": 3969,
+ "end": 4006,
+ "name": "EXP"
+ },
+ {
+ "begin": 3969,
+ "end": 4006,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3969,
+ "end": 4006,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 3969,
+ "end": 4006,
+ "name": "DUP2"
+ },
+ {
+ "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": 3969,
+ "end": 4006,
+ "name": "MUL"
+ },
+ {
+ "begin": 3969,
+ "end": 4006,
+ "name": "NOT"
+ },
+ {
+ "begin": 3969,
+ "end": 4006,
+ "name": "AND"
+ },
+ {
+ "begin": 3969,
+ "end": 4006,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3969,
+ "end": 4006,
+ "name": "DUP4"
+ },
+ {
+ "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": 3969,
+ "end": 4006,
+ "name": "AND"
+ },
+ {
+ "begin": 3969,
+ "end": 4006,
+ "name": "MUL"
+ },
+ {
+ "begin": 3969,
+ "end": 4006,
+ "name": "OR"
+ },
+ {
+ "begin": 3969,
+ "end": 4006,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3969,
+ "end": 4006,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 3969,
+ "end": 4006,
+ "name": "POP"
+ },
+ {
+ "begin": 4024,
+ "end": 4029,
+ "name": "PUSH [tag]",
+ "value": "131"
+ },
+ {
+ "begin": 4024,
+ "end": 4029,
+ "name": "JUMP"
+ },
+ {
+ "begin": 3927,
+ "end": 4044,
+ "name": "tag",
+ "value": "135"
+ },
+ {
+ "begin": 3927,
+ "end": 4044,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3874,
+ "end": 4044,
+ "name": "tag",
+ "value": "132"
+ },
+ {
+ "begin": 3874,
+ "end": 4044,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3910,
+ "end": 3913,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 3910,
+ "end": 3913,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3910,
+ "end": 3913,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3910,
+ "end": 3913,
+ "name": "ADD"
+ },
+ {
+ "begin": 3910,
+ "end": 3913,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3874,
+ "end": 4044,
+ "name": "PUSH [tag]",
+ "value": "130"
+ },
+ {
+ "begin": 3874,
+ "end": 4044,
+ "name": "JUMP"
+ },
+ {
+ "begin": 3874,
+ "end": 4044,
+ "name": "tag",
+ "value": "131"
+ },
+ {
+ "begin": 3874,
+ "end": 4044,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 4053,
+ "end": 4059,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 4053,
+ "end": 4071,
+ "name": "DUP1"
+ },
+ {
+ "begin": 4053,
+ "end": 4071,
+ "name": "SLOAD"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 4053,
+ "end": 4071,
+ "name": "ADD"
+ },
+ {
+ "begin": 4053,
+ "end": 4071,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4053,
+ "end": 4071,
+ "name": "PUSH [tag]",
+ "value": "140"
+ },
+ {
+ "begin": 4053,
+ "end": 4071,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4053,
+ "end": 4071,
+ "name": "DUP3"
+ },
+ {
+ "begin": 4053,
+ "end": 4071,
+ "name": "PUSH [tag]",
+ "value": "141"
+ },
+ {
+ "begin": 4053,
+ "end": 4071,
+ "name": "JUMP",
+ "value": "[in]"
+ },
+ {
+ "begin": 4053,
+ "end": 4071,
+ "name": "tag",
+ "value": "140"
+ },
+ {
+ "begin": 4053,
+ "end": 4071,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 4096,
+ "end": 4102,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 4096,
+ "end": 4109,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 4085,
+ "end": 4093,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 4085,
+ "end": 4093,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 4085,
+ "end": 4109,
+ "name": "GT"
+ },
+ {
+ "begin": 4081,
+ "end": 4155,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 4081,
+ "end": 4155,
+ "name": "PUSH [tag]",
+ "value": "143"
+ },
+ {
+ "begin": 4081,
+ "end": 4155,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 4141,
+ "end": 4147,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 4141,
+ "end": 4154,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 4123,
+ "end": 4155,
+ "name": "PUSH [tag]",
+ "value": "143"
+ },
+ {
+ "begin": 4123,
+ "end": 4155,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4123,
+ "end": 4140,
+ "name": "PUSH [tag]",
+ "value": "101"
+ },
+ {
+ "begin": 4123,
+ "end": 4155,
+ "name": "JUMP",
+ "value": "[in]"
+ },
+ {
+ "begin": 4123,
+ "end": 4155,
+ "name": "tag",
+ "value": "143"
+ },
+ {
+ "begin": 4123,
+ "end": 4155,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 4081,
+ "end": 4155,
+ "name": "tag",
+ "value": "142"
+ },
+ {
+ "begin": 4081,
+ "end": 4155,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 4165,
+ "end": 4184,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 4165,
+ "end": 4184,
+ "name": "MLOAD"
+ },
+ {
+ "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": 4165,
+ "end": 4184,
+ "name": "DUP5"
+ },
+ {
+ "begin": 4165,
+ "end": 4184,
+ "name": "AND"
+ },
+ {
+ "begin": 4165,
+ "end": 4184,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4165,
+ "end": 4184,
+ "name": "PUSH",
+ "value": "8001553A916EF2F495D26A907CC54D96ED840D7BDA71E73194BF5A9DF7A76B90"
+ },
+ {
+ "begin": 4165,
+ "end": 4184,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4165,
+ "end": 4184,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 4165,
+ "end": 4184,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4165,
+ "end": 4184,
+ "name": "LOG2"
+ },
+ {
+ "begin": 1483,
+ "end": 1484,
+ "name": "tag",
+ "value": "129"
+ },
+ {
+ "begin": 1483,
+ "end": 1484,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1262,
+ "end": 1263,
+ "name": "tag",
+ "value": "127"
+ },
+ {
+ "begin": 1262,
+ "end": 1263,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1262,
+ "end": 1263,
+ "name": "POP"
+ },
+ {
+ "begin": 3731,
+ "end": 4191,
+ "name": "tag",
+ "value": "125"
+ },
+ {
+ "begin": 3731,
+ "end": 4191,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3731,
+ "end": 4191,
+ "name": "POP"
+ },
+ {
+ "begin": 3731,
+ "end": 4191,
+ "name": "POP"
+ },
+ {
+ "begin": 3731,
+ "end": 4191,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 3176,
+ "end": 3508,
+ "name": "tag",
+ "value": "41"
+ },
+ {
+ "begin": 3176,
+ "end": 3508,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3259,
+ "end": 3269,
+ "name": "CALLER"
+ },
+ {
+ "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": 1440,
+ "end": 1454,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "AND"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1440,
+ "end": 1447,
+ "name": "PUSH",
+ "value": "2"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "SHA3"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "AND"
+ },
+ {
+ "begin": 1439,
+ "end": 1454,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1435,
+ "end": 1473,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1435,
+ "end": 1473,
+ "name": "PUSH [tag]",
+ "value": "145"
+ },
+ {
+ "begin": 1435,
+ "end": 1473,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1468,
+ "end": 1473,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1468,
+ "end": 1473,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1468,
+ "end": 1473,
+ "name": "REVERT"
+ },
+ {
+ "begin": 1435,
+ "end": 1473,
+ "name": "tag",
+ "value": "145"
+ },
+ {
+ "begin": 1435,
+ "end": 1473,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1714,
+ "end": 1742,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1714,
+ "end": 1742,
+ "name": "DUP3"
+ },
+ {
+ "begin": 1714,
+ "end": 1742,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1714,
+ "end": 1742,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1714,
+ "end": 1727,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 1714,
+ "end": 1742,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1714,
+ "end": 1742,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1714,
+ "end": 1742,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1714,
+ "end": 1742,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1714,
+ "end": 1742,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 1714,
+ "end": 1742,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1714,
+ "end": 1742,
+ "name": "DUP4"
+ },
+ {
+ "begin": 1714,
+ "end": 1742,
+ "name": "SHA3"
+ },
+ {
+ "begin": 3304,
+ "end": 3314,
+ "name": "CALLER"
+ },
+ {
+ "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": 1714,
+ "end": 1749,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1714,
+ "end": 1749,
+ "name": "AND"
+ },
+ {
+ "begin": 1714,
+ "end": 1749,
+ "name": "DUP6"
+ },
+ {
+ "begin": 1714,
+ "end": 1749,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1714,
+ "end": 1749,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 1714,
+ "end": 1749,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1714,
+ "end": 1749,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1714,
+ "end": 1749,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 1714,
+ "end": 1749,
+ "name": "SHA3"
+ },
+ {
+ "begin": 1714,
+ "end": 1749,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 1714,
+ "end": 1742,
+ "name": "DUP4"
+ },
+ {
+ "begin": 1714,
+ "end": 1742,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3304,
+ "end": 3314,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1714,
+ "end": 1749,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": 1714,
+ "end": 1749,
+ "name": "AND"
+ },
+ {
+ "begin": 1713,
+ "end": 1749,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1709,
+ "end": 1768,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1709,
+ "end": 1768,
+ "name": "PUSH [tag]",
+ "value": "147"
+ },
+ {
+ "begin": 1709,
+ "end": 1768,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1763,
+ "end": 1768,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1763,
+ "end": 1768,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1763,
+ "end": 1768,
+ "name": "REVERT"
+ },
+ {
+ "begin": 1709,
+ "end": 1768,
+ "name": "tag",
+ "value": "147"
+ },
+ {
+ "begin": 1709,
+ "end": 1768,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1996,
+ "end": 2008,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "DUP5"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "SHA3"
+ },
+ {
+ "begin": 1996,
+ "end": 2032,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 1996,
+ "end": 2032,
+ "name": "ADD"
+ },
+ {
+ "begin": 1996,
+ "end": 2032,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 3336,
+ "end": 3349,
+ "name": "DUP5"
+ },
+ {
+ "begin": 3336,
+ "end": 3349,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1996,
+ "end": 2032,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": 1996,
+ "end": 2032,
+ "name": "AND"
+ },
+ {
+ "begin": 1992,
+ "end": 2051,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1992,
+ "end": 2051,
+ "name": "PUSH [tag]",
+ "value": "149"
+ },
+ {
+ "begin": 1992,
+ "end": 2051,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 2046,
+ "end": 2051,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2046,
+ "end": 2051,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2046,
+ "end": 2051,
+ "name": "REVERT"
+ },
+ {
+ "begin": 1992,
+ "end": 2051,
+ "name": "tag",
+ "value": "149"
+ },
+ {
+ "begin": 1992,
+ "end": 2051,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3377,
+ "end": 3390,
+ "name": "DUP5"
+ },
+ {
+ "begin": 1185,
+ "end": 1211,
+ "name": "PUSH [tag]",
+ "value": "151"
+ },
+ {
+ "begin": 1197,
+ "end": 1210,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1185,
+ "end": 1196,
+ "name": "PUSH [tag]",
+ "value": "65"
+ },
+ {
+ "begin": 1185,
+ "end": 1211,
+ "name": "JUMP",
+ "value": "[in]"
+ },
+ {
+ "begin": 1185,
+ "end": 1211,
+ "name": "tag",
+ "value": "151"
+ },
+ {
+ "begin": 1185,
+ "end": 1211,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1184,
+ "end": 1211,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1176,
+ "end": 1212,
+ "name": "PUSH [tag]",
+ "value": "152"
+ },
+ {
+ "begin": 1176,
+ "end": 1212,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1176,
+ "end": 1212,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1176,
+ "end": 1212,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1176,
+ "end": 1212,
+ "name": "REVERT"
+ },
+ {
+ "begin": 1176,
+ "end": 1212,
+ "name": "tag",
+ "value": "152"
+ },
+ {
+ "begin": 1176,
+ "end": 1212,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3449,
+ "end": 3454,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3406,
+ "end": 3434,
+ "name": "DUP7"
+ },
+ {
+ "begin": 3406,
+ "end": 3434,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3406,
+ "end": 3434,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3406,
+ "end": 3419,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 3406,
+ "end": 3434,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 3406,
+ "end": 3434,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3406,
+ "end": 3434,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3406,
+ "end": 3434,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3406,
+ "end": 3434,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 3406,
+ "end": 3434,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3406,
+ "end": 3434,
+ "name": "DUP4"
+ },
+ {
+ "begin": 3406,
+ "end": 3434,
+ "name": "SHA3"
+ },
+ {
+ "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": 3435,
+ "end": 3445,
+ "name": "CALLER"
+ },
+ {
+ "begin": 3406,
+ "end": 3446,
+ "name": "AND"
+ },
+ {
+ "begin": 3406,
+ "end": 3446,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3406,
+ "end": 3446,
+ "name": "DUP6"
+ },
+ {
+ "begin": 3406,
+ "end": 3446,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3406,
+ "end": 3446,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 3406,
+ "end": 3446,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3406,
+ "end": 3446,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3406,
+ "end": 3446,
+ "name": "DUP4"
+ },
+ {
+ "begin": 3406,
+ "end": 3446,
+ "name": "SHA3"
+ },
+ {
+ "begin": 3406,
+ "end": 3454,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3406,
+ "end": 3454,
+ "name": "SLOAD"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 3406,
+ "end": 3454,
+ "name": "AND"
+ },
+ {
+ "begin": 3406,
+ "end": 3454,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3406,
+ "end": 3454,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 3464,
+ "end": 3501,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 3420,
+ "end": 3433,
+ "name": "DUP9"
+ },
+ {
+ "begin": 3420,
+ "end": 3433,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 3464,
+ "end": 3501,
+ "name": "PUSH",
+ "value": "F6A317157440607F36269043EB55F1287A5A19BA2216AFEAB88CD46CBCFB88E9"
+ },
+ {
+ "begin": 3464,
+ "end": 3501,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3464,
+ "end": 3501,
+ "name": "LOG3"
+ },
+ {
+ "begin": 1222,
+ "end": 1223,
+ "name": "tag",
+ "value": "153"
+ },
+ {
+ "begin": 1222,
+ "end": 1223,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2061,
+ "end": 2062,
+ "name": "tag",
+ "value": "150"
+ },
+ {
+ "begin": 2061,
+ "end": 2062,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2061,
+ "end": 2062,
+ "name": "POP"
+ },
+ {
+ "begin": 1778,
+ "end": 1779,
+ "name": "tag",
+ "value": "148"
+ },
+ {
+ "begin": 1778,
+ "end": 1779,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1778,
+ "end": 1779,
+ "name": "POP"
+ },
+ {
+ "begin": 1483,
+ "end": 1484,
+ "name": "tag",
+ "value": "146"
+ },
+ {
+ "begin": 1483,
+ "end": 1484,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1483,
+ "end": 1484,
+ "name": "POP"
+ },
+ {
+ "begin": 1483,
+ "end": 1484,
+ "name": "POP"
+ },
+ {
+ "begin": 3176,
+ "end": 3508,
+ "name": "tag",
+ "value": "144"
+ },
+ {
+ "begin": 3176,
+ "end": 3508,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3176,
+ "end": 3508,
+ "name": "POP"
+ },
+ {
+ "begin": 3176,
+ "end": 3508,
+ "name": "POP"
+ },
+ {
+ "begin": 3176,
+ "end": 3508,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "tag",
+ "value": "44"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "PUSH",
+ "value": "2"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "DUP2"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "SHA3"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "AND"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "DUP2"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "tag",
+ "value": "47"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "DUP2"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "DUP4"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "DUP1"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "DUP5"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "SHA3"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "DUP3"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "SHA3"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "AND"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "DUP2"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 3320,
+ "end": 3893,
+ "name": "tag",
+ "value": "50"
+ },
+ {
+ "begin": 3320,
+ "end": 3893,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3553,
+ "end": 3575,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "SHA3"
+ },
+ {
+ "begin": 1996,
+ "end": 2032,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 1996,
+ "end": 2032,
+ "name": "ADD"
+ },
+ {
+ "begin": 1996,
+ "end": 2032,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 3425,
+ "end": 3438,
+ "name": "DUP3"
+ },
+ {
+ "begin": 3425,
+ "end": 3438,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1996,
+ "end": 2032,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": 1996,
+ "end": 2032,
+ "name": "AND"
+ },
+ {
+ "begin": 1992,
+ "end": 2051,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1992,
+ "end": 2051,
+ "name": "PUSH [tag]",
+ "value": "155"
+ },
+ {
+ "begin": 1992,
+ "end": 2051,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 2046,
+ "end": 2051,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2046,
+ "end": 2051,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2046,
+ "end": 2051,
+ "name": "REVERT"
+ },
+ {
+ "begin": 1992,
+ "end": 2051,
+ "name": "tag",
+ "value": "155"
+ },
+ {
+ "begin": 1992,
+ "end": 2051,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3463,
+ "end": 3476,
+ "name": "DUP3"
+ },
+ {
+ "begin": 1298,
+ "end": 1324,
+ "name": "PUSH [tag]",
+ "value": "157"
+ },
+ {
+ "begin": 1310,
+ "end": 1323,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1298,
+ "end": 1309,
+ "name": "PUSH [tag]",
+ "value": "65"
+ },
+ {
+ "begin": 1298,
+ "end": 1324,
+ "name": "JUMP",
+ "value": "[in]"
+ },
+ {
+ "begin": 1298,
+ "end": 1324,
+ "name": "tag",
+ "value": "157"
+ },
+ {
+ "begin": 1298,
+ "end": 1324,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1290,
+ "end": 1325,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1290,
+ "end": 1325,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1290,
+ "end": 1325,
+ "name": "PUSH [tag]",
+ "value": "158"
+ },
+ {
+ "begin": 1290,
+ "end": 1325,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1290,
+ "end": 1325,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1290,
+ "end": 1325,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1290,
+ "end": 1325,
+ "name": "REVERT"
+ },
+ {
+ "begin": 1290,
+ "end": 1325,
+ "name": "tag",
+ "value": "158"
+ },
+ {
+ "begin": 1290,
+ "end": 1325,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1418,
+ "end": 1440,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1443,
+ "end": 1470,
+ "name": "DUP5"
+ },
+ {
+ "begin": 1443,
+ "end": 1470,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1443,
+ "end": 1470,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1443,
+ "end": 1470,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1443,
+ "end": 1470,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1443,
+ "end": 1470,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1443,
+ "end": 1470,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1443,
+ "end": 1470,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 1443,
+ "end": 1470,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1443,
+ "end": 1470,
+ "name": "DUP4"
+ },
+ {
+ "begin": 1443,
+ "end": 1470,
+ "name": "SHA3"
+ },
+ {
+ "begin": 1511,
+ "end": 1525,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1511,
+ "end": 1525,
+ "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": 1511,
+ "end": 1525,
+ "name": "AND"
+ },
+ {
+ "begin": 1488,
+ "end": 1526,
+ "name": "DUP5"
+ },
+ {
+ "begin": 1488,
+ "end": 1526,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1488,
+ "end": 1510,
+ "name": "PUSH",
+ "value": "8"
+ },
+ {
+ "begin": 1488,
+ "end": 1526,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1488,
+ "end": 1526,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 1488,
+ "end": 1526,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1488,
+ "end": 1526,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1488,
+ "end": 1526,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 1488,
+ "end": 1526,
+ "name": "SHA3"
+ },
+ {
+ "begin": 1488,
+ "end": 1526,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 3524,
+ "end": 3537,
+ "name": "DUP6"
+ },
+ {
+ "begin": 3524,
+ "end": 3537,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 1443,
+ "end": 1470,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1488,
+ "end": 1526,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": 1488,
+ "end": 1526,
+ "name": "AND"
+ },
+ {
+ "begin": 1480,
+ "end": 1527,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1480,
+ "end": 1527,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1480,
+ "end": 1527,
+ "name": "PUSH [tag]",
+ "value": "160"
+ },
+ {
+ "begin": 1480,
+ "end": 1527,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1480,
+ "end": 1527,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1480,
+ "end": 1527,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1480,
+ "end": 1527,
+ "name": "REVERT"
+ },
+ {
+ "begin": 1480,
+ "end": 1527,
+ "name": "tag",
+ "value": "160"
+ },
+ {
+ "begin": 1480,
+ "end": 1527,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "PUSH",
+ "value": "72656D6F7665417574686F72697A6564416464726573734174496E6465782861"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "PUSH",
+ "value": "6464726573732C75696E74323536290000000000000000000000000000000000"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "DUP4"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "ADD"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "DUP3"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "PUSH",
+ "value": "2F"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "SUB"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "ADD"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "DUP3"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "SHA3"
+ },
+ {
+ "begin": 1556,
+ "end": 1563,
+ "name": "PUSH",
+ "value": "2"
+ },
+ {
+ "begin": 1556,
+ "end": 1563,
+ "name": "DUP6"
+ },
+ {
+ "begin": 1556,
+ "end": 1563,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1556,
+ "end": 1563,
+ "name": "ADD"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "AND"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "PUSH",
+ "value": "100"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "MUL"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "ADD"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "AND"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DIV"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "PUSH",
+ "value": "1F"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "ADD"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP5"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DIV"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP5"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "MUL"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP6"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "ADD"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP5"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "ADD"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SWAP6"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP5"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP5"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "MSTORE"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "E0"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "2"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "EXP"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "SUB"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 1545,
+ "end": 1614,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1545,
+ "end": 1614,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 1545,
+ "end": 1614,
+ "name": "AND"
+ },
+ {
+ "begin": 1545,
+ "end": 1614,
+ "name": "SWAP4"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "PUSH [tag]",
+ "value": "161"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SWAP4"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP4"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "ADD"
+ },
+ {
+ "begin": 1556,
+ "end": 1563,
+ "name": "DUP3"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP3"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "PUSH [tag]",
+ "value": "162"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "PUSH",
+ "value": "1F"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "LT"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "PUSH [tag]",
+ "value": "163"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "PUSH",
+ "value": "100"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP4"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DIV"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "MUL"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP4"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "ADD"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "PUSH [tag]",
+ "value": "162"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "JUMP"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "tag",
+ "value": "163"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP3"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "ADD"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SHA3"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "tag",
+ "value": "164"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "ADD"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "ADD"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP4"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "GT"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "PUSH [tag]",
+ "value": "164"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP3"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SUB"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "PUSH",
+ "value": "1F"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "AND"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP3"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "ADD"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "tag",
+ "value": "162"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "POP"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "POP"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "POP"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "POP"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "POP"
+ },
+ {
+ "begin": 1565,
+ "end": 1566,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1545,
+ "end": 1555,
+ "name": "PUSH [tag]",
+ "value": "165"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "JUMP",
+ "value": "[in]"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "tag",
+ "value": "161"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "E0"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "2"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "EXP"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "SUB"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 1545,
+ "end": 1614,
+ "name": "AND"
+ },
+ {
+ "begin": 1545,
+ "end": 1614,
+ "name": "EQ"
+ },
+ {
+ "begin": 1537,
+ "end": 1615,
+ "name": "PUSH [tag]",
+ "value": "166"
+ },
+ {
+ "begin": 1537,
+ "end": 1615,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1537,
+ "end": 1615,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1537,
+ "end": 1615,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1537,
+ "end": 1615,
+ "name": "REVERT"
+ },
+ {
+ "begin": 1537,
+ "end": 1615,
+ "name": "tag",
+ "value": "166"
+ },
+ {
+ "begin": 1537,
+ "end": 1615,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3578,
+ "end": 3590,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3578,
+ "end": 3605,
+ "name": "DUP7"
+ },
+ {
+ "begin": 3578,
+ "end": 3605,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3578,
+ "end": 3605,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3578,
+ "end": 3605,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 3578,
+ "end": 3605,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3578,
+ "end": 3605,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3578,
+ "end": 3605,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3578,
+ "end": 3605,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 3578,
+ "end": 3605,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3578,
+ "end": 3605,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3578,
+ "end": 3605,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3578,
+ "end": 3605,
+ "name": "SHA3"
+ },
+ {
+ "begin": 3615,
+ "end": 3626,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 3615,
+ "end": 3626,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3615,
+ "end": 3626,
+ "name": "ADD"
+ },
+ {
+ "begin": 3615,
+ "end": 3633,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3615,
+ "end": 3633,
+ "name": "SLOAD"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 3615,
+ "end": 3633,
+ "name": "AND"
+ },
+ {
+ "begin": 3629,
+ "end": 3633,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 3615,
+ "end": 3633,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3615,
+ "end": 3633,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3615,
+ "end": 3633,
+ "name": "OR"
+ },
+ {
+ "begin": 3615,
+ "end": 3633,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3615,
+ "end": 3633,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3615,
+ "end": 3633,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 3701,
+ "end": 3715,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3701,
+ "end": 3715,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 3727,
+ "end": 3735,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3727,
+ "end": 3735,
+ "name": "DUP4"
+ },
+ {
+ "begin": 3727,
+ "end": 3735,
+ "name": "ADD"
+ },
+ {
+ "begin": 3727,
+ "end": 3735,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SWAP4"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 3737,
+ "end": 3744,
+ "name": "PUSH",
+ "value": "2"
+ },
+ {
+ "begin": 3737,
+ "end": 3744,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3737,
+ "end": 3744,
+ "name": "DUP6"
+ },
+ {
+ "begin": 3737,
+ "end": 3744,
+ "name": "ADD"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 3578,
+ "end": 3605,
+ "name": "SWAP6"
+ },
+ {
+ "begin": 3578,
+ "end": 3605,
+ "name": "SWAP12"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "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": 3701,
+ "end": 3715,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3701,
+ "end": 3715,
+ "name": "SWAP4"
+ },
+ {
+ "begin": 3701,
+ "end": 3715,
+ "name": "AND"
+ },
+ {
+ "begin": 3701,
+ "end": 3715,
+ "name": "SWAP6"
+ },
+ {
+ "begin": 3727,
+ "end": 3735,
+ "name": "SWAP5"
+ },
+ {
+ "begin": 3737,
+ "end": 3744,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 3737,
+ "end": 3744,
+ "name": "SWAP4"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "DUP4"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 3737,
+ "end": 3744,
+ "name": "DUP6"
+ },
+ {
+ "begin": 3737,
+ "end": 3744,
+ "name": "SWAP3"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "DUP4"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "AND"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3615,
+ "end": 3633,
+ "name": "PUSH",
+ "value": "100"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "MUL"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "ADD"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "AND"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "DIV"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "PUSH [tag]",
+ "value": "168"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "PUSH",
+ "value": "1F"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "LT"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "PUSH [tag]",
+ "value": "169"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "PUSH",
+ "value": "100"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "DUP4"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "DIV"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "MUL"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "DUP4"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "ADD"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "PUSH [tag]",
+ "value": "168"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "JUMP"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "tag",
+ "value": "169"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "DUP3"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "ADD"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SHA3"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "tag",
+ "value": "170"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "ADD"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "ADD"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "DUP4"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "GT"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "PUSH [tag]",
+ "value": "170"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "DUP3"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SUB"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "PUSH",
+ "value": "1F"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "AND"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "DUP3"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "ADD"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "tag",
+ "value": "168"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "POP"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "POP"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "POP"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "POP"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "DUP4"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SUB"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "DUP6"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "DUP8"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "PUSH",
+ "value": "8502"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "GAS"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SUB"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "CALL"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "POP"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "POP"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "POP"
+ },
+ {
+ "begin": 3697,
+ "end": 3887,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3697,
+ "end": 3887,
+ "name": "PUSH [tag]",
+ "value": "171"
+ },
+ {
+ "begin": 3697,
+ "end": 3887,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 3759,
+ "end": 3783,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 3759,
+ "end": 3783,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 3769,
+ "end": 3782,
+ "name": "DUP7"
+ },
+ {
+ "begin": 3769,
+ "end": 3782,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3759,
+ "end": 3783,
+ "name": "PUSH",
+ "value": "33E13ECB54C3076D8E8BB8C2881800A4D972B792045FFAE98FDF46DF365FED75"
+ },
+ {
+ "begin": 3759,
+ "end": 3783,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3759,
+ "end": 3783,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3759,
+ "end": 3783,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3759,
+ "end": 3783,
+ "name": "LOG2"
+ },
+ {
+ "begin": 3697,
+ "end": 3887,
+ "name": "PUSH [tag]",
+ "value": "153"
+ },
+ {
+ "begin": 3697,
+ "end": 3887,
+ "name": "JUMP"
+ },
+ {
+ "begin": 3697,
+ "end": 3887,
+ "name": "tag",
+ "value": "171"
+ },
+ {
+ "begin": 3697,
+ "end": 3887,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3812,
+ "end": 3843,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 3812,
+ "end": 3843,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 3829,
+ "end": 3842,
+ "name": "DUP7"
+ },
+ {
+ "begin": 3829,
+ "end": 3842,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3812,
+ "end": 3843,
+ "name": "PUSH",
+ "value": "526441BB6C1ABA3C9A4A6CA1D6545DA9C2333C8C48343EF398EB858D72B79236"
+ },
+ {
+ "begin": 3812,
+ "end": 3843,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3812,
+ "end": 3843,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3812,
+ "end": 3843,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3812,
+ "end": 3843,
+ "name": "LOG2"
+ },
+ {
+ "begin": 3857,
+ "end": 3868,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 3857,
+ "end": 3868,
+ "name": "DUP6"
+ },
+ {
+ "begin": 3857,
+ "end": 3868,
+ "name": "ADD"
+ },
+ {
+ "begin": 3857,
+ "end": 3876,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3857,
+ "end": 3876,
+ "name": "SLOAD"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 3857,
+ "end": 3876,
+ "name": "AND"
+ },
+ {
+ "begin": 3857,
+ "end": 3876,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3857,
+ "end": 3876,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 3697,
+ "end": 3887,
+ "name": "tag",
+ "value": "172"
+ },
+ {
+ "begin": 3697,
+ "end": 3887,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1625,
+ "end": 1626,
+ "name": "tag",
+ "value": "167"
+ },
+ {
+ "begin": 1625,
+ "end": 1626,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1335,
+ "end": 1336,
+ "name": "tag",
+ "value": "159"
+ },
+ {
+ "begin": 1335,
+ "end": 1336,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1335,
+ "end": 1336,
+ "name": "POP"
+ },
+ {
+ "begin": 1335,
+ "end": 1336,
+ "name": "POP"
+ },
+ {
+ "begin": 2061,
+ "end": 2062,
+ "name": "tag",
+ "value": "156"
+ },
+ {
+ "begin": 2061,
+ "end": 2062,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2061,
+ "end": 2062,
+ "name": "POP"
+ },
+ {
+ "begin": 3320,
+ "end": 3893,
+ "name": "tag",
+ "value": "154"
+ },
+ {
+ "begin": 3320,
+ "end": 3893,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3320,
+ "end": 3893,
+ "name": "POP"
+ },
+ {
+ "begin": 3320,
+ "end": 3893,
+ "name": "POP"
+ },
+ {
+ "begin": 3320,
+ "end": 3893,
+ "name": "POP"
+ },
+ {
+ "begin": 3320,
+ "end": 3893,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "tag",
+ "value": "53"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "PUSH",
+ "value": "6"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "tag",
+ "value": "56"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 9263,
+ "end": 9273,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 9263,
+ "end": 9273,
+ "name": "DUP1"
+ },
+ {
+ "begin": 9289,
+ "end": 9468,
+ "name": "tag",
+ "value": "174"
+ },
+ {
+ "begin": 9289,
+ "end": 9468,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 9306,
+ "end": 9322,
+ "name": "PUSH",
+ "value": "5"
+ },
+ {
+ "begin": 9306,
+ "end": 9322,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 9304,
+ "end": 9305,
+ "name": "DUP2"
+ },
+ {
+ "begin": 9304,
+ "end": 9322,
+ "name": "LT"
+ },
+ {
+ "begin": 9289,
+ "end": 9468,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 9289,
+ "end": 9468,
+ "name": "PUSH [tag]",
+ "value": "175"
+ },
+ {
+ "begin": 9289,
+ "end": 9468,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 9348,
+ "end": 9355,
+ "name": "DUP4"
+ },
+ {
+ "begin": 9348,
+ "end": 9384,
+ "name": "DUP1"
+ },
+ {
+ "begin": 9348,
+ "end": 9384,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 9348,
+ "end": 9384,
+ "name": "PUSH [tag]",
+ "value": "177"
+ },
+ {
+ "begin": 9348,
+ "end": 9384,
+ "name": "JUMPI"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 9360,
+ "end": 9372,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 9360,
+ "end": 9375,
+ "name": "DUP2"
+ },
+ {
+ "begin": 9360,
+ "end": 9375,
+ "name": "DUP2"
+ },
+ {
+ "begin": 9360,
+ "end": 9375,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 9360,
+ "end": 9375,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 9360,
+ "end": 9375,
+ "name": "DUP2"
+ },
+ {
+ "begin": 9360,
+ "end": 9375,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 9360,
+ "end": 9375,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 9360,
+ "end": 9375,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 9360,
+ "end": 9375,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 9360,
+ "end": 9375,
+ "name": "SHA3"
+ },
+ {
+ "begin": 9360,
+ "end": 9384,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 9360,
+ "end": 9384,
+ "name": "ADD"
+ },
+ {
+ "begin": 9360,
+ "end": 9384,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 9360,
+ "end": 9384,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": 9360,
+ "end": 9384,
+ "name": "AND"
+ },
+ {
+ "begin": 9359,
+ "end": 9384,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 9348,
+ "end": 9384,
+ "name": "tag",
+ "value": "177"
+ },
+ {
+ "begin": 9348,
+ "end": 9384,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 9348,
+ "end": 9440,
+ "name": "DUP1"
+ },
+ {
+ "begin": 9348,
+ "end": 9440,
+ "name": "PUSH [tag]",
+ "value": "179"
+ },
+ {
+ "begin": 9348,
+ "end": 9440,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 9348,
+ "end": 9440,
+ "name": "POP"
+ },
+ {
+ "begin": 9404,
+ "end": 9412,
+ "name": "DUP3"
+ },
+ {
+ "begin": 9404,
+ "end": 9440,
+ "name": "DUP1"
+ },
+ {
+ "begin": 9404,
+ "end": 9440,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 9404,
+ "end": 9440,
+ "name": "PUSH [tag]",
+ "value": "179"
+ },
+ {
+ "begin": 9404,
+ "end": 9440,
+ "name": "JUMPI"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 9416,
+ "end": 9428,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 9416,
+ "end": 9431,
+ "name": "DUP2"
+ },
+ {
+ "begin": 9416,
+ "end": 9431,
+ "name": "DUP2"
+ },
+ {
+ "begin": 9416,
+ "end": 9431,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 9416,
+ "end": 9431,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 9416,
+ "end": 9431,
+ "name": "DUP2"
+ },
+ {
+ "begin": 9416,
+ "end": 9431,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 9416,
+ "end": 9431,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 9416,
+ "end": 9431,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 9416,
+ "end": 9431,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 9416,
+ "end": 9431,
+ "name": "SHA3"
+ },
+ {
+ "begin": 9416,
+ "end": 9440,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 9416,
+ "end": 9440,
+ "name": "ADD"
+ },
+ {
+ "begin": 9416,
+ "end": 9440,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 9416,
+ "end": 9440,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": 9416,
+ "end": 9440,
+ "name": "AND"
+ },
+ {
+ "begin": 9404,
+ "end": 9440,
+ "name": "tag",
+ "value": "179"
+ },
+ {
+ "begin": 9404,
+ "end": 9440,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 9348,
+ "end": 9440,
+ "name": "tag",
+ "value": "178"
+ },
+ {
+ "begin": 9348,
+ "end": 9440,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 9341,
+ "end": 9468,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 9341,
+ "end": 9468,
+ "name": "PUSH [tag]",
+ "value": "180"
+ },
+ {
+ "begin": 9341,
+ "end": 9468,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 9467,
+ "end": 9468,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 9458,
+ "end": 9468,
+ "name": "DUP3"
+ },
+ {
+ "begin": 9458,
+ "end": 9468,
+ "name": "ADD"
+ },
+ {
+ "begin": 9458,
+ "end": 9468,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 9458,
+ "end": 9468,
+ "name": "POP"
+ },
+ {
+ "begin": 9341,
+ "end": 9468,
+ "name": "tag",
+ "value": "180"
+ },
+ {
+ "begin": 9341,
+ "end": 9468,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 9289,
+ "end": 9468,
+ "name": "tag",
+ "value": "176"
+ },
+ {
+ "begin": 9289,
+ "end": 9468,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 9324,
+ "end": 9327,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 9324,
+ "end": 9327,
+ "name": "ADD"
+ },
+ {
+ "begin": 9289,
+ "end": 9468,
+ "name": "PUSH [tag]",
+ "value": "174"
+ },
+ {
+ "begin": 9289,
+ "end": 9468,
+ "name": "JUMP"
+ },
+ {
+ "begin": 9289,
+ "end": 9468,
+ "name": "tag",
+ "value": "175"
+ },
+ {
+ "begin": 9289,
+ "end": 9468,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "tag",
+ "value": "173"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "POP"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "POP"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "POP"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "tag",
+ "value": "59"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1228,
+ "end": 1232,
+ "name": "ADDRESS"
+ },
+ {
+ "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": 1206,
+ "end": 1233,
+ "name": "AND"
+ },
+ {
+ "begin": 1206,
+ "end": 1216,
+ "name": "CALLER"
+ },
+ {
+ "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": 1206,
+ "end": 1233,
+ "name": "AND"
+ },
+ {
+ "begin": 1206,
+ "end": 1233,
+ "name": "EQ"
+ },
+ {
+ "begin": 1206,
+ "end": 1233,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "PUSH [tag]",
+ "value": "182"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1247,
+ "end": 1252,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1247,
+ "end": 1252,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1247,
+ "end": 1252,
+ "name": "REVERT"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "tag",
+ "value": "182"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3020,
+ "end": 3038,
+ "name": "DUP2"
+ },
+ {
+ "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": 2124,
+ "end": 2137,
+ "name": "DUP2"
+ },
+ {
+ "begin": 2124,
+ "end": 2137,
+ "name": "AND"
+ },
+ {
+ "begin": 2124,
+ "end": 2137,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2120,
+ "end": 2156,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2120,
+ "end": 2156,
+ "name": "PUSH [tag]",
+ "value": "184"
+ },
+ {
+ "begin": 2120,
+ "end": 2156,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 2151,
+ "end": 2156,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2151,
+ "end": 2156,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2151,
+ "end": 2156,
+ "name": "REVERT"
+ },
+ {
+ "begin": 2120,
+ "end": 2156,
+ "name": "tag",
+ "value": "184"
+ },
+ {
+ "begin": 2120,
+ "end": 2156,
+ "name": "JUMPDEST"
+ },
+ {
+ "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": 3054,
+ "end": 3096,
+ "name": "DUP4"
+ },
+ {
+ "begin": 3054,
+ "end": 3096,
+ "name": "AND"
+ },
+ {
+ "begin": 3054,
+ "end": 3096,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3054,
+ "end": 3096,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3054,
+ "end": 3096,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3054,
+ "end": 3096,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3054,
+ "end": 3076,
+ "name": "PUSH",
+ "value": "8"
+ },
+ {
+ "begin": 3054,
+ "end": 3096,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 3054,
+ "end": 3096,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3054,
+ "end": 3096,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3054,
+ "end": 3096,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3054,
+ "end": 3096,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 3054,
+ "end": 3096,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3054,
+ "end": 3096,
+ "name": "DUP3"
+ },
+ {
+ "begin": 3054,
+ "end": 3096,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3054,
+ "end": 3096,
+ "name": "SHA3"
+ },
+ {
+ "begin": 3054,
+ "end": 3111,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3054,
+ "end": 3111,
+ "name": "SLOAD"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 3054,
+ "end": 3111,
+ "name": "AND"
+ },
+ {
+ "begin": 3054,
+ "end": 3111,
+ "name": "DUP7"
+ },
+ {
+ "begin": 3054,
+ "end": 3111,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3054,
+ "end": 3111,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3054,
+ "end": 3111,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3054,
+ "end": 3111,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3054,
+ "end": 3111,
+ "name": "OR"
+ },
+ {
+ "begin": 3054,
+ "end": 3111,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3054,
+ "end": 3111,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3054,
+ "end": 3111,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 3121,
+ "end": 3177,
+ "name": "DUP3"
+ },
+ {
+ "begin": 3121,
+ "end": 3177,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 3121,
+ "end": 3177,
+ "name": "SWAP4"
+ },
+ {
+ "begin": 3121,
+ "end": 3177,
+ "name": "DUP5"
+ },
+ {
+ "begin": 3121,
+ "end": 3177,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3121,
+ "end": 3177,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3121,
+ "end": 3177,
+ "name": "DUP4"
+ },
+ {
+ "begin": 3121,
+ "end": 3177,
+ "name": "ADD"
+ },
+ {
+ "begin": 3121,
+ "end": 3177,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3121,
+ "end": 3177,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3121,
+ "end": 3177,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 3121,
+ "end": 3177,
+ "name": "PUSH",
+ "value": "DAEF8FF7DC66C5E34EB9C338AAB679D9F427F89868D9228494455A4D982EB2B0"
+ },
+ {
+ "begin": 3121,
+ "end": 3177,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 3121,
+ "end": 3177,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3121,
+ "end": 3177,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3121,
+ "end": 3177,
+ "name": "SUB"
+ },
+ {
+ "begin": 3121,
+ "end": 3177,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3121,
+ "end": 3177,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3121,
+ "end": 3177,
+ "name": "ADD"
+ },
+ {
+ "begin": 3121,
+ "end": 3177,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3121,
+ "end": 3177,
+ "name": "LOG1"
+ },
+ {
+ "begin": 2166,
+ "end": 2167,
+ "name": "tag",
+ "value": "185"
+ },
+ {
+ "begin": 2166,
+ "end": 2167,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1262,
+ "end": 1263,
+ "name": "tag",
+ "value": "183"
+ },
+ {
+ "begin": 1262,
+ "end": 1263,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1262,
+ "end": 1263,
+ "name": "POP"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "tag",
+ "value": "181"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "POP"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "POP"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 3331,
+ "end": 3608,
+ "name": "tag",
+ "value": "62"
+ },
+ {
+ "begin": 3331,
+ "end": 3608,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1228,
+ "end": 1232,
+ "name": "ADDRESS"
+ },
+ {
+ "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": 1206,
+ "end": 1233,
+ "name": "AND"
+ },
+ {
+ "begin": 1206,
+ "end": 1216,
+ "name": "CALLER"
+ },
+ {
+ "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": 1206,
+ "end": 1233,
+ "name": "AND"
+ },
+ {
+ "begin": 1206,
+ "end": 1233,
+ "name": "EQ"
+ },
+ {
+ "begin": 1206,
+ "end": 1233,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "PUSH [tag]",
+ "value": "187"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1247,
+ "end": 1252,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1247,
+ "end": 1252,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1247,
+ "end": 1252,
+ "name": "REVERT"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "tag",
+ "value": "187"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "JUMPDEST"
+ },
+ {
+ "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": 1332,
+ "end": 1346,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1332,
+ "end": 1346,
+ "name": "AND"
+ },
+ {
+ "begin": 1332,
+ "end": 1346,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1332,
+ "end": 1346,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1332,
+ "end": 1346,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1332,
+ "end": 1346,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1332,
+ "end": 1339,
+ "name": "PUSH",
+ "value": "2"
+ },
+ {
+ "begin": 1332,
+ "end": 1346,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1332,
+ "end": 1346,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1332,
+ "end": 1346,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 1332,
+ "end": 1346,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1332,
+ "end": 1346,
+ "name": "SHA3"
+ },
+ {
+ "begin": 1332,
+ "end": 1346,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 3424,
+ "end": 3429,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3424,
+ "end": 3429,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1332,
+ "end": 1346,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": 1332,
+ "end": 1346,
+ "name": "AND"
+ },
+ {
+ "begin": 1328,
+ "end": 1365,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1328,
+ "end": 1365,
+ "name": "PUSH [tag]",
+ "value": "189"
+ },
+ {
+ "begin": 1328,
+ "end": 1365,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1360,
+ "end": 1365,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1360,
+ "end": 1365,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1360,
+ "end": 1365,
+ "name": "REVERT"
+ },
+ {
+ "begin": 1328,
+ "end": 1365,
+ "name": "tag",
+ "value": "189"
+ },
+ {
+ "begin": 1328,
+ "end": 1365,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3447,
+ "end": 3452,
+ "name": "DUP2"
+ },
+ {
+ "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": 2124,
+ "end": 2137,
+ "name": "DUP2"
+ },
+ {
+ "begin": 2124,
+ "end": 2137,
+ "name": "AND"
+ },
+ {
+ "begin": 2124,
+ "end": 2137,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2120,
+ "end": 2156,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2120,
+ "end": 2156,
+ "name": "PUSH [tag]",
+ "value": "191"
+ },
+ {
+ "begin": 2120,
+ "end": 2156,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 2151,
+ "end": 2156,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2151,
+ "end": 2156,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2151,
+ "end": 2156,
+ "name": "REVERT"
+ },
+ {
+ "begin": 2120,
+ "end": 2156,
+ "name": "tag",
+ "value": "191"
+ },
+ {
+ "begin": 2120,
+ "end": 2156,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3479,
+ "end": 3485,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 3479,
+ "end": 3492,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3479,
+ "end": 3492,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 3479,
+ "end": 3492,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3479,
+ "end": 3492,
+ "name": "POP"
+ },
+ {
+ "begin": 3495,
+ "end": 3496,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 3479,
+ "end": 3496,
+ "name": "ADD"
+ },
+ {
+ "begin": 3498,
+ "end": 3506,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 3498,
+ "end": 3506,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 276,
+ "end": 278,
+ "name": "PUSH",
+ "value": "32"
+ },
+ {
+ "begin": 2256,
+ "end": 2266,
+ "name": "DUP3"
+ },
+ {
+ "begin": 2256,
+ "end": 2284,
+ "name": "GT"
+ },
+ {
+ "begin": 2256,
+ "end": 2322,
+ "name": "DUP1"
+ },
+ {
+ "begin": 2256,
+ "end": 2322,
+ "name": "PUSH [tag]",
+ "value": "193"
+ },
+ {
+ "begin": 2256,
+ "end": 2322,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 2256,
+ "end": 2322,
+ "name": "POP"
+ },
+ {
+ "begin": 2312,
+ "end": 2322,
+ "name": "DUP2"
+ },
+ {
+ "begin": 2300,
+ "end": 2309,
+ "name": "DUP2"
+ },
+ {
+ "begin": 2300,
+ "end": 2322,
+ "name": "GT"
+ },
+ {
+ "begin": 2256,
+ "end": 2322,
+ "name": "tag",
+ "value": "193"
+ },
+ {
+ "begin": 2256,
+ "end": 2322,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2256,
+ "end": 2352,
+ "name": "DUP1"
+ },
+ {
+ "begin": 2256,
+ "end": 2352,
+ "name": "PUSH [tag]",
+ "value": "194"
+ },
+ {
+ "begin": 2256,
+ "end": 2352,
+ "name": "JUMPI"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 2338,
+ "end": 2352,
+ "name": "DUP1"
+ },
+ {
+ "begin": 2338,
+ "end": 2352,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2256,
+ "end": 2352,
+ "name": "tag",
+ "value": "194"
+ },
+ {
+ "begin": 2256,
+ "end": 2352,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2256,
+ "end": 2383,
+ "name": "DUP1"
+ },
+ {
+ "begin": 2256,
+ "end": 2383,
+ "name": "PUSH [tag]",
+ "value": "195"
+ },
+ {
+ "begin": 2256,
+ "end": 2383,
+ "name": "JUMPI"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 2368,
+ "end": 2383,
+ "name": "DUP2"
+ },
+ {
+ "begin": 2368,
+ "end": 2383,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2256,
+ "end": 2383,
+ "name": "tag",
+ "value": "195"
+ },
+ {
+ "begin": 2256,
+ "end": 2383,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2249,
+ "end": 2402,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2249,
+ "end": 2402,
+ "name": "PUSH [tag]",
+ "value": "196"
+ },
+ {
+ "begin": 2249,
+ "end": 2402,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 2397,
+ "end": 2402,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2397,
+ "end": 2402,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2397,
+ "end": 2402,
+ "name": "REVERT"
+ },
+ {
+ "begin": 2249,
+ "end": 2402,
+ "name": "tag",
+ "value": "196"
+ },
+ {
+ "begin": 2249,
+ "end": 2402,
+ "name": "JUMPDEST"
+ },
+ {
+ "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": 3522,
+ "end": 3536,
+ "name": "DUP6"
+ },
+ {
+ "begin": 3522,
+ "end": 3536,
+ "name": "AND"
+ },
+ {
+ "begin": 3522,
+ "end": 3536,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3522,
+ "end": 3536,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3522,
+ "end": 3536,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3522,
+ "end": 3536,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3522,
+ "end": 3529,
+ "name": "PUSH",
+ "value": "2"
+ },
+ {
+ "begin": 3522,
+ "end": 3536,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 3522,
+ "end": 3536,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3522,
+ "end": 3536,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 3522,
+ "end": 3536,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3522,
+ "end": 3536,
+ "name": "SHA3"
+ },
+ {
+ "begin": 3522,
+ "end": 3543,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3522,
+ "end": 3543,
+ "name": "SLOAD"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 3522,
+ "end": 3543,
+ "name": "AND"
+ },
+ {
+ "begin": 3539,
+ "end": 3543,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 3522,
+ "end": 3543,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3522,
+ "end": 3543,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3522,
+ "end": 3543,
+ "name": "OR"
+ },
+ {
+ "begin": 3522,
+ "end": 3543,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3522,
+ "end": 3543,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3522,
+ "end": 3543,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 3553,
+ "end": 3559,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 3553,
+ "end": 3559,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3553,
+ "end": 3559,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "ADD"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "PUSH [tag]",
+ "value": "198"
+ },
+ {
+ "begin": 3553,
+ "end": 3559,
+ "name": "DUP4"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "DUP3"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "PUSH [tag]",
+ "value": "141"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "JUMP",
+ "value": "[in]"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "tag",
+ "value": "198"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "SHA3"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "ADD"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "tag",
+ "value": "200"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "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": 3553,
+ "end": 3571,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "DUP11"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "AND"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "PUSH",
+ "value": "100"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "SWAP4"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "SWAP4"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "EXP"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "DUP4"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "MUL"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "MUL"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "NOT"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "AND"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "OR"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 3581,
+ "end": 3601,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 3581,
+ "end": 3601,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "SWAP2"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 3581,
+ "end": 3601,
+ "name": "PUSH",
+ "value": "F39E6E1EB0EDCF53C221607B54B00CD28F3196FED0A24994DC308B8F611B682D"
+ },
+ {
+ "begin": 3581,
+ "end": 3601,
+ "name": "SWAP1"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3581,
+ "end": 3601,
+ "name": "LOG2"
+ },
+ {
+ "begin": 2412,
+ "end": 2413,
+ "name": "tag",
+ "value": "197"
+ },
+ {
+ "begin": 2412,
+ "end": 2413,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2166,
+ "end": 2167,
+ "name": "tag",
+ "value": "192"
+ },
+ {
+ "begin": 2166,
+ "end": 2167,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2166,
+ "end": 2167,
+ "name": "POP"
+ },
+ {
+ "begin": 2166,
+ "end": 2167,
+ "name": "POP"
+ },
+ {
+ "begin": 1375,
+ "end": 1376,
+ "name": "tag",
+ "value": "190"
+ },
+ {
+ "begin": 1375,
+ "end": 1376,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1375,
+ "end": 1376,
+ "name": "POP"
+ },
+ {
+ "begin": 1262,
+ "end": 1263,
+ "name": "tag",
+ "value": "188"
+ },
+ {
+ "begin": 1262,
+ "end": 1263,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1262,
+ "end": 1263,
+ "name": "POP"
+ },
+ {
+ "begin": 3331,
+ "end": 3608,
+ "name": "tag",
+ "value": "186"
+ },
+ {
+ "begin": 3331,
+ "end": 3608,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3331,
+ "end": 3608,
+ "name": "POP"
+ },
+ {
+ "begin": 3331,
+ "end": 3608,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "tag",
+ "value": "65"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 7414,
+ "end": 7418,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 7414,
+ "end": 7418,
+ "name": "DUP1"
+ },
+ {
+ "begin": 7414,
+ "end": 7418,
+ "name": "DUP1"
+ },
+ {
+ "begin": 7458,
+ "end": 7655,
+ "name": "tag",
+ "value": "202"
+ },
+ {
+ "begin": 7458,
+ "end": 7655,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 7475,
+ "end": 7481,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 7475,
+ "end": 7488,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 7473,
+ "end": 7488,
+ "name": "DUP2"
+ },
+ {
+ "begin": 7473,
+ "end": 7488,
+ "name": "LT"
+ },
+ {
+ "begin": 7458,
+ "end": 7655,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 7458,
+ "end": 7655,
+ "name": "PUSH [tag]",
+ "value": "203"
+ },
+ {
+ "begin": 7458,
+ "end": 7655,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 7513,
+ "end": 7541,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 7513,
+ "end": 7541,
+ "name": "DUP5"
+ },
+ {
+ "begin": 7513,
+ "end": 7541,
+ "name": "DUP2"
+ },
+ {
+ "begin": 7513,
+ "end": 7541,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 7513,
+ "end": 7526,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 7513,
+ "end": 7541,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 7513,
+ "end": 7541,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 7513,
+ "end": 7541,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 7513,
+ "end": 7541,
+ "name": "DUP2"
+ },
+ {
+ "begin": 7513,
+ "end": 7541,
+ "name": "SHA3"
+ },
+ {
+ "begin": 7542,
+ "end": 7548,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "DUP1"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 7513,
+ "end": 7541,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 7513,
+ "end": 7541,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 7513,
+ "end": 7541,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 7549,
+ "end": 7550,
+ "name": "DUP5"
+ },
+ {
+ "begin": 7549,
+ "end": 7550,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "DUP2"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "LT"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "PUSH [tag]",
+ "value": "205"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "INVALID"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "tag",
+ "value": "205"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "SHA3"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "ADD"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "tag",
+ "value": "206"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "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": 7542,
+ "end": 7551,
+ "name": "PUSH",
+ "value": "100"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "EXP"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "DIV"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "AND"
+ },
+ {
+ "begin": 7513,
+ "end": 7552,
+ "name": "DUP2"
+ },
+ {
+ "begin": 7513,
+ "end": 7552,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 7513,
+ "end": 7552,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 7513,
+ "end": 7552,
+ "name": "DUP2"
+ },
+ {
+ "begin": 7513,
+ "end": 7552,
+ "name": "ADD"
+ },
+ {
+ "begin": 7513,
+ "end": 7552,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 7513,
+ "end": 7552,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 7513,
+ "end": 7552,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 7513,
+ "end": 7552,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 7513,
+ "end": 7552,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 7513,
+ "end": 7552,
+ "name": "ADD"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 7513,
+ "end": 7552,
+ "name": "SHA3"
+ },
+ {
+ "begin": 7513,
+ "end": 7552,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 7513,
+ "end": 7552,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": 7513,
+ "end": 7552,
+ "name": "AND"
+ },
+ {
+ "begin": 7509,
+ "end": 7580,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 7509,
+ "end": 7580,
+ "name": "PUSH [tag]",
+ "value": "207"
+ },
+ {
+ "begin": 7509,
+ "end": 7580,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 7579,
+ "end": 7580,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 7570,
+ "end": 7580,
+ "name": "DUP3"
+ },
+ {
+ "begin": 7570,
+ "end": 7580,
+ "name": "ADD"
+ },
+ {
+ "begin": 7570,
+ "end": 7580,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 7570,
+ "end": 7580,
+ "name": "POP"
+ },
+ {
+ "begin": 7509,
+ "end": 7580,
+ "name": "tag",
+ "value": "207"
+ },
+ {
+ "begin": 7509,
+ "end": 7580,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 7607,
+ "end": 7615,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 7607,
+ "end": 7615,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 7598,
+ "end": 7603,
+ "name": "DUP3"
+ },
+ {
+ "begin": 7598,
+ "end": 7615,
+ "name": "EQ"
+ },
+ {
+ "begin": 7594,
+ "end": 7644,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 7594,
+ "end": 7644,
+ "name": "PUSH [tag]",
+ "value": "208"
+ },
+ {
+ "begin": 7594,
+ "end": 7644,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 7640,
+ "end": 7644,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 7633,
+ "end": 7644,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 7633,
+ "end": 7644,
+ "name": "POP"
+ },
+ {
+ "begin": 7633,
+ "end": 7644,
+ "name": "PUSH [tag]",
+ "value": "203"
+ },
+ {
+ "begin": 7633,
+ "end": 7644,
+ "name": "JUMP"
+ },
+ {
+ "begin": 7594,
+ "end": 7644,
+ "name": "tag",
+ "value": "208"
+ },
+ {
+ "begin": 7594,
+ "end": 7644,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 7458,
+ "end": 7655,
+ "name": "tag",
+ "value": "204"
+ },
+ {
+ "begin": 7458,
+ "end": 7655,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 7490,
+ "end": 7493,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 7490,
+ "end": 7493,
+ "name": "ADD"
+ },
+ {
+ "begin": 7458,
+ "end": 7655,
+ "name": "PUSH [tag]",
+ "value": "202"
+ },
+ {
+ "begin": 7458,
+ "end": 7655,
+ "name": "JUMP"
+ },
+ {
+ "begin": 7458,
+ "end": 7655,
+ "name": "tag",
+ "value": "203"
+ },
+ {
+ "begin": 7458,
+ "end": 7655,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "tag",
+ "value": "201"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "POP"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "POP"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "POP"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 2301,
+ "end": 2487,
+ "name": "tag",
+ "value": "68"
+ },
+ {
+ "begin": 2301,
+ "end": 2487,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1228,
+ "end": 1232,
+ "name": "ADDRESS"
+ },
+ {
+ "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": 1206,
+ "end": 1233,
+ "name": "AND"
+ },
+ {
+ "begin": 1206,
+ "end": 1216,
+ "name": "CALLER"
+ },
+ {
+ "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": 1206,
+ "end": 1233,
+ "name": "AND"
+ },
+ {
+ "begin": 1206,
+ "end": 1233,
+ "name": "EQ"
+ },
+ {
+ "begin": 1206,
+ "end": 1233,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "PUSH [tag]",
+ "value": "210"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1247,
+ "end": 1252,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1247,
+ "end": 1252,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1247,
+ "end": 1252,
+ "name": "REVERT"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "tag",
+ "value": "210"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2398,
+ "end": 2415,
+ "name": "PUSH",
+ "value": "6"
+ },
+ {
+ "begin": 2398,
+ "end": 2436,
+ "name": "DUP2"
+ },
+ {
+ "begin": 2398,
+ "end": 2436,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 2398,
+ "end": 2436,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 2446,
+ "end": 2480,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 2446,
+ "end": 2480,
+ "name": "DUP1"
+ },
+ {
+ "begin": 2446,
+ "end": 2480,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 2446,
+ "end": 2480,
+ "name": "DUP3"
+ },
+ {
+ "begin": 2446,
+ "end": 2480,
+ "name": "DUP2"
+ },
+ {
+ "begin": 2446,
+ "end": 2480,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 2446,
+ "end": 2480,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 2446,
+ "end": 2480,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 2446,
+ "end": 2480,
+ "name": "PUSH",
+ "value": "D1C9101A34FEFF75CCCEF14A28785A0279CB0B49C1F321F21F5F422E746B4377"
+ },
+ {
+ "begin": 2446,
+ "end": 2480,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 2446,
+ "end": 2480,
+ "name": "DUP2"
+ },
+ {
+ "begin": 2446,
+ "end": 2480,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 2446,
+ "end": 2480,
+ "name": "SUB"
+ },
+ {
+ "begin": 2446,
+ "end": 2480,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 2446,
+ "end": 2480,
+ "name": "ADD"
+ },
+ {
+ "begin": 2446,
+ "end": 2480,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 2446,
+ "end": 2480,
+ "name": "LOG1"
+ },
+ {
+ "begin": 1262,
+ "end": 1263,
+ "name": "tag",
+ "value": "211"
+ },
+ {
+ "begin": 1262,
+ "end": 1263,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2301,
+ "end": 2487,
+ "name": "tag",
+ "value": "209"
+ },
+ {
+ "begin": 2301,
+ "end": 2487,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2301,
+ "end": 2487,
+ "name": "POP"
+ },
+ {
+ "begin": 2301,
+ "end": 2487,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "tag",
+ "value": "71"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "PUSH",
+ "value": "8"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "DUP2"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "SHA3"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "AND"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "DUP2"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "tag",
+ "value": "74"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 8741,
+ "end": 8751,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 8741,
+ "end": 8751,
+ "name": "DUP1"
+ },
+ {
+ "begin": 8767,
+ "end": 8887,
+ "name": "tag",
+ "value": "213"
+ },
+ {
+ "begin": 8767,
+ "end": 8887,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 8784,
+ "end": 8790,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 8784,
+ "end": 8797,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 8782,
+ "end": 8797,
+ "name": "DUP2"
+ },
+ {
+ "begin": 8782,
+ "end": 8797,
+ "name": "LT"
+ },
+ {
+ "begin": 8767,
+ "end": 8887,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 8767,
+ "end": 8887,
+ "name": "PUSH [tag]",
+ "value": "214"
+ },
+ {
+ "begin": 8767,
+ "end": 8887,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 8820,
+ "end": 8848,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 8820,
+ "end": 8848,
+ "name": "DUP4"
+ },
+ {
+ "begin": 8820,
+ "end": 8848,
+ "name": "DUP2"
+ },
+ {
+ "begin": 8820,
+ "end": 8848,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 8820,
+ "end": 8833,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 8820,
+ "end": 8848,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 8820,
+ "end": 8848,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 8820,
+ "end": 8848,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 8820,
+ "end": 8848,
+ "name": "DUP2"
+ },
+ {
+ "begin": 8820,
+ "end": 8848,
+ "name": "SHA3"
+ },
+ {
+ "begin": 8849,
+ "end": 8855,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "DUP1"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 8820,
+ "end": 8848,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 8820,
+ "end": 8848,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 8820,
+ "end": 8848,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 8856,
+ "end": 8857,
+ "name": "DUP5"
+ },
+ {
+ "begin": 8856,
+ "end": 8857,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "DUP2"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "LT"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "PUSH [tag]",
+ "value": "216"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "INVALID"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "tag",
+ "value": "216"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "SHA3"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "ADD"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "tag",
+ "value": "217"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "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": 8849,
+ "end": 8858,
+ "name": "PUSH",
+ "value": "100"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "EXP"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "DIV"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "AND"
+ },
+ {
+ "begin": 8820,
+ "end": 8859,
+ "name": "DUP2"
+ },
+ {
+ "begin": 8820,
+ "end": 8859,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 8820,
+ "end": 8859,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 8820,
+ "end": 8859,
+ "name": "DUP2"
+ },
+ {
+ "begin": 8820,
+ "end": 8859,
+ "name": "ADD"
+ },
+ {
+ "begin": 8820,
+ "end": 8859,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 8820,
+ "end": 8859,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 8820,
+ "end": 8859,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 8820,
+ "end": 8859,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 8820,
+ "end": 8859,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 8820,
+ "end": 8859,
+ "name": "ADD"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 8820,
+ "end": 8859,
+ "name": "SHA3"
+ },
+ {
+ "begin": 8820,
+ "end": 8859,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 8820,
+ "end": 8859,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": 8820,
+ "end": 8859,
+ "name": "AND"
+ },
+ {
+ "begin": 8816,
+ "end": 8887,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 8816,
+ "end": 8887,
+ "name": "PUSH [tag]",
+ "value": "218"
+ },
+ {
+ "begin": 8816,
+ "end": 8887,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 8886,
+ "end": 8887,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 8877,
+ "end": 8887,
+ "name": "DUP3"
+ },
+ {
+ "begin": 8877,
+ "end": 8887,
+ "name": "ADD"
+ },
+ {
+ "begin": 8877,
+ "end": 8887,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 8877,
+ "end": 8887,
+ "name": "POP"
+ },
+ {
+ "begin": 8816,
+ "end": 8887,
+ "name": "tag",
+ "value": "218"
+ },
+ {
+ "begin": 8816,
+ "end": 8887,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 8767,
+ "end": 8887,
+ "name": "tag",
+ "value": "215"
+ },
+ {
+ "begin": 8767,
+ "end": 8887,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 8799,
+ "end": 8802,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 8799,
+ "end": 8802,
+ "name": "ADD"
+ },
+ {
+ "begin": 8767,
+ "end": 8887,
+ "name": "PUSH [tag]",
+ "value": "213"
+ },
+ {
+ "begin": 8767,
+ "end": 8887,
+ "name": "JUMP"
+ },
+ {
+ "begin": 8767,
+ "end": 8887,
+ "name": "tag",
+ "value": "214"
+ },
+ {
+ "begin": 8767,
+ "end": 8887,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "tag",
+ "value": "212"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "POP"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "POP"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "tag",
+ "value": "77"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP2"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP2"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SHA3"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP3"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "ADD"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP4"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "ADD"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "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": 785,
+ "end": 834,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "AND"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH",
+ "value": "2"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "ADD"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "AND"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP5"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "tag",
+ "value": "83"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 9629,
+ "end": 9638,
+ "name": "PUSH [tag]",
+ "value": "219"
+ },
+ {
+ "begin": 9629,
+ "end": 9638,
+ "name": "PUSH [tag]",
+ "value": "220"
+ },
+ {
+ "begin": 9629,
+ "end": 9638,
+ "name": "JUMP",
+ "value": "[in]"
+ },
+ {
+ "begin": 9629,
+ "end": 9638,
+ "name": "tag",
+ "value": "219"
+ },
+ {
+ "begin": 9629,
+ "end": 9638,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 9661,
+ "end": 9667,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "DUP1"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "DUP1"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "MUL"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "ADD"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "DUP2"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "ADD"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "DUP1"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "DUP2"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "DUP2"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "ADD"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "DUP3"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "DUP1"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "DUP1"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "PUSH [tag]",
+ "value": "222"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "MUL"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "DUP3"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "ADD"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "SHA3"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "tag",
+ "value": "223"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "DUP2"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "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": 9654,
+ "end": 9667,
+ "name": "AND"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "DUP2"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "ADD"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "ADD"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "DUP1"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "DUP4"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "GT"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "PUSH [tag]",
+ "value": "223"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "tag",
+ "value": "222"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "POP"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "POP"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "POP"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "POP"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "POP"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "POP"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "tag",
+ "value": "221"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "tag",
+ "value": "88"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 10902,
+ "end": 10924,
+ "name": "PUSH [tag]",
+ "value": "224"
+ },
+ {
+ "begin": 10902,
+ "end": 10924,
+ "name": "PUSH [tag]",
+ "value": "220"
+ },
+ {
+ "begin": 10902,
+ "end": 10924,
+ "name": "JUMP",
+ "value": "[in]"
+ },
+ {
+ "begin": 10902,
+ "end": 10924,
+ "name": "tag",
+ "value": "224"
+ },
+ {
+ "begin": 10902,
+ "end": 10924,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 10940,
+ "end": 10972,
+ "name": "PUSH [tag]",
+ "value": "226"
+ },
+ {
+ "begin": 10940,
+ "end": 10972,
+ "name": "PUSH [tag]",
+ "value": "220"
+ },
+ {
+ "begin": 10940,
+ "end": 10972,
+ "name": "JUMP",
+ "value": "[in]"
+ },
+ {
+ "begin": 10940,
+ "end": 10972,
+ "name": "tag",
+ "value": "226"
+ },
+ {
+ "begin": 10940,
+ "end": 10972,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 11013,
+ "end": 11023,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 11037,
+ "end": 11043,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 10986,
+ "end": 11002,
+ "name": "PUSH",
+ "value": "5"
+ },
+ {
+ "begin": 10986,
+ "end": 11002,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 10975,
+ "end": 11003,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 10975,
+ "end": 11003,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 10975,
+ "end": 11003,
+ "name": "DUP1"
+ },
+ {
+ "begin": 10975,
+ "end": 11003,
+ "name": "MSIZE"
+ },
+ {
+ "begin": 10975,
+ "end": 11003,
+ "name": "LT"
+ },
+ {
+ "begin": 10975,
+ "end": 11003,
+ "name": "PUSH [tag]",
+ "value": "228"
+ },
+ {
+ "begin": 10975,
+ "end": 11003,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 10975,
+ "end": 11003,
+ "name": "POP"
+ },
+ {
+ "begin": 10975,
+ "end": 11003,
+ "name": "MSIZE"
+ },
+ {
+ "begin": 10975,
+ "end": 11003,
+ "name": "tag",
+ "value": "228"
+ },
+ {
+ "begin": 10975,
+ "end": 11003,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 10975,
+ "end": 11003,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10975,
+ "end": 11003,
+ "name": "DUP1"
+ },
+ {
+ "begin": 10975,
+ "end": 11003,
+ "name": "DUP3"
+ },
+ {
+ "begin": 10975,
+ "end": 11003,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 10975,
+ "end": 11003,
+ "name": "DUP1"
+ },
+ {
+ "begin": 10975,
+ "end": 11003,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 10975,
+ "end": 11003,
+ "name": "MUL"
+ },
+ {
+ "begin": 10975,
+ "end": 11003,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 10975,
+ "end": 11003,
+ "name": "ADD"
+ },
+ {
+ "begin": 10975,
+ "end": 11003,
+ "name": "DUP3"
+ },
+ {
+ "begin": 10975,
+ "end": 11003,
+ "name": "ADD"
+ },
+ {
+ "begin": 10975,
+ "end": 11003,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 10975,
+ "end": 11003,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 10975,
+ "end": 11003,
+ "name": "tag",
+ "value": "229"
+ },
+ {
+ "begin": 10975,
+ "end": 11003,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 10975,
+ "end": 11003,
+ "name": "POP"
+ },
+ {
+ "begin": 10940,
+ "end": 11003,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 10940,
+ "end": 11003,
+ "name": "POP"
+ },
+ {
+ "begin": 11026,
+ "end": 11027,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 11013,
+ "end": 11027,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 11013,
+ "end": 11027,
+ "name": "POP"
+ },
+ {
+ "begin": 11060,
+ "end": 11061,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 11058,
+ "end": 11061,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 11058,
+ "end": 11061,
+ "name": "POP"
+ },
+ {
+ "begin": 11053,
+ "end": 11303,
+ "name": "tag",
+ "value": "230"
+ },
+ {
+ "begin": 11053,
+ "end": 11303,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 11065,
+ "end": 11081,
+ "name": "PUSH",
+ "value": "5"
+ },
+ {
+ "begin": 11065,
+ "end": 11081,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 11063,
+ "end": 11064,
+ "name": "DUP2"
+ },
+ {
+ "begin": 11063,
+ "end": 11081,
+ "name": "LT"
+ },
+ {
+ "begin": 11053,
+ "end": 11303,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 11053,
+ "end": 11303,
+ "name": "PUSH [tag]",
+ "value": "231"
+ },
+ {
+ "begin": 11053,
+ "end": 11303,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 11107,
+ "end": 11114,
+ "name": "DUP6"
+ },
+ {
+ "begin": 11107,
+ "end": 11143,
+ "name": "DUP1"
+ },
+ {
+ "begin": 11107,
+ "end": 11143,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 11107,
+ "end": 11143,
+ "name": "PUSH [tag]",
+ "value": "233"
+ },
+ {
+ "begin": 11107,
+ "end": 11143,
+ "name": "JUMPI"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 11119,
+ "end": 11131,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 11119,
+ "end": 11134,
+ "name": "DUP2"
+ },
+ {
+ "begin": 11119,
+ "end": 11134,
+ "name": "DUP2"
+ },
+ {
+ "begin": 11119,
+ "end": 11134,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 11119,
+ "end": 11134,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 11119,
+ "end": 11134,
+ "name": "DUP2"
+ },
+ {
+ "begin": 11119,
+ "end": 11134,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 11119,
+ "end": 11134,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 11119,
+ "end": 11134,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 11119,
+ "end": 11134,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 11119,
+ "end": 11134,
+ "name": "SHA3"
+ },
+ {
+ "begin": 11119,
+ "end": 11143,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 11119,
+ "end": 11143,
+ "name": "ADD"
+ },
+ {
+ "begin": 11119,
+ "end": 11143,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 11119,
+ "end": 11143,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": 11119,
+ "end": 11143,
+ "name": "AND"
+ },
+ {
+ "begin": 11118,
+ "end": 11143,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 11107,
+ "end": 11143,
+ "name": "tag",
+ "value": "233"
+ },
+ {
+ "begin": 11107,
+ "end": 11143,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 11107,
+ "end": 11199,
+ "name": "DUP1"
+ },
+ {
+ "begin": 11107,
+ "end": 11199,
+ "name": "PUSH [tag]",
+ "value": "235"
+ },
+ {
+ "begin": 11107,
+ "end": 11199,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 11107,
+ "end": 11199,
+ "name": "POP"
+ },
+ {
+ "begin": 11163,
+ "end": 11171,
+ "name": "DUP5"
+ },
+ {
+ "begin": 11163,
+ "end": 11199,
+ "name": "DUP1"
+ },
+ {
+ "begin": 11163,
+ "end": 11199,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 11163,
+ "end": 11199,
+ "name": "PUSH [tag]",
+ "value": "235"
+ },
+ {
+ "begin": 11163,
+ "end": 11199,
+ "name": "JUMPI"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 11175,
+ "end": 11187,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 11175,
+ "end": 11190,
+ "name": "DUP2"
+ },
+ {
+ "begin": 11175,
+ "end": 11190,
+ "name": "DUP2"
+ },
+ {
+ "begin": 11175,
+ "end": 11190,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 11175,
+ "end": 11190,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 11175,
+ "end": 11190,
+ "name": "DUP2"
+ },
+ {
+ "begin": 11175,
+ "end": 11190,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 11175,
+ "end": 11190,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 11175,
+ "end": 11190,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 11175,
+ "end": 11190,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 11175,
+ "end": 11190,
+ "name": "SHA3"
+ },
+ {
+ "begin": 11175,
+ "end": 11199,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 11175,
+ "end": 11199,
+ "name": "ADD"
+ },
+ {
+ "begin": 11175,
+ "end": 11199,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 11175,
+ "end": 11199,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": 11175,
+ "end": 11199,
+ "name": "AND"
+ },
+ {
+ "begin": 11163,
+ "end": 11199,
+ "name": "tag",
+ "value": "235"
+ },
+ {
+ "begin": 11163,
+ "end": 11199,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 11107,
+ "end": 11199,
+ "name": "tag",
+ "value": "234"
+ },
+ {
+ "begin": 11107,
+ "end": 11199,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 11100,
+ "end": 11303,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 11100,
+ "end": 11303,
+ "name": "PUSH [tag]",
+ "value": "236"
+ },
+ {
+ "begin": 11100,
+ "end": 11303,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 11259,
+ "end": 11260,
+ "name": "DUP1"
+ },
+ {
+ "begin": 11231,
+ "end": 11249,
+ "name": "DUP4"
+ },
+ {
+ "begin": 11250,
+ "end": 11255,
+ "name": "DUP4"
+ },
+ {
+ "begin": 11231,
+ "end": 11256,
+ "name": "DUP2"
+ },
+ {
+ "begin": 11231,
+ "end": 11256,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 11231,
+ "end": 11256,
+ "name": "DUP2"
+ },
+ {
+ "begin": 11231,
+ "end": 11256,
+ "name": "LT"
+ },
+ {
+ "begin": 11231,
+ "end": 11256,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 11231,
+ "end": 11256,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 11231,
+ "end": 11256,
+ "name": "PUSH [tag]",
+ "value": "237"
+ },
+ {
+ "begin": 11231,
+ "end": 11256,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 11231,
+ "end": 11256,
+ "name": "INVALID"
+ },
+ {
+ "begin": 11231,
+ "end": 11256,
+ "name": "tag",
+ "value": "237"
+ },
+ {
+ "begin": 11231,
+ "end": 11256,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 11231,
+ "end": 11256,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 11231,
+ "end": 11256,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 11231,
+ "end": 11256,
+ "name": "DUP2"
+ },
+ {
+ "begin": 11231,
+ "end": 11256,
+ "name": "MUL"
+ },
+ {
+ "begin": 11231,
+ "end": 11256,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 11231,
+ "end": 11256,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 11231,
+ "end": 11256,
+ "name": "ADD"
+ },
+ {
+ "begin": 11231,
+ "end": 11256,
+ "name": "ADD"
+ },
+ {
+ "begin": 11231,
+ "end": 11260,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 11287,
+ "end": 11288,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 11278,
+ "end": 11288,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 11278,
+ "end": 11288,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 11278,
+ "end": 11288,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 11278,
+ "end": 11288,
+ "name": "ADD"
+ },
+ {
+ "begin": 11278,
+ "end": 11288,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 11100,
+ "end": 11303,
+ "name": "tag",
+ "value": "236"
+ },
+ {
+ "begin": 11100,
+ "end": 11303,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 11053,
+ "end": 11303,
+ "name": "tag",
+ "value": "232"
+ },
+ {
+ "begin": 11053,
+ "end": 11303,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 11083,
+ "end": 11086,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 11083,
+ "end": 11086,
+ "name": "ADD"
+ },
+ {
+ "begin": 11053,
+ "end": 11303,
+ "name": "PUSH [tag]",
+ "value": "230"
+ },
+ {
+ "begin": 11053,
+ "end": 11303,
+ "name": "JUMP"
+ },
+ {
+ "begin": 11053,
+ "end": 11303,
+ "name": "tag",
+ "value": "231"
+ },
+ {
+ "begin": 11053,
+ "end": 11303,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 11346,
+ "end": 11350,
+ "name": "DUP8"
+ },
+ {
+ "begin": 11341,
+ "end": 11343,
+ "name": "DUP8"
+ },
+ {
+ "begin": 11341,
+ "end": 11350,
+ "name": "SUB"
+ },
+ {
+ "begin": 11330,
+ "end": 11351,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 11330,
+ "end": 11351,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 11330,
+ "end": 11351,
+ "name": "DUP1"
+ },
+ {
+ "begin": 11330,
+ "end": 11351,
+ "name": "MSIZE"
+ },
+ {
+ "begin": 11330,
+ "end": 11351,
+ "name": "LT"
+ },
+ {
+ "begin": 11330,
+ "end": 11351,
+ "name": "PUSH [tag]",
+ "value": "238"
+ },
+ {
+ "begin": 11330,
+ "end": 11351,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 11330,
+ "end": 11351,
+ "name": "POP"
+ },
+ {
+ "begin": 11330,
+ "end": 11351,
+ "name": "MSIZE"
+ },
+ {
+ "begin": 11330,
+ "end": 11351,
+ "name": "tag",
+ "value": "238"
+ },
+ {
+ "begin": 11330,
+ "end": 11351,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 11330,
+ "end": 11351,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 11330,
+ "end": 11351,
+ "name": "DUP1"
+ },
+ {
+ "begin": 11330,
+ "end": 11351,
+ "name": "DUP3"
+ },
+ {
+ "begin": 11330,
+ "end": 11351,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 11330,
+ "end": 11351,
+ "name": "DUP1"
+ },
+ {
+ "begin": 11330,
+ "end": 11351,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 11330,
+ "end": 11351,
+ "name": "MUL"
+ },
+ {
+ "begin": 11330,
+ "end": 11351,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 11330,
+ "end": 11351,
+ "name": "ADD"
+ },
+ {
+ "begin": 11330,
+ "end": 11351,
+ "name": "DUP3"
+ },
+ {
+ "begin": 11330,
+ "end": 11351,
+ "name": "ADD"
+ },
+ {
+ "begin": 11330,
+ "end": 11351,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 11330,
+ "end": 11351,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 11330,
+ "end": 11351,
+ "name": "tag",
+ "value": "239"
+ },
+ {
+ "begin": 11330,
+ "end": 11351,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 11330,
+ "end": 11351,
+ "name": "POP"
+ },
+ {
+ "begin": 11312,
+ "end": 11351,
+ "name": "SWAP4"
+ },
+ {
+ "begin": 11312,
+ "end": 11351,
+ "name": "POP"
+ },
+ {
+ "begin": 11368,
+ "end": 11372,
+ "name": "DUP8"
+ },
+ {
+ "begin": 11366,
+ "end": 11372,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 11366,
+ "end": 11372,
+ "name": "POP"
+ },
+ {
+ "begin": 11361,
+ "end": 11446,
+ "name": "tag",
+ "value": "240"
+ },
+ {
+ "begin": 11361,
+ "end": 11446,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 11376,
+ "end": 11378,
+ "name": "DUP7"
+ },
+ {
+ "begin": 11374,
+ "end": 11375,
+ "name": "DUP2"
+ },
+ {
+ "begin": 11374,
+ "end": 11378,
+ "name": "LT"
+ },
+ {
+ "begin": 11361,
+ "end": 11446,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 11361,
+ "end": 11446,
+ "name": "PUSH [tag]",
+ "value": "241"
+ },
+ {
+ "begin": 11361,
+ "end": 11446,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 11425,
+ "end": 11443,
+ "name": "DUP3"
+ },
+ {
+ "begin": 11444,
+ "end": 11445,
+ "name": "DUP2"
+ },
+ {
+ "begin": 11425,
+ "end": 11446,
+ "name": "DUP2"
+ },
+ {
+ "begin": 11425,
+ "end": 11446,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 11425,
+ "end": 11446,
+ "name": "DUP2"
+ },
+ {
+ "begin": 11425,
+ "end": 11446,
+ "name": "LT"
+ },
+ {
+ "begin": 11425,
+ "end": 11446,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 11425,
+ "end": 11446,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 11425,
+ "end": 11446,
+ "name": "PUSH [tag]",
+ "value": "243"
+ },
+ {
+ "begin": 11425,
+ "end": 11446,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 11425,
+ "end": 11446,
+ "name": "INVALID"
+ },
+ {
+ "begin": 11425,
+ "end": 11446,
+ "name": "tag",
+ "value": "243"
+ },
+ {
+ "begin": 11425,
+ "end": 11446,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 11425,
+ "end": 11446,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 11425,
+ "end": 11446,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 11425,
+ "end": 11446,
+ "name": "ADD"
+ },
+ {
+ "begin": 11425,
+ "end": 11446,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 11425,
+ "end": 11446,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 11425,
+ "end": 11446,
+ "name": "MUL"
+ },
+ {
+ "begin": 11425,
+ "end": 11446,
+ "name": "ADD"
+ },
+ {
+ "begin": 11425,
+ "end": 11446,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 11397,
+ "end": 11412,
+ "name": "DUP5"
+ },
+ {
+ "begin": 11417,
+ "end": 11421,
+ "name": "DUP10"
+ },
+ {
+ "begin": 11413,
+ "end": 11414,
+ "name": "DUP4"
+ },
+ {
+ "begin": 11413,
+ "end": 11421,
+ "name": "SUB"
+ },
+ {
+ "begin": 11397,
+ "end": 11422,
+ "name": "DUP2"
+ },
+ {
+ "begin": 11397,
+ "end": 11422,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 11397,
+ "end": 11422,
+ "name": "DUP2"
+ },
+ {
+ "begin": 11397,
+ "end": 11422,
+ "name": "LT"
+ },
+ {
+ "begin": 11397,
+ "end": 11422,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 11397,
+ "end": 11422,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 11397,
+ "end": 11422,
+ "name": "PUSH [tag]",
+ "value": "244"
+ },
+ {
+ "begin": 11397,
+ "end": 11422,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 11397,
+ "end": 11422,
+ "name": "INVALID"
+ },
+ {
+ "begin": 11397,
+ "end": 11422,
+ "name": "tag",
+ "value": "244"
+ },
+ {
+ "begin": 11397,
+ "end": 11422,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 11397,
+ "end": 11422,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 11397,
+ "end": 11422,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 11397,
+ "end": 11422,
+ "name": "DUP2"
+ },
+ {
+ "begin": 11397,
+ "end": 11422,
+ "name": "MUL"
+ },
+ {
+ "begin": 11397,
+ "end": 11422,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 11397,
+ "end": 11422,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 11397,
+ "end": 11422,
+ "name": "ADD"
+ },
+ {
+ "begin": 11397,
+ "end": 11422,
+ "name": "ADD"
+ },
+ {
+ "begin": 11397,
+ "end": 11446,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 11361,
+ "end": 11446,
+ "name": "tag",
+ "value": "242"
+ },
+ {
+ "begin": 11361,
+ "end": 11446,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 11380,
+ "end": 11383,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 11380,
+ "end": 11383,
+ "name": "ADD"
+ },
+ {
+ "begin": 11361,
+ "end": 11446,
+ "name": "PUSH [tag]",
+ "value": "240"
+ },
+ {
+ "begin": 11361,
+ "end": 11446,
+ "name": "JUMP"
+ },
+ {
+ "begin": 11361,
+ "end": 11446,
+ "name": "tag",
+ "value": "241"
+ },
+ {
+ "begin": 11361,
+ "end": 11446,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "tag",
+ "value": "227"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "POP"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "POP"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "POP"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "SWAP5"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "SWAP4"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "POP"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "POP"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "POP"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "POP"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "tag",
+ "value": "93"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 9948,
+ "end": 9972,
+ "name": "PUSH [tag]",
+ "value": "245"
+ },
+ {
+ "begin": 9948,
+ "end": 9972,
+ "name": "PUSH [tag]",
+ "value": "220"
+ },
+ {
+ "begin": 9948,
+ "end": 9972,
+ "name": "JUMP",
+ "value": "[in]"
+ },
+ {
+ "begin": 9948,
+ "end": 9972,
+ "name": "tag",
+ "value": "245"
+ },
+ {
+ "begin": 9948,
+ "end": 9972,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 9988,
+ "end": 10022,
+ "name": "PUSH [tag]",
+ "value": "246"
+ },
+ {
+ "begin": 9988,
+ "end": 10022,
+ "name": "PUSH [tag]",
+ "value": "220"
+ },
+ {
+ "begin": 9988,
+ "end": 10022,
+ "name": "JUMP",
+ "value": "[in]"
+ },
+ {
+ "begin": 9988,
+ "end": 10022,
+ "name": "tag",
+ "value": "246"
+ },
+ {
+ "begin": 9988,
+ "end": 10022,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 10039,
+ "end": 10045,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 10039,
+ "end": 10052,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 10025,
+ "end": 10053,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 10025,
+ "end": 10053,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 10063,
+ "end": 10073,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 10063,
+ "end": 10073,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 10063,
+ "end": 10073,
+ "name": "DUP3"
+ },
+ {
+ "begin": 10063,
+ "end": 10073,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 10025,
+ "end": 10053,
+ "name": "DUP1"
+ },
+ {
+ "begin": 10025,
+ "end": 10053,
+ "name": "MSIZE"
+ },
+ {
+ "begin": 10025,
+ "end": 10053,
+ "name": "LT"
+ },
+ {
+ "begin": 10025,
+ "end": 10053,
+ "name": "PUSH [tag]",
+ "value": "248"
+ },
+ {
+ "begin": 10025,
+ "end": 10053,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 10025,
+ "end": 10053,
+ "name": "POP"
+ },
+ {
+ "begin": 10025,
+ "end": 10053,
+ "name": "MSIZE"
+ },
+ {
+ "begin": 10025,
+ "end": 10053,
+ "name": "tag",
+ "value": "248"
+ },
+ {
+ "begin": 10025,
+ "end": 10053,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 10025,
+ "end": 10053,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10025,
+ "end": 10053,
+ "name": "DUP1"
+ },
+ {
+ "begin": 10025,
+ "end": 10053,
+ "name": "DUP3"
+ },
+ {
+ "begin": 10025,
+ "end": 10053,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 10025,
+ "end": 10053,
+ "name": "DUP1"
+ },
+ {
+ "begin": 10025,
+ "end": 10053,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 10025,
+ "end": 10053,
+ "name": "MUL"
+ },
+ {
+ "begin": 10025,
+ "end": 10053,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 10025,
+ "end": 10053,
+ "name": "ADD"
+ },
+ {
+ "begin": 10025,
+ "end": 10053,
+ "name": "DUP3"
+ },
+ {
+ "begin": 10025,
+ "end": 10053,
+ "name": "ADD"
+ },
+ {
+ "begin": 10025,
+ "end": 10053,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 10025,
+ "end": 10053,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 10025,
+ "end": 10053,
+ "name": "tag",
+ "value": "249"
+ },
+ {
+ "begin": 10025,
+ "end": 10053,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 10025,
+ "end": 10053,
+ "name": "POP"
+ },
+ {
+ "begin": 9988,
+ "end": 10053,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 9988,
+ "end": 10053,
+ "name": "POP"
+ },
+ {
+ "begin": 10076,
+ "end": 10077,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 10063,
+ "end": 10077,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 10063,
+ "end": 10077,
+ "name": "POP"
+ },
+ {
+ "begin": 10110,
+ "end": 10111,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 10108,
+ "end": 10111,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10108,
+ "end": 10111,
+ "name": "POP"
+ },
+ {
+ "begin": 10103,
+ "end": 10289,
+ "name": "tag",
+ "value": "250"
+ },
+ {
+ "begin": 10103,
+ "end": 10289,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 10115,
+ "end": 10121,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 10115,
+ "end": 10128,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 10113,
+ "end": 10128,
+ "name": "DUP2"
+ },
+ {
+ "begin": 10113,
+ "end": 10128,
+ "name": "LT"
+ },
+ {
+ "begin": 10103,
+ "end": 10289,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 10103,
+ "end": 10289,
+ "name": "PUSH [tag]",
+ "value": "251"
+ },
+ {
+ "begin": 10103,
+ "end": 10289,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 10151,
+ "end": 10179,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 10151,
+ "end": 10179,
+ "name": "DUP6"
+ },
+ {
+ "begin": 10151,
+ "end": 10179,
+ "name": "DUP2"
+ },
+ {
+ "begin": 10151,
+ "end": 10179,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 10151,
+ "end": 10164,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 10151,
+ "end": 10179,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 10151,
+ "end": 10179,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 10151,
+ "end": 10179,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 10151,
+ "end": 10179,
+ "name": "DUP2"
+ },
+ {
+ "begin": 10151,
+ "end": 10179,
+ "name": "SHA3"
+ },
+ {
+ "begin": 10180,
+ "end": 10186,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "DUP1"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 10151,
+ "end": 10179,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 10151,
+ "end": 10179,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 10151,
+ "end": 10179,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 10187,
+ "end": 10188,
+ "name": "DUP5"
+ },
+ {
+ "begin": 10187,
+ "end": 10188,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "DUP2"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "LT"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "PUSH [tag]",
+ "value": "253"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "INVALID"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "tag",
+ "value": "253"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "SHA3"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "ADD"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "tag",
+ "value": "254"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "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": 10180,
+ "end": 10189,
+ "name": "PUSH",
+ "value": "100"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "EXP"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "DIV"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "AND"
+ },
+ {
+ "begin": 10151,
+ "end": 10190,
+ "name": "DUP2"
+ },
+ {
+ "begin": 10151,
+ "end": 10190,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 10151,
+ "end": 10190,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 10151,
+ "end": 10190,
+ "name": "DUP2"
+ },
+ {
+ "begin": 10151,
+ "end": 10190,
+ "name": "ADD"
+ },
+ {
+ "begin": 10151,
+ "end": 10190,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 10151,
+ "end": 10190,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10151,
+ "end": 10190,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 10151,
+ "end": 10190,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 10151,
+ "end": 10190,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 10151,
+ "end": 10190,
+ "name": "ADD"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 10151,
+ "end": 10190,
+ "name": "SHA3"
+ },
+ {
+ "begin": 10151,
+ "end": 10190,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 10151,
+ "end": 10190,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": 10151,
+ "end": 10190,
+ "name": "AND"
+ },
+ {
+ "begin": 10147,
+ "end": 10289,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 10147,
+ "end": 10289,
+ "name": "PUSH [tag]",
+ "value": "255"
+ },
+ {
+ "begin": 10147,
+ "end": 10289,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 10237,
+ "end": 10243,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 10237,
+ "end": 10246,
+ "name": "DUP1"
+ },
+ {
+ "begin": 10237,
+ "end": 10246,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 10244,
+ "end": 10245,
+ "name": "DUP3"
+ },
+ {
+ "begin": 10244,
+ "end": 10245,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10237,
+ "end": 10246,
+ "name": "DUP2"
+ },
+ {
+ "begin": 10237,
+ "end": 10246,
+ "name": "LT"
+ },
+ {
+ "begin": 10237,
+ "end": 10246,
+ "name": "PUSH [tag]",
+ "value": "256"
+ },
+ {
+ "begin": 10237,
+ "end": 10246,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 10237,
+ "end": 10246,
+ "name": "INVALID"
+ },
+ {
+ "begin": 10237,
+ "end": 10246,
+ "name": "tag",
+ "value": "256"
+ },
+ {
+ "begin": 10237,
+ "end": 10246,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 10237,
+ "end": 10246,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10237,
+ "end": 10246,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 10237,
+ "end": 10246,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 10237,
+ "end": 10246,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 10237,
+ "end": 10246,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 10237,
+ "end": 10246,
+ "name": "SHA3"
+ },
+ {
+ "begin": 10237,
+ "end": 10246,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10237,
+ "end": 10246,
+ "name": "ADD"
+ },
+ {
+ "begin": 10237,
+ "end": 10246,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 10237,
+ "end": 10246,
+ "name": "tag",
+ "value": "257"
+ },
+ {
+ "begin": 10237,
+ "end": 10246,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 10237,
+ "end": 10246,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10237,
+ "end": 10246,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 10237,
+ "end": 10246,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10237,
+ "end": 10246,
+ "name": "PUSH",
+ "value": "100"
+ },
+ {
+ "begin": 10237,
+ "end": 10246,
+ "name": "EXP"
+ },
+ {
+ "begin": 10237,
+ "end": 10246,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10237,
+ "end": 10246,
+ "name": "DIV"
+ },
+ {
+ "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": 10237,
+ "end": 10246,
+ "name": "AND"
+ },
+ {
+ "begin": 10210,
+ "end": 10227,
+ "name": "DUP4"
+ },
+ {
+ "begin": 10228,
+ "end": 10233,
+ "name": "DUP4"
+ },
+ {
+ "begin": 10210,
+ "end": 10234,
+ "name": "DUP2"
+ },
+ {
+ "begin": 10210,
+ "end": 10234,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 10210,
+ "end": 10234,
+ "name": "DUP2"
+ },
+ {
+ "begin": 10210,
+ "end": 10234,
+ "name": "LT"
+ },
+ {
+ "begin": 10210,
+ "end": 10234,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 10210,
+ "end": 10234,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 10210,
+ "end": 10234,
+ "name": "PUSH [tag]",
+ "value": "258"
+ },
+ {
+ "begin": 10210,
+ "end": 10234,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 10210,
+ "end": 10234,
+ "name": "INVALID"
+ },
+ {
+ "begin": 10210,
+ "end": 10234,
+ "name": "tag",
+ "value": "258"
+ },
+ {
+ "begin": 10210,
+ "end": 10234,
+ "name": "JUMPDEST"
+ },
+ {
+ "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": 10210,
+ "end": 10246,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10210,
+ "end": 10246,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 10210,
+ "end": 10246,
+ "name": "AND"
+ },
+ {
+ "begin": 10210,
+ "end": 10234,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 10210,
+ "end": 10234,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 10210,
+ "end": 10234,
+ "name": "DUP4"
+ },
+ {
+ "begin": 10210,
+ "end": 10234,
+ "name": "MUL"
+ },
+ {
+ "begin": 10210,
+ "end": 10234,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10210,
+ "end": 10234,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 10210,
+ "end": 10234,
+ "name": "ADD"
+ },
+ {
+ "begin": 10210,
+ "end": 10234,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10210,
+ "end": 10234,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 10210,
+ "end": 10234,
+ "name": "ADD"
+ },
+ {
+ "begin": 10210,
+ "end": 10246,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 10273,
+ "end": 10274,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 10264,
+ "end": 10274,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 10264,
+ "end": 10274,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10264,
+ "end": 10274,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 10264,
+ "end": 10274,
+ "name": "ADD"
+ },
+ {
+ "begin": 10264,
+ "end": 10274,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10147,
+ "end": 10289,
+ "name": "tag",
+ "value": "255"
+ },
+ {
+ "begin": 10147,
+ "end": 10289,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 10103,
+ "end": 10289,
+ "name": "tag",
+ "value": "252"
+ },
+ {
+ "begin": 10103,
+ "end": 10289,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 10130,
+ "end": 10133,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 10130,
+ "end": 10133,
+ "name": "ADD"
+ },
+ {
+ "begin": 10103,
+ "end": 10289,
+ "name": "PUSH [tag]",
+ "value": "250"
+ },
+ {
+ "begin": 10103,
+ "end": 10289,
+ "name": "JUMP"
+ },
+ {
+ "begin": 10103,
+ "end": 10289,
+ "name": "tag",
+ "value": "251"
+ },
+ {
+ "begin": 10103,
+ "end": 10289,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 10329,
+ "end": 10334,
+ "name": "DUP2"
+ },
+ {
+ "begin": 10315,
+ "end": 10335,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 10315,
+ "end": 10335,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 10315,
+ "end": 10335,
+ "name": "DUP1"
+ },
+ {
+ "begin": 10315,
+ "end": 10335,
+ "name": "MSIZE"
+ },
+ {
+ "begin": 10315,
+ "end": 10335,
+ "name": "LT"
+ },
+ {
+ "begin": 10315,
+ "end": 10335,
+ "name": "PUSH [tag]",
+ "value": "259"
+ },
+ {
+ "begin": 10315,
+ "end": 10335,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 10315,
+ "end": 10335,
+ "name": "POP"
+ },
+ {
+ "begin": 10315,
+ "end": 10335,
+ "name": "MSIZE"
+ },
+ {
+ "begin": 10315,
+ "end": 10335,
+ "name": "tag",
+ "value": "259"
+ },
+ {
+ "begin": 10315,
+ "end": 10335,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 10315,
+ "end": 10335,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10315,
+ "end": 10335,
+ "name": "DUP1"
+ },
+ {
+ "begin": 10315,
+ "end": 10335,
+ "name": "DUP3"
+ },
+ {
+ "begin": 10315,
+ "end": 10335,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 10315,
+ "end": 10335,
+ "name": "DUP1"
+ },
+ {
+ "begin": 10315,
+ "end": 10335,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 10315,
+ "end": 10335,
+ "name": "MUL"
+ },
+ {
+ "begin": 10315,
+ "end": 10335,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 10315,
+ "end": 10335,
+ "name": "ADD"
+ },
+ {
+ "begin": 10315,
+ "end": 10335,
+ "name": "DUP3"
+ },
+ {
+ "begin": 10315,
+ "end": 10335,
+ "name": "ADD"
+ },
+ {
+ "begin": 10315,
+ "end": 10335,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 10315,
+ "end": 10335,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 10315,
+ "end": 10335,
+ "name": "tag",
+ "value": "260"
+ },
+ {
+ "begin": 10315,
+ "end": 10335,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 10315,
+ "end": 10335,
+ "name": "POP"
+ },
+ {
+ "begin": 10298,
+ "end": 10335,
+ "name": "SWAP4"
+ },
+ {
+ "begin": 10298,
+ "end": 10335,
+ "name": "POP"
+ },
+ {
+ "begin": 10352,
+ "end": 10353,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 10350,
+ "end": 10353,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10350,
+ "end": 10353,
+ "name": "POP"
+ },
+ {
+ "begin": 10345,
+ "end": 10421,
+ "name": "tag",
+ "value": "261"
+ },
+ {
+ "begin": 10345,
+ "end": 10421,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 10357,
+ "end": 10362,
+ "name": "DUP2"
+ },
+ {
+ "begin": 10355,
+ "end": 10356,
+ "name": "DUP2"
+ },
+ {
+ "begin": 10355,
+ "end": 10362,
+ "name": "LT"
+ },
+ {
+ "begin": 10345,
+ "end": 10421,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 10345,
+ "end": 10421,
+ "name": "PUSH [tag]",
+ "value": "262"
+ },
+ {
+ "begin": 10345,
+ "end": 10421,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 10401,
+ "end": 10418,
+ "name": "DUP3"
+ },
+ {
+ "begin": 10419,
+ "end": 10420,
+ "name": "DUP2"
+ },
+ {
+ "begin": 10401,
+ "end": 10421,
+ "name": "DUP2"
+ },
+ {
+ "begin": 10401,
+ "end": 10421,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 10401,
+ "end": 10421,
+ "name": "DUP2"
+ },
+ {
+ "begin": 10401,
+ "end": 10421,
+ "name": "LT"
+ },
+ {
+ "begin": 10401,
+ "end": 10421,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 10401,
+ "end": 10421,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 10401,
+ "end": 10421,
+ "name": "PUSH [tag]",
+ "value": "264"
+ },
+ {
+ "begin": 10401,
+ "end": 10421,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 10401,
+ "end": 10421,
+ "name": "INVALID"
+ },
+ {
+ "begin": 10401,
+ "end": 10421,
+ "name": "tag",
+ "value": "264"
+ },
+ {
+ "begin": 10401,
+ "end": 10421,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 10401,
+ "end": 10421,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10401,
+ "end": 10421,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 10401,
+ "end": 10421,
+ "name": "ADD"
+ },
+ {
+ "begin": 10401,
+ "end": 10421,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10401,
+ "end": 10421,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 10401,
+ "end": 10421,
+ "name": "MUL"
+ },
+ {
+ "begin": 10401,
+ "end": 10421,
+ "name": "ADD"
+ },
+ {
+ "begin": 10401,
+ "end": 10421,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 10381,
+ "end": 10395,
+ "name": "DUP5"
+ },
+ {
+ "begin": 10396,
+ "end": 10397,
+ "name": "DUP3"
+ },
+ {
+ "begin": 10381,
+ "end": 10398,
+ "name": "DUP2"
+ },
+ {
+ "begin": 10381,
+ "end": 10398,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 10381,
+ "end": 10398,
+ "name": "DUP2"
+ },
+ {
+ "begin": 10381,
+ "end": 10398,
+ "name": "LT"
+ },
+ {
+ "begin": 10381,
+ "end": 10398,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 10381,
+ "end": 10398,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 10381,
+ "end": 10398,
+ "name": "PUSH [tag]",
+ "value": "265"
+ },
+ {
+ "begin": 10381,
+ "end": 10398,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 10381,
+ "end": 10398,
+ "name": "INVALID"
+ },
+ {
+ "begin": 10381,
+ "end": 10398,
+ "name": "tag",
+ "value": "265"
+ },
+ {
+ "begin": 10381,
+ "end": 10398,
+ "name": "JUMPDEST"
+ },
+ {
+ "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": 10381,
+ "end": 10421,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10381,
+ "end": 10421,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 10381,
+ "end": 10421,
+ "name": "AND"
+ },
+ {
+ "begin": 10381,
+ "end": 10398,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 10381,
+ "end": 10398,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 10381,
+ "end": 10398,
+ "name": "DUP4"
+ },
+ {
+ "begin": 10381,
+ "end": 10398,
+ "name": "MUL"
+ },
+ {
+ "begin": 10381,
+ "end": 10398,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10381,
+ "end": 10398,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 10381,
+ "end": 10398,
+ "name": "ADD"
+ },
+ {
+ "begin": 10381,
+ "end": 10398,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10381,
+ "end": 10398,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 10381,
+ "end": 10398,
+ "name": "ADD"
+ },
+ {
+ "begin": 10381,
+ "end": 10421,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 10345,
+ "end": 10421,
+ "name": "tag",
+ "value": "263"
+ },
+ {
+ "begin": 10345,
+ "end": 10421,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 10364,
+ "end": 10367,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 10364,
+ "end": 10367,
+ "name": "ADD"
+ },
+ {
+ "begin": 10345,
+ "end": 10421,
+ "name": "PUSH [tag]",
+ "value": "261"
+ },
+ {
+ "begin": 10345,
+ "end": 10421,
+ "name": "JUMP"
+ },
+ {
+ "begin": 10345,
+ "end": 10421,
+ "name": "tag",
+ "value": "262"
+ },
+ {
+ "begin": 10345,
+ "end": 10421,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "tag",
+ "value": "247"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "POP"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "POP"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "POP"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "POP"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "tag",
+ "value": "98"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "PUSH",
+ "value": "5"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 5010,
+ "end": 5217,
+ "name": "tag",
+ "value": "101"
+ },
+ {
+ "begin": 5010,
+ "end": 5217,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1228,
+ "end": 1232,
+ "name": "ADDRESS"
+ },
+ {
+ "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": 1206,
+ "end": 1233,
+ "name": "AND"
+ },
+ {
+ "begin": 1206,
+ "end": 1216,
+ "name": "CALLER"
+ },
+ {
+ "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": 1206,
+ "end": 1233,
+ "name": "AND"
+ },
+ {
+ "begin": 1206,
+ "end": 1233,
+ "name": "EQ"
+ },
+ {
+ "begin": 1206,
+ "end": 1233,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "PUSH [tag]",
+ "value": "267"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1247,
+ "end": 1252,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1247,
+ "end": 1252,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1247,
+ "end": 1252,
+ "name": "REVERT"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "tag",
+ "value": "267"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 5112,
+ "end": 5118,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 5112,
+ "end": 5125,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 5127,
+ "end": 5136,
+ "name": "DUP2"
+ },
+ {
+ "begin": 276,
+ "end": 278,
+ "name": "PUSH",
+ "value": "32"
+ },
+ {
+ "begin": 2256,
+ "end": 2284,
+ "name": "DUP3"
+ },
+ {
+ "begin": 2256,
+ "end": 2284,
+ "name": "GT"
+ },
+ {
+ "begin": 2256,
+ "end": 2284,
+ "name": "DUP1"
+ },
+ {
+ "begin": 2256,
+ "end": 2322,
+ "name": "PUSH [tag]",
+ "value": "269"
+ },
+ {
+ "begin": 2256,
+ "end": 2322,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 2256,
+ "end": 2322,
+ "name": "POP"
+ },
+ {
+ "begin": 2312,
+ "end": 2322,
+ "name": "DUP2"
+ },
+ {
+ "begin": 2300,
+ "end": 2309,
+ "name": "DUP2"
+ },
+ {
+ "begin": 2300,
+ "end": 2322,
+ "name": "GT"
+ },
+ {
+ "begin": 2256,
+ "end": 2322,
+ "name": "tag",
+ "value": "269"
+ },
+ {
+ "begin": 2256,
+ "end": 2322,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2256,
+ "end": 2352,
+ "name": "DUP1"
+ },
+ {
+ "begin": 2256,
+ "end": 2352,
+ "name": "PUSH [tag]",
+ "value": "270"
+ },
+ {
+ "begin": 2256,
+ "end": 2352,
+ "name": "JUMPI"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 2338,
+ "end": 2352,
+ "name": "DUP1"
+ },
+ {
+ "begin": 2338,
+ "end": 2352,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2256,
+ "end": 2352,
+ "name": "tag",
+ "value": "270"
+ },
+ {
+ "begin": 2256,
+ "end": 2352,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2256,
+ "end": 2383,
+ "name": "DUP1"
+ },
+ {
+ "begin": 2256,
+ "end": 2383,
+ "name": "PUSH [tag]",
+ "value": "271"
+ },
+ {
+ "begin": 2256,
+ "end": 2383,
+ "name": "JUMPI"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 2368,
+ "end": 2383,
+ "name": "DUP2"
+ },
+ {
+ "begin": 2368,
+ "end": 2383,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2256,
+ "end": 2383,
+ "name": "tag",
+ "value": "271"
+ },
+ {
+ "begin": 2256,
+ "end": 2383,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2249,
+ "end": 2402,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2249,
+ "end": 2402,
+ "name": "PUSH [tag]",
+ "value": "272"
+ },
+ {
+ "begin": 2249,
+ "end": 2402,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 2397,
+ "end": 2402,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2397,
+ "end": 2402,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2397,
+ "end": 2402,
+ "name": "REVERT"
+ },
+ {
+ "begin": 2249,
+ "end": 2402,
+ "name": "tag",
+ "value": "272"
+ },
+ {
+ "begin": 2249,
+ "end": 2402,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 5152,
+ "end": 5160,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 5152,
+ "end": 5172,
+ "name": "DUP4"
+ },
+ {
+ "begin": 5152,
+ "end": 5172,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 5152,
+ "end": 5172,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 5182,
+ "end": 5210,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 5182,
+ "end": 5210,
+ "name": "DUP1"
+ },
+ {
+ "begin": 5182,
+ "end": 5210,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 5182,
+ "end": 5210,
+ "name": "DUP5"
+ },
+ {
+ "begin": 5182,
+ "end": 5210,
+ "name": "DUP2"
+ },
+ {
+ "begin": 5182,
+ "end": 5210,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 5182,
+ "end": 5210,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 5182,
+ "end": 5210,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 5182,
+ "end": 5210,
+ "name": "PUSH",
+ "value": "A3F1EE9126A074D9326C682F561767F710E927FAA811F7A99829D49DC421797A"
+ },
+ {
+ "begin": 5182,
+ "end": 5210,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 5182,
+ "end": 5210,
+ "name": "DUP2"
+ },
+ {
+ "begin": 5182,
+ "end": 5210,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 5182,
+ "end": 5210,
+ "name": "SUB"
+ },
+ {
+ "begin": 5182,
+ "end": 5210,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 5182,
+ "end": 5210,
+ "name": "ADD"
+ },
+ {
+ "begin": 5182,
+ "end": 5210,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 5182,
+ "end": 5210,
+ "name": "LOG1"
+ },
+ {
+ "begin": 2412,
+ "end": 2413,
+ "name": "tag",
+ "value": "273"
+ },
+ {
+ "begin": 2412,
+ "end": 2413,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1262,
+ "end": 1263,
+ "name": "tag",
+ "value": "268"
+ },
+ {
+ "begin": 1262,
+ "end": 1263,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1262,
+ "end": 1263,
+ "name": "POP"
+ },
+ {
+ "begin": 1262,
+ "end": 1263,
+ "name": "POP"
+ },
+ {
+ "begin": 5010,
+ "end": 5217,
+ "name": "tag",
+ "value": "266"
+ },
+ {
+ "begin": 5010,
+ "end": 5217,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 5010,
+ "end": 5217,
+ "name": "POP"
+ },
+ {
+ "begin": 5010,
+ "end": 5217,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 2593,
+ "end": 3052,
+ "name": "tag",
+ "value": "104"
+ },
+ {
+ "begin": 2593,
+ "end": 3052,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2676,
+ "end": 2686,
+ "name": "CALLER"
+ },
+ {
+ "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": 1440,
+ "end": 1454,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "AND"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1440,
+ "end": 1447,
+ "name": "PUSH",
+ "value": "2"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "SHA3"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "AND"
+ },
+ {
+ "begin": 1439,
+ "end": 1454,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1435,
+ "end": 1473,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1435,
+ "end": 1473,
+ "name": "PUSH [tag]",
+ "value": "275"
+ },
+ {
+ "begin": 1435,
+ "end": 1473,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1468,
+ "end": 1473,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1468,
+ "end": 1473,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1468,
+ "end": 1473,
+ "name": "REVERT"
+ },
+ {
+ "begin": 1435,
+ "end": 1473,
+ "name": "tag",
+ "value": "275"
+ },
+ {
+ "begin": 1435,
+ "end": 1473,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1558,
+ "end": 1570,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1558,
+ "end": 1585,
+ "name": "DUP3"
+ },
+ {
+ "begin": 1558,
+ "end": 1585,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1558,
+ "end": 1585,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1558,
+ "end": 1585,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1558,
+ "end": 1585,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1558,
+ "end": 1585,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1558,
+ "end": 1585,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1558,
+ "end": 1585,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 1558,
+ "end": 1585,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1558,
+ "end": 1585,
+ "name": "SHA3"
+ },
+ {
+ "begin": 1558,
+ "end": 1597,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 2714,
+ "end": 2727,
+ "name": "DUP3"
+ },
+ {
+ "begin": 2714,
+ "end": 2727,
+ "name": "SWAP1"
+ },
+ {
+ "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": 1558,
+ "end": 1597,
+ "name": "AND"
+ },
+ {
+ "begin": 1558,
+ "end": 1602,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1554,
+ "end": 1621,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1554,
+ "end": 1621,
+ "name": "PUSH [tag]",
+ "value": "277"
+ },
+ {
+ "begin": 1554,
+ "end": 1621,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1616,
+ "end": 1621,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1616,
+ "end": 1621,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1616,
+ "end": 1621,
+ "name": "REVERT"
+ },
+ {
+ "begin": 1554,
+ "end": 1621,
+ "name": "tag",
+ "value": "277"
+ },
+ {
+ "begin": 1554,
+ "end": 1621,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1863,
+ "end": 1891,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1863,
+ "end": 1891,
+ "name": "DUP4"
+ },
+ {
+ "begin": 1863,
+ "end": 1891,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1863,
+ "end": 1891,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1863,
+ "end": 1876,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 1863,
+ "end": 1891,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1863,
+ "end": 1891,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1863,
+ "end": 1891,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1863,
+ "end": 1891,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1863,
+ "end": 1891,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 1863,
+ "end": 1891,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1863,
+ "end": 1891,
+ "name": "DUP4"
+ },
+ {
+ "begin": 1863,
+ "end": 1891,
+ "name": "SHA3"
+ },
+ {
+ "begin": 2765,
+ "end": 2775,
+ "name": "CALLER"
+ },
+ {
+ "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": 1863,
+ "end": 1898,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1863,
+ "end": 1898,
+ "name": "AND"
+ },
+ {
+ "begin": 1863,
+ "end": 1898,
+ "name": "DUP6"
+ },
+ {
+ "begin": 1863,
+ "end": 1898,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1863,
+ "end": 1898,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 1863,
+ "end": 1898,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1863,
+ "end": 1898,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1863,
+ "end": 1898,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 1863,
+ "end": 1898,
+ "name": "SHA3"
+ },
+ {
+ "begin": 1863,
+ "end": 1898,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 1863,
+ "end": 1891,
+ "name": "DUP5"
+ },
+ {
+ "begin": 1863,
+ "end": 1891,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 2765,
+ "end": 2775,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1863,
+ "end": 1898,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": 1863,
+ "end": 1898,
+ "name": "AND"
+ },
+ {
+ "begin": 1859,
+ "end": 1917,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1859,
+ "end": 1917,
+ "name": "PUSH [tag]",
+ "value": "279"
+ },
+ {
+ "begin": 1859,
+ "end": 1917,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1912,
+ "end": 1917,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1912,
+ "end": 1917,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1912,
+ "end": 1917,
+ "name": "REVERT"
+ },
+ {
+ "begin": 1859,
+ "end": 1917,
+ "name": "tag",
+ "value": "279"
+ },
+ {
+ "begin": 1859,
+ "end": 1917,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2803,
+ "end": 2816,
+ "name": "DUP5"
+ },
+ {
+ "begin": 1185,
+ "end": 1211,
+ "name": "PUSH [tag]",
+ "value": "281"
+ },
+ {
+ "begin": 1197,
+ "end": 1210,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1185,
+ "end": 1196,
+ "name": "PUSH [tag]",
+ "value": "65"
+ },
+ {
+ "begin": 1185,
+ "end": 1211,
+ "name": "JUMP",
+ "value": "[in]"
+ },
+ {
+ "begin": 1185,
+ "end": 1211,
+ "name": "tag",
+ "value": "281"
+ },
+ {
+ "begin": 1185,
+ "end": 1211,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1184,
+ "end": 1211,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1176,
+ "end": 1212,
+ "name": "PUSH [tag]",
+ "value": "282"
+ },
+ {
+ "begin": 1176,
+ "end": 1212,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1176,
+ "end": 1212,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1176,
+ "end": 1212,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1176,
+ "end": 1212,
+ "name": "REVERT"
+ },
+ {
+ "begin": 1176,
+ "end": 1212,
+ "name": "tag",
+ "value": "282"
+ },
+ {
+ "begin": 1176,
+ "end": 1212,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2832,
+ "end": 2860,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2832,
+ "end": 2860,
+ "name": "DUP7"
+ },
+ {
+ "begin": 2832,
+ "end": 2860,
+ "name": "DUP2"
+ },
+ {
+ "begin": 2832,
+ "end": 2860,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 2875,
+ "end": 2879,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 2832,
+ "end": 2860,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 2832,
+ "end": 2860,
+ "name": "DUP2"
+ },
+ {
+ "begin": 2832,
+ "end": 2860,
+ "name": "DUP2"
+ },
+ {
+ "begin": 2832,
+ "end": 2860,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 2832,
+ "end": 2860,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 2832,
+ "end": 2860,
+ "name": "DUP1"
+ },
+ {
+ "begin": 2832,
+ "end": 2860,
+ "name": "DUP5"
+ },
+ {
+ "begin": 2832,
+ "end": 2860,
+ "name": "SHA3"
+ },
+ {
+ "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": 2861,
+ "end": 2871,
+ "name": "CALLER"
+ },
+ {
+ "begin": 2832,
+ "end": 2872,
+ "name": "AND"
+ },
+ {
+ "begin": 2832,
+ "end": 2872,
+ "name": "DUP1"
+ },
+ {
+ "begin": 2832,
+ "end": 2872,
+ "name": "DUP7"
+ },
+ {
+ "begin": 2832,
+ "end": 2872,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 2832,
+ "end": 2872,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 2832,
+ "end": 2872,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 2832,
+ "end": 2872,
+ "name": "DUP1"
+ },
+ {
+ "begin": 2832,
+ "end": 2872,
+ "name": "DUP5"
+ },
+ {
+ "begin": 2832,
+ "end": 2872,
+ "name": "SHA3"
+ },
+ {
+ "begin": 2832,
+ "end": 2879,
+ "name": "DUP1"
+ },
+ {
+ "begin": 2832,
+ "end": 2879,
+ "name": "SLOAD"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 2832,
+ "end": 2879,
+ "name": "AND"
+ },
+ {
+ "begin": 2832,
+ "end": 2879,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 2832,
+ "end": 2879,
+ "name": "SWAP4"
+ },
+ {
+ "begin": 2832,
+ "end": 2879,
+ "name": "OR"
+ },
+ {
+ "begin": 2832,
+ "end": 2879,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 2832,
+ "end": 2879,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 2832,
+ "end": 2879,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 2889,
+ "end": 2928,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 2889,
+ "end": 2928,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 2846,
+ "end": 2859,
+ "name": "DUP9"
+ },
+ {
+ "begin": 2846,
+ "end": 2859,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 2889,
+ "end": 2928,
+ "name": "PUSH",
+ "value": "4A504A94899432A9846E1AA406DCEB1BCFD538BB839071D49D1E5E23F5BE30EF"
+ },
+ {
+ "begin": 2889,
+ "end": 2928,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 2889,
+ "end": 2928,
+ "name": "LOG3"
+ },
+ {
+ "begin": 2942,
+ "end": 2968,
+ "name": "PUSH [tag]",
+ "value": "284"
+ },
+ {
+ "begin": 2954,
+ "end": 2967,
+ "name": "DUP7"
+ },
+ {
+ "begin": 2942,
+ "end": 2953,
+ "name": "PUSH [tag]",
+ "value": "65"
+ },
+ {
+ "begin": 2942,
+ "end": 2968,
+ "name": "JUMP",
+ "value": "[in]"
+ },
+ {
+ "begin": 2942,
+ "end": 2968,
+ "name": "tag",
+ "value": "284"
+ },
+ {
+ "begin": 2942,
+ "end": 2968,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2938,
+ "end": 3046,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2938,
+ "end": 3046,
+ "name": "PUSH [tag]",
+ "value": "153"
+ },
+ {
+ "begin": 2938,
+ "end": 3046,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 2984,
+ "end": 3035,
+ "name": "PUSH [tag]",
+ "value": "153"
+ },
+ {
+ "begin": 3004,
+ "end": 3017,
+ "name": "DUP7"
+ },
+ {
+ "begin": 3019,
+ "end": 3034,
+ "name": "TIMESTAMP"
+ },
+ {
+ "begin": 2984,
+ "end": 3003,
+ "name": "PUSH [tag]",
+ "value": "287"
+ },
+ {
+ "begin": 2984,
+ "end": 3035,
+ "name": "JUMP",
+ "value": "[in]"
+ },
+ {
+ "begin": 2984,
+ "end": 3035,
+ "name": "tag",
+ "value": "286"
+ },
+ {
+ "begin": 2984,
+ "end": 3035,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2938,
+ "end": 3046,
+ "name": "tag",
+ "value": "285"
+ },
+ {
+ "begin": 2938,
+ "end": 3046,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1222,
+ "end": 1223,
+ "name": "tag",
+ "value": "283"
+ },
+ {
+ "begin": 1222,
+ "end": 1223,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1927,
+ "end": 1928,
+ "name": "tag",
+ "value": "280"
+ },
+ {
+ "begin": 1927,
+ "end": 1928,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1927,
+ "end": 1928,
+ "name": "POP"
+ },
+ {
+ "begin": 1631,
+ "end": 1632,
+ "name": "tag",
+ "value": "278"
+ },
+ {
+ "begin": 1631,
+ "end": 1632,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1631,
+ "end": 1632,
+ "name": "POP"
+ },
+ {
+ "begin": 1631,
+ "end": 1632,
+ "name": "POP"
+ },
+ {
+ "begin": 1483,
+ "end": 1484,
+ "name": "tag",
+ "value": "276"
+ },
+ {
+ "begin": 1483,
+ "end": 1484,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1483,
+ "end": 1484,
+ "name": "POP"
+ },
+ {
+ "begin": 2593,
+ "end": 3052,
+ "name": "tag",
+ "value": "274"
+ },
+ {
+ "begin": 2593,
+ "end": 3052,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2593,
+ "end": 3052,
+ "name": "POP"
+ },
+ {
+ "begin": 2593,
+ "end": 3052,
+ "name": "POP"
+ },
+ {
+ "begin": 2593,
+ "end": 3052,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "tag",
+ "value": "107"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 5580,
+ "end": 5598,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 5630,
+ "end": 5670,
+ "name": "PUSH [tag]",
+ "value": "289"
+ },
+ {
+ "begin": 5645,
+ "end": 5656,
+ "name": "DUP5"
+ },
+ {
+ "begin": 5658,
+ "end": 5663,
+ "name": "DUP5"
+ },
+ {
+ "begin": 5665,
+ "end": 5669,
+ "name": "DUP5"
+ },
+ {
+ "begin": 5630,
+ "end": 5644,
+ "name": "PUSH [tag]",
+ "value": "290"
+ },
+ {
+ "begin": 5630,
+ "end": 5670,
+ "name": "JUMP",
+ "value": "[in]"
+ },
+ {
+ "begin": 5630,
+ "end": 5670,
+ "name": "tag",
+ "value": "289"
+ },
+ {
+ "begin": 5630,
+ "end": 5670,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 5614,
+ "end": 5670,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 5614,
+ "end": 5670,
+ "name": "POP"
+ },
+ {
+ "begin": 5680,
+ "end": 5713,
+ "name": "PUSH [tag]",
+ "value": "291"
+ },
+ {
+ "begin": 5699,
+ "end": 5712,
+ "name": "DUP2"
+ },
+ {
+ "begin": 5680,
+ "end": 5698,
+ "name": "PUSH [tag]",
+ "value": "104"
+ },
+ {
+ "begin": 5680,
+ "end": 5713,
+ "name": "JUMP",
+ "value": "[in]"
+ },
+ {
+ "begin": 5680,
+ "end": 5713,
+ "name": "tag",
+ "value": "291"
+ },
+ {
+ "begin": 5680,
+ "end": 5713,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "tag",
+ "value": "288"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "SWAP4"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "POP"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "POP"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "POP"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "tag",
+ "value": "110"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "PUSH",
+ "value": "7"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "SHA3"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "tag",
+ "value": "113"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 276,
+ "end": 278,
+ "name": "PUSH",
+ "value": "32"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "DUP2"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "tag",
+ "value": "116"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "DUP2"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "tag",
+ "value": "119"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 4561,
+ "end": 4567,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1228,
+ "end": 1232,
+ "name": "ADDRESS"
+ },
+ {
+ "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": 1206,
+ "end": 1233,
+ "name": "AND"
+ },
+ {
+ "begin": 1206,
+ "end": 1216,
+ "name": "CALLER"
+ },
+ {
+ "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": 1206,
+ "end": 1233,
+ "name": "AND"
+ },
+ {
+ "begin": 1206,
+ "end": 1233,
+ "name": "EQ"
+ },
+ {
+ "begin": 1206,
+ "end": 1233,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "PUSH [tag]",
+ "value": "293"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1247,
+ "end": 1252,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1247,
+ "end": 1252,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1247,
+ "end": 1252,
+ "name": "REVERT"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "tag",
+ "value": "293"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "JUMPDEST"
+ },
+ {
+ "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": 1440,
+ "end": 1454,
+ "name": "DUP4"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "AND"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1440,
+ "end": 1447,
+ "name": "PUSH",
+ "value": "2"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "SHA3"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 4499,
+ "end": 4504,
+ "name": "DUP4"
+ },
+ {
+ "begin": 4499,
+ "end": 4504,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "AND"
+ },
+ {
+ "begin": 1439,
+ "end": 1454,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1435,
+ "end": 1473,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1435,
+ "end": 1473,
+ "name": "PUSH [tag]",
+ "value": "295"
+ },
+ {
+ "begin": 1435,
+ "end": 1473,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1468,
+ "end": 1473,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1468,
+ "end": 1473,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1468,
+ "end": 1473,
+ "name": "REVERT"
+ },
+ {
+ "begin": 1435,
+ "end": 1473,
+ "name": "tag",
+ "value": "295"
+ },
+ {
+ "begin": 1435,
+ "end": 1473,
+ "name": "JUMPDEST"
+ },
+ {
+ "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": 1332,
+ "end": 1346,
+ "name": "DUP4"
+ },
+ {
+ "begin": 1332,
+ "end": 1346,
+ "name": "AND"
+ },
+ {
+ "begin": 1332,
+ "end": 1346,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1332,
+ "end": 1346,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1332,
+ "end": 1346,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1332,
+ "end": 1346,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1332,
+ "end": 1339,
+ "name": "PUSH",
+ "value": "2"
+ },
+ {
+ "begin": 1332,
+ "end": 1346,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1332,
+ "end": 1346,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1332,
+ "end": 1346,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 1332,
+ "end": 1346,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1332,
+ "end": 1346,
+ "name": "SHA3"
+ },
+ {
+ "begin": 1332,
+ "end": 1346,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 4532,
+ "end": 4540,
+ "name": "DUP4"
+ },
+ {
+ "begin": 4532,
+ "end": 4540,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1332,
+ "end": 1346,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": 1332,
+ "end": 1346,
+ "name": "AND"
+ },
+ {
+ "begin": 1328,
+ "end": 1365,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1328,
+ "end": 1365,
+ "name": "PUSH [tag]",
+ "value": "297"
+ },
+ {
+ "begin": 1328,
+ "end": 1365,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1360,
+ "end": 1365,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1360,
+ "end": 1365,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1360,
+ "end": 1365,
+ "name": "REVERT"
+ },
+ {
+ "begin": 1328,
+ "end": 1365,
+ "name": "tag",
+ "value": "297"
+ },
+ {
+ "begin": 1328,
+ "end": 1365,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 4568,
+ "end": 4569,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 4561,
+ "end": 4569,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 4561,
+ "end": 4569,
+ "name": "POP"
+ },
+ {
+ "begin": 4556,
+ "end": 4705,
+ "name": "tag",
+ "value": "299"
+ },
+ {
+ "begin": 4556,
+ "end": 4705,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 4573,
+ "end": 4579,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 4573,
+ "end": 4586,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 4571,
+ "end": 4586,
+ "name": "DUP4"
+ },
+ {
+ "begin": 4571,
+ "end": 4586,
+ "name": "LT"
+ },
+ {
+ "begin": 4556,
+ "end": 4705,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 4556,
+ "end": 4705,
+ "name": "PUSH [tag]",
+ "value": "300"
+ },
+ {
+ "begin": 4556,
+ "end": 4705,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 4622,
+ "end": 4627,
+ "name": "DUP5"
+ },
+ {
+ "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": 4609,
+ "end": 4627,
+ "name": "AND"
+ },
+ {
+ "begin": 4609,
+ "end": 4615,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 4616,
+ "end": 4617,
+ "name": "DUP5"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "DUP2"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "DUP2"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "LT"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "PUSH [tag]",
+ "value": "302"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "INVALID"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "tag",
+ "value": "302"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "SHA3"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "ADD"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "tag",
+ "value": "303"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "PUSH",
+ "value": "100"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "EXP"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "DIV"
+ },
+ {
+ "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": 4609,
+ "end": 4618,
+ "name": "AND"
+ },
+ {
+ "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": 4609,
+ "end": 4627,
+ "name": "AND"
+ },
+ {
+ "begin": 4609,
+ "end": 4627,
+ "name": "EQ"
+ },
+ {
+ "begin": 4605,
+ "end": 4705,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 4605,
+ "end": 4705,
+ "name": "PUSH [tag]",
+ "value": "304"
+ },
+ {
+ "begin": 4605,
+ "end": 4705,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 4659,
+ "end": 4667,
+ "name": "DUP4"
+ },
+ {
+ "begin": 4647,
+ "end": 4653,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 4654,
+ "end": 4655,
+ "name": "DUP5"
+ },
+ {
+ "begin": 4647,
+ "end": 4656,
+ "name": "DUP2"
+ },
+ {
+ "begin": 4647,
+ "end": 4656,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 4647,
+ "end": 4656,
+ "name": "DUP2"
+ },
+ {
+ "begin": 4647,
+ "end": 4656,
+ "name": "LT"
+ },
+ {
+ "begin": 4647,
+ "end": 4656,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 4647,
+ "end": 4656,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 4647,
+ "end": 4656,
+ "name": "PUSH [tag]",
+ "value": "305"
+ },
+ {
+ "begin": 4647,
+ "end": 4656,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 4647,
+ "end": 4656,
+ "name": "INVALID"
+ },
+ {
+ "begin": 4647,
+ "end": 4656,
+ "name": "tag",
+ "value": "305"
+ },
+ {
+ "begin": 4647,
+ "end": 4656,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 4647,
+ "end": 4656,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4647,
+ "end": 4656,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 4647,
+ "end": 4656,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 4647,
+ "end": 4656,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 4647,
+ "end": 4656,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 4647,
+ "end": 4656,
+ "name": "SHA3"
+ },
+ {
+ "begin": 4647,
+ "end": 4656,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4647,
+ "end": 4656,
+ "name": "ADD"
+ },
+ {
+ "begin": 4647,
+ "end": 4656,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 4647,
+ "end": 4656,
+ "name": "tag",
+ "value": "306"
+ },
+ {
+ "begin": 4647,
+ "end": 4656,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 4647,
+ "end": 4667,
+ "name": "PUSH",
+ "value": "100"
+ },
+ {
+ "begin": 4647,
+ "end": 4667,
+ "name": "EXP"
+ },
+ {
+ "begin": 4647,
+ "end": 4667,
+ "name": "DUP2"
+ },
+ {
+ "begin": 4647,
+ "end": 4667,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 4647,
+ "end": 4667,
+ "name": "DUP2"
+ },
+ {
+ "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": 4647,
+ "end": 4667,
+ "name": "MUL"
+ },
+ {
+ "begin": 4647,
+ "end": 4667,
+ "name": "NOT"
+ },
+ {
+ "begin": 4647,
+ "end": 4667,
+ "name": "AND"
+ },
+ {
+ "begin": 4647,
+ "end": 4667,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4647,
+ "end": 4667,
+ "name": "DUP4"
+ },
+ {
+ "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": 4647,
+ "end": 4667,
+ "name": "AND"
+ },
+ {
+ "begin": 4647,
+ "end": 4667,
+ "name": "MUL"
+ },
+ {
+ "begin": 4647,
+ "end": 4667,
+ "name": "OR"
+ },
+ {
+ "begin": 4647,
+ "end": 4667,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4647,
+ "end": 4667,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 4647,
+ "end": 4667,
+ "name": "POP"
+ },
+ {
+ "begin": 4685,
+ "end": 4690,
+ "name": "PUSH [tag]",
+ "value": "300"
+ },
+ {
+ "begin": 4685,
+ "end": 4690,
+ "name": "JUMP"
+ },
+ {
+ "begin": 4605,
+ "end": 4705,
+ "name": "tag",
+ "value": "304"
+ },
+ {
+ "begin": 4605,
+ "end": 4705,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 4556,
+ "end": 4705,
+ "name": "tag",
+ "value": "301"
+ },
+ {
+ "begin": 4556,
+ "end": 4705,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 4588,
+ "end": 4591,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 4588,
+ "end": 4591,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4588,
+ "end": 4591,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 4588,
+ "end": 4591,
+ "name": "ADD"
+ },
+ {
+ "begin": 4588,
+ "end": 4591,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 4556,
+ "end": 4705,
+ "name": "PUSH [tag]",
+ "value": "299"
+ },
+ {
+ "begin": 4556,
+ "end": 4705,
+ "name": "JUMP"
+ },
+ {
+ "begin": 4556,
+ "end": 4705,
+ "name": "tag",
+ "value": "300"
+ },
+ {
+ "begin": 4556,
+ "end": 4705,
+ "name": "JUMPDEST"
+ },
+ {
+ "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": 4714,
+ "end": 4728,
+ "name": "DUP1"
+ },
+ {
+ "begin": 4714,
+ "end": 4728,
+ "name": "DUP7"
+ },
+ {
+ "begin": 4714,
+ "end": 4728,
+ "name": "AND"
+ },
+ {
+ "begin": 4731,
+ "end": 4736,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 4714,
+ "end": 4728,
+ "name": "DUP2"
+ },
+ {
+ "begin": 4714,
+ "end": 4728,
+ "name": "DUP2"
+ },
+ {
+ "begin": 4714,
+ "end": 4728,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 4714,
+ "end": 4721,
+ "name": "PUSH",
+ "value": "2"
+ },
+ {
+ "begin": 4714,
+ "end": 4728,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 4714,
+ "end": 4728,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 4714,
+ "end": 4728,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 4714,
+ "end": 4728,
+ "name": "DUP1"
+ },
+ {
+ "begin": 4714,
+ "end": 4728,
+ "name": "DUP3"
+ },
+ {
+ "begin": 4714,
+ "end": 4728,
+ "name": "SHA3"
+ },
+ {
+ "begin": 4714,
+ "end": 4736,
+ "name": "DUP1"
+ },
+ {
+ "begin": 4714,
+ "end": 4736,
+ "name": "SLOAD"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 4714,
+ "end": 4736,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4714,
+ "end": 4736,
+ "name": "DUP2"
+ },
+ {
+ "begin": 4714,
+ "end": 4736,
+ "name": "AND"
+ },
+ {
+ "begin": 4714,
+ "end": 4736,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4714,
+ "end": 4736,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 4714,
+ "end": 4736,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 4746,
+ "end": 4763,
+ "name": "SWAP4"
+ },
+ {
+ "begin": 4746,
+ "end": 4763,
+ "name": "DUP9"
+ },
+ {
+ "begin": 4746,
+ "end": 4763,
+ "name": "AND"
+ },
+ {
+ "begin": 4746,
+ "end": 4763,
+ "name": "DUP3"
+ },
+ {
+ "begin": 4746,
+ "end": 4763,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 4746,
+ "end": 4763,
+ "name": "DUP1"
+ },
+ {
+ "begin": 4746,
+ "end": 4763,
+ "name": "DUP3"
+ },
+ {
+ "begin": 4746,
+ "end": 4763,
+ "name": "SHA3"
+ },
+ {
+ "begin": 4746,
+ "end": 4770,
+ "name": "DUP1"
+ },
+ {
+ "begin": 4746,
+ "end": 4770,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 4746,
+ "end": 4770,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4746,
+ "end": 4770,
+ "name": "SWAP5"
+ },
+ {
+ "begin": 4746,
+ "end": 4770,
+ "name": "AND"
+ },
+ {
+ "begin": 4714,
+ "end": 4736,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 4746,
+ "end": 4770,
+ "name": "OR"
+ },
+ {
+ "begin": 4746,
+ "end": 4770,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4746,
+ "end": 4770,
+ "name": "SWAP4"
+ },
+ {
+ "begin": 4746,
+ "end": 4770,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 4780,
+ "end": 4799,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 4780,
+ "end": 4799,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 4714,
+ "end": 4728,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4714,
+ "end": 4728,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 4780,
+ "end": 4799,
+ "name": "PUSH",
+ "value": "8001553A916EF2F495D26A907CC54D96ED840D7BDA71E73194BF5A9DF7A76B90"
+ },
+ {
+ "begin": 4780,
+ "end": 4799,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 4780,
+ "end": 4799,
+ "name": "LOG2"
+ },
+ {
+ "begin": 4809,
+ "end": 4832,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 4809,
+ "end": 4832,
+ "name": "MLOAD"
+ },
+ {
+ "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": 4809,
+ "end": 4832,
+ "name": "DUP6"
+ },
+ {
+ "begin": 4809,
+ "end": 4832,
+ "name": "AND"
+ },
+ {
+ "begin": 4809,
+ "end": 4832,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4809,
+ "end": 4832,
+ "name": "PUSH",
+ "value": "F39E6E1EB0EDCF53C221607B54B00CD28F3196FED0A24994DC308B8F611B682D"
+ },
+ {
+ "begin": 4809,
+ "end": 4832,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4809,
+ "end": 4832,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 4809,
+ "end": 4832,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4809,
+ "end": 4832,
+ "name": "LOG2"
+ },
+ {
+ "begin": 1375,
+ "end": 1376,
+ "name": "tag",
+ "value": "298"
+ },
+ {
+ "begin": 1375,
+ "end": 1376,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1483,
+ "end": 1484,
+ "name": "tag",
+ "value": "296"
+ },
+ {
+ "begin": 1483,
+ "end": 1484,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1483,
+ "end": 1484,
+ "name": "POP"
+ },
+ {
+ "begin": 1262,
+ "end": 1263,
+ "name": "tag",
+ "value": "294"
+ },
+ {
+ "begin": 1262,
+ "end": 1263,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1262,
+ "end": 1263,
+ "name": "POP"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "tag",
+ "value": "292"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "POP"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "POP"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "POP"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 3622,
+ "end": 4094,
+ "name": "tag",
+ "value": "122"
+ },
+ {
+ "begin": 3622,
+ "end": 4094,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3808,
+ "end": 3830,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "SHA3"
+ },
+ {
+ "begin": 1996,
+ "end": 2032,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 1996,
+ "end": 2032,
+ "name": "ADD"
+ },
+ {
+ "begin": 1996,
+ "end": 2032,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 3705,
+ "end": 3718,
+ "name": "DUP3"
+ },
+ {
+ "begin": 3705,
+ "end": 3718,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1996,
+ "end": 2032,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": 1996,
+ "end": 2032,
+ "name": "AND"
+ },
+ {
+ "begin": 1992,
+ "end": 2051,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1992,
+ "end": 2051,
+ "name": "PUSH [tag]",
+ "value": "308"
+ },
+ {
+ "begin": 1992,
+ "end": 2051,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 2046,
+ "end": 2051,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2046,
+ "end": 2051,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2046,
+ "end": 2051,
+ "name": "REVERT"
+ },
+ {
+ "begin": 1992,
+ "end": 2051,
+ "name": "tag",
+ "value": "308"
+ },
+ {
+ "begin": 1992,
+ "end": 2051,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3743,
+ "end": 3756,
+ "name": "DUP3"
+ },
+ {
+ "begin": 1298,
+ "end": 1324,
+ "name": "PUSH [tag]",
+ "value": "310"
+ },
+ {
+ "begin": 1310,
+ "end": 1323,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1298,
+ "end": 1309,
+ "name": "PUSH [tag]",
+ "value": "65"
+ },
+ {
+ "begin": 1298,
+ "end": 1324,
+ "name": "JUMP",
+ "value": "[in]"
+ },
+ {
+ "begin": 1298,
+ "end": 1324,
+ "name": "tag",
+ "value": "310"
+ },
+ {
+ "begin": 1298,
+ "end": 1324,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1290,
+ "end": 1325,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1290,
+ "end": 1325,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1290,
+ "end": 1325,
+ "name": "PUSH [tag]",
+ "value": "311"
+ },
+ {
+ "begin": 1290,
+ "end": 1325,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1290,
+ "end": 1325,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1290,
+ "end": 1325,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1290,
+ "end": 1325,
+ "name": "REVERT"
+ },
+ {
+ "begin": 1290,
+ "end": 1325,
+ "name": "tag",
+ "value": "311"
+ },
+ {
+ "begin": 1290,
+ "end": 1325,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1463,
+ "end": 1480,
+ "name": "PUSH",
+ "value": "6"
+ },
+ {
+ "begin": 1463,
+ "end": 1480,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 1428,
+ "end": 1460,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1428,
+ "end": 1460,
+ "name": "DUP6"
+ },
+ {
+ "begin": 1428,
+ "end": 1460,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1428,
+ "end": 1460,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1428,
+ "end": 1445,
+ "name": "PUSH",
+ "value": "7"
+ },
+ {
+ "begin": 1428,
+ "end": 1460,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1428,
+ "end": 1460,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1428,
+ "end": 1460,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 1428,
+ "end": 1460,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1428,
+ "end": 1460,
+ "name": "SHA3"
+ },
+ {
+ "begin": 1428,
+ "end": 1460,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 3779,
+ "end": 3792,
+ "name": "DUP6"
+ },
+ {
+ "begin": 3779,
+ "end": 3792,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 1428,
+ "end": 1480,
+ "name": "ADD"
+ },
+ {
+ "begin": 1409,
+ "end": 1424,
+ "name": "TIMESTAMP"
+ },
+ {
+ "begin": 1409,
+ "end": 1480,
+ "name": "LT"
+ },
+ {
+ "begin": 1409,
+ "end": 1480,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1401,
+ "end": 1481,
+ "name": "PUSH [tag]",
+ "value": "313"
+ },
+ {
+ "begin": 1401,
+ "end": 1481,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1401,
+ "end": 1481,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1401,
+ "end": 1481,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1401,
+ "end": 1481,
+ "name": "REVERT"
+ },
+ {
+ "begin": 1401,
+ "end": 1481,
+ "name": "tag",
+ "value": "313"
+ },
+ {
+ "begin": 1401,
+ "end": 1481,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3833,
+ "end": 3845,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3833,
+ "end": 3860,
+ "name": "DUP6"
+ },
+ {
+ "begin": 3833,
+ "end": 3860,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3833,
+ "end": 3860,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3833,
+ "end": 3860,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 3833,
+ "end": 3860,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3833,
+ "end": 3860,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3833,
+ "end": 3860,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3833,
+ "end": 3860,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 3833,
+ "end": 3860,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3833,
+ "end": 3860,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3833,
+ "end": 3860,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3833,
+ "end": 3860,
+ "name": "SHA3"
+ },
+ {
+ "begin": 3870,
+ "end": 3881,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 3870,
+ "end": 3881,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3870,
+ "end": 3881,
+ "name": "ADD"
+ },
+ {
+ "begin": 3870,
+ "end": 3888,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3870,
+ "end": 3888,
+ "name": "SLOAD"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 3870,
+ "end": 3888,
+ "name": "AND"
+ },
+ {
+ "begin": 3884,
+ "end": 3888,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 3870,
+ "end": 3888,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3870,
+ "end": 3888,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3870,
+ "end": 3888,
+ "name": "OR"
+ },
+ {
+ "begin": 3870,
+ "end": 3888,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3870,
+ "end": 3888,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3870,
+ "end": 3888,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 3902,
+ "end": 3916,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3902,
+ "end": 3916,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 3928,
+ "end": 3936,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3928,
+ "end": 3936,
+ "name": "DUP4"
+ },
+ {
+ "begin": 3928,
+ "end": 3936,
+ "name": "ADD"
+ },
+ {
+ "begin": 3928,
+ "end": 3936,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SWAP4"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 3938,
+ "end": 3945,
+ "name": "PUSH",
+ "value": "2"
+ },
+ {
+ "begin": 3938,
+ "end": 3945,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3938,
+ "end": 3945,
+ "name": "DUP6"
+ },
+ {
+ "begin": 3938,
+ "end": 3945,
+ "name": "ADD"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 3833,
+ "end": 3860,
+ "name": "SWAP6"
+ },
+ {
+ "begin": 3833,
+ "end": 3860,
+ "name": "SWAP11"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "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": 3902,
+ "end": 3916,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3902,
+ "end": 3916,
+ "name": "SWAP4"
+ },
+ {
+ "begin": 3902,
+ "end": 3916,
+ "name": "AND"
+ },
+ {
+ "begin": 3902,
+ "end": 3916,
+ "name": "SWAP6"
+ },
+ {
+ "begin": 3928,
+ "end": 3936,
+ "name": "SWAP5"
+ },
+ {
+ "begin": 3938,
+ "end": 3945,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 3938,
+ "end": 3945,
+ "name": "SWAP4"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "DUP4"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 3938,
+ "end": 3945,
+ "name": "DUP6"
+ },
+ {
+ "begin": 3938,
+ "end": 3945,
+ "name": "SWAP3"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "DUP4"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "AND"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3870,
+ "end": 3888,
+ "name": "PUSH",
+ "value": "100"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "MUL"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "ADD"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "AND"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "DIV"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "PUSH [tag]",
+ "value": "315"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "PUSH",
+ "value": "1F"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "LT"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "PUSH [tag]",
+ "value": "316"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "PUSH",
+ "value": "100"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "DUP4"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "DIV"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "MUL"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "DUP4"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "ADD"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "PUSH [tag]",
+ "value": "315"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "JUMP"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "tag",
+ "value": "316"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "DUP3"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "ADD"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SHA3"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "tag",
+ "value": "317"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "ADD"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "ADD"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "DUP4"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "GT"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "PUSH [tag]",
+ "value": "317"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "DUP3"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SUB"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "PUSH",
+ "value": "1F"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "AND"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "DUP3"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "ADD"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "tag",
+ "value": "315"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "POP"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "POP"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "POP"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "POP"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "DUP4"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SUB"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "DUP6"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "DUP8"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "PUSH",
+ "value": "8502"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "GAS"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SUB"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "CALL"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "POP"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "POP"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "POP"
+ },
+ {
+ "begin": 3898,
+ "end": 4088,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3898,
+ "end": 4088,
+ "name": "PUSH [tag]",
+ "value": "318"
+ },
+ {
+ "begin": 3898,
+ "end": 4088,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 3960,
+ "end": 3984,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 3960,
+ "end": 3984,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 3970,
+ "end": 3983,
+ "name": "DUP6"
+ },
+ {
+ "begin": 3970,
+ "end": 3983,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3960,
+ "end": 3984,
+ "name": "PUSH",
+ "value": "33E13ECB54C3076D8E8BB8C2881800A4D972B792045FFAE98FDF46DF365FED75"
+ },
+ {
+ "begin": 3960,
+ "end": 3984,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3960,
+ "end": 3984,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3960,
+ "end": 3984,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3960,
+ "end": 3984,
+ "name": "LOG2"
+ },
+ {
+ "begin": 3898,
+ "end": 4088,
+ "name": "PUSH [tag]",
+ "value": "148"
+ },
+ {
+ "begin": 3898,
+ "end": 4088,
+ "name": "JUMP"
+ },
+ {
+ "begin": 3898,
+ "end": 4088,
+ "name": "tag",
+ "value": "318"
+ },
+ {
+ "begin": 3898,
+ "end": 4088,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 4013,
+ "end": 4044,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 4013,
+ "end": 4044,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 4030,
+ "end": 4043,
+ "name": "DUP6"
+ },
+ {
+ "begin": 4030,
+ "end": 4043,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4013,
+ "end": 4044,
+ "name": "PUSH",
+ "value": "526441BB6C1ABA3C9A4A6CA1D6545DA9C2333C8C48343EF398EB858D72B79236"
+ },
+ {
+ "begin": 4013,
+ "end": 4044,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4013,
+ "end": 4044,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 4013,
+ "end": 4044,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4013,
+ "end": 4044,
+ "name": "LOG2"
+ },
+ {
+ "begin": 4058,
+ "end": 4069,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 4058,
+ "end": 4069,
+ "name": "DUP5"
+ },
+ {
+ "begin": 4058,
+ "end": 4069,
+ "name": "ADD"
+ },
+ {
+ "begin": 4058,
+ "end": 4077,
+ "name": "DUP1"
+ },
+ {
+ "begin": 4058,
+ "end": 4077,
+ "name": "SLOAD"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 4058,
+ "end": 4077,
+ "name": "AND"
+ },
+ {
+ "begin": 4058,
+ "end": 4077,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4058,
+ "end": 4077,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 3898,
+ "end": 4088,
+ "name": "tag",
+ "value": "319"
+ },
+ {
+ "begin": 3898,
+ "end": 4088,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1491,
+ "end": 1492,
+ "name": "tag",
+ "value": "314"
+ },
+ {
+ "begin": 1491,
+ "end": 1492,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1335,
+ "end": 1336,
+ "name": "tag",
+ "value": "312"
+ },
+ {
+ "begin": 1335,
+ "end": 1336,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1335,
+ "end": 1336,
+ "name": "POP"
+ },
+ {
+ "begin": 2061,
+ "end": 2062,
+ "name": "tag",
+ "value": "309"
+ },
+ {
+ "begin": 2061,
+ "end": 2062,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2061,
+ "end": 2062,
+ "name": "POP"
+ },
+ {
+ "begin": 3622,
+ "end": 4094,
+ "name": "tag",
+ "value": "307"
+ },
+ {
+ "begin": 3622,
+ "end": 4094,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3622,
+ "end": 4094,
+ "name": "POP"
+ },
+ {
+ "begin": 3622,
+ "end": 4094,
+ "name": "POP"
+ },
+ {
+ "begin": 3622,
+ "end": 4094,
+ "name": "POP"
+ },
+ {
+ "begin": 3622,
+ "end": 4094,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 4135,
+ "end": 4606,
+ "name": "tag",
+ "value": "165"
+ },
+ {
+ "begin": 4135,
+ "end": 4606,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 4242,
+ "end": 4255,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 4291,
+ "end": 4296,
+ "name": "DUP2"
+ },
+ {
+ "begin": 4299,
+ "end": 4300,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 4291,
+ "end": 4300,
+ "name": "ADD"
+ },
+ {
+ "begin": 4279,
+ "end": 4280,
+ "name": "DUP4"
+ },
+ {
+ "begin": 4279,
+ "end": 4287,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 4279,
+ "end": 4300,
+ "name": "LT"
+ },
+ {
+ "begin": 4279,
+ "end": 4300,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 4271,
+ "end": 4301,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 4271,
+ "end": 4301,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 4271,
+ "end": 4301,
+ "name": "PUSH [tag]",
+ "value": "321"
+ },
+ {
+ "begin": 4271,
+ "end": 4301,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 4271,
+ "end": 4301,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 4271,
+ "end": 4301,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 4271,
+ "end": 4301,
+ "name": "REVERT"
+ },
+ {
+ "begin": 4271,
+ "end": 4301,
+ "name": "tag",
+ "value": "321"
+ },
+ {
+ "begin": 4271,
+ "end": 4301,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 4357,
+ "end": 4359,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 4350,
+ "end": 4353,
+ "name": "DUP3"
+ },
+ {
+ "begin": 4350,
+ "end": 4353,
+ "name": "ADD"
+ },
+ {
+ "begin": 4344,
+ "end": 4349,
+ "name": "MLOAD"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "E0"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "2"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "EXP"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "SUB"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 4488,
+ "end": 4491,
+ "name": "AND"
+ },
+ {
+ "begin": 4135,
+ "end": 4606,
+ "name": "tag",
+ "value": "320"
+ },
+ {
+ "begin": 4135,
+ "end": 4606,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 4135,
+ "end": 4606,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 4135,
+ "end": 4606,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 4135,
+ "end": 4606,
+ "name": "POP"
+ },
+ {
+ "begin": 4135,
+ "end": 4606,
+ "name": "POP"
+ },
+ {
+ "begin": 4135,
+ "end": 4606,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 4204,
+ "end": 4427,
+ "name": "tag",
+ "value": "287"
+ },
+ {
+ "begin": 4204,
+ "end": 4427,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 4307,
+ "end": 4339,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 4307,
+ "end": 4339,
+ "name": "DUP3"
+ },
+ {
+ "begin": 4307,
+ "end": 4339,
+ "name": "DUP2"
+ },
+ {
+ "begin": 4307,
+ "end": 4339,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 4307,
+ "end": 4324,
+ "name": "PUSH",
+ "value": "7"
+ },
+ {
+ "begin": 4307,
+ "end": 4339,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 4307,
+ "end": 4339,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4307,
+ "end": 4339,
+ "name": "DUP2"
+ },
+ {
+ "begin": 4307,
+ "end": 4339,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 4307,
+ "end": 4339,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 4307,
+ "end": 4339,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 4307,
+ "end": 4339,
+ "name": "DUP3"
+ },
+ {
+ "begin": 4307,
+ "end": 4339,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4307,
+ "end": 4339,
+ "name": "SHA3"
+ },
+ {
+ "begin": 4307,
+ "end": 4358,
+ "name": "DUP4"
+ },
+ {
+ "begin": 4307,
+ "end": 4358,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4307,
+ "end": 4358,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 4368,
+ "end": 4420,
+ "name": "DUP2"
+ },
+ {
+ "begin": 4368,
+ "end": 4420,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 4368,
+ "end": 4420,
+ "name": "DUP4"
+ },
+ {
+ "begin": 4368,
+ "end": 4420,
+ "name": "DUP2"
+ },
+ {
+ "begin": 4368,
+ "end": 4420,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 4368,
+ "end": 4420,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 4368,
+ "end": 4420,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 4325,
+ "end": 4338,
+ "name": "DUP5"
+ },
+ {
+ "begin": 4325,
+ "end": 4338,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 4368,
+ "end": 4420,
+ "name": "PUSH",
+ "value": "B237AFE65F1514FD7EA3F923EA4FE792BDD07000A912B6CD1602A8E7F573C8D"
+ },
+ {
+ "begin": 4368,
+ "end": 4420,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 4368,
+ "end": 4420,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4368,
+ "end": 4420,
+ "name": "DUP3"
+ },
+ {
+ "begin": 4368,
+ "end": 4420,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4368,
+ "end": 4420,
+ "name": "SUB"
+ },
+ {
+ "begin": 4368,
+ "end": 4420,
+ "name": "ADD"
+ },
+ {
+ "begin": 4368,
+ "end": 4420,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4368,
+ "end": 4420,
+ "name": "LOG2"
+ },
+ {
+ "begin": 4204,
+ "end": 4427,
+ "name": "tag",
+ "value": "322"
+ },
+ {
+ "begin": 4204,
+ "end": 4427,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 4204,
+ "end": 4427,
+ "name": "POP"
+ },
+ {
+ "begin": 4204,
+ "end": 4427,
+ "name": "POP"
+ },
+ {
+ "begin": 4204,
+ "end": 4427,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 7994,
+ "end": 8445,
+ "name": "tag",
+ "value": "290"
+ },
+ {
+ "begin": 7994,
+ "end": 8445,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 8126,
+ "end": 8144,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 8096,
+ "end": 8107,
+ "name": "DUP4"
+ },
+ {
+ "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": 2124,
+ "end": 2137,
+ "name": "DUP2"
+ },
+ {
+ "begin": 2124,
+ "end": 2137,
+ "name": "AND"
+ },
+ {
+ "begin": 2124,
+ "end": 2137,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2120,
+ "end": 2156,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2120,
+ "end": 2156,
+ "name": "PUSH [tag]",
+ "value": "324"
+ },
+ {
+ "begin": 2120,
+ "end": 2156,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 2151,
+ "end": 2156,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2151,
+ "end": 2156,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2151,
+ "end": 2156,
+ "name": "REVERT"
+ },
+ {
+ "begin": 2120,
+ "end": 2156,
+ "name": "tag",
+ "value": "324"
+ },
+ {
+ "begin": 2120,
+ "end": 2156,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 8176,
+ "end": 8192,
+ "name": "PUSH",
+ "value": "5"
+ },
+ {
+ "begin": 8176,
+ "end": 8192,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "DUP1"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "PUSH",
+ "value": "80"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "DUP2"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "ADD"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "DUP3"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "MSTORE"
+ },
+ {
+ "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": 8232,
+ "end": 8372,
+ "name": "DUP9"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "DUP2"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "AND"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "DUP3"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "DUP1"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "DUP4"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "ADD"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "DUP10"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "DUP2"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "DUP4"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "DUP6"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "ADD"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "DUP10"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "DUP2"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "MSTORE"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "PUSH",
+ "value": "60"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "DUP7"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "ADD"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "DUP2"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 8202,
+ "end": 8229,
+ "name": "DUP8"
+ },
+ {
+ "begin": 8202,
+ "end": 8229,
+ "name": "DUP2"
+ },
+ {
+ "begin": 8202,
+ "end": 8229,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 8202,
+ "end": 8229,
+ "name": "DUP1"
+ },
+ {
+ "begin": 8202,
+ "end": 8229,
+ "name": "DUP5"
+ },
+ {
+ "begin": 8202,
+ "end": 8229,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 8202,
+ "end": 8229,
+ "name": "SWAP6"
+ },
+ {
+ "begin": 8202,
+ "end": 8229,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 8202,
+ "end": 8229,
+ "name": "SWAP6"
+ },
+ {
+ "begin": 8202,
+ "end": 8229,
+ "name": "SHA3"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "DUP5"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "DUP2"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "SLOAD"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "AND"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "SWAP5"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "AND"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "SWAP4"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "SWAP4"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "OR"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "DUP4"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "MLOAD"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "DUP4"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "ADD"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "DUP1"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 8176,
+ "end": 8192,
+ "name": "SWAP5"
+ },
+ {
+ "begin": 8176,
+ "end": 8192,
+ "name": "SWAP7"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "SWAP4"
+ },
+ {
+ "begin": 8202,
+ "end": 8229,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 8202,
+ "end": 8229,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "PUSH [tag]",
+ "value": "326"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "PUSH",
+ "value": "2"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "DUP6"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "ADD"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "ADD"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "PUSH [tag]",
+ "value": "327"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "JUMP",
+ "value": "[in]"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "tag",
+ "value": "326"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "PUSH",
+ "value": "60"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "ADD"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "ADD"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "DUP1"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "SLOAD"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "AND"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "OR"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 8382,
+ "end": 8398,
+ "name": "PUSH",
+ "value": "5"
+ },
+ {
+ "begin": 8382,
+ "end": 8403,
+ "name": "DUP1"
+ },
+ {
+ "begin": 8382,
+ "end": 8403,
+ "name": "SLOAD"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 8382,
+ "end": 8403,
+ "name": "ADD"
+ },
+ {
+ "begin": 8382,
+ "end": 8403,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 8382,
+ "end": 8403,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 8413,
+ "end": 8438,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 8413,
+ "end": 8438,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 8424,
+ "end": 8437,
+ "name": "DUP3"
+ },
+ {
+ "begin": 8424,
+ "end": 8437,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 8413,
+ "end": 8438,
+ "name": "PUSH",
+ "value": "C0BA8FE4B176C1714197D43B9CC6BCF797A4A7461C5FE8D0EF6E184AE7601E51"
+ },
+ {
+ "begin": 8413,
+ "end": 8438,
+ "name": "SWAP1"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 8413,
+ "end": 8438,
+ "name": "LOG2"
+ },
+ {
+ "begin": 2166,
+ "end": 2167,
+ "name": "tag",
+ "value": "325"
+ },
+ {
+ "begin": 2166,
+ "end": 2167,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 7994,
+ "end": 8445,
+ "name": "tag",
+ "value": "323"
+ },
+ {
+ "begin": 7994,
+ "end": 8445,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 7994,
+ "end": 8445,
+ "name": "POP"
+ },
+ {
+ "begin": 7994,
+ "end": 8445,
+ "name": "SWAP4"
+ },
+ {
+ "begin": 7994,
+ "end": 8445,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 7994,
+ "end": 8445,
+ "name": "POP"
+ },
+ {
+ "begin": 7994,
+ "end": 8445,
+ "name": "POP"
+ },
+ {
+ "begin": 7994,
+ "end": 8445,
+ "name": "POP"
+ },
+ {
+ "begin": 7994,
+ "end": 8445,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "tag",
+ "value": "141"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP2"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP2"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP4"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP2"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP2"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "GT"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH [tag]",
+ "value": "129"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP4"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP2"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SHA3"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH [tag]",
+ "value": "129"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP2"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "ADD"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP4"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "ADD"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH [tag]",
+ "value": "330"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMP",
+ "value": "[in]"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "tag",
+ "value": "329"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "tag",
+ "value": "328"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "POP"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "POP"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "POP"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "tag",
+ "value": "199"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP2"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP2"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP4"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP2"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP2"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "GT"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH [tag]",
+ "value": "129"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP4"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP2"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SHA3"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH [tag]",
+ "value": "129"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP2"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "ADD"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP4"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "ADD"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH [tag]",
+ "value": "330"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMP",
+ "value": "[in]"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "tag",
+ "value": "332"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "tag",
+ "value": "331"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "POP"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "POP"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "POP"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "tag",
+ "value": "220"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP2"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "ADD"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "MSTORE"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP2"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "tag",
+ "value": "225"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP2"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "ADD"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "MSTORE"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP2"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "tag",
+ "value": "327"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP3"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP2"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "AND"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "100"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "MUL"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SUB"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "AND"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "2"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DIV"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SHA3"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "1F"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "ADD"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DIV"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP2"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "ADD"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP3"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "1F"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "LT"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH [tag]",
+ "value": "334"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "NOT"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "AND"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP4"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "ADD"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "OR"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP6"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH [tag]",
+ "value": "336"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMP"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "tag",
+ "value": "334"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP3"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "ADD"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "ADD"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP6"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP3"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH [tag]",
+ "value": "336"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP3"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "ADD"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "tag",
+ "value": "335"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP3"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP2"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "GT"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH [tag]",
+ "value": "336"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP3"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP3"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "ADD"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "ADD"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH [tag]",
+ "value": "335"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMP"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "tag",
+ "value": "336"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "tag",
+ "value": "333"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH [tag]",
+ "value": "337"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SWAP2"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH [tag]",
+ "value": "330"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMP",
+ "value": "[in]"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "tag",
+ "value": "337"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "POP"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "tag",
+ "value": "330"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH [tag]",
+ "value": "221"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "tag",
+ "value": "339"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP3"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "GT"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH [tag]",
+ "value": "337"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "DUP2"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "ADD"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "PUSH [tag]",
+ "value": "339"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMP"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "tag",
+ "value": "340"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "POP"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMP"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "tag",
+ "value": "338"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 663,
+ "end": 4608,
+ "name": "JUMP",
+ "value": "[out]"
+ }
+ ]
+ }
+ }
+ },
"bytecode": {
- "linkReferences": {},
- "object": "0x60806040523480156200001157600080fd5b50604051620021a0380380620021a08339810160409081528151602083015191830151606084015191840180519094939093019290919060009081908690859085908390839086908260328211806200006957508181115b8062000073575080155b806200007d575081155b156200008857600080fd5b600092505b84518310156200015c57600260008685815181101515620000aa57fe5b6020908102909101810151600160a060020a031682528101919091526040016000205460ff1680620000fd57508483815181101515620000e657fe5b90602001906020020151600160a060020a03166000145b156200010857600080fd5b60016002600087868151811015156200011d57fe5b602090810291909101810151600160a060020a03168252810191909152604001600020805460ff1916911515919091179055600192909201916200008d565b845162000171906003906020880190620001fe565b50505060049190915550506006555060009250505b8451821015620001f25784828151811015156200019f57fe5b602090810290910101519050600160a060020a0381161515620001c157600080fd5b600160a060020a0381166000908152600860205260409020805460ff19166001908117909155919091019062000186565b50505050505062000292565b82805482825590600052602060002090810192821562000256579160200282015b82811115620002565782518254600160a060020a031916600160a060020a039091161782556020909201916001909101906200021f565b506200026492915062000268565b5090565b6200028f91905b8082111562000264578054600160a060020a03191681556001016200026f565b90565b611efe80620002a26000396000f30060806040526004361061015e5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663025e7c2781146101a0578063173825d9146101e157806320ea8d861461020f5780632f54bf6e146102275780633411c81c146102695780633589b35c1461029a57806337bd78a0146102b257806354741525146102d95780635a1a66af146102f85780637065cb481461032b578063784547a7146103595780637ad28c511461037157806383250f79146103895780638b51d13f146103b75780639ace38c2146103cf578063a0e67e2b146104a4578063a8abe69a14610509578063b5dc40c31461052e578063b77bf60014610546578063ba51a6df1461055b578063c01a8c8414610573578063c64274741461058b578063d38f2d8214610601578063d74f8edd14610619578063dc8452cd1461062e578063e20056e614610643578063ee22610b14610677575b600034111561019e5760408051348152905133917fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c919081900360200190a25b005b3480156101ac57600080fd5b506101b860043561068f565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156101ed57600080fd5b5061019e73ffffffffffffffffffffffffffffffffffffffff600435166106c4565b34801561021b57600080fd5b5061019e60043561091b565b34801561023357600080fd5b5061025573ffffffffffffffffffffffffffffffffffffffff60043516610a08565b604080519115158252519081900360200190f35b34801561027557600080fd5b5061025560043573ffffffffffffffffffffffffffffffffffffffff60243516610a1d565b3480156102a657600080fd5b5061019e600435610a3d565b3480156102be57600080fd5b506102c7610db9565b60408051918252519081900360200190f35b3480156102e557600080fd5b506102c760043515156024351515610dbf565b34801561030457600080fd5b5061019e73ffffffffffffffffffffffffffffffffffffffff600435166024351515610e2b565b34801561033757600080fd5b5061019e73ffffffffffffffffffffffffffffffffffffffff60043516610eea565b34801561036557600080fd5b50610255600435611057565b34801561037d57600080fd5b5061019e6004356110e8565b34801561039557600080fd5b5061025573ffffffffffffffffffffffffffffffffffffffff6004351661112f565b3480156103c357600080fd5b506102c7600435611144565b3480156103db57600080fd5b506103e76004356111c0565b604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018060200183151515158152602001828103825284818151815260200191508051906020019080838360005b8381101561046657818101518382015260200161044e565b50505050905090810190601f1680156104935780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b3480156104b057600080fd5b506104b96112a9565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156104f55781810151838201526020016104dd565b505050509050019250505060405180910390f35b34801561051557600080fd5b506104b960043560243560443515156064351515611319565b34801561053a57600080fd5b506104b9600435611452565b34801561055257600080fd5b506102c76115ff565b34801561056757600080fd5b5061019e600435611605565b34801561057f57600080fd5b5061019e60043561167c565b34801561059757600080fd5b50604080516020600460443581810135601f81018490048402850184019095528484526102c794823573ffffffffffffffffffffffffffffffffffffffff1694602480359536959460649492019190819084018382808284375094975061178e9650505050505050565b34801561060d57600080fd5b506102c76004356117ad565b34801561062557600080fd5b506102c76117bf565b34801561063a57600080fd5b506102c76117c4565b34801561064f57600080fd5b5061019e73ffffffffffffffffffffffffffffffffffffffff600435811690602435166117ca565b34801561068357600080fd5b5061019e6004356119da565b600380548290811061069d57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b60003330146106d257600080fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020526040902054829060ff16151561070857600080fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260026020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905591505b6003547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0182101561088b578273ffffffffffffffffffffffffffffffffffffffff166003838154811015156107a857fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561088057600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061080057fe5b6000918252602090912001546003805473ffffffffffffffffffffffffffffffffffffffff909216918490811061083357fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061088b565b600190910190610756565b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01906108bc9082611e11565b5060035460045411156108d5576003546108d590611605565b60405173ffffffffffffffffffffffffffffffffffffffff8416907f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9090600090a2505050565b3360008181526002602052604090205460ff16151561093957600080fd5b60008281526001602090815260408083203380855292529091205483919060ff16151561096557600080fd5b600084815260208190526040902060030154849060ff161561098657600080fd5b8461099081611057565b1561099a57600080fd5b600086815260016020908152604080832033808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555188927ff6a317157440607f36269043eb55f1287a5a19ba2216afeab88cd46cbcfb88e991a3505050505050565b60026020526000908152604090205460ff1681565b600160209081526000928352604080842090915290825290205460ff1681565b600081815260208190526040812060030154829060ff1615610a5e57600080fd5b82610a6881611057565b1515610a7357600080fd5b600084815260208181526040808320805473ffffffffffffffffffffffffffffffffffffffff16845260089092529091205485919060ff161515610ab657600080fd5b604080517f72656d6f7665417574686f72697a6564416464726573734174496e646578286181527f6464726573732c75696e74323536290000000000000000000000000000000000602080830191909152825191829003602f01822060028086018054601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010060018416150201909116929092049182018490048402850184019095528084527fffffffff0000000000000000000000000000000000000000000000000000000090911693610bf293600093909290830182828015610bdf5780601f10610bb457610100808354040283529160200191610bdf565b820191906000526020600020905b815481529060010190602001808311610bc257829003601f168201915b5050505050611bcb90919063ffffffff16565b7fffffffff000000000000000000000000000000000000000000000000000000001614610c1e57600080fd5b600086815260208190526040908190206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117909155815481830154935160028085018054959b5073ffffffffffffffffffffffffffffffffffffffff909316959492939192839285927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff918316156101000291909101909116048015610d105780601f10610ce557610100808354040283529160200191610d10565b820191906000526020600020905b815481529060010190602001808311610cf357829003601f168201915b505091505060006040518083038185875af19250505015610d5b5760405186907f33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed7590600090a2610db1565b60405186907f526441bb6c1aba3c9a4a6ca1d6545da9c2333c8c48343ef398eb858d72b7923690600090a26003850180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b505050505050565b60065481565b6000805b600554811015610e2457838015610dec575060008181526020819052604090206003015460ff16155b80610e105750828015610e10575060008181526020819052604090206003015460ff165b15610e1c576001820191505b600101610dc3565b5092915050565b333014610e3757600080fd5b8173ffffffffffffffffffffffffffffffffffffffff81161515610e5a57600080fd5b73ffffffffffffffffffffffffffffffffffffffff831660008181526008602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915582519384529083015280517fdaef8ff7dc66c5e34eb9c338aab679d9f427f89868d9228494455a4d982eb2b09281900390910190a1505050565b333014610ef657600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116600090815260026020526040902054819060ff1615610f2b57600080fd5b8173ffffffffffffffffffffffffffffffffffffffff81161515610f4e57600080fd5b6003805490506001016004546032821180610f6857508181115b80610f71575080155b80610f7a575081155b15610f8457600080fd5b73ffffffffffffffffffffffffffffffffffffffff851660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915560038054918201815583527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055517ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d9190a25050505050565b600080805b6003548110156110e1576000848152600160205260408120600380549192918490811061108557fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400190205460ff16156110c6576001820191505b6004548214156110d957600192506110e1565b60010161105c565b5050919050565b3330146110f457600080fd5b60068190556040805182815290517fd1c9101a34feff75cccef14a28785a0279cb0b49c1f321f21f5f422e746b43779181900360200190a150565b60086020526000908152604090205460ff1681565b6000805b6003548110156111ba576000838152600160205260408120600380549192918490811061117157fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400190205460ff16156111b2576001820191505b600101611148565b50919050565b60006020818152918152604090819020805460018083015460028085018054875161010095821615959095027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691909104601f810188900488028401880190965285835273ffffffffffffffffffffffffffffffffffffffff909316959094919291908301828280156112965780601f1061126b57610100808354040283529160200191611296565b820191906000526020600020905b81548152906001019060200180831161127957829003601f168201915b5050506003909301549192505060ff1684565b6060600380548060200260200160405190810160405280929190818152602001828054801561130e57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116112e3575b505050505090505b90565b60608060008060055460405190808252806020026020018201604052801561134b578160200160208202803883390190505b50925060009150600090505b6005548110156113d257858015611380575060008181526020819052604090206003015460ff16155b806113a457508480156113a4575060008181526020819052604090206003015460ff165b156113ca578083838151811015156113b857fe5b60209081029091010152600191909101905b600101611357565b8787036040519080825280602002602001820160405280156113fe578160200160208202803883390190505b5093508790505b8681101561144757828181518110151561141b57fe5b906020019060200201518489830381518110151561143557fe5b60209081029091010152600101611405565b505050949350505050565b606080600080600380549050604051908082528060200260200182016040528015611487578160200160208202803883390190505b50925060009150600090505b60035481101561156b57600085815260016020526040812060038054919291849081106114bc57fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400190205460ff161561156357600380548290811061150457fe5b600091825260209091200154835173ffffffffffffffffffffffffffffffffffffffff9091169084908490811061153757fe5b73ffffffffffffffffffffffffffffffffffffffff909216602092830290910190910152600191909101905b600101611493565b81604051908082528060200260200182016040528015611595578160200160208202803883390190505b509350600090505b818110156115f75782818151811015156115b357fe5b9060200190602002015184828151811015156115cb57fe5b73ffffffffffffffffffffffffffffffffffffffff90921660209283029091019091015260010161159d565b505050919050565b60055481565b33301461161157600080fd5b60035481603282118061162357508181115b8061162c575080155b80611635575081155b1561163f57600080fd5b60048390556040805184815290517fa3f1ee9126a074d9326c682f561767f710e927faa811f7a99829d49dc421797a9181900360200190a1505050565b3360008181526002602052604090205460ff16151561169a57600080fd5b600082815260208190526040902054829073ffffffffffffffffffffffffffffffffffffffff1615156116cc57600080fd5b60008381526001602090815260408083203380855292529091205484919060ff16156116f757600080fd5b8461170181611057565b1561170b57600080fd5b600086815260016020818152604080842033808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909317909255905188927f4a504a94899432a9846e1aa406dceb1bcfd538bb839071d49d1e5e23f5be30ef91a361177f86611057565b15610db157610db18642611c93565b600061179b848484611cde565b90506117a68161167c565b9392505050565b60076020526000908152604090205481565b603281565b60045481565b60003330146117d857600080fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260026020526040902054839060ff16151561180e57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260026020526040902054839060ff161561184357600080fd5b600092505b600354831015611908578473ffffffffffffffffffffffffffffffffffffffff1660038481548110151561187857fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614156118fd57836003848154811015156118b057fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611908565b600190920191611848565b73ffffffffffffffffffffffffffffffffffffffff80861660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090811690915593881682528082208054909416600117909355915190917f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9091a260405173ffffffffffffffffffffffffffffffffffffffff8516907ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d90600090a25050505050565b600081815260208190526040812060030154829060ff16156119fb57600080fd5b82611a0581611057565b1515611a1057600080fd5b600654600085815260076020526040902054859101421015611a3157600080fd5b600085815260208190526040908190206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117909155815481830154935160028085018054959a5073ffffffffffffffffffffffffffffffffffffffff909316959492939192839285927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff918316156101000291909101909116048015611b235780601f10611af857610100808354040283529160200191611b23565b820191906000526020600020905b815481529060010190602001808311611b0657829003601f168201915b505091505060006040518083038185875af19250505015611b6e5760405185907f33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed7590600090a2611bc4565b60405185907f526441bb6c1aba3c9a4a6ca1d6545da9c2333c8c48343ef398eb858d72b7923690600090a26003840180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b5050505050565b600081600401835110151515611c6857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f475245415445525f4f525f455155414c5f544f5f345f4c454e4754485f52455160448201527f5549524544000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b5050602001517fffffffff000000000000000000000000000000000000000000000000000000001690565b6000828152600760209081526040918290208390558151838152915184927f0b237afe65f1514fd7ea3f923ea4fe792bdd07000a912b6cd1602a8e7f573c8d92908290030190a25050565b60008373ffffffffffffffffffffffffffffffffffffffff81161515611d0357600080fd5b6005546040805160808101825273ffffffffffffffffffffffffffffffffffffffff8881168252602080830189815283850189815260006060860181905287815280845295909520845181547fffffffffffffffffffffffff00000000000000000000000000000000000000001694169390931783555160018301559251805194965091939092611d9b926002850192910190611e3a565b5060609190910151600390910180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905560058054600101905560405182907fc0ba8fe4b176c1714197d43b9cc6bcf797a4a7461c5fe8d0ef6e184ae7601e5190600090a2509392505050565b815481835581811115611e3557600083815260209020611e35918101908301611eb8565b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611e7b57805160ff1916838001178555611ea8565b82800160010185558215611ea8579182015b82811115611ea8578251825591602001919060010190611e8d565b50611eb4929150611eb8565b5090565b61131691905b80821115611eb45760008155600101611ebe5600a165627a7a7230582084376847542a16eb1378ca448798da98c60d2fd131f45f2be7fdd80d42d951d70029",
- "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x21A0 CODESIZE SUB DUP1 PUSH3 0x21A0 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 SWAP1 DUP2 MSTORE DUP2 MLOAD PUSH1 0x20 DUP4 ADD MLOAD SWAP2 DUP4 ADD MLOAD PUSH1 0x60 DUP5 ADD MLOAD SWAP2 DUP5 ADD DUP1 MLOAD SWAP1 SWAP5 SWAP4 SWAP1 SWAP4 ADD SWAP3 SWAP1 SWAP2 SWAP1 PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP7 SWAP1 DUP6 SWAP1 DUP6 SWAP1 DUP4 SWAP1 DUP4 SWAP1 DUP7 SWAP1 DUP3 PUSH1 0x32 DUP3 GT DUP1 PUSH3 0x69 JUMPI POP DUP2 DUP2 GT JUMPDEST DUP1 PUSH3 0x73 JUMPI POP DUP1 ISZERO JUMPDEST DUP1 PUSH3 0x7D JUMPI POP DUP2 ISZERO JUMPDEST ISZERO PUSH3 0x88 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP3 POP JUMPDEST DUP5 MLOAD DUP4 LT ISZERO PUSH3 0x15C JUMPI PUSH1 0x2 PUSH1 0x0 DUP7 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH3 0xAA JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND DUP3 MSTORE DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0xFF AND DUP1 PUSH3 0xFD JUMPI POP DUP5 DUP4 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH3 0xE6 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x0 EQ JUMPDEST ISZERO PUSH3 0x108 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x2 PUSH1 0x0 DUP8 DUP7 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH3 0x11D JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND DUP3 MSTORE DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x1 SWAP3 SWAP1 SWAP3 ADD SWAP2 PUSH3 0x8D JUMP JUMPDEST DUP5 MLOAD PUSH3 0x171 SWAP1 PUSH1 0x3 SWAP1 PUSH1 0x20 DUP9 ADD SWAP1 PUSH3 0x1FE JUMP JUMPDEST POP POP POP PUSH1 0x4 SWAP2 SWAP1 SWAP2 SSTORE POP POP PUSH1 0x6 SSTORE POP PUSH1 0x0 SWAP3 POP POP JUMPDEST DUP5 MLOAD DUP3 LT ISZERO PUSH3 0x1F2 JUMPI DUP5 DUP3 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH3 0x19F JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MLOAD SWAP1 POP PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 AND ISZERO ISZERO PUSH3 0x1C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH3 0x186 JUMP JUMPDEST POP POP POP POP POP POP PUSH3 0x292 JUMP JUMPDEST DUP3 DUP1 SLOAD DUP3 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP3 DUP3 ISZERO PUSH3 0x256 JUMPI SWAP2 PUSH1 0x20 MUL DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x256 JUMPI DUP3 MLOAD DUP3 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB NOT AND PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP1 SWAP2 AND OR DUP3 SSTORE PUSH1 0x20 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH3 0x21F JUMP JUMPDEST POP PUSH3 0x264 SWAP3 SWAP2 POP PUSH3 0x268 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH3 0x28F SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x264 JUMPI DUP1 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB NOT AND DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x26F JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0x1EFE DUP1 PUSH3 0x2A2 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x15E JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x25E7C27 DUP2 EQ PUSH2 0x1A0 JUMPI DUP1 PUSH4 0x173825D9 EQ PUSH2 0x1E1 JUMPI DUP1 PUSH4 0x20EA8D86 EQ PUSH2 0x20F JUMPI DUP1 PUSH4 0x2F54BF6E EQ PUSH2 0x227 JUMPI DUP1 PUSH4 0x3411C81C EQ PUSH2 0x269 JUMPI DUP1 PUSH4 0x3589B35C EQ PUSH2 0x29A JUMPI DUP1 PUSH4 0x37BD78A0 EQ PUSH2 0x2B2 JUMPI DUP1 PUSH4 0x54741525 EQ PUSH2 0x2D9 JUMPI DUP1 PUSH4 0x5A1A66AF EQ PUSH2 0x2F8 JUMPI DUP1 PUSH4 0x7065CB48 EQ PUSH2 0x32B JUMPI DUP1 PUSH4 0x784547A7 EQ PUSH2 0x359 JUMPI DUP1 PUSH4 0x7AD28C51 EQ PUSH2 0x371 JUMPI DUP1 PUSH4 0x83250F79 EQ PUSH2 0x389 JUMPI DUP1 PUSH4 0x8B51D13F EQ PUSH2 0x3B7 JUMPI DUP1 PUSH4 0x9ACE38C2 EQ PUSH2 0x3CF JUMPI DUP1 PUSH4 0xA0E67E2B EQ PUSH2 0x4A4 JUMPI DUP1 PUSH4 0xA8ABE69A EQ PUSH2 0x509 JUMPI DUP1 PUSH4 0xB5DC40C3 EQ PUSH2 0x52E JUMPI DUP1 PUSH4 0xB77BF600 EQ PUSH2 0x546 JUMPI DUP1 PUSH4 0xBA51A6DF EQ PUSH2 0x55B JUMPI DUP1 PUSH4 0xC01A8C84 EQ PUSH2 0x573 JUMPI DUP1 PUSH4 0xC6427474 EQ PUSH2 0x58B JUMPI DUP1 PUSH4 0xD38F2D82 EQ PUSH2 0x601 JUMPI DUP1 PUSH4 0xD74F8EDD EQ PUSH2 0x619 JUMPI DUP1 PUSH4 0xDC8452CD EQ PUSH2 0x62E JUMPI DUP1 PUSH4 0xE20056E6 EQ PUSH2 0x643 JUMPI DUP1 PUSH4 0xEE22610B EQ PUSH2 0x677 JUMPI JUMPDEST PUSH1 0x0 CALLVALUE GT ISZERO PUSH2 0x19E JUMPI PUSH1 0x40 DUP1 MLOAD CALLVALUE DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0xE1FFFCC4923D04B559F4D29A8BFC6CDA04EB5B0D3C460751C2402C5C5CC9109C SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B8 PUSH1 0x4 CALLDATALOAD PUSH2 0x68F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19E PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x6C4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x21B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19E PUSH1 0x4 CALLDATALOAD PUSH2 0x91B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x233 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x255 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0xA08 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x275 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x255 PUSH1 0x4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD AND PUSH2 0xA1D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19E PUSH1 0x4 CALLDATALOAD PUSH2 0xA3D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2C7 PUSH2 0xDB9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2C7 PUSH1 0x4 CALLDATALOAD ISZERO ISZERO PUSH1 0x24 CALLDATALOAD ISZERO ISZERO PUSH2 0xDBF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x304 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19E PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD ISZERO ISZERO PUSH2 0xE2B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x337 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19E PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0xEEA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x365 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x255 PUSH1 0x4 CALLDATALOAD PUSH2 0x1057 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x37D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19E PUSH1 0x4 CALLDATALOAD PUSH2 0x10E8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x395 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x255 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x112F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2C7 PUSH1 0x4 CALLDATALOAD PUSH2 0x1144 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E7 PUSH1 0x4 CALLDATALOAD PUSH2 0x11C0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 ISZERO ISZERO ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x466 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x44E JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x493 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 SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4B9 PUSH2 0x12A9 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 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4F5 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x4DD JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x515 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4B9 PUSH1 0x4 CALLDATALOAD PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD ISZERO ISZERO PUSH1 0x64 CALLDATALOAD ISZERO ISZERO PUSH2 0x1319 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x53A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4B9 PUSH1 0x4 CALLDATALOAD PUSH2 0x1452 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x552 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2C7 PUSH2 0x15FF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x567 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19E PUSH1 0x4 CALLDATALOAD PUSH2 0x1605 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x57F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19E PUSH1 0x4 CALLDATALOAD PUSH2 0x167C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x597 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 PUSH1 0x44 CALLDATALOAD DUP2 DUP2 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x2C7 SWAP5 DUP3 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP5 PUSH1 0x24 DUP1 CALLDATALOAD SWAP6 CALLDATASIZE SWAP6 SWAP5 PUSH1 0x64 SWAP5 SWAP3 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x178E SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x60D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2C7 PUSH1 0x4 CALLDATALOAD PUSH2 0x17AD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x625 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2C7 PUSH2 0x17BF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x63A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2C7 PUSH2 0x17C4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x64F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19E PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH2 0x17CA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x683 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19E PUSH1 0x4 CALLDATALOAD PUSH2 0x19DA JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD DUP3 SWAP1 DUP2 LT PUSH2 0x69D JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x0 CALLER ADDRESS EQ PUSH2 0x6D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x708 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE SWAP2 POP JUMPDEST PUSH1 0x3 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP3 LT ISZERO PUSH2 0x88B JUMPI DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x3 DUP4 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x7A8 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x880 JUMPI PUSH1 0x3 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0x800 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x3 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x833 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0x88B JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x756 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 PUSH2 0x8BC SWAP1 DUP3 PUSH2 0x1E11 JUMP JUMPDEST POP PUSH1 0x3 SLOAD PUSH1 0x4 SLOAD GT ISZERO PUSH2 0x8D5 JUMPI PUSH1 0x3 SLOAD PUSH2 0x8D5 SWAP1 PUSH2 0x1605 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH32 0x8001553A916EF2F495D26A907CC54D96ED840D7BDA71E73194BF5A9DF7A76B90 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x939 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD DUP4 SWAP2 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x965 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD DUP5 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x986 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 PUSH2 0x990 DUP2 PUSH2 0x1057 JUMP JUMPDEST ISZERO PUSH2 0x99A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE MLOAD DUP9 SWAP3 PUSH32 0xF6A317157440607F36269043EB55F1287A5A19BA2216AFEAB88CD46CBCFB88E9 SWAP2 LOG3 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 ADD SLOAD DUP3 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0xA5E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH2 0xA68 DUP2 PUSH2 0x1057 JUMP JUMPDEST ISZERO ISZERO PUSH2 0xA73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 MSTORE PUSH1 0x8 SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD DUP6 SWAP2 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0xAB6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x72656D6F7665417574686F72697A6564416464726573734174496E6465782861 DUP2 MSTORE PUSH32 0x6464726573732C75696E74323536290000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP3 MLOAD SWAP2 DUP3 SWAP1 SUB PUSH1 0x2F ADD DUP3 KECCAK256 PUSH1 0x2 DUP1 DUP7 ADD DUP1 SLOAD PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP5 AND ISZERO MUL ADD SWAP1 SWAP2 AND SWAP3 SWAP1 SWAP3 DIV SWAP2 DUP3 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP1 DUP5 MSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP2 AND SWAP4 PUSH2 0xBF2 SWAP4 PUSH1 0x0 SWAP4 SWAP1 SWAP3 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xBDF JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xBB4 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xBDF JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xBC2 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP PUSH2 0x1BCB SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND EQ PUSH2 0xC1E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x3 DUP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP2 SLOAD DUP2 DUP4 ADD SLOAD SWAP4 MLOAD PUSH1 0x2 DUP1 DUP6 ADD DUP1 SLOAD SWAP6 SWAP12 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND SWAP6 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 DUP4 SWAP3 DUP6 SWAP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP4 AND ISZERO PUSH2 0x100 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 AND DIV DUP1 ISZERO PUSH2 0xD10 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xCE5 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xD10 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xCF3 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP ISZERO PUSH2 0xD5B JUMPI PUSH1 0x40 MLOAD DUP7 SWAP1 PUSH32 0x33E13ECB54C3076D8E8BB8C2881800A4D972B792045FFAE98FDF46DF365FED75 SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH2 0xDB1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP7 SWAP1 PUSH32 0x526441BB6C1ABA3C9A4A6CA1D6545DA9C2333C8C48343EF398EB858D72B79236 SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH1 0x3 DUP6 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST PUSH1 0x5 SLOAD DUP2 LT ISZERO PUSH2 0xE24 JUMPI DUP4 DUP1 ISZERO PUSH2 0xDEC JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND ISZERO JUMPDEST DUP1 PUSH2 0xE10 JUMPI POP DUP3 DUP1 ISZERO PUSH2 0xE10 JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND JUMPDEST ISZERO PUSH2 0xE1C JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x1 ADD PUSH2 0xDC3 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0xE37 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO ISZERO PUSH2 0xE5A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP7 ISZERO ISZERO SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP3 MLOAD SWAP4 DUP5 MSTORE SWAP1 DUP4 ADD MSTORE DUP1 MLOAD PUSH32 0xDAEF8FF7DC66C5E34EB9C338AAB679D9F427F89868D9228494455A4D982EB2B0 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP POP POP JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0xEF6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0xF2B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO ISZERO PUSH2 0xF4E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3 DUP1 SLOAD SWAP1 POP PUSH1 0x1 ADD PUSH1 0x4 SLOAD PUSH1 0x32 DUP3 GT DUP1 PUSH2 0xF68 JUMPI POP DUP2 DUP2 GT JUMPDEST DUP1 PUSH2 0xF71 JUMPI POP DUP1 ISZERO JUMPDEST DUP1 PUSH2 0xF7A JUMPI POP DUP2 ISZERO JUMPDEST ISZERO PUSH2 0xF84 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x3 DUP1 SLOAD SWAP2 DUP3 ADD DUP2 SSTORE DUP4 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND DUP5 OR SWAP1 SSTORE MLOAD PUSH32 0xF39E6E1EB0EDCF53C221607B54B00CD28F3196FED0A24994DC308B8F611B682D SWAP2 SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 JUMPDEST PUSH1 0x3 SLOAD DUP2 LT ISZERO PUSH2 0x10E1 JUMPI PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 DUP1 SLOAD SWAP2 SWAP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x1085 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x10C6 JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x4 SLOAD DUP3 EQ ISZERO PUSH2 0x10D9 JUMPI PUSH1 0x1 SWAP3 POP PUSH2 0x10E1 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x105C JUMP JUMPDEST POP POP SWAP2 SWAP1 POP JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0x10F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x6 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xD1C9101A34FEFF75CCCEF14A28785A0279CB0B49C1F321F21F5F422E746B4377 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST PUSH1 0x3 SLOAD DUP2 LT ISZERO PUSH2 0x11BA JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 DUP1 SLOAD SWAP2 SWAP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x1171 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x11B2 JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x1 ADD PUSH2 0x1148 JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP2 DUP2 MSTORE SWAP2 DUP2 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP1 DUP4 ADD SLOAD PUSH1 0x2 DUP1 DUP6 ADD DUP1 SLOAD DUP8 MLOAD PUSH2 0x100 SWAP6 DUP3 AND ISZERO SWAP6 SWAP1 SWAP6 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD AND SWAP2 SWAP1 SWAP2 DIV PUSH1 0x1F DUP2 ADD DUP9 SWAP1 DIV DUP9 MUL DUP5 ADD DUP9 ADD SWAP1 SWAP7 MSTORE DUP6 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND SWAP6 SWAP1 SWAP5 SWAP2 SWAP3 SWAP2 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x1296 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x126B JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1296 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1279 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP PUSH1 0x3 SWAP1 SWAP4 ADD SLOAD SWAP2 SWAP3 POP POP PUSH1 0xFF AND DUP5 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x130E JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x12E3 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x0 DUP1 PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x134B JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 SWAP2 POP PUSH1 0x0 SWAP1 POP JUMPDEST PUSH1 0x5 SLOAD DUP2 LT ISZERO PUSH2 0x13D2 JUMPI DUP6 DUP1 ISZERO PUSH2 0x1380 JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND ISZERO JUMPDEST DUP1 PUSH2 0x13A4 JUMPI POP DUP5 DUP1 ISZERO PUSH2 0x13A4 JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND JUMPDEST ISZERO PUSH2 0x13CA JUMPI DUP1 DUP4 DUP4 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x13B8 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SWAP1 JUMPDEST PUSH1 0x1 ADD PUSH2 0x1357 JUMP JUMPDEST DUP8 DUP8 SUB PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x13FE JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP DUP8 SWAP1 POP JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x1447 JUMPI DUP3 DUP2 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x141B JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP5 DUP10 DUP4 SUB DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1435 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x1405 JUMP JUMPDEST POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x0 DUP1 PUSH1 0x3 DUP1 SLOAD SWAP1 POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1487 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 SWAP2 POP PUSH1 0x0 SWAP1 POP JUMPDEST PUSH1 0x3 SLOAD DUP2 LT ISZERO PUSH2 0x156B JUMPI PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 DUP1 SLOAD SWAP2 SWAP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x14BC JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1563 JUMPI PUSH1 0x3 DUP1 SLOAD DUP3 SWAP1 DUP2 LT PUSH2 0x1504 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 DUP5 SWAP1 DUP5 SWAP1 DUP2 LT PUSH2 0x1537 JUMPI INVALID JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SWAP1 JUMPDEST PUSH1 0x1 ADD PUSH2 0x1493 JUMP JUMPDEST DUP2 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1595 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP PUSH1 0x0 SWAP1 POP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x15F7 JUMPI DUP3 DUP2 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x15B3 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP5 DUP3 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x15CB JUMPI INVALID JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 ADD PUSH2 0x159D JUMP JUMPDEST POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0x1611 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3 SLOAD DUP2 PUSH1 0x32 DUP3 GT DUP1 PUSH2 0x1623 JUMPI POP DUP2 DUP2 GT JUMPDEST DUP1 PUSH2 0x162C JUMPI POP DUP1 ISZERO JUMPDEST DUP1 PUSH2 0x1635 JUMPI POP DUP2 ISZERO JUMPDEST ISZERO PUSH2 0x163F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x4 DUP4 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xA3F1EE9126A074D9326C682F561767F710E927FAA811F7A99829D49DC421797A SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x169A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO ISZERO PUSH2 0x16CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD DUP5 SWAP2 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x16F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 PUSH2 0x1701 DUP2 PUSH2 0x1057 JUMP JUMPDEST ISZERO PUSH2 0x170B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 CALLER DUP1 DUP7 MSTORE SWAP3 MSTORE DUP1 DUP5 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SWAP4 OR SWAP1 SWAP3 SSTORE SWAP1 MLOAD DUP9 SWAP3 PUSH32 0x4A504A94899432A9846E1AA406DCEB1BCFD538BB839071D49D1E5E23F5BE30EF SWAP2 LOG3 PUSH2 0x177F DUP7 PUSH2 0x1057 JUMP JUMPDEST ISZERO PUSH2 0xDB1 JUMPI PUSH2 0xDB1 DUP7 TIMESTAMP PUSH2 0x1C93 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x179B DUP5 DUP5 DUP5 PUSH2 0x1CDE JUMP JUMPDEST SWAP1 POP PUSH2 0x17A6 DUP2 PUSH2 0x167C JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x32 DUP2 JUMP JUMPDEST PUSH1 0x4 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 CALLER ADDRESS EQ PUSH2 0x17D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x180E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x1843 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP3 POP JUMPDEST PUSH1 0x3 SLOAD DUP4 LT ISZERO PUSH2 0x1908 JUMPI DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x3 DUP5 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1878 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x18FD JUMPI DUP4 PUSH1 0x3 DUP5 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x18B0 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0x1908 JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 PUSH2 0x1848 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 SWAP1 DUP2 AND SWAP1 SWAP2 SSTORE SWAP4 DUP9 AND DUP3 MSTORE DUP1 DUP3 KECCAK256 DUP1 SLOAD SWAP1 SWAP5 AND PUSH1 0x1 OR SWAP1 SWAP4 SSTORE SWAP2 MLOAD SWAP1 SWAP2 PUSH32 0x8001553A916EF2F495D26A907CC54D96ED840D7BDA71E73194BF5A9DF7A76B90 SWAP2 LOG2 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP1 PUSH32 0xF39E6E1EB0EDCF53C221607B54B00CD28F3196FED0A24994DC308B8F611B682D SWAP1 PUSH1 0x0 SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 ADD SLOAD DUP3 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x19FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH2 0x1A05 DUP2 PUSH2 0x1057 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x1A10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP6 SWAP2 ADD TIMESTAMP LT ISZERO PUSH2 0x1A31 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x3 DUP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP2 SLOAD DUP2 DUP4 ADD SLOAD SWAP4 MLOAD PUSH1 0x2 DUP1 DUP6 ADD DUP1 SLOAD SWAP6 SWAP11 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND SWAP6 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 DUP4 SWAP3 DUP6 SWAP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP4 AND ISZERO PUSH2 0x100 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 AND DIV DUP1 ISZERO PUSH2 0x1B23 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1AF8 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1B23 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1B06 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP ISZERO PUSH2 0x1B6E JUMPI PUSH1 0x40 MLOAD DUP6 SWAP1 PUSH32 0x33E13ECB54C3076D8E8BB8C2881800A4D972B792045FFAE98FDF46DF365FED75 SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH2 0x1BC4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP6 SWAP1 PUSH32 0x526441BB6C1ABA3C9A4A6CA1D6545DA9C2333C8C48343EF398EB858D72B79236 SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH1 0x3 DUP5 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x4 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x1C68 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F345F4C454E4754485F524551 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x5549524544000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x84 ADD SWAP1 REVERT JUMPDEST POP POP PUSH1 0x20 ADD MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 SWAP1 SSTORE DUP2 MLOAD DUP4 DUP2 MSTORE SWAP2 MLOAD DUP5 SWAP3 PUSH32 0xB237AFE65F1514FD7EA3F923EA4FE792BDD07000A912B6CD1602A8E7F573C8D SWAP3 SWAP1 DUP3 SWAP1 SUB ADD SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO ISZERO PUSH2 0x1D03 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x80 DUP2 ADD DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD DUP10 DUP2 MSTORE DUP4 DUP6 ADD DUP10 DUP2 MSTORE PUSH1 0x0 PUSH1 0x60 DUP7 ADD DUP2 SWAP1 MSTORE DUP8 DUP2 MSTORE DUP1 DUP5 MSTORE SWAP6 SWAP1 SWAP6 KECCAK256 DUP5 MLOAD DUP2 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP5 AND SWAP4 SWAP1 SWAP4 OR DUP4 SSTORE MLOAD PUSH1 0x1 DUP4 ADD SSTORE SWAP3 MLOAD DUP1 MLOAD SWAP5 SWAP7 POP SWAP2 SWAP4 SWAP1 SWAP3 PUSH2 0x1D9B SWAP3 PUSH1 0x2 DUP6 ADD SWAP3 SWAP2 ADD SWAP1 PUSH2 0x1E3A JUMP JUMPDEST POP PUSH1 0x60 SWAP2 SWAP1 SWAP2 ADD MLOAD PUSH1 0x3 SWAP1 SWAP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x5 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE PUSH1 0x40 MLOAD DUP3 SWAP1 PUSH32 0xC0BA8FE4B176C1714197D43B9CC6BCF797A4A7461C5FE8D0EF6E184AE7601E51 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 SLOAD DUP2 DUP4 SSTORE DUP2 DUP2 GT ISZERO PUSH2 0x1E35 JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 PUSH2 0x1E35 SWAP2 DUP2 ADD SWAP1 DUP4 ADD PUSH2 0x1EB8 JUMP JUMPDEST POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0x1E7B JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x1EA8 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x1EA8 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x1EA8 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x1E8D JUMP JUMPDEST POP PUSH2 0x1EB4 SWAP3 SWAP2 POP PUSH2 0x1EB8 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0x1316 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1EB4 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x1EBE JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 DUP5 CALLDATACOPY PUSH9 0x47542A16EB1378CA44 DUP8 SWAP9 0xda SWAP9 0xc6 0xd 0x2f 0xd1 BALANCE DELEGATECALL 0x5f 0x2b 0xe7 REVERT 0xd8 0xd TIMESTAMP 0xd9 MLOAD 0xd7 STOP 0x29 ",
- "sourceMap": "707:3198:2:-;;;2161:514;8:9:-1;5:2;;;30:1;27;20:12;5:2;2161:514:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2913:14:0;;2161:514:2;;;;;;;;;;2445:9;;;;2161:514;;;;;;;;;;2445:9;;2161:514;256:2:0;2236:28;;;:66;;;2292:10;2280:9;:22;2236:66;:96;;;-1:-1:-1;2318:14:0;;2236:96;:127;;;-1:-1:-1;2348:15:0;;2236:127;2229:153;;;2377:5;;;2229:153;2966:1;2959:8;;2954:168;2971:7;:14;2969:1;:16;2954:168;;;3010:7;:19;3018:7;3026:1;3018:10;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3010:19:0;;;;;;;;;;;-1:-1:-1;3010:19:0;;;;;:38;;;3033:7;3041:1;3033:10;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3033:15:0;3047:1;3033:15;3010:38;3006:65;;;3066:5;;;3006:65;3107:4;3085:7;:19;3093:7;3101:1;3093:10;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3085:19:0;;;;;;;;;;;-1:-1:-1;3085:19:0;:26;;-1:-1:-1;;3085:26:0;;;;;;;;;;-1:-1:-1;2987:3:0;;;;;2954:168;;;3131:16;;;;:6;;:16;;;;;:::i;:::-;-1:-1:-1;;;3157:8:0;:20;;;;-1:-1:-1;;2032:17:1;:38;-1:-1:-1;;;;;2440:229:2;2464:20;:27;2460:1;:31;2440:229;;;2533:20;2554:1;2533:23;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2578:24:2;;;;2570:33;;;;;;-1:-1:-1;;;;;2617:34:2;;;;;;:22;:34;;;;;:41;;-1:-1:-1;;2617:41:2;2654:4;2617:41;;;;;;2493:3;;;;;2440:229;;;2161:514;;;;;;707:3198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;707:3198:2;-1:-1:-1;;;;;707:3198:2;;;;;;;;;;;-1:-1:-1;707:3198:2;;;;;;;-1:-1:-1;707:3198:2;;;-1:-1:-1;707:3198:2;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;;707:3198:2;;;;;;;;;:::o;:::-;;;;;;;"
+ "object": "0x606060405234156200000d57fe5b60405162001e8338038062001e8383398101604090815281516020830151918301516060840151918401939290920191905b600060008584845b82825b600082518260328211806200005e57508181115b8062000068575080155b8062000072575081155b156200007e5760006000fd5b600092505b84518310156200015357600260008685815181101515620000a057fe5b6020908102909101810151600160a060020a031682528101919091526040016000205460ff1680620000f357508483815181101515620000dc57fe5b90602001906020020151600160a060020a03166000145b15620000ff5760006000fd5b60016002600087868151811015156200011457fe5b602090810291909101810151600160a060020a03168252810191909152604001600020805460ff19169115159190911790555b60019092019162000083565b845162000168906003906020880190620001fc565b5060048490555b5b505050600683905550505b505050600091505b8451821015620001ef5784828151811015156200019c57fe5b602090810290910101519050600160a060020a0381161515620001bf5760006000fd5b600160a060020a0381166000908152600860205260409020805460ff191660011790555b60019091019062000183565b5b50505050505062000295565b82805482825590600052602060002090810192821562000254579160200282015b82811115620002545782518254600160a060020a031916600160a060020a039091161782556020909201916001909101906200021d565b5b506200026392915062000267565b5090565b6200029291905b8082111562000263578054600160a060020a03191681556001016200026e565b5090565b90565b611bde80620002a56000396000f300606060405236156101435763ffffffff60e060020a600035041663025e7c278114610195578063173825d9146101c457806320ea8d86146101e25780632f54bf6e146101f75780633411c81c146102275780633589b35c1461025a57806337bd78a01461026f57806354741525146102915780635a1a66af146102bd5780637065cb48146102e0578063784547a7146102fe5780637ad28c511461032557806383250f791461033a5780638b51d13f1461036a5780639ace38c21461038f578063a0e67e2b1461044c578063a8abe69a146104b7578063b5dc40c314610532578063b77bf600146105a0578063ba51a6df146105c2578063c01a8c84146105d7578063c6427474146105ec578063d38f2d8214610661578063d74f8edd14610686578063dc8452cd146106a8578063e20056e6146106ca578063ee22610b146106ee575b6101935b600034111561019057604080513481529051600160a060020a033316917fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c919081900360200190a25b5b565b005b341561019d57fe5b6101a8600435610703565b60408051600160a060020a039092168252519081900360200190f35b34156101cc57fe5b610193600160a060020a0360043516610735565b005b34156101ea57fe5b6101936004356108e6565b005b34156101ff57fe5b610213600160a060020a03600435166109da565b604080519115158252519081900360200190f35b341561022f57fe5b610213600435600160a060020a03602435166109ef565b604080519115158252519081900360200190f35b341561026257fe5b610193600435610a0f565b005b341561027757fe5b61027f610cc9565b60408051918252519081900360200190f35b341561029957fe5b61027f60043515156024351515610ccf565b60408051918252519081900360200190f35b34156102c557fe5b610193600160a060020a03600435166024351515610d3e565b005b34156102e857fe5b610193600160a060020a0360043516610dde565b005b341561030657fe5b610213600435610f15565b604080519115158252519081900360200190f35b341561032d57fe5b610193600435610fa9565b005b341561034257fe5b610213600160a060020a0360043516611007565b604080519115158252519081900360200190f35b341561037257fe5b61027f60043561101c565b60408051918252519081900360200190f35b341561039757fe5b6103a260043561109b565b60408051600160a060020a03861681526020810185905282151560608201526080918101828152845460026000196101006001841615020190911604928201839052909160a08301908590801561043a5780601f1061040f5761010080835404028352916020019161043a565b820191906000526020600020905b81548152906001019060200180831161041d57829003601f168201915b50509550505050505060405180910390f35b341561045457fe5b61045c6110cf565b60408051602080825283518183015283519192839290830191858101910280838382156104a4575b8051825260208311156104a457601f199092019160209182019101610484565b5050509050019250505060405180910390f35b34156104bf57fe5b61045c60043560243560443515156064351515611138565b60408051602080825283518183015283519192839290830191858101910280838382156104a4575b8051825260208311156104a457601f199092019160209182019101610484565b5050509050019250505060405180910390f35b341561053a57fe5b61045c60043561126d565b60408051602080825283518183015283519192839290830191858101910280838382156104a4575b8051825260208311156104a457601f199092019160209182019101610484565b5050509050019250505060405180910390f35b34156105a857fe5b61027f6113f5565b60408051918252519081900360200190f35b34156105ca57fe5b6101936004356113fb565b005b34156105df57fe5b61019360043561148b565b005b34156105f457fe5b604080516020600460443581810135601f810184900484028501840190955284845261027f948235600160a060020a03169460248035956064949293919092019181908401838280828437509496506115a095505050505050565b60408051918252519081900360200190f35b341561066957fe5b61027f6004356115c0565b60408051918252519081900360200190f35b341561068e57fe5b61027f6115d2565b60408051918252519081900360200190f35b34156106b057fe5b61027f6115d7565b60408051918252519081900360200190f35b34156106d257fe5b610193600160a060020a03600435811690602435166115dd565b005b34156106f657fe5b610193600435611799565b005b600380548290811061071157fe5b906000526020600020900160005b915054906101000a9004600160a060020a031681565b600030600160a060020a031633600160a060020a03161415156107585760006000fd5b600160a060020a038216600090815260026020526040902054829060ff1615156107825760006000fd5b600160a060020a0383166000908152600260205260408120805460ff1916905591505b6003546000190182101561087d5782600160a060020a03166003838154811015156107cc57fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a031614156108715760038054600019810190811061080d57fe5b906000526020600020900160005b9054906101000a9004600160a060020a031660038381548110151561083c57fe5b906000526020600020900160005b6101000a815481600160a060020a030219169083600160a060020a0316021790555061087d565b5b6001909101906107a5565b6003805460001901906108909082611a9a565b5060035460045411156108a9576003546108a9906113fb565b5b604051600160a060020a038416907f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9090600090a25b5b505b5050565b33600160a060020a03811660009081526002602052604090205460ff16151561090f5760006000fd5b600082815260016020908152604080832033600160a060020a038116855292529091205483919060ff1615156109455760006000fd5b600084815260208190526040902060030154849060ff16156109675760006000fd5b8461097181610f15565b1561097c5760006000fd5b6000868152600160209081526040808320600160a060020a0333168085529252808320805460ff191690555188927ff6a317157440607f36269043eb55f1287a5a19ba2216afeab88cd46cbcfb88e991a35b5b505b505b50505b5050565b60026020526000908152604090205460ff1681565b600160209081526000928352604080842090915290825290205460ff1681565b600081815260208190526040812060030154829060ff1615610a315760006000fd5b82610a3b81610f15565b1515610a475760006000fd5b6000848152602081815260408083208054600160a060020a0316845260089092529091205485919060ff161515610a7e5760006000fd5b604080517f72656d6f7665417574686f72697a6564416464726573734174496e646578286181527f6464726573732c75696e743235362900000000000000000000000000000000006020808301919091528251602f9281900392909201822060028581018054600181161561010002600019011691909104601f8101849004840285018401909552848452600160e060020a031990911693610b789392830182828015610b6c5780601f10610b4157610100808354040283529160200191610b6c565b820191906000526020600020905b815481529060010190602001808311610b4f57829003601f168201915b5050505050600061192e565b600160e060020a03191614610b8d5760006000fd5b6000868152602081905260409081902060038101805460ff19166001908117909155815481830154935160028085018054959b50600160a060020a0390931695949293919283928592600019918316156101000291909101909116048015610c365780601f10610c0b57610100808354040283529160200191610c36565b820191906000526020600020905b815481529060010190602001808311610c1957829003601f168201915b505091505060006040518083038185876185025a03f19250505015610c855760405186907f33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed7590600090a26109ce565b60405186907f526441bb6c1aba3c9a4a6ca1d6545da9c2333c8c48343ef398eb858d72b7923690600090a260038501805460ff191690555b5b5b50505b505b505050565b60065481565b6000805b600554811015610d3657838015610cfc575060008181526020819052604090206003015460ff16155b80610d205750828015610d20575060008181526020819052604090206003015460ff165b5b15610d2d576001820191505b5b600101610cd3565b5b5092915050565b30600160a060020a031633600160a060020a0316141515610d5f5760006000fd5b81600160a060020a0381161515610d765760006000fd5b600160a060020a038316600081815260086020908152604091829020805460ff191686151590811790915582519384529083015280517fdaef8ff7dc66c5e34eb9c338aab679d9f427f89868d9228494455a4d982eb2b09281900390910190a15b5b505b5050565b30600160a060020a031633600160a060020a0316141515610dff5760006000fd5b600160a060020a038116600090815260026020526040902054819060ff1615610e285760006000fd5b81600160a060020a0381161515610e3f5760006000fd5b6003805490506001016004546032821180610e5957508181115b80610e62575080155b80610e6b575081155b15610e765760006000fd5b600160a060020a0385166000908152600260205260409020805460ff191660019081179091556003805490918101610eae8382611a9a565b916000526020600020900160005b8154600160a060020a03808a166101009390930a838102910219909116179091556040519091507ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d90600090a25b5b50505b505b505b50565b600080805b600354811015610fa15760008481526001602052604081206003805491929184908110610f4357fe5b906000526020600020900160005b9054600160a060020a036101009290920a900416815260208101919091526040016000205460ff1615610f85576001820191505b600454821415610f985760019250610fa1565b5b600101610f1a565b5b5050919050565b30600160a060020a031633600160a060020a0316141515610fca5760006000fd5b60068190556040805182815290517fd1c9101a34feff75cccef14a28785a0279cb0b49c1f321f21f5f422e746b43779181900360200190a15b5b50565b60086020526000908152604090205460ff1681565b6000805b600354811015611094576000838152600160205260408120600380549192918490811061104957fe5b906000526020600020900160005b9054600160a060020a036101009290920a900416815260208101919091526040016000205460ff161561108b576001820191505b5b600101611020565b5b50919050565b6000602081905290815260409020805460018201546003830154600160a060020a0390921692909160029091019060ff1684565b6110d7611aee565b600380548060200260200160405190810160405280929190818152602001828054801561112d57602002820191906000526020600020905b8154600160a060020a0316815260019091019060200180831161110f575b505050505090505b90565b611140611aee565b611148611aee565b6000600060055460405180591061115c5750595b908082528060200260200182016040525b50925060009150600090505b6005548110156111f6578580156111a2575060008181526020819052604090206003015460ff16155b806111c657508480156111c6575060008181526020819052604090206003015460ff165b5b156111ed578083838151811015156111db57fe5b60209081029091010152600191909101905b5b600101611179565b8787036040518059106112065750595b908082528060200260200182016040525b5093508790505b8681101561126157828181518110151561123457fe5b906020019060200201518489830381518110151561124e57fe5b602090810290910101525b60010161121e565b5b505050949350505050565b611275611aee565b61127d611aee565b60035460405160009182918059106112925750595b908082528060200260200182016040525b50925060009150600090505b60035481101561137757600085815260016020526040812060038054919291849081106112d857fe5b906000526020600020900160005b9054600160a060020a036101009290920a900416815260208101919091526040016000205460ff161561136e57600380548290811061132157fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316838381518110151561134f57fe5b600160a060020a03909216602092830290910190910152600191909101905b5b6001016112af565b816040518059106113855750595b908082528060200260200182016040525b509350600090505b818110156113ec5782818151811015156113b457fe5b9060200190602002015184828151811015156113cc57fe5b600160a060020a039092166020928302909101909101525b60010161139e565b5b505050919050565b60055481565b30600160a060020a031633600160a060020a031614151561141c5760006000fd5b60035481603282118061142e57508181115b80611437575080155b80611440575081155b1561144b5760006000fd5b60048390556040805184815290517fa3f1ee9126a074d9326c682f561767f710e927faa811f7a99829d49dc421797a9181900360200190a15b5b50505b50565b33600160a060020a03811660009081526002602052604090205460ff1615156114b45760006000fd5b6000828152602081905260409020548290600160a060020a031615156114da5760006000fd5b600083815260016020908152604080832033600160a060020a038116855292529091205484919060ff161561150f5760006000fd5b8461151981610f15565b156115245760006000fd5b6000868152600160208181526040808420600160a060020a0333168086529252808420805460ff1916909317909255905188927f4a504a94899432a9846e1aa406dceb1bcfd538bb839071d49d1e5e23f5be30ef91a361158386610f15565b156109ce576109ce864261195b565b5b5b5b505b50505b505b5050565b60006115ad8484846119a7565b90506115b88161148b565b5b9392505050565b60076020526000908152604090205481565b603281565b60045481565b600030600160a060020a031633600160a060020a03161415156116005760006000fd5b600160a060020a038316600090815260026020526040902054839060ff16151561162a5760006000fd5b600160a060020a038316600090815260026020526040902054839060ff16156116535760006000fd5b600092505b6003548310156116fb5784600160a060020a031660038481548110151561167b57fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a031614156116ef57836003848154811015156116ba57fe5b906000526020600020900160005b6101000a815481600160a060020a030219169083600160a060020a031602179055506116fb565b5b600190920191611658565b600160a060020a03808616600081815260026020526040808220805460ff1990811690915593881682528082208054909416600117909355915190917f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9091a2604051600160a060020a038516907ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d90600090a25b5b505b505b505050565b600081815260208190526040812060030154829060ff16156117bb5760006000fd5b826117c581610f15565b15156117d15760006000fd5b6006546000858152600760205260409020548591014210156117f35760006000fd5b6000858152602081905260409081902060038101805460ff19166001908117909155815481830154935160028085018054959a50600160a060020a039093169594929391928392859260001991831615610100029190910190911604801561189c5780601f106118715761010080835404028352916020019161189c565b820191906000526020600020905b81548152906001019060200180831161187f57829003601f168201915b505091505060006040518083038185876185025a03f192505050156118eb5760405185907f33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed7590600090a26109d1565b60405185907f526441bb6c1aba3c9a4a6ca1d6545da9c2333c8c48343ef398eb858d72b7923690600090a260038401805460ff191690555b5b5b505b505b505050565b6000816004018351101515156119445760006000fd5b506020820151600160e060020a0319165b92915050565b6000828152600760209081526040918290208390558151838152915184927f0b237afe65f1514fd7ea3f923ea4fe792bdd07000a912b6cd1602a8e7f573c8d92908290030190a25b5050565b600083600160a060020a03811615156119c05760006000fd5b60055460408051608081018252600160a060020a0388811682526020808301898152838501898152600060608601819052878152808452959095208451815473ffffffffffffffffffffffffffffffffffffffff191694169390931783555160018301559251805194965091939092611a40926002850192910190611b12565b50606091909101516003909101805460ff191691151591909117905560058054600101905560405182907fc0ba8fe4b176c1714197d43b9cc6bcf797a4a7461c5fe8d0ef6e184ae7601e5190600090a25b5b509392505050565b8154818355818115116108df576000838152602090206108df918101908301611b91565b5b505050565b8154818355818115116108df576000838152602090206108df918101908301611b91565b5b505050565b60408051602081019091526000815290565b60408051602081019091526000815290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611b5357805160ff1916838001178555611b80565b82800160010185558215611b80579182015b82811115611b80578251825591602001919060010190611b65565b5b50611b8d929150611b91565b5090565b61113591905b80821115611b8d5760008155600101611b97565b5090565b905600a165627a7a72305820de7348a39a18c2139f807a6077c790eed8049dfeaae504bf4a42607bfae3afce0029",
+ "opcodes": "PUSH1 0x60 PUSH1 0x40 MSTORE CALLVALUE ISZERO PUSH3 0xD JUMPI INVALID JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x1E83 CODESIZE SUB DUP1 PUSH3 0x1E83 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 SWAP1 DUP2 MSTORE DUP2 MLOAD PUSH1 0x20 DUP4 ADD MLOAD SWAP2 DUP4 ADD MLOAD PUSH1 0x60 DUP5 ADD MLOAD SWAP2 DUP5 ADD SWAP4 SWAP3 SWAP1 SWAP3 ADD SWAP2 SWAP1 JUMPDEST PUSH1 0x0 PUSH1 0x0 DUP6 DUP5 DUP5 JUMPDEST DUP3 DUP3 JUMPDEST PUSH1 0x0 DUP3 MLOAD DUP3 PUSH1 0x32 DUP3 GT DUP1 PUSH3 0x5E JUMPI POP DUP2 DUP2 GT JUMPDEST DUP1 PUSH3 0x68 JUMPI POP DUP1 ISZERO JUMPDEST DUP1 PUSH3 0x72 JUMPI POP DUP2 ISZERO JUMPDEST ISZERO PUSH3 0x7E JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 SWAP3 POP JUMPDEST DUP5 MLOAD DUP4 LT ISZERO PUSH3 0x153 JUMPI PUSH1 0x2 PUSH1 0x0 DUP7 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH3 0xA0 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND DUP3 MSTORE DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 SHA3 SLOAD PUSH1 0xFF AND DUP1 PUSH3 0xF3 JUMPI POP DUP5 DUP4 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH3 0xDC JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x0 EQ JUMPDEST ISZERO PUSH3 0xFF JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x2 PUSH1 0x0 DUP8 DUP7 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH3 0x114 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND DUP3 MSTORE DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 SHA3 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMPDEST PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 PUSH3 0x83 JUMP JUMPDEST DUP5 MLOAD PUSH3 0x168 SWAP1 PUSH1 0x3 SWAP1 PUSH1 0x20 DUP9 ADD SWAP1 PUSH3 0x1FC JUMP JUMPDEST POP PUSH1 0x4 DUP5 SWAP1 SSTORE JUMPDEST JUMPDEST POP POP POP PUSH1 0x6 DUP4 SWAP1 SSTORE POP POP JUMPDEST POP POP POP PUSH1 0x0 SWAP2 POP JUMPDEST DUP5 MLOAD DUP3 LT ISZERO PUSH3 0x1EF JUMPI DUP5 DUP3 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH3 0x19C JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MLOAD SWAP1 POP PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 AND ISZERO ISZERO PUSH3 0x1BF JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SHA3 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH3 0x183 JUMP JUMPDEST JUMPDEST POP POP POP POP POP POP PUSH3 0x295 JUMP JUMPDEST DUP3 DUP1 SLOAD DUP3 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 SHA3 SWAP1 DUP2 ADD SWAP3 DUP3 ISZERO PUSH3 0x254 JUMPI SWAP2 PUSH1 0x20 MUL DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x254 JUMPI DUP3 MLOAD DUP3 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB NOT AND PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP1 SWAP2 AND OR DUP3 SSTORE PUSH1 0x20 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH3 0x21D JUMP JUMPDEST JUMPDEST POP PUSH3 0x263 SWAP3 SWAP2 POP PUSH3 0x267 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH3 0x292 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x263 JUMPI DUP1 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB NOT AND DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x26E JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0x1BDE DUP1 PUSH3 0x2A5 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x60 PUSH1 0x40 MSTORE CALLDATASIZE ISZERO PUSH2 0x143 JUMPI PUSH4 0xFFFFFFFF PUSH1 0xE0 PUSH1 0x2 EXP PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x25E7C27 DUP2 EQ PUSH2 0x195 JUMPI DUP1 PUSH4 0x173825D9 EQ PUSH2 0x1C4 JUMPI DUP1 PUSH4 0x20EA8D86 EQ PUSH2 0x1E2 JUMPI DUP1 PUSH4 0x2F54BF6E EQ PUSH2 0x1F7 JUMPI DUP1 PUSH4 0x3411C81C EQ PUSH2 0x227 JUMPI DUP1 PUSH4 0x3589B35C EQ PUSH2 0x25A JUMPI DUP1 PUSH4 0x37BD78A0 EQ PUSH2 0x26F JUMPI DUP1 PUSH4 0x54741525 EQ PUSH2 0x291 JUMPI DUP1 PUSH4 0x5A1A66AF EQ PUSH2 0x2BD JUMPI DUP1 PUSH4 0x7065CB48 EQ PUSH2 0x2E0 JUMPI DUP1 PUSH4 0x784547A7 EQ PUSH2 0x2FE JUMPI DUP1 PUSH4 0x7AD28C51 EQ PUSH2 0x325 JUMPI DUP1 PUSH4 0x83250F79 EQ PUSH2 0x33A JUMPI DUP1 PUSH4 0x8B51D13F EQ PUSH2 0x36A JUMPI DUP1 PUSH4 0x9ACE38C2 EQ PUSH2 0x38F JUMPI DUP1 PUSH4 0xA0E67E2B EQ PUSH2 0x44C JUMPI DUP1 PUSH4 0xA8ABE69A EQ PUSH2 0x4B7 JUMPI DUP1 PUSH4 0xB5DC40C3 EQ PUSH2 0x532 JUMPI DUP1 PUSH4 0xB77BF600 EQ PUSH2 0x5A0 JUMPI DUP1 PUSH4 0xBA51A6DF EQ PUSH2 0x5C2 JUMPI DUP1 PUSH4 0xC01A8C84 EQ PUSH2 0x5D7 JUMPI DUP1 PUSH4 0xC6427474 EQ PUSH2 0x5EC JUMPI DUP1 PUSH4 0xD38F2D82 EQ PUSH2 0x661 JUMPI DUP1 PUSH4 0xD74F8EDD EQ PUSH2 0x686 JUMPI DUP1 PUSH4 0xDC8452CD EQ PUSH2 0x6A8 JUMPI DUP1 PUSH4 0xE20056E6 EQ PUSH2 0x6CA JUMPI DUP1 PUSH4 0xEE22610B EQ PUSH2 0x6EE JUMPI JUMPDEST PUSH2 0x193 JUMPDEST PUSH1 0x0 CALLVALUE GT ISZERO PUSH2 0x190 JUMPI PUSH1 0x40 DUP1 MLOAD CALLVALUE DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB CALLER AND SWAP2 PUSH32 0xE1FFFCC4923D04B559F4D29A8BFC6CDA04EB5B0D3C460751C2402C5C5CC9109C SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 JUMPDEST JUMPDEST JUMP JUMPDEST STOP JUMPDEST CALLVALUE ISZERO PUSH2 0x19D JUMPI INVALID JUMPDEST PUSH2 0x1A8 PUSH1 0x4 CALLDATALOAD PUSH2 0x703 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x1CC JUMPI INVALID JUMPDEST PUSH2 0x193 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB PUSH1 0x4 CALLDATALOAD AND PUSH2 0x735 JUMP JUMPDEST STOP JUMPDEST CALLVALUE ISZERO PUSH2 0x1EA JUMPI INVALID JUMPDEST PUSH2 0x193 PUSH1 0x4 CALLDATALOAD PUSH2 0x8E6 JUMP JUMPDEST STOP JUMPDEST CALLVALUE ISZERO PUSH2 0x1FF JUMPI INVALID JUMPDEST PUSH2 0x213 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB PUSH1 0x4 CALLDATALOAD AND PUSH2 0x9DA 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 0x22F JUMPI INVALID JUMPDEST PUSH2 0x213 PUSH1 0x4 CALLDATALOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB PUSH1 0x24 CALLDATALOAD AND PUSH2 0x9EF 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 0x262 JUMPI INVALID JUMPDEST PUSH2 0x193 PUSH1 0x4 CALLDATALOAD PUSH2 0xA0F JUMP JUMPDEST STOP JUMPDEST CALLVALUE ISZERO PUSH2 0x277 JUMPI INVALID JUMPDEST PUSH2 0x27F PUSH2 0xCC9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x299 JUMPI INVALID JUMPDEST PUSH2 0x27F PUSH1 0x4 CALLDATALOAD ISZERO ISZERO PUSH1 0x24 CALLDATALOAD ISZERO ISZERO PUSH2 0xCCF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x2C5 JUMPI INVALID JUMPDEST PUSH2 0x193 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD ISZERO ISZERO PUSH2 0xD3E JUMP JUMPDEST STOP JUMPDEST CALLVALUE ISZERO PUSH2 0x2E8 JUMPI INVALID JUMPDEST PUSH2 0x193 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB PUSH1 0x4 CALLDATALOAD AND PUSH2 0xDDE JUMP JUMPDEST STOP JUMPDEST CALLVALUE ISZERO PUSH2 0x306 JUMPI INVALID JUMPDEST PUSH2 0x213 PUSH1 0x4 CALLDATALOAD PUSH2 0xF15 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 0x32D JUMPI INVALID JUMPDEST PUSH2 0x193 PUSH1 0x4 CALLDATALOAD PUSH2 0xFA9 JUMP JUMPDEST STOP JUMPDEST CALLVALUE ISZERO PUSH2 0x342 JUMPI INVALID JUMPDEST PUSH2 0x213 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB PUSH1 0x4 CALLDATALOAD AND PUSH2 0x1007 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 0x372 JUMPI INVALID JUMPDEST PUSH2 0x27F PUSH1 0x4 CALLDATALOAD PUSH2 0x101C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x397 JUMPI INVALID JUMPDEST PUSH2 0x3A2 PUSH1 0x4 CALLDATALOAD PUSH2 0x109B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP7 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE DUP3 ISZERO ISZERO PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 SWAP2 DUP2 ADD DUP3 DUP2 MSTORE DUP5 SLOAD PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP5 AND ISZERO MUL ADD SWAP1 SWAP2 AND DIV SWAP3 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 SWAP2 PUSH1 0xA0 DUP4 ADD SWAP1 DUP6 SWAP1 DUP1 ISZERO PUSH2 0x43A JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x40F JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x43A JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 SHA3 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x41D JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x454 JUMPI INVALID JUMPDEST PUSH2 0x45C PUSH2 0x10CF 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 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 DUP3 ISZERO PUSH2 0x4A4 JUMPI JUMPDEST DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP4 GT ISZERO PUSH2 0x4A4 JUMPI PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x484 JUMP JUMPDEST POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x4BF JUMPI INVALID JUMPDEST PUSH2 0x45C PUSH1 0x4 CALLDATALOAD PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD ISZERO ISZERO PUSH1 0x64 CALLDATALOAD ISZERO ISZERO PUSH2 0x1138 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 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 DUP3 ISZERO PUSH2 0x4A4 JUMPI JUMPDEST DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP4 GT ISZERO PUSH2 0x4A4 JUMPI PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x484 JUMP JUMPDEST POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x53A JUMPI INVALID JUMPDEST PUSH2 0x45C PUSH1 0x4 CALLDATALOAD PUSH2 0x126D 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 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 DUP3 ISZERO PUSH2 0x4A4 JUMPI JUMPDEST DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP4 GT ISZERO PUSH2 0x4A4 JUMPI PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x484 JUMP JUMPDEST POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x5A8 JUMPI INVALID JUMPDEST PUSH2 0x27F PUSH2 0x13F5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x5CA JUMPI INVALID JUMPDEST PUSH2 0x193 PUSH1 0x4 CALLDATALOAD PUSH2 0x13FB JUMP JUMPDEST STOP JUMPDEST CALLVALUE ISZERO PUSH2 0x5DF JUMPI INVALID JUMPDEST PUSH2 0x193 PUSH1 0x4 CALLDATALOAD PUSH2 0x148B JUMP JUMPDEST STOP JUMPDEST CALLVALUE ISZERO PUSH2 0x5F4 JUMPI INVALID JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 PUSH1 0x44 CALLDATALOAD DUP2 DUP2 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x27F SWAP5 DUP3 CALLDATALOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND SWAP5 PUSH1 0x24 DUP1 CALLDATALOAD SWAP6 PUSH1 0x64 SWAP5 SWAP3 SWAP4 SWAP2 SWAP1 SWAP3 ADD SWAP2 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP7 POP PUSH2 0x15A0 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x669 JUMPI INVALID JUMPDEST PUSH2 0x27F PUSH1 0x4 CALLDATALOAD PUSH2 0x15C0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x68E JUMPI INVALID JUMPDEST PUSH2 0x27F PUSH2 0x15D2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x6B0 JUMPI INVALID JUMPDEST PUSH2 0x27F PUSH2 0x15D7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x6D2 JUMPI INVALID JUMPDEST PUSH2 0x193 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH2 0x15DD JUMP JUMPDEST STOP JUMPDEST CALLVALUE ISZERO PUSH2 0x6F6 JUMPI INVALID JUMPDEST PUSH2 0x193 PUSH1 0x4 CALLDATALOAD PUSH2 0x1799 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x3 DUP1 SLOAD DUP3 SWAP1 DUP2 LT PUSH2 0x711 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 SHA3 SWAP1 ADD PUSH1 0x0 JUMPDEST SWAP2 POP SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND CALLER PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND EQ ISZERO ISZERO PUSH2 0x758 JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SHA3 SLOAD DUP3 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x782 JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 SHA3 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE SWAP2 POP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x0 NOT ADD DUP3 LT ISZERO PUSH2 0x87D JUMPI DUP3 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x3 DUP4 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x7CC JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 SHA3 SWAP1 ADD PUSH1 0x0 JUMPDEST SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND EQ ISZERO PUSH2 0x871 JUMPI PUSH1 0x3 DUP1 SLOAD PUSH1 0x0 NOT DUP2 ADD SWAP1 DUP2 LT PUSH2 0x80D JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 SHA3 SWAP1 ADD PUSH1 0x0 JUMPDEST SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x3 DUP4 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x83C JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 SHA3 SWAP1 ADD PUSH1 0x0 JUMPDEST PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB MUL NOT AND SWAP1 DUP4 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND MUL OR SWAP1 SSTORE POP PUSH2 0x87D JUMP JUMPDEST JUMPDEST PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x7A5 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x0 NOT ADD SWAP1 PUSH2 0x890 SWAP1 DUP3 PUSH2 0x1A9A JUMP JUMPDEST POP PUSH1 0x3 SLOAD PUSH1 0x4 SLOAD GT ISZERO PUSH2 0x8A9 JUMPI PUSH1 0x3 SLOAD PUSH2 0x8A9 SWAP1 PUSH2 0x13FB JUMP JUMPDEST JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP5 AND SWAP1 PUSH32 0x8001553A916EF2F495D26A907CC54D96ED840D7BDA71E73194BF5A9DF7A76B90 SWAP1 PUSH1 0x0 SWAP1 LOG2 JUMPDEST JUMPDEST POP JUMPDEST POP POP JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SHA3 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x90F JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 SHA3 CALLER PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 AND DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 SHA3 SLOAD DUP4 SWAP2 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x945 JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 SHA3 PUSH1 0x3 ADD SLOAD DUP5 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x967 JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST DUP5 PUSH2 0x971 DUP2 PUSH2 0xF15 JUMP JUMPDEST ISZERO PUSH2 0x97C JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 SHA3 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB CALLER AND DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 SHA3 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD DUP9 SWAP3 PUSH32 0xF6A317157440607F36269043EB55F1287A5A19BA2216AFEAB88CD46CBCFB88E9 SWAP2 LOG3 JUMPDEST JUMPDEST POP JUMPDEST POP JUMPDEST POP POP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 SHA3 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 SHA3 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 SHA3 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 SHA3 PUSH1 0x3 ADD SLOAD DUP3 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0xA31 JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST DUP3 PUSH2 0xA3B DUP2 PUSH2 0xF15 JUMP JUMPDEST ISZERO ISZERO PUSH2 0xA47 JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 SHA3 DUP1 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND DUP5 MSTORE PUSH1 0x8 SWAP1 SWAP3 MSTORE SWAP1 SWAP2 SHA3 SLOAD DUP6 SWAP2 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0xA7E JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x72656D6F7665417574686F72697A6564416464726573734174496E6465782861 DUP2 MSTORE PUSH32 0x6464726573732C75696E74323536290000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP3 MLOAD PUSH1 0x2F SWAP3 DUP2 SWAP1 SUB SWAP3 SWAP1 SWAP3 ADD DUP3 SHA3 PUSH1 0x2 DUP6 DUP2 ADD DUP1 SLOAD PUSH1 0x1 DUP2 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD AND SWAP2 SWAP1 SWAP2 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH1 0x1 PUSH1 0xE0 PUSH1 0x2 EXP SUB NOT SWAP1 SWAP2 AND SWAP4 PUSH2 0xB78 SWAP4 SWAP3 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xB6C JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xB41 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xB6C JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 SHA3 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xB4F JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP PUSH1 0x0 PUSH2 0x192E JUMP JUMPDEST PUSH1 0x1 PUSH1 0xE0 PUSH1 0x2 EXP SUB NOT AND EQ PUSH2 0xB8D JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 SHA3 PUSH1 0x3 DUP2 ADD DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP2 SLOAD DUP2 DUP4 ADD SLOAD SWAP4 MLOAD PUSH1 0x2 DUP1 DUP6 ADD DUP1 SLOAD SWAP6 SWAP12 POP PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP1 SWAP4 AND SWAP6 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 DUP4 SWAP3 DUP6 SWAP3 PUSH1 0x0 NOT SWAP2 DUP4 AND ISZERO PUSH2 0x100 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 AND DIV DUP1 ISZERO PUSH2 0xC36 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xC0B JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xC36 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 SHA3 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xC19 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 PUSH2 0x8502 GAS SUB CALL SWAP3 POP POP POP ISZERO PUSH2 0xC85 JUMPI PUSH1 0x40 MLOAD DUP7 SWAP1 PUSH32 0x33E13ECB54C3076D8E8BB8C2881800A4D972B792045FFAE98FDF46DF365FED75 SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH2 0x9CE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP7 SWAP1 PUSH32 0x526441BB6C1ABA3C9A4A6CA1D6545DA9C2333C8C48343EF398EB858D72B79236 SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH1 0x3 DUP6 ADD DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE JUMPDEST JUMPDEST JUMPDEST POP POP JUMPDEST POP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST PUSH1 0x5 SLOAD DUP2 LT ISZERO PUSH2 0xD36 JUMPI DUP4 DUP1 ISZERO PUSH2 0xCFC JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 SHA3 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND ISZERO JUMPDEST DUP1 PUSH2 0xD20 JUMPI POP DUP3 DUP1 ISZERO PUSH2 0xD20 JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 SHA3 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND JUMPDEST JUMPDEST ISZERO PUSH2 0xD2D JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST JUMPDEST PUSH1 0x1 ADD PUSH2 0xCD3 JUMP JUMPDEST JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND CALLER PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND EQ ISZERO ISZERO PUSH2 0xD5F JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST DUP2 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 AND ISZERO ISZERO PUSH2 0xD76 JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 SHA3 DUP1 SLOAD PUSH1 0xFF NOT AND DUP7 ISZERO ISZERO SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP3 MLOAD SWAP4 DUP5 MSTORE SWAP1 DUP4 ADD MSTORE DUP1 MLOAD PUSH32 0xDAEF8FF7DC66C5E34EB9C338AAB679D9F427F89868D9228494455A4D982EB2B0 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 JUMPDEST JUMPDEST POP JUMPDEST POP POP JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND CALLER PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND EQ ISZERO ISZERO PUSH2 0xDFF JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SHA3 SLOAD DUP2 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0xE28 JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST DUP2 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 AND ISZERO ISZERO PUSH2 0xE3F JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x3 DUP1 SLOAD SWAP1 POP PUSH1 0x1 ADD PUSH1 0x4 SLOAD PUSH1 0x32 DUP3 GT DUP1 PUSH2 0xE59 JUMPI POP DUP2 DUP2 GT JUMPDEST DUP1 PUSH2 0xE62 JUMPI POP DUP1 ISZERO JUMPDEST DUP1 PUSH2 0xE6B JUMPI POP DUP2 ISZERO JUMPDEST ISZERO PUSH2 0xE76 JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SHA3 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x3 DUP1 SLOAD SWAP1 SWAP2 DUP2 ADD PUSH2 0xEAE DUP4 DUP3 PUSH2 0x1A9A JUMP JUMPDEST SWAP2 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 SHA3 SWAP1 ADD PUSH1 0x0 JUMPDEST DUP2 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP1 DUP11 AND PUSH2 0x100 SWAP4 SWAP1 SWAP4 EXP DUP4 DUP2 MUL SWAP2 MUL NOT SWAP1 SWAP2 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 SWAP2 POP PUSH32 0xF39E6E1EB0EDCF53C221607B54B00CD28F3196FED0A24994DC308B8F611B682D SWAP1 PUSH1 0x0 SWAP1 LOG2 JUMPDEST JUMPDEST POP POP JUMPDEST POP JUMPDEST POP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 JUMPDEST PUSH1 0x3 SLOAD DUP2 LT ISZERO PUSH2 0xFA1 JUMPI PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 SHA3 PUSH1 0x3 DUP1 SLOAD SWAP2 SWAP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0xF43 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 SHA3 SWAP1 ADD PUSH1 0x0 JUMPDEST SWAP1 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB PUSH2 0x100 SWAP3 SWAP1 SWAP3 EXP SWAP1 DIV AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 SHA3 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xF85 JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x4 SLOAD DUP3 EQ ISZERO PUSH2 0xF98 JUMPI PUSH1 0x1 SWAP3 POP PUSH2 0xFA1 JUMP JUMPDEST JUMPDEST PUSH1 0x1 ADD PUSH2 0xF1A JUMP JUMPDEST JUMPDEST POP POP SWAP2 SWAP1 POP JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND CALLER PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND EQ ISZERO ISZERO PUSH2 0xFCA JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x6 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xD1C9101A34FEFF75CCCEF14A28785A0279CB0B49C1F321F21F5F422E746B4377 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 JUMPDEST JUMPDEST POP JUMP JUMPDEST PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 SHA3 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST PUSH1 0x3 SLOAD DUP2 LT ISZERO PUSH2 0x1094 JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 SHA3 PUSH1 0x3 DUP1 SLOAD SWAP2 SWAP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x1049 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 SHA3 SWAP1 ADD PUSH1 0x0 JUMPDEST SWAP1 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB PUSH2 0x100 SWAP3 SWAP1 SWAP3 EXP SWAP1 DIV AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 SHA3 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x108B JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST JUMPDEST PUSH1 0x1 ADD PUSH2 0x1020 JUMP JUMPDEST JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP2 SWAP1 MSTORE SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 SHA3 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x3 DUP4 ADD SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP1 SWAP3 AND SWAP3 SWAP1 SWAP2 PUSH1 0x2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0xFF AND DUP5 JUMP JUMPDEST PUSH2 0x10D7 PUSH2 0x1AEE JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x112D JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 SHA3 SWAP1 JUMPDEST DUP2 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x110F JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0x1140 PUSH2 0x1AEE JUMP JUMPDEST PUSH2 0x1148 PUSH2 0x1AEE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x0 PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD DUP1 MSIZE LT PUSH2 0x115C JUMPI POP MSIZE JUMPDEST SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE JUMPDEST POP SWAP3 POP PUSH1 0x0 SWAP2 POP PUSH1 0x0 SWAP1 POP JUMPDEST PUSH1 0x5 SLOAD DUP2 LT ISZERO PUSH2 0x11F6 JUMPI DUP6 DUP1 ISZERO PUSH2 0x11A2 JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 SHA3 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND ISZERO JUMPDEST DUP1 PUSH2 0x11C6 JUMPI POP DUP5 DUP1 ISZERO PUSH2 0x11C6 JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 SHA3 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND JUMPDEST JUMPDEST ISZERO PUSH2 0x11ED JUMPI DUP1 DUP4 DUP4 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x11DB JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SWAP1 JUMPDEST JUMPDEST PUSH1 0x1 ADD PUSH2 0x1179 JUMP JUMPDEST DUP8 DUP8 SUB PUSH1 0x40 MLOAD DUP1 MSIZE LT PUSH2 0x1206 JUMPI POP MSIZE JUMPDEST SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE JUMPDEST POP SWAP4 POP DUP8 SWAP1 POP JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x1261 JUMPI DUP3 DUP2 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1234 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP5 DUP10 DUP4 SUB DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x124E JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MSTORE JUMPDEST PUSH1 0x1 ADD PUSH2 0x121E JUMP JUMPDEST JUMPDEST POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x1275 PUSH2 0x1AEE JUMP JUMPDEST PUSH2 0x127D PUSH2 0x1AEE JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 MLOAD PUSH1 0x0 SWAP2 DUP3 SWAP2 DUP1 MSIZE LT PUSH2 0x1292 JUMPI POP MSIZE JUMPDEST SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE JUMPDEST POP SWAP3 POP PUSH1 0x0 SWAP2 POP PUSH1 0x0 SWAP1 POP JUMPDEST PUSH1 0x3 SLOAD DUP2 LT ISZERO PUSH2 0x1377 JUMPI PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 SHA3 PUSH1 0x3 DUP1 SLOAD SWAP2 SWAP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x12D8 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 SHA3 SWAP1 ADD PUSH1 0x0 JUMPDEST SWAP1 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB PUSH2 0x100 SWAP3 SWAP1 SWAP3 EXP SWAP1 DIV AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 SHA3 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x136E JUMPI PUSH1 0x3 DUP1 SLOAD DUP3 SWAP1 DUP2 LT PUSH2 0x1321 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 SHA3 SWAP1 ADD PUSH1 0x0 JUMPDEST SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND DUP4 DUP4 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x134F JUMPI INVALID JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SWAP1 JUMPDEST JUMPDEST PUSH1 0x1 ADD PUSH2 0x12AF JUMP JUMPDEST DUP2 PUSH1 0x40 MLOAD DUP1 MSIZE LT PUSH2 0x1385 JUMPI POP MSIZE JUMPDEST SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE JUMPDEST POP SWAP4 POP PUSH1 0x0 SWAP1 POP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x13EC JUMPI DUP3 DUP2 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x13B4 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP5 DUP3 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x13CC JUMPI INVALID JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE JUMPDEST PUSH1 0x1 ADD PUSH2 0x139E JUMP JUMPDEST JUMPDEST POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND CALLER PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND EQ ISZERO ISZERO PUSH2 0x141C JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x3 SLOAD DUP2 PUSH1 0x32 DUP3 GT DUP1 PUSH2 0x142E JUMPI POP DUP2 DUP2 GT JUMPDEST DUP1 PUSH2 0x1437 JUMPI POP DUP1 ISZERO JUMPDEST DUP1 PUSH2 0x1440 JUMPI POP DUP2 ISZERO JUMPDEST ISZERO PUSH2 0x144B JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x4 DUP4 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xA3F1EE9126A074D9326C682F561767F710E927FAA811F7A99829D49DC421797A SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 JUMPDEST JUMPDEST POP POP JUMPDEST POP JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SHA3 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x14B4 JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 SHA3 SLOAD DUP3 SWAP1 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND ISZERO ISZERO PUSH2 0x14DA JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 SHA3 CALLER PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 AND DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 SHA3 SLOAD DUP5 SWAP2 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x150F JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST DUP5 PUSH2 0x1519 DUP2 PUSH2 0xF15 JUMP JUMPDEST ISZERO PUSH2 0x1524 JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 SHA3 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB CALLER AND DUP1 DUP7 MSTORE SWAP3 MSTORE DUP1 DUP5 SHA3 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SWAP4 OR SWAP1 SWAP3 SSTORE SWAP1 MLOAD DUP9 SWAP3 PUSH32 0x4A504A94899432A9846E1AA406DCEB1BCFD538BB839071D49D1E5E23F5BE30EF SWAP2 LOG3 PUSH2 0x1583 DUP7 PUSH2 0xF15 JUMP JUMPDEST ISZERO PUSH2 0x9CE JUMPI PUSH2 0x9CE DUP7 TIMESTAMP PUSH2 0x195B JUMP JUMPDEST JUMPDEST JUMPDEST JUMPDEST POP JUMPDEST POP POP JUMPDEST POP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15AD DUP5 DUP5 DUP5 PUSH2 0x19A7 JUMP JUMPDEST SWAP1 POP PUSH2 0x15B8 DUP2 PUSH2 0x148B JUMP JUMPDEST JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 SHA3 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x32 DUP2 JUMP JUMPDEST PUSH1 0x4 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND CALLER PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND EQ ISZERO ISZERO PUSH2 0x1600 JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SHA3 SLOAD DUP4 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x162A JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SHA3 SLOAD DUP4 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x1653 JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 SWAP3 POP JUMPDEST PUSH1 0x3 SLOAD DUP4 LT ISZERO PUSH2 0x16FB JUMPI DUP5 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x3 DUP5 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x167B JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 SHA3 SWAP1 ADD PUSH1 0x0 JUMPDEST SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND EQ ISZERO PUSH2 0x16EF JUMPI DUP4 PUSH1 0x3 DUP5 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x16BA JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 SHA3 SWAP1 ADD PUSH1 0x0 JUMPDEST PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB MUL NOT AND SWAP1 DUP4 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND MUL OR SWAP1 SSTORE POP PUSH2 0x16FB JUMP JUMPDEST JUMPDEST PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 PUSH2 0x1658 JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP1 DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 SHA3 DUP1 SLOAD PUSH1 0xFF NOT SWAP1 DUP2 AND SWAP1 SWAP2 SSTORE SWAP4 DUP9 AND DUP3 MSTORE DUP1 DUP3 SHA3 DUP1 SLOAD SWAP1 SWAP5 AND PUSH1 0x1 OR SWAP1 SWAP4 SSTORE SWAP2 MLOAD SWAP1 SWAP2 PUSH32 0x8001553A916EF2F495D26A907CC54D96ED840D7BDA71E73194BF5A9DF7A76B90 SWAP2 LOG2 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP6 AND SWAP1 PUSH32 0xF39E6E1EB0EDCF53C221607B54B00CD28F3196FED0A24994DC308B8F611B682D SWAP1 PUSH1 0x0 SWAP1 LOG2 JUMPDEST JUMPDEST POP JUMPDEST POP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 SHA3 PUSH1 0x3 ADD SLOAD DUP3 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x17BB JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST DUP3 PUSH2 0x17C5 DUP2 PUSH2 0xF15 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x17D1 JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SHA3 SLOAD DUP6 SWAP2 ADD TIMESTAMP LT ISZERO PUSH2 0x17F3 JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 SHA3 PUSH1 0x3 DUP2 ADD DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP2 SLOAD DUP2 DUP4 ADD SLOAD SWAP4 MLOAD PUSH1 0x2 DUP1 DUP6 ADD DUP1 SLOAD SWAP6 SWAP11 POP PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP1 SWAP4 AND SWAP6 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 DUP4 SWAP3 DUP6 SWAP3 PUSH1 0x0 NOT SWAP2 DUP4 AND ISZERO PUSH2 0x100 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 AND DIV DUP1 ISZERO PUSH2 0x189C JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1871 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x189C JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 SHA3 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x187F JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 PUSH2 0x8502 GAS SUB CALL SWAP3 POP POP POP ISZERO PUSH2 0x18EB JUMPI PUSH1 0x40 MLOAD DUP6 SWAP1 PUSH32 0x33E13ECB54C3076D8E8BB8C2881800A4D972B792045FFAE98FDF46DF365FED75 SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH2 0x9D1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP6 SWAP1 PUSH32 0x526441BB6C1ABA3C9A4A6CA1D6545DA9C2333C8C48343EF398EB858D72B79236 SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH1 0x3 DUP5 ADD DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE JUMPDEST JUMPDEST JUMPDEST POP JUMPDEST POP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x4 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x1944 JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0xE0 PUSH1 0x2 EXP SUB NOT AND JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 SHA3 DUP4 SWAP1 SSTORE DUP2 MLOAD DUP4 DUP2 MSTORE SWAP2 MLOAD DUP5 SWAP3 PUSH32 0xB237AFE65F1514FD7EA3F923EA4FE792BDD07000A912B6CD1602A8E7F573C8D SWAP3 SWAP1 DUP3 SWAP1 SUB ADD SWAP1 LOG2 JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 AND ISZERO ISZERO PUSH2 0x19C0 JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x80 DUP2 ADD DUP3 MSTORE PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP9 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD DUP10 DUP2 MSTORE DUP4 DUP6 ADD DUP10 DUP2 MSTORE PUSH1 0x0 PUSH1 0x60 DUP7 ADD DUP2 SWAP1 MSTORE DUP8 DUP2 MSTORE DUP1 DUP5 MSTORE SWAP6 SWAP1 SWAP6 SHA3 DUP5 MLOAD DUP2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP5 AND SWAP4 SWAP1 SWAP4 OR DUP4 SSTORE MLOAD PUSH1 0x1 DUP4 ADD SSTORE SWAP3 MLOAD DUP1 MLOAD SWAP5 SWAP7 POP SWAP2 SWAP4 SWAP1 SWAP3 PUSH2 0x1A40 SWAP3 PUSH1 0x2 DUP6 ADD SWAP3 SWAP2 ADD SWAP1 PUSH2 0x1B12 JUMP JUMPDEST POP PUSH1 0x60 SWAP2 SWAP1 SWAP2 ADD MLOAD PUSH1 0x3 SWAP1 SWAP2 ADD DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x5 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE PUSH1 0x40 MLOAD DUP3 SWAP1 PUSH32 0xC0BA8FE4B176C1714197D43B9CC6BCF797A4A7461C5FE8D0EF6E184AE7601E51 SWAP1 PUSH1 0x0 SWAP1 LOG2 JUMPDEST JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 SLOAD DUP2 DUP4 SSTORE DUP2 DUP2 ISZERO GT PUSH2 0x8DF JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 SWAP1 SHA3 PUSH2 0x8DF SWAP2 DUP2 ADD SWAP1 DUP4 ADD PUSH2 0x1B91 JUMP JUMPDEST JUMPDEST POP POP POP JUMP JUMPDEST DUP2 SLOAD DUP2 DUP4 SSTORE DUP2 DUP2 ISZERO GT PUSH2 0x8DF JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 SWAP1 SHA3 PUSH2 0x8DF SWAP2 DUP2 ADD SWAP1 DUP4 ADD PUSH2 0x1B91 JUMP JUMPDEST JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 SHA3 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0x1B53 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x1B80 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x1B80 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x1B80 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x1B65 JUMP JUMPDEST JUMPDEST POP PUSH2 0x1B8D SWAP3 SWAP2 POP PUSH2 0x1B91 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0x1135 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1B8D JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x1B97 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST SWAP1 JUMP STOP LOG1 PUSH6 0x627A7A723058 SHA3 0xde PUSH20 0x48A39A18C2139F807A6077C790EED8049DFEAAE5 DIV 0xbf 0x4a TIMESTAMP PUSH1 0x7B 0xfa 0xe3 0xaf 0xce STOP 0x29 ",
+ "sourceMap": "663:3945:2:-;;;2097:514;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2381:9;2448:18;2322:7;2331:9;2342:18;1884:213:1;2018:7;2027:9;2834:370:0;2979:6;2933:7;:14;2949:9;276:2;2256:10;:28;:66;;;;2312:10;2300:9;:22;2256:66;:96;;;-1:-1:-1;2338:14:0;;2256:96;:127;;;-1:-1:-1;2368:15:0;;2256:127;2249:153;;;2397:5;;;2249:153;2986:1;2979:8;;2974:168;2991:7;:14;2989:1;:16;2974:168;;;3030:7;:19;3038:7;3046:1;3038:10;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3030:19:0;;;;;;;;;;;-1:-1:-1;3030:19:0;;;;;:38;;;3053:7;3061:1;3053:10;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3053:15:0;3067:1;3053:15;3030:38;3026:65;;;3086:5;;;3026:65;3127:4;3105:7;:19;3113:7;3121:1;3113:10;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3105:19:0;;;;;;;;;;;-1:-1:-1;3105:19:0;:26;;-1:-1:-1;;3105:26:0;;;;;;;;;;2974:168;3007:3;;;;;2974:168;;;3151:16;;;;:6;;:16;;;;;:::i;:::-;-1:-1:-1;3177:8:0;:20;;;2412:1;2834:370;-1:-1:-1;;;2052:17:1;:38;;;-1:-1:-1;;1884:213:1;;;;2393:1:2;2381:13;;2376:229;2400:20;:27;2396:1;:31;2376:229;;;2469:20;2490:1;2469:23;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2514:24:2;;;;2506:33;;;;;;-1:-1:-1;;;;;2553:34:2;;;;;;:22;:34;;;;;:41;;-1:-1:-1;;2553:41:2;2590:4;2553:41;;;2376:229;2429:3;;;;;2376:229;;;2097:514;;;;;;;663:3945;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;663:3945:2;-1:-1:-1;;;;;663:3945:2;;;;;;;;;;;-1:-1:-1;663:3945:2;;;;;;;;-1:-1:-1;663:3945:2;;;-1:-1:-1;663:3945:2;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;;663:3945:2;;;;;;;;;;;;;:::o;:::-;;;;;;;",
+ "linkReferences": {}
},
"deployedBytecode": {
- "linkReferences": {},
- "object": "0x60806040526004361061015e5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663025e7c2781146101a0578063173825d9146101e157806320ea8d861461020f5780632f54bf6e146102275780633411c81c146102695780633589b35c1461029a57806337bd78a0146102b257806354741525146102d95780635a1a66af146102f85780637065cb481461032b578063784547a7146103595780637ad28c511461037157806383250f79146103895780638b51d13f146103b75780639ace38c2146103cf578063a0e67e2b146104a4578063a8abe69a14610509578063b5dc40c31461052e578063b77bf60014610546578063ba51a6df1461055b578063c01a8c8414610573578063c64274741461058b578063d38f2d8214610601578063d74f8edd14610619578063dc8452cd1461062e578063e20056e614610643578063ee22610b14610677575b600034111561019e5760408051348152905133917fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c919081900360200190a25b005b3480156101ac57600080fd5b506101b860043561068f565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156101ed57600080fd5b5061019e73ffffffffffffffffffffffffffffffffffffffff600435166106c4565b34801561021b57600080fd5b5061019e60043561091b565b34801561023357600080fd5b5061025573ffffffffffffffffffffffffffffffffffffffff60043516610a08565b604080519115158252519081900360200190f35b34801561027557600080fd5b5061025560043573ffffffffffffffffffffffffffffffffffffffff60243516610a1d565b3480156102a657600080fd5b5061019e600435610a3d565b3480156102be57600080fd5b506102c7610db9565b60408051918252519081900360200190f35b3480156102e557600080fd5b506102c760043515156024351515610dbf565b34801561030457600080fd5b5061019e73ffffffffffffffffffffffffffffffffffffffff600435166024351515610e2b565b34801561033757600080fd5b5061019e73ffffffffffffffffffffffffffffffffffffffff60043516610eea565b34801561036557600080fd5b50610255600435611057565b34801561037d57600080fd5b5061019e6004356110e8565b34801561039557600080fd5b5061025573ffffffffffffffffffffffffffffffffffffffff6004351661112f565b3480156103c357600080fd5b506102c7600435611144565b3480156103db57600080fd5b506103e76004356111c0565b604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018060200183151515158152602001828103825284818151815260200191508051906020019080838360005b8381101561046657818101518382015260200161044e565b50505050905090810190601f1680156104935780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b3480156104b057600080fd5b506104b96112a9565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156104f55781810151838201526020016104dd565b505050509050019250505060405180910390f35b34801561051557600080fd5b506104b960043560243560443515156064351515611319565b34801561053a57600080fd5b506104b9600435611452565b34801561055257600080fd5b506102c76115ff565b34801561056757600080fd5b5061019e600435611605565b34801561057f57600080fd5b5061019e60043561167c565b34801561059757600080fd5b50604080516020600460443581810135601f81018490048402850184019095528484526102c794823573ffffffffffffffffffffffffffffffffffffffff1694602480359536959460649492019190819084018382808284375094975061178e9650505050505050565b34801561060d57600080fd5b506102c76004356117ad565b34801561062557600080fd5b506102c76117bf565b34801561063a57600080fd5b506102c76117c4565b34801561064f57600080fd5b5061019e73ffffffffffffffffffffffffffffffffffffffff600435811690602435166117ca565b34801561068357600080fd5b5061019e6004356119da565b600380548290811061069d57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b60003330146106d257600080fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020526040902054829060ff16151561070857600080fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260026020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905591505b6003547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0182101561088b578273ffffffffffffffffffffffffffffffffffffffff166003838154811015156107a857fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561088057600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061080057fe5b6000918252602090912001546003805473ffffffffffffffffffffffffffffffffffffffff909216918490811061083357fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061088b565b600190910190610756565b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01906108bc9082611e11565b5060035460045411156108d5576003546108d590611605565b60405173ffffffffffffffffffffffffffffffffffffffff8416907f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9090600090a2505050565b3360008181526002602052604090205460ff16151561093957600080fd5b60008281526001602090815260408083203380855292529091205483919060ff16151561096557600080fd5b600084815260208190526040902060030154849060ff161561098657600080fd5b8461099081611057565b1561099a57600080fd5b600086815260016020908152604080832033808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555188927ff6a317157440607f36269043eb55f1287a5a19ba2216afeab88cd46cbcfb88e991a3505050505050565b60026020526000908152604090205460ff1681565b600160209081526000928352604080842090915290825290205460ff1681565b600081815260208190526040812060030154829060ff1615610a5e57600080fd5b82610a6881611057565b1515610a7357600080fd5b600084815260208181526040808320805473ffffffffffffffffffffffffffffffffffffffff16845260089092529091205485919060ff161515610ab657600080fd5b604080517f72656d6f7665417574686f72697a6564416464726573734174496e646578286181527f6464726573732c75696e74323536290000000000000000000000000000000000602080830191909152825191829003602f01822060028086018054601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010060018416150201909116929092049182018490048402850184019095528084527fffffffff0000000000000000000000000000000000000000000000000000000090911693610bf293600093909290830182828015610bdf5780601f10610bb457610100808354040283529160200191610bdf565b820191906000526020600020905b815481529060010190602001808311610bc257829003601f168201915b5050505050611bcb90919063ffffffff16565b7fffffffff000000000000000000000000000000000000000000000000000000001614610c1e57600080fd5b600086815260208190526040908190206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117909155815481830154935160028085018054959b5073ffffffffffffffffffffffffffffffffffffffff909316959492939192839285927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff918316156101000291909101909116048015610d105780601f10610ce557610100808354040283529160200191610d10565b820191906000526020600020905b815481529060010190602001808311610cf357829003601f168201915b505091505060006040518083038185875af19250505015610d5b5760405186907f33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed7590600090a2610db1565b60405186907f526441bb6c1aba3c9a4a6ca1d6545da9c2333c8c48343ef398eb858d72b7923690600090a26003850180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b505050505050565b60065481565b6000805b600554811015610e2457838015610dec575060008181526020819052604090206003015460ff16155b80610e105750828015610e10575060008181526020819052604090206003015460ff165b15610e1c576001820191505b600101610dc3565b5092915050565b333014610e3757600080fd5b8173ffffffffffffffffffffffffffffffffffffffff81161515610e5a57600080fd5b73ffffffffffffffffffffffffffffffffffffffff831660008181526008602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915582519384529083015280517fdaef8ff7dc66c5e34eb9c338aab679d9f427f89868d9228494455a4d982eb2b09281900390910190a1505050565b333014610ef657600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116600090815260026020526040902054819060ff1615610f2b57600080fd5b8173ffffffffffffffffffffffffffffffffffffffff81161515610f4e57600080fd5b6003805490506001016004546032821180610f6857508181115b80610f71575080155b80610f7a575081155b15610f8457600080fd5b73ffffffffffffffffffffffffffffffffffffffff851660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915560038054918201815583527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055517ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d9190a25050505050565b600080805b6003548110156110e1576000848152600160205260408120600380549192918490811061108557fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400190205460ff16156110c6576001820191505b6004548214156110d957600192506110e1565b60010161105c565b5050919050565b3330146110f457600080fd5b60068190556040805182815290517fd1c9101a34feff75cccef14a28785a0279cb0b49c1f321f21f5f422e746b43779181900360200190a150565b60086020526000908152604090205460ff1681565b6000805b6003548110156111ba576000838152600160205260408120600380549192918490811061117157fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400190205460ff16156111b2576001820191505b600101611148565b50919050565b60006020818152918152604090819020805460018083015460028085018054875161010095821615959095027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691909104601f810188900488028401880190965285835273ffffffffffffffffffffffffffffffffffffffff909316959094919291908301828280156112965780601f1061126b57610100808354040283529160200191611296565b820191906000526020600020905b81548152906001019060200180831161127957829003601f168201915b5050506003909301549192505060ff1684565b6060600380548060200260200160405190810160405280929190818152602001828054801561130e57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116112e3575b505050505090505b90565b60608060008060055460405190808252806020026020018201604052801561134b578160200160208202803883390190505b50925060009150600090505b6005548110156113d257858015611380575060008181526020819052604090206003015460ff16155b806113a457508480156113a4575060008181526020819052604090206003015460ff165b156113ca578083838151811015156113b857fe5b60209081029091010152600191909101905b600101611357565b8787036040519080825280602002602001820160405280156113fe578160200160208202803883390190505b5093508790505b8681101561144757828181518110151561141b57fe5b906020019060200201518489830381518110151561143557fe5b60209081029091010152600101611405565b505050949350505050565b606080600080600380549050604051908082528060200260200182016040528015611487578160200160208202803883390190505b50925060009150600090505b60035481101561156b57600085815260016020526040812060038054919291849081106114bc57fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400190205460ff161561156357600380548290811061150457fe5b600091825260209091200154835173ffffffffffffffffffffffffffffffffffffffff9091169084908490811061153757fe5b73ffffffffffffffffffffffffffffffffffffffff909216602092830290910190910152600191909101905b600101611493565b81604051908082528060200260200182016040528015611595578160200160208202803883390190505b509350600090505b818110156115f75782818151811015156115b357fe5b9060200190602002015184828151811015156115cb57fe5b73ffffffffffffffffffffffffffffffffffffffff90921660209283029091019091015260010161159d565b505050919050565b60055481565b33301461161157600080fd5b60035481603282118061162357508181115b8061162c575080155b80611635575081155b1561163f57600080fd5b60048390556040805184815290517fa3f1ee9126a074d9326c682f561767f710e927faa811f7a99829d49dc421797a9181900360200190a1505050565b3360008181526002602052604090205460ff16151561169a57600080fd5b600082815260208190526040902054829073ffffffffffffffffffffffffffffffffffffffff1615156116cc57600080fd5b60008381526001602090815260408083203380855292529091205484919060ff16156116f757600080fd5b8461170181611057565b1561170b57600080fd5b600086815260016020818152604080842033808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909317909255905188927f4a504a94899432a9846e1aa406dceb1bcfd538bb839071d49d1e5e23f5be30ef91a361177f86611057565b15610db157610db18642611c93565b600061179b848484611cde565b90506117a68161167c565b9392505050565b60076020526000908152604090205481565b603281565b60045481565b60003330146117d857600080fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260026020526040902054839060ff16151561180e57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260026020526040902054839060ff161561184357600080fd5b600092505b600354831015611908578473ffffffffffffffffffffffffffffffffffffffff1660038481548110151561187857fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614156118fd57836003848154811015156118b057fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611908565b600190920191611848565b73ffffffffffffffffffffffffffffffffffffffff80861660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090811690915593881682528082208054909416600117909355915190917f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9091a260405173ffffffffffffffffffffffffffffffffffffffff8516907ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d90600090a25050505050565b600081815260208190526040812060030154829060ff16156119fb57600080fd5b82611a0581611057565b1515611a1057600080fd5b600654600085815260076020526040902054859101421015611a3157600080fd5b600085815260208190526040908190206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117909155815481830154935160028085018054959a5073ffffffffffffffffffffffffffffffffffffffff909316959492939192839285927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff918316156101000291909101909116048015611b235780601f10611af857610100808354040283529160200191611b23565b820191906000526020600020905b815481529060010190602001808311611b0657829003601f168201915b505091505060006040518083038185875af19250505015611b6e5760405185907f33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed7590600090a2611bc4565b60405185907f526441bb6c1aba3c9a4a6ca1d6545da9c2333c8c48343ef398eb858d72b7923690600090a26003840180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b5050505050565b600081600401835110151515611c6857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f475245415445525f4f525f455155414c5f544f5f345f4c454e4754485f52455160448201527f5549524544000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b5050602001517fffffffff000000000000000000000000000000000000000000000000000000001690565b6000828152600760209081526040918290208390558151838152915184927f0b237afe65f1514fd7ea3f923ea4fe792bdd07000a912b6cd1602a8e7f573c8d92908290030190a25050565b60008373ffffffffffffffffffffffffffffffffffffffff81161515611d0357600080fd5b6005546040805160808101825273ffffffffffffffffffffffffffffffffffffffff8881168252602080830189815283850189815260006060860181905287815280845295909520845181547fffffffffffffffffffffffff00000000000000000000000000000000000000001694169390931783555160018301559251805194965091939092611d9b926002850192910190611e3a565b5060609190910151600390910180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905560058054600101905560405182907fc0ba8fe4b176c1714197d43b9cc6bcf797a4a7461c5fe8d0ef6e184ae7601e5190600090a2509392505050565b815481835581811115611e3557600083815260209020611e35918101908301611eb8565b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611e7b57805160ff1916838001178555611ea8565b82800160010185558215611ea8579182015b82811115611ea8578251825591602001919060010190611e8d565b50611eb4929150611eb8565b5090565b61131691905b80821115611eb45760008155600101611ebe5600a165627a7a7230582084376847542a16eb1378ca448798da98c60d2fd131f45f2be7fdd80d42d951d70029",
- "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x15E JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x25E7C27 DUP2 EQ PUSH2 0x1A0 JUMPI DUP1 PUSH4 0x173825D9 EQ PUSH2 0x1E1 JUMPI DUP1 PUSH4 0x20EA8D86 EQ PUSH2 0x20F JUMPI DUP1 PUSH4 0x2F54BF6E EQ PUSH2 0x227 JUMPI DUP1 PUSH4 0x3411C81C EQ PUSH2 0x269 JUMPI DUP1 PUSH4 0x3589B35C EQ PUSH2 0x29A JUMPI DUP1 PUSH4 0x37BD78A0 EQ PUSH2 0x2B2 JUMPI DUP1 PUSH4 0x54741525 EQ PUSH2 0x2D9 JUMPI DUP1 PUSH4 0x5A1A66AF EQ PUSH2 0x2F8 JUMPI DUP1 PUSH4 0x7065CB48 EQ PUSH2 0x32B JUMPI DUP1 PUSH4 0x784547A7 EQ PUSH2 0x359 JUMPI DUP1 PUSH4 0x7AD28C51 EQ PUSH2 0x371 JUMPI DUP1 PUSH4 0x83250F79 EQ PUSH2 0x389 JUMPI DUP1 PUSH4 0x8B51D13F EQ PUSH2 0x3B7 JUMPI DUP1 PUSH4 0x9ACE38C2 EQ PUSH2 0x3CF JUMPI DUP1 PUSH4 0xA0E67E2B EQ PUSH2 0x4A4 JUMPI DUP1 PUSH4 0xA8ABE69A EQ PUSH2 0x509 JUMPI DUP1 PUSH4 0xB5DC40C3 EQ PUSH2 0x52E JUMPI DUP1 PUSH4 0xB77BF600 EQ PUSH2 0x546 JUMPI DUP1 PUSH4 0xBA51A6DF EQ PUSH2 0x55B JUMPI DUP1 PUSH4 0xC01A8C84 EQ PUSH2 0x573 JUMPI DUP1 PUSH4 0xC6427474 EQ PUSH2 0x58B JUMPI DUP1 PUSH4 0xD38F2D82 EQ PUSH2 0x601 JUMPI DUP1 PUSH4 0xD74F8EDD EQ PUSH2 0x619 JUMPI DUP1 PUSH4 0xDC8452CD EQ PUSH2 0x62E JUMPI DUP1 PUSH4 0xE20056E6 EQ PUSH2 0x643 JUMPI DUP1 PUSH4 0xEE22610B EQ PUSH2 0x677 JUMPI JUMPDEST PUSH1 0x0 CALLVALUE GT ISZERO PUSH2 0x19E JUMPI PUSH1 0x40 DUP1 MLOAD CALLVALUE DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0xE1FFFCC4923D04B559F4D29A8BFC6CDA04EB5B0D3C460751C2402C5C5CC9109C SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B8 PUSH1 0x4 CALLDATALOAD PUSH2 0x68F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19E PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x6C4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x21B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19E PUSH1 0x4 CALLDATALOAD PUSH2 0x91B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x233 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x255 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0xA08 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x275 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x255 PUSH1 0x4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD AND PUSH2 0xA1D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19E PUSH1 0x4 CALLDATALOAD PUSH2 0xA3D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2C7 PUSH2 0xDB9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2C7 PUSH1 0x4 CALLDATALOAD ISZERO ISZERO PUSH1 0x24 CALLDATALOAD ISZERO ISZERO PUSH2 0xDBF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x304 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19E PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD ISZERO ISZERO PUSH2 0xE2B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x337 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19E PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0xEEA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x365 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x255 PUSH1 0x4 CALLDATALOAD PUSH2 0x1057 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x37D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19E PUSH1 0x4 CALLDATALOAD PUSH2 0x10E8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x395 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x255 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x112F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2C7 PUSH1 0x4 CALLDATALOAD PUSH2 0x1144 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E7 PUSH1 0x4 CALLDATALOAD PUSH2 0x11C0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 ISZERO ISZERO ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x466 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x44E JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x493 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 SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4B9 PUSH2 0x12A9 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 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4F5 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x4DD JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x515 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4B9 PUSH1 0x4 CALLDATALOAD PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD ISZERO ISZERO PUSH1 0x64 CALLDATALOAD ISZERO ISZERO PUSH2 0x1319 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x53A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4B9 PUSH1 0x4 CALLDATALOAD PUSH2 0x1452 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x552 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2C7 PUSH2 0x15FF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x567 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19E PUSH1 0x4 CALLDATALOAD PUSH2 0x1605 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x57F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19E PUSH1 0x4 CALLDATALOAD PUSH2 0x167C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x597 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 PUSH1 0x44 CALLDATALOAD DUP2 DUP2 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x2C7 SWAP5 DUP3 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP5 PUSH1 0x24 DUP1 CALLDATALOAD SWAP6 CALLDATASIZE SWAP6 SWAP5 PUSH1 0x64 SWAP5 SWAP3 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x178E SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x60D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2C7 PUSH1 0x4 CALLDATALOAD PUSH2 0x17AD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x625 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2C7 PUSH2 0x17BF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x63A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2C7 PUSH2 0x17C4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x64F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19E PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH2 0x17CA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x683 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19E PUSH1 0x4 CALLDATALOAD PUSH2 0x19DA JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD DUP3 SWAP1 DUP2 LT PUSH2 0x69D JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x0 CALLER ADDRESS EQ PUSH2 0x6D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x708 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE SWAP2 POP JUMPDEST PUSH1 0x3 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP3 LT ISZERO PUSH2 0x88B JUMPI DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x3 DUP4 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x7A8 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x880 JUMPI PUSH1 0x3 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0x800 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x3 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x833 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0x88B JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x756 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 PUSH2 0x8BC SWAP1 DUP3 PUSH2 0x1E11 JUMP JUMPDEST POP PUSH1 0x3 SLOAD PUSH1 0x4 SLOAD GT ISZERO PUSH2 0x8D5 JUMPI PUSH1 0x3 SLOAD PUSH2 0x8D5 SWAP1 PUSH2 0x1605 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH32 0x8001553A916EF2F495D26A907CC54D96ED840D7BDA71E73194BF5A9DF7A76B90 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x939 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD DUP4 SWAP2 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x965 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD DUP5 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x986 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 PUSH2 0x990 DUP2 PUSH2 0x1057 JUMP JUMPDEST ISZERO PUSH2 0x99A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE MLOAD DUP9 SWAP3 PUSH32 0xF6A317157440607F36269043EB55F1287A5A19BA2216AFEAB88CD46CBCFB88E9 SWAP2 LOG3 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 ADD SLOAD DUP3 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0xA5E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH2 0xA68 DUP2 PUSH2 0x1057 JUMP JUMPDEST ISZERO ISZERO PUSH2 0xA73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 MSTORE PUSH1 0x8 SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD DUP6 SWAP2 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0xAB6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x72656D6F7665417574686F72697A6564416464726573734174496E6465782861 DUP2 MSTORE PUSH32 0x6464726573732C75696E74323536290000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP3 MLOAD SWAP2 DUP3 SWAP1 SUB PUSH1 0x2F ADD DUP3 KECCAK256 PUSH1 0x2 DUP1 DUP7 ADD DUP1 SLOAD PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP5 AND ISZERO MUL ADD SWAP1 SWAP2 AND SWAP3 SWAP1 SWAP3 DIV SWAP2 DUP3 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP1 DUP5 MSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP2 AND SWAP4 PUSH2 0xBF2 SWAP4 PUSH1 0x0 SWAP4 SWAP1 SWAP3 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xBDF JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xBB4 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xBDF JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xBC2 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP PUSH2 0x1BCB SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND EQ PUSH2 0xC1E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x3 DUP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP2 SLOAD DUP2 DUP4 ADD SLOAD SWAP4 MLOAD PUSH1 0x2 DUP1 DUP6 ADD DUP1 SLOAD SWAP6 SWAP12 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND SWAP6 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 DUP4 SWAP3 DUP6 SWAP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP4 AND ISZERO PUSH2 0x100 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 AND DIV DUP1 ISZERO PUSH2 0xD10 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xCE5 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xD10 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xCF3 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP ISZERO PUSH2 0xD5B JUMPI PUSH1 0x40 MLOAD DUP7 SWAP1 PUSH32 0x33E13ECB54C3076D8E8BB8C2881800A4D972B792045FFAE98FDF46DF365FED75 SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH2 0xDB1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP7 SWAP1 PUSH32 0x526441BB6C1ABA3C9A4A6CA1D6545DA9C2333C8C48343EF398EB858D72B79236 SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH1 0x3 DUP6 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST PUSH1 0x5 SLOAD DUP2 LT ISZERO PUSH2 0xE24 JUMPI DUP4 DUP1 ISZERO PUSH2 0xDEC JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND ISZERO JUMPDEST DUP1 PUSH2 0xE10 JUMPI POP DUP3 DUP1 ISZERO PUSH2 0xE10 JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND JUMPDEST ISZERO PUSH2 0xE1C JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x1 ADD PUSH2 0xDC3 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0xE37 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO ISZERO PUSH2 0xE5A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP7 ISZERO ISZERO SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP3 MLOAD SWAP4 DUP5 MSTORE SWAP1 DUP4 ADD MSTORE DUP1 MLOAD PUSH32 0xDAEF8FF7DC66C5E34EB9C338AAB679D9F427F89868D9228494455A4D982EB2B0 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP POP POP JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0xEF6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0xF2B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO ISZERO PUSH2 0xF4E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3 DUP1 SLOAD SWAP1 POP PUSH1 0x1 ADD PUSH1 0x4 SLOAD PUSH1 0x32 DUP3 GT DUP1 PUSH2 0xF68 JUMPI POP DUP2 DUP2 GT JUMPDEST DUP1 PUSH2 0xF71 JUMPI POP DUP1 ISZERO JUMPDEST DUP1 PUSH2 0xF7A JUMPI POP DUP2 ISZERO JUMPDEST ISZERO PUSH2 0xF84 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x3 DUP1 SLOAD SWAP2 DUP3 ADD DUP2 SSTORE DUP4 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND DUP5 OR SWAP1 SSTORE MLOAD PUSH32 0xF39E6E1EB0EDCF53C221607B54B00CD28F3196FED0A24994DC308B8F611B682D SWAP2 SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 JUMPDEST PUSH1 0x3 SLOAD DUP2 LT ISZERO PUSH2 0x10E1 JUMPI PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 DUP1 SLOAD SWAP2 SWAP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x1085 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x10C6 JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x4 SLOAD DUP3 EQ ISZERO PUSH2 0x10D9 JUMPI PUSH1 0x1 SWAP3 POP PUSH2 0x10E1 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x105C JUMP JUMPDEST POP POP SWAP2 SWAP1 POP JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0x10F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x6 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xD1C9101A34FEFF75CCCEF14A28785A0279CB0B49C1F321F21F5F422E746B4377 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST PUSH1 0x3 SLOAD DUP2 LT ISZERO PUSH2 0x11BA JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 DUP1 SLOAD SWAP2 SWAP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x1171 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x11B2 JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x1 ADD PUSH2 0x1148 JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP2 DUP2 MSTORE SWAP2 DUP2 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP1 DUP4 ADD SLOAD PUSH1 0x2 DUP1 DUP6 ADD DUP1 SLOAD DUP8 MLOAD PUSH2 0x100 SWAP6 DUP3 AND ISZERO SWAP6 SWAP1 SWAP6 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD AND SWAP2 SWAP1 SWAP2 DIV PUSH1 0x1F DUP2 ADD DUP9 SWAP1 DIV DUP9 MUL DUP5 ADD DUP9 ADD SWAP1 SWAP7 MSTORE DUP6 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND SWAP6 SWAP1 SWAP5 SWAP2 SWAP3 SWAP2 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x1296 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x126B JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1296 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1279 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP PUSH1 0x3 SWAP1 SWAP4 ADD SLOAD SWAP2 SWAP3 POP POP PUSH1 0xFF AND DUP5 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x130E JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x12E3 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x0 DUP1 PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x134B JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 SWAP2 POP PUSH1 0x0 SWAP1 POP JUMPDEST PUSH1 0x5 SLOAD DUP2 LT ISZERO PUSH2 0x13D2 JUMPI DUP6 DUP1 ISZERO PUSH2 0x1380 JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND ISZERO JUMPDEST DUP1 PUSH2 0x13A4 JUMPI POP DUP5 DUP1 ISZERO PUSH2 0x13A4 JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND JUMPDEST ISZERO PUSH2 0x13CA JUMPI DUP1 DUP4 DUP4 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x13B8 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SWAP1 JUMPDEST PUSH1 0x1 ADD PUSH2 0x1357 JUMP JUMPDEST DUP8 DUP8 SUB PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x13FE JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP DUP8 SWAP1 POP JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x1447 JUMPI DUP3 DUP2 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x141B JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP5 DUP10 DUP4 SUB DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1435 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x1405 JUMP JUMPDEST POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x0 DUP1 PUSH1 0x3 DUP1 SLOAD SWAP1 POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1487 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 SWAP2 POP PUSH1 0x0 SWAP1 POP JUMPDEST PUSH1 0x3 SLOAD DUP2 LT ISZERO PUSH2 0x156B JUMPI PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 DUP1 SLOAD SWAP2 SWAP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x14BC JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1563 JUMPI PUSH1 0x3 DUP1 SLOAD DUP3 SWAP1 DUP2 LT PUSH2 0x1504 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 DUP5 SWAP1 DUP5 SWAP1 DUP2 LT PUSH2 0x1537 JUMPI INVALID JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SWAP1 JUMPDEST PUSH1 0x1 ADD PUSH2 0x1493 JUMP JUMPDEST DUP2 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1595 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP PUSH1 0x0 SWAP1 POP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x15F7 JUMPI DUP3 DUP2 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x15B3 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP5 DUP3 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x15CB JUMPI INVALID JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 ADD PUSH2 0x159D JUMP JUMPDEST POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0x1611 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3 SLOAD DUP2 PUSH1 0x32 DUP3 GT DUP1 PUSH2 0x1623 JUMPI POP DUP2 DUP2 GT JUMPDEST DUP1 PUSH2 0x162C JUMPI POP DUP1 ISZERO JUMPDEST DUP1 PUSH2 0x1635 JUMPI POP DUP2 ISZERO JUMPDEST ISZERO PUSH2 0x163F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x4 DUP4 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xA3F1EE9126A074D9326C682F561767F710E927FAA811F7A99829D49DC421797A SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x169A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO ISZERO PUSH2 0x16CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD DUP5 SWAP2 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x16F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 PUSH2 0x1701 DUP2 PUSH2 0x1057 JUMP JUMPDEST ISZERO PUSH2 0x170B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 CALLER DUP1 DUP7 MSTORE SWAP3 MSTORE DUP1 DUP5 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SWAP4 OR SWAP1 SWAP3 SSTORE SWAP1 MLOAD DUP9 SWAP3 PUSH32 0x4A504A94899432A9846E1AA406DCEB1BCFD538BB839071D49D1E5E23F5BE30EF SWAP2 LOG3 PUSH2 0x177F DUP7 PUSH2 0x1057 JUMP JUMPDEST ISZERO PUSH2 0xDB1 JUMPI PUSH2 0xDB1 DUP7 TIMESTAMP PUSH2 0x1C93 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x179B DUP5 DUP5 DUP5 PUSH2 0x1CDE JUMP JUMPDEST SWAP1 POP PUSH2 0x17A6 DUP2 PUSH2 0x167C JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x32 DUP2 JUMP JUMPDEST PUSH1 0x4 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 CALLER ADDRESS EQ PUSH2 0x17D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x180E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x1843 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP3 POP JUMPDEST PUSH1 0x3 SLOAD DUP4 LT ISZERO PUSH2 0x1908 JUMPI DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x3 DUP5 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1878 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x18FD JUMPI DUP4 PUSH1 0x3 DUP5 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x18B0 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0x1908 JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 PUSH2 0x1848 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 SWAP1 DUP2 AND SWAP1 SWAP2 SSTORE SWAP4 DUP9 AND DUP3 MSTORE DUP1 DUP3 KECCAK256 DUP1 SLOAD SWAP1 SWAP5 AND PUSH1 0x1 OR SWAP1 SWAP4 SSTORE SWAP2 MLOAD SWAP1 SWAP2 PUSH32 0x8001553A916EF2F495D26A907CC54D96ED840D7BDA71E73194BF5A9DF7A76B90 SWAP2 LOG2 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP1 PUSH32 0xF39E6E1EB0EDCF53C221607B54B00CD28F3196FED0A24994DC308B8F611B682D SWAP1 PUSH1 0x0 SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 ADD SLOAD DUP3 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x19FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH2 0x1A05 DUP2 PUSH2 0x1057 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x1A10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP6 SWAP2 ADD TIMESTAMP LT ISZERO PUSH2 0x1A31 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x3 DUP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP2 SLOAD DUP2 DUP4 ADD SLOAD SWAP4 MLOAD PUSH1 0x2 DUP1 DUP6 ADD DUP1 SLOAD SWAP6 SWAP11 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND SWAP6 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 DUP4 SWAP3 DUP6 SWAP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP4 AND ISZERO PUSH2 0x100 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 AND DIV DUP1 ISZERO PUSH2 0x1B23 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1AF8 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1B23 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1B06 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP ISZERO PUSH2 0x1B6E JUMPI PUSH1 0x40 MLOAD DUP6 SWAP1 PUSH32 0x33E13ECB54C3076D8E8BB8C2881800A4D972B792045FFAE98FDF46DF365FED75 SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH2 0x1BC4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP6 SWAP1 PUSH32 0x526441BB6C1ABA3C9A4A6CA1D6545DA9C2333C8C48343EF398EB858D72B79236 SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH1 0x3 DUP5 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x4 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x1C68 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F345F4C454E4754485F524551 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x5549524544000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x84 ADD SWAP1 REVERT JUMPDEST POP POP PUSH1 0x20 ADD MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 SWAP1 SSTORE DUP2 MLOAD DUP4 DUP2 MSTORE SWAP2 MLOAD DUP5 SWAP3 PUSH32 0xB237AFE65F1514FD7EA3F923EA4FE792BDD07000A912B6CD1602A8E7F573C8D SWAP3 SWAP1 DUP3 SWAP1 SUB ADD SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO ISZERO PUSH2 0x1D03 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x80 DUP2 ADD DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD DUP10 DUP2 MSTORE DUP4 DUP6 ADD DUP10 DUP2 MSTORE PUSH1 0x0 PUSH1 0x60 DUP7 ADD DUP2 SWAP1 MSTORE DUP8 DUP2 MSTORE DUP1 DUP5 MSTORE SWAP6 SWAP1 SWAP6 KECCAK256 DUP5 MLOAD DUP2 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP5 AND SWAP4 SWAP1 SWAP4 OR DUP4 SSTORE MLOAD PUSH1 0x1 DUP4 ADD SSTORE SWAP3 MLOAD DUP1 MLOAD SWAP5 SWAP7 POP SWAP2 SWAP4 SWAP1 SWAP3 PUSH2 0x1D9B SWAP3 PUSH1 0x2 DUP6 ADD SWAP3 SWAP2 ADD SWAP1 PUSH2 0x1E3A JUMP JUMPDEST POP PUSH1 0x60 SWAP2 SWAP1 SWAP2 ADD MLOAD PUSH1 0x3 SWAP1 SWAP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x5 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE PUSH1 0x40 MLOAD DUP3 SWAP1 PUSH32 0xC0BA8FE4B176C1714197D43B9CC6BCF797A4A7461C5FE8D0EF6E184AE7601E51 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 SLOAD DUP2 DUP4 SSTORE DUP2 DUP2 GT ISZERO PUSH2 0x1E35 JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 PUSH2 0x1E35 SWAP2 DUP2 ADD SWAP1 DUP4 ADD PUSH2 0x1EB8 JUMP JUMPDEST POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0x1E7B JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x1EA8 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x1EA8 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x1EA8 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x1E8D JUMP JUMPDEST POP PUSH2 0x1EB4 SWAP3 SWAP2 POP PUSH2 0x1EB8 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0x1316 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1EB4 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x1EBE JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 DUP5 CALLDATACOPY PUSH9 0x47542A16EB1378CA44 DUP8 SWAP9 0xda SWAP9 0xc6 0xd 0x2f 0xd1 BALANCE DELEGATECALL 0x5f 0x2b 0xe7 REVERT 0xd8 0xd TIMESTAMP 0xd9 MLOAD 0xd7 STOP 0x29 ",
- "sourceMap": "707:3198:2:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2519:1:0;2507:9;:13;2503:61;;;2534:30;;;2554:9;2534:30;;;;2542:10;;2534:30;;;;;;;;;;2503:61;707:3198:2;936:23:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;936:23:0;;;;;;;;;;;;;;;;;;;;;;;;3711:460;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3711:460:0;;;;;;;3156:332:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3156:332:1;;;;;890:40:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;890:40:0;;;;;;;;;;;;;;;;;;;;;;;;;820:64;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;820:64:0;;;;;;;;;3384:519:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3384:519:2;;;;;1009:29:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1009:29:1;;;;;;;;;;;;;;;;;;;;9136:319:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9136:319:0;;;;;;;;;;;2959:289:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2959:289:2;;;;;;;;;;;3311:277:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3311:277:0;;;;;;;7304:337;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7304:337:0;;;;;2281:186:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2281:186:1;;;;;1055:55:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1055:55:2;;;;;;;8622:252:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8622:252:0;;;;;765:49;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;765:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;765:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9539:115;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9539:115:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;9539:115:0;;;;;;;;;;;;;;;;;10757:676;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10757:676:0;;;;;;;;;;;;;;;9833:575;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9833:575:0;;;;;991:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;991:28:0;;;;4990:207;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4990:207:0;;;;;2573:459:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2573:459:1;;;;;5456:244:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5456:244:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5456:244:0;;-1:-1:-1;5456:244:0;;-1:-1:-1;;;;;;;5456:244:0;1045:47:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1045:47:1;;;;;217:41:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;217:41:0;;;;965:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;965:20:0;;;;4370:449;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4370:449:0;;;;;;;;;;;;3602:472:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3602:472:1;;;;;936:23:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;936:23:0;:::o;3711:460::-;3859:6;1186:10;1208:4;1186:27;1182:50;;1227:5;;;1182:50;1420:14;;;;;;;:7;:14;;;;;;3801:5;;1420:14;;1419:15;1415:38;;;1448:5;;;1415:38;3822:14;;;3839:5;3822:14;;;:7;:14;;;;;:22;;;;;;3839:5;-1:-1:-1;3854:170:0;3871:6;:13;:17;;3869:19;;3854:170;;;3924:5;3911:18;;:6;3918:1;3911:9;;;;;;;;;;;;;;;;;;;;;;:18;3907:117;;;3961:6;3968:13;;:17;;;;3961:25;;;;;;;;;;;;;;;;3949:6;:9;;3961:25;;;;;3956:1;;3949:9;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;4004:5;;3907:117;3890:3;;;;;3854:170;;;4033:6;:18;;;;;;;;;:::i;:::-;-1:-1:-1;4076:6:0;:13;4065:8;;:24;4061:74;;;4121:6;:13;4103:32;;:17;:32::i;:::-;4145:19;;;;;;;;;;;1242:1;3711:460;;:::o;3156:332:1:-;3239:10;1420:14:0;;;;:7;:14;;;;;;;;1419:15;1415:38;;;1448:5;;;1415:38;1694:28;;;;:13;:28;;;;;;;;3284:10:1;1694:35:0;;;;;;;;;3269:13:1;;3284:10;1694:35:0;;1693:36;1689:59;;;1743:5;;;1689:59;1976:12;:27;;;;;;;;;;:36;;;3316:13:1;;1976:36:0;;1972:59;;;2026:5;;;1972:59;3357:13:1;1165:26;1177:13;1165:11;:26::i;:::-;1164:27;1156:36;;;;;;3429:5;3386:28;;;:13;:28;;;;;;;;3415:10;3386:40;;;;;;;;:48;;;;;;3444:37;3400:13;;3444:37;;;2041:1:0;1758;1463;;3156:332:1;;:::o;890:40:0:-;;;;;;;;;;;;;;;:::o;820:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3384:519:2:-;3617:22;1976:27:0;;;;;;;;;;:36;;;3489:13:2;;1976:36:0;;1972:59;;;2026:5;;;1972:59;3527:13:2;1278:26:1;1290:13;1278:11;:26::i;:::-;1270:35;;;;;;;;1483:22:2;1508:27;;;;;;;;;;;1576:14;;;;1553:38;;:22;:38;;;;;;;3588:13;;1508:27;1553:38;;1545:47;;;;;;;;1186:60;;;;;;;;;;;;;;;;;;;;;;;;;1610:7;;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:68;;;;;:21;;-1:-1:-1;;1186:60:2;;1610:18;;;:7;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:21;;;;:::i;:::-;:68;;;1602:77;;;;;;3642:12;:27;;;;;;;;;;;;3679:11;;;:18;;;;3693:4;3679:18;;;;;;3711:14;;3737:8;;;;3711:44;;3747:7;;;;3711:44;;3642:27;;-1:-1:-1;3711:14:2;;;;;3737:8;3747:7;;3711:44;;;;3747:7;;3711:44;;;;;3679:18;3711:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3707:190;;;3769:24;;3779:13;;3769:24;;;;;3707:190;;;3822:31;;3839:13;;3822:31;;;;;3867:11;;;:19;;;;;;3707:190;1315:1:1;;2041::0;3384:519:2;;;:::o;1009:29:1:-;;;;:::o;9136:319:0:-;9243:10;;9269:179;9286:16;;9284:1;:18;9269:179;;;9328:7;:36;;;;-1:-1:-1;9340:12:0;:15;;;;;;;;;;:24;;;;;9339:25;9328:36;:92;;;;9384:8;:36;;;;-1:-1:-1;9396:12:0;:15;;;;;;;;;;:24;;;;;9384:36;9321:127;;;9447:1;9438:10;;;;9321:127;9304:3;;9269:179;;;9136:319;;;;;:::o;2959:289:2:-;1186:10:0;1208:4;1186:27;1182:50;;1227:5;;;1182:50;3084:18:2;2104:13:0;;;;2100:36;;;2131:5;;;2100:36;3118:42:2;;;;;;;:22;:42;;;;;;;;;:57;;;;;;;;;;;;;3185:56;;;;;;;;;;;;;;;;;;;;;1242:1:0;2959:289:2;;:::o;3311:277:0:-;1186:10;1208:4;1186:27;1182:50;;1227:5;;;1182:50;1312:14;;;;;;;:7;:14;;;;;;3404:5;;1312:14;;1308:37;;;1340:5;;;1308:37;3427:5;2104:13;;;;2100:36;;;2131:5;;;2100:36;3459:6;:13;;;;3475:1;3459:17;3478:8;;256:2;2236:10;:28;:66;;;;2292:10;2280:9;:22;2236:66;:96;;;-1:-1:-1;2318:14:0;;2236:96;:127;;;-1:-1:-1;2348:15:0;;2236:127;2229:153;;;2377:5;;;2229:153;3502:14;;;;;;;:7;:14;;;;;;:21;;;;3519:4;3502:21;;;;;;3533:6;27:10:-1;;23:18;;;45:23;;3533:18:0;;;;;;;;;;;;3561:20;;;3502:14;3561:20;2146:1;;1355;1242;3311:277;:::o;7304:337::-;7394:4;;;7438:197;7455:6;:13;7453:15;;7438:197;;;7493:28;;;;:13;:28;;;;;7522:6;:9;;7493:28;;;7529:1;;7522:9;;;;;;;;;;;;;;;;;;;;7493:39;;;;;;;;;;;;;;;7489:71;;;7559:1;7550:10;;;;7489:71;7587:8;;7578:5;:17;7574:50;;;7620:4;7613:11;;;;7574:50;7470:3;;7438:197;;;7304:337;;;;;:::o;2281:186:1:-;1186:10:0;1208:4;1186:27;1182:50;;1227:5;;;1182:50;2378:17:1;:38;;;2426:34;;;;;;;;;;;;;;;;;2281:186;:::o;1055:55:2:-;;;;;;;;;;;;;;;:::o;8622:252:0:-;8721:10;;8747:120;8764:6;:13;8762:15;;8747:120;;;8800:28;;;;:13;:28;;;;;8829:6;:9;;8800:28;;;8836:1;;8829:9;;;;;;;;;;;;;;;;;;;;8800:39;;;;;;;;;;;;;;;8796:71;;;8866:1;8857:10;;;;8796:71;8779:3;;8747:120;;;8622:252;;;;:::o;765:49::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;765:49:0;;;;;;;-1:-1:-1;;765:49:0;;;:::o;9539:115::-;9609:9;9641:6;9634:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9539:115;;:::o;10757:676::-;10882:22;10920:32;10993:10;11017:6;10966:16;;10955:28;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;10955:28:0;;10920:63;;11006:1;10993:14;;11040:1;11038:3;;11033:250;11045:16;;11043:1;:18;11033:250;;;11087:7;:36;;;;-1:-1:-1;11099:12:0;:15;;;;;;;;;;:24;;;;;11098:25;11087:36;:92;;;;11143:8;:36;;;;-1:-1:-1;11155:12:0;:15;;;;;;;;;;:24;;;;;11143:36;11080:203;;;11239:1;11211:18;11230:5;11211:25;;;;;;;;;;;;;;;;;;:29;11267:1;11258:10;;;;;11080:203;11063:3;;11033:250;;;11326:4;11321:2;:9;11310:21;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;11310:21:0;;11292:39;;11348:4;11346:6;;11341:85;11356:2;11354:1;:4;11341:85;;;11405:18;11424:1;11405:21;;;;;;;;;;;;;;;;;;11377:15;11397:4;11393:1;:8;11377:25;;;;;;;;;;;;;;;;;;:49;11360:3;;11341:85;;;10757:676;;;;;;;;;:::o;9833:575::-;9928:24;9968:34;10043:10;10067:6;10019;:13;;;;10005:28;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;10005:28:0;;9968:65;;10056:1;10043:14;;10090:1;10088:3;;10083:186;10095:6;:13;10093:15;;10083:186;;;10131:28;;;;:13;:28;;;;;10160:6;:9;;10131:28;;;10167:1;;10160:9;;;;;;;;;;;;;;;;;;;;10131:39;;;;;;;;;;;;;;;10127:142;;;10217:6;:9;;10224:1;;10217:9;;;;;;;;;;;;;;;;10190:24;;10217:9;;;;;10190:17;;10208:5;;10190:24;;;;;;:36;;;;:24;;;;;;;;;;:36;10253:1;10244:10;;;;;10127:142;10110:3;;10083:186;;;10309:5;10295:20;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;10295:20:0;;10278:37;;10332:1;10330:3;;10325:76;10337:5;10335:1;:7;10325:76;;;10381:17;10399:1;10381:20;;;;;;;;;;;;;;;;;;10361:14;10376:1;10361:17;;;;;;;;;;:40;;;;:17;;;;;;;;;;:40;10344:3;;10325:76;;;9833:575;;;;;;:::o;991:28::-;;;;:::o;4990:207::-;1186:10;1208:4;1186:27;1182:50;;1227:5;;;1182:50;5092:6;:13;5107:9;256:2;2236:28;;;:66;;;2292:10;2280:9;:22;2236:66;:96;;;-1:-1:-1;2318:14:0;;2236:96;:127;;;-1:-1:-1;2348:15:0;;2236:127;2229:153;;;2377:5;;;2229:153;5132:8;:20;;;5162:28;;;;;;;;;;;;;;;;;1242:1;;4990:207;:::o;2573:459:1:-;2656:10;1420:14:0;;;;:7;:14;;;;;;;;1419:15;1415:38;;;1448:5;;;1415:38;1538:12;:27;;;;;;;;;;:39;2694:13:1;;1538:39:0;;:44;1534:67;;;1596:5;;;1534:67;1843:28;;;;:13;:28;;;;;;;;2745:10:1;1843:35:0;;;;;;;;;2730:13:1;;2745:10;1843:35:0;;1839:58;;;1892:5;;;1839:58;2783:13:1;1165:26;1177:13;1165:11;:26::i;:::-;1164:27;1156:36;;;;;;2812:28;;;;2855:4;2812:28;;;;;;;;2841:10;2812:40;;;;;;;;:47;;;;;;;;;;2869:39;;2826:13;;2869:39;;;2922:26;2934:13;2922:11;:26::i;:::-;2918:108;;;2964:51;2984:13;2999:15;2964:19;:51::i;5456:244:0:-;5560:18;5610:40;5625:11;5638:5;5645:4;5610:14;:40::i;:::-;5594:56;;5660:33;5679:13;5660:18;:33::i;:::-;5456:244;;;;;:::o;1045:47:1:-;;;;;;;;;;;;;:::o;217:41:0:-;256:2;217:41;:::o;965:20::-;;;;:::o;4370:449::-;4541:6;1186:10;1208:4;1186:27;1182:50;;1227:5;;;1182:50;1420:14;;;;;;;:7;:14;;;;;;4479:5;;1420:14;;1419:15;1415:38;;;1448:5;;;1415:38;1312:14;;;;;;;:7;:14;;;;;;4512:8;;1312:14;;1308:37;;;1340:5;;;1308:37;4548:1;4541:8;;4536:149;4553:6;:13;4551:15;;4536:149;;;4602:5;4589:18;;:6;4596:1;4589:9;;;;;;;;;;;;;;;;;;;;;;:18;4585:100;;;4639:8;4627:6;4634:1;4627:9;;;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;4665:5;;4585:100;4568:3;;;;;4536:149;;;4694:14;;;;4711:5;4694:14;;;:7;:14;;;;;;:22;;;;;;;;;4726:17;;;;;;;;:24;;;;;4694:22;4726:24;;;;4760:19;;4694:14;;4760:19;;;4789:23;;;;;;;;;;;1463:1;1242;4370:449;;;:::o;3602:472:1:-;3788:22;1976:27:0;;;;;;;;;;:36;;;3685:13:1;;1976:36:0;;1972:59;;;2026:5;;;1972:59;3723:13:1;1278:26;1290:13;1278:11;:26::i;:::-;1270:35;;;;;;;;1443:17;;1408:32;;;;:17;:32;;;;;;3759:13;;1408:52;1389:15;:71;;1381:80;;;;;;3813:12;:27;;;;;;;;;;;;3850:11;;;:18;;;;3864:4;3850:18;;;;;;3882:14;;3908:8;;;;3882:44;;3918:7;;;;3882:44;;3813:27;;-1:-1:-1;3882:14:1;;;;;3908:8;3918:7;;3882:44;;;;3918:7;;3882:44;;;;;3850:18;3882:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3878:190;;;3940:24;;3950:13;;3940:24;;;;;3878:190;;;3993:31;;4010:13;;3993:31;;;;;4038:11;;;:19;;;;;;3878:190;1315:1;2041::0;3602:472:1;;;:::o;15327:554:3:-;15442:13;15504:5;15512:1;15504:9;15492:1;:8;:21;;15471:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;15632:2:3;15625:10;15619:17;15775:66;15763:79;;15327:554::o;4184:223:1:-;4287:32;;;;:17;:32;;;;;;;;;:51;;;4348:52;;;;;;;4305:13;;4348:52;;;;;;;;;4184:223;;:::o;7974:451:0:-;8106:18;8076:11;2104:13;;;;2100:36;;;2131:5;;;2100:36;8156:16;;8212:140;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8212:140:0;;;;;;8182:27;;;;;;;;;;:170;;;;;;;;;;;;;;;-1:-1:-1;8182:170:0;;;;;;;8156:16;;-1:-1:-1;8212:140:0;;8182:27;;:170;;;;;;;;;;:::i;:::-;-1:-1:-1;8182:170:0;;;;;;;;;;;;;;;;;;;;;;;8362:16;:21;;-1:-1:-1;8362:21:0;;;8393:25;;8404:13;;8393:25;;-1:-1:-1;;8393:25:0;7974:451;;;;;;:::o;707:3198:2:-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;707:3198:2;;;-1:-1:-1;707:3198:2;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;"
+ "object": "0x606060405236156101435763ffffffff60e060020a600035041663025e7c278114610195578063173825d9146101c457806320ea8d86146101e25780632f54bf6e146101f75780633411c81c146102275780633589b35c1461025a57806337bd78a01461026f57806354741525146102915780635a1a66af146102bd5780637065cb48146102e0578063784547a7146102fe5780637ad28c511461032557806383250f791461033a5780638b51d13f1461036a5780639ace38c21461038f578063a0e67e2b1461044c578063a8abe69a146104b7578063b5dc40c314610532578063b77bf600146105a0578063ba51a6df146105c2578063c01a8c84146105d7578063c6427474146105ec578063d38f2d8214610661578063d74f8edd14610686578063dc8452cd146106a8578063e20056e6146106ca578063ee22610b146106ee575b6101935b600034111561019057604080513481529051600160a060020a033316917fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c919081900360200190a25b5b565b005b341561019d57fe5b6101a8600435610703565b60408051600160a060020a039092168252519081900360200190f35b34156101cc57fe5b610193600160a060020a0360043516610735565b005b34156101ea57fe5b6101936004356108e6565b005b34156101ff57fe5b610213600160a060020a03600435166109da565b604080519115158252519081900360200190f35b341561022f57fe5b610213600435600160a060020a03602435166109ef565b604080519115158252519081900360200190f35b341561026257fe5b610193600435610a0f565b005b341561027757fe5b61027f610cc9565b60408051918252519081900360200190f35b341561029957fe5b61027f60043515156024351515610ccf565b60408051918252519081900360200190f35b34156102c557fe5b610193600160a060020a03600435166024351515610d3e565b005b34156102e857fe5b610193600160a060020a0360043516610dde565b005b341561030657fe5b610213600435610f15565b604080519115158252519081900360200190f35b341561032d57fe5b610193600435610fa9565b005b341561034257fe5b610213600160a060020a0360043516611007565b604080519115158252519081900360200190f35b341561037257fe5b61027f60043561101c565b60408051918252519081900360200190f35b341561039757fe5b6103a260043561109b565b60408051600160a060020a03861681526020810185905282151560608201526080918101828152845460026000196101006001841615020190911604928201839052909160a08301908590801561043a5780601f1061040f5761010080835404028352916020019161043a565b820191906000526020600020905b81548152906001019060200180831161041d57829003601f168201915b50509550505050505060405180910390f35b341561045457fe5b61045c6110cf565b60408051602080825283518183015283519192839290830191858101910280838382156104a4575b8051825260208311156104a457601f199092019160209182019101610484565b5050509050019250505060405180910390f35b34156104bf57fe5b61045c60043560243560443515156064351515611138565b60408051602080825283518183015283519192839290830191858101910280838382156104a4575b8051825260208311156104a457601f199092019160209182019101610484565b5050509050019250505060405180910390f35b341561053a57fe5b61045c60043561126d565b60408051602080825283518183015283519192839290830191858101910280838382156104a4575b8051825260208311156104a457601f199092019160209182019101610484565b5050509050019250505060405180910390f35b34156105a857fe5b61027f6113f5565b60408051918252519081900360200190f35b34156105ca57fe5b6101936004356113fb565b005b34156105df57fe5b61019360043561148b565b005b34156105f457fe5b604080516020600460443581810135601f810184900484028501840190955284845261027f948235600160a060020a03169460248035956064949293919092019181908401838280828437509496506115a095505050505050565b60408051918252519081900360200190f35b341561066957fe5b61027f6004356115c0565b60408051918252519081900360200190f35b341561068e57fe5b61027f6115d2565b60408051918252519081900360200190f35b34156106b057fe5b61027f6115d7565b60408051918252519081900360200190f35b34156106d257fe5b610193600160a060020a03600435811690602435166115dd565b005b34156106f657fe5b610193600435611799565b005b600380548290811061071157fe5b906000526020600020900160005b915054906101000a9004600160a060020a031681565b600030600160a060020a031633600160a060020a03161415156107585760006000fd5b600160a060020a038216600090815260026020526040902054829060ff1615156107825760006000fd5b600160a060020a0383166000908152600260205260408120805460ff1916905591505b6003546000190182101561087d5782600160a060020a03166003838154811015156107cc57fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a031614156108715760038054600019810190811061080d57fe5b906000526020600020900160005b9054906101000a9004600160a060020a031660038381548110151561083c57fe5b906000526020600020900160005b6101000a815481600160a060020a030219169083600160a060020a0316021790555061087d565b5b6001909101906107a5565b6003805460001901906108909082611a9a565b5060035460045411156108a9576003546108a9906113fb565b5b604051600160a060020a038416907f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9090600090a25b5b505b5050565b33600160a060020a03811660009081526002602052604090205460ff16151561090f5760006000fd5b600082815260016020908152604080832033600160a060020a038116855292529091205483919060ff1615156109455760006000fd5b600084815260208190526040902060030154849060ff16156109675760006000fd5b8461097181610f15565b1561097c5760006000fd5b6000868152600160209081526040808320600160a060020a0333168085529252808320805460ff191690555188927ff6a317157440607f36269043eb55f1287a5a19ba2216afeab88cd46cbcfb88e991a35b5b505b505b50505b5050565b60026020526000908152604090205460ff1681565b600160209081526000928352604080842090915290825290205460ff1681565b600081815260208190526040812060030154829060ff1615610a315760006000fd5b82610a3b81610f15565b1515610a475760006000fd5b6000848152602081815260408083208054600160a060020a0316845260089092529091205485919060ff161515610a7e5760006000fd5b604080517f72656d6f7665417574686f72697a6564416464726573734174496e646578286181527f6464726573732c75696e743235362900000000000000000000000000000000006020808301919091528251602f9281900392909201822060028581018054600181161561010002600019011691909104601f8101849004840285018401909552848452600160e060020a031990911693610b789392830182828015610b6c5780601f10610b4157610100808354040283529160200191610b6c565b820191906000526020600020905b815481529060010190602001808311610b4f57829003601f168201915b5050505050600061192e565b600160e060020a03191614610b8d5760006000fd5b6000868152602081905260409081902060038101805460ff19166001908117909155815481830154935160028085018054959b50600160a060020a0390931695949293919283928592600019918316156101000291909101909116048015610c365780601f10610c0b57610100808354040283529160200191610c36565b820191906000526020600020905b815481529060010190602001808311610c1957829003601f168201915b505091505060006040518083038185876185025a03f19250505015610c855760405186907f33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed7590600090a26109ce565b60405186907f526441bb6c1aba3c9a4a6ca1d6545da9c2333c8c48343ef398eb858d72b7923690600090a260038501805460ff191690555b5b5b50505b505b505050565b60065481565b6000805b600554811015610d3657838015610cfc575060008181526020819052604090206003015460ff16155b80610d205750828015610d20575060008181526020819052604090206003015460ff165b5b15610d2d576001820191505b5b600101610cd3565b5b5092915050565b30600160a060020a031633600160a060020a0316141515610d5f5760006000fd5b81600160a060020a0381161515610d765760006000fd5b600160a060020a038316600081815260086020908152604091829020805460ff191686151590811790915582519384529083015280517fdaef8ff7dc66c5e34eb9c338aab679d9f427f89868d9228494455a4d982eb2b09281900390910190a15b5b505b5050565b30600160a060020a031633600160a060020a0316141515610dff5760006000fd5b600160a060020a038116600090815260026020526040902054819060ff1615610e285760006000fd5b81600160a060020a0381161515610e3f5760006000fd5b6003805490506001016004546032821180610e5957508181115b80610e62575080155b80610e6b575081155b15610e765760006000fd5b600160a060020a0385166000908152600260205260409020805460ff191660019081179091556003805490918101610eae8382611a9a565b916000526020600020900160005b8154600160a060020a03808a166101009390930a838102910219909116179091556040519091507ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d90600090a25b5b50505b505b505b50565b600080805b600354811015610fa15760008481526001602052604081206003805491929184908110610f4357fe5b906000526020600020900160005b9054600160a060020a036101009290920a900416815260208101919091526040016000205460ff1615610f85576001820191505b600454821415610f985760019250610fa1565b5b600101610f1a565b5b5050919050565b30600160a060020a031633600160a060020a0316141515610fca5760006000fd5b60068190556040805182815290517fd1c9101a34feff75cccef14a28785a0279cb0b49c1f321f21f5f422e746b43779181900360200190a15b5b50565b60086020526000908152604090205460ff1681565b6000805b600354811015611094576000838152600160205260408120600380549192918490811061104957fe5b906000526020600020900160005b9054600160a060020a036101009290920a900416815260208101919091526040016000205460ff161561108b576001820191505b5b600101611020565b5b50919050565b6000602081905290815260409020805460018201546003830154600160a060020a0390921692909160029091019060ff1684565b6110d7611aee565b600380548060200260200160405190810160405280929190818152602001828054801561112d57602002820191906000526020600020905b8154600160a060020a0316815260019091019060200180831161110f575b505050505090505b90565b611140611aee565b611148611aee565b6000600060055460405180591061115c5750595b908082528060200260200182016040525b50925060009150600090505b6005548110156111f6578580156111a2575060008181526020819052604090206003015460ff16155b806111c657508480156111c6575060008181526020819052604090206003015460ff165b5b156111ed578083838151811015156111db57fe5b60209081029091010152600191909101905b5b600101611179565b8787036040518059106112065750595b908082528060200260200182016040525b5093508790505b8681101561126157828181518110151561123457fe5b906020019060200201518489830381518110151561124e57fe5b602090810290910101525b60010161121e565b5b505050949350505050565b611275611aee565b61127d611aee565b60035460405160009182918059106112925750595b908082528060200260200182016040525b50925060009150600090505b60035481101561137757600085815260016020526040812060038054919291849081106112d857fe5b906000526020600020900160005b9054600160a060020a036101009290920a900416815260208101919091526040016000205460ff161561136e57600380548290811061132157fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316838381518110151561134f57fe5b600160a060020a03909216602092830290910190910152600191909101905b5b6001016112af565b816040518059106113855750595b908082528060200260200182016040525b509350600090505b818110156113ec5782818151811015156113b457fe5b9060200190602002015184828151811015156113cc57fe5b600160a060020a039092166020928302909101909101525b60010161139e565b5b505050919050565b60055481565b30600160a060020a031633600160a060020a031614151561141c5760006000fd5b60035481603282118061142e57508181115b80611437575080155b80611440575081155b1561144b5760006000fd5b60048390556040805184815290517fa3f1ee9126a074d9326c682f561767f710e927faa811f7a99829d49dc421797a9181900360200190a15b5b50505b50565b33600160a060020a03811660009081526002602052604090205460ff1615156114b45760006000fd5b6000828152602081905260409020548290600160a060020a031615156114da5760006000fd5b600083815260016020908152604080832033600160a060020a038116855292529091205484919060ff161561150f5760006000fd5b8461151981610f15565b156115245760006000fd5b6000868152600160208181526040808420600160a060020a0333168086529252808420805460ff1916909317909255905188927f4a504a94899432a9846e1aa406dceb1bcfd538bb839071d49d1e5e23f5be30ef91a361158386610f15565b156109ce576109ce864261195b565b5b5b5b505b50505b505b5050565b60006115ad8484846119a7565b90506115b88161148b565b5b9392505050565b60076020526000908152604090205481565b603281565b60045481565b600030600160a060020a031633600160a060020a03161415156116005760006000fd5b600160a060020a038316600090815260026020526040902054839060ff16151561162a5760006000fd5b600160a060020a038316600090815260026020526040902054839060ff16156116535760006000fd5b600092505b6003548310156116fb5784600160a060020a031660038481548110151561167b57fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a031614156116ef57836003848154811015156116ba57fe5b906000526020600020900160005b6101000a815481600160a060020a030219169083600160a060020a031602179055506116fb565b5b600190920191611658565b600160a060020a03808616600081815260026020526040808220805460ff1990811690915593881682528082208054909416600117909355915190917f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9091a2604051600160a060020a038516907ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d90600090a25b5b505b505b505050565b600081815260208190526040812060030154829060ff16156117bb5760006000fd5b826117c581610f15565b15156117d15760006000fd5b6006546000858152600760205260409020548591014210156117f35760006000fd5b6000858152602081905260409081902060038101805460ff19166001908117909155815481830154935160028085018054959a50600160a060020a039093169594929391928392859260001991831615610100029190910190911604801561189c5780601f106118715761010080835404028352916020019161189c565b820191906000526020600020905b81548152906001019060200180831161187f57829003601f168201915b505091505060006040518083038185876185025a03f192505050156118eb5760405185907f33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed7590600090a26109d1565b60405185907f526441bb6c1aba3c9a4a6ca1d6545da9c2333c8c48343ef398eb858d72b7923690600090a260038401805460ff191690555b5b5b505b505b505050565b6000816004018351101515156119445760006000fd5b506020820151600160e060020a0319165b92915050565b6000828152600760209081526040918290208390558151838152915184927f0b237afe65f1514fd7ea3f923ea4fe792bdd07000a912b6cd1602a8e7f573c8d92908290030190a25b5050565b600083600160a060020a03811615156119c05760006000fd5b60055460408051608081018252600160a060020a0388811682526020808301898152838501898152600060608601819052878152808452959095208451815473ffffffffffffffffffffffffffffffffffffffff191694169390931783555160018301559251805194965091939092611a40926002850192910190611b12565b50606091909101516003909101805460ff191691151591909117905560058054600101905560405182907fc0ba8fe4b176c1714197d43b9cc6bcf797a4a7461c5fe8d0ef6e184ae7601e5190600090a25b5b509392505050565b8154818355818115116108df576000838152602090206108df918101908301611b91565b5b505050565b8154818355818115116108df576000838152602090206108df918101908301611b91565b5b505050565b60408051602081019091526000815290565b60408051602081019091526000815290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611b5357805160ff1916838001178555611b80565b82800160010185558215611b80579182015b82811115611b80578251825591602001919060010190611b65565b5b50611b8d929150611b91565b5090565b61113591905b80821115611b8d5760008155600101611b97565b5090565b905600a165627a7a72305820de7348a39a18c2139f807a6077c790eed8049dfeaae504bf4a42607bfae3afce0029",
+ "sourceMap": "663:3945:2:-;;;;;;;;-1:-1:-1;;;663:3945:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2482:109:0;2539:1;2527:9;:13;2523:61;;;2554:30;;;2574:9;2554:30;;;;-1:-1:-1;;;;;2562:10:0;2554:30;;;;;;;;;;;;2523:61;2482:109;:::o;663:3945:2:-;;956:23:0;;;;;;;;;;;;;;;;-1:-1:-1;;;;;956:23:0;;;;;;;;;;;;;;3731:460;;;;;;;;-1:-1:-1;;;;;3731:460:0;;;;;;;3176:332:1;;;;;;;;;;;;;;910:40:0;;;;;;;;-1:-1:-1;;;;;910:40:0;;;;;;;;;;;;;;;;;;;;;;;840:64;;;;;;;;;;-1:-1:-1;;;;;840:64:0;;;;;;;;;;;;;;;;;;;;;;;3320:573:2;;;;;;;;;;;;;;1029:29:1;;;;;;;;;;;;;;;;;;;;;;;;;;9156:319:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2895:289:2;;;;;;;;-1:-1:-1;;;;;2895:289:2;;;;;;;;;;;3331:277:0;;;;;;;;-1:-1:-1;;;;;3331:277:0;;;;;;;7324:337;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2301:186:1;;;;;;;;;;;;;;981:55:2;;;;;;;;-1:-1:-1;;;;;981:55:2;;;;;;;;;;;;;;;;;;;;;;;8642:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;785:49;;;;;;;;;;;;;;;;-1:-1:-1;;;;;785:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;785:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9559:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;-1:-1;;152:3;;;;117:2;108:3;;;;130;172:5;167:4;181:3;3:186;;;;;;;;;;;;;;;;;10777:676:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;-1:-1;;152:3;;;;117:2;108:3;;;;130;172:5;167:4;181:3;3:186;;;;;;;;;;;;;;;;;9853:575:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;-1:-1;;152:3;;;;117:2;108:3;;;;130;172:5;167:4;181:3;3:186;;;;;;;;;;;;;;;;;1011:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;5010:207;;;;;;;;;;;;;;2593:459:1;;;;;;;;;;;;;;5476:244:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5476:244:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5476:244:0;;-1:-1:-1;5476:244:0;;-1:-1:-1;;;;;;5476:244:0;;;;;;;;;;;;;;;;;1065:47:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;237:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;985:20;;;;;;;;;;;;;;;;;;;;;;;;;;4390:449;;;;;;;;-1:-1:-1;;;;;4390:449:0;;;;;;;;;;;;3622:472:1;;;;;;;;;;;;;;956:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;956:23:0;;:::o;3731:460::-;3879:6;1228:4;-1:-1:-1;;;;;1206:27:0;:10;-1:-1:-1;;;;;1206:27:0;;;1202:50;;;1247:5;;;1202:50;-1:-1:-1;;;;;1440:14:0;;;;;;:7;:14;;;;;;3821:5;;1440:14;;1439:15;1435:38;;;1468:5;;;1435:38;-1:-1:-1;;;;;3842:14:0;;3859:5;3842:14;;;:7;:14;;;;;:22;;-1:-1:-1;;3842:22:0;;;3859:5;-1:-1:-1;3874:170:0;3891:6;:13;-1:-1:-1;;3891:17:0;3889:19;;3874:170;;;3944:5;-1:-1:-1;;;;;3931:18:0;:6;3938:1;3931:9;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3931:9:0;-1:-1:-1;;;;;3931:18:0;;3927:117;;;3981:6;3988:13;;-1:-1:-1;;3988:17:0;;;3981:25;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3981:25:0;3969:6;3976:1;3969:9;;;;;;;;;;;;;;;;;;;;:37;;;;;-1:-1:-1;;;;;3969:37:0;;;;;-1:-1:-1;;;;;3969:37:0;;;;;;4024:5;;3927:117;3874:170;3910:3;;;;;3874:170;;;4053:6;:18;;-1:-1:-1;;4053:18:0;;;;;;:::i;:::-;-1:-1:-1;4096:6:0;:13;4085:8;;:24;4081:74;;;4141:6;:13;4123:32;;:17;:32::i;:::-;4081:74;4165:19;;-1:-1:-1;;;;;4165:19:0;;;;;;;;1483:1;1262;;3731:460;;;:::o;3176:332:1:-;3259:10;-1:-1:-1;;;;;1440:14:0;;;;;;:7;:14;;;;;;;;1439:15;1435:38;;;1468:5;;;1435:38;1714:28;;;;:13;:28;;;;;;;;3304:10:1;-1:-1:-1;;;;;1714:35:0;;;;;;;;;;:28;;3304:10:1;1714:35:0;;1713:36;1709:59;;;1763:5;;;1709:59;1996:12;:27;;;;;;;;;;:36;;;3336:13:1;;1996:36:0;;1992:59;;;2046:5;;;1992:59;3377:13:1;1185:26;1197:13;1185:11;:26::i;:::-;1184:27;1176:36;;;;;;3449:5;3406:28;;;:13;:28;;;;;;;;-1:-1:-1;;;;;3435:10:1;3406:40;;;;;;;;;:48;;-1:-1:-1;;3406:48:1;;;3464:37;3420:13;;3464:37;;;1222:1;2061::0;;1778;;1483;;;3176:332:1;;;:::o;910:40:0:-;;;;;;;;;;;;;;;:::o;840:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3320:573:2:-;3553:22;1996:27:0;;;;;;;;;;:36;;;3425:13:2;;1996:36:0;;1992:59;;;2046:5;;;1992:59;3463:13:2;1298:26:1;1310:13;1298:11;:26::i;:::-;1290:35;;;;;;;;1418:22:2;1443:27;;;;;;;;;;;1511:14;;-1:-1:-1;;;;;1511:14:2;1488:38;;:22;:38;;;;;;;3524:13;;1443:27;1488:38;;1480:47;;;;;;;;1121:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;1556:7;;;;1545:22;;;;;;;;-1:-1:-1;;1545:22:2;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1545:69:2;;;;:22;;1121:60;1545:22;;1556:7;1545:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1565:1;1545:10;:22::i;:::-;-1:-1:-1;;;;;;1545:69:2;;1537:78;;;;;;3578:12;:27;;;;;;;;;;;;3615:11;;;:18;;-1:-1:-1;;3615:18:2;3629:4;3615:18;;;;;;3701:14;;3727:8;;;;3701:44;;3737:7;;;;3701:44;;3578:27;;-1:-1:-1;;;;;;3701:14:2;;;;3727:8;3737:7;;3701:44;;;;3737:7;;-1:-1:-1;;3701:44:2;;;;3615:18;3701:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3697:190;;;3759:24;;3769:13;;3759:24;;;;;3697:190;;;3812:31;;3829:13;;3812:31;;;;;3857:11;;;:19;;-1:-1:-1;;3857:19:2;;;3697:190;1625:1;1335::1;;;2061::0;;3320:573:2;;;;:::o;1029:29:1:-;;;;:::o;9156:319:0:-;9263:10;;9289:179;9306:16;;9304:1;:18;9289:179;;;9348:7;:36;;;;-1:-1:-1;9360:12:0;:15;;;;;;;;;;:24;;;;;9359:25;9348:36;:92;;;;9404:8;:36;;;;-1:-1:-1;9416:12:0;:15;;;;;;;;;;:24;;;;;9404:36;9348:92;9341:127;;;9467:1;9458:10;;;;9341:127;9289:179;9324:3;;9289:179;;;9156:319;;;;;;:::o;2895:289:2:-;1228:4:0;-1:-1:-1;;;;;1206:27:0;:10;-1:-1:-1;;;;;1206:27:0;;;1202:50;;;1247:5;;;1202:50;3020:18:2;-1:-1:-1;;;;;2124:13:0;;;2120:36;;;2151:5;;;2120:36;-1:-1:-1;;;;;3054:42:2;;;;;;:22;:42;;;;;;;;;:57;;-1:-1:-1;;3054:57:2;;;;;;;;;;3121:56;;;;;;;;;;;;;;;;;;;;;2166:1:0;1262;;2895:289:2;;;:::o;3331:277:0:-;1228:4;-1:-1:-1;;;;;1206:27:0;:10;-1:-1:-1;;;;;1206:27:0;;;1202:50;;;1247:5;;;1202:50;-1:-1:-1;;;;;1332:14:0;;;;;;:7;:14;;;;;;3424:5;;1332:14;;1328:37;;;1360:5;;;1328:37;3447:5;-1:-1:-1;;;;;2124:13:0;;;2120:36;;;2151:5;;;2120:36;3479:6;:13;;;;3495:1;3479:17;3498:8;;276:2;2256:10;:28;:66;;;;2312:10;2300:9;:22;2256:66;:96;;;-1:-1:-1;2338:14:0;;2256:96;:127;;;-1:-1:-1;2368:15:0;;2256:127;2249:153;;;2397:5;;;2249:153;-1:-1:-1;;;;;3522:14:0;;;;;;:7;:14;;;;;:21;;-1:-1:-1;;3522:21:0;3539:4;3522:21;;;;;;3553:6;:18;;:6;;:18;;;:6;:18;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;3553:18:0;;;;;;;;;;;;;;;;;;;;;3581:20;;3553:18;;-1:-1:-1;3581:20:0;;-1:-1:-1;;3581:20:0;2412:1;2166;;;1375;;1262;;3331:277;;:::o;7324:337::-;7414:4;;;7458:197;7475:6;:13;7473:15;;7458:197;;;7513:28;;;;:13;:28;;;;;7542:6;:9;;7513:28;;;7549:1;;7542:9;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7542:9:0;;;;;;;;7513:39;;;;;;;;;;;-1:-1:-1;7513:39:0;;;;7509:71;;;7579:1;7570:10;;;;7509:71;7607:8;;7598:5;:17;7594:50;;;7640:4;7633:11;;;;7594:50;7458:197;7490:3;;7458:197;;;7324:337;;;;;;:::o;2301:186:1:-;1228:4:0;-1:-1:-1;;;;;1206:27:0;:10;-1:-1:-1;;;;;1206:27:0;;;1202:50;;;1247:5;;;1202:50;2398:17:1;:38;;;2446:34;;;;;;;;;;;;;;;;;1262:1:0;2301:186:1;;:::o;981:55:2:-;;;;;;;;;;;;;;;:::o;8642:252:0:-;8741:10;;8767:120;8784:6;:13;8782:15;;8767:120;;;8820:28;;;;:13;:28;;;;;8849:6;:9;;8820:28;;;8856:1;;8849:9;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8849:9:0;;;;;;;;8820:39;;;;;;;;;;;-1:-1:-1;8820:39:0;;;;8816:71;;;8886:1;8877:10;;;;8816:71;8767:120;8799:3;;8767:120;;;8642:252;;;;;:::o;785:49::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;785:49:0;;;;;;;;;;;;;;:::o;9559:115::-;9629:9;;:::i;:::-;9661:6;9654:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9654:13:0;;;;;;;;;;;;;;;;;;;;;;;9559:115;;:::o;10777:676::-;10902:22;;:::i;:::-;10940:32;;:::i;:::-;11013:10;11037:6;10986:16;;10975:28;;;;;;;;;;;;;;;;;;;;;;;;;10940:63;;11026:1;11013:14;;11060:1;11058:3;;11053:250;11065:16;;11063:1;:18;11053:250;;;11107:7;:36;;;;-1:-1:-1;11119:12:0;:15;;;;;;;;;;:24;;;;;11118:25;11107:36;:92;;;;11163:8;:36;;;;-1:-1:-1;11175:12:0;:15;;;;;;;;;;:24;;;;;11163:36;11107:92;11100:203;;;11259:1;11231:18;11250:5;11231:25;;;;;;;;;;;;;;;;;;:29;11287:1;11278:10;;;;;11100:203;11053:250;11083:3;;11053:250;;;11346:4;11341:2;:9;11330:21;;;;;;;;;;;;;;;;;;;;;;;;;11312:39;;11368:4;11366:6;;11361:85;11376:2;11374:1;:4;11361:85;;;11425:18;11444:1;11425:21;;;;;;;;;;;;;;;;;;11397:15;11417:4;11413:1;:8;11397:25;;;;;;;;;;;;;;;;;;:49;11361:85;11380:3;;11361:85;;;10777:676;;;;;;;;;;:::o;9853:575::-;9948:24;;:::i;:::-;9988:34;;:::i;:::-;10039:6;:13;10025:28;;10063:10;;;;10025:28;;;;;;;;;;;;;;;;;;;;;;;9988:65;;10076:1;10063:14;;10110:1;10108:3;;10103:186;10115:6;:13;10113:15;;10103:186;;;10151:28;;;;:13;:28;;;;;10180:6;:9;;10151:28;;;10187:1;;10180:9;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10180:9:0;;;;;;;;10151:39;;;;;;;;;;;-1:-1:-1;10151:39:0;;;;10147:142;;;10237:6;:9;;10244:1;;10237:9;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10237:9:0;10210:17;10228:5;10210:24;;;;;;;;;;-1:-1:-1;;;;;10210:36:0;;;:24;;;;;;;;;;:36;10273:1;10264:10;;;;;10147:142;10103:186;10130:3;;10103:186;;;10329:5;10315:20;;;;;;;;;;;;;;;;;;;;;;;;;10298:37;;10352:1;10350:3;;10345:76;10357:5;10355:1;:7;10345:76;;;10401:17;10419:1;10401:20;;;;;;;;;;;;;;;;;;10381:14;10396:1;10381:17;;;;;;;;;;-1:-1:-1;;;;;10381:40:0;;;:17;;;;;;;;;;:40;10345:76;10364:3;;10345:76;;;9853:575;;;;;;;:::o;1011:28::-;;;;:::o;5010:207::-;1228:4;-1:-1:-1;;;;;1206:27:0;:10;-1:-1:-1;;;;;1206:27:0;;;1202:50;;;1247:5;;;1202:50;5112:6;:13;5127:9;276:2;2256:28;;;:66;;;2312:10;2300:9;:22;2256:66;:96;;;-1:-1:-1;2338:14:0;;2256:96;:127;;;-1:-1:-1;2368:15:0;;2256:127;2249:153;;;2397:5;;;2249:153;5152:8;:20;;;5182:28;;;;;;;;;;;;;;;;;2412:1;1262;;;5010:207;;:::o;2593:459:1:-;2676:10;-1:-1:-1;;;;;1440:14:0;;;;;;:7;:14;;;;;;;;1439:15;1435:38;;;1468:5;;;1435:38;1558:12;:27;;;;;;;;;;:39;2714:13:1;;-1:-1:-1;;;;;1558:39:0;:44;1554:67;;;1616:5;;;1554:67;1863:28;;;;:13;:28;;;;;;;;2765:10:1;-1:-1:-1;;;;;1863:35:0;;;;;;;;;;:28;;2765:10:1;1863:35:0;;1859:58;;;1912:5;;;1859:58;2803:13:1;1185:26;1197:13;1185:11;:26::i;:::-;1184:27;1176:36;;;;;;2832:28;;;;2875:4;2832:28;;;;;;;;-1:-1:-1;;;;;2861:10:1;2832:40;;;;;;;;;:47;;-1:-1:-1;;2832:47:1;;;;;;;2889:39;;2846:13;;2889:39;;;2942:26;2954:13;2942:11;:26::i;:::-;2938:108;;;2984:51;3004:13;3019:15;2984:19;:51::i;:::-;2938:108;1222:1;1927::0;;1631;;;1483;;2593:459:1;;;:::o;5476:244:0:-;5580:18;5630:40;5645:11;5658:5;5665:4;5630:14;:40::i;:::-;5614:56;;5680:33;5699:13;5680:18;:33::i;:::-;5476:244;;;;;;:::o;1065:47:1:-;;;;;;;;;;;;;:::o;237:41:0:-;276:2;237:41;:::o;985:20::-;;;;:::o;4390:449::-;4561:6;1228:4;-1:-1:-1;;;;;1206:27:0;:10;-1:-1:-1;;;;;1206:27:0;;;1202:50;;;1247:5;;;1202:50;-1:-1:-1;;;;;1440:14:0;;;;;;:7;:14;;;;;;4499:5;;1440:14;;1439:15;1435:38;;;1468:5;;;1435:38;-1:-1:-1;;;;;1332:14:0;;;;;;:7;:14;;;;;;4532:8;;1332:14;;1328:37;;;1360:5;;;1328:37;4568:1;4561:8;;4556:149;4573:6;:13;4571:15;;4556:149;;;4622:5;-1:-1:-1;;;;;4609:18:0;:6;4616:1;4609:9;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4609:9:0;-1:-1:-1;;;;;4609:18:0;;4605:100;;;4659:8;4647:6;4654:1;4647:9;;;;;;;;;;;;;;;;;;;;:20;;;;;-1:-1:-1;;;;;4647:20:0;;;;;-1:-1:-1;;;;;4647:20:0;;;;;;4685:5;;4605:100;4556:149;4588:3;;;;;4556:149;;;-1:-1:-1;;;;;4714:14:0;;;4731:5;4714:14;;;:7;:14;;;;;;:22;;-1:-1:-1;;4714:22:0;;;;;;4746:17;;;;;;;;:24;;;;;4714:22;4746:24;;;;4780:19;;4714:14;;4780:19;;;4809:23;;-1:-1:-1;;;;;4809:23:0;;;;;;;;1375:1;1483;;1262;;4390:449;;;;:::o;3622:472:1:-;3808:22;1996:27:0;;;;;;;;;;:36;;;3705:13:1;;1996:36:0;;1992:59;;;2046:5;;;1992:59;3743:13:1;1298:26;1310:13;1298:11;:26::i;:::-;1290:35;;;;;;;;1463:17;;1428:32;;;;:17;:32;;;;;;3779:13;;1428:52;1409:15;:71;;1401:80;;;;;;3833:12;:27;;;;;;;;;;;;3870:11;;;:18;;-1:-1:-1;;3870:18:1;3884:4;3870:18;;;;;;3902:14;;3928:8;;;;3902:44;;3938:7;;;;3902:44;;3833:27;;-1:-1:-1;;;;;;3902:14:1;;;;3928:8;3938:7;;3902:44;;;;3938:7;;-1:-1:-1;;3902:44:1;;;;3870:18;3902:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3898:190;;;3960:24;;3970:13;;3960:24;;;;;3898:190;;;4013:31;;4030:13;;4013:31;;;;;4058:11;;;:19;;-1:-1:-1;;4058:19:1;;;3898:190;1491:1;1335;;2061::0;;3622:472:1;;;;:::o;4135:471:2:-;4242:13;4291:5;4299:1;4291:9;4279:1;:8;:21;;4271:30;;;;;;;;-1:-1:-1;4357:2:2;4350:3;;4344:5;-1:-1:-1;;;;;;4488:3:2;4135:471;;;;;:::o;4204:223:1:-;4307:32;;;;:17;:32;;;;;;;;;:51;;;4368:52;;;;;;;4325:13;;4368:52;;;;;;;;;4204:223;;;:::o;7994:451:0:-;8126:18;8096:11;-1:-1:-1;;;;;2124:13:0;;;2120:36;;;2151:5;;;2120:36;8176:16;;8232:140;;;;;;;;-1:-1:-1;;;;;8232:140:0;;;;;;;;;;;;;;;;;;-1:-1:-1;8232:140:0;;;;;;8202:27;;;;;;;;;;:170;;;;-1:-1:-1;;8202:170:0;;;;;;;;;;-1:-1:-1;8202:170:0;;;;;;;8176:16;;-1:-1:-1;8232:140:0;;8202:27;;:170;;;;;;;;;;:::i;:::-;-1:-1:-1;8202:170:0;;;;;;;;;;;;-1:-1:-1;;8202:170:0;;;;;;;;;;8382:16;:21;;-1:-1:-1;8382:21:0;;;8413:25;;8424:13;;8413:25;;-1:-1:-1;;8413:25:0;2166:1;7994:451;;;;;;;:::o;663:3945:2:-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;-1:-1:-1;663:3945:2;;;:::o;:::-;;;;;;;;;;-1:-1:-1;663:3945:2;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;663:3945:2;;;-1:-1:-1;663:3945:2;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o",
+ "linkReferences": {}
+ },
+ "methodIdentifiers": {
+ "MAX_OWNER_COUNT()": "d74f8edd",
+ "addOwner(address)": "7065cb48",
+ "changeRequirement(uint256)": "ba51a6df",
+ "changeTimeLock(uint256)": "7ad28c51",
+ "confirmTransaction(uint256)": "c01a8c84",
+ "confirmationTimes(uint256)": "d38f2d82",
+ "confirmations(uint256,address)": "3411c81c",
+ "executeRemoveAuthorizedAddressAtIndex(uint256)": "3589b35c",
+ "executeTransaction(uint256)": "ee22610b",
+ "getConfirmationCount(uint256)": "8b51d13f",
+ "getConfirmations(uint256)": "b5dc40c3",
+ "getOwners()": "a0e67e2b",
+ "getTransactionCount(bool,bool)": "54741525",
+ "getTransactionIds(uint256,uint256,bool,bool)": "a8abe69a",
+ "isAssetProxyRegistered(address)": "83250f79",
+ "isConfirmed(uint256)": "784547a7",
+ "isOwner(address)": "2f54bf6e",
+ "owners(uint256)": "025e7c27",
+ "registerAssetProxy(address,bool)": "5a1a66af",
+ "removeOwner(address)": "173825d9",
+ "replaceOwner(address,address)": "e20056e6",
+ "required()": "dc8452cd",
+ "revokeConfirmation(uint256)": "20ea8d86",
+ "secondsTimeLocked()": "37bd78a0",
+ "submitTransaction(address,uint256,bytes)": "c6427474",
+ "transactionCount()": "b77bf600",
+ "transactions(uint256)": "9ace38c2"
+ },
+ "gasEstimates": {
+ "creation": {
+ "codeDepositCost": "1426800",
+ "executionCost": "infinite"
+ },
+ "internal": {
+ "readBytes4(bytes memory,uint256)": "infinite"
+ },
+ "external": {
+ "": "2187",
+ "MAX_OWNER_COUNT()": "1550",
+ "addOwner(address)": "infinite",
+ "changeRequirement(uint256)": "21901",
+ "changeTimeLock(uint256)": "21560",
+ "confirmTransaction(uint256)": "infinite",
+ "confirmationTimes(uint256)": "1550",
+ "confirmations(uint256,address)": "1550",
+ "executeRemoveAuthorizedAddressAtIndex(uint256)": "infinite",
+ "executeTransaction(uint256)": "infinite",
+ "getConfirmationCount(uint256)": "infinite",
+ "getConfirmations(uint256)": "infinite",
+ "getOwners()": "infinite",
+ "getTransactionCount(bool,bool)": "infinite",
+ "getTransactionIds(uint256,uint256,bool,bool)": "infinite",
+ "isAssetProxyRegistered(address)": "1550",
+ "isConfirmed(uint256)": "infinite",
+ "isOwner(address)": "1550",
+ "owners(uint256)": "1550",
+ "registerAssetProxy(address,bool)": "22074",
+ "removeOwner(address)": "infinite",
+ "replaceOwner(address,address)": "infinite",
+ "required()": "1550",
+ "revokeConfirmation(uint256)": "infinite",
+ "secondsTimeLocked()": "1550",
+ "submitTransaction(address,uint256,bytes)": "infinite",
+ "transactionCount()": "1550",
+ "transactions(uint256)": "infinite"
+ }
}
}
},
"sources": {
- "current/multisig/MultiSigWallet.sol": {
- "id": 0
- },
- "current/multisig/MultiSigWalletWithTimeLock.sol": {
- "id": 1
+ "2.0.0/multisig/MultiSigWallet.sol": {
+ "id": "0",
+ "legacyAST": {
+ "children": [
+ {
+ "attributes": {
+ "literals": [
+ "solidity",
+ "^",
+ "0.4",
+ ".10"
+ ]
+ },
+ "id": 458,
+ "name": "PragmaDirective",
+ "src": "19:24:0"
+ },
+ {
+ "attributes": {
+ "fullyImplemented": true,
+ "isLibrary": false,
+ "linearizedBaseContracts": [
+ 1419
+ ],
+ "name": "MultiSigWallet"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "MAX_OWNER_COUNT",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 459,
+ "name": "ElementaryTypeName",
+ "src": "237:4:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "3530",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 50",
+ "value": "50"
+ },
+ "id": 460,
+ "name": "Literal",
+ "src": "276:2:0"
+ }
+ ],
+ "id": 461,
+ "name": "VariableDeclaration",
+ "src": "237:41:0"
+ },
+ {
+ "attributes": {
+ "name": "Confirmation"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "sender",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 462,
+ "name": "ElementaryTypeName",
+ "src": "304:7:0"
+ }
+ ],
+ "id": 463,
+ "name": "VariableDeclaration",
+ "src": "304:22:0"
+ },
+ {
+ "attributes": {
+ "name": "transactionId",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 464,
+ "name": "ElementaryTypeName",
+ "src": "328:4:0"
+ }
+ ],
+ "id": 465,
+ "name": "VariableDeclaration",
+ "src": "328:26:0"
+ }
+ ],
+ "id": 466,
+ "name": "ParameterList",
+ "src": "303:52:0"
+ }
+ ],
+ "id": 467,
+ "name": "EventDefinition",
+ "src": "285:71:0"
+ },
+ {
+ "attributes": {
+ "name": "Revocation"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "sender",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 468,
+ "name": "ElementaryTypeName",
+ "src": "378:7:0"
+ }
+ ],
+ "id": 469,
+ "name": "VariableDeclaration",
+ "src": "378:22:0"
+ },
+ {
+ "attributes": {
+ "name": "transactionId",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 470,
+ "name": "ElementaryTypeName",
+ "src": "402:4:0"
+ }
+ ],
+ "id": 471,
+ "name": "VariableDeclaration",
+ "src": "402:26:0"
+ }
+ ],
+ "id": 472,
+ "name": "ParameterList",
+ "src": "377:52:0"
+ }
+ ],
+ "id": 473,
+ "name": "EventDefinition",
+ "src": "361:69:0"
+ },
+ {
+ "attributes": {
+ "name": "Submission"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "transactionId",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 474,
+ "name": "ElementaryTypeName",
+ "src": "452:4:0"
+ }
+ ],
+ "id": 475,
+ "name": "VariableDeclaration",
+ "src": "452:26:0"
+ }
+ ],
+ "id": 476,
+ "name": "ParameterList",
+ "src": "451:28:0"
+ }
+ ],
+ "id": 477,
+ "name": "EventDefinition",
+ "src": "435:45:0"
+ },
+ {
+ "attributes": {
+ "name": "Execution"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "transactionId",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 478,
+ "name": "ElementaryTypeName",
+ "src": "501:4:0"
+ }
+ ],
+ "id": 479,
+ "name": "VariableDeclaration",
+ "src": "501:26:0"
+ }
+ ],
+ "id": 480,
+ "name": "ParameterList",
+ "src": "500:28:0"
+ }
+ ],
+ "id": 481,
+ "name": "EventDefinition",
+ "src": "485:44:0"
+ },
+ {
+ "attributes": {
+ "name": "ExecutionFailure"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "transactionId",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 482,
+ "name": "ElementaryTypeName",
+ "src": "557:4:0"
+ }
+ ],
+ "id": 483,
+ "name": "VariableDeclaration",
+ "src": "557:26:0"
+ }
+ ],
+ "id": 484,
+ "name": "ParameterList",
+ "src": "556:28:0"
+ }
+ ],
+ "id": 485,
+ "name": "EventDefinition",
+ "src": "534:51:0"
+ },
+ {
+ "attributes": {
+ "name": "Deposit"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "sender",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 486,
+ "name": "ElementaryTypeName",
+ "src": "604:7:0"
+ }
+ ],
+ "id": 487,
+ "name": "VariableDeclaration",
+ "src": "604:22:0"
+ },
+ {
+ "attributes": {
+ "name": "value",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 488,
+ "name": "ElementaryTypeName",
+ "src": "628:4:0"
+ }
+ ],
+ "id": 489,
+ "name": "VariableDeclaration",
+ "src": "628:10:0"
+ }
+ ],
+ "id": 490,
+ "name": "ParameterList",
+ "src": "603:36:0"
+ }
+ ],
+ "id": 491,
+ "name": "EventDefinition",
+ "src": "590:50:0"
+ },
+ {
+ "attributes": {
+ "name": "OwnerAddition"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "owner",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 492,
+ "name": "ElementaryTypeName",
+ "src": "665:7:0"
+ }
+ ],
+ "id": 493,
+ "name": "VariableDeclaration",
+ "src": "665:21:0"
+ }
+ ],
+ "id": 494,
+ "name": "ParameterList",
+ "src": "664:23:0"
+ }
+ ],
+ "id": 495,
+ "name": "EventDefinition",
+ "src": "645:43:0"
+ },
+ {
+ "attributes": {
+ "name": "OwnerRemoval"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "owner",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 496,
+ "name": "ElementaryTypeName",
+ "src": "712:7:0"
+ }
+ ],
+ "id": 497,
+ "name": "VariableDeclaration",
+ "src": "712:21:0"
+ }
+ ],
+ "id": 498,
+ "name": "ParameterList",
+ "src": "711:23:0"
+ }
+ ],
+ "id": 499,
+ "name": "EventDefinition",
+ "src": "693:42:0"
+ },
+ {
+ "attributes": {
+ "name": "RequirementChange"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "required",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 500,
+ "name": "ElementaryTypeName",
+ "src": "764:4:0"
+ }
+ ],
+ "id": 501,
+ "name": "VariableDeclaration",
+ "src": "764:13:0"
+ }
+ ],
+ "id": 502,
+ "name": "ParameterList",
+ "src": "763:15:0"
+ }
+ ],
+ "id": 503,
+ "name": "EventDefinition",
+ "src": "740:39:0"
+ },
+ {
+ "attributes": {
+ "name": "transactions",
+ "type": "mapping(uint256 => struct MultiSigWallet.Transaction storage ref)"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 504,
+ "name": "ElementaryTypeName",
+ "src": "794:4:0"
+ },
+ {
+ "attributes": {
+ "name": "Transaction"
+ },
+ "id": 505,
+ "name": "UserDefinedTypeName",
+ "src": "802:11:0"
+ }
+ ],
+ "id": 506,
+ "name": "Mapping",
+ "src": "785:29:0"
+ }
+ ],
+ "id": 507,
+ "name": "VariableDeclaration",
+ "src": "785:49:0"
+ },
+ {
+ "attributes": {
+ "name": "confirmations",
+ "type": "mapping(uint256 => mapping(address => bool))"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 508,
+ "name": "ElementaryTypeName",
+ "src": "849:4:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 509,
+ "name": "ElementaryTypeName",
+ "src": "866:7:0"
+ },
+ {
+ "attributes": {
+ "name": "bool"
+ },
+ "id": 510,
+ "name": "ElementaryTypeName",
+ "src": "877:4:0"
+ }
+ ],
+ "id": 511,
+ "name": "Mapping",
+ "src": "857:25:0"
+ }
+ ],
+ "id": 512,
+ "name": "Mapping",
+ "src": "840:43:0"
+ }
+ ],
+ "id": 513,
+ "name": "VariableDeclaration",
+ "src": "840:64:0"
+ },
+ {
+ "attributes": {
+ "name": "isOwner",
+ "type": "mapping(address => bool)"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 514,
+ "name": "ElementaryTypeName",
+ "src": "919:7:0"
+ },
+ {
+ "attributes": {
+ "name": "bool"
+ },
+ "id": 515,
+ "name": "ElementaryTypeName",
+ "src": "930:4:0"
+ }
+ ],
+ "id": 516,
+ "name": "Mapping",
+ "src": "910:25:0"
+ }
+ ],
+ "id": 517,
+ "name": "VariableDeclaration",
+ "src": "910:40:0"
+ },
+ {
+ "attributes": {
+ "name": "owners",
+ "type": "address[] storage ref"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 518,
+ "name": "ElementaryTypeName",
+ "src": "956:7:0"
+ }
+ ],
+ "id": 519,
+ "name": "ArrayTypeName",
+ "src": "956:9:0"
+ }
+ ],
+ "id": 520,
+ "name": "VariableDeclaration",
+ "src": "956:23:0"
+ },
+ {
+ "attributes": {
+ "name": "required",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 521,
+ "name": "ElementaryTypeName",
+ "src": "985:4:0"
+ }
+ ],
+ "id": 522,
+ "name": "VariableDeclaration",
+ "src": "985:20:0"
+ },
+ {
+ "attributes": {
+ "name": "transactionCount",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 523,
+ "name": "ElementaryTypeName",
+ "src": "1011:4:0"
+ }
+ ],
+ "id": 524,
+ "name": "VariableDeclaration",
+ "src": "1011:28:0"
+ },
+ {
+ "attributes": {
+ "name": "Transaction"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "destination",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 525,
+ "name": "ElementaryTypeName",
+ "src": "1075:7:0"
+ }
+ ],
+ "id": 526,
+ "name": "VariableDeclaration",
+ "src": "1075:19:0"
+ },
+ {
+ "attributes": {
+ "name": "value",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 527,
+ "name": "ElementaryTypeName",
+ "src": "1104:4:0"
+ }
+ ],
+ "id": 528,
+ "name": "VariableDeclaration",
+ "src": "1104:10:0"
+ },
+ {
+ "attributes": {
+ "name": "data",
+ "type": "bytes storage pointer"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "bytes"
+ },
+ "id": 529,
+ "name": "ElementaryTypeName",
+ "src": "1124:5:0"
+ }
+ ],
+ "id": 530,
+ "name": "VariableDeclaration",
+ "src": "1124:10:0"
+ },
+ {
+ "attributes": {
+ "name": "executed",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "bool"
+ },
+ "id": 531,
+ "name": "ElementaryTypeName",
+ "src": "1144:4:0"
+ }
+ ],
+ "id": 532,
+ "name": "VariableDeclaration",
+ "src": "1144:13:0"
+ }
+ ],
+ "id": 533,
+ "name": "StructDefinition",
+ "src": "1046:118:0"
+ },
+ {
+ "attributes": {
+ "name": "onlyWallet"
+ },
+ "children": [
+ {
+ "children": [],
+ "id": 534,
+ "name": "ParameterList",
+ "src": "1189:2:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "!=",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "member_name": "sender",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "msg",
+ "value": "msg"
+ },
+ "id": 535,
+ "name": "Identifier",
+ "src": "1206:3:0"
+ }
+ ],
+ "id": 536,
+ "name": "MemberAccess",
+ "src": "1206:10:0"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "type_conversion": true
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "type(address)",
+ "value": "address"
+ },
+ "id": 537,
+ "name": "ElementaryTypeNameExpression",
+ "src": "1220:7:0"
+ },
+ {
+ "attributes": {
+ "type": "contract MultiSigWallet",
+ "value": "this"
+ },
+ "id": 538,
+ "name": "Identifier",
+ "src": "1228:4:0"
+ }
+ ],
+ "id": 539,
+ "name": "FunctionCall",
+ "src": "1220:13:0"
+ }
+ ],
+ "id": 540,
+ "name": "BinaryOperation",
+ "src": "1206:27:0"
+ },
+ {
+ "children": [],
+ "id": 541,
+ "name": "Throw",
+ "src": "1247:5:0"
+ }
+ ],
+ "id": 542,
+ "name": "IfStatement",
+ "src": "1202:50:0"
+ },
+ {
+ "id": 543,
+ "name": "PlaceholderStatement",
+ "src": "1262:1:0"
+ }
+ ],
+ "id": 544,
+ "name": "Block",
+ "src": "1192:78:0"
+ }
+ ],
+ "id": 545,
+ "name": "ModifierDefinition",
+ "src": "1170:100:0"
+ },
+ {
+ "attributes": {
+ "name": "ownerDoesNotExist"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "owner",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 546,
+ "name": "ElementaryTypeName",
+ "src": "1303:7:0"
+ }
+ ],
+ "id": 547,
+ "name": "VariableDeclaration",
+ "src": "1303:13:0"
+ }
+ ],
+ "id": 548,
+ "name": "ParameterList",
+ "src": "1302:15:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(address => bool)",
+ "value": "isOwner"
+ },
+ "id": 549,
+ "name": "Identifier",
+ "src": "1332:7:0"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "owner"
+ },
+ "id": 550,
+ "name": "Identifier",
+ "src": "1340:5:0"
+ }
+ ],
+ "id": 551,
+ "name": "IndexAccess",
+ "src": "1332:14:0"
+ },
+ {
+ "children": [],
+ "id": 552,
+ "name": "Throw",
+ "src": "1360:5:0"
+ }
+ ],
+ "id": 553,
+ "name": "IfStatement",
+ "src": "1328:37:0"
+ },
+ {
+ "id": 554,
+ "name": "PlaceholderStatement",
+ "src": "1375:1:0"
+ }
+ ],
+ "id": 555,
+ "name": "Block",
+ "src": "1318:65:0"
+ }
+ ],
+ "id": 556,
+ "name": "ModifierDefinition",
+ "src": "1276:107:0"
+ },
+ {
+ "attributes": {
+ "name": "ownerExists"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "owner",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 557,
+ "name": "ElementaryTypeName",
+ "src": "1410:7:0"
+ }
+ ],
+ "id": 558,
+ "name": "VariableDeclaration",
+ "src": "1410:13:0"
+ }
+ ],
+ "id": 559,
+ "name": "ParameterList",
+ "src": "1409:15:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "!",
+ "prefix": true,
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(address => bool)",
+ "value": "isOwner"
+ },
+ "id": 560,
+ "name": "Identifier",
+ "src": "1440:7:0"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "owner"
+ },
+ "id": 561,
+ "name": "Identifier",
+ "src": "1448:5:0"
+ }
+ ],
+ "id": 562,
+ "name": "IndexAccess",
+ "src": "1440:14:0"
+ }
+ ],
+ "id": 563,
+ "name": "UnaryOperation",
+ "src": "1439:15:0"
+ },
+ {
+ "children": [],
+ "id": 564,
+ "name": "Throw",
+ "src": "1468:5:0"
+ }
+ ],
+ "id": 565,
+ "name": "IfStatement",
+ "src": "1435:38:0"
+ },
+ {
+ "id": 566,
+ "name": "PlaceholderStatement",
+ "src": "1483:1:0"
+ }
+ ],
+ "id": 567,
+ "name": "Block",
+ "src": "1425:66:0"
+ }
+ ],
+ "id": 568,
+ "name": "ModifierDefinition",
+ "src": "1389:102:0"
+ },
+ {
+ "attributes": {
+ "name": "transactionExists"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "transactionId",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 569,
+ "name": "ElementaryTypeName",
+ "src": "1524:4:0"
+ }
+ ],
+ "id": 570,
+ "name": "VariableDeclaration",
+ "src": "1524:18:0"
+ }
+ ],
+ "id": 571,
+ "name": "ParameterList",
+ "src": "1523:20:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "==",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "member_name": "destination",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage ref"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(uint256 => struct MultiSigWallet.Transaction storage ref)",
+ "value": "transactions"
+ },
+ "id": 572,
+ "name": "Identifier",
+ "src": "1558:12:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 573,
+ "name": "Identifier",
+ "src": "1571:13:0"
+ }
+ ],
+ "id": 574,
+ "name": "IndexAccess",
+ "src": "1558:27:0"
+ }
+ ],
+ "id": 575,
+ "name": "MemberAccess",
+ "src": "1558:39:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "30",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 0",
+ "value": "0"
+ },
+ "id": 576,
+ "name": "Literal",
+ "src": "1601:1:0"
+ }
+ ],
+ "id": 577,
+ "name": "BinaryOperation",
+ "src": "1558:44:0"
+ },
+ {
+ "children": [],
+ "id": 578,
+ "name": "Throw",
+ "src": "1616:5:0"
+ }
+ ],
+ "id": 579,
+ "name": "IfStatement",
+ "src": "1554:67:0"
+ },
+ {
+ "id": 580,
+ "name": "PlaceholderStatement",
+ "src": "1631:1:0"
+ }
+ ],
+ "id": 581,
+ "name": "Block",
+ "src": "1544:95:0"
+ }
+ ],
+ "id": 582,
+ "name": "ModifierDefinition",
+ "src": "1497:142:0"
+ },
+ {
+ "attributes": {
+ "name": "confirmed"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "transactionId",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 583,
+ "name": "ElementaryTypeName",
+ "src": "1664:4:0"
+ }
+ ],
+ "id": 584,
+ "name": "VariableDeclaration",
+ "src": "1664:18:0"
+ },
+ {
+ "attributes": {
+ "name": "owner",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 585,
+ "name": "ElementaryTypeName",
+ "src": "1684:7:0"
+ }
+ ],
+ "id": 586,
+ "name": "VariableDeclaration",
+ "src": "1684:13:0"
+ }
+ ],
+ "id": 587,
+ "name": "ParameterList",
+ "src": "1663:35:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "!",
+ "prefix": true,
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(address => bool)"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(uint256 => mapping(address => bool))",
+ "value": "confirmations"
+ },
+ "id": 588,
+ "name": "Identifier",
+ "src": "1714:13:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 589,
+ "name": "Identifier",
+ "src": "1728:13:0"
+ }
+ ],
+ "id": 590,
+ "name": "IndexAccess",
+ "src": "1714:28:0"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "owner"
+ },
+ "id": 591,
+ "name": "Identifier",
+ "src": "1743:5:0"
+ }
+ ],
+ "id": 592,
+ "name": "IndexAccess",
+ "src": "1714:35:0"
+ }
+ ],
+ "id": 593,
+ "name": "UnaryOperation",
+ "src": "1713:36:0"
+ },
+ {
+ "children": [],
+ "id": 594,
+ "name": "Throw",
+ "src": "1763:5:0"
+ }
+ ],
+ "id": 595,
+ "name": "IfStatement",
+ "src": "1709:59:0"
+ },
+ {
+ "id": 596,
+ "name": "PlaceholderStatement",
+ "src": "1778:1:0"
+ }
+ ],
+ "id": 597,
+ "name": "Block",
+ "src": "1699:87:0"
+ }
+ ],
+ "id": 598,
+ "name": "ModifierDefinition",
+ "src": "1645:141:0"
+ },
+ {
+ "attributes": {
+ "name": "notConfirmed"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "transactionId",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 599,
+ "name": "ElementaryTypeName",
+ "src": "1814:4:0"
+ }
+ ],
+ "id": 600,
+ "name": "VariableDeclaration",
+ "src": "1814:18:0"
+ },
+ {
+ "attributes": {
+ "name": "owner",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 601,
+ "name": "ElementaryTypeName",
+ "src": "1834:7:0"
+ }
+ ],
+ "id": 602,
+ "name": "VariableDeclaration",
+ "src": "1834:13:0"
+ }
+ ],
+ "id": 603,
+ "name": "ParameterList",
+ "src": "1813:35:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(address => bool)"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(uint256 => mapping(address => bool))",
+ "value": "confirmations"
+ },
+ "id": 604,
+ "name": "Identifier",
+ "src": "1863:13:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 605,
+ "name": "Identifier",
+ "src": "1877:13:0"
+ }
+ ],
+ "id": 606,
+ "name": "IndexAccess",
+ "src": "1863:28:0"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "owner"
+ },
+ "id": 607,
+ "name": "Identifier",
+ "src": "1892:5:0"
+ }
+ ],
+ "id": 608,
+ "name": "IndexAccess",
+ "src": "1863:35:0"
+ },
+ {
+ "children": [],
+ "id": 609,
+ "name": "Throw",
+ "src": "1912:5:0"
+ }
+ ],
+ "id": 610,
+ "name": "IfStatement",
+ "src": "1859:58:0"
+ },
+ {
+ "id": 611,
+ "name": "PlaceholderStatement",
+ "src": "1927:1:0"
+ }
+ ],
+ "id": 612,
+ "name": "Block",
+ "src": "1849:86:0"
+ }
+ ],
+ "id": 613,
+ "name": "ModifierDefinition",
+ "src": "1792:143:0"
+ },
+ {
+ "attributes": {
+ "name": "notExecuted"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "transactionId",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 614,
+ "name": "ElementaryTypeName",
+ "src": "1962:4:0"
+ }
+ ],
+ "id": 615,
+ "name": "VariableDeclaration",
+ "src": "1962:18:0"
+ }
+ ],
+ "id": 616,
+ "name": "ParameterList",
+ "src": "1961:20:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "member_name": "executed",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage ref"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(uint256 => struct MultiSigWallet.Transaction storage ref)",
+ "value": "transactions"
+ },
+ "id": 617,
+ "name": "Identifier",
+ "src": "1996:12:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 618,
+ "name": "Identifier",
+ "src": "2009:13:0"
+ }
+ ],
+ "id": 619,
+ "name": "IndexAccess",
+ "src": "1996:27:0"
+ }
+ ],
+ "id": 620,
+ "name": "MemberAccess",
+ "src": "1996:36:0"
+ },
+ {
+ "children": [],
+ "id": 621,
+ "name": "Throw",
+ "src": "2046:5:0"
+ }
+ ],
+ "id": 622,
+ "name": "IfStatement",
+ "src": "1992:59:0"
+ },
+ {
+ "id": 623,
+ "name": "PlaceholderStatement",
+ "src": "2061:1:0"
+ }
+ ],
+ "id": 624,
+ "name": "Block",
+ "src": "1982:87:0"
+ }
+ ],
+ "id": 625,
+ "name": "ModifierDefinition",
+ "src": "1941:128:0"
+ },
+ {
+ "attributes": {
+ "name": "notNull"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "_address",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 626,
+ "name": "ElementaryTypeName",
+ "src": "2092:7:0"
+ }
+ ],
+ "id": 627,
+ "name": "VariableDeclaration",
+ "src": "2092:16:0"
+ }
+ ],
+ "id": 628,
+ "name": "ParameterList",
+ "src": "2091:18:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "==",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address",
+ "value": "_address"
+ },
+ "id": 629,
+ "name": "Identifier",
+ "src": "2124:8:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "30",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 0",
+ "value": "0"
+ },
+ "id": 630,
+ "name": "Literal",
+ "src": "2136:1:0"
+ }
+ ],
+ "id": 631,
+ "name": "BinaryOperation",
+ "src": "2124:13:0"
+ },
+ {
+ "children": [],
+ "id": 632,
+ "name": "Throw",
+ "src": "2151:5:0"
+ }
+ ],
+ "id": 633,
+ "name": "IfStatement",
+ "src": "2120:36:0"
+ },
+ {
+ "id": 634,
+ "name": "PlaceholderStatement",
+ "src": "2166:1:0"
+ }
+ ],
+ "id": 635,
+ "name": "Block",
+ "src": "2110:64:0"
+ }
+ ],
+ "id": 636,
+ "name": "ModifierDefinition",
+ "src": "2075:99:0"
+ },
+ {
+ "attributes": {
+ "name": "validRequirement"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "ownerCount",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 637,
+ "name": "ElementaryTypeName",
+ "src": "2206:4:0"
+ }
+ ],
+ "id": 638,
+ "name": "VariableDeclaration",
+ "src": "2206:15:0"
+ },
+ {
+ "attributes": {
+ "name": "_required",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 639,
+ "name": "ElementaryTypeName",
+ "src": "2223:4:0"
+ }
+ ],
+ "id": 640,
+ "name": "VariableDeclaration",
+ "src": "2223:14:0"
+ }
+ ],
+ "id": 641,
+ "name": "ParameterList",
+ "src": "2205:33:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "||",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "operator": "||",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "operator": "||",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "operator": ">",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "ownerCount"
+ },
+ "id": 642,
+ "name": "Identifier",
+ "src": "2256:10:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "MAX_OWNER_COUNT"
+ },
+ "id": 643,
+ "name": "Identifier",
+ "src": "2269:15:0"
+ }
+ ],
+ "id": 644,
+ "name": "BinaryOperation",
+ "src": "2256:28:0"
+ },
+ {
+ "attributes": {
+ "operator": ">",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "_required"
+ },
+ "id": 645,
+ "name": "Identifier",
+ "src": "2300:9:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "ownerCount"
+ },
+ "id": 646,
+ "name": "Identifier",
+ "src": "2312:10:0"
+ }
+ ],
+ "id": 647,
+ "name": "BinaryOperation",
+ "src": "2300:22:0"
+ }
+ ],
+ "id": 648,
+ "name": "BinaryOperation",
+ "src": "2256:66:0"
+ },
+ {
+ "attributes": {
+ "operator": "==",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "_required"
+ },
+ "id": 649,
+ "name": "Identifier",
+ "src": "2338:9:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "30",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 0",
+ "value": "0"
+ },
+ "id": 650,
+ "name": "Literal",
+ "src": "2351:1:0"
+ }
+ ],
+ "id": 651,
+ "name": "BinaryOperation",
+ "src": "2338:14:0"
+ }
+ ],
+ "id": 652,
+ "name": "BinaryOperation",
+ "src": "2256:96:0"
+ },
+ {
+ "attributes": {
+ "operator": "==",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "ownerCount"
+ },
+ "id": 653,
+ "name": "Identifier",
+ "src": "2368:10:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "30",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 0",
+ "value": "0"
+ },
+ "id": 654,
+ "name": "Literal",
+ "src": "2382:1:0"
+ }
+ ],
+ "id": 655,
+ "name": "BinaryOperation",
+ "src": "2368:15:0"
+ }
+ ],
+ "id": 656,
+ "name": "BinaryOperation",
+ "src": "2256:127:0"
+ },
+ {
+ "children": [],
+ "id": 657,
+ "name": "Throw",
+ "src": "2397:5:0"
+ }
+ ],
+ "id": 658,
+ "name": "IfStatement",
+ "src": "2249:153:0"
+ },
+ {
+ "id": 659,
+ "name": "PlaceholderStatement",
+ "src": "2412:1:0"
+ }
+ ],
+ "id": 660,
+ "name": "Block",
+ "src": "2239:181:0"
+ }
+ ],
+ "id": 661,
+ "name": "ModifierDefinition",
+ "src": "2180:240:0"
+ },
+ {
+ "attributes": {
+ "constant": false,
+ "name": "",
+ "payable": true,
+ "visibility": "public"
+ },
+ "children": [
+ {
+ "children": [],
+ "id": 662,
+ "name": "ParameterList",
+ "src": "2490:2:0"
+ },
+ {
+ "children": [],
+ "id": 663,
+ "name": "ParameterList",
+ "src": "2513:0:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": ">",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "member_name": "value",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "msg",
+ "value": "msg"
+ },
+ "id": 664,
+ "name": "Identifier",
+ "src": "2527:3:0"
+ }
+ ],
+ "id": 665,
+ "name": "MemberAccess",
+ "src": "2527:9:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "30",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 0",
+ "value": "0"
+ },
+ "id": 666,
+ "name": "Literal",
+ "src": "2539:1:0"
+ }
+ ],
+ "id": 667,
+ "name": "BinaryOperation",
+ "src": "2527:13:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (address,uint256) constant",
+ "value": "Deposit"
+ },
+ "id": 668,
+ "name": "Identifier",
+ "src": "2554:7:0"
+ },
+ {
+ "attributes": {
+ "member_name": "sender",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "msg",
+ "value": "msg"
+ },
+ "id": 669,
+ "name": "Identifier",
+ "src": "2562:3:0"
+ }
+ ],
+ "id": 670,
+ "name": "MemberAccess",
+ "src": "2562:10:0"
+ },
+ {
+ "attributes": {
+ "member_name": "value",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "msg",
+ "value": "msg"
+ },
+ "id": 671,
+ "name": "Identifier",
+ "src": "2574:3:0"
+ }
+ ],
+ "id": 672,
+ "name": "MemberAccess",
+ "src": "2574:9:0"
+ }
+ ],
+ "id": 673,
+ "name": "FunctionCall",
+ "src": "2554:30:0"
+ }
+ ],
+ "id": 674,
+ "name": "ExpressionStatement",
+ "src": "2554:30:0"
+ }
+ ],
+ "id": 675,
+ "name": "IfStatement",
+ "src": "2523:61:0"
+ }
+ ],
+ "id": 676,
+ "name": "Block",
+ "src": "2513:78:0"
+ }
+ ],
+ "id": 677,
+ "name": "FunctionDefinition",
+ "src": "2482:109:0"
+ },
+ {
+ "attributes": {
+ "constant": false,
+ "name": "MultiSigWallet",
+ "payable": false,
+ "visibility": "public"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "_owners",
+ "type": "address[] memory"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 678,
+ "name": "ElementaryTypeName",
+ "src": "2858:7:0"
+ }
+ ],
+ "id": 679,
+ "name": "ArrayTypeName",
+ "src": "2858:9:0"
+ }
+ ],
+ "id": 680,
+ "name": "VariableDeclaration",
+ "src": "2858:17:0"
+ },
+ {
+ "attributes": {
+ "name": "_required",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 681,
+ "name": "ElementaryTypeName",
+ "src": "2877:4:0"
+ }
+ ],
+ "id": 682,
+ "name": "VariableDeclaration",
+ "src": "2877:14:0"
+ }
+ ],
+ "id": 683,
+ "name": "ParameterList",
+ "src": "2857:35:0"
+ },
+ {
+ "children": [],
+ "id": 689,
+ "name": "ParameterList",
+ "src": "2964:0:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (uint256,uint256)",
+ "value": "validRequirement"
+ },
+ "id": 684,
+ "name": "Identifier",
+ "src": "2916:16:0"
+ },
+ {
+ "attributes": {
+ "member_name": "length",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] memory",
+ "value": "_owners"
+ },
+ "id": 685,
+ "name": "Identifier",
+ "src": "2933:7:0"
+ }
+ ],
+ "id": 686,
+ "name": "MemberAccess",
+ "src": "2933:14:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "_required"
+ },
+ "id": 687,
+ "name": "Identifier",
+ "src": "2949:9:0"
+ }
+ ],
+ "id": 688,
+ "name": "ModifierInvocation",
+ "src": "2916:43:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "i",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 690,
+ "name": "ElementaryTypeName",
+ "src": "2979:4:0"
+ }
+ ],
+ "id": 691,
+ "name": "VariableDeclaration",
+ "src": "2979:6:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "30",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 0",
+ "value": "0"
+ },
+ "id": 692,
+ "name": "Literal",
+ "src": "2986:1:0"
+ }
+ ],
+ "id": 693,
+ "name": "VariableDeclarationStatement",
+ "src": "2979:8:0"
+ },
+ {
+ "attributes": {
+ "operator": "<",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 694,
+ "name": "Identifier",
+ "src": "2989:1:0"
+ },
+ {
+ "attributes": {
+ "member_name": "length",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] memory",
+ "value": "_owners"
+ },
+ "id": 695,
+ "name": "Identifier",
+ "src": "2991:7:0"
+ }
+ ],
+ "id": 696,
+ "name": "MemberAccess",
+ "src": "2991:14:0"
+ }
+ ],
+ "id": 697,
+ "name": "BinaryOperation",
+ "src": "2989:16:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "++",
+ "prefix": false,
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 698,
+ "name": "Identifier",
+ "src": "3007:1:0"
+ }
+ ],
+ "id": 699,
+ "name": "UnaryOperation",
+ "src": "3007:3:0"
+ }
+ ],
+ "id": 700,
+ "name": "ExpressionStatement",
+ "src": "3007:3:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "||",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(address => bool)",
+ "value": "isOwner"
+ },
+ "id": 701,
+ "name": "Identifier",
+ "src": "3030:7:0"
+ },
+ {
+ "attributes": {
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] memory",
+ "value": "_owners"
+ },
+ "id": 702,
+ "name": "Identifier",
+ "src": "3038:7:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 703,
+ "name": "Identifier",
+ "src": "3046:1:0"
+ }
+ ],
+ "id": 704,
+ "name": "IndexAccess",
+ "src": "3038:10:0"
+ }
+ ],
+ "id": 705,
+ "name": "IndexAccess",
+ "src": "3030:19:0"
+ },
+ {
+ "attributes": {
+ "operator": "==",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] memory",
+ "value": "_owners"
+ },
+ "id": 706,
+ "name": "Identifier",
+ "src": "3053:7:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 707,
+ "name": "Identifier",
+ "src": "3061:1:0"
+ }
+ ],
+ "id": 708,
+ "name": "IndexAccess",
+ "src": "3053:10:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "30",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 0",
+ "value": "0"
+ },
+ "id": 709,
+ "name": "Literal",
+ "src": "3067:1:0"
+ }
+ ],
+ "id": 710,
+ "name": "BinaryOperation",
+ "src": "3053:15:0"
+ }
+ ],
+ "id": 711,
+ "name": "BinaryOperation",
+ "src": "3030:38:0"
+ },
+ {
+ "children": [],
+ "id": 712,
+ "name": "Throw",
+ "src": "3086:5:0"
+ }
+ ],
+ "id": 713,
+ "name": "IfStatement",
+ "src": "3026:65:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(address => bool)",
+ "value": "isOwner"
+ },
+ "id": 714,
+ "name": "Identifier",
+ "src": "3105:7:0"
+ },
+ {
+ "attributes": {
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] memory",
+ "value": "_owners"
+ },
+ "id": 715,
+ "name": "Identifier",
+ "src": "3113:7:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 716,
+ "name": "Identifier",
+ "src": "3121:1:0"
+ }
+ ],
+ "id": 717,
+ "name": "IndexAccess",
+ "src": "3113:10:0"
+ }
+ ],
+ "id": 718,
+ "name": "IndexAccess",
+ "src": "3105:19:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "74727565",
+ "subdenomination": null,
+ "token": "true",
+ "type": "bool",
+ "value": "true"
+ },
+ "id": 719,
+ "name": "Literal",
+ "src": "3127:4:0"
+ }
+ ],
+ "id": 720,
+ "name": "Assignment",
+ "src": "3105:26:0"
+ }
+ ],
+ "id": 721,
+ "name": "ExpressionStatement",
+ "src": "3105:26:0"
+ }
+ ],
+ "id": 722,
+ "name": "Block",
+ "src": "3012:130:0"
+ }
+ ],
+ "id": 723,
+ "name": "ForStatement",
+ "src": "2974:168:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "address[] storage ref"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] storage ref",
+ "value": "owners"
+ },
+ "id": 724,
+ "name": "Identifier",
+ "src": "3151:6:0"
+ },
+ {
+ "attributes": {
+ "type": "address[] memory",
+ "value": "_owners"
+ },
+ "id": 725,
+ "name": "Identifier",
+ "src": "3160:7:0"
+ }
+ ],
+ "id": 726,
+ "name": "Assignment",
+ "src": "3151:16:0"
+ }
+ ],
+ "id": 727,
+ "name": "ExpressionStatement",
+ "src": "3151:16:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "required"
+ },
+ "id": 728,
+ "name": "Identifier",
+ "src": "3177:8:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "_required"
+ },
+ "id": 729,
+ "name": "Identifier",
+ "src": "3188:9:0"
+ }
+ ],
+ "id": 730,
+ "name": "Assignment",
+ "src": "3177:20:0"
+ }
+ ],
+ "id": 731,
+ "name": "ExpressionStatement",
+ "src": "3177:20:0"
+ }
+ ],
+ "id": 732,
+ "name": "Block",
+ "src": "2964:240:0"
+ }
+ ],
+ "id": 733,
+ "name": "FunctionDefinition",
+ "src": "2834:370:0"
+ },
+ {
+ "attributes": {
+ "constant": false,
+ "name": "addOwner",
+ "payable": false,
+ "visibility": "public"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "owner",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 734,
+ "name": "ElementaryTypeName",
+ "src": "3349:7:0"
+ }
+ ],
+ "id": 735,
+ "name": "VariableDeclaration",
+ "src": "3349:13:0"
+ }
+ ],
+ "id": 736,
+ "name": "ParameterList",
+ "src": "3348:15:0"
+ },
+ {
+ "children": [],
+ "id": 752,
+ "name": "ParameterList",
+ "src": "3512:0:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier ()",
+ "value": "onlyWallet"
+ },
+ "id": 737,
+ "name": "Identifier",
+ "src": "3387:10:0"
+ }
+ ],
+ "id": 738,
+ "name": "ModifierInvocation",
+ "src": "3387:10:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (address)",
+ "value": "ownerDoesNotExist"
+ },
+ "id": 739,
+ "name": "Identifier",
+ "src": "3406:17:0"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "owner"
+ },
+ "id": 740,
+ "name": "Identifier",
+ "src": "3424:5:0"
+ }
+ ],
+ "id": 741,
+ "name": "ModifierInvocation",
+ "src": "3406:24:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (address)",
+ "value": "notNull"
+ },
+ "id": 742,
+ "name": "Identifier",
+ "src": "3439:7:0"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "owner"
+ },
+ "id": 743,
+ "name": "Identifier",
+ "src": "3447:5:0"
+ }
+ ],
+ "id": 744,
+ "name": "ModifierInvocation",
+ "src": "3439:14:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (uint256,uint256)",
+ "value": "validRequirement"
+ },
+ "id": 745,
+ "name": "Identifier",
+ "src": "3462:16:0"
+ },
+ {
+ "attributes": {
+ "operator": "+",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "member_name": "length",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] storage ref",
+ "value": "owners"
+ },
+ "id": 746,
+ "name": "Identifier",
+ "src": "3479:6:0"
+ }
+ ],
+ "id": 747,
+ "name": "MemberAccess",
+ "src": "3479:13:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "31",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 1",
+ "value": "1"
+ },
+ "id": 748,
+ "name": "Literal",
+ "src": "3495:1:0"
+ }
+ ],
+ "id": 749,
+ "name": "BinaryOperation",
+ "src": "3479:17:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "required"
+ },
+ "id": 750,
+ "name": "Identifier",
+ "src": "3498:8:0"
+ }
+ ],
+ "id": 751,
+ "name": "ModifierInvocation",
+ "src": "3462:45:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(address => bool)",
+ "value": "isOwner"
+ },
+ "id": 753,
+ "name": "Identifier",
+ "src": "3522:7:0"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "owner"
+ },
+ "id": 754,
+ "name": "Identifier",
+ "src": "3530:5:0"
+ }
+ ],
+ "id": 755,
+ "name": "IndexAccess",
+ "src": "3522:14:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "74727565",
+ "subdenomination": null,
+ "token": "true",
+ "type": "bool",
+ "value": "true"
+ },
+ "id": 756,
+ "name": "Literal",
+ "src": "3539:4:0"
+ }
+ ],
+ "id": 757,
+ "name": "Assignment",
+ "src": "3522:21:0"
+ }
+ ],
+ "id": 758,
+ "name": "ExpressionStatement",
+ "src": "3522:21:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "member_name": "push",
+ "type": "function (address) returns (uint256)"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] storage ref",
+ "value": "owners"
+ },
+ "id": 759,
+ "name": "Identifier",
+ "src": "3553:6:0"
+ }
+ ],
+ "id": 761,
+ "name": "MemberAccess",
+ "src": "3553:11:0"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "owner"
+ },
+ "id": 762,
+ "name": "Identifier",
+ "src": "3565:5:0"
+ }
+ ],
+ "id": 763,
+ "name": "FunctionCall",
+ "src": "3553:18:0"
+ }
+ ],
+ "id": 764,
+ "name": "ExpressionStatement",
+ "src": "3553:18:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (address) constant",
+ "value": "OwnerAddition"
+ },
+ "id": 765,
+ "name": "Identifier",
+ "src": "3581:13:0"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "owner"
+ },
+ "id": 766,
+ "name": "Identifier",
+ "src": "3595:5:0"
+ }
+ ],
+ "id": 767,
+ "name": "FunctionCall",
+ "src": "3581:20:0"
+ }
+ ],
+ "id": 768,
+ "name": "ExpressionStatement",
+ "src": "3581:20:0"
+ }
+ ],
+ "id": 769,
+ "name": "Block",
+ "src": "3512:96:0"
+ }
+ ],
+ "id": 770,
+ "name": "FunctionDefinition",
+ "src": "3331:277:0"
+ },
+ {
+ "attributes": {
+ "constant": false,
+ "name": "removeOwner",
+ "payable": false,
+ "visibility": "public"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "owner",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 771,
+ "name": "ElementaryTypeName",
+ "src": "3752:7:0"
+ }
+ ],
+ "id": 772,
+ "name": "VariableDeclaration",
+ "src": "3752:13:0"
+ }
+ ],
+ "id": 773,
+ "name": "ParameterList",
+ "src": "3751:15:0"
+ },
+ {
+ "children": [],
+ "id": 779,
+ "name": "ParameterList",
+ "src": "3832:0:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier ()",
+ "value": "onlyWallet"
+ },
+ "id": 774,
+ "name": "Identifier",
+ "src": "3790:10:0"
+ }
+ ],
+ "id": 775,
+ "name": "ModifierInvocation",
+ "src": "3790:10:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (address)",
+ "value": "ownerExists"
+ },
+ "id": 776,
+ "name": "Identifier",
+ "src": "3809:11:0"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "owner"
+ },
+ "id": 777,
+ "name": "Identifier",
+ "src": "3821:5:0"
+ }
+ ],
+ "id": 778,
+ "name": "ModifierInvocation",
+ "src": "3809:18:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(address => bool)",
+ "value": "isOwner"
+ },
+ "id": 780,
+ "name": "Identifier",
+ "src": "3842:7:0"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "owner"
+ },
+ "id": 781,
+ "name": "Identifier",
+ "src": "3850:5:0"
+ }
+ ],
+ "id": 782,
+ "name": "IndexAccess",
+ "src": "3842:14:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "66616c7365",
+ "subdenomination": null,
+ "token": "false",
+ "type": "bool",
+ "value": "false"
+ },
+ "id": 783,
+ "name": "Literal",
+ "src": "3859:5:0"
+ }
+ ],
+ "id": 784,
+ "name": "Assignment",
+ "src": "3842:22:0"
+ }
+ ],
+ "id": 785,
+ "name": "ExpressionStatement",
+ "src": "3842:22:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "i",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 786,
+ "name": "ElementaryTypeName",
+ "src": "3879:4:0"
+ }
+ ],
+ "id": 787,
+ "name": "VariableDeclaration",
+ "src": "3879:6:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "30",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 0",
+ "value": "0"
+ },
+ "id": 788,
+ "name": "Literal",
+ "src": "3886:1:0"
+ }
+ ],
+ "id": 789,
+ "name": "VariableDeclarationStatement",
+ "src": "3879:8:0"
+ },
+ {
+ "attributes": {
+ "operator": "<",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 790,
+ "name": "Identifier",
+ "src": "3889:1:0"
+ },
+ {
+ "attributes": {
+ "operator": "-",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "member_name": "length",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] storage ref",
+ "value": "owners"
+ },
+ "id": 791,
+ "name": "Identifier",
+ "src": "3891:6:0"
+ }
+ ],
+ "id": 792,
+ "name": "MemberAccess",
+ "src": "3891:13:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "31",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 1",
+ "value": "1"
+ },
+ "id": 793,
+ "name": "Literal",
+ "src": "3907:1:0"
+ }
+ ],
+ "id": 794,
+ "name": "BinaryOperation",
+ "src": "3891:17:0"
+ }
+ ],
+ "id": 795,
+ "name": "BinaryOperation",
+ "src": "3889:19:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "++",
+ "prefix": false,
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 796,
+ "name": "Identifier",
+ "src": "3910:1:0"
+ }
+ ],
+ "id": 797,
+ "name": "UnaryOperation",
+ "src": "3910:3:0"
+ }
+ ],
+ "id": 798,
+ "name": "ExpressionStatement",
+ "src": "3910:3:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "==",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] storage ref",
+ "value": "owners"
+ },
+ "id": 799,
+ "name": "Identifier",
+ "src": "3931:6:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 800,
+ "name": "Identifier",
+ "src": "3938:1:0"
+ }
+ ],
+ "id": 801,
+ "name": "IndexAccess",
+ "src": "3931:9:0"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "owner"
+ },
+ "id": 802,
+ "name": "Identifier",
+ "src": "3944:5:0"
+ }
+ ],
+ "id": 803,
+ "name": "BinaryOperation",
+ "src": "3931:18:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] storage ref",
+ "value": "owners"
+ },
+ "id": 804,
+ "name": "Identifier",
+ "src": "3969:6:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 805,
+ "name": "Identifier",
+ "src": "3976:1:0"
+ }
+ ],
+ "id": 806,
+ "name": "IndexAccess",
+ "src": "3969:9:0"
+ },
+ {
+ "attributes": {
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] storage ref",
+ "value": "owners"
+ },
+ "id": 807,
+ "name": "Identifier",
+ "src": "3981:6:0"
+ },
+ {
+ "attributes": {
+ "operator": "-",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "member_name": "length",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] storage ref",
+ "value": "owners"
+ },
+ "id": 808,
+ "name": "Identifier",
+ "src": "3988:6:0"
+ }
+ ],
+ "id": 809,
+ "name": "MemberAccess",
+ "src": "3988:13:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "31",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 1",
+ "value": "1"
+ },
+ "id": 810,
+ "name": "Literal",
+ "src": "4004:1:0"
+ }
+ ],
+ "id": 811,
+ "name": "BinaryOperation",
+ "src": "3988:17:0"
+ }
+ ],
+ "id": 812,
+ "name": "IndexAccess",
+ "src": "3981:25:0"
+ }
+ ],
+ "id": 813,
+ "name": "Assignment",
+ "src": "3969:37:0"
+ }
+ ],
+ "id": 814,
+ "name": "ExpressionStatement",
+ "src": "3969:37:0"
+ },
+ {
+ "id": 815,
+ "name": "Break",
+ "src": "4024:5:0"
+ }
+ ],
+ "id": 816,
+ "name": "Block",
+ "src": "3951:93:0"
+ }
+ ],
+ "id": 817,
+ "name": "IfStatement",
+ "src": "3927:117:0"
+ }
+ ],
+ "id": 818,
+ "name": "ForStatement",
+ "src": "3874:170:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "-=",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "member_name": "length",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] storage ref",
+ "value": "owners"
+ },
+ "id": 819,
+ "name": "Identifier",
+ "src": "4053:6:0"
+ }
+ ],
+ "id": 821,
+ "name": "MemberAccess",
+ "src": "4053:13:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "31",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 1",
+ "value": "1"
+ },
+ "id": 822,
+ "name": "Literal",
+ "src": "4070:1:0"
+ }
+ ],
+ "id": 823,
+ "name": "Assignment",
+ "src": "4053:18:0"
+ }
+ ],
+ "id": 824,
+ "name": "ExpressionStatement",
+ "src": "4053:18:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": ">",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "required"
+ },
+ "id": 825,
+ "name": "Identifier",
+ "src": "4085:8:0"
+ },
+ {
+ "attributes": {
+ "member_name": "length",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] storage ref",
+ "value": "owners"
+ },
+ "id": 826,
+ "name": "Identifier",
+ "src": "4096:6:0"
+ }
+ ],
+ "id": 827,
+ "name": "MemberAccess",
+ "src": "4096:13:0"
+ }
+ ],
+ "id": 828,
+ "name": "BinaryOperation",
+ "src": "4085:24:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (uint256)",
+ "value": "changeRequirement"
+ },
+ "id": 829,
+ "name": "Identifier",
+ "src": "4123:17:0"
+ },
+ {
+ "attributes": {
+ "member_name": "length",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] storage ref",
+ "value": "owners"
+ },
+ "id": 830,
+ "name": "Identifier",
+ "src": "4141:6:0"
+ }
+ ],
+ "id": 831,
+ "name": "MemberAccess",
+ "src": "4141:13:0"
+ }
+ ],
+ "id": 832,
+ "name": "FunctionCall",
+ "src": "4123:32:0"
+ }
+ ],
+ "id": 833,
+ "name": "ExpressionStatement",
+ "src": "4123:32:0"
+ }
+ ],
+ "id": 834,
+ "name": "IfStatement",
+ "src": "4081:74:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (address) constant",
+ "value": "OwnerRemoval"
+ },
+ "id": 835,
+ "name": "Identifier",
+ "src": "4165:12:0"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "owner"
+ },
+ "id": 836,
+ "name": "Identifier",
+ "src": "4178:5:0"
+ }
+ ],
+ "id": 837,
+ "name": "FunctionCall",
+ "src": "4165:19:0"
+ }
+ ],
+ "id": 838,
+ "name": "ExpressionStatement",
+ "src": "4165:19:0"
+ }
+ ],
+ "id": 839,
+ "name": "Block",
+ "src": "3832:359:0"
+ }
+ ],
+ "id": 840,
+ "name": "FunctionDefinition",
+ "src": "3731:460:0"
+ },
+ {
+ "attributes": {
+ "constant": false,
+ "name": "replaceOwner",
+ "payable": false,
+ "visibility": "public"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "owner",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 841,
+ "name": "ElementaryTypeName",
+ "src": "4412:7:0"
+ }
+ ],
+ "id": 842,
+ "name": "VariableDeclaration",
+ "src": "4412:13:0"
+ },
+ {
+ "attributes": {
+ "name": "newOwner",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 843,
+ "name": "ElementaryTypeName",
+ "src": "4427:7:0"
+ }
+ ],
+ "id": 844,
+ "name": "VariableDeclaration",
+ "src": "4427:16:0"
+ }
+ ],
+ "id": 845,
+ "name": "ParameterList",
+ "src": "4411:33:0"
+ },
+ {
+ "children": [],
+ "id": 854,
+ "name": "ParameterList",
+ "src": "4546:0:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier ()",
+ "value": "onlyWallet"
+ },
+ "id": 846,
+ "name": "Identifier",
+ "src": "4468:10:0"
+ }
+ ],
+ "id": 847,
+ "name": "ModifierInvocation",
+ "src": "4468:10:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (address)",
+ "value": "ownerExists"
+ },
+ "id": 848,
+ "name": "Identifier",
+ "src": "4487:11:0"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "owner"
+ },
+ "id": 849,
+ "name": "Identifier",
+ "src": "4499:5:0"
+ }
+ ],
+ "id": 850,
+ "name": "ModifierInvocation",
+ "src": "4487:18:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (address)",
+ "value": "ownerDoesNotExist"
+ },
+ "id": 851,
+ "name": "Identifier",
+ "src": "4514:17:0"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "newOwner"
+ },
+ "id": 852,
+ "name": "Identifier",
+ "src": "4532:8:0"
+ }
+ ],
+ "id": 853,
+ "name": "ModifierInvocation",
+ "src": "4514:27:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "i",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 855,
+ "name": "ElementaryTypeName",
+ "src": "4561:4:0"
+ }
+ ],
+ "id": 856,
+ "name": "VariableDeclaration",
+ "src": "4561:6:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "30",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 0",
+ "value": "0"
+ },
+ "id": 857,
+ "name": "Literal",
+ "src": "4568:1:0"
+ }
+ ],
+ "id": 858,
+ "name": "VariableDeclarationStatement",
+ "src": "4561:8:0"
+ },
+ {
+ "attributes": {
+ "operator": "<",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 859,
+ "name": "Identifier",
+ "src": "4571:1:0"
+ },
+ {
+ "attributes": {
+ "member_name": "length",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] storage ref",
+ "value": "owners"
+ },
+ "id": 860,
+ "name": "Identifier",
+ "src": "4573:6:0"
+ }
+ ],
+ "id": 861,
+ "name": "MemberAccess",
+ "src": "4573:13:0"
+ }
+ ],
+ "id": 862,
+ "name": "BinaryOperation",
+ "src": "4571:15:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "++",
+ "prefix": false,
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 863,
+ "name": "Identifier",
+ "src": "4588:1:0"
+ }
+ ],
+ "id": 864,
+ "name": "UnaryOperation",
+ "src": "4588:3:0"
+ }
+ ],
+ "id": 865,
+ "name": "ExpressionStatement",
+ "src": "4588:3:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "==",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] storage ref",
+ "value": "owners"
+ },
+ "id": 866,
+ "name": "Identifier",
+ "src": "4609:6:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 867,
+ "name": "Identifier",
+ "src": "4616:1:0"
+ }
+ ],
+ "id": 868,
+ "name": "IndexAccess",
+ "src": "4609:9:0"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "owner"
+ },
+ "id": 869,
+ "name": "Identifier",
+ "src": "4622:5:0"
+ }
+ ],
+ "id": 870,
+ "name": "BinaryOperation",
+ "src": "4609:18:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] storage ref",
+ "value": "owners"
+ },
+ "id": 871,
+ "name": "Identifier",
+ "src": "4647:6:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 872,
+ "name": "Identifier",
+ "src": "4654:1:0"
+ }
+ ],
+ "id": 873,
+ "name": "IndexAccess",
+ "src": "4647:9:0"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "newOwner"
+ },
+ "id": 874,
+ "name": "Identifier",
+ "src": "4659:8:0"
+ }
+ ],
+ "id": 875,
+ "name": "Assignment",
+ "src": "4647:20:0"
+ }
+ ],
+ "id": 876,
+ "name": "ExpressionStatement",
+ "src": "4647:20:0"
+ },
+ {
+ "id": 877,
+ "name": "Break",
+ "src": "4685:5:0"
+ }
+ ],
+ "id": 878,
+ "name": "Block",
+ "src": "4629:76:0"
+ }
+ ],
+ "id": 879,
+ "name": "IfStatement",
+ "src": "4605:100:0"
+ }
+ ],
+ "id": 880,
+ "name": "ForStatement",
+ "src": "4556:149:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(address => bool)",
+ "value": "isOwner"
+ },
+ "id": 881,
+ "name": "Identifier",
+ "src": "4714:7:0"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "owner"
+ },
+ "id": 882,
+ "name": "Identifier",
+ "src": "4722:5:0"
+ }
+ ],
+ "id": 883,
+ "name": "IndexAccess",
+ "src": "4714:14:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "66616c7365",
+ "subdenomination": null,
+ "token": "false",
+ "type": "bool",
+ "value": "false"
+ },
+ "id": 884,
+ "name": "Literal",
+ "src": "4731:5:0"
+ }
+ ],
+ "id": 885,
+ "name": "Assignment",
+ "src": "4714:22:0"
+ }
+ ],
+ "id": 886,
+ "name": "ExpressionStatement",
+ "src": "4714:22:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(address => bool)",
+ "value": "isOwner"
+ },
+ "id": 887,
+ "name": "Identifier",
+ "src": "4746:7:0"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "newOwner"
+ },
+ "id": 888,
+ "name": "Identifier",
+ "src": "4754:8:0"
+ }
+ ],
+ "id": 889,
+ "name": "IndexAccess",
+ "src": "4746:17:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "74727565",
+ "subdenomination": null,
+ "token": "true",
+ "type": "bool",
+ "value": "true"
+ },
+ "id": 890,
+ "name": "Literal",
+ "src": "4766:4:0"
+ }
+ ],
+ "id": 891,
+ "name": "Assignment",
+ "src": "4746:24:0"
+ }
+ ],
+ "id": 892,
+ "name": "ExpressionStatement",
+ "src": "4746:24:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (address) constant",
+ "value": "OwnerRemoval"
+ },
+ "id": 893,
+ "name": "Identifier",
+ "src": "4780:12:0"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "owner"
+ },
+ "id": 894,
+ "name": "Identifier",
+ "src": "4793:5:0"
+ }
+ ],
+ "id": 895,
+ "name": "FunctionCall",
+ "src": "4780:19:0"
+ }
+ ],
+ "id": 896,
+ "name": "ExpressionStatement",
+ "src": "4780:19:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (address) constant",
+ "value": "OwnerAddition"
+ },
+ "id": 897,
+ "name": "Identifier",
+ "src": "4809:13:0"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "newOwner"
+ },
+ "id": 898,
+ "name": "Identifier",
+ "src": "4823:8:0"
+ }
+ ],
+ "id": 899,
+ "name": "FunctionCall",
+ "src": "4809:23:0"
+ }
+ ],
+ "id": 900,
+ "name": "ExpressionStatement",
+ "src": "4809:23:0"
+ }
+ ],
+ "id": 901,
+ "name": "Block",
+ "src": "4546:293:0"
+ }
+ ],
+ "id": 902,
+ "name": "FunctionDefinition",
+ "src": "4390:449:0"
+ },
+ {
+ "attributes": {
+ "constant": false,
+ "name": "changeRequirement",
+ "payable": false,
+ "visibility": "public"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "_required",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 903,
+ "name": "ElementaryTypeName",
+ "src": "5037:4:0"
+ }
+ ],
+ "id": 904,
+ "name": "VariableDeclaration",
+ "src": "5037:14:0"
+ }
+ ],
+ "id": 905,
+ "name": "ParameterList",
+ "src": "5036:16:0"
+ },
+ {
+ "children": [],
+ "id": 913,
+ "name": "ParameterList",
+ "src": "5142:0:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier ()",
+ "value": "onlyWallet"
+ },
+ "id": 906,
+ "name": "Identifier",
+ "src": "5076:10:0"
+ }
+ ],
+ "id": 907,
+ "name": "ModifierInvocation",
+ "src": "5076:10:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (uint256,uint256)",
+ "value": "validRequirement"
+ },
+ "id": 908,
+ "name": "Identifier",
+ "src": "5095:16:0"
+ },
+ {
+ "attributes": {
+ "member_name": "length",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] storage ref",
+ "value": "owners"
+ },
+ "id": 909,
+ "name": "Identifier",
+ "src": "5112:6:0"
+ }
+ ],
+ "id": 910,
+ "name": "MemberAccess",
+ "src": "5112:13:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "_required"
+ },
+ "id": 911,
+ "name": "Identifier",
+ "src": "5127:9:0"
+ }
+ ],
+ "id": 912,
+ "name": "ModifierInvocation",
+ "src": "5095:42:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "required"
+ },
+ "id": 914,
+ "name": "Identifier",
+ "src": "5152:8:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "_required"
+ },
+ "id": 915,
+ "name": "Identifier",
+ "src": "5163:9:0"
+ }
+ ],
+ "id": 916,
+ "name": "Assignment",
+ "src": "5152:20:0"
+ }
+ ],
+ "id": 917,
+ "name": "ExpressionStatement",
+ "src": "5152:20:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (uint256) constant",
+ "value": "RequirementChange"
+ },
+ "id": 918,
+ "name": "Identifier",
+ "src": "5182:17:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "_required"
+ },
+ "id": 919,
+ "name": "Identifier",
+ "src": "5200:9:0"
+ }
+ ],
+ "id": 920,
+ "name": "FunctionCall",
+ "src": "5182:28:0"
+ }
+ ],
+ "id": 921,
+ "name": "ExpressionStatement",
+ "src": "5182:28:0"
+ }
+ ],
+ "id": 922,
+ "name": "Block",
+ "src": "5142:75:0"
+ }
+ ],
+ "id": 923,
+ "name": "FunctionDefinition",
+ "src": "5010:207:0"
+ },
+ {
+ "attributes": {
+ "constant": false,
+ "name": "submitTransaction",
+ "payable": false,
+ "visibility": "public"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "destination",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 924,
+ "name": "ElementaryTypeName",
+ "src": "5503:7:0"
+ }
+ ],
+ "id": 925,
+ "name": "VariableDeclaration",
+ "src": "5503:19:0"
+ },
+ {
+ "attributes": {
+ "name": "value",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 926,
+ "name": "ElementaryTypeName",
+ "src": "5524:4:0"
+ }
+ ],
+ "id": 927,
+ "name": "VariableDeclaration",
+ "src": "5524:10:0"
+ },
+ {
+ "attributes": {
+ "name": "data",
+ "type": "bytes memory"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "bytes"
+ },
+ "id": 928,
+ "name": "ElementaryTypeName",
+ "src": "5536:5:0"
+ }
+ ],
+ "id": 929,
+ "name": "VariableDeclaration",
+ "src": "5536:10:0"
+ }
+ ],
+ "id": 930,
+ "name": "ParameterList",
+ "src": "5502:45:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "transactionId",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 931,
+ "name": "ElementaryTypeName",
+ "src": "5580:4:0"
+ }
+ ],
+ "id": 932,
+ "name": "VariableDeclaration",
+ "src": "5580:18:0"
+ }
+ ],
+ "id": 933,
+ "name": "ParameterList",
+ "src": "5579:20:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 934,
+ "name": "Identifier",
+ "src": "5614:13:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (address,uint256,bytes memory) returns (uint256)",
+ "value": "addTransaction"
+ },
+ "id": 935,
+ "name": "Identifier",
+ "src": "5630:14:0"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "destination"
+ },
+ "id": 936,
+ "name": "Identifier",
+ "src": "5645:11:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "value"
+ },
+ "id": 937,
+ "name": "Identifier",
+ "src": "5658:5:0"
+ },
+ {
+ "attributes": {
+ "type": "bytes memory",
+ "value": "data"
+ },
+ "id": 938,
+ "name": "Identifier",
+ "src": "5665:4:0"
+ }
+ ],
+ "id": 939,
+ "name": "FunctionCall",
+ "src": "5630:40:0"
+ }
+ ],
+ "id": 940,
+ "name": "Assignment",
+ "src": "5614:56:0"
+ }
+ ],
+ "id": 941,
+ "name": "ExpressionStatement",
+ "src": "5614:56:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (uint256)",
+ "value": "confirmTransaction"
+ },
+ "id": 942,
+ "name": "Identifier",
+ "src": "5680:18:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 943,
+ "name": "Identifier",
+ "src": "5699:13:0"
+ }
+ ],
+ "id": 944,
+ "name": "FunctionCall",
+ "src": "5680:33:0"
+ }
+ ],
+ "id": 945,
+ "name": "ExpressionStatement",
+ "src": "5680:33:0"
+ }
+ ],
+ "id": 946,
+ "name": "Block",
+ "src": "5604:116:0"
+ }
+ ],
+ "id": 947,
+ "name": "FunctionDefinition",
+ "src": "5476:244:0"
+ },
+ {
+ "attributes": {
+ "constant": false,
+ "name": "confirmTransaction",
+ "payable": false,
+ "visibility": "public"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "transactionId",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 948,
+ "name": "ElementaryTypeName",
+ "src": "5854:4:0"
+ }
+ ],
+ "id": 949,
+ "name": "VariableDeclaration",
+ "src": "5854:18:0"
+ }
+ ],
+ "id": 950,
+ "name": "ParameterList",
+ "src": "5853:20:0"
+ },
+ {
+ "children": [],
+ "id": 963,
+ "name": "ParameterList",
+ "src": "6014:0:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (address)",
+ "value": "ownerExists"
+ },
+ "id": 951,
+ "name": "Identifier",
+ "src": "5897:11:0"
+ },
+ {
+ "attributes": {
+ "member_name": "sender",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "msg",
+ "value": "msg"
+ },
+ "id": 952,
+ "name": "Identifier",
+ "src": "5909:3:0"
+ }
+ ],
+ "id": 953,
+ "name": "MemberAccess",
+ "src": "5909:10:0"
+ }
+ ],
+ "id": 954,
+ "name": "ModifierInvocation",
+ "src": "5897:23:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (uint256)",
+ "value": "transactionExists"
+ },
+ "id": 955,
+ "name": "Identifier",
+ "src": "5929:17:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 956,
+ "name": "Identifier",
+ "src": "5947:13:0"
+ }
+ ],
+ "id": 957,
+ "name": "ModifierInvocation",
+ "src": "5929:32:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (uint256,address)",
+ "value": "notConfirmed"
+ },
+ "id": 958,
+ "name": "Identifier",
+ "src": "5970:12:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 959,
+ "name": "Identifier",
+ "src": "5983:13:0"
+ },
+ {
+ "attributes": {
+ "member_name": "sender",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "msg",
+ "value": "msg"
+ },
+ "id": 960,
+ "name": "Identifier",
+ "src": "5998:3:0"
+ }
+ ],
+ "id": 961,
+ "name": "MemberAccess",
+ "src": "5998:10:0"
+ }
+ ],
+ "id": 962,
+ "name": "ModifierInvocation",
+ "src": "5970:39:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(address => bool)"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(uint256 => mapping(address => bool))",
+ "value": "confirmations"
+ },
+ "id": 964,
+ "name": "Identifier",
+ "src": "6024:13:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 965,
+ "name": "Identifier",
+ "src": "6038:13:0"
+ }
+ ],
+ "id": 968,
+ "name": "IndexAccess",
+ "src": "6024:28:0"
+ },
+ {
+ "attributes": {
+ "member_name": "sender",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "msg",
+ "value": "msg"
+ },
+ "id": 966,
+ "name": "Identifier",
+ "src": "6053:3:0"
+ }
+ ],
+ "id": 967,
+ "name": "MemberAccess",
+ "src": "6053:10:0"
+ }
+ ],
+ "id": 969,
+ "name": "IndexAccess",
+ "src": "6024:40:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "74727565",
+ "subdenomination": null,
+ "token": "true",
+ "type": "bool",
+ "value": "true"
+ },
+ "id": 970,
+ "name": "Literal",
+ "src": "6067:4:0"
+ }
+ ],
+ "id": 971,
+ "name": "Assignment",
+ "src": "6024:47:0"
+ }
+ ],
+ "id": 972,
+ "name": "ExpressionStatement",
+ "src": "6024:47:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (address,uint256) constant",
+ "value": "Confirmation"
+ },
+ "id": 973,
+ "name": "Identifier",
+ "src": "6081:12:0"
+ },
+ {
+ "attributes": {
+ "member_name": "sender",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "msg",
+ "value": "msg"
+ },
+ "id": 974,
+ "name": "Identifier",
+ "src": "6094:3:0"
+ }
+ ],
+ "id": 975,
+ "name": "MemberAccess",
+ "src": "6094:10:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 976,
+ "name": "Identifier",
+ "src": "6106:13:0"
+ }
+ ],
+ "id": 977,
+ "name": "FunctionCall",
+ "src": "6081:39:0"
+ }
+ ],
+ "id": 978,
+ "name": "ExpressionStatement",
+ "src": "6081:39:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (uint256)",
+ "value": "executeTransaction"
+ },
+ "id": 979,
+ "name": "Identifier",
+ "src": "6130:18:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 980,
+ "name": "Identifier",
+ "src": "6149:13:0"
+ }
+ ],
+ "id": 981,
+ "name": "FunctionCall",
+ "src": "6130:33:0"
+ }
+ ],
+ "id": 982,
+ "name": "ExpressionStatement",
+ "src": "6130:33:0"
+ }
+ ],
+ "id": 983,
+ "name": "Block",
+ "src": "6014:156:0"
+ }
+ ],
+ "id": 984,
+ "name": "FunctionDefinition",
+ "src": "5826:344:0"
+ },
+ {
+ "attributes": {
+ "constant": false,
+ "name": "revokeConfirmation",
+ "payable": false,
+ "visibility": "public"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "transactionId",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 985,
+ "name": "ElementaryTypeName",
+ "src": "6322:4:0"
+ }
+ ],
+ "id": 986,
+ "name": "VariableDeclaration",
+ "src": "6322:18:0"
+ }
+ ],
+ "id": 987,
+ "name": "ParameterList",
+ "src": "6321:20:0"
+ },
+ {
+ "children": [],
+ "id": 1000,
+ "name": "ParameterList",
+ "src": "6473:0:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (address)",
+ "value": "ownerExists"
+ },
+ "id": 988,
+ "name": "Identifier",
+ "src": "6365:11:0"
+ },
+ {
+ "attributes": {
+ "member_name": "sender",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "msg",
+ "value": "msg"
+ },
+ "id": 989,
+ "name": "Identifier",
+ "src": "6377:3:0"
+ }
+ ],
+ "id": 990,
+ "name": "MemberAccess",
+ "src": "6377:10:0"
+ }
+ ],
+ "id": 991,
+ "name": "ModifierInvocation",
+ "src": "6365:23:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (uint256,address)",
+ "value": "confirmed"
+ },
+ "id": 992,
+ "name": "Identifier",
+ "src": "6397:9:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 993,
+ "name": "Identifier",
+ "src": "6407:13:0"
+ },
+ {
+ "attributes": {
+ "member_name": "sender",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "msg",
+ "value": "msg"
+ },
+ "id": 994,
+ "name": "Identifier",
+ "src": "6422:3:0"
+ }
+ ],
+ "id": 995,
+ "name": "MemberAccess",
+ "src": "6422:10:0"
+ }
+ ],
+ "id": 996,
+ "name": "ModifierInvocation",
+ "src": "6397:36:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (uint256)",
+ "value": "notExecuted"
+ },
+ "id": 997,
+ "name": "Identifier",
+ "src": "6442:11:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 998,
+ "name": "Identifier",
+ "src": "6454:13:0"
+ }
+ ],
+ "id": 999,
+ "name": "ModifierInvocation",
+ "src": "6442:26:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(address => bool)"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(uint256 => mapping(address => bool))",
+ "value": "confirmations"
+ },
+ "id": 1001,
+ "name": "Identifier",
+ "src": "6483:13:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 1002,
+ "name": "Identifier",
+ "src": "6497:13:0"
+ }
+ ],
+ "id": 1005,
+ "name": "IndexAccess",
+ "src": "6483:28:0"
+ },
+ {
+ "attributes": {
+ "member_name": "sender",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "msg",
+ "value": "msg"
+ },
+ "id": 1003,
+ "name": "Identifier",
+ "src": "6512:3:0"
+ }
+ ],
+ "id": 1004,
+ "name": "MemberAccess",
+ "src": "6512:10:0"
+ }
+ ],
+ "id": 1006,
+ "name": "IndexAccess",
+ "src": "6483:40:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "66616c7365",
+ "subdenomination": null,
+ "token": "false",
+ "type": "bool",
+ "value": "false"
+ },
+ "id": 1007,
+ "name": "Literal",
+ "src": "6526:5:0"
+ }
+ ],
+ "id": 1008,
+ "name": "Assignment",
+ "src": "6483:48:0"
+ }
+ ],
+ "id": 1009,
+ "name": "ExpressionStatement",
+ "src": "6483:48:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (address,uint256) constant",
+ "value": "Revocation"
+ },
+ "id": 1010,
+ "name": "Identifier",
+ "src": "6541:10:0"
+ },
+ {
+ "attributes": {
+ "member_name": "sender",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "msg",
+ "value": "msg"
+ },
+ "id": 1011,
+ "name": "Identifier",
+ "src": "6552:3:0"
+ }
+ ],
+ "id": 1012,
+ "name": "MemberAccess",
+ "src": "6552:10:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 1013,
+ "name": "Identifier",
+ "src": "6564:13:0"
+ }
+ ],
+ "id": 1014,
+ "name": "FunctionCall",
+ "src": "6541:37:0"
+ }
+ ],
+ "id": 1015,
+ "name": "ExpressionStatement",
+ "src": "6541:37:0"
+ }
+ ],
+ "id": 1016,
+ "name": "Block",
+ "src": "6473:112:0"
+ }
+ ],
+ "id": 1017,
+ "name": "FunctionDefinition",
+ "src": "6294:291:0"
+ },
+ {
+ "attributes": {
+ "constant": false,
+ "name": "executeTransaction",
+ "payable": false,
+ "visibility": "public"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "transactionId",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 1018,
+ "name": "ElementaryTypeName",
+ "src": "6727:4:0"
+ }
+ ],
+ "id": 1019,
+ "name": "VariableDeclaration",
+ "src": "6727:18:0"
+ }
+ ],
+ "id": 1020,
+ "name": "ParameterList",
+ "src": "6726:20:0"
+ },
+ {
+ "children": [],
+ "id": 1024,
+ "name": "ParameterList",
+ "src": "6801:0:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (uint256)",
+ "value": "notExecuted"
+ },
+ "id": 1021,
+ "name": "Identifier",
+ "src": "6770:11:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 1022,
+ "name": "Identifier",
+ "src": "6782:13:0"
+ }
+ ],
+ "id": 1023,
+ "name": "ModifierInvocation",
+ "src": "6770:26:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "bool",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (uint256) constant returns (bool)",
+ "value": "isConfirmed"
+ },
+ "id": 1025,
+ "name": "Identifier",
+ "src": "6815:11:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 1026,
+ "name": "Identifier",
+ "src": "6827:13:0"
+ }
+ ],
+ "id": 1027,
+ "name": "FunctionCall",
+ "src": "6815:26:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "tx",
+ "type": "struct MultiSigWallet.Transaction storage pointer"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "Transaction"
+ },
+ "id": 1028,
+ "name": "UserDefinedTypeName",
+ "src": "6857:11:0"
+ }
+ ],
+ "id": 1029,
+ "name": "VariableDeclaration",
+ "src": "6857:14:0"
+ },
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage ref"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(uint256 => struct MultiSigWallet.Transaction storage ref)",
+ "value": "transactions"
+ },
+ "id": 1030,
+ "name": "Identifier",
+ "src": "6874:12:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 1031,
+ "name": "Identifier",
+ "src": "6887:13:0"
+ }
+ ],
+ "id": 1032,
+ "name": "IndexAccess",
+ "src": "6874:27:0"
+ }
+ ],
+ "id": 1033,
+ "name": "VariableDeclarationStatement",
+ "src": "6857:44:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "member_name": "executed",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage pointer",
+ "value": "tx"
+ },
+ "id": 1034,
+ "name": "Identifier",
+ "src": "6915:2:0"
+ }
+ ],
+ "id": 1036,
+ "name": "MemberAccess",
+ "src": "6915:11:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "74727565",
+ "subdenomination": null,
+ "token": "true",
+ "type": "bool",
+ "value": "true"
+ },
+ "id": 1037,
+ "name": "Literal",
+ "src": "6929:4:0"
+ }
+ ],
+ "id": 1038,
+ "name": "Assignment",
+ "src": "6915:18:0"
+ }
+ ],
+ "id": 1039,
+ "name": "ExpressionStatement",
+ "src": "6915:18:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "bool",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function () payable returns (bool)",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "member_name": "value",
+ "type": "function (uint256) returns (function () payable returns (bool))"
+ },
+ "children": [
+ {
+ "attributes": {
+ "member_name": "call",
+ "type": "function () payable returns (bool)"
+ },
+ "children": [
+ {
+ "attributes": {
+ "member_name": "destination",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage pointer",
+ "value": "tx"
+ },
+ "id": 1040,
+ "name": "Identifier",
+ "src": "6951:2:0"
+ }
+ ],
+ "id": 1041,
+ "name": "MemberAccess",
+ "src": "6951:14:0"
+ }
+ ],
+ "id": 1042,
+ "name": "MemberAccess",
+ "src": "6951:19:0"
+ }
+ ],
+ "id": 1043,
+ "name": "MemberAccess",
+ "src": "6951:25:0"
+ },
+ {
+ "attributes": {
+ "member_name": "value",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage pointer",
+ "value": "tx"
+ },
+ "id": 1044,
+ "name": "Identifier",
+ "src": "6977:2:0"
+ }
+ ],
+ "id": 1045,
+ "name": "MemberAccess",
+ "src": "6977:8:0"
+ }
+ ],
+ "id": 1046,
+ "name": "FunctionCall",
+ "src": "6951:35:0"
+ },
+ {
+ "attributes": {
+ "member_name": "data",
+ "type": "bytes storage ref"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage pointer",
+ "value": "tx"
+ },
+ "id": 1047,
+ "name": "Identifier",
+ "src": "6987:2:0"
+ }
+ ],
+ "id": 1048,
+ "name": "MemberAccess",
+ "src": "6987:7:0"
+ }
+ ],
+ "id": 1049,
+ "name": "FunctionCall",
+ "src": "6951:44:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (uint256) constant",
+ "value": "Execution"
+ },
+ "id": 1050,
+ "name": "Identifier",
+ "src": "7013:9:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 1051,
+ "name": "Identifier",
+ "src": "7023:13:0"
+ }
+ ],
+ "id": 1052,
+ "name": "FunctionCall",
+ "src": "7013:24:0"
+ }
+ ],
+ "id": 1053,
+ "name": "ExpressionStatement",
+ "src": "7013:24:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (uint256) constant",
+ "value": "ExecutionFailure"
+ },
+ "id": 1054,
+ "name": "Identifier",
+ "src": "7074:16:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 1055,
+ "name": "Identifier",
+ "src": "7091:13:0"
+ }
+ ],
+ "id": 1056,
+ "name": "FunctionCall",
+ "src": "7074:31:0"
+ }
+ ],
+ "id": 1057,
+ "name": "ExpressionStatement",
+ "src": "7074:31:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "member_name": "executed",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage pointer",
+ "value": "tx"
+ },
+ "id": 1058,
+ "name": "Identifier",
+ "src": "7123:2:0"
+ }
+ ],
+ "id": 1060,
+ "name": "MemberAccess",
+ "src": "7123:11:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "66616c7365",
+ "subdenomination": null,
+ "token": "false",
+ "type": "bool",
+ "value": "false"
+ },
+ "id": 1061,
+ "name": "Literal",
+ "src": "7137:5:0"
+ }
+ ],
+ "id": 1062,
+ "name": "Assignment",
+ "src": "7123:19:0"
+ }
+ ],
+ "id": 1063,
+ "name": "ExpressionStatement",
+ "src": "7123:19:0"
+ }
+ ],
+ "id": 1064,
+ "name": "Block",
+ "src": "7056:101:0"
+ }
+ ],
+ "id": 1065,
+ "name": "IfStatement",
+ "src": "6947:210:0"
+ }
+ ],
+ "id": 1066,
+ "name": "Block",
+ "src": "6843:324:0"
+ }
+ ],
+ "id": 1067,
+ "name": "IfStatement",
+ "src": "6811:356:0"
+ }
+ ],
+ "id": 1068,
+ "name": "Block",
+ "src": "6801:372:0"
+ }
+ ],
+ "id": 1069,
+ "name": "FunctionDefinition",
+ "src": "6699:474:0"
+ },
+ {
+ "attributes": {
+ "constant": true,
+ "name": "isConfirmed",
+ "payable": false,
+ "visibility": "public"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "transactionId",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 1070,
+ "name": "ElementaryTypeName",
+ "src": "7345:4:0"
+ }
+ ],
+ "id": 1071,
+ "name": "VariableDeclaration",
+ "src": "7345:18:0"
+ }
+ ],
+ "id": 1072,
+ "name": "ParameterList",
+ "src": "7344:20:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "bool"
+ },
+ "id": 1073,
+ "name": "ElementaryTypeName",
+ "src": "7414:4:0"
+ }
+ ],
+ "id": 1074,
+ "name": "VariableDeclaration",
+ "src": "7414:4:0"
+ }
+ ],
+ "id": 1075,
+ "name": "ParameterList",
+ "src": "7413:6:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "count",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 1076,
+ "name": "ElementaryTypeName",
+ "src": "7434:4:0"
+ }
+ ],
+ "id": 1077,
+ "name": "VariableDeclaration",
+ "src": "7434:10:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "30",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 0",
+ "value": "0"
+ },
+ "id": 1078,
+ "name": "Literal",
+ "src": "7447:1:0"
+ }
+ ],
+ "id": 1079,
+ "name": "VariableDeclarationStatement",
+ "src": "7434:14:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "i",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 1080,
+ "name": "ElementaryTypeName",
+ "src": "7463:4:0"
+ }
+ ],
+ "id": 1081,
+ "name": "VariableDeclaration",
+ "src": "7463:6:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "30",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 0",
+ "value": "0"
+ },
+ "id": 1082,
+ "name": "Literal",
+ "src": "7470:1:0"
+ }
+ ],
+ "id": 1083,
+ "name": "VariableDeclarationStatement",
+ "src": "7463:8:0"
+ },
+ {
+ "attributes": {
+ "operator": "<",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1084,
+ "name": "Identifier",
+ "src": "7473:1:0"
+ },
+ {
+ "attributes": {
+ "member_name": "length",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] storage ref",
+ "value": "owners"
+ },
+ "id": 1085,
+ "name": "Identifier",
+ "src": "7475:6:0"
+ }
+ ],
+ "id": 1086,
+ "name": "MemberAccess",
+ "src": "7475:13:0"
+ }
+ ],
+ "id": 1087,
+ "name": "BinaryOperation",
+ "src": "7473:15:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "++",
+ "prefix": false,
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1088,
+ "name": "Identifier",
+ "src": "7490:1:0"
+ }
+ ],
+ "id": 1089,
+ "name": "UnaryOperation",
+ "src": "7490:3:0"
+ }
+ ],
+ "id": 1090,
+ "name": "ExpressionStatement",
+ "src": "7490:3:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(address => bool)"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(uint256 => mapping(address => bool))",
+ "value": "confirmations"
+ },
+ "id": 1091,
+ "name": "Identifier",
+ "src": "7513:13:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 1092,
+ "name": "Identifier",
+ "src": "7527:13:0"
+ }
+ ],
+ "id": 1093,
+ "name": "IndexAccess",
+ "src": "7513:28:0"
+ },
+ {
+ "attributes": {
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] storage ref",
+ "value": "owners"
+ },
+ "id": 1094,
+ "name": "Identifier",
+ "src": "7542:6:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1095,
+ "name": "Identifier",
+ "src": "7549:1:0"
+ }
+ ],
+ "id": 1096,
+ "name": "IndexAccess",
+ "src": "7542:9:0"
+ }
+ ],
+ "id": 1097,
+ "name": "IndexAccess",
+ "src": "7513:39:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "+=",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "count"
+ },
+ "id": 1098,
+ "name": "Identifier",
+ "src": "7570:5:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "31",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 1",
+ "value": "1"
+ },
+ "id": 1099,
+ "name": "Literal",
+ "src": "7579:1:0"
+ }
+ ],
+ "id": 1100,
+ "name": "Assignment",
+ "src": "7570:10:0"
+ }
+ ],
+ "id": 1101,
+ "name": "ExpressionStatement",
+ "src": "7570:10:0"
+ }
+ ],
+ "id": 1102,
+ "name": "IfStatement",
+ "src": "7509:71:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "==",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "count"
+ },
+ "id": 1103,
+ "name": "Identifier",
+ "src": "7598:5:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "required"
+ },
+ "id": 1104,
+ "name": "Identifier",
+ "src": "7607:8:0"
+ }
+ ],
+ "id": 1105,
+ "name": "BinaryOperation",
+ "src": "7598:17:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "hexvalue": "74727565",
+ "subdenomination": null,
+ "token": "true",
+ "type": "bool",
+ "value": "true"
+ },
+ "id": 1106,
+ "name": "Literal",
+ "src": "7640:4:0"
+ }
+ ],
+ "id": 1107,
+ "name": "Return",
+ "src": "7633:11:0"
+ }
+ ],
+ "id": 1108,
+ "name": "IfStatement",
+ "src": "7594:50:0"
+ }
+ ],
+ "id": 1109,
+ "name": "Block",
+ "src": "7495:160:0"
+ }
+ ],
+ "id": 1110,
+ "name": "ForStatement",
+ "src": "7458:197:0"
+ }
+ ],
+ "id": 1111,
+ "name": "Block",
+ "src": "7424:237:0"
+ }
+ ],
+ "id": 1112,
+ "name": "FunctionDefinition",
+ "src": "7324:337:0"
+ },
+ {
+ "attributes": {
+ "constant": false,
+ "name": "addTransaction",
+ "payable": false,
+ "visibility": "internal"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "destination",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 1113,
+ "name": "ElementaryTypeName",
+ "src": "8018:7:0"
+ }
+ ],
+ "id": 1114,
+ "name": "VariableDeclaration",
+ "src": "8018:19:0"
+ },
+ {
+ "attributes": {
+ "name": "value",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 1115,
+ "name": "ElementaryTypeName",
+ "src": "8039:4:0"
+ }
+ ],
+ "id": 1116,
+ "name": "VariableDeclaration",
+ "src": "8039:10:0"
+ },
+ {
+ "attributes": {
+ "name": "data",
+ "type": "bytes memory"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "bytes"
+ },
+ "id": 1117,
+ "name": "ElementaryTypeName",
+ "src": "8051:5:0"
+ }
+ ],
+ "id": 1118,
+ "name": "VariableDeclaration",
+ "src": "8051:10:0"
+ }
+ ],
+ "id": 1119,
+ "name": "ParameterList",
+ "src": "8017:45:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "transactionId",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 1123,
+ "name": "ElementaryTypeName",
+ "src": "8126:4:0"
+ }
+ ],
+ "id": 1124,
+ "name": "VariableDeclaration",
+ "src": "8126:18:0"
+ }
+ ],
+ "id": 1125,
+ "name": "ParameterList",
+ "src": "8125:20:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (address)",
+ "value": "notNull"
+ },
+ "id": 1120,
+ "name": "Identifier",
+ "src": "8088:7:0"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "destination"
+ },
+ "id": 1121,
+ "name": "Identifier",
+ "src": "8096:11:0"
+ }
+ ],
+ "id": 1122,
+ "name": "ModifierInvocation",
+ "src": "8088:20:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 1126,
+ "name": "Identifier",
+ "src": "8160:13:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionCount"
+ },
+ "id": 1127,
+ "name": "Identifier",
+ "src": "8176:16:0"
+ }
+ ],
+ "id": 1128,
+ "name": "Assignment",
+ "src": "8160:32:0"
+ }
+ ],
+ "id": 1129,
+ "name": "ExpressionStatement",
+ "src": "8160:32:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "struct MultiSigWallet.Transaction storage ref"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage ref"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(uint256 => struct MultiSigWallet.Transaction storage ref)",
+ "value": "transactions"
+ },
+ "id": 1130,
+ "name": "Identifier",
+ "src": "8202:12:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 1131,
+ "name": "Identifier",
+ "src": "8215:13:0"
+ }
+ ],
+ "id": 1132,
+ "name": "IndexAccess",
+ "src": "8202:27:0"
+ },
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction memory",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "type(struct MultiSigWallet.Transaction storage pointer)",
+ "value": "Transaction"
+ },
+ "id": 1133,
+ "name": "Identifier",
+ "src": "8232:11:0"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "destination"
+ },
+ "id": 1134,
+ "name": "Identifier",
+ "src": "8271:11:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "value"
+ },
+ "id": 1135,
+ "name": "Identifier",
+ "src": "8303:5:0"
+ },
+ {
+ "attributes": {
+ "type": "bytes memory",
+ "value": "data"
+ },
+ "id": 1136,
+ "name": "Identifier",
+ "src": "8328:4:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "66616c7365",
+ "subdenomination": null,
+ "token": "false",
+ "type": "bool",
+ "value": "false"
+ },
+ "id": 1137,
+ "name": "Literal",
+ "src": "8356:5:0"
+ }
+ ],
+ "id": 1138,
+ "name": "FunctionCall",
+ "src": "8232:140:0"
+ }
+ ],
+ "id": 1139,
+ "name": "Assignment",
+ "src": "8202:170:0"
+ }
+ ],
+ "id": 1140,
+ "name": "ExpressionStatement",
+ "src": "8202:170:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "+=",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionCount"
+ },
+ "id": 1141,
+ "name": "Identifier",
+ "src": "8382:16:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "31",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 1",
+ "value": "1"
+ },
+ "id": 1142,
+ "name": "Literal",
+ "src": "8402:1:0"
+ }
+ ],
+ "id": 1143,
+ "name": "Assignment",
+ "src": "8382:21:0"
+ }
+ ],
+ "id": 1144,
+ "name": "ExpressionStatement",
+ "src": "8382:21:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (uint256) constant",
+ "value": "Submission"
+ },
+ "id": 1145,
+ "name": "Identifier",
+ "src": "8413:10:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 1146,
+ "name": "Identifier",
+ "src": "8424:13:0"
+ }
+ ],
+ "id": 1147,
+ "name": "FunctionCall",
+ "src": "8413:25:0"
+ }
+ ],
+ "id": 1148,
+ "name": "ExpressionStatement",
+ "src": "8413:25:0"
+ }
+ ],
+ "id": 1149,
+ "name": "Block",
+ "src": "8150:295:0"
+ }
+ ],
+ "id": 1150,
+ "name": "FunctionDefinition",
+ "src": "7994:451:0"
+ },
+ {
+ "attributes": {
+ "constant": true,
+ "name": "getConfirmationCount",
+ "payable": false,
+ "visibility": "public"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "transactionId",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 1151,
+ "name": "ElementaryTypeName",
+ "src": "8672:4:0"
+ }
+ ],
+ "id": 1152,
+ "name": "VariableDeclaration",
+ "src": "8672:18:0"
+ }
+ ],
+ "id": 1153,
+ "name": "ParameterList",
+ "src": "8671:20:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "count",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 1154,
+ "name": "ElementaryTypeName",
+ "src": "8741:4:0"
+ }
+ ],
+ "id": 1155,
+ "name": "VariableDeclaration",
+ "src": "8741:10:0"
+ }
+ ],
+ "id": 1156,
+ "name": "ParameterList",
+ "src": "8740:12:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "i",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 1157,
+ "name": "ElementaryTypeName",
+ "src": "8772:4:0"
+ }
+ ],
+ "id": 1158,
+ "name": "VariableDeclaration",
+ "src": "8772:6:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "30",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 0",
+ "value": "0"
+ },
+ "id": 1159,
+ "name": "Literal",
+ "src": "8779:1:0"
+ }
+ ],
+ "id": 1160,
+ "name": "VariableDeclarationStatement",
+ "src": "8772:8:0"
+ },
+ {
+ "attributes": {
+ "operator": "<",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1161,
+ "name": "Identifier",
+ "src": "8782:1:0"
+ },
+ {
+ "attributes": {
+ "member_name": "length",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] storage ref",
+ "value": "owners"
+ },
+ "id": 1162,
+ "name": "Identifier",
+ "src": "8784:6:0"
+ }
+ ],
+ "id": 1163,
+ "name": "MemberAccess",
+ "src": "8784:13:0"
+ }
+ ],
+ "id": 1164,
+ "name": "BinaryOperation",
+ "src": "8782:15:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "++",
+ "prefix": false,
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1165,
+ "name": "Identifier",
+ "src": "8799:1:0"
+ }
+ ],
+ "id": 1166,
+ "name": "UnaryOperation",
+ "src": "8799:3:0"
+ }
+ ],
+ "id": 1167,
+ "name": "ExpressionStatement",
+ "src": "8799:3:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(address => bool)"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(uint256 => mapping(address => bool))",
+ "value": "confirmations"
+ },
+ "id": 1168,
+ "name": "Identifier",
+ "src": "8820:13:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 1169,
+ "name": "Identifier",
+ "src": "8834:13:0"
+ }
+ ],
+ "id": 1170,
+ "name": "IndexAccess",
+ "src": "8820:28:0"
+ },
+ {
+ "attributes": {
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] storage ref",
+ "value": "owners"
+ },
+ "id": 1171,
+ "name": "Identifier",
+ "src": "8849:6:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1172,
+ "name": "Identifier",
+ "src": "8856:1:0"
+ }
+ ],
+ "id": 1173,
+ "name": "IndexAccess",
+ "src": "8849:9:0"
+ }
+ ],
+ "id": 1174,
+ "name": "IndexAccess",
+ "src": "8820:39:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "+=",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "count"
+ },
+ "id": 1175,
+ "name": "Identifier",
+ "src": "8877:5:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "31",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 1",
+ "value": "1"
+ },
+ "id": 1176,
+ "name": "Literal",
+ "src": "8886:1:0"
+ }
+ ],
+ "id": 1177,
+ "name": "Assignment",
+ "src": "8877:10:0"
+ }
+ ],
+ "id": 1178,
+ "name": "ExpressionStatement",
+ "src": "8877:10:0"
+ }
+ ],
+ "id": 1179,
+ "name": "IfStatement",
+ "src": "8816:71:0"
+ }
+ ],
+ "id": 1180,
+ "name": "ForStatement",
+ "src": "8767:120:0"
+ }
+ ],
+ "id": 1181,
+ "name": "Block",
+ "src": "8757:137:0"
+ }
+ ],
+ "id": 1182,
+ "name": "FunctionDefinition",
+ "src": "8642:252:0"
+ },
+ {
+ "attributes": {
+ "constant": true,
+ "name": "getTransactionCount",
+ "payable": false,
+ "visibility": "public"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "pending",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "bool"
+ },
+ "id": 1183,
+ "name": "ElementaryTypeName",
+ "src": "9185:4:0"
+ }
+ ],
+ "id": 1184,
+ "name": "VariableDeclaration",
+ "src": "9185:12:0"
+ },
+ {
+ "attributes": {
+ "name": "executed",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "bool"
+ },
+ "id": 1185,
+ "name": "ElementaryTypeName",
+ "src": "9199:4:0"
+ }
+ ],
+ "id": 1186,
+ "name": "VariableDeclaration",
+ "src": "9199:13:0"
+ }
+ ],
+ "id": 1187,
+ "name": "ParameterList",
+ "src": "9184:29:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "count",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 1188,
+ "name": "ElementaryTypeName",
+ "src": "9263:4:0"
+ }
+ ],
+ "id": 1189,
+ "name": "VariableDeclaration",
+ "src": "9263:10:0"
+ }
+ ],
+ "id": 1190,
+ "name": "ParameterList",
+ "src": "9262:12:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "i",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 1191,
+ "name": "ElementaryTypeName",
+ "src": "9294:4:0"
+ }
+ ],
+ "id": 1192,
+ "name": "VariableDeclaration",
+ "src": "9294:6:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "30",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 0",
+ "value": "0"
+ },
+ "id": 1193,
+ "name": "Literal",
+ "src": "9301:1:0"
+ }
+ ],
+ "id": 1194,
+ "name": "VariableDeclarationStatement",
+ "src": "9294:8:0"
+ },
+ {
+ "attributes": {
+ "operator": "<",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1195,
+ "name": "Identifier",
+ "src": "9304:1:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionCount"
+ },
+ "id": 1196,
+ "name": "Identifier",
+ "src": "9306:16:0"
+ }
+ ],
+ "id": 1197,
+ "name": "BinaryOperation",
+ "src": "9304:18:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "++",
+ "prefix": false,
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1198,
+ "name": "Identifier",
+ "src": "9324:1:0"
+ }
+ ],
+ "id": 1199,
+ "name": "UnaryOperation",
+ "src": "9324:3:0"
+ }
+ ],
+ "id": 1200,
+ "name": "ExpressionStatement",
+ "src": "9324:3:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "||",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "operator": "&&",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "bool",
+ "value": "pending"
+ },
+ "id": 1201,
+ "name": "Identifier",
+ "src": "9348:7:0"
+ },
+ {
+ "attributes": {
+ "operator": "!",
+ "prefix": true,
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "member_name": "executed",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage ref"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(uint256 => struct MultiSigWallet.Transaction storage ref)",
+ "value": "transactions"
+ },
+ "id": 1202,
+ "name": "Identifier",
+ "src": "9360:12:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1203,
+ "name": "Identifier",
+ "src": "9373:1:0"
+ }
+ ],
+ "id": 1204,
+ "name": "IndexAccess",
+ "src": "9360:15:0"
+ }
+ ],
+ "id": 1205,
+ "name": "MemberAccess",
+ "src": "9360:24:0"
+ }
+ ],
+ "id": 1206,
+ "name": "UnaryOperation",
+ "src": "9359:25:0"
+ }
+ ],
+ "id": 1207,
+ "name": "BinaryOperation",
+ "src": "9348:36:0"
+ },
+ {
+ "attributes": {
+ "operator": "&&",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "bool",
+ "value": "executed"
+ },
+ "id": 1208,
+ "name": "Identifier",
+ "src": "9404:8:0"
+ },
+ {
+ "attributes": {
+ "member_name": "executed",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage ref"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(uint256 => struct MultiSigWallet.Transaction storage ref)",
+ "value": "transactions"
+ },
+ "id": 1209,
+ "name": "Identifier",
+ "src": "9416:12:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1210,
+ "name": "Identifier",
+ "src": "9429:1:0"
+ }
+ ],
+ "id": 1211,
+ "name": "IndexAccess",
+ "src": "9416:15:0"
+ }
+ ],
+ "id": 1212,
+ "name": "MemberAccess",
+ "src": "9416:24:0"
+ }
+ ],
+ "id": 1213,
+ "name": "BinaryOperation",
+ "src": "9404:36:0"
+ }
+ ],
+ "id": 1214,
+ "name": "BinaryOperation",
+ "src": "9348:92:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "+=",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "count"
+ },
+ "id": 1215,
+ "name": "Identifier",
+ "src": "9458:5:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "31",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 1",
+ "value": "1"
+ },
+ "id": 1216,
+ "name": "Literal",
+ "src": "9467:1:0"
+ }
+ ],
+ "id": 1217,
+ "name": "Assignment",
+ "src": "9458:10:0"
+ }
+ ],
+ "id": 1218,
+ "name": "ExpressionStatement",
+ "src": "9458:10:0"
+ }
+ ],
+ "id": 1219,
+ "name": "IfStatement",
+ "src": "9341:127:0"
+ }
+ ],
+ "id": 1220,
+ "name": "ForStatement",
+ "src": "9289:179:0"
+ }
+ ],
+ "id": 1221,
+ "name": "Block",
+ "src": "9279:196:0"
+ }
+ ],
+ "id": 1222,
+ "name": "FunctionDefinition",
+ "src": "9156:319:0"
+ },
+ {
+ "attributes": {
+ "constant": true,
+ "name": "getOwners",
+ "payable": false,
+ "visibility": "public"
+ },
+ "children": [
+ {
+ "children": [],
+ "id": 1223,
+ "name": "ParameterList",
+ "src": "9577:2:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "",
+ "type": "address[] memory"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 1224,
+ "name": "ElementaryTypeName",
+ "src": "9629:7:0"
+ }
+ ],
+ "id": 1225,
+ "name": "ArrayTypeName",
+ "src": "9629:9:0"
+ }
+ ],
+ "id": 1226,
+ "name": "VariableDeclaration",
+ "src": "9629:9:0"
+ }
+ ],
+ "id": 1227,
+ "name": "ParameterList",
+ "src": "9628:11:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] storage ref",
+ "value": "owners"
+ },
+ "id": 1228,
+ "name": "Identifier",
+ "src": "9661:6:0"
+ }
+ ],
+ "id": 1229,
+ "name": "Return",
+ "src": "9654:13:0"
+ }
+ ],
+ "id": 1230,
+ "name": "Block",
+ "src": "9644:30:0"
+ }
+ ],
+ "id": 1231,
+ "name": "FunctionDefinition",
+ "src": "9559:115:0"
+ },
+ {
+ "attributes": {
+ "constant": true,
+ "name": "getConfirmations",
+ "payable": false,
+ "visibility": "public"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "transactionId",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 1232,
+ "name": "ElementaryTypeName",
+ "src": "9879:4:0"
+ }
+ ],
+ "id": 1233,
+ "name": "VariableDeclaration",
+ "src": "9879:18:0"
+ }
+ ],
+ "id": 1234,
+ "name": "ParameterList",
+ "src": "9878:20:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "_confirmations",
+ "type": "address[] memory"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 1235,
+ "name": "ElementaryTypeName",
+ "src": "9948:7:0"
+ }
+ ],
+ "id": 1236,
+ "name": "ArrayTypeName",
+ "src": "9948:9:0"
+ }
+ ],
+ "id": 1237,
+ "name": "VariableDeclaration",
+ "src": "9948:24:0"
+ }
+ ],
+ "id": 1238,
+ "name": "ParameterList",
+ "src": "9947:26:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "confirmationsTemp",
+ "type": "address[] memory"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 1240,
+ "name": "ElementaryTypeName",
+ "src": "9988:7:0"
+ }
+ ],
+ "id": 1241,
+ "name": "ArrayTypeName",
+ "src": "9988:9:0"
+ }
+ ],
+ "id": 1242,
+ "name": "VariableDeclaration",
+ "src": "9988:34:0"
+ },
+ {
+ "attributes": {
+ "type": "address[] memory",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (uint256) returns (address[] memory)"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 1243,
+ "name": "ElementaryTypeName",
+ "src": "10029:7:0"
+ }
+ ],
+ "id": 1244,
+ "name": "ArrayTypeName",
+ "src": "10029:9:0"
+ }
+ ],
+ "id": 1245,
+ "name": "NewExpression",
+ "src": "10025:13:0"
+ },
+ {
+ "attributes": {
+ "member_name": "length",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] storage ref",
+ "value": "owners"
+ },
+ "id": 1246,
+ "name": "Identifier",
+ "src": "10039:6:0"
+ }
+ ],
+ "id": 1247,
+ "name": "MemberAccess",
+ "src": "10039:13:0"
+ }
+ ],
+ "id": 1248,
+ "name": "FunctionCall",
+ "src": "10025:28:0"
+ }
+ ],
+ "id": 1249,
+ "name": "VariableDeclarationStatement",
+ "src": "9988:65:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "count",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 1250,
+ "name": "ElementaryTypeName",
+ "src": "10063:4:0"
+ }
+ ],
+ "id": 1251,
+ "name": "VariableDeclaration",
+ "src": "10063:10:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "30",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 0",
+ "value": "0"
+ },
+ "id": 1252,
+ "name": "Literal",
+ "src": "10076:1:0"
+ }
+ ],
+ "id": 1253,
+ "name": "VariableDeclarationStatement",
+ "src": "10063:14:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "i",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 1254,
+ "name": "ElementaryTypeName",
+ "src": "10087:4:0"
+ }
+ ],
+ "id": 1255,
+ "name": "VariableDeclaration",
+ "src": "10087:6:0"
+ }
+ ],
+ "id": 1256,
+ "name": "VariableDeclarationStatement",
+ "src": "10087:7:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1257,
+ "name": "Identifier",
+ "src": "10108:1:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "30",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 0",
+ "value": "0"
+ },
+ "id": 1258,
+ "name": "Literal",
+ "src": "10110:1:0"
+ }
+ ],
+ "id": 1259,
+ "name": "Assignment",
+ "src": "10108:3:0"
+ }
+ ],
+ "id": 1260,
+ "name": "ExpressionStatement",
+ "src": "10108:3:0"
+ },
+ {
+ "attributes": {
+ "operator": "<",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1261,
+ "name": "Identifier",
+ "src": "10113:1:0"
+ },
+ {
+ "attributes": {
+ "member_name": "length",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] storage ref",
+ "value": "owners"
+ },
+ "id": 1262,
+ "name": "Identifier",
+ "src": "10115:6:0"
+ }
+ ],
+ "id": 1263,
+ "name": "MemberAccess",
+ "src": "10115:13:0"
+ }
+ ],
+ "id": 1264,
+ "name": "BinaryOperation",
+ "src": "10113:15:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "++",
+ "prefix": false,
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1265,
+ "name": "Identifier",
+ "src": "10130:1:0"
+ }
+ ],
+ "id": 1266,
+ "name": "UnaryOperation",
+ "src": "10130:3:0"
+ }
+ ],
+ "id": 1267,
+ "name": "ExpressionStatement",
+ "src": "10130:3:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(address => bool)"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(uint256 => mapping(address => bool))",
+ "value": "confirmations"
+ },
+ "id": 1268,
+ "name": "Identifier",
+ "src": "10151:13:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 1269,
+ "name": "Identifier",
+ "src": "10165:13:0"
+ }
+ ],
+ "id": 1270,
+ "name": "IndexAccess",
+ "src": "10151:28:0"
+ },
+ {
+ "attributes": {
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] storage ref",
+ "value": "owners"
+ },
+ "id": 1271,
+ "name": "Identifier",
+ "src": "10180:6:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1272,
+ "name": "Identifier",
+ "src": "10187:1:0"
+ }
+ ],
+ "id": 1273,
+ "name": "IndexAccess",
+ "src": "10180:9:0"
+ }
+ ],
+ "id": 1274,
+ "name": "IndexAccess",
+ "src": "10151:39:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] memory",
+ "value": "confirmationsTemp"
+ },
+ "id": 1275,
+ "name": "Identifier",
+ "src": "10210:17:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "count"
+ },
+ "id": 1276,
+ "name": "Identifier",
+ "src": "10228:5:0"
+ }
+ ],
+ "id": 1277,
+ "name": "IndexAccess",
+ "src": "10210:24:0"
+ },
+ {
+ "attributes": {
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] storage ref",
+ "value": "owners"
+ },
+ "id": 1278,
+ "name": "Identifier",
+ "src": "10237:6:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1279,
+ "name": "Identifier",
+ "src": "10244:1:0"
+ }
+ ],
+ "id": 1280,
+ "name": "IndexAccess",
+ "src": "10237:9:0"
+ }
+ ],
+ "id": 1281,
+ "name": "Assignment",
+ "src": "10210:36:0"
+ }
+ ],
+ "id": 1282,
+ "name": "ExpressionStatement",
+ "src": "10210:36:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "+=",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "count"
+ },
+ "id": 1283,
+ "name": "Identifier",
+ "src": "10264:5:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "31",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 1",
+ "value": "1"
+ },
+ "id": 1284,
+ "name": "Literal",
+ "src": "10273:1:0"
+ }
+ ],
+ "id": 1285,
+ "name": "Assignment",
+ "src": "10264:10:0"
+ }
+ ],
+ "id": 1286,
+ "name": "ExpressionStatement",
+ "src": "10264:10:0"
+ }
+ ],
+ "id": 1287,
+ "name": "Block",
+ "src": "10192:97:0"
+ }
+ ],
+ "id": 1288,
+ "name": "IfStatement",
+ "src": "10147:142:0"
+ }
+ ],
+ "id": 1289,
+ "name": "ForStatement",
+ "src": "10103:186:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "address[] memory"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] memory",
+ "value": "_confirmations"
+ },
+ "id": 1290,
+ "name": "Identifier",
+ "src": "10298:14:0"
+ },
+ {
+ "attributes": {
+ "type": "address[] memory",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (uint256) returns (address[] memory)"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 1291,
+ "name": "ElementaryTypeName",
+ "src": "10319:7:0"
+ }
+ ],
+ "id": 1292,
+ "name": "ArrayTypeName",
+ "src": "10319:9:0"
+ }
+ ],
+ "id": 1293,
+ "name": "NewExpression",
+ "src": "10315:13:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "count"
+ },
+ "id": 1294,
+ "name": "Identifier",
+ "src": "10329:5:0"
+ }
+ ],
+ "id": 1295,
+ "name": "FunctionCall",
+ "src": "10315:20:0"
+ }
+ ],
+ "id": 1296,
+ "name": "Assignment",
+ "src": "10298:37:0"
+ }
+ ],
+ "id": 1297,
+ "name": "ExpressionStatement",
+ "src": "10298:37:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1298,
+ "name": "Identifier",
+ "src": "10350:1:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "30",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 0",
+ "value": "0"
+ },
+ "id": 1299,
+ "name": "Literal",
+ "src": "10352:1:0"
+ }
+ ],
+ "id": 1300,
+ "name": "Assignment",
+ "src": "10350:3:0"
+ }
+ ],
+ "id": 1301,
+ "name": "ExpressionStatement",
+ "src": "10350:3:0"
+ },
+ {
+ "attributes": {
+ "operator": "<",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1302,
+ "name": "Identifier",
+ "src": "10355:1:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "count"
+ },
+ "id": 1303,
+ "name": "Identifier",
+ "src": "10357:5:0"
+ }
+ ],
+ "id": 1304,
+ "name": "BinaryOperation",
+ "src": "10355:7:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "++",
+ "prefix": false,
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1305,
+ "name": "Identifier",
+ "src": "10364:1:0"
+ }
+ ],
+ "id": 1306,
+ "name": "UnaryOperation",
+ "src": "10364:3:0"
+ }
+ ],
+ "id": 1307,
+ "name": "ExpressionStatement",
+ "src": "10364:3:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] memory",
+ "value": "_confirmations"
+ },
+ "id": 1308,
+ "name": "Identifier",
+ "src": "10381:14:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1309,
+ "name": "Identifier",
+ "src": "10396:1:0"
+ }
+ ],
+ "id": 1310,
+ "name": "IndexAccess",
+ "src": "10381:17:0"
+ },
+ {
+ "attributes": {
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] memory",
+ "value": "confirmationsTemp"
+ },
+ "id": 1311,
+ "name": "Identifier",
+ "src": "10401:17:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1312,
+ "name": "Identifier",
+ "src": "10419:1:0"
+ }
+ ],
+ "id": 1313,
+ "name": "IndexAccess",
+ "src": "10401:20:0"
+ }
+ ],
+ "id": 1314,
+ "name": "Assignment",
+ "src": "10381:40:0"
+ }
+ ],
+ "id": 1315,
+ "name": "ExpressionStatement",
+ "src": "10381:40:0"
+ }
+ ],
+ "id": 1316,
+ "name": "ForStatement",
+ "src": "10345:76:0"
+ }
+ ],
+ "id": 1317,
+ "name": "Block",
+ "src": "9978:450:0"
+ }
+ ],
+ "id": 1318,
+ "name": "FunctionDefinition",
+ "src": "9853:575:0"
+ },
+ {
+ "attributes": {
+ "constant": true,
+ "name": "getTransactionIds",
+ "payable": false,
+ "visibility": "public"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "from",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 1319,
+ "name": "ElementaryTypeName",
+ "src": "10804:4:0"
+ }
+ ],
+ "id": 1320,
+ "name": "VariableDeclaration",
+ "src": "10804:9:0"
+ },
+ {
+ "attributes": {
+ "name": "to",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 1321,
+ "name": "ElementaryTypeName",
+ "src": "10815:4:0"
+ }
+ ],
+ "id": 1322,
+ "name": "VariableDeclaration",
+ "src": "10815:7:0"
+ },
+ {
+ "attributes": {
+ "name": "pending",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "bool"
+ },
+ "id": 1323,
+ "name": "ElementaryTypeName",
+ "src": "10824:4:0"
+ }
+ ],
+ "id": 1324,
+ "name": "VariableDeclaration",
+ "src": "10824:12:0"
+ },
+ {
+ "attributes": {
+ "name": "executed",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "bool"
+ },
+ "id": 1325,
+ "name": "ElementaryTypeName",
+ "src": "10838:4:0"
+ }
+ ],
+ "id": 1326,
+ "name": "VariableDeclaration",
+ "src": "10838:13:0"
+ }
+ ],
+ "id": 1327,
+ "name": "ParameterList",
+ "src": "10803:49:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "_transactionIds",
+ "type": "uint256[] memory"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 1328,
+ "name": "ElementaryTypeName",
+ "src": "10902:4:0"
+ }
+ ],
+ "id": 1329,
+ "name": "ArrayTypeName",
+ "src": "10902:6:0"
+ }
+ ],
+ "id": 1330,
+ "name": "VariableDeclaration",
+ "src": "10902:22:0"
+ }
+ ],
+ "id": 1331,
+ "name": "ParameterList",
+ "src": "10901:24:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "transactionIdsTemp",
+ "type": "uint256[] memory"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 1333,
+ "name": "ElementaryTypeName",
+ "src": "10940:4:0"
+ }
+ ],
+ "id": 1334,
+ "name": "ArrayTypeName",
+ "src": "10940:6:0"
+ }
+ ],
+ "id": 1335,
+ "name": "VariableDeclaration",
+ "src": "10940:32:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256[] memory",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (uint256) returns (uint256[] memory)"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 1336,
+ "name": "ElementaryTypeName",
+ "src": "10979:4:0"
+ }
+ ],
+ "id": 1337,
+ "name": "ArrayTypeName",
+ "src": "10979:6:0"
+ }
+ ],
+ "id": 1338,
+ "name": "NewExpression",
+ "src": "10975:10:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionCount"
+ },
+ "id": 1339,
+ "name": "Identifier",
+ "src": "10986:16:0"
+ }
+ ],
+ "id": 1340,
+ "name": "FunctionCall",
+ "src": "10975:28:0"
+ }
+ ],
+ "id": 1341,
+ "name": "VariableDeclarationStatement",
+ "src": "10940:63:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "count",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 1342,
+ "name": "ElementaryTypeName",
+ "src": "11013:4:0"
+ }
+ ],
+ "id": 1343,
+ "name": "VariableDeclaration",
+ "src": "11013:10:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "30",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 0",
+ "value": "0"
+ },
+ "id": 1344,
+ "name": "Literal",
+ "src": "11026:1:0"
+ }
+ ],
+ "id": 1345,
+ "name": "VariableDeclarationStatement",
+ "src": "11013:14:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "i",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 1346,
+ "name": "ElementaryTypeName",
+ "src": "11037:4:0"
+ }
+ ],
+ "id": 1347,
+ "name": "VariableDeclaration",
+ "src": "11037:6:0"
+ }
+ ],
+ "id": 1348,
+ "name": "VariableDeclarationStatement",
+ "src": "11037:7:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1349,
+ "name": "Identifier",
+ "src": "11058:1:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "30",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 0",
+ "value": "0"
+ },
+ "id": 1350,
+ "name": "Literal",
+ "src": "11060:1:0"
+ }
+ ],
+ "id": 1351,
+ "name": "Assignment",
+ "src": "11058:3:0"
+ }
+ ],
+ "id": 1352,
+ "name": "ExpressionStatement",
+ "src": "11058:3:0"
+ },
+ {
+ "attributes": {
+ "operator": "<",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1353,
+ "name": "Identifier",
+ "src": "11063:1:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionCount"
+ },
+ "id": 1354,
+ "name": "Identifier",
+ "src": "11065:16:0"
+ }
+ ],
+ "id": 1355,
+ "name": "BinaryOperation",
+ "src": "11063:18:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "++",
+ "prefix": false,
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1356,
+ "name": "Identifier",
+ "src": "11083:1:0"
+ }
+ ],
+ "id": 1357,
+ "name": "UnaryOperation",
+ "src": "11083:3:0"
+ }
+ ],
+ "id": 1358,
+ "name": "ExpressionStatement",
+ "src": "11083:3:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "||",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "operator": "&&",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "bool",
+ "value": "pending"
+ },
+ "id": 1359,
+ "name": "Identifier",
+ "src": "11107:7:0"
+ },
+ {
+ "attributes": {
+ "operator": "!",
+ "prefix": true,
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "member_name": "executed",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage ref"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(uint256 => struct MultiSigWallet.Transaction storage ref)",
+ "value": "transactions"
+ },
+ "id": 1360,
+ "name": "Identifier",
+ "src": "11119:12:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1361,
+ "name": "Identifier",
+ "src": "11132:1:0"
+ }
+ ],
+ "id": 1362,
+ "name": "IndexAccess",
+ "src": "11119:15:0"
+ }
+ ],
+ "id": 1363,
+ "name": "MemberAccess",
+ "src": "11119:24:0"
+ }
+ ],
+ "id": 1364,
+ "name": "UnaryOperation",
+ "src": "11118:25:0"
+ }
+ ],
+ "id": 1365,
+ "name": "BinaryOperation",
+ "src": "11107:36:0"
+ },
+ {
+ "attributes": {
+ "operator": "&&",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "bool",
+ "value": "executed"
+ },
+ "id": 1366,
+ "name": "Identifier",
+ "src": "11163:8:0"
+ },
+ {
+ "attributes": {
+ "member_name": "executed",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage ref"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(uint256 => struct MultiSigWallet.Transaction storage ref)",
+ "value": "transactions"
+ },
+ "id": 1367,
+ "name": "Identifier",
+ "src": "11175:12:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1368,
+ "name": "Identifier",
+ "src": "11188:1:0"
+ }
+ ],
+ "id": 1369,
+ "name": "IndexAccess",
+ "src": "11175:15:0"
+ }
+ ],
+ "id": 1370,
+ "name": "MemberAccess",
+ "src": "11175:24:0"
+ }
+ ],
+ "id": 1371,
+ "name": "BinaryOperation",
+ "src": "11163:36:0"
+ }
+ ],
+ "id": 1372,
+ "name": "BinaryOperation",
+ "src": "11107:92:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256[] memory",
+ "value": "transactionIdsTemp"
+ },
+ "id": 1373,
+ "name": "Identifier",
+ "src": "11231:18:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "count"
+ },
+ "id": 1374,
+ "name": "Identifier",
+ "src": "11250:5:0"
+ }
+ ],
+ "id": 1375,
+ "name": "IndexAccess",
+ "src": "11231:25:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1376,
+ "name": "Identifier",
+ "src": "11259:1:0"
+ }
+ ],
+ "id": 1377,
+ "name": "Assignment",
+ "src": "11231:29:0"
+ }
+ ],
+ "id": 1378,
+ "name": "ExpressionStatement",
+ "src": "11231:29:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "+=",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "count"
+ },
+ "id": 1379,
+ "name": "Identifier",
+ "src": "11278:5:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "31",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 1",
+ "value": "1"
+ },
+ "id": 1380,
+ "name": "Literal",
+ "src": "11287:1:0"
+ }
+ ],
+ "id": 1381,
+ "name": "Assignment",
+ "src": "11278:10:0"
+ }
+ ],
+ "id": 1382,
+ "name": "ExpressionStatement",
+ "src": "11278:10:0"
+ }
+ ],
+ "id": 1383,
+ "name": "Block",
+ "src": "11213:90:0"
+ }
+ ],
+ "id": 1384,
+ "name": "IfStatement",
+ "src": "11100:203:0"
+ }
+ ],
+ "id": 1385,
+ "name": "ForStatement",
+ "src": "11053:250:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "uint256[] memory"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256[] memory",
+ "value": "_transactionIds"
+ },
+ "id": 1386,
+ "name": "Identifier",
+ "src": "11312:15:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256[] memory",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (uint256) returns (uint256[] memory)"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 1387,
+ "name": "ElementaryTypeName",
+ "src": "11334:4:0"
+ }
+ ],
+ "id": 1388,
+ "name": "ArrayTypeName",
+ "src": "11334:6:0"
+ }
+ ],
+ "id": 1389,
+ "name": "NewExpression",
+ "src": "11330:10:0"
+ },
+ {
+ "attributes": {
+ "operator": "-",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "to"
+ },
+ "id": 1390,
+ "name": "Identifier",
+ "src": "11341:2:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "from"
+ },
+ "id": 1391,
+ "name": "Identifier",
+ "src": "11346:4:0"
+ }
+ ],
+ "id": 1392,
+ "name": "BinaryOperation",
+ "src": "11341:9:0"
+ }
+ ],
+ "id": 1393,
+ "name": "FunctionCall",
+ "src": "11330:21:0"
+ }
+ ],
+ "id": 1394,
+ "name": "Assignment",
+ "src": "11312:39:0"
+ }
+ ],
+ "id": 1395,
+ "name": "ExpressionStatement",
+ "src": "11312:39:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1396,
+ "name": "Identifier",
+ "src": "11366:1:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "from"
+ },
+ "id": 1397,
+ "name": "Identifier",
+ "src": "11368:4:0"
+ }
+ ],
+ "id": 1398,
+ "name": "Assignment",
+ "src": "11366:6:0"
+ }
+ ],
+ "id": 1399,
+ "name": "ExpressionStatement",
+ "src": "11366:6:0"
+ },
+ {
+ "attributes": {
+ "operator": "<",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1400,
+ "name": "Identifier",
+ "src": "11374:1:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "to"
+ },
+ "id": 1401,
+ "name": "Identifier",
+ "src": "11376:2:0"
+ }
+ ],
+ "id": 1402,
+ "name": "BinaryOperation",
+ "src": "11374:4:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "++",
+ "prefix": false,
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1403,
+ "name": "Identifier",
+ "src": "11380:1:0"
+ }
+ ],
+ "id": 1404,
+ "name": "UnaryOperation",
+ "src": "11380:3:0"
+ }
+ ],
+ "id": 1405,
+ "name": "ExpressionStatement",
+ "src": "11380:3:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256[] memory",
+ "value": "_transactionIds"
+ },
+ "id": 1406,
+ "name": "Identifier",
+ "src": "11397:15:0"
+ },
+ {
+ "attributes": {
+ "operator": "-",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1407,
+ "name": "Identifier",
+ "src": "11413:1:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "from"
+ },
+ "id": 1408,
+ "name": "Identifier",
+ "src": "11417:4:0"
+ }
+ ],
+ "id": 1409,
+ "name": "BinaryOperation",
+ "src": "11413:8:0"
+ }
+ ],
+ "id": 1410,
+ "name": "IndexAccess",
+ "src": "11397:25:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256[] memory",
+ "value": "transactionIdsTemp"
+ },
+ "id": 1411,
+ "name": "Identifier",
+ "src": "11425:18:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1412,
+ "name": "Identifier",
+ "src": "11444:1:0"
+ }
+ ],
+ "id": 1413,
+ "name": "IndexAccess",
+ "src": "11425:21:0"
+ }
+ ],
+ "id": 1414,
+ "name": "Assignment",
+ "src": "11397:49:0"
+ }
+ ],
+ "id": 1415,
+ "name": "ExpressionStatement",
+ "src": "11397:49:0"
+ }
+ ],
+ "id": 1416,
+ "name": "ForStatement",
+ "src": "11361:85:0"
+ }
+ ],
+ "id": 1417,
+ "name": "Block",
+ "src": "10930:523:0"
+ }
+ ],
+ "id": 1418,
+ "name": "FunctionDefinition",
+ "src": "10777:676:0"
+ }
+ ],
+ "id": 1419,
+ "name": "ContractDefinition",
+ "src": "206:11249:0"
+ }
+ ],
+ "name": "SourceUnit"
+ }
},
- "current/protocol/AssetProxyOwner/AssetProxyOwner.sol": {
- "id": 2
+ "2.0.0/multisig/MultiSigWalletWithTimeLock.sol": {
+ "id": "1",
+ "legacyAST": {
+ "children": [
+ {
+ "attributes": {
+ "literals": [
+ "solidity",
+ "^",
+ "0.4",
+ ".10"
+ ]
+ },
+ "id": 204,
+ "name": "PragmaDirective",
+ "src": "599:24:1"
+ },
+ {
+ "attributes": {
+ "file": "./MultiSigWallet.sol"
+ },
+ "id": 205,
+ "name": "ImportDirective",
+ "src": "625:30:1"
+ },
+ {
+ "attributes": {
+ "fullyImplemented": true,
+ "isLibrary": false,
+ "linearizedBaseContracts": [
+ 456,
+ 1419
+ ],
+ "name": "MultiSigWalletWithTimeLock"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "MultiSigWallet"
+ },
+ "id": 206,
+ "name": "UserDefinedTypeName",
+ "src": "874:14:1"
+ }
+ ],
+ "id": 207,
+ "name": "InheritanceSpecifier",
+ "src": "874:14:1"
+ },
+ {
+ "attributes": {
+ "name": "ConfirmationTimeSet"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "transactionId",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 208,
+ "name": "ElementaryTypeName",
+ "src": "922:4:1"
+ }
+ ],
+ "id": 209,
+ "name": "VariableDeclaration",
+ "src": "922:26:1"
+ },
+ {
+ "attributes": {
+ "name": "confirmationTime",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 210,
+ "name": "ElementaryTypeName",
+ "src": "950:4:1"
+ }
+ ],
+ "id": 211,
+ "name": "VariableDeclaration",
+ "src": "950:21:1"
+ }
+ ],
+ "id": 212,
+ "name": "ParameterList",
+ "src": "921:51:1"
+ }
+ ],
+ "id": 213,
+ "name": "EventDefinition",
+ "src": "896:77:1"
+ },
+ {
+ "attributes": {
+ "name": "TimeLockChange"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "secondsTimeLocked",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 214,
+ "name": "ElementaryTypeName",
+ "src": "999:4:1"
+ }
+ ],
+ "id": 215,
+ "name": "VariableDeclaration",
+ "src": "999:22:1"
+ }
+ ],
+ "id": 216,
+ "name": "ParameterList",
+ "src": "998:24:1"
+ }
+ ],
+ "id": 217,
+ "name": "EventDefinition",
+ "src": "978:45:1"
+ },
+ {
+ "attributes": {
+ "name": "secondsTimeLocked",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 218,
+ "name": "ElementaryTypeName",
+ "src": "1029:4:1"
+ }
+ ],
+ "id": 219,
+ "name": "VariableDeclaration",
+ "src": "1029:29:1"
+ },
+ {
+ "attributes": {
+ "name": "confirmationTimes",
+ "type": "mapping(uint256 => uint256)"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 220,
+ "name": "ElementaryTypeName",
+ "src": "1074:4:1"
+ },
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 221,
+ "name": "ElementaryTypeName",
+ "src": "1082:4:1"
+ }
+ ],
+ "id": 222,
+ "name": "Mapping",
+ "src": "1065:22:1"
+ }
+ ],
+ "id": 223,
+ "name": "VariableDeclaration",
+ "src": "1065:47:1"
+ },
+ {
+ "attributes": {
+ "name": "notFullyConfirmed"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "transactionId",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 224,
+ "name": "ElementaryTypeName",
+ "src": "1146:4:1"
+ }
+ ],
+ "id": 225,
+ "name": "VariableDeclaration",
+ "src": "1146:18:1"
+ }
+ ],
+ "id": 226,
+ "name": "ParameterList",
+ "src": "1145:20:1"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (bool)",
+ "value": "require"
+ },
+ "id": 227,
+ "name": "Identifier",
+ "src": "1176:7:1"
+ },
+ {
+ "attributes": {
+ "operator": "!",
+ "prefix": true,
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "bool",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (uint256) constant returns (bool)",
+ "value": "isConfirmed"
+ },
+ "id": 228,
+ "name": "Identifier",
+ "src": "1185:11:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 229,
+ "name": "Identifier",
+ "src": "1197:13:1"
+ }
+ ],
+ "id": 230,
+ "name": "FunctionCall",
+ "src": "1185:26:1"
+ }
+ ],
+ "id": 231,
+ "name": "UnaryOperation",
+ "src": "1184:27:1"
+ }
+ ],
+ "id": 232,
+ "name": "FunctionCall",
+ "src": "1176:36:1"
+ }
+ ],
+ "id": 233,
+ "name": "ExpressionStatement",
+ "src": "1176:36:1"
+ },
+ {
+ "id": 234,
+ "name": "PlaceholderStatement",
+ "src": "1222:1:1"
+ }
+ ],
+ "id": 235,
+ "name": "Block",
+ "src": "1166:64:1"
+ }
+ ],
+ "id": 236,
+ "name": "ModifierDefinition",
+ "src": "1119:111:1"
+ },
+ {
+ "attributes": {
+ "name": "fullyConfirmed"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "transactionId",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 237,
+ "name": "ElementaryTypeName",
+ "src": "1260:4:1"
+ }
+ ],
+ "id": 238,
+ "name": "VariableDeclaration",
+ "src": "1260:18:1"
+ }
+ ],
+ "id": 239,
+ "name": "ParameterList",
+ "src": "1259:20:1"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (bool)",
+ "value": "require"
+ },
+ "id": 240,
+ "name": "Identifier",
+ "src": "1290:7:1"
+ },
+ {
+ "attributes": {
+ "type": "bool",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (uint256) constant returns (bool)",
+ "value": "isConfirmed"
+ },
+ "id": 241,
+ "name": "Identifier",
+ "src": "1298:11:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 242,
+ "name": "Identifier",
+ "src": "1310:13:1"
+ }
+ ],
+ "id": 243,
+ "name": "FunctionCall",
+ "src": "1298:26:1"
+ }
+ ],
+ "id": 244,
+ "name": "FunctionCall",
+ "src": "1290:35:1"
+ }
+ ],
+ "id": 245,
+ "name": "ExpressionStatement",
+ "src": "1290:35:1"
+ },
+ {
+ "id": 246,
+ "name": "PlaceholderStatement",
+ "src": "1335:1:1"
+ }
+ ],
+ "id": 247,
+ "name": "Block",
+ "src": "1280:63:1"
+ }
+ ],
+ "id": 248,
+ "name": "ModifierDefinition",
+ "src": "1236:107:1"
+ },
+ {
+ "attributes": {
+ "name": "pastTimeLock"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "transactionId",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 249,
+ "name": "ElementaryTypeName",
+ "src": "1371:4:1"
+ }
+ ],
+ "id": 250,
+ "name": "VariableDeclaration",
+ "src": "1371:18:1"
+ }
+ ],
+ "id": 251,
+ "name": "ParameterList",
+ "src": "1370:20:1"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (bool)",
+ "value": "require"
+ },
+ "id": 252,
+ "name": "Identifier",
+ "src": "1401:7:1"
+ },
+ {
+ "attributes": {
+ "operator": ">=",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "member_name": "timestamp",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "block",
+ "value": "block"
+ },
+ "id": 253,
+ "name": "Identifier",
+ "src": "1409:5:1"
+ }
+ ],
+ "id": 254,
+ "name": "MemberAccess",
+ "src": "1409:15:1"
+ },
+ {
+ "attributes": {
+ "operator": "+",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(uint256 => uint256)",
+ "value": "confirmationTimes"
+ },
+ "id": 255,
+ "name": "Identifier",
+ "src": "1428:17:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 256,
+ "name": "Identifier",
+ "src": "1446:13:1"
+ }
+ ],
+ "id": 257,
+ "name": "IndexAccess",
+ "src": "1428:32:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "secondsTimeLocked"
+ },
+ "id": 258,
+ "name": "Identifier",
+ "src": "1463:17:1"
+ }
+ ],
+ "id": 259,
+ "name": "BinaryOperation",
+ "src": "1428:52:1"
+ }
+ ],
+ "id": 260,
+ "name": "BinaryOperation",
+ "src": "1409:71:1"
+ }
+ ],
+ "id": 261,
+ "name": "FunctionCall",
+ "src": "1401:80:1"
+ }
+ ],
+ "id": 262,
+ "name": "ExpressionStatement",
+ "src": "1401:80:1"
+ },
+ {
+ "id": 263,
+ "name": "PlaceholderStatement",
+ "src": "1491:1:1"
+ }
+ ],
+ "id": 264,
+ "name": "Block",
+ "src": "1391:108:1"
+ }
+ ],
+ "id": 265,
+ "name": "ModifierDefinition",
+ "src": "1349:150:1"
+ },
+ {
+ "attributes": {
+ "constant": false,
+ "name": "MultiSigWalletWithTimeLock",
+ "payable": false,
+ "visibility": "public"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "_owners",
+ "type": "address[] memory"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 266,
+ "name": "ElementaryTypeName",
+ "src": "1920:7:1"
+ }
+ ],
+ "id": 267,
+ "name": "ArrayTypeName",
+ "src": "1920:9:1"
+ }
+ ],
+ "id": 268,
+ "name": "VariableDeclaration",
+ "src": "1920:17:1"
+ },
+ {
+ "attributes": {
+ "name": "_required",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 269,
+ "name": "ElementaryTypeName",
+ "src": "1939:4:1"
+ }
+ ],
+ "id": 270,
+ "name": "VariableDeclaration",
+ "src": "1939:14:1"
+ },
+ {
+ "attributes": {
+ "name": "_secondsTimeLocked",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 271,
+ "name": "ElementaryTypeName",
+ "src": "1955:4:1"
+ }
+ ],
+ "id": 272,
+ "name": "VariableDeclaration",
+ "src": "1955:23:1"
+ }
+ ],
+ "id": 273,
+ "name": "ParameterList",
+ "src": "1919:60:1"
+ },
+ {
+ "children": [],
+ "id": 278,
+ "name": "ParameterList",
+ "src": "2042:0:1"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "type(contract MultiSigWallet)",
+ "value": "MultiSigWallet"
+ },
+ "id": 274,
+ "name": "Identifier",
+ "src": "2003:14:1"
+ },
+ {
+ "attributes": {
+ "type": "address[] memory",
+ "value": "_owners"
+ },
+ "id": 275,
+ "name": "Identifier",
+ "src": "2018:7:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "_required"
+ },
+ "id": 276,
+ "name": "Identifier",
+ "src": "2027:9:1"
+ }
+ ],
+ "id": 277,
+ "name": "ModifierInvocation",
+ "src": "2003:34:1"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "secondsTimeLocked"
+ },
+ "id": 279,
+ "name": "Identifier",
+ "src": "2052:17:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "_secondsTimeLocked"
+ },
+ "id": 280,
+ "name": "Identifier",
+ "src": "2072:18:1"
+ }
+ ],
+ "id": 281,
+ "name": "Assignment",
+ "src": "2052:38:1"
+ }
+ ],
+ "id": 282,
+ "name": "ExpressionStatement",
+ "src": "2052:38:1"
+ }
+ ],
+ "id": 283,
+ "name": "Block",
+ "src": "2042:55:1"
+ }
+ ],
+ "id": 284,
+ "name": "FunctionDefinition",
+ "src": "1884:213:1"
+ },
+ {
+ "attributes": {
+ "constant": false,
+ "name": "changeTimeLock",
+ "payable": false,
+ "visibility": "public"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "_secondsTimeLocked",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 285,
+ "name": "ElementaryTypeName",
+ "src": "2325:4:1"
+ }
+ ],
+ "id": 286,
+ "name": "VariableDeclaration",
+ "src": "2325:23:1"
+ }
+ ],
+ "id": 287,
+ "name": "ParameterList",
+ "src": "2324:25:1"
+ },
+ {
+ "children": [],
+ "id": 290,
+ "name": "ParameterList",
+ "src": "2388:0:1"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier ()",
+ "value": "onlyWallet"
+ },
+ "id": 288,
+ "name": "Identifier",
+ "src": "2373:10:1"
+ }
+ ],
+ "id": 289,
+ "name": "ModifierInvocation",
+ "src": "2373:10:1"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "secondsTimeLocked"
+ },
+ "id": 291,
+ "name": "Identifier",
+ "src": "2398:17:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "_secondsTimeLocked"
+ },
+ "id": 292,
+ "name": "Identifier",
+ "src": "2418:18:1"
+ }
+ ],
+ "id": 293,
+ "name": "Assignment",
+ "src": "2398:38:1"
+ }
+ ],
+ "id": 294,
+ "name": "ExpressionStatement",
+ "src": "2398:38:1"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (uint256) constant",
+ "value": "TimeLockChange"
+ },
+ "id": 295,
+ "name": "Identifier",
+ "src": "2446:14:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "_secondsTimeLocked"
+ },
+ "id": 296,
+ "name": "Identifier",
+ "src": "2461:18:1"
+ }
+ ],
+ "id": 297,
+ "name": "FunctionCall",
+ "src": "2446:34:1"
+ }
+ ],
+ "id": 298,
+ "name": "ExpressionStatement",
+ "src": "2446:34:1"
+ }
+ ],
+ "id": 299,
+ "name": "Block",
+ "src": "2388:99:1"
+ }
+ ],
+ "id": 300,
+ "name": "FunctionDefinition",
+ "src": "2301:186:1"
+ },
+ {
+ "attributes": {
+ "constant": false,
+ "name": "confirmTransaction",
+ "payable": false,
+ "visibility": "public"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "transactionId",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 301,
+ "name": "ElementaryTypeName",
+ "src": "2621:4:1"
+ }
+ ],
+ "id": 302,
+ "name": "VariableDeclaration",
+ "src": "2621:18:1"
+ }
+ ],
+ "id": 303,
+ "name": "ParameterList",
+ "src": "2620:20:1"
+ },
+ {
+ "children": [],
+ "id": 319,
+ "name": "ParameterList",
+ "src": "2822:0:1"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (address)",
+ "value": "ownerExists"
+ },
+ "id": 304,
+ "name": "Identifier",
+ "src": "2664:11:1"
+ },
+ {
+ "attributes": {
+ "member_name": "sender",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "msg",
+ "value": "msg"
+ },
+ "id": 305,
+ "name": "Identifier",
+ "src": "2676:3:1"
+ }
+ ],
+ "id": 306,
+ "name": "MemberAccess",
+ "src": "2676:10:1"
+ }
+ ],
+ "id": 307,
+ "name": "ModifierInvocation",
+ "src": "2664:23:1"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (uint256)",
+ "value": "transactionExists"
+ },
+ "id": 308,
+ "name": "Identifier",
+ "src": "2696:17:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 309,
+ "name": "Identifier",
+ "src": "2714:13:1"
+ }
+ ],
+ "id": 310,
+ "name": "ModifierInvocation",
+ "src": "2696:32:1"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (uint256,address)",
+ "value": "notConfirmed"
+ },
+ "id": 311,
+ "name": "Identifier",
+ "src": "2737:12:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 312,
+ "name": "Identifier",
+ "src": "2750:13:1"
+ },
+ {
+ "attributes": {
+ "member_name": "sender",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "msg",
+ "value": "msg"
+ },
+ "id": 313,
+ "name": "Identifier",
+ "src": "2765:3:1"
+ }
+ ],
+ "id": 314,
+ "name": "MemberAccess",
+ "src": "2765:10:1"
+ }
+ ],
+ "id": 315,
+ "name": "ModifierInvocation",
+ "src": "2737:39:1"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (uint256)",
+ "value": "notFullyConfirmed"
+ },
+ "id": 316,
+ "name": "Identifier",
+ "src": "2785:17:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 317,
+ "name": "Identifier",
+ "src": "2803:13:1"
+ }
+ ],
+ "id": 318,
+ "name": "ModifierInvocation",
+ "src": "2785:32:1"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(address => bool)"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(uint256 => mapping(address => bool))",
+ "value": "confirmations"
+ },
+ "id": 320,
+ "name": "Identifier",
+ "src": "2832:13:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 321,
+ "name": "Identifier",
+ "src": "2846:13:1"
+ }
+ ],
+ "id": 324,
+ "name": "IndexAccess",
+ "src": "2832:28:1"
+ },
+ {
+ "attributes": {
+ "member_name": "sender",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "msg",
+ "value": "msg"
+ },
+ "id": 322,
+ "name": "Identifier",
+ "src": "2861:3:1"
+ }
+ ],
+ "id": 323,
+ "name": "MemberAccess",
+ "src": "2861:10:1"
+ }
+ ],
+ "id": 325,
+ "name": "IndexAccess",
+ "src": "2832:40:1"
+ },
+ {
+ "attributes": {
+ "hexvalue": "74727565",
+ "subdenomination": null,
+ "token": "true",
+ "type": "bool",
+ "value": "true"
+ },
+ "id": 326,
+ "name": "Literal",
+ "src": "2875:4:1"
+ }
+ ],
+ "id": 327,
+ "name": "Assignment",
+ "src": "2832:47:1"
+ }
+ ],
+ "id": 328,
+ "name": "ExpressionStatement",
+ "src": "2832:47:1"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (address,uint256) constant",
+ "value": "Confirmation"
+ },
+ "id": 329,
+ "name": "Identifier",
+ "src": "2889:12:1"
+ },
+ {
+ "attributes": {
+ "member_name": "sender",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "msg",
+ "value": "msg"
+ },
+ "id": 330,
+ "name": "Identifier",
+ "src": "2902:3:1"
+ }
+ ],
+ "id": 331,
+ "name": "MemberAccess",
+ "src": "2902:10:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 332,
+ "name": "Identifier",
+ "src": "2914:13:1"
+ }
+ ],
+ "id": 333,
+ "name": "FunctionCall",
+ "src": "2889:39:1"
+ }
+ ],
+ "id": 334,
+ "name": "ExpressionStatement",
+ "src": "2889:39:1"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "bool",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (uint256) constant returns (bool)",
+ "value": "isConfirmed"
+ },
+ "id": 335,
+ "name": "Identifier",
+ "src": "2942:11:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 336,
+ "name": "Identifier",
+ "src": "2954:13:1"
+ }
+ ],
+ "id": 337,
+ "name": "FunctionCall",
+ "src": "2942:26:1"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (uint256,uint256)",
+ "value": "setConfirmationTime"
+ },
+ "id": 338,
+ "name": "Identifier",
+ "src": "2984:19:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 339,
+ "name": "Identifier",
+ "src": "3004:13:1"
+ },
+ {
+ "attributes": {
+ "member_name": "timestamp",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "block",
+ "value": "block"
+ },
+ "id": 340,
+ "name": "Identifier",
+ "src": "3019:5:1"
+ }
+ ],
+ "id": 341,
+ "name": "MemberAccess",
+ "src": "3019:15:1"
+ }
+ ],
+ "id": 342,
+ "name": "FunctionCall",
+ "src": "2984:51:1"
+ }
+ ],
+ "id": 343,
+ "name": "ExpressionStatement",
+ "src": "2984:51:1"
+ }
+ ],
+ "id": 344,
+ "name": "Block",
+ "src": "2970:76:1"
+ }
+ ],
+ "id": 345,
+ "name": "IfStatement",
+ "src": "2938:108:1"
+ }
+ ],
+ "id": 346,
+ "name": "Block",
+ "src": "2822:230:1"
+ }
+ ],
+ "id": 347,
+ "name": "FunctionDefinition",
+ "src": "2593:459:1"
+ },
+ {
+ "attributes": {
+ "constant": false,
+ "name": "revokeConfirmation",
+ "payable": false,
+ "visibility": "public"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "transactionId",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 348,
+ "name": "ElementaryTypeName",
+ "src": "3204:4:1"
+ }
+ ],
+ "id": 349,
+ "name": "VariableDeclaration",
+ "src": "3204:18:1"
+ }
+ ],
+ "id": 350,
+ "name": "ParameterList",
+ "src": "3203:20:1"
+ },
+ {
+ "children": [],
+ "id": 366,
+ "name": "ParameterList",
+ "src": "3396:0:1"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (address)",
+ "value": "ownerExists"
+ },
+ "id": 351,
+ "name": "Identifier",
+ "src": "3247:11:1"
+ },
+ {
+ "attributes": {
+ "member_name": "sender",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "msg",
+ "value": "msg"
+ },
+ "id": 352,
+ "name": "Identifier",
+ "src": "3259:3:1"
+ }
+ ],
+ "id": 353,
+ "name": "MemberAccess",
+ "src": "3259:10:1"
+ }
+ ],
+ "id": 354,
+ "name": "ModifierInvocation",
+ "src": "3247:23:1"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (uint256,address)",
+ "value": "confirmed"
+ },
+ "id": 355,
+ "name": "Identifier",
+ "src": "3279:9:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 356,
+ "name": "Identifier",
+ "src": "3289:13:1"
+ },
+ {
+ "attributes": {
+ "member_name": "sender",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "msg",
+ "value": "msg"
+ },
+ "id": 357,
+ "name": "Identifier",
+ "src": "3304:3:1"
+ }
+ ],
+ "id": 358,
+ "name": "MemberAccess",
+ "src": "3304:10:1"
+ }
+ ],
+ "id": 359,
+ "name": "ModifierInvocation",
+ "src": "3279:36:1"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (uint256)",
+ "value": "notExecuted"
+ },
+ "id": 360,
+ "name": "Identifier",
+ "src": "3324:11:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 361,
+ "name": "Identifier",
+ "src": "3336:13:1"
+ }
+ ],
+ "id": 362,
+ "name": "ModifierInvocation",
+ "src": "3324:26:1"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (uint256)",
+ "value": "notFullyConfirmed"
+ },
+ "id": 363,
+ "name": "Identifier",
+ "src": "3359:17:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 364,
+ "name": "Identifier",
+ "src": "3377:13:1"
+ }
+ ],
+ "id": 365,
+ "name": "ModifierInvocation",
+ "src": "3359:32:1"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(address => bool)"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(uint256 => mapping(address => bool))",
+ "value": "confirmations"
+ },
+ "id": 367,
+ "name": "Identifier",
+ "src": "3406:13:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 368,
+ "name": "Identifier",
+ "src": "3420:13:1"
+ }
+ ],
+ "id": 371,
+ "name": "IndexAccess",
+ "src": "3406:28:1"
+ },
+ {
+ "attributes": {
+ "member_name": "sender",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "msg",
+ "value": "msg"
+ },
+ "id": 369,
+ "name": "Identifier",
+ "src": "3435:3:1"
+ }
+ ],
+ "id": 370,
+ "name": "MemberAccess",
+ "src": "3435:10:1"
+ }
+ ],
+ "id": 372,
+ "name": "IndexAccess",
+ "src": "3406:40:1"
+ },
+ {
+ "attributes": {
+ "hexvalue": "66616c7365",
+ "subdenomination": null,
+ "token": "false",
+ "type": "bool",
+ "value": "false"
+ },
+ "id": 373,
+ "name": "Literal",
+ "src": "3449:5:1"
+ }
+ ],
+ "id": 374,
+ "name": "Assignment",
+ "src": "3406:48:1"
+ }
+ ],
+ "id": 375,
+ "name": "ExpressionStatement",
+ "src": "3406:48:1"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (address,uint256) constant",
+ "value": "Revocation"
+ },
+ "id": 376,
+ "name": "Identifier",
+ "src": "3464:10:1"
+ },
+ {
+ "attributes": {
+ "member_name": "sender",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "msg",
+ "value": "msg"
+ },
+ "id": 377,
+ "name": "Identifier",
+ "src": "3475:3:1"
+ }
+ ],
+ "id": 378,
+ "name": "MemberAccess",
+ "src": "3475:10:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 379,
+ "name": "Identifier",
+ "src": "3487:13:1"
+ }
+ ],
+ "id": 380,
+ "name": "FunctionCall",
+ "src": "3464:37:1"
+ }
+ ],
+ "id": 381,
+ "name": "ExpressionStatement",
+ "src": "3464:37:1"
+ }
+ ],
+ "id": 382,
+ "name": "Block",
+ "src": "3396:112:1"
+ }
+ ],
+ "id": 383,
+ "name": "FunctionDefinition",
+ "src": "3176:332:1"
+ },
+ {
+ "attributes": {
+ "constant": false,
+ "name": "executeTransaction",
+ "payable": false,
+ "visibility": "public"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "transactionId",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 384,
+ "name": "ElementaryTypeName",
+ "src": "3650:4:1"
+ }
+ ],
+ "id": 385,
+ "name": "VariableDeclaration",
+ "src": "3650:18:1"
+ }
+ ],
+ "id": 386,
+ "name": "ParameterList",
+ "src": "3649:20:1"
+ },
+ {
+ "children": [],
+ "id": 396,
+ "name": "ParameterList",
+ "src": "3798:0:1"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (uint256)",
+ "value": "notExecuted"
+ },
+ "id": 387,
+ "name": "Identifier",
+ "src": "3693:11:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 388,
+ "name": "Identifier",
+ "src": "3705:13:1"
+ }
+ ],
+ "id": 389,
+ "name": "ModifierInvocation",
+ "src": "3693:26:1"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (uint256)",
+ "value": "fullyConfirmed"
+ },
+ "id": 390,
+ "name": "Identifier",
+ "src": "3728:14:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 391,
+ "name": "Identifier",
+ "src": "3743:13:1"
+ }
+ ],
+ "id": 392,
+ "name": "ModifierInvocation",
+ "src": "3728:29:1"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (uint256)",
+ "value": "pastTimeLock"
+ },
+ "id": 393,
+ "name": "Identifier",
+ "src": "3766:12:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 394,
+ "name": "Identifier",
+ "src": "3779:13:1"
+ }
+ ],
+ "id": 395,
+ "name": "ModifierInvocation",
+ "src": "3766:27:1"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "tx",
+ "type": "struct MultiSigWallet.Transaction storage pointer"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "Transaction"
+ },
+ "id": 397,
+ "name": "UserDefinedTypeName",
+ "src": "3808:11:1"
+ }
+ ],
+ "id": 398,
+ "name": "VariableDeclaration",
+ "src": "3808:22:1"
+ },
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage ref"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(uint256 => struct MultiSigWallet.Transaction storage ref)",
+ "value": "transactions"
+ },
+ "id": 399,
+ "name": "Identifier",
+ "src": "3833:12:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 400,
+ "name": "Identifier",
+ "src": "3846:13:1"
+ }
+ ],
+ "id": 401,
+ "name": "IndexAccess",
+ "src": "3833:27:1"
+ }
+ ],
+ "id": 402,
+ "name": "VariableDeclarationStatement",
+ "src": "3808:52:1"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "member_name": "executed",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage pointer",
+ "value": "tx"
+ },
+ "id": 403,
+ "name": "Identifier",
+ "src": "3870:2:1"
+ }
+ ],
+ "id": 405,
+ "name": "MemberAccess",
+ "src": "3870:11:1"
+ },
+ {
+ "attributes": {
+ "hexvalue": "74727565",
+ "subdenomination": null,
+ "token": "true",
+ "type": "bool",
+ "value": "true"
+ },
+ "id": 406,
+ "name": "Literal",
+ "src": "3884:4:1"
+ }
+ ],
+ "id": 407,
+ "name": "Assignment",
+ "src": "3870:18:1"
+ }
+ ],
+ "id": 408,
+ "name": "ExpressionStatement",
+ "src": "3870:18:1"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "bool",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function () payable returns (bool)",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "member_name": "value",
+ "type": "function (uint256) returns (function () payable returns (bool))"
+ },
+ "children": [
+ {
+ "attributes": {
+ "member_name": "call",
+ "type": "function () payable returns (bool)"
+ },
+ "children": [
+ {
+ "attributes": {
+ "member_name": "destination",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage pointer",
+ "value": "tx"
+ },
+ "id": 409,
+ "name": "Identifier",
+ "src": "3902:2:1"
+ }
+ ],
+ "id": 410,
+ "name": "MemberAccess",
+ "src": "3902:14:1"
+ }
+ ],
+ "id": 411,
+ "name": "MemberAccess",
+ "src": "3902:19:1"
+ }
+ ],
+ "id": 412,
+ "name": "MemberAccess",
+ "src": "3902:25:1"
+ },
+ {
+ "attributes": {
+ "member_name": "value",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage pointer",
+ "value": "tx"
+ },
+ "id": 413,
+ "name": "Identifier",
+ "src": "3928:2:1"
+ }
+ ],
+ "id": 414,
+ "name": "MemberAccess",
+ "src": "3928:8:1"
+ }
+ ],
+ "id": 415,
+ "name": "FunctionCall",
+ "src": "3902:35:1"
+ },
+ {
+ "attributes": {
+ "member_name": "data",
+ "type": "bytes storage ref"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage pointer",
+ "value": "tx"
+ },
+ "id": 416,
+ "name": "Identifier",
+ "src": "3938:2:1"
+ }
+ ],
+ "id": 417,
+ "name": "MemberAccess",
+ "src": "3938:7:1"
+ }
+ ],
+ "id": 418,
+ "name": "FunctionCall",
+ "src": "3902:44:1"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (uint256) constant",
+ "value": "Execution"
+ },
+ "id": 419,
+ "name": "Identifier",
+ "src": "3960:9:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 420,
+ "name": "Identifier",
+ "src": "3970:13:1"
+ }
+ ],
+ "id": 421,
+ "name": "FunctionCall",
+ "src": "3960:24:1"
+ }
+ ],
+ "id": 422,
+ "name": "ExpressionStatement",
+ "src": "3960:24:1"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (uint256) constant",
+ "value": "ExecutionFailure"
+ },
+ "id": 423,
+ "name": "Identifier",
+ "src": "4013:16:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 424,
+ "name": "Identifier",
+ "src": "4030:13:1"
+ }
+ ],
+ "id": 425,
+ "name": "FunctionCall",
+ "src": "4013:31:1"
+ }
+ ],
+ "id": 426,
+ "name": "ExpressionStatement",
+ "src": "4013:31:1"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "member_name": "executed",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage pointer",
+ "value": "tx"
+ },
+ "id": 427,
+ "name": "Identifier",
+ "src": "4058:2:1"
+ }
+ ],
+ "id": 429,
+ "name": "MemberAccess",
+ "src": "4058:11:1"
+ },
+ {
+ "attributes": {
+ "hexvalue": "66616c7365",
+ "subdenomination": null,
+ "token": "false",
+ "type": "bool",
+ "value": "false"
+ },
+ "id": 430,
+ "name": "Literal",
+ "src": "4072:5:1"
+ }
+ ],
+ "id": 431,
+ "name": "Assignment",
+ "src": "4058:19:1"
+ }
+ ],
+ "id": 432,
+ "name": "ExpressionStatement",
+ "src": "4058:19:1"
+ }
+ ],
+ "id": 433,
+ "name": "Block",
+ "src": "3999:89:1"
+ }
+ ],
+ "id": 434,
+ "name": "IfStatement",
+ "src": "3898:190:1"
+ }
+ ],
+ "id": 435,
+ "name": "Block",
+ "src": "3798:296:1"
+ }
+ ],
+ "id": 436,
+ "name": "FunctionDefinition",
+ "src": "3622:472:1"
+ },
+ {
+ "attributes": {
+ "constant": false,
+ "name": "setConfirmationTime",
+ "payable": false,
+ "visibility": "internal"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "transactionId",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 437,
+ "name": "ElementaryTypeName",
+ "src": "4233:4:1"
+ }
+ ],
+ "id": 438,
+ "name": "VariableDeclaration",
+ "src": "4233:18:1"
+ },
+ {
+ "attributes": {
+ "name": "confirmationTime",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 439,
+ "name": "ElementaryTypeName",
+ "src": "4253:4:1"
+ }
+ ],
+ "id": 440,
+ "name": "VariableDeclaration",
+ "src": "4253:21:1"
+ }
+ ],
+ "id": 441,
+ "name": "ParameterList",
+ "src": "4232:43:1"
+ },
+ {
+ "children": [],
+ "id": 442,
+ "name": "ParameterList",
+ "src": "4297:0:1"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(uint256 => uint256)",
+ "value": "confirmationTimes"
+ },
+ "id": 443,
+ "name": "Identifier",
+ "src": "4307:17:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 444,
+ "name": "Identifier",
+ "src": "4325:13:1"
+ }
+ ],
+ "id": 445,
+ "name": "IndexAccess",
+ "src": "4307:32:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "confirmationTime"
+ },
+ "id": 446,
+ "name": "Identifier",
+ "src": "4342:16:1"
+ }
+ ],
+ "id": 447,
+ "name": "Assignment",
+ "src": "4307:51:1"
+ }
+ ],
+ "id": 448,
+ "name": "ExpressionStatement",
+ "src": "4307:51:1"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (uint256,uint256) constant",
+ "value": "ConfirmationTimeSet"
+ },
+ "id": 449,
+ "name": "Identifier",
+ "src": "4368:19:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 450,
+ "name": "Identifier",
+ "src": "4388:13:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "confirmationTime"
+ },
+ "id": 451,
+ "name": "Identifier",
+ "src": "4403:16:1"
+ }
+ ],
+ "id": 452,
+ "name": "FunctionCall",
+ "src": "4368:52:1"
+ }
+ ],
+ "id": 453,
+ "name": "ExpressionStatement",
+ "src": "4368:52:1"
+ }
+ ],
+ "id": 454,
+ "name": "Block",
+ "src": "4297:130:1"
+ }
+ ],
+ "id": 455,
+ "name": "FunctionDefinition",
+ "src": "4204:223:1"
+ }
+ ],
+ "id": 456,
+ "name": "ContractDefinition",
+ "src": "835:3594:1"
+ }
+ ],
+ "name": "SourceUnit"
+ }
},
- "current/utils/LibBytes/LibBytes.sol": {
- "id": 3
+ "2.0.0/protocol/AssetProxyOwner/AssetProxyOwner.sol": {
+ "id": "2",
+ "legacyAST": {
+ "children": [
+ {
+ "attributes": {
+ "literals": [
+ "solidity",
+ "0.4",
+ ".10"
+ ]
+ },
+ "id": 1,
+ "name": "PragmaDirective",
+ "src": "580:23:2"
+ },
+ {
+ "attributes": {
+ "file": "../../multisig/MultiSigWalletWithTimeLock.sol"
+ },
+ "id": 2,
+ "name": "ImportDirective",
+ "src": "605:55:2"
+ },
+ {
+ "attributes": {
+ "fullyImplemented": true,
+ "isLibrary": false,
+ "linearizedBaseContracts": [
+ 202,
+ 456,
+ 1419
+ ],
+ "name": "AssetProxyOwner"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "MultiSigWalletWithTimeLock"
+ },
+ "id": 3,
+ "name": "UserDefinedTypeName",
+ "src": "695:26:2"
+ }
+ ],
+ "id": 4,
+ "name": "InheritanceSpecifier",
+ "src": "695:26:2"
+ },
+ {
+ "attributes": {
+ "name": "AssetProxyRegistration"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "assetProxyContract",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 5,
+ "name": "ElementaryTypeName",
+ "src": "758:7:2"
+ }
+ ],
+ "id": 6,
+ "name": "VariableDeclaration",
+ "src": "758:26:2"
+ },
+ {
+ "attributes": {
+ "name": "isRegistered",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "bool"
+ },
+ "id": 7,
+ "name": "ElementaryTypeName",
+ "src": "786:4:2"
+ }
+ ],
+ "id": 8,
+ "name": "VariableDeclaration",
+ "src": "786:17:2"
+ }
+ ],
+ "id": 9,
+ "name": "ParameterList",
+ "src": "757:47:2"
+ }
+ ],
+ "id": 10,
+ "name": "EventDefinition",
+ "src": "729:76:2"
+ },
+ {
+ "attributes": {
+ "name": "isAssetProxyRegistered",
+ "type": "mapping(address => bool)"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 11,
+ "name": "ElementaryTypeName",
+ "src": "990:7:2"
+ },
+ {
+ "attributes": {
+ "name": "bool"
+ },
+ "id": 12,
+ "name": "ElementaryTypeName",
+ "src": "1001:4:2"
+ }
+ ],
+ "id": 13,
+ "name": "Mapping",
+ "src": "981:25:2"
+ }
+ ],
+ "id": 14,
+ "name": "VariableDeclaration",
+ "src": "981:55:2"
+ },
+ {
+ "attributes": {
+ "name": "REMOVE_AUTHORIZED_ADDRESS_AT_INDEX_SELECTOR",
+ "type": "bytes4"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "bytes4"
+ },
+ "id": 15,
+ "name": "ElementaryTypeName",
+ "src": "1043:6:2"
+ },
+ {
+ "attributes": {
+ "type": "bytes4",
+ "type_conversion": true
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "type(bytes4)",
+ "value": "bytes4"
+ },
+ "id": 16,
+ "name": "ElementaryTypeNameExpression",
+ "src": "1114:6:2"
+ },
+ {
+ "attributes": {
+ "type": "bytes32",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function () returns (bytes32)",
+ "value": "keccak256"
+ },
+ "id": 17,
+ "name": "Identifier",
+ "src": "1121:9:2"
+ },
+ {
+ "attributes": {
+ "hexvalue": "72656d6f7665417574686f72697a6564416464726573734174496e64657828616464726573732c75696e7432353629",
+ "subdenomination": null,
+ "token": null,
+ "type": "literal_string \"removeAuthorizedAddressAtIndex(address,uint256)\"",
+ "value": "removeAuthorizedAddressAtIndex(address,uint256)"
+ },
+ "id": 18,
+ "name": "Literal",
+ "src": "1131:49:2"
+ }
+ ],
+ "id": 19,
+ "name": "FunctionCall",
+ "src": "1121:60:2"
+ }
+ ],
+ "id": 20,
+ "name": "FunctionCall",
+ "src": "1114:68:2"
+ }
+ ],
+ "id": 21,
+ "name": "VariableDeclaration",
+ "src": "1043:139:2"
+ },
+ {
+ "attributes": {
+ "name": "validRemoveAuthorizedAddressAtIndexTx"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "transactionId",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint256"
+ },
+ "id": 22,
+ "name": "ElementaryTypeName",
+ "src": "1385:7:2"
+ }
+ ],
+ "id": 23,
+ "name": "VariableDeclaration",
+ "src": "1385:21:2"
+ }
+ ],
+ "id": 24,
+ "name": "ParameterList",
+ "src": "1384:23:2"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "tx",
+ "type": "struct MultiSigWallet.Transaction storage pointer"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "Transaction"
+ },
+ "id": 25,
+ "name": "UserDefinedTypeName",
+ "src": "1418:11:2"
+ }
+ ],
+ "id": 26,
+ "name": "VariableDeclaration",
+ "src": "1418:22:2"
+ },
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage ref"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(uint256 => struct MultiSigWallet.Transaction storage ref)",
+ "value": "transactions"
+ },
+ "id": 27,
+ "name": "Identifier",
+ "src": "1443:12:2"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 28,
+ "name": "Identifier",
+ "src": "1456:13:2"
+ }
+ ],
+ "id": 29,
+ "name": "IndexAccess",
+ "src": "1443:27:2"
+ }
+ ],
+ "id": 30,
+ "name": "VariableDeclarationStatement",
+ "src": "1418:52:2"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (bool)",
+ "value": "require"
+ },
+ "id": 31,
+ "name": "Identifier",
+ "src": "1480:7:2"
+ },
+ {
+ "attributes": {
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(address => bool)",
+ "value": "isAssetProxyRegistered"
+ },
+ "id": 32,
+ "name": "Identifier",
+ "src": "1488:22:2"
+ },
+ {
+ "attributes": {
+ "member_name": "destination",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage pointer",
+ "value": "tx"
+ },
+ "id": 33,
+ "name": "Identifier",
+ "src": "1511:2:2"
+ }
+ ],
+ "id": 34,
+ "name": "MemberAccess",
+ "src": "1511:14:2"
+ }
+ ],
+ "id": 35,
+ "name": "IndexAccess",
+ "src": "1488:38:2"
+ }
+ ],
+ "id": 36,
+ "name": "FunctionCall",
+ "src": "1480:47:2"
+ }
+ ],
+ "id": 37,
+ "name": "ExpressionStatement",
+ "src": "1480:47:2"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (bool)",
+ "value": "require"
+ },
+ "id": 38,
+ "name": "Identifier",
+ "src": "1537:7:2"
+ },
+ {
+ "attributes": {
+ "operator": "==",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "bytes4",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (bytes memory,uint256) returns (bytes4)",
+ "value": "readBytes4"
+ },
+ "id": 39,
+ "name": "Identifier",
+ "src": "1545:10:2"
+ },
+ {
+ "attributes": {
+ "member_name": "data",
+ "type": "bytes storage ref"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage pointer",
+ "value": "tx"
+ },
+ "id": 40,
+ "name": "Identifier",
+ "src": "1556:2:2"
+ }
+ ],
+ "id": 41,
+ "name": "MemberAccess",
+ "src": "1556:7:2"
+ },
+ {
+ "attributes": {
+ "hexvalue": "30",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 0",
+ "value": "0"
+ },
+ "id": 42,
+ "name": "Literal",
+ "src": "1565:1:2"
+ }
+ ],
+ "id": 43,
+ "name": "FunctionCall",
+ "src": "1545:22:2"
+ },
+ {
+ "attributes": {
+ "type": "bytes4",
+ "value": "REMOVE_AUTHORIZED_ADDRESS_AT_INDEX_SELECTOR"
+ },
+ "id": 44,
+ "name": "Identifier",
+ "src": "1571:43:2"
+ }
+ ],
+ "id": 45,
+ "name": "BinaryOperation",
+ "src": "1545:69:2"
+ }
+ ],
+ "id": 46,
+ "name": "FunctionCall",
+ "src": "1537:78:2"
+ }
+ ],
+ "id": 47,
+ "name": "ExpressionStatement",
+ "src": "1537:78:2"
+ },
+ {
+ "id": 48,
+ "name": "PlaceholderStatement",
+ "src": "1625:1:2"
+ }
+ ],
+ "id": 49,
+ "name": "Block",
+ "src": "1408:225:2"
+ }
+ ],
+ "id": 50,
+ "name": "ModifierDefinition",
+ "src": "1338:295:2"
+ },
+ {
+ "attributes": {
+ "constant": false,
+ "name": "AssetProxyOwner",
+ "payable": false,
+ "visibility": "public"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "_owners",
+ "type": "address[] memory"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 51,
+ "name": "ElementaryTypeName",
+ "src": "2131:7:2"
+ }
+ ],
+ "id": 52,
+ "name": "ArrayTypeName",
+ "src": "2131:9:2"
+ }
+ ],
+ "id": 53,
+ "name": "VariableDeclaration",
+ "src": "2131:24:2"
+ },
+ {
+ "attributes": {
+ "name": "_assetProxyContracts",
+ "type": "address[] memory"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 54,
+ "name": "ElementaryTypeName",
+ "src": "2165:7:2"
+ }
+ ],
+ "id": 55,
+ "name": "ArrayTypeName",
+ "src": "2165:9:2"
+ }
+ ],
+ "id": 56,
+ "name": "VariableDeclaration",
+ "src": "2165:37:2"
+ },
+ {
+ "attributes": {
+ "name": "_required",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint256"
+ },
+ "id": 57,
+ "name": "ElementaryTypeName",
+ "src": "2212:7:2"
+ }
+ ],
+ "id": 58,
+ "name": "VariableDeclaration",
+ "src": "2212:17:2"
+ },
+ {
+ "attributes": {
+ "name": "_secondsTimeLocked",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint256"
+ },
+ "id": 59,
+ "name": "ElementaryTypeName",
+ "src": "2239:7:2"
+ }
+ ],
+ "id": 60,
+ "name": "VariableDeclaration",
+ "src": "2239:26:2"
+ }
+ ],
+ "id": 61,
+ "name": "ParameterList",
+ "src": "2121:150:2"
+ },
+ {
+ "children": [],
+ "id": 67,
+ "name": "ParameterList",
+ "src": "2366:0:2"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "type(contract MultiSigWalletWithTimeLock)",
+ "value": "MultiSigWalletWithTimeLock"
+ },
+ "id": 62,
+ "name": "Identifier",
+ "src": "2295:26:2"
+ },
+ {
+ "attributes": {
+ "type": "address[] memory",
+ "value": "_owners"
+ },
+ "id": 63,
+ "name": "Identifier",
+ "src": "2322:7:2"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "_required"
+ },
+ "id": 64,
+ "name": "Identifier",
+ "src": "2331:9:2"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "_secondsTimeLocked"
+ },
+ "id": 65,
+ "name": "Identifier",
+ "src": "2342:18:2"
+ }
+ ],
+ "id": 66,
+ "name": "ModifierInvocation",
+ "src": "2295:66:2"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "i",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint256"
+ },
+ "id": 68,
+ "name": "ElementaryTypeName",
+ "src": "2381:7:2"
+ }
+ ],
+ "id": 69,
+ "name": "VariableDeclaration",
+ "src": "2381:9:2"
+ },
+ {
+ "attributes": {
+ "hexvalue": "30",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 0",
+ "value": "0"
+ },
+ "id": 70,
+ "name": "Literal",
+ "src": "2393:1:2"
+ }
+ ],
+ "id": 71,
+ "name": "VariableDeclarationStatement",
+ "src": "2381:13:2"
+ },
+ {
+ "attributes": {
+ "operator": "<",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 72,
+ "name": "Identifier",
+ "src": "2396:1:2"
+ },
+ {
+ "attributes": {
+ "member_name": "length",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] memory",
+ "value": "_assetProxyContracts"
+ },
+ "id": 73,
+ "name": "Identifier",
+ "src": "2400:20:2"
+ }
+ ],
+ "id": 74,
+ "name": "MemberAccess",
+ "src": "2400:27:2"
+ }
+ ],
+ "id": 75,
+ "name": "BinaryOperation",
+ "src": "2396:31:2"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "++",
+ "prefix": false,
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 76,
+ "name": "Identifier",
+ "src": "2429:1:2"
+ }
+ ],
+ "id": 77,
+ "name": "UnaryOperation",
+ "src": "2429:3:2"
+ }
+ ],
+ "id": 78,
+ "name": "ExpressionStatement",
+ "src": "2429:3:2"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "assetProxy",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 79,
+ "name": "ElementaryTypeName",
+ "src": "2448:7:2"
+ }
+ ],
+ "id": 80,
+ "name": "VariableDeclaration",
+ "src": "2448:18:2"
+ },
+ {
+ "attributes": {
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] memory",
+ "value": "_assetProxyContracts"
+ },
+ "id": 81,
+ "name": "Identifier",
+ "src": "2469:20:2"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 82,
+ "name": "Identifier",
+ "src": "2490:1:2"
+ }
+ ],
+ "id": 83,
+ "name": "IndexAccess",
+ "src": "2469:23:2"
+ }
+ ],
+ "id": 84,
+ "name": "VariableDeclarationStatement",
+ "src": "2448:44:2"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (bool)",
+ "value": "require"
+ },
+ "id": 85,
+ "name": "Identifier",
+ "src": "2506:7:2"
+ },
+ {
+ "attributes": {
+ "operator": "!=",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address",
+ "value": "assetProxy"
+ },
+ "id": 86,
+ "name": "Identifier",
+ "src": "2514:10:2"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "type_conversion": true
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "type(address)",
+ "value": "address"
+ },
+ "id": 87,
+ "name": "ElementaryTypeNameExpression",
+ "src": "2528:7:2"
+ },
+ {
+ "attributes": {
+ "hexvalue": "30",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 0",
+ "value": "0"
+ },
+ "id": 88,
+ "name": "Literal",
+ "src": "2536:1:2"
+ }
+ ],
+ "id": 89,
+ "name": "FunctionCall",
+ "src": "2528:10:2"
+ }
+ ],
+ "id": 90,
+ "name": "BinaryOperation",
+ "src": "2514:24:2"
+ }
+ ],
+ "id": 91,
+ "name": "FunctionCall",
+ "src": "2506:33:2"
+ }
+ ],
+ "id": 92,
+ "name": "ExpressionStatement",
+ "src": "2506:33:2"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(address => bool)",
+ "value": "isAssetProxyRegistered"
+ },
+ "id": 93,
+ "name": "Identifier",
+ "src": "2553:22:2"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "assetProxy"
+ },
+ "id": 94,
+ "name": "Identifier",
+ "src": "2576:10:2"
+ }
+ ],
+ "id": 95,
+ "name": "IndexAccess",
+ "src": "2553:34:2"
+ },
+ {
+ "attributes": {
+ "hexvalue": "74727565",
+ "subdenomination": null,
+ "token": "true",
+ "type": "bool",
+ "value": "true"
+ },
+ "id": 96,
+ "name": "Literal",
+ "src": "2590:4:2"
+ }
+ ],
+ "id": 97,
+ "name": "Assignment",
+ "src": "2553:41:2"
+ }
+ ],
+ "id": 98,
+ "name": "ExpressionStatement",
+ "src": "2553:41:2"
+ }
+ ],
+ "id": 99,
+ "name": "Block",
+ "src": "2434:171:2"
+ }
+ ],
+ "id": 100,
+ "name": "ForStatement",
+ "src": "2376:229:2"
+ }
+ ],
+ "id": 101,
+ "name": "Block",
+ "src": "2366:245:2"
+ }
+ ],
+ "id": 102,
+ "name": "FunctionDefinition",
+ "src": "2097:514:2"
+ },
+ {
+ "attributes": {
+ "constant": false,
+ "name": "registerAssetProxy",
+ "payable": false,
+ "visibility": "public"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "assetProxyContract",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 103,
+ "name": "ElementaryTypeName",
+ "src": "2923:7:2"
+ }
+ ],
+ "id": 104,
+ "name": "VariableDeclaration",
+ "src": "2923:26:2"
+ },
+ {
+ "attributes": {
+ "name": "isRegistered",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "bool"
+ },
+ "id": 105,
+ "name": "ElementaryTypeName",
+ "src": "2951:4:2"
+ }
+ ],
+ "id": 106,
+ "name": "VariableDeclaration",
+ "src": "2951:17:2"
+ }
+ ],
+ "id": 107,
+ "name": "ParameterList",
+ "src": "2922:47:2"
+ },
+ {
+ "children": [],
+ "id": 113,
+ "name": "ParameterList",
+ "src": "3044:0:2"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier ()",
+ "value": "onlyWallet"
+ },
+ "id": 108,
+ "name": "Identifier",
+ "src": "2993:10:2"
+ }
+ ],
+ "id": 109,
+ "name": "ModifierInvocation",
+ "src": "2993:10:2"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (address)",
+ "value": "notNull"
+ },
+ "id": 110,
+ "name": "Identifier",
+ "src": "3012:7:2"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "assetProxyContract"
+ },
+ "id": 111,
+ "name": "Identifier",
+ "src": "3020:18:2"
+ }
+ ],
+ "id": 112,
+ "name": "ModifierInvocation",
+ "src": "3012:27:2"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(address => bool)",
+ "value": "isAssetProxyRegistered"
+ },
+ "id": 114,
+ "name": "Identifier",
+ "src": "3054:22:2"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "assetProxyContract"
+ },
+ "id": 115,
+ "name": "Identifier",
+ "src": "3077:18:2"
+ }
+ ],
+ "id": 116,
+ "name": "IndexAccess",
+ "src": "3054:42:2"
+ },
+ {
+ "attributes": {
+ "type": "bool",
+ "value": "isRegistered"
+ },
+ "id": 117,
+ "name": "Identifier",
+ "src": "3099:12:2"
+ }
+ ],
+ "id": 118,
+ "name": "Assignment",
+ "src": "3054:57:2"
+ }
+ ],
+ "id": 119,
+ "name": "ExpressionStatement",
+ "src": "3054:57:2"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (address,bool) constant",
+ "value": "AssetProxyRegistration"
+ },
+ "id": 120,
+ "name": "Identifier",
+ "src": "3121:22:2"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "assetProxyContract"
+ },
+ "id": 121,
+ "name": "Identifier",
+ "src": "3144:18:2"
+ },
+ {
+ "attributes": {
+ "type": "bool",
+ "value": "isRegistered"
+ },
+ "id": 122,
+ "name": "Identifier",
+ "src": "3164:12:2"
+ }
+ ],
+ "id": 123,
+ "name": "FunctionCall",
+ "src": "3121:56:2"
+ }
+ ],
+ "id": 124,
+ "name": "ExpressionStatement",
+ "src": "3121:56:2"
+ }
+ ],
+ "id": 125,
+ "name": "Block",
+ "src": "3044:140:2"
+ }
+ ],
+ "id": 126,
+ "name": "FunctionDefinition",
+ "src": "2895:289:2"
+ },
+ {
+ "attributes": {
+ "constant": false,
+ "name": "executeRemoveAuthorizedAddressAtIndex",
+ "payable": false,
+ "visibility": "public"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "transactionId",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint256"
+ },
+ "id": 127,
+ "name": "ElementaryTypeName",
+ "src": "3367:7:2"
+ }
+ ],
+ "id": 128,
+ "name": "VariableDeclaration",
+ "src": "3367:21:2"
+ }
+ ],
+ "id": 129,
+ "name": "ParameterList",
+ "src": "3366:23:2"
+ },
+ {
+ "children": [],
+ "id": 139,
+ "name": "ParameterList",
+ "src": "3543:0:2"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (uint256)",
+ "value": "notExecuted"
+ },
+ "id": 130,
+ "name": "Identifier",
+ "src": "3413:11:2"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 131,
+ "name": "Identifier",
+ "src": "3425:13:2"
+ }
+ ],
+ "id": 132,
+ "name": "ModifierInvocation",
+ "src": "3413:26:2"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (uint256)",
+ "value": "fullyConfirmed"
+ },
+ "id": 133,
+ "name": "Identifier",
+ "src": "3448:14:2"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 134,
+ "name": "Identifier",
+ "src": "3463:13:2"
+ }
+ ],
+ "id": 135,
+ "name": "ModifierInvocation",
+ "src": "3448:29:2"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (uint256)",
+ "value": "validRemoveAuthorizedAddressAtIndexTx"
+ },
+ "id": 136,
+ "name": "Identifier",
+ "src": "3486:37:2"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 137,
+ "name": "Identifier",
+ "src": "3524:13:2"
+ }
+ ],
+ "id": 138,
+ "name": "ModifierInvocation",
+ "src": "3486:52:2"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "tx",
+ "type": "struct MultiSigWallet.Transaction storage pointer"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "Transaction"
+ },
+ "id": 140,
+ "name": "UserDefinedTypeName",
+ "src": "3553:11:2"
+ }
+ ],
+ "id": 141,
+ "name": "VariableDeclaration",
+ "src": "3553:22:2"
+ },
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage ref"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(uint256 => struct MultiSigWallet.Transaction storage ref)",
+ "value": "transactions"
+ },
+ "id": 142,
+ "name": "Identifier",
+ "src": "3578:12:2"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 143,
+ "name": "Identifier",
+ "src": "3591:13:2"
+ }
+ ],
+ "id": 144,
+ "name": "IndexAccess",
+ "src": "3578:27:2"
+ }
+ ],
+ "id": 145,
+ "name": "VariableDeclarationStatement",
+ "src": "3553:52:2"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "member_name": "executed",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage pointer",
+ "value": "tx"
+ },
+ "id": 146,
+ "name": "Identifier",
+ "src": "3615:2:2"
+ }
+ ],
+ "id": 148,
+ "name": "MemberAccess",
+ "src": "3615:11:2"
+ },
+ {
+ "attributes": {
+ "hexvalue": "74727565",
+ "subdenomination": null,
+ "token": "true",
+ "type": "bool",
+ "value": "true"
+ },
+ "id": 149,
+ "name": "Literal",
+ "src": "3629:4:2"
+ }
+ ],
+ "id": 150,
+ "name": "Assignment",
+ "src": "3615:18:2"
+ }
+ ],
+ "id": 151,
+ "name": "ExpressionStatement",
+ "src": "3615:18:2"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "bool",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function () payable returns (bool)",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "member_name": "value",
+ "type": "function (uint256) returns (function () payable returns (bool))"
+ },
+ "children": [
+ {
+ "attributes": {
+ "member_name": "call",
+ "type": "function () payable returns (bool)"
+ },
+ "children": [
+ {
+ "attributes": {
+ "member_name": "destination",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage pointer",
+ "value": "tx"
+ },
+ "id": 152,
+ "name": "Identifier",
+ "src": "3701:2:2"
+ }
+ ],
+ "id": 153,
+ "name": "MemberAccess",
+ "src": "3701:14:2"
+ }
+ ],
+ "id": 154,
+ "name": "MemberAccess",
+ "src": "3701:19:2"
+ }
+ ],
+ "id": 155,
+ "name": "MemberAccess",
+ "src": "3701:25:2"
+ },
+ {
+ "attributes": {
+ "member_name": "value",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage pointer",
+ "value": "tx"
+ },
+ "id": 156,
+ "name": "Identifier",
+ "src": "3727:2:2"
+ }
+ ],
+ "id": 157,
+ "name": "MemberAccess",
+ "src": "3727:8:2"
+ }
+ ],
+ "id": 158,
+ "name": "FunctionCall",
+ "src": "3701:35:2"
+ },
+ {
+ "attributes": {
+ "member_name": "data",
+ "type": "bytes storage ref"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage pointer",
+ "value": "tx"
+ },
+ "id": 159,
+ "name": "Identifier",
+ "src": "3737:2:2"
+ }
+ ],
+ "id": 160,
+ "name": "MemberAccess",
+ "src": "3737:7:2"
+ }
+ ],
+ "id": 161,
+ "name": "FunctionCall",
+ "src": "3701:44:2"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (uint256) constant",
+ "value": "Execution"
+ },
+ "id": 162,
+ "name": "Identifier",
+ "src": "3759:9:2"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 163,
+ "name": "Identifier",
+ "src": "3769:13:2"
+ }
+ ],
+ "id": 164,
+ "name": "FunctionCall",
+ "src": "3759:24:2"
+ }
+ ],
+ "id": 165,
+ "name": "ExpressionStatement",
+ "src": "3759:24:2"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (uint256) constant",
+ "value": "ExecutionFailure"
+ },
+ "id": 166,
+ "name": "Identifier",
+ "src": "3812:16:2"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 167,
+ "name": "Identifier",
+ "src": "3829:13:2"
+ }
+ ],
+ "id": 168,
+ "name": "FunctionCall",
+ "src": "3812:31:2"
+ }
+ ],
+ "id": 169,
+ "name": "ExpressionStatement",
+ "src": "3812:31:2"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "member_name": "executed",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage pointer",
+ "value": "tx"
+ },
+ "id": 170,
+ "name": "Identifier",
+ "src": "3857:2:2"
+ }
+ ],
+ "id": 172,
+ "name": "MemberAccess",
+ "src": "3857:11:2"
+ },
+ {
+ "attributes": {
+ "hexvalue": "66616c7365",
+ "subdenomination": null,
+ "token": "false",
+ "type": "bool",
+ "value": "false"
+ },
+ "id": 173,
+ "name": "Literal",
+ "src": "3871:5:2"
+ }
+ ],
+ "id": 174,
+ "name": "Assignment",
+ "src": "3857:19:2"
+ }
+ ],
+ "id": 175,
+ "name": "ExpressionStatement",
+ "src": "3857:19:2"
+ }
+ ],
+ "id": 176,
+ "name": "Block",
+ "src": "3798:89:2"
+ }
+ ],
+ "id": 177,
+ "name": "IfStatement",
+ "src": "3697:190:2"
+ }
+ ],
+ "id": 178,
+ "name": "Block",
+ "src": "3543:350:2"
+ }
+ ],
+ "id": 179,
+ "name": "FunctionDefinition",
+ "src": "3320:573:2"
+ },
+ {
+ "attributes": {
+ "constant": false,
+ "name": "readBytes4",
+ "payable": false,
+ "visibility": "internal"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "b",
+ "type": "bytes memory"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "bytes"
+ },
+ "id": 180,
+ "name": "ElementaryTypeName",
+ "src": "4164:5:2"
+ }
+ ],
+ "id": 181,
+ "name": "VariableDeclaration",
+ "src": "4164:14:2"
+ },
+ {
+ "attributes": {
+ "name": "index",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint256"
+ },
+ "id": 182,
+ "name": "ElementaryTypeName",
+ "src": "4188:7:2"
+ }
+ ],
+ "id": 183,
+ "name": "VariableDeclaration",
+ "src": "4188:13:2"
+ }
+ ],
+ "id": 184,
+ "name": "ParameterList",
+ "src": "4154:53:2"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "result",
+ "type": "bytes4"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "bytes4"
+ },
+ "id": 185,
+ "name": "ElementaryTypeName",
+ "src": "4242:6:2"
+ }
+ ],
+ "id": 186,
+ "name": "VariableDeclaration",
+ "src": "4242:13:2"
+ }
+ ],
+ "id": 187,
+ "name": "ParameterList",
+ "src": "4241:15:2"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (bool)",
+ "value": "require"
+ },
+ "id": 188,
+ "name": "Identifier",
+ "src": "4271:7:2"
+ },
+ {
+ "attributes": {
+ "operator": ">=",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "member_name": "length",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "bytes memory",
+ "value": "b"
+ },
+ "id": 189,
+ "name": "Identifier",
+ "src": "4279:1:2"
+ }
+ ],
+ "id": 190,
+ "name": "MemberAccess",
+ "src": "4279:8:2"
+ },
+ {
+ "attributes": {
+ "operator": "+",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "index"
+ },
+ "id": 191,
+ "name": "Identifier",
+ "src": "4291:5:2"
+ },
+ {
+ "attributes": {
+ "hexvalue": "34",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 4",
+ "value": "4"
+ },
+ "id": 192,
+ "name": "Literal",
+ "src": "4299:1:2"
+ }
+ ],
+ "id": 193,
+ "name": "BinaryOperation",
+ "src": "4291:9:2"
+ }
+ ],
+ "id": 194,
+ "name": "BinaryOperation",
+ "src": "4279:21:2"
+ }
+ ],
+ "id": 195,
+ "name": "FunctionCall",
+ "src": "4271:30:2"
+ }
+ ],
+ "id": 196,
+ "name": "ExpressionStatement",
+ "src": "4271:30:2"
+ },
+ {
+ "children": [],
+ "id": 197,
+ "name": "InlineAssembly",
+ "src": "4311:281:2"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "bytes4",
+ "value": "result"
+ },
+ "id": 198,
+ "name": "Identifier",
+ "src": "4593:6:2"
+ }
+ ],
+ "id": 199,
+ "name": "Return",
+ "src": "4586:13:2"
+ }
+ ],
+ "id": 200,
+ "name": "Block",
+ "src": "4261:345:2"
+ }
+ ],
+ "id": 201,
+ "name": "FunctionDefinition",
+ "src": "4135:471:2"
+ }
+ ],
+ "id": 202,
+ "name": "ContractDefinition",
+ "src": "663:3945:2"
+ }
+ ],
+ "name": "SourceUnit"
+ }
}
},
"sourceCodes": {
- "current/multisig/MultiSigWallet.sol": "pragma solidity ^0.4.10;\n\n/// @title Multisignature wallet - Allows multiple parties to agree on transactions before execution.\n/// @author Stefan George - <stefan.george@consensys.net>\ncontract MultiSigWallet {\n\n uint constant public MAX_OWNER_COUNT = 50;\n\n event Confirmation(address indexed sender, uint indexed transactionId);\n event Revocation(address indexed sender, uint indexed transactionId);\n event Submission(uint indexed transactionId);\n event Execution(uint indexed transactionId);\n event ExecutionFailure(uint indexed transactionId);\n event Deposit(address indexed sender, uint value);\n event OwnerAddition(address indexed owner);\n event OwnerRemoval(address indexed owner);\n event RequirementChange(uint required);\n\n mapping (uint => Transaction) public transactions;\n mapping (uint => mapping (address => bool)) public confirmations;\n mapping (address => bool) public isOwner;\n address[] public owners;\n uint public required;\n uint public transactionCount;\n\n struct Transaction {\n address destination;\n uint value;\n bytes data;\n bool executed;\n }\n\n modifier onlyWallet() {\n if (msg.sender != address(this))\n throw;\n _;\n }\n\n modifier ownerDoesNotExist(address owner) {\n if (isOwner[owner])\n throw;\n _;\n }\n\n modifier ownerExists(address owner) {\n if (!isOwner[owner])\n throw;\n _;\n }\n\n modifier transactionExists(uint transactionId) {\n if (transactions[transactionId].destination == 0)\n throw;\n _;\n }\n\n modifier confirmed(uint transactionId, address owner) {\n if (!confirmations[transactionId][owner])\n throw;\n _;\n }\n\n modifier notConfirmed(uint transactionId, address owner) {\n if (confirmations[transactionId][owner])\n throw;\n _;\n }\n\n modifier notExecuted(uint transactionId) {\n if (transactions[transactionId].executed)\n throw;\n _;\n }\n\n modifier notNull(address _address) {\n if (_address == 0)\n throw;\n _;\n }\n\n modifier validRequirement(uint ownerCount, uint _required) {\n if ( ownerCount > MAX_OWNER_COUNT\n || _required > ownerCount\n || _required == 0\n || ownerCount == 0)\n throw;\n _;\n }\n\n /// @dev Fallback function allows to deposit ether.\n function()\n payable\n {\n if (msg.value > 0)\n Deposit(msg.sender, msg.value);\n }\n\n /*\n * Public functions\n */\n /// @dev Contract constructor sets initial owners and required number of confirmations.\n /// @param _owners List of initial owners.\n /// @param _required Number of required confirmations.\n function MultiSigWallet(address[] _owners, uint _required)\n public\n validRequirement(_owners.length, _required)\n {\n for (uint i=0; i<_owners.length; i++) {\n if (isOwner[_owners[i]] || _owners[i] == 0)\n throw;\n isOwner[_owners[i]] = true;\n }\n owners = _owners;\n required = _required;\n }\n\n /// @dev Allows to add a new owner. Transaction has to be sent by wallet.\n /// @param owner Address of new owner.\n function addOwner(address owner)\n public\n onlyWallet\n ownerDoesNotExist(owner)\n notNull(owner)\n validRequirement(owners.length + 1, required)\n {\n isOwner[owner] = true;\n owners.push(owner);\n OwnerAddition(owner);\n }\n\n /// @dev Allows to remove an owner. Transaction has to be sent by wallet.\n /// @param owner Address of owner.\n function removeOwner(address owner)\n public\n onlyWallet\n ownerExists(owner)\n {\n isOwner[owner] = false;\n for (uint i=0; i<owners.length - 1; i++)\n if (owners[i] == owner) {\n owners[i] = owners[owners.length - 1];\n break;\n }\n owners.length -= 1;\n if (required > owners.length)\n changeRequirement(owners.length);\n OwnerRemoval(owner);\n }\n\n /// @dev Allows to replace an owner with a new owner. Transaction has to be sent by wallet.\n /// @param owner Address of owner to be replaced.\n /// @param owner Address of new owner.\n function replaceOwner(address owner, address newOwner)\n public\n onlyWallet\n ownerExists(owner)\n ownerDoesNotExist(newOwner)\n {\n for (uint i=0; i<owners.length; i++)\n if (owners[i] == owner) {\n owners[i] = newOwner;\n break;\n }\n isOwner[owner] = false;\n isOwner[newOwner] = true;\n OwnerRemoval(owner);\n OwnerAddition(newOwner);\n }\n\n /// @dev Allows to change the number of required confirmations. Transaction has to be sent by wallet.\n /// @param _required Number of required confirmations.\n function changeRequirement(uint _required)\n public\n onlyWallet\n validRequirement(owners.length, _required)\n {\n required = _required;\n RequirementChange(_required);\n }\n\n /// @dev Allows an owner to submit and confirm a transaction.\n /// @param destination Transaction target address.\n /// @param value Transaction ether value.\n /// @param data Transaction data payload.\n /// @return Returns transaction ID.\n function submitTransaction(address destination, uint value, bytes data)\n public\n returns (uint transactionId)\n {\n transactionId = addTransaction(destination, value, data);\n confirmTransaction(transactionId);\n }\n\n /// @dev Allows an owner to confirm a transaction.\n /// @param transactionId Transaction ID.\n function confirmTransaction(uint transactionId)\n public\n ownerExists(msg.sender)\n transactionExists(transactionId)\n notConfirmed(transactionId, msg.sender)\n {\n confirmations[transactionId][msg.sender] = true;\n Confirmation(msg.sender, transactionId);\n executeTransaction(transactionId);\n }\n\n /// @dev Allows an owner to revoke a confirmation for a transaction.\n /// @param transactionId Transaction ID.\n function revokeConfirmation(uint transactionId)\n public\n ownerExists(msg.sender)\n confirmed(transactionId, msg.sender)\n notExecuted(transactionId)\n {\n confirmations[transactionId][msg.sender] = false;\n Revocation(msg.sender, transactionId);\n }\n\n /// @dev Allows anyone to execute a confirmed transaction.\n /// @param transactionId Transaction ID.\n function executeTransaction(uint transactionId)\n public\n notExecuted(transactionId)\n {\n if (isConfirmed(transactionId)) {\n Transaction tx = transactions[transactionId];\n tx.executed = true;\n if (tx.destination.call.value(tx.value)(tx.data))\n Execution(transactionId);\n else {\n ExecutionFailure(transactionId);\n tx.executed = false;\n }\n }\n }\n\n /// @dev Returns the confirmation status of a transaction.\n /// @param transactionId Transaction ID.\n /// @return Confirmation status.\n function isConfirmed(uint transactionId)\n public\n constant\n returns (bool)\n {\n uint count = 0;\n for (uint i=0; i<owners.length; i++) {\n if (confirmations[transactionId][owners[i]])\n count += 1;\n if (count == required)\n return true;\n }\n }\n\n /*\n * Internal functions\n */\n /// @dev Adds a new transaction to the transaction mapping, if transaction does not exist yet.\n /// @param destination Transaction target address.\n /// @param value Transaction ether value.\n /// @param data Transaction data payload.\n /// @return Returns transaction ID.\n function addTransaction(address destination, uint value, bytes data)\n internal\n notNull(destination)\n returns (uint transactionId)\n {\n transactionId = transactionCount;\n transactions[transactionId] = Transaction({\n destination: destination,\n value: value,\n data: data,\n executed: false\n });\n transactionCount += 1;\n Submission(transactionId);\n }\n\n /*\n * Web3 call functions\n */\n /// @dev Returns number of confirmations of a transaction.\n /// @param transactionId Transaction ID.\n /// @return Number of confirmations.\n function getConfirmationCount(uint transactionId)\n public\n constant\n returns (uint count)\n {\n for (uint i=0; i<owners.length; i++)\n if (confirmations[transactionId][owners[i]])\n count += 1;\n }\n\n /// @dev Returns total number of transactions after filers are applied.\n /// @param pending Include pending transactions.\n /// @param executed Include executed transactions.\n /// @return Total number of transactions after filters are applied.\n function getTransactionCount(bool pending, bool executed)\n public\n constant\n returns (uint count)\n {\n for (uint i=0; i<transactionCount; i++)\n if ( pending && !transactions[i].executed\n || executed && transactions[i].executed)\n count += 1;\n }\n\n /// @dev Returns list of owners.\n /// @return List of owner addresses.\n function getOwners()\n public\n constant\n returns (address[])\n {\n return owners;\n }\n\n /// @dev Returns array with owner addresses, which confirmed transaction.\n /// @param transactionId Transaction ID.\n /// @return Returns array of owner addresses.\n function getConfirmations(uint transactionId)\n public\n constant\n returns (address[] _confirmations)\n {\n address[] memory confirmationsTemp = new address[](owners.length);\n uint count = 0;\n uint i;\n for (i=0; i<owners.length; i++)\n if (confirmations[transactionId][owners[i]]) {\n confirmationsTemp[count] = owners[i];\n count += 1;\n }\n _confirmations = new address[](count);\n for (i=0; i<count; i++)\n _confirmations[i] = confirmationsTemp[i];\n }\n\n /// @dev Returns list of transaction IDs in defined range.\n /// @param from Index start position of transaction array.\n /// @param to Index end position of transaction array.\n /// @param pending Include pending transactions.\n /// @param executed Include executed transactions.\n /// @return Returns array of transaction IDs.\n function getTransactionIds(uint from, uint to, bool pending, bool executed)\n public\n constant\n returns (uint[] _transactionIds)\n {\n uint[] memory transactionIdsTemp = new uint[](transactionCount);\n uint count = 0;\n uint i;\n for (i=0; i<transactionCount; i++)\n if ( pending && !transactions[i].executed\n || executed && transactions[i].executed)\n {\n transactionIdsTemp[count] = i;\n count += 1;\n }\n _transactionIds = new uint[](to - from);\n for (i=from; i<to; i++)\n _transactionIds[i - from] = transactionIdsTemp[i];\n }\n}\n",
- "current/multisig/MultiSigWalletWithTimeLock.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.10;\n\nimport \"./MultiSigWallet.sol\";\n\n/// @title Multisignature wallet with time lock- Allows multiple parties to execute a transaction after a time lock has passed.\n/// @author Amir Bandeali - <amir@0xProject.com>\ncontract MultiSigWalletWithTimeLock is MultiSigWallet {\n\n event ConfirmationTimeSet(uint indexed transactionId, uint confirmationTime);\n event TimeLockChange(uint secondsTimeLocked);\n\n uint public secondsTimeLocked;\n\n mapping (uint => uint) public confirmationTimes;\n\n modifier notFullyConfirmed(uint transactionId) {\n require(!isConfirmed(transactionId));\n _;\n }\n\n modifier fullyConfirmed(uint transactionId) {\n require(isConfirmed(transactionId));\n _;\n }\n\n modifier pastTimeLock(uint transactionId) {\n require(block.timestamp >= confirmationTimes[transactionId] + secondsTimeLocked);\n _;\n }\n\n /*\n * Public functions\n */\n\n /// @dev Contract constructor sets initial owners, required number of confirmations, and time lock.\n /// @param _owners List of initial owners.\n /// @param _required Number of required confirmations.\n /// @param _secondsTimeLocked Duration needed after a transaction is confirmed and before it becomes executable, in seconds.\n function MultiSigWalletWithTimeLock(address[] _owners, uint _required, uint _secondsTimeLocked)\n public\n MultiSigWallet(_owners, _required)\n {\n secondsTimeLocked = _secondsTimeLocked;\n }\n\n /// @dev Changes the duration of the time lock for transactions.\n /// @param _secondsTimeLocked Duration needed after a transaction is confirmed and before it becomes executable, in seconds.\n function changeTimeLock(uint _secondsTimeLocked)\n public\n onlyWallet\n {\n secondsTimeLocked = _secondsTimeLocked;\n TimeLockChange(_secondsTimeLocked);\n }\n\n /// @dev Allows an owner to confirm a transaction.\n /// @param transactionId Transaction ID.\n function confirmTransaction(uint transactionId)\n public\n ownerExists(msg.sender)\n transactionExists(transactionId)\n notConfirmed(transactionId, msg.sender)\n notFullyConfirmed(transactionId)\n {\n confirmations[transactionId][msg.sender] = true;\n Confirmation(msg.sender, transactionId);\n if (isConfirmed(transactionId)) {\n setConfirmationTime(transactionId, block.timestamp);\n }\n }\n\n /// @dev Allows an owner to revoke a confirmation for a transaction.\n /// @param transactionId Transaction ID.\n function revokeConfirmation(uint transactionId)\n public\n ownerExists(msg.sender)\n confirmed(transactionId, msg.sender)\n notExecuted(transactionId)\n notFullyConfirmed(transactionId)\n {\n confirmations[transactionId][msg.sender] = false;\n Revocation(msg.sender, transactionId);\n }\n\n /// @dev Allows anyone to execute a confirmed transaction.\n /// @param transactionId Transaction ID.\n function executeTransaction(uint transactionId)\n public\n notExecuted(transactionId)\n fullyConfirmed(transactionId)\n pastTimeLock(transactionId)\n {\n Transaction storage tx = transactions[transactionId];\n tx.executed = true;\n if (tx.destination.call.value(tx.value)(tx.data))\n Execution(transactionId);\n else {\n ExecutionFailure(transactionId);\n tx.executed = false;\n }\n }\n\n /*\n * Internal functions\n */\n\n /// @dev Sets the time of when a submission first passed.\n function setConfirmationTime(uint transactionId, uint confirmationTime)\n internal\n {\n confirmationTimes[transactionId] = confirmationTime;\n ConfirmationTimeSet(transactionId, confirmationTime);\n }\n}\n",
- "current/protocol/AssetProxyOwner/AssetProxyOwner.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.10;\n\nimport \"../../multisig/MultiSigWalletWithTimeLock.sol\";\nimport \"../../utils/LibBytes/LibBytes.sol\";\n\ncontract AssetProxyOwner is\n MultiSigWalletWithTimeLock\n{\n using LibBytes for bytes;\n\n event AssetProxyRegistration(address assetProxyContract, bool isRegistered);\n\n // Mapping of AssetProxy contract address =>\n // if this contract is allowed to call the AssetProxy's `removeAuthorizedAddressAtIndex` method without a time lock.\n mapping (address => bool) public isAssetProxyRegistered;\n\n bytes4 constant REMOVE_AUTHORIZED_ADDRESS_AT_INDEX_SELECTOR = bytes4(keccak256(\"removeAuthorizedAddressAtIndex(address,uint256)\"));\n\n /// @dev Function will revert if the transaction does not call `removeAuthorizedAddressAtIndex`\n /// on an approved AssetProxy contract.\n modifier validRemoveAuthorizedAddressAtIndexTx(uint256 transactionId) {\n Transaction storage tx = transactions[transactionId];\n require(isAssetProxyRegistered[tx.destination]);\n require(tx.data.readBytes4(0) == REMOVE_AUTHORIZED_ADDRESS_AT_INDEX_SELECTOR);\n _;\n }\n\n /// @dev Contract constructor sets initial owners, required number of confirmations,\n /// time lock, and list of AssetProxy addresses.\n /// @param _owners List of initial owners.\n /// @param _assetProxyContracts Array of AssetProxy contract addresses.\n /// @param _required Number of required confirmations.\n /// @param _secondsTimeLocked Duration needed after a transaction is confirmed and before it becomes executable, in seconds.\n function AssetProxyOwner(\n address[] memory _owners,\n address[] memory _assetProxyContracts,\n uint256 _required,\n uint256 _secondsTimeLocked\n )\n public\n MultiSigWalletWithTimeLock(_owners, _required, _secondsTimeLocked)\n {\n for (uint256 i = 0; i < _assetProxyContracts.length; i++) {\n address assetProxy = _assetProxyContracts[i];\n require(assetProxy != address(0));\n isAssetProxyRegistered[assetProxy] = true;\n }\n }\n\n /// @dev Registers or deregisters an AssetProxy to be able to execute\n /// `removeAuthorizedAddressAtIndex` without a timelock.\n /// @param assetProxyContract Address of AssetProxy contract.\n /// @param isRegistered Status of approval for AssetProxy contract.\n function registerAssetProxy(address assetProxyContract, bool isRegistered)\n public\n onlyWallet\n notNull(assetProxyContract)\n {\n isAssetProxyRegistered[assetProxyContract] = isRegistered;\n AssetProxyRegistration(assetProxyContract, isRegistered);\n }\n\n /// @dev Allows execution of `removeAuthorizedAddressAtIndex` without time lock.\n /// @param transactionId Transaction ID.\n function executeRemoveAuthorizedAddressAtIndex(uint256 transactionId)\n public\n notExecuted(transactionId)\n fullyConfirmed(transactionId)\n validRemoveAuthorizedAddressAtIndexTx(transactionId)\n {\n Transaction storage tx = transactions[transactionId];\n tx.executed = true;\n if (tx.destination.call.value(tx.value)(tx.data))\n Execution(transactionId);\n else {\n ExecutionFailure(transactionId);\n tx.executed = false;\n }\n }\n}\n",
- "current/utils/LibBytes/LibBytes.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.24;\n\nlibrary LibBytes {\n\n using LibBytes for bytes;\n\n /// @dev Gets the memory address for a byte array.\n /// @param input Byte array to lookup.\n /// @return memoryAddress Memory address of byte array. This\n /// points to the header of the byte array which contains\n /// the length.\n function rawAddress(bytes memory input)\n internal\n pure\n returns (uint256 memoryAddress)\n {\n assembly {\n memoryAddress := input\n }\n return memoryAddress;\n }\n \n /// @dev Gets the memory address for the contents of a byte array.\n /// @param input Byte array to lookup.\n /// @return memoryAddress Memory address of the contents of the byte array.\n function contentAddress(bytes memory input)\n internal\n pure\n returns (uint256 memoryAddress)\n {\n assembly {\n memoryAddress := add(input, 32)\n }\n return memoryAddress;\n }\n\n /// @dev Copies `length` bytes from memory location `source` to `dest`.\n /// @param dest memory address to copy bytes to.\n /// @param source memory address to copy bytes from.\n /// @param length number of bytes to copy.\n function memCopy(\n uint256 dest,\n uint256 source,\n uint256 length\n )\n internal\n pure\n {\n if (length < 32) {\n // Handle a partial word by reading destination and masking\n // off the bits we are interested in.\n // This correctly handles overlap, zero lengths and source == dest\n assembly {\n let mask := sub(exp(256, sub(32, length)), 1)\n let s := and(mload(source), not(mask))\n let d := and(mload(dest), mask)\n mstore(dest, or(s, d))\n }\n } else {\n // Skip the O(length) loop when source == dest.\n if (source == dest) {\n return;\n }\n\n // For large copies we copy whole words at a time. The final\n // word is aligned to the end of the range (instead of after the\n // previous) to handle partial words. So a copy will look like this:\n //\n // ####\n // ####\n // ####\n // ####\n //\n // We handle overlap in the source and destination range by\n // changing the copying direction. This prevents us from\n // overwriting parts of source that we still need to copy.\n //\n // This correctly handles source == dest\n //\n if (source > dest) {\n assembly {\n // We subtract 32 from `sEnd` and `dEnd` because it\n // is easier to compare with in the loop, and these\n // are also the addresses we need for copying the\n // last bytes.\n length := sub(length, 32)\n let sEnd := add(source, length)\n let dEnd := add(dest, length)\n\n // Remember the last 32 bytes of source\n // This needs to be done here and not after the loop\n // because we may have overwritten the last bytes in\n // source already due to overlap.\n let last := mload(sEnd)\n\n // Copy whole words front to back\n // Note: the first check is always true,\n // this could have been a do-while loop.\n for {} lt(source, sEnd) {} {\n mstore(dest, mload(source))\n source := add(source, 32)\n dest := add(dest, 32)\n }\n \n // Write the last 32 bytes\n mstore(dEnd, last)\n }\n } else {\n assembly {\n // We subtract 32 from `sEnd` and `dEnd` because those\n // are the starting points when copying a word at the end.\n length := sub(length, 32)\n let sEnd := add(source, length)\n let dEnd := add(dest, length)\n\n // Remember the first 32 bytes of source\n // This needs to be done here and not after the loop\n // because we may have overwritten the first bytes in\n // source already due to overlap.\n let first := mload(source)\n\n // Copy whole words back to front\n // We use a signed comparisson here to allow dEnd to become\n // negative (happens when source and dest < 32). Valid\n // addresses in local memory will never be larger than\n // 2**255, so they can be safely re-interpreted as signed.\n // Note: the first check is always true,\n // this could have been a do-while loop.\n for {} slt(dest, dEnd) {} {\n mstore(dEnd, mload(sEnd))\n sEnd := sub(sEnd, 32)\n dEnd := sub(dEnd, 32)\n }\n \n // Write the first 32 bytes\n mstore(dest, first)\n }\n }\n }\n }\n \n /// @dev Returns a slices from a byte array.\n /// @param b The byte array to take a slice from.\n /// @param from The starting index for the slice (inclusive).\n /// @param to The final index for the slice (exclusive).\n /// @return result The slice containing bytes at indices [from, to)\n function slice(bytes memory b, uint256 from, uint256 to)\n internal\n pure\n returns (bytes memory result)\n {\n require(\n from <= to,\n \"FROM_LESS_THAN_TO_REQUIRED\"\n );\n require(\n to < b.length,\n \"TO_LESS_THAN_LENGTH_REQUIRED\"\n );\n \n // Create a new bytes structure and copy contents\n result = new bytes(to - from);\n memCopy(\n result.contentAddress(),\n b.contentAddress() + from,\n result.length);\n return result;\n }\n \n /// @dev Returns a slice from a byte array without preserving the input.\n /// @param b The byte array to take a slice from. Will be destroyed in the process.\n /// @param from The starting index for the slice (inclusive).\n /// @param to The final index for the slice (exclusive).\n /// @return result The slice containing bytes at indices [from, to)\n /// @dev When `from == 0`, the original array will match the slice. In other cases its state will be corrupted.\n function sliceDestructive(bytes memory b, uint256 from, uint256 to)\n internal\n pure\n returns (bytes memory result)\n {\n require(\n from <= to,\n \"FROM_LESS_THAN_TO_REQUIRED\"\n );\n require(\n to < b.length,\n \"TO_LESS_THAN_LENGTH_REQUIRED\"\n );\n \n // Create a new bytes structure around [from, to) in-place.\n assembly {\n result := add(b, from)\n mstore(result, sub(to, from))\n }\n return result;\n }\n\n /// @dev Pops the last byte off of a byte array by modifying its length.\n /// @param b Byte array that will be modified.\n /// @return The byte that was popped off.\n function popLastByte(bytes memory b)\n internal\n pure\n returns (bytes1 result)\n {\n require(\n b.length > 0,\n \"GREATER_THAN_ZERO_LENGTH_REQUIRED\"\n );\n\n // Store last byte.\n result = b[b.length - 1];\n\n assembly {\n // Decrement length of byte array.\n let newLen := sub(mload(b), 1)\n mstore(b, newLen)\n }\n return result;\n }\n\n /// @dev Pops the last 20 bytes off of a byte array by modifying its length.\n /// @param b Byte array that will be modified.\n /// @return The 20 byte address that was popped off.\n function popLast20Bytes(bytes memory b)\n internal\n pure\n returns (address result)\n {\n require(\n b.length >= 20,\n \"GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\"\n );\n\n // Store last 20 bytes.\n result = readAddress(b, b.length - 20);\n\n assembly {\n // Subtract 20 from byte array length.\n let newLen := sub(mload(b), 20)\n mstore(b, newLen)\n }\n return result;\n }\n\n /// @dev Tests equality of two byte arrays.\n /// @param lhs First byte array to compare.\n /// @param rhs Second byte array to compare.\n /// @return True if arrays are the same. False otherwise.\n function equals(\n bytes memory lhs,\n bytes memory rhs\n )\n internal\n pure\n returns (bool equal)\n {\n // Keccak gas cost is 30 + numWords * 6. This is a cheap way to compare.\n // We early exit on unequal lengths, but keccak would also correctly\n // handle this.\n return lhs.length == rhs.length && keccak256(lhs) == keccak256(rhs);\n }\n\n /// @dev Reads an address from a position in a byte array.\n /// @param b Byte array containing an address.\n /// @param index Index in byte array of address.\n /// @return address from byte array.\n function readAddress(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (address result)\n {\n require(\n b.length >= index + 20, // 20 is length of address\n \"GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\"\n );\n\n // Add offset to index:\n // 1. Arrays are prefixed by 32-byte length parameter (add 32 to index)\n // 2. Account for size difference between address length and 32-byte storage word (subtract 12 from index)\n index += 20;\n\n // Read address from array memory\n assembly {\n // 1. Add index to address of bytes array\n // 2. Load 32-byte word from memory\n // 3. Apply 20-byte mask to obtain address\n result := and(mload(add(b, index)), 0xffffffffffffffffffffffffffffffffffffffff)\n }\n return result;\n }\n\n /// @dev Writes an address into a specific position in a byte array.\n /// @param b Byte array to insert address into.\n /// @param index Index in byte array of address.\n /// @param input Address to put into byte array.\n function writeAddress(\n bytes memory b,\n uint256 index,\n address input\n )\n internal\n pure\n {\n require(\n b.length >= index + 20, // 20 is length of address\n \"GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\"\n );\n\n // Add offset to index:\n // 1. Arrays are prefixed by 32-byte length parameter (add 32 to index)\n // 2. Account for size difference between address length and 32-byte storage word (subtract 12 from index)\n index += 20;\n\n // Store address into array memory\n assembly {\n // The address occupies 20 bytes and mstore stores 32 bytes.\n // First fetch the 32-byte word where we'll be storing the address, then\n // apply a mask so we have only the bytes in the word that the address will not occupy.\n // Then combine these bytes with the address and store the 32 bytes back to memory with mstore.\n\n // 1. Add index to address of bytes array\n // 2. Load 32-byte word from memory\n // 3. Apply 12-byte mask to obtain extra bytes occupying word of memory where we'll store the address\n let neighbors := and(mload(add(b, index)), 0xffffffffffffffffffffffff0000000000000000000000000000000000000000)\n \n // Make sure input address is clean.\n // (Solidity does not guarantee this)\n input := and(input, 0xffffffffffffffffffffffffffffffffffffffff)\n\n // Store the neighbors and address into memory\n mstore(add(b, index), xor(input, neighbors))\n }\n }\n\n /// @dev Reads a bytes32 value from a position in a byte array.\n /// @param b Byte array containing a bytes32 value.\n /// @param index Index in byte array of bytes32 value.\n /// @return bytes32 value from byte array.\n function readBytes32(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (bytes32 result)\n {\n require(\n b.length >= index + 32,\n \"GREATER_OR_EQUAL_TO_32_LENGTH_REQUIRED\"\n );\n\n // Arrays are prefixed by a 256 bit length parameter\n index += 32;\n\n // Read the bytes32 from array memory\n assembly {\n result := mload(add(b, index))\n }\n return result;\n }\n\n /// @dev Writes a bytes32 into a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input bytes32 to put into byte array.\n function writeBytes32(\n bytes memory b,\n uint256 index,\n bytes32 input\n )\n internal\n pure\n {\n require(\n b.length >= index + 32,\n \"GREATER_OR_EQUAL_TO_32_LENGTH_REQUIRED\"\n );\n\n // Arrays are prefixed by a 256 bit length parameter\n index += 32;\n\n // Read the bytes32 from array memory\n assembly {\n mstore(add(b, index), input)\n }\n }\n\n /// @dev Reads a uint256 value from a position in a byte array.\n /// @param b Byte array containing a uint256 value.\n /// @param index Index in byte array of uint256 value.\n /// @return uint256 value from byte array.\n function readUint256(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (uint256 result)\n {\n return uint256(readBytes32(b, index));\n }\n\n /// @dev Writes a uint256 into a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input uint256 to put into byte array.\n function writeUint256(\n bytes memory b,\n uint256 index,\n uint256 input\n )\n internal\n pure\n {\n writeBytes32(b, index, bytes32(input));\n }\n\n /// @dev Reads an unpadded bytes4 value from a position in a byte array.\n /// @param b Byte array containing a bytes4 value.\n /// @param index Index in byte array of bytes4 value.\n /// @return bytes4 value from byte array.\n function readBytes4(\n bytes memory b,\n uint256 index)\n internal\n pure\n returns (bytes4 result)\n {\n require(\n b.length >= index + 4,\n \"GREATER_OR_EQUAL_TO_4_LENGTH_REQUIRED\"\n );\n assembly {\n result := mload(add(b, 32))\n // Solidity does not require us to clean the trailing bytes.\n // We do it anyway\n result := and(result, 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000)\n }\n return result;\n }\n\n /// @dev Reads nested bytes from a specific position.\n /// @dev NOTE: the returned value overlaps with the input value.\n /// Both should be treated as immutable.\n /// @param b Byte array containing nested bytes.\n /// @param index Index of nested bytes.\n /// @return result Nested bytes.\n function readBytesWithLength(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (bytes memory result)\n {\n // Read length of nested bytes\n uint256 nestedBytesLength = readUint256(b, index);\n index += 32;\n\n // Assert length of <b> is valid, given\n // length of nested bytes\n require(\n b.length >= index + nestedBytesLength,\n \"GREATER_OR_EQUAL_TO_NESTED_BYTES_LENGTH_REQUIRED\"\n );\n \n // Return a pointer to the byte array as it exists inside `b`\n assembly {\n result := add(b, index)\n }\n return result;\n }\n\n /// @dev Inserts bytes at a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input bytes to insert.\n function writeBytesWithLength(\n bytes memory b,\n uint256 index,\n bytes memory input\n )\n internal\n pure\n {\n // Assert length of <b> is valid, given\n // length of input\n require(\n b.length >= index + 32 /* 32 bytes to store length */ + input.length,\n \"GREATER_OR_EQUAL_TO_NESTED_BYTES_LENGTH_REQUIRED\"\n );\n\n // Copy <input> into <b>\n memCopy(\n b.contentAddress() + index,\n input.rawAddress(), // includes length of <input>\n input.length + 32 // +32 bytes to store <input> length\n );\n }\n\n /// @dev Performs a deep copy of a byte array onto another byte array of greater than or equal length.\n /// @param dest Byte array that will be overwritten with source bytes.\n /// @param source Byte array to copy onto dest bytes.\n function deepCopyBytes(\n bytes memory dest,\n bytes memory source\n )\n internal\n pure\n {\n uint256 sourceLen = source.length;\n // Dest length must be >= source length, or some bytes would not be copied.\n require(\n dest.length >= sourceLen,\n \"GREATER_OR_EQUAL_TO_SOURCE_BYTES_LENGTH_REQUIRED\"\n );\n memCopy(\n dest.contentAddress(),\n source.contentAddress(),\n sourceLen\n );\n }\n}\n"
+ "2.0.0/multisig/MultiSigWallet.sol": "// solhint-disable\npragma solidity ^0.4.10;\n\n\n/// @title Multisignature wallet - Allows multiple parties to agree on transactions before execution.\n/// @author Stefan George - <stefan.george@consensys.net>\ncontract MultiSigWallet {\n\n uint constant public MAX_OWNER_COUNT = 50;\n\n event Confirmation(address indexed sender, uint indexed transactionId);\n event Revocation(address indexed sender, uint indexed transactionId);\n event Submission(uint indexed transactionId);\n event Execution(uint indexed transactionId);\n event ExecutionFailure(uint indexed transactionId);\n event Deposit(address indexed sender, uint value);\n event OwnerAddition(address indexed owner);\n event OwnerRemoval(address indexed owner);\n event RequirementChange(uint required);\n\n mapping (uint => Transaction) public transactions;\n mapping (uint => mapping (address => bool)) public confirmations;\n mapping (address => bool) public isOwner;\n address[] public owners;\n uint public required;\n uint public transactionCount;\n\n struct Transaction {\n address destination;\n uint value;\n bytes data;\n bool executed;\n }\n\n modifier onlyWallet() {\n if (msg.sender != address(this))\n throw;\n _;\n }\n\n modifier ownerDoesNotExist(address owner) {\n if (isOwner[owner])\n throw;\n _;\n }\n\n modifier ownerExists(address owner) {\n if (!isOwner[owner])\n throw;\n _;\n }\n\n modifier transactionExists(uint transactionId) {\n if (transactions[transactionId].destination == 0)\n throw;\n _;\n }\n\n modifier confirmed(uint transactionId, address owner) {\n if (!confirmations[transactionId][owner])\n throw;\n _;\n }\n\n modifier notConfirmed(uint transactionId, address owner) {\n if (confirmations[transactionId][owner])\n throw;\n _;\n }\n\n modifier notExecuted(uint transactionId) {\n if (transactions[transactionId].executed)\n throw;\n _;\n }\n\n modifier notNull(address _address) {\n if (_address == 0)\n throw;\n _;\n }\n\n modifier validRequirement(uint ownerCount, uint _required) {\n if ( ownerCount > MAX_OWNER_COUNT\n || _required > ownerCount\n || _required == 0\n || ownerCount == 0)\n throw;\n _;\n }\n\n /// @dev Fallback function allows to deposit ether.\n function()\n payable\n {\n if (msg.value > 0)\n Deposit(msg.sender, msg.value);\n }\n\n /*\n * Public functions\n */\n /// @dev Contract constructor sets initial owners and required number of confirmations.\n /// @param _owners List of initial owners.\n /// @param _required Number of required confirmations.\n function MultiSigWallet(address[] _owners, uint _required)\n public\n validRequirement(_owners.length, _required)\n {\n for (uint i=0; i<_owners.length; i++) {\n if (isOwner[_owners[i]] || _owners[i] == 0)\n throw;\n isOwner[_owners[i]] = true;\n }\n owners = _owners;\n required = _required;\n }\n\n /// @dev Allows to add a new owner. Transaction has to be sent by wallet.\n /// @param owner Address of new owner.\n function addOwner(address owner)\n public\n onlyWallet\n ownerDoesNotExist(owner)\n notNull(owner)\n validRequirement(owners.length + 1, required)\n {\n isOwner[owner] = true;\n owners.push(owner);\n OwnerAddition(owner);\n }\n\n /// @dev Allows to remove an owner. Transaction has to be sent by wallet.\n /// @param owner Address of owner.\n function removeOwner(address owner)\n public\n onlyWallet\n ownerExists(owner)\n {\n isOwner[owner] = false;\n for (uint i=0; i<owners.length - 1; i++)\n if (owners[i] == owner) {\n owners[i] = owners[owners.length - 1];\n break;\n }\n owners.length -= 1;\n if (required > owners.length)\n changeRequirement(owners.length);\n OwnerRemoval(owner);\n }\n\n /// @dev Allows to replace an owner with a new owner. Transaction has to be sent by wallet.\n /// @param owner Address of owner to be replaced.\n /// @param owner Address of new owner.\n function replaceOwner(address owner, address newOwner)\n public\n onlyWallet\n ownerExists(owner)\n ownerDoesNotExist(newOwner)\n {\n for (uint i=0; i<owners.length; i++)\n if (owners[i] == owner) {\n owners[i] = newOwner;\n break;\n }\n isOwner[owner] = false;\n isOwner[newOwner] = true;\n OwnerRemoval(owner);\n OwnerAddition(newOwner);\n }\n\n /// @dev Allows to change the number of required confirmations. Transaction has to be sent by wallet.\n /// @param _required Number of required confirmations.\n function changeRequirement(uint _required)\n public\n onlyWallet\n validRequirement(owners.length, _required)\n {\n required = _required;\n RequirementChange(_required);\n }\n\n /// @dev Allows an owner to submit and confirm a transaction.\n /// @param destination Transaction target address.\n /// @param value Transaction ether value.\n /// @param data Transaction data payload.\n /// @return Returns transaction ID.\n function submitTransaction(address destination, uint value, bytes data)\n public\n returns (uint transactionId)\n {\n transactionId = addTransaction(destination, value, data);\n confirmTransaction(transactionId);\n }\n\n /// @dev Allows an owner to confirm a transaction.\n /// @param transactionId Transaction ID.\n function confirmTransaction(uint transactionId)\n public\n ownerExists(msg.sender)\n transactionExists(transactionId)\n notConfirmed(transactionId, msg.sender)\n {\n confirmations[transactionId][msg.sender] = true;\n Confirmation(msg.sender, transactionId);\n executeTransaction(transactionId);\n }\n\n /// @dev Allows an owner to revoke a confirmation for a transaction.\n /// @param transactionId Transaction ID.\n function revokeConfirmation(uint transactionId)\n public\n ownerExists(msg.sender)\n confirmed(transactionId, msg.sender)\n notExecuted(transactionId)\n {\n confirmations[transactionId][msg.sender] = false;\n Revocation(msg.sender, transactionId);\n }\n\n /// @dev Allows anyone to execute a confirmed transaction.\n /// @param transactionId Transaction ID.\n function executeTransaction(uint transactionId)\n public\n notExecuted(transactionId)\n {\n if (isConfirmed(transactionId)) {\n Transaction tx = transactions[transactionId];\n tx.executed = true;\n if (tx.destination.call.value(tx.value)(tx.data))\n Execution(transactionId);\n else {\n ExecutionFailure(transactionId);\n tx.executed = false;\n }\n }\n }\n\n /// @dev Returns the confirmation status of a transaction.\n /// @param transactionId Transaction ID.\n /// @return Confirmation status.\n function isConfirmed(uint transactionId)\n public\n constant\n returns (bool)\n {\n uint count = 0;\n for (uint i=0; i<owners.length; i++) {\n if (confirmations[transactionId][owners[i]])\n count += 1;\n if (count == required)\n return true;\n }\n }\n\n /*\n * Internal functions\n */\n /// @dev Adds a new transaction to the transaction mapping, if transaction does not exist yet.\n /// @param destination Transaction target address.\n /// @param value Transaction ether value.\n /// @param data Transaction data payload.\n /// @return Returns transaction ID.\n function addTransaction(address destination, uint value, bytes data)\n internal\n notNull(destination)\n returns (uint transactionId)\n {\n transactionId = transactionCount;\n transactions[transactionId] = Transaction({\n destination: destination,\n value: value,\n data: data,\n executed: false\n });\n transactionCount += 1;\n Submission(transactionId);\n }\n\n /*\n * Web3 call functions\n */\n /// @dev Returns number of confirmations of a transaction.\n /// @param transactionId Transaction ID.\n /// @return Number of confirmations.\n function getConfirmationCount(uint transactionId)\n public\n constant\n returns (uint count)\n {\n for (uint i=0; i<owners.length; i++)\n if (confirmations[transactionId][owners[i]])\n count += 1;\n }\n\n /// @dev Returns total number of transactions after filers are applied.\n /// @param pending Include pending transactions.\n /// @param executed Include executed transactions.\n /// @return Total number of transactions after filters are applied.\n function getTransactionCount(bool pending, bool executed)\n public\n constant\n returns (uint count)\n {\n for (uint i=0; i<transactionCount; i++)\n if ( pending && !transactions[i].executed\n || executed && transactions[i].executed)\n count += 1;\n }\n\n /// @dev Returns list of owners.\n /// @return List of owner addresses.\n function getOwners()\n public\n constant\n returns (address[])\n {\n return owners;\n }\n\n /// @dev Returns array with owner addresses, which confirmed transaction.\n /// @param transactionId Transaction ID.\n /// @return Returns array of owner addresses.\n function getConfirmations(uint transactionId)\n public\n constant\n returns (address[] _confirmations)\n {\n address[] memory confirmationsTemp = new address[](owners.length);\n uint count = 0;\n uint i;\n for (i=0; i<owners.length; i++)\n if (confirmations[transactionId][owners[i]]) {\n confirmationsTemp[count] = owners[i];\n count += 1;\n }\n _confirmations = new address[](count);\n for (i=0; i<count; i++)\n _confirmations[i] = confirmationsTemp[i];\n }\n\n /// @dev Returns list of transaction IDs in defined range.\n /// @param from Index start position of transaction array.\n /// @param to Index end position of transaction array.\n /// @param pending Include pending transactions.\n /// @param executed Include executed transactions.\n /// @return Returns array of transaction IDs.\n function getTransactionIds(uint from, uint to, bool pending, bool executed)\n public\n constant\n returns (uint[] _transactionIds)\n {\n uint[] memory transactionIdsTemp = new uint[](transactionCount);\n uint count = 0;\n uint i;\n for (i=0; i<transactionCount; i++)\n if ( pending && !transactions[i].executed\n || executed && transactions[i].executed)\n {\n transactionIdsTemp[count] = i;\n count += 1;\n }\n _transactionIds = new uint[](to - from);\n for (i=from; i<to; i++)\n _transactionIds[i - from] = transactionIdsTemp[i];\n }\n}\n",
+ "2.0.0/multisig/MultiSigWalletWithTimeLock.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\n// solhint-disable\npragma solidity ^0.4.10;\n\nimport \"./MultiSigWallet.sol\";\n\n\n/// @title Multisignature wallet with time lock- Allows multiple parties to execute a transaction after a time lock has passed.\n/// @author Amir Bandeali - <amir@0xProject.com>\ncontract MultiSigWalletWithTimeLock is MultiSigWallet {\n\n event ConfirmationTimeSet(uint indexed transactionId, uint confirmationTime);\n event TimeLockChange(uint secondsTimeLocked);\n\n uint public secondsTimeLocked;\n\n mapping (uint => uint) public confirmationTimes;\n\n modifier notFullyConfirmed(uint transactionId) {\n require(!isConfirmed(transactionId));\n _;\n }\n\n modifier fullyConfirmed(uint transactionId) {\n require(isConfirmed(transactionId));\n _;\n }\n\n modifier pastTimeLock(uint transactionId) {\n require(block.timestamp >= confirmationTimes[transactionId] + secondsTimeLocked);\n _;\n }\n\n /*\n * Public functions\n */\n\n /// @dev Contract constructor sets initial owners, required number of confirmations, and time lock.\n /// @param _owners List of initial owners.\n /// @param _required Number of required confirmations.\n /// @param _secondsTimeLocked Duration needed after a transaction is confirmed and before it becomes executable, in seconds.\n function MultiSigWalletWithTimeLock(address[] _owners, uint _required, uint _secondsTimeLocked)\n public\n MultiSigWallet(_owners, _required)\n {\n secondsTimeLocked = _secondsTimeLocked;\n }\n\n /// @dev Changes the duration of the time lock for transactions.\n /// @param _secondsTimeLocked Duration needed after a transaction is confirmed and before it becomes executable, in seconds.\n function changeTimeLock(uint _secondsTimeLocked)\n public\n onlyWallet\n {\n secondsTimeLocked = _secondsTimeLocked;\n TimeLockChange(_secondsTimeLocked);\n }\n\n /// @dev Allows an owner to confirm a transaction.\n /// @param transactionId Transaction ID.\n function confirmTransaction(uint transactionId)\n public\n ownerExists(msg.sender)\n transactionExists(transactionId)\n notConfirmed(transactionId, msg.sender)\n notFullyConfirmed(transactionId)\n {\n confirmations[transactionId][msg.sender] = true;\n Confirmation(msg.sender, transactionId);\n if (isConfirmed(transactionId)) {\n setConfirmationTime(transactionId, block.timestamp);\n }\n }\n\n /// @dev Allows an owner to revoke a confirmation for a transaction.\n /// @param transactionId Transaction ID.\n function revokeConfirmation(uint transactionId)\n public\n ownerExists(msg.sender)\n confirmed(transactionId, msg.sender)\n notExecuted(transactionId)\n notFullyConfirmed(transactionId)\n {\n confirmations[transactionId][msg.sender] = false;\n Revocation(msg.sender, transactionId);\n }\n\n /// @dev Allows anyone to execute a confirmed transaction.\n /// @param transactionId Transaction ID.\n function executeTransaction(uint transactionId)\n public\n notExecuted(transactionId)\n fullyConfirmed(transactionId)\n pastTimeLock(transactionId)\n {\n Transaction storage tx = transactions[transactionId];\n tx.executed = true;\n if (tx.destination.call.value(tx.value)(tx.data))\n Execution(transactionId);\n else {\n ExecutionFailure(transactionId);\n tx.executed = false;\n }\n }\n\n /*\n * Internal functions\n */\n\n /// @dev Sets the time of when a submission first passed.\n function setConfirmationTime(uint transactionId, uint confirmationTime)\n internal\n {\n confirmationTimes[transactionId] = confirmationTime;\n ConfirmationTimeSet(transactionId, confirmationTime);\n }\n}\n",
+ "2.0.0/protocol/AssetProxyOwner/AssetProxyOwner.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.10;\n\nimport \"../../multisig/MultiSigWalletWithTimeLock.sol\";\n\n\ncontract AssetProxyOwner is\n MultiSigWalletWithTimeLock\n{\n\n event AssetProxyRegistration(address assetProxyContract, bool isRegistered);\n\n // Mapping of AssetProxy contract address =>\n // if this contract is allowed to call the AssetProxy's `removeAuthorizedAddressAtIndex` method without a time lock.\n mapping (address => bool) public isAssetProxyRegistered;\n\n bytes4 constant internal REMOVE_AUTHORIZED_ADDRESS_AT_INDEX_SELECTOR = bytes4(keccak256(\"removeAuthorizedAddressAtIndex(address,uint256)\"));\n\n /// @dev Function will revert if the transaction does not call `removeAuthorizedAddressAtIndex`\n /// on an approved AssetProxy contract.\n modifier validRemoveAuthorizedAddressAtIndexTx(uint256 transactionId) {\n Transaction storage tx = transactions[transactionId];\n require(isAssetProxyRegistered[tx.destination]);\n require(readBytes4(tx.data, 0) == REMOVE_AUTHORIZED_ADDRESS_AT_INDEX_SELECTOR);\n _;\n }\n\n /// @dev Contract constructor sets initial owners, required number of confirmations,\n /// time lock, and list of AssetProxy addresses.\n /// @param _owners List of initial owners.\n /// @param _assetProxyContracts Array of AssetProxy contract addresses.\n /// @param _required Number of required confirmations.\n /// @param _secondsTimeLocked Duration needed after a transaction is confirmed and before it becomes executable, in seconds.\n function AssetProxyOwner(\n address[] memory _owners,\n address[] memory _assetProxyContracts,\n uint256 _required,\n uint256 _secondsTimeLocked\n )\n public\n MultiSigWalletWithTimeLock(_owners, _required, _secondsTimeLocked)\n {\n for (uint256 i = 0; i < _assetProxyContracts.length; i++) {\n address assetProxy = _assetProxyContracts[i];\n require(assetProxy != address(0));\n isAssetProxyRegistered[assetProxy] = true;\n }\n }\n\n /// @dev Registers or deregisters an AssetProxy to be able to execute\n /// `removeAuthorizedAddressAtIndex` without a timelock.\n /// @param assetProxyContract Address of AssetProxy contract.\n /// @param isRegistered Status of approval for AssetProxy contract.\n function registerAssetProxy(address assetProxyContract, bool isRegistered)\n public\n onlyWallet\n notNull(assetProxyContract)\n {\n isAssetProxyRegistered[assetProxyContract] = isRegistered;\n AssetProxyRegistration(assetProxyContract, isRegistered);\n }\n\n /// @dev Allows execution of `removeAuthorizedAddressAtIndex` without time lock.\n /// @param transactionId Transaction ID.\n function executeRemoveAuthorizedAddressAtIndex(uint256 transactionId)\n public\n notExecuted(transactionId)\n fullyConfirmed(transactionId)\n validRemoveAuthorizedAddressAtIndexTx(transactionId)\n {\n Transaction storage tx = transactions[transactionId];\n tx.executed = true;\n // solhint-disable-next-line avoid-call-value\n if (tx.destination.call.value(tx.value)(tx.data))\n Execution(transactionId);\n else {\n ExecutionFailure(transactionId);\n tx.executed = false;\n }\n }\n\n /// @dev Reads an unpadded bytes4 value from a position in a byte array.\n /// @param b Byte array containing a bytes4 value.\n /// @param index Index in byte array of bytes4 value.\n /// @return bytes4 value from byte array.\n function readBytes4(\n bytes memory b,\n uint256 index\n )\n internal\n returns (bytes4 result)\n {\n require(b.length >= index + 4);\n assembly {\n result := mload(add(b, 32))\n // Solidity does not require us to clean the trailing bytes.\n // We do it anyway\n result := and(result, 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000)\n }\n return result;\n }\n}\n"
},
- "sourceTreeHashHex": "0xe5613f4d434ef18ffc629ab8b6b1b41598e5a61b66374bcef7e0e215583379b8",
+ "sourceTreeHashHex": "0x8c882ef490c011257c7406ca74aba8787c3f078c7c628553e046883c81244681",
"compiler": {
"name": "solc",
- "version": "soljson-v0.4.24+commit.e67f0147.js",
+ "version": "soljson-v0.4.10+commit.f0d539ae.js",
"settings": {
"optimizer": {
"enabled": true,
diff --git a/packages/migrations/artifacts/2.0.0/DummyERC20Token.json b/packages/migrations/artifacts/2.0.0/DummyERC20Token.json
index 23d81852c..287f95c61 100644
--- a/packages/migrations/artifacts/2.0.0/DummyERC20Token.json
+++ b/packages/migrations/artifacts/2.0.0/DummyERC20Token.json
@@ -305,55 +305,55 @@
"evm": {
"bytecode": {
"linkReferences": {},
- "object": "0x60806040523480156200001157600080fd5b5060405162001134380380620011348339810180604052620000379190810190620001af565b60038054600160a060020a0319163317905583516200005e90600490602087019062000099565b5082516200007490600590602086019062000099565b5060069190915560028190553360009081526020819052604090205550620002ca9050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620000dc57805160ff19168380011785556200010c565b828001600101855582156200010c579182015b828111156200010c578251825591602001919060010190620000ef565b506200011a9291506200011e565b5090565b6200013b91905b808211156200011a576000815560010162000125565b90565b6000601f820183136200015057600080fd5b81516200016762000161826200026f565b62000248565b915080825260208301602083018583830111156200018457600080fd5b6200019183828462000297565b50505092915050565b6000620001a882516200013b565b9392505050565b60008060008060808587031215620001c657600080fd5b84516001604060020a03811115620001dd57600080fd5b620001eb878288016200013e565b94505060208501516001604060020a038111156200020857600080fd5b62000216878288016200013e565b935050604062000229878288016200019a565b92505060606200023c878288016200019a565b91505092959194509250565b6040518181016001604060020a03811182821017156200026757600080fd5b604052919050565b60006001604060020a038211156200028657600080fd5b506020601f91909101601f19160190565b60005b83811015620002b45781810151838201526020016200029a565b83811115620002c4576000848401525b50505050565b610e5a80620002da6000396000f3006080604052600436106100c45763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde0381146100c9578063095ea7b3146100f457806318160ddd1461012157806323b872dd14610143578063313ce5671461016357806370a08231146101785780638da5cb5b1461019857806395d89b41146101ba578063a0712d68146101cf578063a9059cbb146101f1578063dd62ed3e14610211578063e30443bc14610231578063f2fde38b14610251575b600080fd5b3480156100d557600080fd5b506100de610271565b6040516100eb9190610d64565b60405180910390f35b34801561010057600080fd5b5061011461010f366004610c1e565b61031d565b6040516100eb9190610d56565b34801561012d57600080fd5b50610136610395565b6040516100eb9190610d95565b34801561014f57600080fd5b5061011461015e366004610bd1565b61039b565b34801561016f57600080fd5b5061013661068e565b34801561018457600080fd5b50610136610193366004610b71565b610694565b3480156101a457600080fd5b506101ad6106bc565b6040516100eb9190610d48565b3480156101c657600080fd5b506100de6106d8565b3480156101db57600080fd5b506101ef6101ea366004610c4e565b610751565b005b3480156101fd57600080fd5b5061011461020c366004610c1e565b6107d2565b34801561021d57600080fd5b5061013661022c366004610b97565b610981565b34801561023d57600080fd5b506101ef61024c366004610c1e565b6109b9565b34801561025d57600080fd5b506101ef61026c366004610b71565b610a80565b6004805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156103155780601f106102ea57610100808354040283529160200191610315565b820191906000526020600020905b8154815290600101906020018083116102f857829003601f168201915b505050505081565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610383908690610d95565b60405180910390a35060015b92915050565b60025481565b73ffffffffffffffffffffffffffffffffffffffff83166000818152600160209081526040808320338452825280832054938352828252808320548151808301909252601a82527f45524332305f494e53554646494349454e545f42414c414e43450000000000009282019290925291929190841115610451576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104489190610d64565b60405180910390fd5b5060408051808201909152601c81527f45524332305f494e53554646494349454e545f414c4c4f57414e4345000000006020820152838210156104c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104489190610d64565b5073ffffffffffffffffffffffffffffffffffffffff841660009081526020818152604091829020548251606081018452602581527f5472616e7366657220776f756c6420726573756c7420696e20616e206f766572928101929092527f666c6f772e00000000000000000000000000000000000000000000000000000092820192909252908481011015610583576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104489190610d64565b5073ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220805487019055918716815220805484900390557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81101561061e5773ffffffffffffffffffffffffffffffffffffffff851660009081526001602090815260408083203384529091529020805484900390555b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161067b9190610d95565b60405180910390a3506001949350505050565b60065481565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b60035473ffffffffffffffffffffffffffffffffffffffff1681565b6005805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156103155780601f106102ea57610100808354040283529160200191610315565b68056bc75e2d63100000811115610794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044890610d75565b336000908152602081905260409020546107af908290610b31565b336000908152602081905260409020556002546107cc9082610b31565b60025550565b33600090815260208181526040808320548151808301909252601a82527f45524332305f494e53554646494349454e545f42414c414e43450000000000009282019290925290831115610852576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104489190610d64565b5073ffffffffffffffffffffffffffffffffffffffff831660009081526020818152604091829020548251606081018452602581527f5472616e7366657220776f756c6420726573756c7420696e20616e206f766572928101929092527f666c6f772e00000000000000000000000000000000000000000000000000000092820192909252908381011015610914576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104489190610d64565b50336000818152602081905260408082208054869003905573ffffffffffffffffffffffffffffffffffffffff861680835291819020805486019055519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610383908690610d95565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60035460009073ffffffffffffffffffffffffffffffffffffffff163314610a0d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044890610d85565b610a1683610694565b905080821015610a3d57610a35600254610a308385610b47565b610b47565b600255610a56565b610a52600254610a4d8484610b47565b610b31565b6002555b5073ffffffffffffffffffffffffffffffffffffffff909116600090815260208190526040902055565b60035473ffffffffffffffffffffffffffffffffffffffff163314610ad1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044890610d85565b73ffffffffffffffffffffffffffffffffffffffff811615610b2e57600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b600082820183811015610b4057fe5b9392505050565b600082821115610b5357fe5b50900390565b6000610b408235610da7565b6000610b408235610dc5565b600060208284031215610b8357600080fd5b6000610b8f8484610b59565b949350505050565b60008060408385031215610baa57600080fd5b6000610bb68585610b59565b9250506020610bc785828601610b59565b9150509250929050565b600080600060608486031215610be657600080fd5b6000610bf28686610b59565b9350506020610c0386828701610b59565b9250506040610c1486828701610b65565b9150509250925092565b60008060408385031215610c3157600080fd5b6000610c3d8585610b59565b9250506020610bc785828601610b65565b600060208284031215610c6057600080fd5b6000610b8f8484610b65565b610c7581610da7565b82525050565b610c7581610dc0565b6000610c8f82610da3565b808452610ca3816020860160208601610dc8565b610cac81610df8565b9093016020019392505050565b603781527f4d696e74696e67206d6f7265207468616e20313030303030303030303030303060208201527f30303030303030206973206e6f7420616c6c6f7765642e000000000000000000604082015260600190565b601381527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000602082015260400190565b610c7581610dc5565b6020810161038f8284610c6c565b6020810161038f8284610c7b565b60208082528101610b408184610c84565b6020808252810161038f81610cb9565b6020808252810161038f81610d0f565b6020810161038f8284610d3f565b5190565b73ffffffffffffffffffffffffffffffffffffffff1690565b151590565b90565b60005b83811015610de3578181015183820152602001610dcb565b83811115610df2576000848401525b50505050565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016905600a265627a7a72305820eed0877f363d4c20e5997a53da4aaa7f15791ffb69987a7de0ba30099427a8f26c6578706572696d656e74616cf50037",
- "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x1134 CODESIZE SUB DUP1 PUSH3 0x1134 DUP4 CODECOPY DUP2 ADD DUP1 PUSH1 0x40 MSTORE PUSH3 0x37 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH3 0x1AF JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB NOT AND CALLER OR SWAP1 SSTORE DUP4 MLOAD PUSH3 0x5E SWAP1 PUSH1 0x4 SWAP1 PUSH1 0x20 DUP8 ADD SWAP1 PUSH3 0x99 JUMP JUMPDEST POP DUP3 MLOAD PUSH3 0x74 SWAP1 PUSH1 0x5 SWAP1 PUSH1 0x20 DUP7 ADD SWAP1 PUSH3 0x99 JUMP JUMPDEST POP PUSH1 0x6 SWAP2 SWAP1 SWAP2 SSTORE PUSH1 0x2 DUP2 SWAP1 SSTORE CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE POP PUSH3 0x2CA SWAP1 POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH3 0xDC JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x10C JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x10C JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x10C JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0xEF JUMP JUMPDEST POP PUSH3 0x11A SWAP3 SWAP2 POP PUSH3 0x11E JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH3 0x13B SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x11A JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x125 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH3 0x150 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x167 PUSH3 0x161 DUP3 PUSH3 0x26F JUMP JUMPDEST PUSH3 0x248 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP4 ADD DUP6 DUP4 DUP4 ADD GT ISZERO PUSH3 0x184 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x191 DUP4 DUP3 DUP5 PUSH3 0x297 JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0x1A8 DUP3 MLOAD PUSH3 0x13B JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH3 0x1C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 MLOAD PUSH1 0x1 PUSH1 0x40 PUSH1 0x2 EXP SUB DUP2 GT ISZERO PUSH3 0x1DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x1EB DUP8 DUP3 DUP9 ADD PUSH3 0x13E JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 DUP6 ADD MLOAD PUSH1 0x1 PUSH1 0x40 PUSH1 0x2 EXP SUB DUP2 GT ISZERO PUSH3 0x208 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x216 DUP8 DUP3 DUP9 ADD PUSH3 0x13E JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 PUSH3 0x229 DUP8 DUP3 DUP9 ADD PUSH3 0x19A JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 PUSH3 0x23C DUP8 DUP3 DUP9 ADD PUSH3 0x19A JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH1 0x1 PUSH1 0x40 PUSH1 0x2 EXP SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH3 0x267 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x40 PUSH1 0x2 EXP SUB DUP3 GT ISZERO PUSH3 0x286 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x1F SWAP2 SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x2B4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x29A JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH3 0x2C4 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0xE5A DUP1 PUSH3 0x2DA PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xC4 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x6FDDE03 DUP2 EQ PUSH2 0xC9 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0xF4 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x121 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x143 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x163 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x178 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x198 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x1BA JUMPI DUP1 PUSH4 0xA0712D68 EQ PUSH2 0x1CF JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x1F1 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x211 JUMPI DUP1 PUSH4 0xE30443BC EQ PUSH2 0x231 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x251 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xD5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xDE PUSH2 0x271 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xEB SWAP2 SWAP1 PUSH2 0xD64 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x100 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x114 PUSH2 0x10F CALLDATASIZE PUSH1 0x4 PUSH2 0xC1E JUMP JUMPDEST PUSH2 0x31D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xEB SWAP2 SWAP1 PUSH2 0xD56 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x12D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x136 PUSH2 0x395 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xEB SWAP2 SWAP1 PUSH2 0xD95 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x14F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x114 PUSH2 0x15E CALLDATASIZE PUSH1 0x4 PUSH2 0xBD1 JUMP JUMPDEST PUSH2 0x39B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x16F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x136 PUSH2 0x68E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x184 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x136 PUSH2 0x193 CALLDATASIZE PUSH1 0x4 PUSH2 0xB71 JUMP JUMPDEST PUSH2 0x694 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1AD PUSH2 0x6BC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xEB SWAP2 SWAP1 PUSH2 0xD48 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xDE PUSH2 0x6D8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1EF PUSH2 0x1EA CALLDATASIZE PUSH1 0x4 PUSH2 0xC4E JUMP JUMPDEST PUSH2 0x751 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x114 PUSH2 0x20C CALLDATASIZE PUSH1 0x4 PUSH2 0xC1E JUMP JUMPDEST PUSH2 0x7D2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x21D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x136 PUSH2 0x22C CALLDATASIZE PUSH1 0x4 PUSH2 0xB97 JUMP JUMPDEST PUSH2 0x981 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x23D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1EF PUSH2 0x24C CALLDATASIZE PUSH1 0x4 PUSH2 0xC1E JUMP JUMPDEST PUSH2 0x9B9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x25D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1EF PUSH2 0x26C CALLDATASIZE PUSH1 0x4 PUSH2 0xB71 JUMP JUMPDEST PUSH2 0xA80 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x315 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2EA JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x315 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x2F8 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 KECCAK256 DUP6 SWAP1 SSTORE MLOAD SWAP2 SWAP3 SWAP1 SWAP2 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP1 PUSH2 0x383 SWAP1 DUP7 SWAP1 PUSH2 0xD95 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD DUP2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SLOAD SWAP4 DUP4 MSTORE DUP3 DUP3 MSTORE DUP1 DUP4 KECCAK256 SLOAD DUP2 MLOAD DUP1 DUP4 ADD SWAP1 SWAP3 MSTORE PUSH1 0x1A DUP3 MSTORE PUSH32 0x45524332305F494E53554646494349454E545F42414C414E4345000000000000 SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP2 SWAP3 SWAP2 SWAP1 DUP5 GT ISZERO PUSH2 0x451 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x448 SWAP2 SWAP1 PUSH2 0xD64 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x1C DUP2 MSTORE PUSH32 0x45524332305F494E53554646494349454E545F414C4C4F57414E434500000000 PUSH1 0x20 DUP3 ADD MSTORE DUP4 DUP3 LT ISZERO PUSH2 0x4C1 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x448 SWAP2 SWAP1 PUSH2 0xD64 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD DUP3 MLOAD PUSH1 0x60 DUP2 ADD DUP5 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH32 0x5472616E7366657220776F756C6420726573756C7420696E20616E206F766572 SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH32 0x666C6F772E000000000000000000000000000000000000000000000000000000 SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP5 DUP2 ADD LT ISZERO PUSH2 0x583 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x448 SWAP2 SWAP1 PUSH2 0xD64 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD DUP8 ADD SWAP1 SSTORE SWAP2 DUP8 AND DUP2 MSTORE KECCAK256 DUP1 SLOAD DUP5 SWAP1 SUB SWAP1 SSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 LT ISZERO PUSH2 0x61E JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 DUP1 SLOAD DUP5 SWAP1 SUB SWAP1 SSTORE JUMPDEST DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP6 PUSH1 0x40 MLOAD PUSH2 0x67B SWAP2 SWAP1 PUSH2 0xD95 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD DUP2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x315 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2EA JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x315 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 DUP2 GT ISZERO PUSH2 0x794 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x448 SWAP1 PUSH2 0xD75 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x7AF SWAP1 DUP3 SWAP1 PUSH2 0xB31 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH1 0x2 SLOAD PUSH2 0x7CC SWAP1 DUP3 PUSH2 0xB31 JUMP JUMPDEST PUSH1 0x2 SSTORE POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD DUP2 MLOAD DUP1 DUP4 ADD SWAP1 SWAP3 MSTORE PUSH1 0x1A DUP3 MSTORE PUSH32 0x45524332305F494E53554646494349454E545F42414C414E4345000000000000 SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP4 GT ISZERO PUSH2 0x852 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x448 SWAP2 SWAP1 PUSH2 0xD64 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD DUP3 MLOAD PUSH1 0x60 DUP2 ADD DUP5 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH32 0x5472616E7366657220776F756C6420726573756C7420696E20616E206F766572 SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH32 0x666C6F772E000000000000000000000000000000000000000000000000000000 SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP4 DUP2 ADD LT ISZERO PUSH2 0x914 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x448 SWAP2 SWAP1 PUSH2 0xD64 JUMP JUMPDEST POP CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD DUP7 SWAP1 SUB SWAP1 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND DUP1 DUP4 MSTORE SWAP2 DUP2 SWAP1 KECCAK256 DUP1 SLOAD DUP7 ADD SWAP1 SSTORE MLOAD SWAP1 SWAP2 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH2 0x383 SWAP1 DUP7 SWAP1 PUSH2 0xD95 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xA0D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x448 SWAP1 PUSH2 0xD85 JUMP JUMPDEST PUSH2 0xA16 DUP4 PUSH2 0x694 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 LT ISZERO PUSH2 0xA3D JUMPI PUSH2 0xA35 PUSH1 0x2 SLOAD PUSH2 0xA30 DUP4 DUP6 PUSH2 0xB47 JUMP JUMPDEST PUSH2 0xB47 JUMP JUMPDEST PUSH1 0x2 SSTORE PUSH2 0xA56 JUMP JUMPDEST PUSH2 0xA52 PUSH1 0x2 SLOAD PUSH2 0xA4D DUP5 DUP5 PUSH2 0xB47 JUMP JUMPDEST PUSH2 0xB31 JUMP JUMPDEST PUSH1 0x2 SSTORE JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xAD1 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x448 SWAP1 PUSH2 0xD85 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0xB2E JUMPI PUSH1 0x3 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND OR SWAP1 SSTORE JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0xB40 JUMPI INVALID JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 GT ISZERO PUSH2 0xB53 JUMPI INVALID JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB40 DUP3 CALLDATALOAD PUSH2 0xDA7 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB40 DUP3 CALLDATALOAD PUSH2 0xDC5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xB83 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xB8F DUP5 DUP5 PUSH2 0xB59 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xBAA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xBB6 DUP6 DUP6 PUSH2 0xB59 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0xBC7 DUP6 DUP3 DUP7 ADD PUSH2 0xB59 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xBE6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xBF2 DUP7 DUP7 PUSH2 0xB59 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0xC03 DUP7 DUP3 DUP8 ADD PUSH2 0xB59 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0xC14 DUP7 DUP3 DUP8 ADD PUSH2 0xB65 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xC31 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xC3D DUP6 DUP6 PUSH2 0xB59 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0xBC7 DUP6 DUP3 DUP7 ADD PUSH2 0xB65 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xC60 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xB8F DUP5 DUP5 PUSH2 0xB65 JUMP JUMPDEST PUSH2 0xC75 DUP2 PUSH2 0xDA7 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0xC75 DUP2 PUSH2 0xDC0 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC8F DUP3 PUSH2 0xDA3 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH2 0xCA3 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0xDC8 JUMP JUMPDEST PUSH2 0xCAC DUP2 PUSH2 0xDF8 JUMP JUMPDEST SWAP1 SWAP4 ADD PUSH1 0x20 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x37 DUP2 MSTORE PUSH32 0x4D696E74696E67206D6F7265207468616E203130303030303030303030303030 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x30303030303030206973206E6F7420616C6C6F7765642E000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x13 DUP2 MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH2 0xC75 DUP2 PUSH2 0xDC5 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x38F DUP3 DUP5 PUSH2 0xC6C JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x38F DUP3 DUP5 PUSH2 0xC7B JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xB40 DUP2 DUP5 PUSH2 0xC84 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x38F DUP2 PUSH2 0xCB9 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x38F DUP2 PUSH2 0xD0F JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x38F DUP3 DUP5 PUSH2 0xD3F JUMP JUMPDEST MLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xDE3 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xDCB JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0xDF2 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP1 JUMP STOP LOG2 PUSH6 0x627A7A723058 KECCAK256 0xee 0xd0 DUP8 PUSH32 0x363D4C20E5997A53DA4AAA7F15791FFB69987A7DE0BA30099427A8F26C657870 PUSH6 0x72696D656E74 PUSH2 0x6CF5 STOP CALLDATACOPY ",
- "sourceMap": "718:849:0:-;;;850:307;8:9:-1;5:2;;;30:1;27;20:12;5:2;850:307:0;;;;;;;;;;;;;;;;;;;;;;;;363:5:6;:18;;-1:-1:-1;;;;;;363:18:6;371:10;363:18;;;1001:12:0;;;;:4;;:12;;;;;:::i;:::-;-1:-1:-1;1023:16:0;;;;:6;;:16;;;;;:::i;:::-;-1:-1:-1;1049:8:0;:20;;;;1079:11;:26;;;1124:10;-1:-1:-1;1115:20:0;;;;;;;;;;:35;-1:-1:-1;718:849:0;;-1:-1:-1;718:849:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;718:849:0;;;-1:-1:-1;718:849:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;6:444:-1:-;;112:4;100:17;;96:27;-1:-1;86:2;;137:1;134;127:12;86:2;167:6;161:13;189:65;204:49;246:6;204:49;;;189:65;;;180:74;;274:6;267:5;260:21;310:4;302:6;298:17;343:4;336:5;332:16;378:3;369:6;364:3;360:16;357:25;354:2;;;395:1;392;385:12;354:2;405:39;437:6;432:3;427;405:39;;;79:371;;;;;;;;458:122;;536:39;567:6;561:13;536:39;;;527:48;521:59;-1:-1;;;521:59;587:870;;;;;773:3;761:9;752:7;748:23;744:33;741:2;;;790:1;787;780:12;741:2;825:24;;-1:-1;;;;;858:30;;855:2;;;901:1;898;891:12;855:2;921:74;987:7;978:6;967:9;963:22;921:74;;;911:84;;804:197;1053:2;1042:9;1038:18;1032:25;-1:-1;;;;;1069:6;1066:30;1063:2;;;1109:1;1106;1099:12;1063:2;1129:74;1195:7;1186:6;1175:9;1171:22;1129:74;;;1119:84;;1011:198;1240:2;1258:64;1314:7;1305:6;1294:9;1290:22;1258:64;;;1248:74;;1219:109;1359:2;1377:64;1433:7;1424:6;1413:9;1409:22;1377:64;;;1367:74;;1338:109;735:722;;;;;;;;1464:256;1526:2;1520:9;1552:17;;;-1:-1;;;;;1612:34;;1648:22;;;1609:62;1606:2;;;1684:1;1681;1674:12;1606:2;1700;1693:22;1504:216;;-1:-1;1504:216;1727:259;;-1:-1;;;;;1863:6;1860:30;1857:2;;;1903:1;1900;1893:12;1857:2;-1:-1;1976:4;1947;1924:17;;;;-1:-1;;1920:33;1966:15;;1794:192;2080:268;2145:1;2152:101;2166:6;2163:1;2160:13;2152:101;;;2233:11;;;2227:18;2214:11;;;2207:39;2188:2;2181:10;2152:101;;;2268:6;2265:1;2262:13;2259:2;;;2333:1;2324:6;2319:3;2315:16;2308:27;2259:2;2129:219;;;;;;718:849:0;;;;;;"
+ "object": "0x608060405234801561001057600080fd5b50604051610ef7380380610ef7833981016040908152815160208084015192840151606085015160038054600160a060020a031916331790559285018051909594909401939092916100679160049187019061009f565b50825161007b90600590602086019061009f565b506006919091556002819055336000908152602081905260409020555061013a9050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100e057805160ff191683800117855561010d565b8280016001018555821561010d579182015b8281111561010d5782518255916020019190600101906100f2565b5061011992915061011d565b5090565b61013791905b808211156101195760008155600101610123565b90565b610dae806101496000396000f3006080604052600436106100c45763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde0381146100c9578063095ea7b31461015357806318160ddd1461019857806323b872dd146101bf578063313ce567146101f657806370a082311461020b5780638da5cb5b1461023957806395d89b4114610277578063a0712d681461028c578063a9059cbb146102a6578063dd62ed3e146102d7578063e30443bc1461030b578063f2fde38b1461033c575b600080fd5b3480156100d557600080fd5b506100de61036a565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610118578181015183820152602001610100565b50505050905090810190601f1680156101455780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561015f57600080fd5b5061018473ffffffffffffffffffffffffffffffffffffffff60043516602435610416565b604080519115158252519081900360200190f35b3480156101a457600080fd5b506101ad610489565b60408051918252519081900360200190f35b3480156101cb57600080fd5b5061018473ffffffffffffffffffffffffffffffffffffffff6004358116906024351660443561048f565b34801561020257600080fd5b506101ad61074a565b34801561021757600080fd5b506101ad73ffffffffffffffffffffffffffffffffffffffff60043516610750565b34801561024557600080fd5b5061024e610778565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561028357600080fd5b506100de610794565b34801561029857600080fd5b506102a460043561080d565b005b3480156102b257600080fd5b5061018473ffffffffffffffffffffffffffffffffffffffff600435166024356108e9565b3480156102e357600080fd5b506101ad73ffffffffffffffffffffffffffffffffffffffff60043581169060243516610a76565b34801561031757600080fd5b506102a473ffffffffffffffffffffffffffffffffffffffff60043516602435610aae565b34801561034857600080fd5b506102a473ffffffffffffffffffffffffffffffffffffffff60043516610baa565b6004805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f8101849004840282018401909252818152929183018282801561040e5780601f106103e35761010080835404028352916020019161040e565b820191906000526020600020905b8154815290600101906020018083116103f157829003601f168201915b505050505081565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b60025481565b73ffffffffffffffffffffffffffffffffffffffff831660008181526001602090815260408083203384528252808320549383529082905281205490919083111561053b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f45524332305f494e53554646494349454e545f42414c414e4345000000000000604482015290519081900360640190fd5b828110156105aa57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f45524332305f494e53554646494349454e545f414c4c4f57414e434500000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260208190526040902054838101101561064057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f4f564552464c4f57000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220805487019055918716815220805484900390557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8110156106da5773ffffffffffffffffffffffffffffffffffffffff851660009081526001602090815260408083203384529091529020805484900390555b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3506001949350505050565b60065481565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b60035473ffffffffffffffffffffffffffffffffffffffff1681565b6005805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f8101849004840282018401909252818152929183018282801561040e5780601f106103e35761010080835404028352916020019161040e565b68056bc75e2d631000008111156108ab57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4d696e74696e67206d6f7265207468616e20313030303030303030303030303060448201527f30303030303030206973206e6f7420616c6c6f7765642e000000000000000000606482015290519081900360840190fd5b336000908152602081905260409020546108c6908290610c90565b336000908152602081905260409020556002546108e39082610c90565b60025550565b3360009081526020819052604081205482111561096757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f45524332305f494e53554646494349454e545f42414c414e4345000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205482810110156109fd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f4f564552464c4f57000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b336000818152602081815260408083208054879003905573ffffffffffffffffffffffffffffffffffffffff871680845292819020805487019055805186815290519293927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60035460009073ffffffffffffffffffffffffffffffffffffffff163314610b3757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b610b4083610750565b905080821015610b6757610b5f600254610b5a8385610d0b565b610d0b565b600255610b80565b610b7c600254610b778484610d0b565b610c90565b6002555b5073ffffffffffffffffffffffffffffffffffffffff909116600090815260208190526040902055565b60035473ffffffffffffffffffffffffffffffffffffffff163314610c3057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811615610c8d57600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b600082820183811015610d0457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f55494e543235365f4f564552464c4f5700000000000000000000000000000000604482015290519081900360640190fd5b9392505050565b600082821115610d7c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f55494e543235365f4f564552464c4f5700000000000000000000000000000000604482015290519081900360640190fd5b509003905600a165627a7a723058203deb7f280f49f7f5fcee34cd2c8bd56aaea65ed9c0e177d4c8e571fb11245db20029",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0xEF7 CODESIZE SUB DUP1 PUSH2 0xEF7 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 SWAP1 DUP2 MSTORE DUP2 MLOAD PUSH1 0x20 DUP1 DUP5 ADD MLOAD SWAP3 DUP5 ADD MLOAD PUSH1 0x60 DUP6 ADD MLOAD PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB NOT AND CALLER OR SWAP1 SSTORE SWAP3 DUP6 ADD DUP1 MLOAD SWAP1 SWAP6 SWAP5 SWAP1 SWAP5 ADD SWAP4 SWAP1 SWAP3 SWAP2 PUSH2 0x67 SWAP2 PUSH1 0x4 SWAP2 DUP8 ADD SWAP1 PUSH2 0x9F JUMP JUMPDEST POP DUP3 MLOAD PUSH2 0x7B SWAP1 PUSH1 0x5 SWAP1 PUSH1 0x20 DUP7 ADD SWAP1 PUSH2 0x9F JUMP JUMPDEST POP PUSH1 0x6 SWAP2 SWAP1 SWAP2 SSTORE PUSH1 0x2 DUP2 SWAP1 SSTORE CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE POP PUSH2 0x13A SWAP1 POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0xE0 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x10D JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x10D JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x10D JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0xF2 JUMP JUMPDEST POP PUSH2 0x119 SWAP3 SWAP2 POP PUSH2 0x11D JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0x137 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x119 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x123 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0xDAE DUP1 PUSH2 0x149 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xC4 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x6FDDE03 DUP2 EQ PUSH2 0xC9 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x153 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x198 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1BF JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1F6 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x20B JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x239 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x277 JUMPI DUP1 PUSH4 0xA0712D68 EQ PUSH2 0x28C JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x2A6 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x2D7 JUMPI DUP1 PUSH4 0xE30443BC EQ PUSH2 0x30B JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x33C JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xD5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xDE PUSH2 0x36A 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 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x118 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x100 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x145 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 DUP1 ISZERO PUSH2 0x15F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x184 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD PUSH2 0x416 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1AD PUSH2 0x489 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x184 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH1 0x44 CALLDATALOAD PUSH2 0x48F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x202 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1AD PUSH2 0x74A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x217 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1AD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x750 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x245 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x24E PUSH2 0x778 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x283 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xDE PUSH2 0x794 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x298 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A4 PUSH1 0x4 CALLDATALOAD PUSH2 0x80D JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x184 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD PUSH2 0x8E9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1AD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH2 0xA76 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x317 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD PUSH2 0xAAE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x348 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0xBAA JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x40E JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x3E3 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x40E JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x3F1 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP7 SWAP1 SSTORE DUP2 MLOAD DUP7 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 SWAP1 SWAP4 SWAP1 SWAP3 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD DUP2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SLOAD SWAP4 DUP4 MSTORE SWAP1 DUP3 SWAP1 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 SWAP1 DUP4 GT ISZERO PUSH2 0x53B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332305F494E53554646494349454E545F42414C414E4345000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x5AA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332305F494E53554646494349454E545F414C4C4F57414E434500000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 DUP2 ADD LT ISZERO PUSH2 0x640 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x8 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F564552464C4F57000000000000000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD DUP8 ADD SWAP1 SSTORE SWAP2 DUP8 AND DUP2 MSTORE KECCAK256 DUP1 SLOAD DUP5 SWAP1 SUB SWAP1 SSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 LT ISZERO PUSH2 0x6DA JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 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 POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD DUP2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x40E JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x3E3 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x40E JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 DUP2 GT ISZERO PUSH2 0x8AB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x37 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4D696E74696E67206D6F7265207468616E203130303030303030303030303030 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x30303030303030206973206E6F7420616C6C6F7765642E000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x84 ADD SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x8C6 SWAP1 DUP3 SWAP1 PUSH2 0xC90 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH1 0x2 SLOAD PUSH2 0x8E3 SWAP1 DUP3 PUSH2 0xC90 JUMP JUMPDEST PUSH1 0x2 SSTORE POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x967 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332305F494E53554646494349454E545F42414C414E4345000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 DUP2 ADD LT ISZERO PUSH2 0x9FD JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x8 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F564552464C4F57000000000000000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD DUP8 SWAP1 SUB SWAP1 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP1 DUP5 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP1 SLOAD DUP8 ADD SWAP1 SSTORE DUP1 MLOAD DUP7 DUP2 MSTORE SWAP1 MLOAD SWAP3 SWAP4 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xB37 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xB40 DUP4 PUSH2 0x750 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 LT ISZERO PUSH2 0xB67 JUMPI PUSH2 0xB5F PUSH1 0x2 SLOAD PUSH2 0xB5A DUP4 DUP6 PUSH2 0xD0B JUMP JUMPDEST PUSH2 0xD0B JUMP JUMPDEST PUSH1 0x2 SSTORE PUSH2 0xB80 JUMP JUMPDEST PUSH2 0xB7C PUSH1 0x2 SLOAD PUSH2 0xB77 DUP5 DUP5 PUSH2 0xD0B JUMP JUMPDEST PUSH2 0xC90 JUMP JUMPDEST PUSH1 0x2 SSTORE JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xC30 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0xC8D JUMPI PUSH1 0x3 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND OR SWAP1 SSTORE JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0xD04 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x55494E543235365F4F564552464C4F5700000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 GT ISZERO PUSH2 0xD7C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x55494E543235365F4F564552464C4F5700000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP SWAP1 SUB SWAP1 JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 RETURNDATASIZE 0xeb PUSH32 0x280F49F7F5FCEE34CD2C8BD56AAEA65ED9C0E177D4C8E571FB11245DB2002900 ",
+ "sourceMap": "684:849:0:-;;;816:307;8:9:-1;5:2;;;30:1;27;20:12;5:2;816:307:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;329:5:6;:18;;-1:-1:-1;;;;;;329:18:6;337:10;329:18;;;816:307:0;;;967:12;;816:307;;;;;;;;;;967:12;;:4;;:12;;;;:::i;:::-;-1:-1:-1;989:16:0;;;;:6;;:16;;;;;:::i;:::-;-1:-1:-1;1015:8:0;:20;;;;1045:11;:26;;;1090:10;-1:-1:-1;1081:20:0;;;;;;;;;;:35;-1:-1:-1;684:849:0;;-1:-1:-1;684:849:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;684:849:0;;;-1:-1:-1;684:849:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;"
},
"deployedBytecode": {
"linkReferences": {},
- "object": "0x6080604052600436106100c45763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde0381146100c9578063095ea7b3146100f457806318160ddd1461012157806323b872dd14610143578063313ce5671461016357806370a08231146101785780638da5cb5b1461019857806395d89b41146101ba578063a0712d68146101cf578063a9059cbb146101f1578063dd62ed3e14610211578063e30443bc14610231578063f2fde38b14610251575b600080fd5b3480156100d557600080fd5b506100de610271565b6040516100eb9190610d64565b60405180910390f35b34801561010057600080fd5b5061011461010f366004610c1e565b61031d565b6040516100eb9190610d56565b34801561012d57600080fd5b50610136610395565b6040516100eb9190610d95565b34801561014f57600080fd5b5061011461015e366004610bd1565b61039b565b34801561016f57600080fd5b5061013661068e565b34801561018457600080fd5b50610136610193366004610b71565b610694565b3480156101a457600080fd5b506101ad6106bc565b6040516100eb9190610d48565b3480156101c657600080fd5b506100de6106d8565b3480156101db57600080fd5b506101ef6101ea366004610c4e565b610751565b005b3480156101fd57600080fd5b5061011461020c366004610c1e565b6107d2565b34801561021d57600080fd5b5061013661022c366004610b97565b610981565b34801561023d57600080fd5b506101ef61024c366004610c1e565b6109b9565b34801561025d57600080fd5b506101ef61026c366004610b71565b610a80565b6004805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156103155780601f106102ea57610100808354040283529160200191610315565b820191906000526020600020905b8154815290600101906020018083116102f857829003601f168201915b505050505081565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610383908690610d95565b60405180910390a35060015b92915050565b60025481565b73ffffffffffffffffffffffffffffffffffffffff83166000818152600160209081526040808320338452825280832054938352828252808320548151808301909252601a82527f45524332305f494e53554646494349454e545f42414c414e43450000000000009282019290925291929190841115610451576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104489190610d64565b60405180910390fd5b5060408051808201909152601c81527f45524332305f494e53554646494349454e545f414c4c4f57414e4345000000006020820152838210156104c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104489190610d64565b5073ffffffffffffffffffffffffffffffffffffffff841660009081526020818152604091829020548251606081018452602581527f5472616e7366657220776f756c6420726573756c7420696e20616e206f766572928101929092527f666c6f772e00000000000000000000000000000000000000000000000000000092820192909252908481011015610583576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104489190610d64565b5073ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220805487019055918716815220805484900390557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81101561061e5773ffffffffffffffffffffffffffffffffffffffff851660009081526001602090815260408083203384529091529020805484900390555b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161067b9190610d95565b60405180910390a3506001949350505050565b60065481565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b60035473ffffffffffffffffffffffffffffffffffffffff1681565b6005805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156103155780601f106102ea57610100808354040283529160200191610315565b68056bc75e2d63100000811115610794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044890610d75565b336000908152602081905260409020546107af908290610b31565b336000908152602081905260409020556002546107cc9082610b31565b60025550565b33600090815260208181526040808320548151808301909252601a82527f45524332305f494e53554646494349454e545f42414c414e43450000000000009282019290925290831115610852576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104489190610d64565b5073ffffffffffffffffffffffffffffffffffffffff831660009081526020818152604091829020548251606081018452602581527f5472616e7366657220776f756c6420726573756c7420696e20616e206f766572928101929092527f666c6f772e00000000000000000000000000000000000000000000000000000092820192909252908381011015610914576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104489190610d64565b50336000818152602081905260408082208054869003905573ffffffffffffffffffffffffffffffffffffffff861680835291819020805486019055519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610383908690610d95565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60035460009073ffffffffffffffffffffffffffffffffffffffff163314610a0d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044890610d85565b610a1683610694565b905080821015610a3d57610a35600254610a308385610b47565b610b47565b600255610a56565b610a52600254610a4d8484610b47565b610b31565b6002555b5073ffffffffffffffffffffffffffffffffffffffff909116600090815260208190526040902055565b60035473ffffffffffffffffffffffffffffffffffffffff163314610ad1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044890610d85565b73ffffffffffffffffffffffffffffffffffffffff811615610b2e57600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b600082820183811015610b4057fe5b9392505050565b600082821115610b5357fe5b50900390565b6000610b408235610da7565b6000610b408235610dc5565b600060208284031215610b8357600080fd5b6000610b8f8484610b59565b949350505050565b60008060408385031215610baa57600080fd5b6000610bb68585610b59565b9250506020610bc785828601610b59565b9150509250929050565b600080600060608486031215610be657600080fd5b6000610bf28686610b59565b9350506020610c0386828701610b59565b9250506040610c1486828701610b65565b9150509250925092565b60008060408385031215610c3157600080fd5b6000610c3d8585610b59565b9250506020610bc785828601610b65565b600060208284031215610c6057600080fd5b6000610b8f8484610b65565b610c7581610da7565b82525050565b610c7581610dc0565b6000610c8f82610da3565b808452610ca3816020860160208601610dc8565b610cac81610df8565b9093016020019392505050565b603781527f4d696e74696e67206d6f7265207468616e20313030303030303030303030303060208201527f30303030303030206973206e6f7420616c6c6f7765642e000000000000000000604082015260600190565b601381527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000602082015260400190565b610c7581610dc5565b6020810161038f8284610c6c565b6020810161038f8284610c7b565b60208082528101610b408184610c84565b6020808252810161038f81610cb9565b6020808252810161038f81610d0f565b6020810161038f8284610d3f565b5190565b73ffffffffffffffffffffffffffffffffffffffff1690565b151590565b90565b60005b83811015610de3578181015183820152602001610dcb565b83811115610df2576000848401525b50505050565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016905600a265627a7a72305820eed0877f363d4c20e5997a53da4aaa7f15791ffb69987a7de0ba30099427a8f26c6578706572696d656e74616cf50037",
- "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xC4 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x6FDDE03 DUP2 EQ PUSH2 0xC9 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0xF4 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x121 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x143 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x163 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x178 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x198 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x1BA JUMPI DUP1 PUSH4 0xA0712D68 EQ PUSH2 0x1CF JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x1F1 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x211 JUMPI DUP1 PUSH4 0xE30443BC EQ PUSH2 0x231 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x251 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xD5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xDE PUSH2 0x271 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xEB SWAP2 SWAP1 PUSH2 0xD64 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x100 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x114 PUSH2 0x10F CALLDATASIZE PUSH1 0x4 PUSH2 0xC1E JUMP JUMPDEST PUSH2 0x31D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xEB SWAP2 SWAP1 PUSH2 0xD56 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x12D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x136 PUSH2 0x395 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xEB SWAP2 SWAP1 PUSH2 0xD95 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x14F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x114 PUSH2 0x15E CALLDATASIZE PUSH1 0x4 PUSH2 0xBD1 JUMP JUMPDEST PUSH2 0x39B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x16F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x136 PUSH2 0x68E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x184 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x136 PUSH2 0x193 CALLDATASIZE PUSH1 0x4 PUSH2 0xB71 JUMP JUMPDEST PUSH2 0x694 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1AD PUSH2 0x6BC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xEB SWAP2 SWAP1 PUSH2 0xD48 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xDE PUSH2 0x6D8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1EF PUSH2 0x1EA CALLDATASIZE PUSH1 0x4 PUSH2 0xC4E JUMP JUMPDEST PUSH2 0x751 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x114 PUSH2 0x20C CALLDATASIZE PUSH1 0x4 PUSH2 0xC1E JUMP JUMPDEST PUSH2 0x7D2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x21D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x136 PUSH2 0x22C CALLDATASIZE PUSH1 0x4 PUSH2 0xB97 JUMP JUMPDEST PUSH2 0x981 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x23D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1EF PUSH2 0x24C CALLDATASIZE PUSH1 0x4 PUSH2 0xC1E JUMP JUMPDEST PUSH2 0x9B9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x25D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1EF PUSH2 0x26C CALLDATASIZE PUSH1 0x4 PUSH2 0xB71 JUMP JUMPDEST PUSH2 0xA80 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x315 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2EA JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x315 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x2F8 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 KECCAK256 DUP6 SWAP1 SSTORE MLOAD SWAP2 SWAP3 SWAP1 SWAP2 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP1 PUSH2 0x383 SWAP1 DUP7 SWAP1 PUSH2 0xD95 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD DUP2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SLOAD SWAP4 DUP4 MSTORE DUP3 DUP3 MSTORE DUP1 DUP4 KECCAK256 SLOAD DUP2 MLOAD DUP1 DUP4 ADD SWAP1 SWAP3 MSTORE PUSH1 0x1A DUP3 MSTORE PUSH32 0x45524332305F494E53554646494349454E545F42414C414E4345000000000000 SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP2 SWAP3 SWAP2 SWAP1 DUP5 GT ISZERO PUSH2 0x451 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x448 SWAP2 SWAP1 PUSH2 0xD64 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x1C DUP2 MSTORE PUSH32 0x45524332305F494E53554646494349454E545F414C4C4F57414E434500000000 PUSH1 0x20 DUP3 ADD MSTORE DUP4 DUP3 LT ISZERO PUSH2 0x4C1 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x448 SWAP2 SWAP1 PUSH2 0xD64 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD DUP3 MLOAD PUSH1 0x60 DUP2 ADD DUP5 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH32 0x5472616E7366657220776F756C6420726573756C7420696E20616E206F766572 SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH32 0x666C6F772E000000000000000000000000000000000000000000000000000000 SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP5 DUP2 ADD LT ISZERO PUSH2 0x583 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x448 SWAP2 SWAP1 PUSH2 0xD64 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD DUP8 ADD SWAP1 SSTORE SWAP2 DUP8 AND DUP2 MSTORE KECCAK256 DUP1 SLOAD DUP5 SWAP1 SUB SWAP1 SSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 LT ISZERO PUSH2 0x61E JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 DUP1 SLOAD DUP5 SWAP1 SUB SWAP1 SSTORE JUMPDEST DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP6 PUSH1 0x40 MLOAD PUSH2 0x67B SWAP2 SWAP1 PUSH2 0xD95 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD DUP2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x315 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2EA JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x315 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 DUP2 GT ISZERO PUSH2 0x794 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x448 SWAP1 PUSH2 0xD75 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x7AF SWAP1 DUP3 SWAP1 PUSH2 0xB31 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH1 0x2 SLOAD PUSH2 0x7CC SWAP1 DUP3 PUSH2 0xB31 JUMP JUMPDEST PUSH1 0x2 SSTORE POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD DUP2 MLOAD DUP1 DUP4 ADD SWAP1 SWAP3 MSTORE PUSH1 0x1A DUP3 MSTORE PUSH32 0x45524332305F494E53554646494349454E545F42414C414E4345000000000000 SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP4 GT ISZERO PUSH2 0x852 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x448 SWAP2 SWAP1 PUSH2 0xD64 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD DUP3 MLOAD PUSH1 0x60 DUP2 ADD DUP5 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH32 0x5472616E7366657220776F756C6420726573756C7420696E20616E206F766572 SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH32 0x666C6F772E000000000000000000000000000000000000000000000000000000 SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP4 DUP2 ADD LT ISZERO PUSH2 0x914 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x448 SWAP2 SWAP1 PUSH2 0xD64 JUMP JUMPDEST POP CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD DUP7 SWAP1 SUB SWAP1 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND DUP1 DUP4 MSTORE SWAP2 DUP2 SWAP1 KECCAK256 DUP1 SLOAD DUP7 ADD SWAP1 SSTORE MLOAD SWAP1 SWAP2 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH2 0x383 SWAP1 DUP7 SWAP1 PUSH2 0xD95 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xA0D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x448 SWAP1 PUSH2 0xD85 JUMP JUMPDEST PUSH2 0xA16 DUP4 PUSH2 0x694 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 LT ISZERO PUSH2 0xA3D JUMPI PUSH2 0xA35 PUSH1 0x2 SLOAD PUSH2 0xA30 DUP4 DUP6 PUSH2 0xB47 JUMP JUMPDEST PUSH2 0xB47 JUMP JUMPDEST PUSH1 0x2 SSTORE PUSH2 0xA56 JUMP JUMPDEST PUSH2 0xA52 PUSH1 0x2 SLOAD PUSH2 0xA4D DUP5 DUP5 PUSH2 0xB47 JUMP JUMPDEST PUSH2 0xB31 JUMP JUMPDEST PUSH1 0x2 SSTORE JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xAD1 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x448 SWAP1 PUSH2 0xD85 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0xB2E JUMPI PUSH1 0x3 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND OR SWAP1 SSTORE JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0xB40 JUMPI INVALID JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 GT ISZERO PUSH2 0xB53 JUMPI INVALID JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB40 DUP3 CALLDATALOAD PUSH2 0xDA7 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB40 DUP3 CALLDATALOAD PUSH2 0xDC5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xB83 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xB8F DUP5 DUP5 PUSH2 0xB59 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xBAA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xBB6 DUP6 DUP6 PUSH2 0xB59 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0xBC7 DUP6 DUP3 DUP7 ADD PUSH2 0xB59 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xBE6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xBF2 DUP7 DUP7 PUSH2 0xB59 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0xC03 DUP7 DUP3 DUP8 ADD PUSH2 0xB59 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0xC14 DUP7 DUP3 DUP8 ADD PUSH2 0xB65 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xC31 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xC3D DUP6 DUP6 PUSH2 0xB59 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0xBC7 DUP6 DUP3 DUP7 ADD PUSH2 0xB65 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xC60 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xB8F DUP5 DUP5 PUSH2 0xB65 JUMP JUMPDEST PUSH2 0xC75 DUP2 PUSH2 0xDA7 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0xC75 DUP2 PUSH2 0xDC0 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC8F DUP3 PUSH2 0xDA3 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH2 0xCA3 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0xDC8 JUMP JUMPDEST PUSH2 0xCAC DUP2 PUSH2 0xDF8 JUMP JUMPDEST SWAP1 SWAP4 ADD PUSH1 0x20 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x37 DUP2 MSTORE PUSH32 0x4D696E74696E67206D6F7265207468616E203130303030303030303030303030 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x30303030303030206973206E6F7420616C6C6F7765642E000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x13 DUP2 MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH2 0xC75 DUP2 PUSH2 0xDC5 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x38F DUP3 DUP5 PUSH2 0xC6C JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x38F DUP3 DUP5 PUSH2 0xC7B JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xB40 DUP2 DUP5 PUSH2 0xC84 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x38F DUP2 PUSH2 0xCB9 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x38F DUP2 PUSH2 0xD0F JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x38F DUP3 DUP5 PUSH2 0xD3F JUMP JUMPDEST MLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xDE3 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xDCB JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0xDF2 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP1 JUMP STOP LOG2 PUSH6 0x627A7A723058 KECCAK256 0xee 0xd0 DUP8 PUSH32 0x363D4C20E5997A53DA4AAA7F15791FFB69987A7DE0BA30099427A8F26C657870 PUSH6 0x72696D656E74 PUSH2 0x6CF5 STOP CALLDATACOPY ",
- "sourceMap": "718:849:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;770:18;;8:9:-1;5:2;;;30:1;27;20:12;5:2;770:18:0;;;;;;;;;;;;;;;;;;;;2139:222:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2139:222:2;;;;;;;;;;;;;;;;;1041:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1041:26:2;;;;;;;;;;;;1108:697:4;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1108:697:4;;;;;;;;;820:23:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;820:23:0;;;;2367:125:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2367:125:2;;;;;;;;;292:20:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;292:20:6;;;;;;;;;;;;794::0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;794:20:0;;;;905:321:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;905:321:1;;;;;;;;;;;1074:445:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1074:445:2;;;;;;;;;2498:160;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2498:160:2;;;;;;;;;1163:402:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1163:402:0;;;;;;;;;534:167:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;534:167:6;;;;;;;;;770:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2139:222:2:-;2250:10;2222:4;2242:19;;;:7;:19;;;;;;;;;:29;;;;;;;;;;:38;;;2295;2222:4;;2242:29;;2295:38;;;;2274:6;;2295:38;;;;;;;;;;-1:-1:-1;2350:4:2;2139:222;;;;;:::o;1041:26::-;;;;:::o;1108:697:4:-;1246:14;;;1206:4;1246:14;;;:7;:14;;;;;;;;1261:10;1246:26;;;;;;;;1303:15;;;;;;;;;;1342:20;;;;;;;;;;;;;;;;;;;1206:4;;1246:26;1342:20;1303:25;-1:-1:-1;1303:25:4;1282:90;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1436:22:4;;;;;;;;;;;;;;;;;1403:19;;;;1382:86;;;;;;;;;;;;;;;-1:-1:-1;1525:13:4;;;:8;:13;;;;;;;;;;;;;1552:8;;;;;;;;;;;;;;;;;;;;;;;;;;;1499:22;;;:39;;1478:92;;;;;;;;;;;;;;;-1:-1:-1;1580:13:4;;;;:8;:13;;;;;;;;;;;:23;;;;;;1613:15;;;;;;:25;;;;;;;762:10;1652:20;;1648:87;;;1688:14;;;;;;;:7;:14;;;;;;;;1703:10;1688:26;;;;;;;:36;;;;;;;1648:87;1765:3;1749:28;;1758:5;1749:28;;;1770:6;1749:28;;;;;;;;;;;;;;;-1:-1:-1;1794:4:4;;1108:697;-1:-1:-1;;;;1108:697:4:o;820:23:0:-;;;;:::o;2367:125:2:-;2469:16;;2439:7;2469:16;;;;;;;;;;;;2367:125::o;292:20:6:-;;;;;;:::o;794::0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;905:321:1;995:21;985:31;;;964:133;;;;;;;;;;;;;;1155:10;1146:8;:20;;;;;;;;;;;1130:37;;1138:6;;1130:7;:37::i;:::-;1116:10;1107:8;:20;;;;;;;;;;:60;1199:11;;1191:28;;1212:6;1191:7;:28::i;:::-;1177:11;:42;-1:-1:-1;905:321:1:o;1074:445:2:-;1203:10;1153:4;1194:20;;;;;;;;;;;;1238;;;;;;;;;;;;;;;;;;;;1194:30;-1:-1:-1;1194:30:2;1173:95;;;;;;;;;;;;;;;-1:-1:-1;1325:13:2;;;:8;:13;;;;;;;;;;;;;1352:8;;;;;;;;;;;;;;;;;;;;;;;;;;;1299:22;;;:39;;1278:92;;;;;;;;;;;;;;;-1:-1:-1;1389:10:2;1380:8;:20;;;;;;;;;;;:30;;;;;;;:20;1420:13;;;;;;;;;:23;;;;;;1458:33;1420:13;;1389:10;1458:33;;;;1404:6;;1458:33;;2498:160;2626:15;;;;2596:7;2626:15;;;:7;:15;;;;;;;;:25;;;;;;;;;;;;;2498:160::o;1163:402:0:-;460:5:6;;1263:19:0;;460:5:6;;446:10;:19;425:85;;;;;;;;;;;;;;1285:18:0;1295:7;1285:9;:18::i;:::-;1263:40;;1326:11;1317:6;:20;1313:210;;;1367:50;1375:11;;1388:28;1396:11;1409:6;1388:7;:28::i;:::-;1367:7;:50::i;:::-;1353:11;:64;1313:210;;;1462:50;1470:11;;1483:28;1491:6;1499:11;1483:7;:28::i;:::-;1462:7;:50::i;:::-;1448:11;:64;1313:210;-1:-1:-1;1532:17:0;;;;:8;:17;;;;;;;;;;:26;1163:402::o;534:167:6:-;460:5;;;;446:10;:19;425:85;;;;;;;;;;;;;;630:22;;;;626:69;;668:5;:16;;;;;;;;;;626:69;534:167;:::o;570:166:7:-;650:7;682:5;;;704:6;;;;697:14;;;;728:1;570:166;-1:-1:-1;;;570:166:7:o;418:146::-;498:7;528:6;;;;521:14;;;;-1:-1:-1;552:5:7;;;418:146::o;5:118:-1:-;;72:46;110:6;97:20;72:46;;130:118;;197:46;235:6;222:20;197:46;;255:241;;359:2;347:9;338:7;334:23;330:32;327:2;;;375:1;372;365:12;327:2;410:1;427:53;472:7;452:9;427:53;;;417:63;321:175;-1:-1;;;;321:175;503:366;;;624:2;612:9;603:7;599:23;595:32;592:2;;;640:1;637;630:12;592:2;675:1;692:53;737:7;717:9;692:53;;;682:63;;654:97;782:2;800:53;845:7;836:6;825:9;821:22;800:53;;;790:63;;761:98;586:283;;;;;;876:491;;;;1014:2;1002:9;993:7;989:23;985:32;982:2;;;1030:1;1027;1020:12;982:2;1065:1;1082:53;1127:7;1107:9;1082:53;;;1072:63;;1044:97;1172:2;1190:53;1235:7;1226:6;1215:9;1211:22;1190:53;;;1180:63;;1151:98;1280:2;1298:53;1343:7;1334:6;1323:9;1319:22;1298:53;;;1288:63;;1259:98;976:391;;;;;;1374:366;;;1495:2;1483:9;1474:7;1470:23;1466:32;1463:2;;;1511:1;1508;1501:12;1463:2;1546:1;1563:53;1608:7;1588:9;1563:53;;;1553:63;;1525:97;1653:2;1671:53;1716:7;1707:6;1696:9;1692:22;1671:53;;1747:241;;1851:2;1839:9;1830:7;1826:23;1822:32;1819:2;;;1867:1;1864;1857:12;1819:2;1902:1;1919:53;1964:7;1944:9;1919:53;;1995:110;2068:31;2093:5;2068:31;;;2063:3;2056:44;2050:55;;;2112:101;2179:28;2201:5;2179:28;;2220:292;;2318:35;2347:5;2318:35;;;2370:6;2365:3;2358:19;2382:63;2438:6;2431:4;2426:3;2422:14;2415:4;2408:5;2404:16;2382:63;;;2477:29;2499:6;2477:29;;;2457:50;;;2470:4;2457:50;;2298:214;-1:-1;;;2298:214;2520:397;2675:2;2663:15;;2712:66;2707:2;2698:12;;2691:88;2813:66;2808:2;2799:12;;2792:88;2908:2;2899:12;;2656:261;2926:296;3081:2;3069:15;;3118:66;3113:2;3104:12;;3097:88;3213:2;3204:12;;3062:160;3230:110;3303:31;3328:5;3303:31;;3347:193;3455:2;3440:18;;3469:61;3444:9;3503:6;3469:61;;3547:181;3649:2;3634:18;;3663:55;3638:9;3691:6;3663:55;;3735:273;3859:2;3873:47;;;3844:18;;3934:64;3844:18;3984:6;3934:64;;4015:387;4196:2;4210:47;;;4181:18;;4271:121;4181:18;4271:121;;4409:387;4590:2;4604:47;;;4575:18;;4665:121;4575:18;4665:121;;4803:193;4911:2;4896:18;;4925:61;4900:9;4959:6;4925:61;;5003:88;5074:12;;5058:33;5098:128;5178:42;5167:54;;5150:76;5233:92;5306:13;5299:21;;5282:43;5332:79;5401:5;5384:27;5640:268;5705:1;5712:101;5726:6;5723:1;5720:13;5712:101;;;5793:11;;;5787:18;5774:11;;;5767:39;5748:2;5741:10;5712:101;;;5828:6;5825:1;5822:13;5819:2;;;5893:1;5884:6;5879:3;5875:16;5868:27;5819:2;5689:219;;;;;5916:97;6004:2;5984:14;6000:7;5980:28;;5964:49"
+ "object": "0x6080604052600436106100c45763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde0381146100c9578063095ea7b31461015357806318160ddd1461019857806323b872dd146101bf578063313ce567146101f657806370a082311461020b5780638da5cb5b1461023957806395d89b4114610277578063a0712d681461028c578063a9059cbb146102a6578063dd62ed3e146102d7578063e30443bc1461030b578063f2fde38b1461033c575b600080fd5b3480156100d557600080fd5b506100de61036a565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610118578181015183820152602001610100565b50505050905090810190601f1680156101455780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561015f57600080fd5b5061018473ffffffffffffffffffffffffffffffffffffffff60043516602435610416565b604080519115158252519081900360200190f35b3480156101a457600080fd5b506101ad610489565b60408051918252519081900360200190f35b3480156101cb57600080fd5b5061018473ffffffffffffffffffffffffffffffffffffffff6004358116906024351660443561048f565b34801561020257600080fd5b506101ad61074a565b34801561021757600080fd5b506101ad73ffffffffffffffffffffffffffffffffffffffff60043516610750565b34801561024557600080fd5b5061024e610778565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561028357600080fd5b506100de610794565b34801561029857600080fd5b506102a460043561080d565b005b3480156102b257600080fd5b5061018473ffffffffffffffffffffffffffffffffffffffff600435166024356108e9565b3480156102e357600080fd5b506101ad73ffffffffffffffffffffffffffffffffffffffff60043581169060243516610a76565b34801561031757600080fd5b506102a473ffffffffffffffffffffffffffffffffffffffff60043516602435610aae565b34801561034857600080fd5b506102a473ffffffffffffffffffffffffffffffffffffffff60043516610baa565b6004805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f8101849004840282018401909252818152929183018282801561040e5780601f106103e35761010080835404028352916020019161040e565b820191906000526020600020905b8154815290600101906020018083116103f157829003601f168201915b505050505081565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b60025481565b73ffffffffffffffffffffffffffffffffffffffff831660008181526001602090815260408083203384528252808320549383529082905281205490919083111561053b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f45524332305f494e53554646494349454e545f42414c414e4345000000000000604482015290519081900360640190fd5b828110156105aa57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f45524332305f494e53554646494349454e545f414c4c4f57414e434500000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260208190526040902054838101101561064057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f4f564552464c4f57000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220805487019055918716815220805484900390557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8110156106da5773ffffffffffffffffffffffffffffffffffffffff851660009081526001602090815260408083203384529091529020805484900390555b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3506001949350505050565b60065481565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b60035473ffffffffffffffffffffffffffffffffffffffff1681565b6005805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f8101849004840282018401909252818152929183018282801561040e5780601f106103e35761010080835404028352916020019161040e565b68056bc75e2d631000008111156108ab57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4d696e74696e67206d6f7265207468616e20313030303030303030303030303060448201527f30303030303030206973206e6f7420616c6c6f7765642e000000000000000000606482015290519081900360840190fd5b336000908152602081905260409020546108c6908290610c90565b336000908152602081905260409020556002546108e39082610c90565b60025550565b3360009081526020819052604081205482111561096757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f45524332305f494e53554646494349454e545f42414c414e4345000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205482810110156109fd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f4f564552464c4f57000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b336000818152602081815260408083208054879003905573ffffffffffffffffffffffffffffffffffffffff871680845292819020805487019055805186815290519293927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60035460009073ffffffffffffffffffffffffffffffffffffffff163314610b3757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b610b4083610750565b905080821015610b6757610b5f600254610b5a8385610d0b565b610d0b565b600255610b80565b610b7c600254610b778484610d0b565b610c90565b6002555b5073ffffffffffffffffffffffffffffffffffffffff909116600090815260208190526040902055565b60035473ffffffffffffffffffffffffffffffffffffffff163314610c3057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811615610c8d57600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b600082820183811015610d0457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f55494e543235365f4f564552464c4f5700000000000000000000000000000000604482015290519081900360640190fd5b9392505050565b600082821115610d7c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f55494e543235365f4f564552464c4f5700000000000000000000000000000000604482015290519081900360640190fd5b509003905600a165627a7a723058203deb7f280f49f7f5fcee34cd2c8bd56aaea65ed9c0e177d4c8e571fb11245db20029",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xC4 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x6FDDE03 DUP2 EQ PUSH2 0xC9 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x153 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x198 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1BF JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1F6 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x20B JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x239 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x277 JUMPI DUP1 PUSH4 0xA0712D68 EQ PUSH2 0x28C JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x2A6 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x2D7 JUMPI DUP1 PUSH4 0xE30443BC EQ PUSH2 0x30B JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x33C JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xD5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xDE PUSH2 0x36A 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 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x118 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x100 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x145 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 DUP1 ISZERO PUSH2 0x15F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x184 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD PUSH2 0x416 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1AD PUSH2 0x489 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x184 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH1 0x44 CALLDATALOAD PUSH2 0x48F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x202 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1AD PUSH2 0x74A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x217 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1AD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x750 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x245 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x24E PUSH2 0x778 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x283 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xDE PUSH2 0x794 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x298 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A4 PUSH1 0x4 CALLDATALOAD PUSH2 0x80D JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x184 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD PUSH2 0x8E9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1AD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH2 0xA76 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x317 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD PUSH2 0xAAE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x348 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0xBAA JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x40E JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x3E3 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x40E JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x3F1 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP7 SWAP1 SSTORE DUP2 MLOAD DUP7 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 SWAP1 SWAP4 SWAP1 SWAP3 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD DUP2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SLOAD SWAP4 DUP4 MSTORE SWAP1 DUP3 SWAP1 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 SWAP1 DUP4 GT ISZERO PUSH2 0x53B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332305F494E53554646494349454E545F42414C414E4345000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x5AA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332305F494E53554646494349454E545F414C4C4F57414E434500000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 DUP2 ADD LT ISZERO PUSH2 0x640 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x8 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F564552464C4F57000000000000000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD DUP8 ADD SWAP1 SSTORE SWAP2 DUP8 AND DUP2 MSTORE KECCAK256 DUP1 SLOAD DUP5 SWAP1 SUB SWAP1 SSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 LT ISZERO PUSH2 0x6DA JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 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 POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD DUP2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x40E JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x3E3 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x40E JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 DUP2 GT ISZERO PUSH2 0x8AB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x37 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4D696E74696E67206D6F7265207468616E203130303030303030303030303030 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x30303030303030206973206E6F7420616C6C6F7765642E000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x84 ADD SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x8C6 SWAP1 DUP3 SWAP1 PUSH2 0xC90 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH1 0x2 SLOAD PUSH2 0x8E3 SWAP1 DUP3 PUSH2 0xC90 JUMP JUMPDEST PUSH1 0x2 SSTORE POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x967 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332305F494E53554646494349454E545F42414C414E4345000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 DUP2 ADD LT ISZERO PUSH2 0x9FD JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x8 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F564552464C4F57000000000000000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD DUP8 SWAP1 SUB SWAP1 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP1 DUP5 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP1 SLOAD DUP8 ADD SWAP1 SSTORE DUP1 MLOAD DUP7 DUP2 MSTORE SWAP1 MLOAD SWAP3 SWAP4 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xB37 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xB40 DUP4 PUSH2 0x750 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 LT ISZERO PUSH2 0xB67 JUMPI PUSH2 0xB5F PUSH1 0x2 SLOAD PUSH2 0xB5A DUP4 DUP6 PUSH2 0xD0B JUMP JUMPDEST PUSH2 0xD0B JUMP JUMPDEST PUSH1 0x2 SSTORE PUSH2 0xB80 JUMP JUMPDEST PUSH2 0xB7C PUSH1 0x2 SLOAD PUSH2 0xB77 DUP5 DUP5 PUSH2 0xD0B JUMP JUMPDEST PUSH2 0xC90 JUMP JUMPDEST PUSH1 0x2 SSTORE JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xC30 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0xC8D JUMPI PUSH1 0x3 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND OR SWAP1 SSTORE JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0xD04 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x55494E543235365F4F564552464C4F5700000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 GT ISZERO PUSH2 0xD7C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x55494E543235365F4F564552464C4F5700000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP SWAP1 SUB SWAP1 JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 RETURNDATASIZE 0xeb PUSH32 0x280F49F7F5FCEE34CD2C8BD56AAEA65ED9C0E177D4C8E571FB11245DB2002900 ",
+ "sourceMap": "684:849:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;736:18;;8:9:-1;5:2;;;30:1;27;20:12;5:2;736:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;736:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1928:222:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1928:222:2;;;;;;;;;;;;;;;;;;;;;;;;;;;802:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;802:26:2;;;;;;;;;;;;;;;;;;;;1083:715:4;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1083:715:4;;;;;;;;;;;;;;786:23:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;786:23:0;;;;2156:133:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2156:133:2;;;;;;;258:20:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;258:20:6;;;;;;;;;;;;;;;;;;;;;;;760::0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;760:20:0;;;;880:321:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;880:321:1;;;;;;;835:455:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;835:455:2;;;;;;;;;2295:160;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2295:160:2;;;;;;;;;;;;1129:402:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1129:402:0;;;;;;;;;500:167:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;500:167:6;;;;;;;736:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1928:222:2:-;2039:10;2011:4;2031:19;;;:7;:19;;;;;;;;;:29;;;;;;;;;;;:38;;;2084;;;;;;;2011:4;;2031:29;;2039:10;;2084:38;;;;;;;;-1:-1:-1;2139:4:2;1928:222;;;;:::o;802:26::-;;;;:::o;1083:715:4:-;1221:14;;;1181:4;1221:14;;;:7;:14;;;;;;;;1236:10;1221:26;;;;;;;;1278:15;;;;;;;;;;1181:4;;1221:26;1278:25;-1:-1:-1;1278:25:4;1257:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1386:19;;;;1365:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1516:13;;;:8;:13;;;;;;;;;;;1490:22;;;:39;;1469:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1573:13;;;;:8;:13;;;;;;;;;;;:23;;;;;;1606:15;;;;;;:25;;;;;;;737:10;1645:20;;1641:87;;;1681:14;;;;;;;:7;:14;;;;;;;;1696:10;1681:26;;;;;;;:36;;;;;;;1641:87;1758:3;1742:28;;1751:5;1742:28;;;1763:6;1742:28;;;;;;;;;;;;;;;;;;-1:-1:-1;1787:4:4;;1083:715;-1:-1:-1;;;;1083:715:4:o;786:23:0:-;;;;:::o;2156:133:2:-;2266:16;;2236:7;2266:16;;;;;;;;;;;;2156:133::o;258:20:6:-;;;;;;:::o;760::0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;880:321:1;970:21;960:31;;;939:133;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1130:10;1121:8;:20;;;;;;;;;;;1105:37;;1113:6;;1105:7;:37::i;:::-;1091:10;1082:8;:20;;;;;;;;;;:60;1174:11;;1166:28;;1187:6;1166:7;:28::i;:::-;1152:11;:42;-1:-1:-1;880:321:1:o;835:455:2:-;964:10;914:4;955:20;;;;;;;;;;;:30;-1:-1:-1;955:30:2;934:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1094:13;;;:8;:13;;;;;;;;;;;1068:22;;;:39;;1047:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1160:10;1151:8;:20;;;;;;;;;;;:30;;;;;;;:20;1191:13;;;;;;;;;:23;;;;;;1229:33;;;;;;;1191:13;;1160:10;1229:33;;;;;;;;;;;-1:-1:-1;1279:4:2;835:455;;;;:::o;2295:160::-;2423:15;;;;2393:7;2423:15;;;:7;:15;;;;;;;;:25;;;;;;;;;;;;;2295:160::o;1129:402:0:-;426:5:6;;1229:19:0;;426:5:6;;412:10;:19;391:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1251:18:0;1261:7;1251:9;:18::i;:::-;1229:40;;1292:11;1283:6;:20;1279:210;;;1333:50;1341:11;;1354:28;1362:11;1375:6;1354:7;:28::i;:::-;1333:7;:50::i;:::-;1319:11;:64;1279:210;;;1428:50;1436:11;;1449:28;1457:6;1465:11;1449:7;:28::i;:::-;1428:7;:50::i;:::-;1414:11;:64;1279:210;-1:-1:-1;1498:17:0;;;;:8;:17;;;;;;;;;;:26;1129:402::o;500:167:6:-;426:5;;;;412:10;:19;391:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;596:22;;;;592:69;;634:5;:16;;;;;;;;;;592:69;500:167;:::o;714:230:7:-;800:7;835:5;;;871:6;;;;850:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;936:1;714:230;-1:-1:-1;;;714:230:7:o;501:207::-;587:7;631:6;;;;610:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;696:5:7;;;501:207::o"
}
}
},
"sources": {
- "current/test/DummyERC20Token/DummyERC20Token.sol": {
+ "2.0.0/test/DummyERC20Token/DummyERC20Token.sol": {
"id": 0
},
- "current/test/Mintable/Mintable.sol": {
+ "2.0.0/test/Mintable/Mintable.sol": {
"id": 1
},
- "current/tokens/ERC20Token/ERC20Token.sol": {
+ "2.0.0/tokens/ERC20Token/ERC20Token.sol": {
"id": 2
},
- "current/tokens/ERC20Token/IERC20Token.sol": {
+ "2.0.0/tokens/ERC20Token/IERC20Token.sol": {
"id": 3
},
- "current/tokens/UnlimitedAllowanceToken/UnlimitedAllowanceToken.sol": {
+ "2.0.0/tokens/UnlimitedAllowanceToken/UnlimitedAllowanceToken.sol": {
"id": 4
},
- "current/utils/Ownable/IOwnable.sol": {
+ "2.0.0/utils/Ownable/IOwnable.sol": {
"id": 5
},
- "current/utils/Ownable/Ownable.sol": {
+ "2.0.0/utils/Ownable/Ownable.sol": {
"id": 6
},
- "current/utils/SafeMath/SafeMath.sol": {
+ "2.0.0/utils/SafeMath/SafeMath.sol": {
"id": 7
}
},
"sourceCodes": {
- "current/test/DummyERC20Token/DummyERC20Token.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../Mintable/Mintable.sol\";\nimport \"../../utils/Ownable/Ownable.sol\";\n\ncontract DummyERC20Token is Mintable, Ownable {\n string public name;\n string public symbol;\n uint256 public decimals;\n\n constructor (\n string _name,\n string _symbol,\n uint256 _decimals,\n uint256 _totalSupply\n )\n public\n {\n name = _name;\n symbol = _symbol;\n decimals = _decimals;\n totalSupply = _totalSupply;\n balances[msg.sender] = _totalSupply;\n }\n\n function setBalance(address _target, uint256 _value)\n public\n onlyOwner\n {\n uint256 currBalance = balanceOf(_target);\n if (_value < currBalance) {\n totalSupply = safeSub(totalSupply, safeSub(currBalance, _value));\n } else {\n totalSupply = safeAdd(totalSupply, safeSub(_value, currBalance));\n }\n balances[_target] = _value;\n }\n}\n",
- "current/test/Mintable/Mintable.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../../tokens/UnlimitedAllowanceToken/UnlimitedAllowanceToken.sol\";\nimport \"../../utils/SafeMath/SafeMath.sol\";\n\n/*\n * Mintable\n * Base contract that creates a mintable UnlimitedAllowanceToken\n */\ncontract Mintable is UnlimitedAllowanceToken, SafeMath {\n function mint(uint256 _value)\n public\n {\n require(\n _value <= 100000000000000000000,\n \"Minting more than 100000000000000000000 is not allowed.\"\n );\n balances[msg.sender] = safeAdd(_value, balances[msg.sender]);\n totalSupply = safeAdd(totalSupply, _value);\n }\n}\n",
- "current/tokens/ERC20Token/ERC20Token.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"./IERC20Token.sol\";\n\ncontract ERC20Token is IERC20Token {\n\n string constant INSUFFICIENT_BALANCE = \"ERC20_INSUFFICIENT_BALANCE\";\n string constant INSUFFICIENT_ALLOWANCE = \"ERC20_INSUFFICIENT_ALLOWANCE\";\n string constant OVERFLOW = \"Transfer would result in an overflow.\";\n\n mapping (address => uint256) balances;\n mapping (address => mapping (address => uint256)) allowed;\n\n uint256 public totalSupply;\n\n function transfer(address _to, uint256 _value)\n public\n returns (bool)\n {\n require(\n balances[msg.sender] >= _value,\n INSUFFICIENT_BALANCE\n );\n require(\n balances[_to] + _value >= balances[_to],\n OVERFLOW\n );\n balances[msg.sender] -= _value;\n balances[_to] += _value;\n emit Transfer(msg.sender, _to, _value);\n return true;\n }\n\n function transferFrom(address _from, address _to, uint256 _value)\n public\n returns (bool)\n {\n require(\n balances[_from] >= _value,\n INSUFFICIENT_BALANCE\n );\n require(\n allowed[_from][msg.sender] >= _value,\n INSUFFICIENT_ALLOWANCE\n );\n require(\n balances[_to] + _value >= balances[_to],\n OVERFLOW\n );\n balances[_to] += _value;\n balances[_from] -= _value;\n allowed[_from][msg.sender] -= _value;\n emit Transfer(_from, _to, _value);\n return true;\n }\n\n function approve(address _spender, uint256 _value)\n public\n returns (bool)\n {\n allowed[msg.sender][_spender] = _value;\n emit Approval(msg.sender, _spender, _value);\n return true;\n }\n\n function balanceOf(address _owner)\n public view\n returns (uint256)\n {\n return balances[_owner];\n }\n\n function allowance(address _owner, address _spender)\n public\n view\n returns (uint256)\n {\n return allowed[_owner][_spender];\n }\n}\n",
- "current/tokens/ERC20Token/IERC20Token.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.24;\npragma experimental ABIEncoderV2;\n\ncontract IERC20Token {\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, uint256 _value)\n public\n returns (bool);\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, uint256 _value)\n public\n returns (bool);\n \n /// @notice `msg.sender` approves `_spender` 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, uint256 _value)\n public\n returns (bool);\n\n /// @param _owner The address from which the balance will be retrieved\n /// @return The balance\n function balanceOf(address _owner)\n public view\n returns (uint256);\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)\n public view\n returns (uint256);\n\n event Transfer(\n address indexed _from,\n address indexed _to,\n uint256 _value\n );\n \n event Approval(\n address indexed _owner,\n address indexed _spender,\n uint256 _value\n );\n}\n",
- "current/tokens/UnlimitedAllowanceToken/UnlimitedAllowanceToken.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../ERC20Token/ERC20Token.sol\";\n\ncontract UnlimitedAllowanceToken is ERC20Token {\n\n uint256 constant MAX_UINT = 2**256 - 1;\n\n /// @dev ERC20 transferFrom, modified such that an allowance of MAX_UINT represents an unlimited allowance. See https://github.com/ethereum/EIPs/issues/717\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, uint256 _value)\n public\n returns (bool)\n {\n uint256 allowance = allowed[_from][msg.sender];\n require(\n balances[_from] >= _value,\n INSUFFICIENT_BALANCE\n );\n require(\n allowance >= _value,\n INSUFFICIENT_ALLOWANCE\n );\n require(\n balances[_to] + _value >= balances[_to],\n OVERFLOW\n );\n balances[_to] += _value;\n balances[_from] -= _value;\n if (allowance < MAX_UINT) {\n allowed[_from][msg.sender] -= _value;\n }\n emit Transfer(_from, _to, _value);\n return true;\n }\n}\n",
- "current/utils/Ownable/IOwnable.sol": "pragma solidity ^0.4.24;\npragma experimental ABIEncoderV2;\n\n/*\n * Ownable\n *\n * Base contract with an owner.\n * Provides onlyOwner modifier, which prevents function from running if it is called by anyone other than the owner.\n */\n\ncontract IOwnable {\n function transferOwnership(address newOwner)\n public;\n}\n",
- "current/utils/Ownable/Ownable.sol": "pragma solidity ^0.4.24;\npragma experimental ABIEncoderV2;\n\n/*\n * Ownable\n *\n * Base contract with an owner.\n * Provides onlyOwner modifier, which prevents function from running if it is called by anyone other than the owner.\n */\n\nimport \"./IOwnable.sol\";\n\ncontract Ownable is IOwnable {\n address public owner;\n\n constructor ()\n public\n {\n owner = msg.sender;\n }\n\n modifier onlyOwner() {\n require(\n msg.sender == owner,\n \"ONLY_CONTRACT_OWNER\"\n );\n _;\n }\n\n function transferOwnership(address newOwner)\n public\n onlyOwner\n {\n if (newOwner != address(0)) {\n owner = newOwner;\n }\n }\n}\n",
- "current/utils/SafeMath/SafeMath.sol": "pragma solidity ^0.4.24;\npragma experimental ABIEncoderV2;\n\ncontract SafeMath {\n function safeMul(uint a, uint b)\n internal\n pure\n returns (uint256)\n {\n uint c = a * b;\n assert(a == 0 || c / a == b);\n return c;\n }\n\n function safeDiv(uint a, uint b)\n internal\n pure\n returns (uint256)\n {\n uint c = a / b;\n return c;\n }\n\n function safeSub(uint a, uint b)\n internal\n pure\n returns (uint256)\n {\n assert(b <= a);\n return a - b;\n }\n\n function safeAdd(uint a, uint b)\n internal\n pure\n returns (uint256)\n {\n uint c = a + b;\n assert(c >= a);\n return c;\n }\n\n function max64(uint64 a, uint64 b)\n internal\n pure\n returns (uint256)\n {\n return a >= b ? a : b;\n }\n\n function min64(uint64 a, uint64 b)\n internal\n pure\n returns (uint256)\n {\n return a < b ? a : b;\n }\n\n function max256(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n return a >= b ? a : b;\n }\n\n function min256(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n return a < b ? a : b;\n }\n}\n"
+ "2.0.0/test/DummyERC20Token/DummyERC20Token.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.24;\n\nimport \"../Mintable/Mintable.sol\";\nimport \"../../utils/Ownable/Ownable.sol\";\n\n\ncontract DummyERC20Token is Mintable, Ownable {\n string public name;\n string public symbol;\n uint256 public decimals;\n\n constructor (\n string _name,\n string _symbol,\n uint256 _decimals,\n uint256 _totalSupply\n )\n public\n {\n name = _name;\n symbol = _symbol;\n decimals = _decimals;\n totalSupply = _totalSupply;\n balances[msg.sender] = _totalSupply;\n }\n\n function setBalance(address _target, uint256 _value)\n public\n onlyOwner\n {\n uint256 currBalance = balanceOf(_target);\n if (_value < currBalance) {\n totalSupply = safeSub(totalSupply, safeSub(currBalance, _value));\n } else {\n totalSupply = safeAdd(totalSupply, safeSub(_value, currBalance));\n }\n balances[_target] = _value;\n }\n}\n",
+ "2.0.0/test/Mintable/Mintable.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.24;\n\nimport \"../../tokens/UnlimitedAllowanceToken/UnlimitedAllowanceToken.sol\";\nimport \"../../utils/SafeMath/SafeMath.sol\";\n\n\n/*\n * Mintable\n * Base contract that creates a mintable UnlimitedAllowanceToken\n */\ncontract Mintable is \n UnlimitedAllowanceToken,\n SafeMath\n{\n function mint(uint256 _value)\n public\n {\n require(\n _value <= 100000000000000000000,\n \"Minting more than 100000000000000000000 is not allowed.\"\n );\n balances[msg.sender] = safeAdd(_value, balances[msg.sender]);\n totalSupply = safeAdd(totalSupply, _value);\n }\n}\n",
+ "2.0.0/tokens/ERC20Token/ERC20Token.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.24;\n\nimport \"./IERC20Token.sol\";\n\n\ncontract ERC20Token is IERC20Token {\n\n mapping (address => uint256) internal balances;\n mapping (address => mapping (address => uint256)) internal allowed;\n\n uint256 public totalSupply;\n\n function transfer(address _to, uint256 _value)\n public\n returns (bool)\n {\n require(\n balances[msg.sender] >= _value,\n \"ERC20_INSUFFICIENT_BALANCE\"\n );\n require(\n balances[_to] + _value >= balances[_to],\n \"OVERFLOW\"\n );\n balances[msg.sender] -= _value;\n balances[_to] += _value;\n emit Transfer(msg.sender, _to, _value);\n return true;\n }\n\n function transferFrom(address _from, address _to, uint256 _value)\n public\n returns (bool)\n {\n require(\n balances[_from] >= _value,\n \"ERC20_INSUFFICIENT_BALANCE\"\n );\n require(\n allowed[_from][msg.sender] >= _value,\n \"ERC20_INSUFFICIENT_ALLOWANCE\"\n );\n require(\n balances[_to] + _value >= balances[_to],\n \"OVERFLOW\"\n );\n balances[_to] += _value;\n balances[_from] -= _value;\n allowed[_from][msg.sender] -= _value;\n emit Transfer(_from, _to, _value);\n return true;\n }\n\n function approve(address _spender, uint256 _value)\n public\n returns (bool)\n {\n allowed[msg.sender][_spender] = _value;\n emit Approval(msg.sender, _spender, _value);\n return true;\n }\n\n function balanceOf(address _owner)\n public\n view\n returns (uint256)\n {\n return balances[_owner];\n }\n\n function allowance(address _owner, address _spender)\n public\n view\n returns (uint256)\n {\n return allowed[_owner][_spender];\n }\n}\n",
+ "2.0.0/tokens/ERC20Token/IERC20Token.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.24;\n\n\ncontract IERC20Token {\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, uint256 _value)\n public\n returns (bool);\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, uint256 _value)\n public\n returns (bool);\n \n /// @notice `msg.sender` approves `_spender` 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, uint256 _value)\n public\n returns (bool);\n\n /// @param _owner The address from which the balance will be retrieved\n /// @return The balance\n function balanceOf(address _owner)\n public view\n returns (uint256);\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)\n public view\n returns (uint256);\n\n // solhint-disable-next-line no-simple-event-func-name\n event Transfer(\n address indexed _from,\n address indexed _to,\n uint256 _value\n );\n \n event Approval(\n address indexed _owner,\n address indexed _spender,\n uint256 _value\n );\n}\n",
+ "2.0.0/tokens/UnlimitedAllowanceToken/UnlimitedAllowanceToken.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.24;\n\nimport \"../ERC20Token/ERC20Token.sol\";\n\n\ncontract UnlimitedAllowanceToken is ERC20Token {\n\n uint256 constant internal MAX_UINT = 2**256 - 1;\n\n /// @dev ERC20 transferFrom, modified such that an allowance of MAX_UINT represents an unlimited allowance. See https://github.com/ethereum/EIPs/issues/717\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, uint256 _value)\n public\n returns (bool)\n {\n uint256 allowance = allowed[_from][msg.sender];\n require(\n balances[_from] >= _value,\n \"ERC20_INSUFFICIENT_BALANCE\"\n );\n require(\n allowance >= _value,\n \"ERC20_INSUFFICIENT_ALLOWANCE\"\n );\n require(\n balances[_to] + _value >= balances[_to],\n \"OVERFLOW\"\n );\n balances[_to] += _value;\n balances[_from] -= _value;\n if (allowance < MAX_UINT) {\n allowed[_from][msg.sender] -= _value;\n }\n emit Transfer(_from, _to, _value);\n return true;\n }\n}\n",
+ "2.0.0/utils/Ownable/IOwnable.sol": "pragma solidity 0.4.24;\n\n/*\n * Ownable\n *\n * Base contract with an owner.\n * Provides onlyOwner modifier, which prevents function from running if it is called by anyone other than the owner.\n */\n\ncontract IOwnable {\n function transferOwnership(address newOwner)\n public;\n}\n",
+ "2.0.0/utils/Ownable/Ownable.sol": "pragma solidity 0.4.24;\n\n/*\n * Ownable\n *\n * Base contract with an owner.\n * Provides onlyOwner modifier, which prevents function from running if it is called by anyone other than the owner.\n */\n\nimport \"./IOwnable.sol\";\n\n\ncontract Ownable is IOwnable {\n address public owner;\n\n constructor ()\n public\n {\n owner = msg.sender;\n }\n\n modifier onlyOwner() {\n require(\n msg.sender == owner,\n \"ONLY_CONTRACT_OWNER\"\n );\n _;\n }\n\n function transferOwnership(address newOwner)\n public\n onlyOwner\n {\n if (newOwner != address(0)) {\n owner = newOwner;\n }\n }\n}\n",
+ "2.0.0/utils/SafeMath/SafeMath.sol": "pragma solidity 0.4.24;\n\n\ncontract SafeMath {\n function safeMul(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n if (a == 0) {\n return 0;\n }\n uint256 c = a * b;\n require(\n c / a == b,\n \"UINT256_OVERFLOW\"\n );\n return c;\n }\n\n function safeDiv(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n uint256 c = a / b;\n return c;\n }\n\n function safeSub(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n require(\n b <= a,\n \"UINT256_OVERFLOW\"\n );\n return a - b;\n }\n\n function safeAdd(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n uint256 c = a + b;\n require(\n c >= a,\n \"UINT256_OVERFLOW\"\n );\n return c;\n }\n\n function max64(uint64 a, uint64 b)\n internal\n pure\n returns (uint256)\n {\n return a >= b ? a : b;\n }\n\n function min64(uint64 a, uint64 b)\n internal\n pure\n returns (uint256)\n {\n return a < b ? a : b;\n }\n\n function max256(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n return a >= b ? a : b;\n }\n\n function min256(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n return a < b ? a : b;\n }\n}\n"
},
- "sourceTreeHashHex": "0xf2b70865b7350ffbc7765be9c27701e6181e57b81d6c40573e1305aaa9583571",
+ "sourceTreeHashHex": "0x2e03418aef40c560f0e4e8ae68ea672807c71b509cf08cab14d6b7611cd60cfc",
"compiler": {
"name": "solc",
"version": "soljson-v0.4.24+commit.e67f0147.js",
diff --git a/packages/migrations/artifacts/2.0.0/DummyERC721Receiver.json b/packages/migrations/artifacts/2.0.0/DummyERC721Receiver.json
index 8487950cc..c4b1c5996 100644
--- a/packages/migrations/artifacts/2.0.0/DummyERC721Receiver.json
+++ b/packages/migrations/artifacts/2.0.0/DummyERC721Receiver.json
@@ -56,14 +56,14 @@
"evm": {
"bytecode": {
"linkReferences": {},
- "object": "0x608060405234801561001057600080fd5b5061021c806100206000396000f3006080604052600436106100405763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663f0b9e5ba8114610045575b600080fd5b34801561005157600080fd5b50604080516020600460443581810135601f81018490048402850184019095528484526100bb94823573ffffffffffffffffffffffffffffffffffffffff169460248035953695946064949201919081908401838280828437509497506100f09650505050505050565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b60007fefe605af9663e0f15f1dd40dad79f119df71e8d2affb3f6857cb9707c6c4b3ea848484604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561018b578181015183820152602001610173565b50505050905090810190601f1680156101b85780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a1507ff0b9e5ba0000000000000000000000000000000000000000000000000000000093925050505600a165627a7a723058202ca67ec58d42066e70e6ca74390d9c37519a80c013469cf8b07082e0ab1ce74d0029",
- "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x21C DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x40 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0xF0B9E5BA DUP2 EQ PUSH2 0x45 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x51 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 PUSH1 0x44 CALLDATALOAD DUP2 DUP2 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0xBB SWAP5 DUP3 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP5 PUSH1 0x24 DUP1 CALLDATALOAD SWAP6 CALLDATASIZE SWAP6 SWAP5 PUSH1 0x64 SWAP5 SWAP3 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0xF0 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH32 0xEFE605AF9663E0F15F1DD40DAD79F119DF71E8D2AFFB3F6857CB9707C6C4B3EA DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD DUP1 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x18B JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x173 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1B8 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 SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP PUSH32 0xF0B9E5BA00000000000000000000000000000000000000000000000000000000 SWAP4 SWAP3 POP POP POP JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 0x2c 0xa6 PUSH31 0xC58D42066E70E6CA74390D9C37519A80C013469CF8B07082E0AB1CE74D0029 ",
+ "object": "0x608060405234801561001057600080fd5b5061021c806100206000396000f3006080604052600436106100405763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663f0b9e5ba8114610045575b600080fd5b34801561005157600080fd5b50604080516020600460443581810135601f81018490048402850184019095528484526100bb94823573ffffffffffffffffffffffffffffffffffffffff169460248035953695946064949201919081908401838280828437509497506100f09650505050505050565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b60007fefe605af9663e0f15f1dd40dad79f119df71e8d2affb3f6857cb9707c6c4b3ea848484604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561018b578181015183820152602001610173565b50505050905090810190601f1680156101b85780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a1507ff0b9e5ba0000000000000000000000000000000000000000000000000000000093925050505600a165627a7a72305820b21a4617d1f81829262138f613de82764dda60f47f5027b3b68c016997529b8b0029",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x21C DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x40 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0xF0B9E5BA DUP2 EQ PUSH2 0x45 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x51 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 PUSH1 0x44 CALLDATALOAD DUP2 DUP2 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0xBB SWAP5 DUP3 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP5 PUSH1 0x24 DUP1 CALLDATALOAD SWAP6 CALLDATASIZE SWAP6 SWAP5 PUSH1 0x64 SWAP5 SWAP3 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0xF0 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH32 0xEFE605AF9663E0F15F1DD40DAD79F119DF71E8D2AFFB3F6857CB9707C6C4B3EA DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD DUP1 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x18B JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x173 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1B8 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 SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP PUSH32 0xF0B9E5BA00000000000000000000000000000000000000000000000000000000 SWAP4 SWAP3 POP POP POP JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 0xb2 BYTE 0x46 OR 0xd1 0xf8 XOR 0x29 0x26 0x21 CODESIZE 0xf6 SGT 0xde DUP3 PUSH23 0x4DDA60F47F5027B3B68C016997529B8B00290000000000 ",
"sourceMap": "1186:1067:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1186:1067:0;;;;;;;"
},
"deployedBytecode": {
"linkReferences": {},
- "object": "0x6080604052600436106100405763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663f0b9e5ba8114610045575b600080fd5b34801561005157600080fd5b50604080516020600460443581810135601f81018490048402850184019095528484526100bb94823573ffffffffffffffffffffffffffffffffffffffff169460248035953695946064949201919081908401838280828437509497506100f09650505050505050565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b60007fefe605af9663e0f15f1dd40dad79f119df71e8d2affb3f6857cb9707c6c4b3ea848484604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561018b578181015183820152602001610173565b50505050905090810190601f1680156101b85780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a1507ff0b9e5ba0000000000000000000000000000000000000000000000000000000093925050505600a165627a7a723058202ca67ec58d42066e70e6ca74390d9c37519a80c013469cf8b07082e0ab1ce74d0029",
- "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x40 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0xF0B9E5BA DUP2 EQ PUSH2 0x45 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x51 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 PUSH1 0x44 CALLDATALOAD DUP2 DUP2 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0xBB SWAP5 DUP3 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP5 PUSH1 0x24 DUP1 CALLDATALOAD SWAP6 CALLDATASIZE SWAP6 SWAP5 PUSH1 0x64 SWAP5 SWAP3 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0xF0 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH32 0xEFE605AF9663E0F15F1DD40DAD79F119DF71E8D2AFFB3F6857CB9707C6C4B3EA DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD DUP1 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x18B JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x173 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1B8 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 SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP PUSH32 0xF0B9E5BA00000000000000000000000000000000000000000000000000000000 SWAP4 SWAP3 POP POP POP JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 0x2c 0xa6 PUSH31 0xC58D42066E70E6CA74390D9C37519A80C013469CF8B07082E0AB1CE74D0029 ",
+ "object": "0x6080604052600436106100405763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663f0b9e5ba8114610045575b600080fd5b34801561005157600080fd5b50604080516020600460443581810135601f81018490048402850184019095528484526100bb94823573ffffffffffffffffffffffffffffffffffffffff169460248035953695946064949201919081908401838280828437509497506100f09650505050505050565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b60007fefe605af9663e0f15f1dd40dad79f119df71e8d2affb3f6857cb9707c6c4b3ea848484604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561018b578181015183820152602001610173565b50505050905090810190601f1680156101b85780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a1507ff0b9e5ba0000000000000000000000000000000000000000000000000000000093925050505600a165627a7a72305820b21a4617d1f81829262138f613de82764dda60f47f5027b3b68c016997529b8b0029",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x40 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0xF0B9E5BA DUP2 EQ PUSH2 0x45 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x51 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 PUSH1 0x44 CALLDATALOAD DUP2 DUP2 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0xBB SWAP5 DUP3 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP5 PUSH1 0x24 DUP1 CALLDATALOAD SWAP6 CALLDATASIZE SWAP6 SWAP5 PUSH1 0x64 SWAP5 SWAP3 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0xF0 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH32 0xEFE605AF9663E0F15F1DD40DAD79F119DF71E8D2AFFB3F6857CB9707C6C4B3EA DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD DUP1 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x18B JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x173 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1B8 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 SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP PUSH32 0xF0B9E5BA00000000000000000000000000000000000000000000000000000000 SWAP4 SWAP3 POP POP POP JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 0xb2 BYTE 0x46 OR 0xd1 0xf8 XOR 0x29 0x26 0x21 CODESIZE 0xf6 SGT 0xde DUP3 PUSH23 0x4DDA60F47F5027B3B68C016997529B8B00290000000000 ",
"sourceMap": "1186:1067:0:-;;;;;;;;;;;;;;;;;;;;;;;2014:237;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2014:237:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2014:237:0;;-1:-1:-1;2014:237:0;;-1:-1:-1;;;;;;;2014:237:0;;;;;;;;;;;;;;;;;;;;;2148:6;2175:37;2189:5;2196:8;2206:5;2175:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;2175:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2229:15:0;2014:237;;;;;:::o"
}
}
@@ -77,10 +77,10 @@
}
},
"sourceCodes": {
- "2.0.0/test/DummyERC721Receiver/DummyERC721Receiver.sol": "/*\nThe MIT License (MIT)\n\nCopyright (c) 2016 Smart Contract Solutions, Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be included\nin all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\npragma solidity ^0.4.24;\n\nimport \"../../tokens/ERC721Token/IERC721Receiver.sol\";\n\ncontract DummyERC721Receiver is\n IERC721Receiver\n{\n\n event TokenReceived(\n address from,\n uint256 tokenId,\n bytes data\n );\n\n /**\n * @notice Handle the receipt of an NFT\n * @dev The ERC721 smart contract calls this function on the recipient\n * after a `safetransfer`. This function MAY throw to revert and reject the\n * transfer. This function MUST use 50,000 gas or less. Return of other\n * than the magic value MUST result in the transaction being reverted.\n * Note: the contract address is always the message sender.\n * @param _from The sending address\n * @param _tokenId The NFT identifier which is being transfered\n * @param _data Additional data with no specified format\n * @return `bytes4(keccak256(\"onERC721Received(address,uint256,bytes)\"))`\n */\n function onERC721Received(\n address _from,\n uint256 _tokenId,\n bytes _data\n )\n public\n returns (bytes4)\n {\n emit TokenReceived(_from, _tokenId, _data);\n return ERC721_RECEIVED;\n }\n}\n",
- "2.0.0/tokens/ERC721Token/IERC721Receiver.sol": "/*\nThe MIT License (MIT)\n\nCopyright (c) 2016 Smart Contract Solutions, Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be included\nin all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\npragma solidity ^0.4.24;\n\n/**\n * @title ERC721 token receiver interface\n * @dev Interface for any contract that wants to support safeTransfers\n * rom ERC721 asset contracts.\n * Modified from https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/token/ERC721/ERC721Receiver.sol\n */\ncontract IERC721Receiver {\n /**\n * @dev Magic value to be returned upon successful reception of an NFT\n * Equals to `bytes4(keccak256(\"onERC721Received(address,uint256,bytes)\"))`,\n * which can be also obtained as `ERC721Receiver(0).onERC721Received.selector`\n */\n bytes4 constant ERC721_RECEIVED = 0xf0b9e5ba;\n\n /**\n * @notice Handle the receipt of an NFT\n * @dev The ERC721 smart contract calls this function on the recipient\n * after a `safetransfer`. This function MAY throw to revert and reject the\n * transfer. This function MUST use 50,000 gas or less. Return of other\n * than the magic value MUST result in the transaction being reverted.\n * Note: the contract address is always the message sender.\n * @param _from The sending address\n * @param _tokenId The NFT identifier which is being transfered\n * @param _data Additional data with no specified format\n * @return `bytes4(keccak256(\"onERC721Received(address,uint256,bytes)\"))`\n */\n function onERC721Received(\n address _from,\n uint256 _tokenId,\n bytes _data)\n public\n returns (bytes4);\n}\n"
+ "2.0.0/test/DummyERC721Receiver/DummyERC721Receiver.sol": "/*\nThe MIT License (MIT)\n\nCopyright (c) 2016 Smart Contract Solutions, Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be included\nin all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\npragma solidity 0.4.24;\n\nimport \"../../tokens/ERC721Token/IERC721Receiver.sol\";\n\n\ncontract DummyERC721Receiver is\n IERC721Receiver\n{\n\n event TokenReceived(\n address from,\n uint256 tokenId,\n bytes data\n );\n\n /**\n * @notice Handle the receipt of an NFT\n * @dev The ERC721 smart contract calls this function on the recipient\n * after a `safetransfer`. This function MAY throw to revert and reject the\n * transfer. This function MUST use 50,000 gas or less. Return of other\n * than the magic value MUST result in the transaction being reverted.\n * Note: the contract address is always the message sender.\n * @param _from The sending address\n * @param _tokenId The NFT identifier which is being transfered\n * @param _data Additional data with no specified format\n * @return `bytes4(keccak256(\"onERC721Received(address,uint256,bytes)\"))`\n */\n function onERC721Received(\n address _from,\n uint256 _tokenId,\n bytes _data\n )\n public\n returns (bytes4)\n {\n emit TokenReceived(_from, _tokenId, _data);\n return ERC721_RECEIVED;\n }\n}\n",
+ "2.0.0/tokens/ERC721Token/IERC721Receiver.sol": "/*\nThe MIT License (MIT)\n\nCopyright (c) 2016 Smart Contract Solutions, Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be included\nin all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\npragma solidity 0.4.24;\n\n\n/**\n * @title ERC721 token receiver interface\n * @dev Interface for any contract that wants to support safeTransfers\n * rom ERC721 asset contracts.\n * Modified from https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/token/ERC721/ERC721Receiver.sol\n */\ncontract IERC721Receiver {\n /**\n * @dev Magic value to be returned upon successful reception of an NFT\n * Equals to `bytes4(keccak256(\"onERC721Received(address,uint256,bytes)\"))`,\n * which can be also obtained as `ERC721Receiver(0).onERC721Received.selector`\n */\n bytes4 constant internal ERC721_RECEIVED = 0xf0b9e5ba;\n\n /**\n * @notice Handle the receipt of an NFT\n * @dev The ERC721 smart contract calls this function on the recipient\n * after a `safetransfer`. This function MAY throw to revert and reject the\n * transfer. This function MUST use 50,000 gas or less. Return of other\n * than the magic value MUST result in the transaction being reverted.\n * Note: the contract address is always the message sender.\n * @param _from The sending address\n * @param _tokenId The NFT identifier which is being transfered\n * @param _data Additional data with no specified format\n * @return `bytes4(keccak256(\"onERC721Received(address,uint256,bytes)\"))`\n */\n function onERC721Received(\n address _from,\n uint256 _tokenId,\n bytes _data)\n public\n returns (bytes4);\n}\n"
},
- "sourceTreeHashHex": "0x78d041d511725e5b22accff013b3ca3c813fc2804b0af3a247e6932ffd1c23ae",
+ "sourceTreeHashHex": "0x8eb51bd09ddeb7decac329c3c85f31301af7822aa808b193752eaa94725657bd",
"compiler": {
"name": "solc",
"version": "soljson-v0.4.24+commit.e67f0147.js",
diff --git a/packages/migrations/artifacts/2.0.0/DummyERC721Token.json b/packages/migrations/artifacts/2.0.0/DummyERC721Token.json
index ffa7e45ee..8c027cf36 100644
--- a/packages/migrations/artifacts/2.0.0/DummyERC721Token.json
+++ b/packages/migrations/artifacts/2.0.0/DummyERC721Token.json
@@ -385,51 +385,51 @@
"evm": {
"bytecode": {
"linkReferences": {},
- "object": "0x60806040523480156200001157600080fd5b50604051620017e4380380620017e4833981018060405262000037919081019062000184565b60008054600160a060020a031916331790558151829082906200006290600190602085019062000083565b5080516200007890600290602084019062000083565b505050505062000274565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620000c657805160ff1916838001178555620000f6565b82800160010185558215620000f6579182015b82811115620000f6578251825591602001919060010190620000d9565b506200010492915062000108565b5090565b6200012591905b808211156200010457600081556001016200010f565b90565b6000601f820183136200013a57600080fd5b8151620001516200014b8262000219565b620001f2565b915080825260208301602083018583830111156200016e57600080fd5b6200017b83828462000241565b50505092915050565b600080604083850312156200019857600080fd5b82516001604060020a03811115620001af57600080fd5b620001bd8582860162000128565b92505060208301516001604060020a03811115620001da57600080fd5b620001e88582860162000128565b9150509250929050565b6040518181016001604060020a03811182821017156200021157600080fd5b604052919050565b60006001604060020a038211156200023057600080fd5b506020601f91909101601f19160190565b60005b838110156200025e57818101518382015260200162000244565b838111156200026e576000848401525b50505050565b61156080620002846000396000f3006080604052600436106100e55763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde0381146100ea578063081812fc14610115578063095ea7b31461014257806323b872dd1461016457806340c10f191461018457806342842e0e146101a45780634f558e79146101c45780636352211e146101f157806370a08231146102115780638da5cb5b1461023e57806395d89b41146102535780639dc29fac14610268578063a22cb46514610288578063b88d4fde146102a8578063e985e9c5146102c8578063f2fde38b146102e8575b600080fd5b3480156100f657600080fd5b506100ff610308565b60405161010c91906113c0565b60405180910390f35b34801561012157600080fd5b5061013561013036600461121e565b6103bb565b60405161010c919061136e565b34801561014e57600080fd5b5061016261015d3660046111d0565b6103e3565b005b34801561017057600080fd5b5061016261017f3660046110da565b610525565b34801561019057600080fd5b5061016261019f3660046111d0565b610608565b3480156101b057600080fd5b506101626101bf3660046110da565b6106b0565b3480156101d057600080fd5b506101e46101df36600461121e565b6106e8565b60405161010c91906113b2565b3480156101fd57600080fd5b5061013561020c36600461121e565b610712565b34801561021d57600080fd5b5061023161022c366004611082565b610749565b60405161010c9190611401565b34801561024a57600080fd5b50610135610796565b34801561025f57600080fd5b506100ff6107b2565b34801561027457600080fd5b506101626102833660046111d0565b61082e565b34801561029457600080fd5b506101626102a33660046111a0565b6108ca565b3480156102b457600080fd5b506101626102c3366004611127565b610987565b3480156102d457600080fd5b506101e46102e33660046110a0565b6109c6565b3480156102f457600080fd5b50610162610303366004611082565b610a01565b60018054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010087891615020190951694909404938401819004810282018101909252828152606093909290918301828280156103b15780601f10610386576101008083540402835291602001916103b1565b820191906000526020600020905b81548152906001019060200180831161039457829003601f168201915b5050505050905090565b60009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60006103ee82610712565b905073ffffffffffffffffffffffffffffffffffffffff838116908216141561041657600080fd5b3373ffffffffffffffffffffffffffffffffffffffff8216148061043f575061043f81336109c6565b151561044a57600080fd5b6000610455836103bb565b73ffffffffffffffffffffffffffffffffffffffff1614158061048d575073ffffffffffffffffffffffffffffffffffffffff831615155b15610520576000828152600460205260409081902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8681169182179092559151908316907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610517908690611401565b60405180910390a35b505050565b806105303382610ab2565b151561053b57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416151561055d57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8316151561057f57600080fd5b6105898483610b45565b6105938483610c2a565b61059d8383610cf9565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516105fa9190611401565b60405180910390a350505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610662576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610659906113e1565b60405180910390fd5b61066b816106e8565b156106a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610659906113d1565b6106ac8282610dbc565b5050565b806106bb3382610ab2565b15156106c657600080fd5b6106e28484846020604051908101604052806000815250610987565b50505050565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff16151590565b60008181526003602052604081205473ffffffffffffffffffffffffffffffffffffffff1680151561074357600080fd5b92915050565b600073ffffffffffffffffffffffffffffffffffffffff8216151561076d57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff1660009081526005602052604090205490565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60028054604080516020601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010060018716150201909416859004938401819004810282018101909252828152606093909290918301828280156103b15780601f10610386576101008083540402835291602001916103b1565b60005473ffffffffffffffffffffffffffffffffffffffff16331461087f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610659906113e1565b610888816106e8565b15156108c0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610659906113f1565b6106ac8282610e46565b73ffffffffffffffffffffffffffffffffffffffff82163314156108ed57600080fd5b33600081815260066020908152604080832073ffffffffffffffffffffffffffffffffffffffff871680855292529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151517905590519091907f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319061097b9085906113b2565b60405180910390a35050565b816109923382610ab2565b151561099d57600080fd5b6109a8858585610525565b6109b485858585610eb8565b15156109bf57600080fd5b5050505050565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260066020908152604080832093909416825291909152205460ff1690565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610659906113e1565b73ffffffffffffffffffffffffffffffffffffffff811615610aaf57600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b600080610abe83610712565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610b2d57508373ffffffffffffffffffffffffffffffffffffffff16610b15846103bb565b73ffffffffffffffffffffffffffffffffffffffff16145b80610b3d5750610b3d81856109c6565b949350505050565b8173ffffffffffffffffffffffffffffffffffffffff16610b6582610712565b73ffffffffffffffffffffffffffffffffffffffff1614610b8557600080fd5b60008181526004602052604090205473ffffffffffffffffffffffffffffffffffffffff16156106ac5760008181526004602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555173ffffffffffffffffffffffffffffffffffffffff8416907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061097b908590611401565b8173ffffffffffffffffffffffffffffffffffffffff16610c4a82610712565b73ffffffffffffffffffffffffffffffffffffffff1614610c6a57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260056020526040902054610c9b906001610fce565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526005602090815260408083209490945591815260039091522080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60008181526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1615610d2857600080fd5b600081815260036020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff871690811790915583526005909152902054610d8f906001610fe0565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526005602052604090209190915550565b73ffffffffffffffffffffffffffffffffffffffff82161515610dde57600080fd5b610de88282610cf9565b8173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161097b9190611401565b610e508282610b45565b610e5a8282610c2a565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161097b9190611401565b600080610ec485610ff6565b1515610ed35760019150610fc5565b6040517ff0b9e5ba00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86169063f0b9e5ba90610f299089908890889060040161137c565b602060405180830381600087803b158015610f4357600080fd5b505af1158015610f57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f7b9190810190611200565b7fffffffff0000000000000000000000000000000000000000000000000000000081167ff0b9e5ba0000000000000000000000000000000000000000000000000000000014925090505b50949350505050565b600082821115610fda57fe5b50900390565b600082820183811015610fef57fe5b9392505050565b6000903b1190565b6000610fef8235611480565b6000610fef8235611499565b6000610fef82516114a1565b6000601f8201831361103357600080fd5b813561104661104182611436565b61140f565b9150808252602083016020830185838301111561106257600080fd5b61106d8382846114c6565b50505092915050565b6000610fef823561149e565b60006020828403121561109457600080fd5b6000610b3d8484610ffe565b600080604083850312156110b357600080fd5b60006110bf8585610ffe565b92505060206110d085828601610ffe565b9150509250929050565b6000806000606084860312156110ef57600080fd5b60006110fb8686610ffe565b935050602061110c86828701610ffe565b925050604061111d86828701611076565b9150509250925092565b6000806000806080858703121561113d57600080fd5b60006111498787610ffe565b945050602061115a87828801610ffe565b935050604061116b87828801611076565b925050606085013567ffffffffffffffff81111561118857600080fd5b61119487828801611022565b91505092959194509250565b600080604083850312156111b357600080fd5b60006111bf8585610ffe565b92505060206110d08582860161100a565b600080604083850312156111e357600080fd5b60006111ef8585610ffe565b92505060206110d085828601611076565b60006020828403121561121257600080fd5b6000610b3d8484611016565b60006020828403121561123057600080fd5b6000610b3d8484611076565b61124581611480565b82525050565b61124581611499565b600061125f8261147c565b8084526112738160208601602086016114d2565b61127c816114fe565b9093016020019392505050565b602281527f546f6b656e207769746820746f6b656e496420616c726561647920657869737460208201527f732e000000000000000000000000000000000000000000000000000000000000604082015260600190565b601381527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000602082015260400190565b602281527f546f6b656e207769746820746f6b656e496420646f6573206e6f74206578697360208201527f742e000000000000000000000000000000000000000000000000000000000000604082015260600190565b6112458161149e565b60208101610743828461123c565b6060810161138a828661123c565b6113976020830185611365565b81810360408301526113a98184611254565b95945050505050565b60208101610743828461124b565b60208082528101610fef8184611254565b6020808252810161074381611289565b60208082528101610743816112df565b602080825281016107438161130f565b602081016107438284611365565b60405181810167ffffffffffffffff8111828210171561142e57600080fd5b604052919050565b600067ffffffffffffffff82111561144d57600080fd5b506020601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160190565b5190565b73ffffffffffffffffffffffffffffffffffffffff1690565b151590565b90565b7fffffffff000000000000000000000000000000000000000000000000000000001690565b82818337506000910152565b60005b838110156114ed5781810151838201526020016114d5565b838111156106e25750506000910152565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016905600a265627a7a72305820bde6b9aea883ce1c95175f73bd78f7a98734e1a9acf28f74f9e948e207423e9c6c6578706572696d656e74616cf50037",
- "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x17E4 CODESIZE SUB DUP1 PUSH3 0x17E4 DUP4 CODECOPY DUP2 ADD DUP1 PUSH1 0x40 MSTORE PUSH3 0x37 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH3 0x184 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB NOT AND CALLER OR SWAP1 SSTORE DUP2 MLOAD DUP3 SWAP1 DUP3 SWAP1 PUSH3 0x62 SWAP1 PUSH1 0x1 SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH3 0x83 JUMP JUMPDEST POP DUP1 MLOAD PUSH3 0x78 SWAP1 PUSH1 0x2 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH3 0x83 JUMP JUMPDEST POP POP POP POP POP PUSH3 0x274 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH3 0xC6 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0xF6 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0xF6 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0xF6 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0xD9 JUMP JUMPDEST POP PUSH3 0x104 SWAP3 SWAP2 POP PUSH3 0x108 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH3 0x125 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x104 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x10F JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH3 0x13A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x151 PUSH3 0x14B DUP3 PUSH3 0x219 JUMP JUMPDEST PUSH3 0x1F2 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP4 ADD DUP6 DUP4 DUP4 ADD GT ISZERO PUSH3 0x16E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x17B DUP4 DUP3 DUP5 PUSH3 0x241 JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH3 0x198 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH1 0x1 PUSH1 0x40 PUSH1 0x2 EXP SUB DUP2 GT ISZERO PUSH3 0x1AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x1BD DUP6 DUP3 DUP7 ADD PUSH3 0x128 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x1 PUSH1 0x40 PUSH1 0x2 EXP SUB DUP2 GT ISZERO PUSH3 0x1DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x1E8 DUP6 DUP3 DUP7 ADD PUSH3 0x128 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH1 0x1 PUSH1 0x40 PUSH1 0x2 EXP SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH3 0x211 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x40 PUSH1 0x2 EXP SUB DUP3 GT ISZERO PUSH3 0x230 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x1F SWAP2 SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x25E JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x244 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH3 0x26E JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x1560 DUP1 PUSH3 0x284 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xE5 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x6FDDE03 DUP2 EQ PUSH2 0xEA JUMPI DUP1 PUSH4 0x81812FC EQ PUSH2 0x115 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x142 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x164 JUMPI DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x184 JUMPI DUP1 PUSH4 0x42842E0E EQ PUSH2 0x1A4 JUMPI DUP1 PUSH4 0x4F558E79 EQ PUSH2 0x1C4 JUMPI DUP1 PUSH4 0x6352211E EQ PUSH2 0x1F1 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x211 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x23E JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x253 JUMPI DUP1 PUSH4 0x9DC29FAC EQ PUSH2 0x268 JUMPI DUP1 PUSH4 0xA22CB465 EQ PUSH2 0x288 JUMPI DUP1 PUSH4 0xB88D4FDE EQ PUSH2 0x2A8 JUMPI DUP1 PUSH4 0xE985E9C5 EQ PUSH2 0x2C8 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x2E8 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFF PUSH2 0x308 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x10C SWAP2 SWAP1 PUSH2 0x13C0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x121 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x135 PUSH2 0x130 CALLDATASIZE PUSH1 0x4 PUSH2 0x121E JUMP JUMPDEST PUSH2 0x3BB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x10C SWAP2 SWAP1 PUSH2 0x136E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x14E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x162 PUSH2 0x15D CALLDATASIZE PUSH1 0x4 PUSH2 0x11D0 JUMP JUMPDEST PUSH2 0x3E3 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x170 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x162 PUSH2 0x17F CALLDATASIZE PUSH1 0x4 PUSH2 0x10DA JUMP JUMPDEST PUSH2 0x525 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x190 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x162 PUSH2 0x19F CALLDATASIZE PUSH1 0x4 PUSH2 0x11D0 JUMP JUMPDEST PUSH2 0x608 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x162 PUSH2 0x1BF CALLDATASIZE PUSH1 0x4 PUSH2 0x10DA JUMP JUMPDEST PUSH2 0x6B0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1D0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E4 PUSH2 0x1DF CALLDATASIZE PUSH1 0x4 PUSH2 0x121E JUMP JUMPDEST PUSH2 0x6E8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x10C SWAP2 SWAP1 PUSH2 0x13B2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x135 PUSH2 0x20C CALLDATASIZE PUSH1 0x4 PUSH2 0x121E JUMP JUMPDEST PUSH2 0x712 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x21D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x231 PUSH2 0x22C CALLDATASIZE PUSH1 0x4 PUSH2 0x1082 JUMP JUMPDEST PUSH2 0x749 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x10C SWAP2 SWAP1 PUSH2 0x1401 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x24A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x135 PUSH2 0x796 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x25F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFF PUSH2 0x7B2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x274 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x162 PUSH2 0x283 CALLDATASIZE PUSH1 0x4 PUSH2 0x11D0 JUMP JUMPDEST PUSH2 0x82E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x294 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x162 PUSH2 0x2A3 CALLDATASIZE PUSH1 0x4 PUSH2 0x11A0 JUMP JUMPDEST PUSH2 0x8CA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x162 PUSH2 0x2C3 CALLDATASIZE PUSH1 0x4 PUSH2 0x1127 JUMP JUMPDEST PUSH2 0x987 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E4 PUSH2 0x2E3 CALLDATASIZE PUSH1 0x4 PUSH2 0x10A0 JUMP JUMPDEST PUSH2 0x9C6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x162 PUSH2 0x303 CALLDATASIZE PUSH1 0x4 PUSH2 0x1082 JUMP JUMPDEST PUSH2 0xA01 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 DUP8 DUP10 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3B1 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x386 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3B1 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x394 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3EE DUP3 PUSH2 0x712 JUMP JUMPDEST SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP1 DUP3 AND EQ ISZERO PUSH2 0x416 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND EQ DUP1 PUSH2 0x43F JUMPI POP PUSH2 0x43F DUP2 CALLER PUSH2 0x9C6 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x44A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x455 DUP4 PUSH2 0x3BB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 PUSH2 0x48D JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x520 JUMPI PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND SWAP2 DUP3 OR SWAP1 SWAP3 SSTORE SWAP2 MLOAD SWAP1 DUP4 AND SWAP1 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP1 PUSH2 0x517 SWAP1 DUP7 SWAP1 PUSH2 0x1401 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 JUMPDEST POP POP POP JUMP JUMPDEST DUP1 PUSH2 0x530 CALLER DUP3 PUSH2 0xAB2 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x53B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND ISZERO ISZERO PUSH2 0x55D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND ISZERO ISZERO PUSH2 0x57F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x589 DUP5 DUP4 PUSH2 0xB45 JUMP JUMPDEST PUSH2 0x593 DUP5 DUP4 PUSH2 0xC2A JUMP JUMPDEST PUSH2 0x59D DUP4 DUP4 PUSH2 0xCF9 JUMP JUMPDEST DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP5 PUSH1 0x40 MLOAD PUSH2 0x5FA SWAP2 SWAP1 PUSH2 0x1401 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x662 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x659 SWAP1 PUSH2 0x13E1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x66B DUP2 PUSH2 0x6E8 JUMP JUMPDEST ISZERO PUSH2 0x6A2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x659 SWAP1 PUSH2 0x13D1 JUMP JUMPDEST PUSH2 0x6AC DUP3 DUP3 PUSH2 0xDBC JUMP JUMPDEST POP POP JUMP JUMPDEST DUP1 PUSH2 0x6BB CALLER DUP3 PUSH2 0xAB2 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x6C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x6E2 DUP5 DUP5 DUP5 PUSH1 0x20 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH2 0x987 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO ISZERO PUSH2 0x743 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND ISZERO ISZERO PUSH2 0x76D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP8 AND ISZERO MUL ADD SWAP1 SWAP5 AND DUP6 SWAP1 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3B1 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x386 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3B1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x87F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x659 SWAP1 PUSH2 0x13E1 JUMP JUMPDEST PUSH2 0x888 DUP2 PUSH2 0x6E8 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x8C0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x659 SWAP1 PUSH2 0x13F1 JUMP JUMPDEST PUSH2 0x6AC DUP3 DUP3 PUSH2 0xE46 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND CALLER EQ ISZERO PUSH2 0x8ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP6 ISZERO ISZERO OR SWAP1 SSTORE SWAP1 MLOAD SWAP1 SWAP2 SWAP1 PUSH32 0x17307EAB39AB6107E8899845AD3D59BD9653F200F220920489CA2B5937696C31 SWAP1 PUSH2 0x97B SWAP1 DUP6 SWAP1 PUSH2 0x13B2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST DUP2 PUSH2 0x992 CALLER DUP3 PUSH2 0xAB2 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x99D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x9A8 DUP6 DUP6 DUP6 PUSH2 0x525 JUMP JUMPDEST PUSH2 0x9B4 DUP6 DUP6 DUP6 DUP6 PUSH2 0xEB8 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x9BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xA52 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x659 SWAP1 PUSH2 0x13E1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0xAAF JUMPI PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND OR SWAP1 SSTORE JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xABE DUP4 PUSH2 0x712 JUMP JUMPDEST SWAP1 POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ DUP1 PUSH2 0xB2D JUMPI POP DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xB15 DUP5 PUSH2 0x3BB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ JUMPDEST DUP1 PUSH2 0xB3D JUMPI POP PUSH2 0xB3D DUP2 DUP6 PUSH2 0x9C6 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xB65 DUP3 PUSH2 0x712 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xB85 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x6AC JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP1 PUSH2 0x97B SWAP1 DUP6 SWAP1 PUSH2 0x1401 JUMP JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xC4A DUP3 PUSH2 0x712 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xC6A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xC9B SWAP1 PUSH1 0x1 PUSH2 0xFCE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE SWAP2 DUP2 MSTORE PUSH1 0x3 SWAP1 SWAP2 MSTORE KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0xD28 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP4 MSTORE PUSH1 0x5 SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0xD8F SWAP1 PUSH1 0x1 PUSH2 0xFE0 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND ISZERO ISZERO PUSH2 0xDDE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xDE8 DUP3 DUP3 PUSH2 0xCF9 JUMP JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x97B SWAP2 SWAP1 PUSH2 0x1401 JUMP JUMPDEST PUSH2 0xE50 DUP3 DUP3 PUSH2 0xB45 JUMP JUMPDEST PUSH2 0xE5A DUP3 DUP3 PUSH2 0xC2A JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x97B SWAP2 SWAP1 PUSH2 0x1401 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xEC4 DUP6 PUSH2 0xFF6 JUMP JUMPDEST ISZERO ISZERO PUSH2 0xED3 JUMPI PUSH1 0x1 SWAP2 POP PUSH2 0xFC5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xF0B9E5BA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP1 PUSH4 0xF0B9E5BA SWAP1 PUSH2 0xF29 SWAP1 DUP10 SWAP1 DUP9 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x137C JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xF43 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xF57 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0xF7B SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x1200 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH32 0xF0B9E5BA00000000000000000000000000000000000000000000000000000000 EQ SWAP3 POP SWAP1 POP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 GT ISZERO PUSH2 0xFDA JUMPI INVALID JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0xFEF JUMPI INVALID JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP1 EXTCODESIZE GT SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFEF DUP3 CALLDATALOAD PUSH2 0x1480 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFEF DUP3 CALLDATALOAD PUSH2 0x1499 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFEF DUP3 MLOAD PUSH2 0x14A1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0x1033 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1046 PUSH2 0x1041 DUP3 PUSH2 0x1436 JUMP JUMPDEST PUSH2 0x140F JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP4 ADD DUP6 DUP4 DUP4 ADD GT ISZERO PUSH2 0x1062 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x106D DUP4 DUP3 DUP5 PUSH2 0x14C6 JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFEF DUP3 CALLDATALOAD PUSH2 0x149E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1094 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xB3D DUP5 DUP5 PUSH2 0xFFE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x10B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x10BF DUP6 DUP6 PUSH2 0xFFE JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x10D0 DUP6 DUP3 DUP7 ADD PUSH2 0xFFE JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x10EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x10FB DUP7 DUP7 PUSH2 0xFFE JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x110C DUP7 DUP3 DUP8 ADD PUSH2 0xFFE JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x111D DUP7 DUP3 DUP8 ADD PUSH2 0x1076 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x113D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1149 DUP8 DUP8 PUSH2 0xFFE JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x115A DUP8 DUP3 DUP9 ADD PUSH2 0xFFE JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 PUSH2 0x116B DUP8 DUP3 DUP9 ADD PUSH2 0x1076 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1188 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1194 DUP8 DUP3 DUP9 ADD PUSH2 0x1022 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x11B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x11BF DUP6 DUP6 PUSH2 0xFFE JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x10D0 DUP6 DUP3 DUP7 ADD PUSH2 0x100A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x11E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x11EF DUP6 DUP6 PUSH2 0xFFE JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x10D0 DUP6 DUP3 DUP7 ADD PUSH2 0x1076 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1212 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xB3D DUP5 DUP5 PUSH2 0x1016 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1230 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xB3D DUP5 DUP5 PUSH2 0x1076 JUMP JUMPDEST PUSH2 0x1245 DUP2 PUSH2 0x1480 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x1245 DUP2 PUSH2 0x1499 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x125F DUP3 PUSH2 0x147C JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH2 0x1273 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x14D2 JUMP JUMPDEST PUSH2 0x127C DUP2 PUSH2 0x14FE JUMP JUMPDEST SWAP1 SWAP4 ADD PUSH1 0x20 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x22 DUP2 MSTORE PUSH32 0x546F6B656E207769746820746F6B656E496420616C7265616479206578697374 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x732E000000000000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x13 DUP2 MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x22 DUP2 MSTORE PUSH32 0x546F6B656E207769746820746F6B656E496420646F6573206E6F742065786973 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x742E000000000000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH2 0x1245 DUP2 PUSH2 0x149E JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x743 DUP3 DUP5 PUSH2 0x123C JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x138A DUP3 DUP7 PUSH2 0x123C JUMP JUMPDEST PUSH2 0x1397 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x1365 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x13A9 DUP2 DUP5 PUSH2 0x1254 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x743 DUP3 DUP5 PUSH2 0x124B JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xFEF DUP2 DUP5 PUSH2 0x1254 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x743 DUP2 PUSH2 0x1289 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x743 DUP2 PUSH2 0x12DF JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x743 DUP2 PUSH2 0x130F JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x743 DUP3 DUP5 PUSH2 0x1365 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x142E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x144D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x1F SWAP2 SWAP1 SWAP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND SWAP1 JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x14ED JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x14D5 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x6E2 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP1 JUMP STOP LOG2 PUSH6 0x627A7A723058 KECCAK256 0xbd 0xe6 0xb9 0xae 0xa8 DUP4 0xce SHR SWAP6 OR 0x5f PUSH20 0xBD78F7A98734E1A9ACF28F74F9E948E207423E9C PUSH13 0x6578706572696D656E74616CF5 STOP CALLDATACOPY ",
- "sourceMap": "734:1237:0:-;;;950:118;8:9:-1;5:2;;;30:1;27;20:12;5:2;950:118:0;;;;;;;;;;;;;;;;;;;;;;;;363:5:5;:18;;-1:-1:-1;;;;;;363:18:5;371:10;363:18;;;2885:13:1;;1048:4:0;;1054:6;;2885:13:1;;363:18:5;;2885:13:1;;;;;:::i;:::-;-1:-1:-1;2908:17:1;;;;:7;;:17;;;;;:::i;:::-;;2788:144;;950:118:0;;734:1237;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;734:1237:0;;;-1:-1:-1;734:1237:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;6:444:-1:-;;112:4;100:17;;96:27;-1:-1;86:2;;137:1;134;127:12;86:2;167:6;161:13;189:65;204:49;246:6;204:49;;;189:65;;;180:74;;274:6;267:5;260:21;310:4;302:6;298:17;343:4;336:5;332:16;378:3;369:6;364:3;360:16;357:25;354:2;;;395:1;392;385:12;354:2;405:39;437:6;432:3;427;405:39;;;79:371;;;;;;;;458:597;;;610:2;598:9;589:7;585:23;581:32;578:2;;;626:1;623;616:12;578:2;661:24;;-1:-1;;;;;694:30;;691:2;;;737:1;734;727:12;691:2;757:74;823:7;814:6;803:9;799:22;757:74;;;747:84;;640:197;889:2;878:9;874:18;868:25;-1:-1;;;;;905:6;902:30;899:2;;;945:1;942;935:12;899:2;965:74;1031:7;1022:6;1011:9;1007:22;965:74;;;955:84;;847:198;572:483;;;;;;1062:256;1124:2;1118:9;1150:17;;;-1:-1;;;;;1210:34;;1246:22;;;1207:62;1204:2;;;1282:1;1279;1272:12;1204:2;1298;1291:22;1102:216;;-1:-1;1102:216;1325:259;;-1:-1;;;;;1461:6;1458:30;1455:2;;;1501:1;1498;1491:12;1455:2;-1:-1;1574:4;1545;1522:17;;;;-1:-1;;1518:33;1564:15;;1392:192;1592:268;1657:1;1664:101;1678:6;1675:1;1672:13;1664:101;;;1745:11;;;1739:18;1726:11;;;1719:39;1700:2;1693:10;1664:101;;;1780:6;1777:1;1774:13;1771:2;;;1845:1;1836:6;1831:3;1827:16;1820:27;1771:2;1641:219;;;;;;734:1237:0;;;;;;"
+ "object": "0x60806040523480156200001157600080fd5b50604051620015633803806200156383398101604052805160208083015160008054600160a060020a031916331790559183018051909392909201918391839162000063916001919085019062000084565b5080516200007990600290602084019062000084565b505050505062000129565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620000c757805160ff1916838001178555620000f7565b82800160010185558215620000f7579182015b82811115620000f7578251825591602001919060010190620000da565b506200010592915062000109565b5090565b6200012691905b8082111562000105576000815560010162000110565b90565b61142a80620001396000396000f3006080604052600436106100e55763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde0381146100ea578063081812fc14610174578063095ea7b3146101b557806323b872dd146101e857806340c10f191461021f57806342842e0e146102505780634f558e79146102875780636352211e146102b357806370a08231146102cb5780638da5cb5b1461030b57806395d89b41146103205780639dc29fac14610335578063a22cb46514610366578063b88d4fde14610399578063e985e9c514610415578063f2fde38b14610449575b600080fd5b3480156100f657600080fd5b506100ff610477565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610139578181015183820152602001610121565b50505050905090810190601f1680156101665780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561018057600080fd5b5061018c60043561052a565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156101c157600080fd5b506101e673ffffffffffffffffffffffffffffffffffffffff60043516602435610552565b005b3480156101f457600080fd5b506101e673ffffffffffffffffffffffffffffffffffffffff60043581169060243516604435610690565b34801561022b57600080fd5b506101e673ffffffffffffffffffffffffffffffffffffffff60043516602435610773565b34801561025c57600080fd5b506101e673ffffffffffffffffffffffffffffffffffffffff600435811690602435166044356108a2565b34801561029357600080fd5b5061029f6004356108da565b604080519115158252519081900360200190f35b3480156102bf57600080fd5b5061018c600435610904565b3480156102d757600080fd5b506102f973ffffffffffffffffffffffffffffffffffffffff6004351661093b565b60408051918252519081900360200190f35b34801561031757600080fd5b5061018c610988565b34801561032c57600080fd5b506100ff6109a4565b34801561034157600080fd5b506101e673ffffffffffffffffffffffffffffffffffffffff60043516602435610a20565b34801561037257600080fd5b506101e673ffffffffffffffffffffffffffffffffffffffff600435166024351515610b4c565b3480156103a557600080fd5b50604080516020601f6064356004818101359283018490048402850184019095528184526101e69473ffffffffffffffffffffffffffffffffffffffff8135811695602480359092169560443595369560849401918190840183828082843750949750610c089650505050505050565b34801561042157600080fd5b5061029f73ffffffffffffffffffffffffffffffffffffffff60043581169060243516610c47565b34801561045557600080fd5b506101e673ffffffffffffffffffffffffffffffffffffffff60043516610c82565b60018054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010087891615020190951694909404938401819004810282018101909252828152606093909290918301828280156105205780601f106104f557610100808354040283529160200191610520565b820191906000526020600020905b81548152906001019060200180831161050357829003601f168201915b5050505050905090565b60009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b600061055d82610904565b905073ffffffffffffffffffffffffffffffffffffffff838116908216141561058557600080fd5b3373ffffffffffffffffffffffffffffffffffffffff821614806105ae57506105ae8133610c47565b15156105b957600080fd5b60006105c48361052a565b73ffffffffffffffffffffffffffffffffffffffff161415806105fc575073ffffffffffffffffffffffffffffffffffffffff831615155b1561068b5760008281526004602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff878116918217909255835186815293519093918516927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35b505050565b8061069b3382610d68565b15156106a657600080fd5b73ffffffffffffffffffffffffffffffffffffffff841615156106c857600080fd5b73ffffffffffffffffffffffffffffffffffffffff831615156106ea57600080fd5b6106f48483610dfb565b6106fe8483610ee7565b6107088383610fb6565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107f957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b610802816108da565b1561089457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f546f6b656e207769746820746f6b656e496420616c726561647920657869737460448201527f732e000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b61089e8282611079565b5050565b806108ad3382610d68565b15156108b857600080fd5b6108d48484846020604051908101604052806000815250610c08565b50505050565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff16151590565b60008181526003602052604081205473ffffffffffffffffffffffffffffffffffffffff1680151561093557600080fd5b92915050565b600073ffffffffffffffffffffffffffffffffffffffff8216151561095f57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff1660009081526005602052604090205490565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60028054604080516020601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010060018716150201909416859004938401819004810282018101909252828152606093909290918301828280156105205780601f106104f557610100808354040283529160200191610520565b60005473ffffffffffffffffffffffffffffffffffffffff163314610aa657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b610aaf816108da565b1515610b4257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f546f6b656e207769746820746f6b656e496420646f6573206e6f74206578697360448201527f742e000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b61089e82826110f7565b73ffffffffffffffffffffffffffffffffffffffff8216331415610b6f57600080fd5b33600081815260066020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b81610c133382610d68565b1515610c1e57600080fd5b610c29858585610690565b610c358585858561115d565b1515610c4057600080fd5b5050505050565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260066020908152604080832093909416825291909152205460ff1690565b60005473ffffffffffffffffffffffffffffffffffffffff163314610d0857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811615610d6557600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b600080610d7483610904565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610de357508373ffffffffffffffffffffffffffffffffffffffff16610dcb8461052a565b73ffffffffffffffffffffffffffffffffffffffff16145b80610df35750610df38185610c47565b949350505050565b8173ffffffffffffffffffffffffffffffffffffffff16610e1b82610904565b73ffffffffffffffffffffffffffffffffffffffff1614610e3b57600080fd5b60008181526004602052604090205473ffffffffffffffffffffffffffffffffffffffff161561089e57600081815260046020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690558051848152905173ffffffffffffffffffffffffffffffffffffffff8616927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35050565b8173ffffffffffffffffffffffffffffffffffffffff16610f0782610904565b73ffffffffffffffffffffffffffffffffffffffff1614610f2757600080fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260056020526040902054610f58906001611304565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526005602090815260408083209490945591815260039091522080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60008181526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1615610fe557600080fd5b600081815260036020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff87169081179091558352600590915290205461104c90600161137b565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526005602052604090209190915550565b73ffffffffffffffffffffffffffffffffffffffff8216151561109b57600080fd5b6110a58282610fb6565b60408051828152905173ffffffffffffffffffffffffffffffffffffffff8416916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6111018282610dfb565b61110b8282610ee7565b60408051828152905160009173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b600080611169856113f6565b151561117857600191506112fb565b8473ffffffffffffffffffffffffffffffffffffffff1663f0b9e5ba8786866040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561123757818101518382015260200161121f565b50505050905090810190601f1680156112645780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b15801561128557600080fd5b505af1158015611299573d6000803e3d6000fd5b505050506040513d60208110156112af57600080fd5b50517fffffffff0000000000000000000000000000000000000000000000000000000081167ff0b9e5ba0000000000000000000000000000000000000000000000000000000014925090505b50949350505050565b60008282111561137557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f55494e543235365f4f564552464c4f5700000000000000000000000000000000604482015290519081900360640190fd5b50900390565b6000828201838110156113ef57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f55494e543235365f4f564552464c4f5700000000000000000000000000000000604482015290519081900360640190fd5b9392505050565b6000903b11905600a165627a7a723058200d5d9642c4819ee7240b8bd4a7908b21e95e7446c5376821fac0a6251b07e1ad0029",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x1563 CODESIZE SUB DUP1 PUSH3 0x1563 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 MSTORE DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB NOT AND CALLER OR SWAP1 SSTORE SWAP2 DUP4 ADD DUP1 MLOAD SWAP1 SWAP4 SWAP3 SWAP1 SWAP3 ADD SWAP2 DUP4 SWAP2 DUP4 SWAP2 PUSH3 0x63 SWAP2 PUSH1 0x1 SWAP2 SWAP1 DUP6 ADD SWAP1 PUSH3 0x84 JUMP JUMPDEST POP DUP1 MLOAD PUSH3 0x79 SWAP1 PUSH1 0x2 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH3 0x84 JUMP JUMPDEST POP POP POP POP POP PUSH3 0x129 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH3 0xC7 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0xF7 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0xF7 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0xF7 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0xDA JUMP JUMPDEST POP PUSH3 0x105 SWAP3 SWAP2 POP PUSH3 0x109 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH3 0x126 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x105 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x110 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0x142A DUP1 PUSH3 0x139 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xE5 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x6FDDE03 DUP2 EQ PUSH2 0xEA JUMPI DUP1 PUSH4 0x81812FC EQ PUSH2 0x174 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x1B5 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1E8 JUMPI DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x21F JUMPI DUP1 PUSH4 0x42842E0E EQ PUSH2 0x250 JUMPI DUP1 PUSH4 0x4F558E79 EQ PUSH2 0x287 JUMPI DUP1 PUSH4 0x6352211E EQ PUSH2 0x2B3 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x2CB JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x30B JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x320 JUMPI DUP1 PUSH4 0x9DC29FAC EQ PUSH2 0x335 JUMPI DUP1 PUSH4 0xA22CB465 EQ PUSH2 0x366 JUMPI DUP1 PUSH4 0xB88D4FDE EQ PUSH2 0x399 JUMPI DUP1 PUSH4 0xE985E9C5 EQ PUSH2 0x415 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x449 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFF PUSH2 0x477 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 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x139 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x121 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x166 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 DUP1 ISZERO PUSH2 0x180 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x18C PUSH1 0x4 CALLDATALOAD PUSH2 0x52A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD PUSH2 0x552 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH1 0x44 CALLDATALOAD PUSH2 0x690 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x22B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD PUSH2 0x773 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x25C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH1 0x44 CALLDATALOAD PUSH2 0x8A2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x293 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x29F PUSH1 0x4 CALLDATALOAD PUSH2 0x8DA JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x18C PUSH1 0x4 CALLDATALOAD PUSH2 0x904 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2F9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x93B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x317 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x18C PUSH2 0x988 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x32C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFF PUSH2 0x9A4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x341 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD PUSH2 0xA20 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x372 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD ISZERO ISZERO PUSH2 0xB4C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x64 CALLDATALOAD PUSH1 0x4 DUP2 DUP2 ADD CALLDATALOAD SWAP3 DUP4 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP2 DUP5 MSTORE PUSH2 0x1E6 SWAP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD DUP2 AND SWAP6 PUSH1 0x24 DUP1 CALLDATALOAD SWAP1 SWAP3 AND SWAP6 PUSH1 0x44 CALLDATALOAD SWAP6 CALLDATASIZE SWAP6 PUSH1 0x84 SWAP5 ADD SWAP2 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0xC08 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x421 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x29F PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH2 0xC47 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x455 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0xC82 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 DUP8 DUP10 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x520 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x4F5 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x520 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x503 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x55D DUP3 PUSH2 0x904 JUMP JUMPDEST SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP1 DUP3 AND EQ ISZERO PUSH2 0x585 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND EQ DUP1 PUSH2 0x5AE JUMPI POP PUSH2 0x5AE DUP2 CALLER PUSH2 0xC47 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x5B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x5C4 DUP4 PUSH2 0x52A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 PUSH2 0x5FC JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x68B JUMPI PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND SWAP2 DUP3 OR SWAP1 SWAP3 SSTORE DUP4 MLOAD DUP7 DUP2 MSTORE SWAP4 MLOAD SWAP1 SWAP4 SWAP2 DUP6 AND SWAP3 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG3 JUMPDEST POP POP POP JUMP JUMPDEST DUP1 PUSH2 0x69B CALLER DUP3 PUSH2 0xD68 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x6A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND ISZERO ISZERO PUSH2 0x6C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND ISZERO ISZERO PUSH2 0x6EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x6F4 DUP5 DUP4 PUSH2 0xDFB JUMP JUMPDEST PUSH2 0x6FE DUP5 DUP4 PUSH2 0xEE7 JUMP JUMPDEST PUSH2 0x708 DUP4 DUP4 PUSH2 0xFB6 JUMP JUMPDEST DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP5 PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x7F9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x802 DUP2 PUSH2 0x8DA JUMP JUMPDEST ISZERO PUSH2 0x894 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x546F6B656E207769746820746F6B656E496420616C7265616479206578697374 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x732E000000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x84 ADD SWAP1 REVERT JUMPDEST PUSH2 0x89E DUP3 DUP3 PUSH2 0x1079 JUMP JUMPDEST POP POP JUMP JUMPDEST DUP1 PUSH2 0x8AD CALLER DUP3 PUSH2 0xD68 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x8B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8D4 DUP5 DUP5 DUP5 PUSH1 0x20 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH2 0xC08 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO ISZERO PUSH2 0x935 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND ISZERO ISZERO PUSH2 0x95F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP8 AND ISZERO MUL ADD SWAP1 SWAP5 AND DUP6 SWAP1 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x520 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x4F5 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x520 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xAA6 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xAAF DUP2 PUSH2 0x8DA JUMP JUMPDEST ISZERO ISZERO PUSH2 0xB42 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x546F6B656E207769746820746F6B656E496420646F6573206E6F742065786973 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x742E000000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x84 ADD SWAP1 REVERT JUMPDEST PUSH2 0x89E DUP3 DUP3 PUSH2 0x10F7 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND CALLER EQ ISZERO PUSH2 0xB6F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP7 ISZERO ISZERO SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP2 MLOAD SWAP1 DUP2 MSTORE SWAP1 MLOAD SWAP3 SWAP4 SWAP3 PUSH32 0x17307EAB39AB6107E8899845AD3D59BD9653F200F220920489CA2B5937696C31 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST DUP2 PUSH2 0xC13 CALLER DUP3 PUSH2 0xD68 JUMP JUMPDEST ISZERO ISZERO PUSH2 0xC1E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC29 DUP6 DUP6 DUP6 PUSH2 0x690 JUMP JUMPDEST PUSH2 0xC35 DUP6 DUP6 DUP6 DUP6 PUSH2 0x115D JUMP JUMPDEST ISZERO ISZERO PUSH2 0xC40 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xD08 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0xD65 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND OR SWAP1 SSTORE JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xD74 DUP4 PUSH2 0x904 JUMP JUMPDEST SWAP1 POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ DUP1 PUSH2 0xDE3 JUMPI POP DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xDCB DUP5 PUSH2 0x52A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ JUMPDEST DUP1 PUSH2 0xDF3 JUMPI POP PUSH2 0xDF3 DUP2 DUP6 PUSH2 0xC47 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xE1B DUP3 PUSH2 0x904 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xE3B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x89E JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE DUP1 MLOAD DUP5 DUP2 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP3 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP JUMP JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xF07 DUP3 PUSH2 0x904 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xF27 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xF58 SWAP1 PUSH1 0x1 PUSH2 0x1304 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE SWAP2 DUP2 MSTORE PUSH1 0x3 SWAP1 SWAP2 MSTORE KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0xFE5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP4 MSTORE PUSH1 0x5 SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0x104C SWAP1 PUSH1 0x1 PUSH2 0x137B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND ISZERO ISZERO PUSH2 0x109B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x10A5 DUP3 DUP3 PUSH2 0xFB6 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP2 PUSH1 0x0 SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH2 0x1101 DUP3 DUP3 PUSH2 0xDFB JUMP JUMPDEST PUSH2 0x110B DUP3 DUP3 PUSH2 0xEE7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1169 DUP6 PUSH2 0x13F6 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x1178 JUMPI PUSH1 0x1 SWAP2 POP PUSH2 0x12FB JUMP JUMPDEST DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xF0B9E5BA DUP8 DUP7 DUP7 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH29 0x100000000000000000000000000000000000000000000000000000000 MUL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1237 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x121F JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1264 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 SWAP5 POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1285 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1299 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x12AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH32 0xF0B9E5BA00000000000000000000000000000000000000000000000000000000 EQ SWAP3 POP SWAP1 POP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 GT ISZERO PUSH2 0x1375 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x55494E543235365F4F564552464C4F5700000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x13EF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x55494E543235365F4F564552464C4F5700000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP1 EXTCODESIZE GT SWAP1 JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 0xd 0x5d SWAP7 TIMESTAMP 0xc4 DUP2 SWAP15 0xe7 0x24 SIGNEXTEND DUP12 0xd4 0xa7 SWAP1 DUP12 0x21 0xe9 0x5e PUSH21 0x46C5376821FAC0A6251B07E1AD0029000000000000 ",
+ "sourceMap": "735:1237:0:-;;;951:118;8:9:-1;5:2;;;30:1;27;20:12;5:2;951:118:0;;;;;;;;;;;;;;;;;;;;;329:5:5;:18;;-1:-1:-1;;;;;;329:18:5;337:10;329:18;;;951:118:0;;;2886:13:1;;951:118:0;;;;;;;;;;;2886:13:1;;329:18:5;;2886:13:1;;;;;:::i;:::-;-1:-1:-1;2909:17:1;;;;:7;;:17;;;;;:::i;:::-;;2797:136;;951:118:0;;735:1237;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;735:1237:0;;;-1:-1:-1;735:1237:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;"
},
"deployedBytecode": {
"linkReferences": {},
- "object": "0x6080604052600436106100e55763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde0381146100ea578063081812fc14610115578063095ea7b31461014257806323b872dd1461016457806340c10f191461018457806342842e0e146101a45780634f558e79146101c45780636352211e146101f157806370a08231146102115780638da5cb5b1461023e57806395d89b41146102535780639dc29fac14610268578063a22cb46514610288578063b88d4fde146102a8578063e985e9c5146102c8578063f2fde38b146102e8575b600080fd5b3480156100f657600080fd5b506100ff610308565b60405161010c91906113c0565b60405180910390f35b34801561012157600080fd5b5061013561013036600461121e565b6103bb565b60405161010c919061136e565b34801561014e57600080fd5b5061016261015d3660046111d0565b6103e3565b005b34801561017057600080fd5b5061016261017f3660046110da565b610525565b34801561019057600080fd5b5061016261019f3660046111d0565b610608565b3480156101b057600080fd5b506101626101bf3660046110da565b6106b0565b3480156101d057600080fd5b506101e46101df36600461121e565b6106e8565b60405161010c91906113b2565b3480156101fd57600080fd5b5061013561020c36600461121e565b610712565b34801561021d57600080fd5b5061023161022c366004611082565b610749565b60405161010c9190611401565b34801561024a57600080fd5b50610135610796565b34801561025f57600080fd5b506100ff6107b2565b34801561027457600080fd5b506101626102833660046111d0565b61082e565b34801561029457600080fd5b506101626102a33660046111a0565b6108ca565b3480156102b457600080fd5b506101626102c3366004611127565b610987565b3480156102d457600080fd5b506101e46102e33660046110a0565b6109c6565b3480156102f457600080fd5b50610162610303366004611082565b610a01565b60018054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010087891615020190951694909404938401819004810282018101909252828152606093909290918301828280156103b15780601f10610386576101008083540402835291602001916103b1565b820191906000526020600020905b81548152906001019060200180831161039457829003601f168201915b5050505050905090565b60009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60006103ee82610712565b905073ffffffffffffffffffffffffffffffffffffffff838116908216141561041657600080fd5b3373ffffffffffffffffffffffffffffffffffffffff8216148061043f575061043f81336109c6565b151561044a57600080fd5b6000610455836103bb565b73ffffffffffffffffffffffffffffffffffffffff1614158061048d575073ffffffffffffffffffffffffffffffffffffffff831615155b15610520576000828152600460205260409081902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8681169182179092559151908316907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610517908690611401565b60405180910390a35b505050565b806105303382610ab2565b151561053b57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416151561055d57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8316151561057f57600080fd5b6105898483610b45565b6105938483610c2a565b61059d8383610cf9565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516105fa9190611401565b60405180910390a350505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610662576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610659906113e1565b60405180910390fd5b61066b816106e8565b156106a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610659906113d1565b6106ac8282610dbc565b5050565b806106bb3382610ab2565b15156106c657600080fd5b6106e28484846020604051908101604052806000815250610987565b50505050565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff16151590565b60008181526003602052604081205473ffffffffffffffffffffffffffffffffffffffff1680151561074357600080fd5b92915050565b600073ffffffffffffffffffffffffffffffffffffffff8216151561076d57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff1660009081526005602052604090205490565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60028054604080516020601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010060018716150201909416859004938401819004810282018101909252828152606093909290918301828280156103b15780601f10610386576101008083540402835291602001916103b1565b60005473ffffffffffffffffffffffffffffffffffffffff16331461087f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610659906113e1565b610888816106e8565b15156108c0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610659906113f1565b6106ac8282610e46565b73ffffffffffffffffffffffffffffffffffffffff82163314156108ed57600080fd5b33600081815260066020908152604080832073ffffffffffffffffffffffffffffffffffffffff871680855292529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151517905590519091907f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319061097b9085906113b2565b60405180910390a35050565b816109923382610ab2565b151561099d57600080fd5b6109a8858585610525565b6109b485858585610eb8565b15156109bf57600080fd5b5050505050565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260066020908152604080832093909416825291909152205460ff1690565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610659906113e1565b73ffffffffffffffffffffffffffffffffffffffff811615610aaf57600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b600080610abe83610712565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610b2d57508373ffffffffffffffffffffffffffffffffffffffff16610b15846103bb565b73ffffffffffffffffffffffffffffffffffffffff16145b80610b3d5750610b3d81856109c6565b949350505050565b8173ffffffffffffffffffffffffffffffffffffffff16610b6582610712565b73ffffffffffffffffffffffffffffffffffffffff1614610b8557600080fd5b60008181526004602052604090205473ffffffffffffffffffffffffffffffffffffffff16156106ac5760008181526004602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555173ffffffffffffffffffffffffffffffffffffffff8416907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061097b908590611401565b8173ffffffffffffffffffffffffffffffffffffffff16610c4a82610712565b73ffffffffffffffffffffffffffffffffffffffff1614610c6a57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260056020526040902054610c9b906001610fce565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526005602090815260408083209490945591815260039091522080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60008181526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1615610d2857600080fd5b600081815260036020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff871690811790915583526005909152902054610d8f906001610fe0565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526005602052604090209190915550565b73ffffffffffffffffffffffffffffffffffffffff82161515610dde57600080fd5b610de88282610cf9565b8173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161097b9190611401565b610e508282610b45565b610e5a8282610c2a565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161097b9190611401565b600080610ec485610ff6565b1515610ed35760019150610fc5565b6040517ff0b9e5ba00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86169063f0b9e5ba90610f299089908890889060040161137c565b602060405180830381600087803b158015610f4357600080fd5b505af1158015610f57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f7b9190810190611200565b7fffffffff0000000000000000000000000000000000000000000000000000000081167ff0b9e5ba0000000000000000000000000000000000000000000000000000000014925090505b50949350505050565b600082821115610fda57fe5b50900390565b600082820183811015610fef57fe5b9392505050565b6000903b1190565b6000610fef8235611480565b6000610fef8235611499565b6000610fef82516114a1565b6000601f8201831361103357600080fd5b813561104661104182611436565b61140f565b9150808252602083016020830185838301111561106257600080fd5b61106d8382846114c6565b50505092915050565b6000610fef823561149e565b60006020828403121561109457600080fd5b6000610b3d8484610ffe565b600080604083850312156110b357600080fd5b60006110bf8585610ffe565b92505060206110d085828601610ffe565b9150509250929050565b6000806000606084860312156110ef57600080fd5b60006110fb8686610ffe565b935050602061110c86828701610ffe565b925050604061111d86828701611076565b9150509250925092565b6000806000806080858703121561113d57600080fd5b60006111498787610ffe565b945050602061115a87828801610ffe565b935050604061116b87828801611076565b925050606085013567ffffffffffffffff81111561118857600080fd5b61119487828801611022565b91505092959194509250565b600080604083850312156111b357600080fd5b60006111bf8585610ffe565b92505060206110d08582860161100a565b600080604083850312156111e357600080fd5b60006111ef8585610ffe565b92505060206110d085828601611076565b60006020828403121561121257600080fd5b6000610b3d8484611016565b60006020828403121561123057600080fd5b6000610b3d8484611076565b61124581611480565b82525050565b61124581611499565b600061125f8261147c565b8084526112738160208601602086016114d2565b61127c816114fe565b9093016020019392505050565b602281527f546f6b656e207769746820746f6b656e496420616c726561647920657869737460208201527f732e000000000000000000000000000000000000000000000000000000000000604082015260600190565b601381527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000602082015260400190565b602281527f546f6b656e207769746820746f6b656e496420646f6573206e6f74206578697360208201527f742e000000000000000000000000000000000000000000000000000000000000604082015260600190565b6112458161149e565b60208101610743828461123c565b6060810161138a828661123c565b6113976020830185611365565b81810360408301526113a98184611254565b95945050505050565b60208101610743828461124b565b60208082528101610fef8184611254565b6020808252810161074381611289565b60208082528101610743816112df565b602080825281016107438161130f565b602081016107438284611365565b60405181810167ffffffffffffffff8111828210171561142e57600080fd5b604052919050565b600067ffffffffffffffff82111561144d57600080fd5b506020601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160190565b5190565b73ffffffffffffffffffffffffffffffffffffffff1690565b151590565b90565b7fffffffff000000000000000000000000000000000000000000000000000000001690565b82818337506000910152565b60005b838110156114ed5781810151838201526020016114d5565b838111156106e25750506000910152565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016905600a265627a7a72305820bde6b9aea883ce1c95175f73bd78f7a98734e1a9acf28f74f9e948e207423e9c6c6578706572696d656e74616cf50037",
- "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xE5 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x6FDDE03 DUP2 EQ PUSH2 0xEA JUMPI DUP1 PUSH4 0x81812FC EQ PUSH2 0x115 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x142 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x164 JUMPI DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x184 JUMPI DUP1 PUSH4 0x42842E0E EQ PUSH2 0x1A4 JUMPI DUP1 PUSH4 0x4F558E79 EQ PUSH2 0x1C4 JUMPI DUP1 PUSH4 0x6352211E EQ PUSH2 0x1F1 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x211 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x23E JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x253 JUMPI DUP1 PUSH4 0x9DC29FAC EQ PUSH2 0x268 JUMPI DUP1 PUSH4 0xA22CB465 EQ PUSH2 0x288 JUMPI DUP1 PUSH4 0xB88D4FDE EQ PUSH2 0x2A8 JUMPI DUP1 PUSH4 0xE985E9C5 EQ PUSH2 0x2C8 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x2E8 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFF PUSH2 0x308 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x10C SWAP2 SWAP1 PUSH2 0x13C0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x121 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x135 PUSH2 0x130 CALLDATASIZE PUSH1 0x4 PUSH2 0x121E JUMP JUMPDEST PUSH2 0x3BB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x10C SWAP2 SWAP1 PUSH2 0x136E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x14E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x162 PUSH2 0x15D CALLDATASIZE PUSH1 0x4 PUSH2 0x11D0 JUMP JUMPDEST PUSH2 0x3E3 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x170 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x162 PUSH2 0x17F CALLDATASIZE PUSH1 0x4 PUSH2 0x10DA JUMP JUMPDEST PUSH2 0x525 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x190 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x162 PUSH2 0x19F CALLDATASIZE PUSH1 0x4 PUSH2 0x11D0 JUMP JUMPDEST PUSH2 0x608 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x162 PUSH2 0x1BF CALLDATASIZE PUSH1 0x4 PUSH2 0x10DA JUMP JUMPDEST PUSH2 0x6B0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1D0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E4 PUSH2 0x1DF CALLDATASIZE PUSH1 0x4 PUSH2 0x121E JUMP JUMPDEST PUSH2 0x6E8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x10C SWAP2 SWAP1 PUSH2 0x13B2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x135 PUSH2 0x20C CALLDATASIZE PUSH1 0x4 PUSH2 0x121E JUMP JUMPDEST PUSH2 0x712 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x21D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x231 PUSH2 0x22C CALLDATASIZE PUSH1 0x4 PUSH2 0x1082 JUMP JUMPDEST PUSH2 0x749 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x10C SWAP2 SWAP1 PUSH2 0x1401 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x24A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x135 PUSH2 0x796 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x25F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFF PUSH2 0x7B2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x274 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x162 PUSH2 0x283 CALLDATASIZE PUSH1 0x4 PUSH2 0x11D0 JUMP JUMPDEST PUSH2 0x82E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x294 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x162 PUSH2 0x2A3 CALLDATASIZE PUSH1 0x4 PUSH2 0x11A0 JUMP JUMPDEST PUSH2 0x8CA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x162 PUSH2 0x2C3 CALLDATASIZE PUSH1 0x4 PUSH2 0x1127 JUMP JUMPDEST PUSH2 0x987 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E4 PUSH2 0x2E3 CALLDATASIZE PUSH1 0x4 PUSH2 0x10A0 JUMP JUMPDEST PUSH2 0x9C6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x162 PUSH2 0x303 CALLDATASIZE PUSH1 0x4 PUSH2 0x1082 JUMP JUMPDEST PUSH2 0xA01 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 DUP8 DUP10 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3B1 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x386 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3B1 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x394 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3EE DUP3 PUSH2 0x712 JUMP JUMPDEST SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP1 DUP3 AND EQ ISZERO PUSH2 0x416 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND EQ DUP1 PUSH2 0x43F JUMPI POP PUSH2 0x43F DUP2 CALLER PUSH2 0x9C6 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x44A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x455 DUP4 PUSH2 0x3BB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 PUSH2 0x48D JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x520 JUMPI PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND SWAP2 DUP3 OR SWAP1 SWAP3 SSTORE SWAP2 MLOAD SWAP1 DUP4 AND SWAP1 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP1 PUSH2 0x517 SWAP1 DUP7 SWAP1 PUSH2 0x1401 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 JUMPDEST POP POP POP JUMP JUMPDEST DUP1 PUSH2 0x530 CALLER DUP3 PUSH2 0xAB2 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x53B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND ISZERO ISZERO PUSH2 0x55D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND ISZERO ISZERO PUSH2 0x57F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x589 DUP5 DUP4 PUSH2 0xB45 JUMP JUMPDEST PUSH2 0x593 DUP5 DUP4 PUSH2 0xC2A JUMP JUMPDEST PUSH2 0x59D DUP4 DUP4 PUSH2 0xCF9 JUMP JUMPDEST DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP5 PUSH1 0x40 MLOAD PUSH2 0x5FA SWAP2 SWAP1 PUSH2 0x1401 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x662 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x659 SWAP1 PUSH2 0x13E1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x66B DUP2 PUSH2 0x6E8 JUMP JUMPDEST ISZERO PUSH2 0x6A2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x659 SWAP1 PUSH2 0x13D1 JUMP JUMPDEST PUSH2 0x6AC DUP3 DUP3 PUSH2 0xDBC JUMP JUMPDEST POP POP JUMP JUMPDEST DUP1 PUSH2 0x6BB CALLER DUP3 PUSH2 0xAB2 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x6C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x6E2 DUP5 DUP5 DUP5 PUSH1 0x20 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH2 0x987 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO ISZERO PUSH2 0x743 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND ISZERO ISZERO PUSH2 0x76D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP8 AND ISZERO MUL ADD SWAP1 SWAP5 AND DUP6 SWAP1 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3B1 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x386 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3B1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x87F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x659 SWAP1 PUSH2 0x13E1 JUMP JUMPDEST PUSH2 0x888 DUP2 PUSH2 0x6E8 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x8C0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x659 SWAP1 PUSH2 0x13F1 JUMP JUMPDEST PUSH2 0x6AC DUP3 DUP3 PUSH2 0xE46 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND CALLER EQ ISZERO PUSH2 0x8ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP6 ISZERO ISZERO OR SWAP1 SSTORE SWAP1 MLOAD SWAP1 SWAP2 SWAP1 PUSH32 0x17307EAB39AB6107E8899845AD3D59BD9653F200F220920489CA2B5937696C31 SWAP1 PUSH2 0x97B SWAP1 DUP6 SWAP1 PUSH2 0x13B2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST DUP2 PUSH2 0x992 CALLER DUP3 PUSH2 0xAB2 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x99D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x9A8 DUP6 DUP6 DUP6 PUSH2 0x525 JUMP JUMPDEST PUSH2 0x9B4 DUP6 DUP6 DUP6 DUP6 PUSH2 0xEB8 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x9BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xA52 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x659 SWAP1 PUSH2 0x13E1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0xAAF JUMPI PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND OR SWAP1 SSTORE JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xABE DUP4 PUSH2 0x712 JUMP JUMPDEST SWAP1 POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ DUP1 PUSH2 0xB2D JUMPI POP DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xB15 DUP5 PUSH2 0x3BB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ JUMPDEST DUP1 PUSH2 0xB3D JUMPI POP PUSH2 0xB3D DUP2 DUP6 PUSH2 0x9C6 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xB65 DUP3 PUSH2 0x712 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xB85 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x6AC JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP1 PUSH2 0x97B SWAP1 DUP6 SWAP1 PUSH2 0x1401 JUMP JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xC4A DUP3 PUSH2 0x712 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xC6A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xC9B SWAP1 PUSH1 0x1 PUSH2 0xFCE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE SWAP2 DUP2 MSTORE PUSH1 0x3 SWAP1 SWAP2 MSTORE KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0xD28 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP4 MSTORE PUSH1 0x5 SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0xD8F SWAP1 PUSH1 0x1 PUSH2 0xFE0 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND ISZERO ISZERO PUSH2 0xDDE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xDE8 DUP3 DUP3 PUSH2 0xCF9 JUMP JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x97B SWAP2 SWAP1 PUSH2 0x1401 JUMP JUMPDEST PUSH2 0xE50 DUP3 DUP3 PUSH2 0xB45 JUMP JUMPDEST PUSH2 0xE5A DUP3 DUP3 PUSH2 0xC2A JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x97B SWAP2 SWAP1 PUSH2 0x1401 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xEC4 DUP6 PUSH2 0xFF6 JUMP JUMPDEST ISZERO ISZERO PUSH2 0xED3 JUMPI PUSH1 0x1 SWAP2 POP PUSH2 0xFC5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xF0B9E5BA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP1 PUSH4 0xF0B9E5BA SWAP1 PUSH2 0xF29 SWAP1 DUP10 SWAP1 DUP9 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x137C JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xF43 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xF57 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0xF7B SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x1200 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH32 0xF0B9E5BA00000000000000000000000000000000000000000000000000000000 EQ SWAP3 POP SWAP1 POP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 GT ISZERO PUSH2 0xFDA JUMPI INVALID JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0xFEF JUMPI INVALID JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP1 EXTCODESIZE GT SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFEF DUP3 CALLDATALOAD PUSH2 0x1480 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFEF DUP3 CALLDATALOAD PUSH2 0x1499 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFEF DUP3 MLOAD PUSH2 0x14A1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0x1033 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1046 PUSH2 0x1041 DUP3 PUSH2 0x1436 JUMP JUMPDEST PUSH2 0x140F JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP4 ADD DUP6 DUP4 DUP4 ADD GT ISZERO PUSH2 0x1062 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x106D DUP4 DUP3 DUP5 PUSH2 0x14C6 JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFEF DUP3 CALLDATALOAD PUSH2 0x149E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1094 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xB3D DUP5 DUP5 PUSH2 0xFFE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x10B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x10BF DUP6 DUP6 PUSH2 0xFFE JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x10D0 DUP6 DUP3 DUP7 ADD PUSH2 0xFFE JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x10EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x10FB DUP7 DUP7 PUSH2 0xFFE JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x110C DUP7 DUP3 DUP8 ADD PUSH2 0xFFE JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x111D DUP7 DUP3 DUP8 ADD PUSH2 0x1076 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x113D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1149 DUP8 DUP8 PUSH2 0xFFE JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x115A DUP8 DUP3 DUP9 ADD PUSH2 0xFFE JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 PUSH2 0x116B DUP8 DUP3 DUP9 ADD PUSH2 0x1076 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1188 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1194 DUP8 DUP3 DUP9 ADD PUSH2 0x1022 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x11B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x11BF DUP6 DUP6 PUSH2 0xFFE JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x10D0 DUP6 DUP3 DUP7 ADD PUSH2 0x100A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x11E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x11EF DUP6 DUP6 PUSH2 0xFFE JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x10D0 DUP6 DUP3 DUP7 ADD PUSH2 0x1076 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1212 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xB3D DUP5 DUP5 PUSH2 0x1016 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1230 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xB3D DUP5 DUP5 PUSH2 0x1076 JUMP JUMPDEST PUSH2 0x1245 DUP2 PUSH2 0x1480 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x1245 DUP2 PUSH2 0x1499 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x125F DUP3 PUSH2 0x147C JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH2 0x1273 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x14D2 JUMP JUMPDEST PUSH2 0x127C DUP2 PUSH2 0x14FE JUMP JUMPDEST SWAP1 SWAP4 ADD PUSH1 0x20 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x22 DUP2 MSTORE PUSH32 0x546F6B656E207769746820746F6B656E496420616C7265616479206578697374 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x732E000000000000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x13 DUP2 MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x22 DUP2 MSTORE PUSH32 0x546F6B656E207769746820746F6B656E496420646F6573206E6F742065786973 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x742E000000000000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH2 0x1245 DUP2 PUSH2 0x149E JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x743 DUP3 DUP5 PUSH2 0x123C JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x138A DUP3 DUP7 PUSH2 0x123C JUMP JUMPDEST PUSH2 0x1397 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x1365 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x13A9 DUP2 DUP5 PUSH2 0x1254 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x743 DUP3 DUP5 PUSH2 0x124B JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xFEF DUP2 DUP5 PUSH2 0x1254 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x743 DUP2 PUSH2 0x1289 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x743 DUP2 PUSH2 0x12DF JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x743 DUP2 PUSH2 0x130F JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x743 DUP3 DUP5 PUSH2 0x1365 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x142E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x144D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x1F SWAP2 SWAP1 SWAP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND SWAP1 JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x14ED JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x14D5 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x6E2 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP1 JUMP STOP LOG2 PUSH6 0x627A7A723058 KECCAK256 0xbd 0xe6 0xb9 0xae 0xa8 DUP4 0xce SHR SWAP6 OR 0x5f PUSH20 0xBD78F7A98734E1A9ACF28F74F9E948E207423E9C PUSH13 0x6578706572696D656E74616CF5 STOP CALLDATACOPY ",
- "sourceMap": "734:1237:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3033:102:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3033:102:1;;;;;;;;;;;;;;;;;;;;5586:145;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5586:145:1;;;;;;;;;;;;;;;;;4948:401;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4948:401:1;;;;;;;;;;;7190:362;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7190:362:1;;;;;;;;;1332:222:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1332:222:0;;;;;;;;;8183:254:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8183:254:1;;;;;;;;;4339:178;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4339:178:1;;;;;;;;;;;;;;;;;3947:206;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3947:206:1;;;;;;;;;3546:180;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3546:180:1;;;;;;;;;;;;;;;;;292:20:5;;8:9:-1;5:2;;;30:1;27;20:12;5:2;292:20:5;;;;3240:106:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3240:106:1;;;;1742:227:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1742:227:0;;;;;;;;;6025:231:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6025:231:1;;;;;;;;;9139:339;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9139:339:1;;;;;;;;;6574:176;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6574:176:1;;;;;;;;;534:167:5;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;534:167:5;;;;;;;;;3033:102:1;3123:5;3116:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3094:6;;3116:12;;3123:5;;3116:12;;3123:5;3116:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3033:102;:::o;5586:145::-;5670:7;5700:24;;;:14;:24;;;;;;;;;5586:145::o;4948:401::-;5025:13;5041:17;5049:8;5041:7;:17::i;:::-;5025:33;-1:-1:-1;5076:12:1;;;;;;;;;5068:21;;;;;;5107:10;:19;;;;;:58;;;5130:35;5147:5;5154:10;5130:16;:35::i;:::-;5099:67;;;;;;;;5214:1;5181:21;5193:8;5181:11;:21::i;:::-;:35;;;;:56;;;-1:-1:-1;5220:17:1;;;;;5181:56;5177:166;;;5253:24;;;;:14;:24;;;;;;;:30;;;;;;;;;;;;;;5302;;;;;;;;;;5253:24;;5302:30;;;;;;;;;;5177:166;4948:401;;;:::o;7190:362::-;7293:8;2724:39;2742:10;2754:8;2724:17;:39::i;:::-;2716:48;;;;;;;;7325:19;;;;;7317:28;;;;;;7363:17;;;;;7355:26;;;;;;7392:30;7406:5;7413:8;7392:13;:30::i;:::-;7432:32;7448:5;7455:8;7432:15;:32::i;:::-;7474:25;7485:3;7490:8;7474:10;:25::i;:::-;7531:3;7515:30;;7524:5;7515:30;;;7536:8;7515:30;;;;;;;;;;;;;;;7190:362;;;;:::o;1332:222:0:-;460:5:5;;;;446:10;:19;425:85;;;;;;;;;;;;;;;;;;;;;;1444:15:0;1451:7;1444:6;:15::i;:::-;1443:16;1422:97;;;;;;;;;;;;;;1529:18;1535:2;1539:7;1529:5;:18::i;:::-;1332:222;;:::o;8183:254:1:-;8315:8;2724:39;2742:10;2754:8;2724:17;:39::i;:::-;2716:48;;;;;;;;8388:42;8405:5;8412:3;8417:8;8388:42;;;;;;;;;;;;;:16;:42::i;:::-;8183:254;;;;:::o;4339:178::-;4418:4;4454:20;;;:10;:20;;;;;;;;4491:19;;;4339:178::o;3947:206::-;4027:7;4066:20;;;:10;:20;;;;;;;;4104:19;;;4096:28;;;;;;4141:5;3947:206;-1:-1:-1;;3947:206:1:o;3546:180::-;3626:7;3657:20;;;;;3649:29;;;;;;-1:-1:-1;3695:24:1;;;;;;:16;:24;;;;;;;3546:180::o;292:20:5:-;;;;;;:::o;3240:106:1:-;3332:7;3325:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3303:6;;3325:14;;3332:7;;3325:14;;3332:7;3325:14;;;;;;;;;;;;;;;;;;;;;;;;1742:227:0;460:5:5;;;;446:10;:19;425:85;;;;;;;;;;;;;;1856:15:0;1863:7;1856:6;:15::i;:::-;1835:96;;;;;;;;;;;;;;;;1941:21;1947:5;1954:7;1941:5;:21::i;6025:231:1:-;6118:17;;;6125:10;6118:17;;6110:26;;;;;;6164:10;6146:29;;;;:17;:29;;;;;;;;;:34;;;;;;;;;;;:46;;;;;;;;;;6207:42;;6146:34;;6164:10;6207:42;;;;6146:46;;6207:42;;;;;;;;;;6025:231;;:::o;9139:339::-;9292:8;2724:39;2742:10;2754:8;2724:17;:39::i;:::-;2716:48;;;;;;;;9316:34;9329:5;9336:3;9341:8;9316:12;:34::i;:::-;9417:53;9442:5;9449:3;9454:8;9464:5;9417:24;:53::i;:::-;9409:62;;;;;;;;9139:339;;;;;:::o;6574:176::-;6707:25;;;;6680:4;6707:25;;;:17;:25;;;;;;;;:36;;;;;;;;;;;;;;;6574:176::o;534:167:5:-;460:5;;;;446:10;:19;425:85;;;;;;;;;;;;;;630:22;;;;626:69;;668:5;:16;;;;;;;;;;626:69;534:167;:::o;9835:278:1:-;9945:4;9965:13;9981:17;9989:8;9981:7;:17::i;:::-;9965:33;;10027:5;10015:17;;:8;:17;;;:54;;;;10061:8;10036:33;;:21;10048:8;10036:11;:21::i;:::-;:33;;;10015:54;:91;;;;10073:33;10090:5;10097:8;10073:16;:33::i;:::-;10008:98;9835:278;-1:-1:-1;;;;9835:278:1:o;11260:303::-;11377:6;11356:27;;:17;11364:8;11356:7;:17::i;:::-;:27;;;11348:36;;;;;;11434:1;11398:24;;;:14;:24;;;;;;:38;:24;:38;11394:163;;11487:1;11452:24;;;:14;:24;;;;;;:37;;;;;;11508:38;11452:37;11508:38;;;;;;;11467:8;;11508:38;;12356:245;12474:5;12453:26;;:17;12461:8;12453:7;:17::i;:::-;:26;;;12445:35;;;;;;12524:23;;;;;;;:16;:23;;;;;;12516:35;;12549:1;12516:7;:35::i;:::-;12490:23;;;;;;;;:16;:23;;;;;;;;:61;;;;12561:20;;;:10;:20;;;;:33;;;;;;12356:245::o;11834:235::-;11956:1;11924:20;;;:10;:20;;;;;;:34;:20;:34;11916:43;;;;;;11969:20;;;;:10;:20;;;;;;;;:26;;;;;;;;;;;;;12037:21;;:16;:21;;;;;;12029:33;;-1:-1:-1;12029:7:1;:33::i;:::-;12005:21;;;;;;;;:16;:21;;;;;:57;;;;-1:-1:-1;11834:235:1:o;10376:195::-;10461:17;;;;;10453:26;;;;;;10489:25;10500:3;10505:8;10489:10;:25::i;:::-;10550:3;10529:35;;10546:1;10529:35;;;10555:8;10529:35;;;;;;;10770:214;10850:31;10864:6;10872:8;10850:13;:31::i;:::-;10891:33;10907:6;10915:8;10891:15;:33::i;:::-;10964:1;10939:38;;10948:6;10939:38;;;10968:8;10939:38;;;;;;;13124:375;13284:4;13371:13;13309:15;13320:3;13309:10;:15::i;:::-;13308:16;13304:58;;;13347:4;13340:11;;;;13304:58;13387:61;;;;;:37;;;;;;:61;;13425:5;;13432:8;;13442:5;;13387:61;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13387:61:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13387:61:1;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13387:61:1;;;;;;;;;13466:25;;;13476:15;13466:25;;-1:-1:-1;13371:77:1;-1:-1:-1;13124:375:1;;;;;;;;:::o;418:146:6:-;498:7;528:6;;;;521:14;;;;-1:-1:-1;552:5:6;;;418:146::o;570:166::-;650:7;682:5;;;704:6;;;;697:14;;;;728:1;570:166;-1:-1:-1;;;570:166:6:o;13505:634:1:-;13586:4;14037:17;;14124:8;;13505:634::o;5:118:-1:-;;72:46;110:6;97:20;72:46;;130:112;;194:43;229:6;216:20;194:43;;249:120;;326:38;356:6;350:13;326:38;;377:440;;471:4;459:17;;455:27;-1:-1;445:2;;496:1;493;486:12;445:2;533:6;520:20;555:64;570:48;611:6;570:48;;;555:64;;;546:73;;639:6;632:5;625:21;675:4;667:6;663:17;708:4;701:5;697:16;743:3;734:6;729:3;725:16;722:25;719:2;;;760:1;757;750:12;719:2;770:41;804:6;799:3;794;770:41;;;438:379;;;;;;;;825:118;;892:46;930:6;917:20;892:46;;950:241;;1054:2;1042:9;1033:7;1029:23;1025:32;1022:2;;;1070:1;1067;1060:12;1022:2;1105:1;1122:53;1167:7;1147:9;1122:53;;1198:366;;;1319:2;1307:9;1298:7;1294:23;1290:32;1287:2;;;1335:1;1332;1325:12;1287:2;1370:1;1387:53;1432:7;1412:9;1387:53;;;1377:63;;1349:97;1477:2;1495:53;1540:7;1531:6;1520:9;1516:22;1495:53;;;1485:63;;1456:98;1281:283;;;;;;1571:491;;;;1709:2;1697:9;1688:7;1684:23;1680:32;1677:2;;;1725:1;1722;1715:12;1677:2;1760:1;1777:53;1822:7;1802:9;1777:53;;;1767:63;;1739:97;1867:2;1885:53;1930:7;1921:6;1910:9;1906:22;1885:53;;;1875:63;;1846:98;1975:2;1993:53;2038:7;2029:6;2018:9;2014:22;1993:53;;;1983:63;;1954:98;1671:391;;;;;;2069:721;;;;;2233:3;2221:9;2212:7;2208:23;2204:33;2201:2;;;2250:1;2247;2240:12;2201:2;2285:1;2302:53;2347:7;2327:9;2302:53;;;2292:63;;2264:97;2392:2;2410:53;2455:7;2446:6;2435:9;2431:22;2410:53;;;2400:63;;2371:98;2500:2;2518:53;2563:7;2554:6;2543:9;2539:22;2518:53;;;2508:63;;2479:98;2636:2;2625:9;2621:18;2608:32;2660:18;2652:6;2649:30;2646:2;;;2692:1;2689;2682:12;2646:2;2712:62;2766:7;2757:6;2746:9;2742:22;2712:62;;;2702:72;;2587:193;2195:595;;;;;;;;2797:360;;;2915:2;2903:9;2894:7;2890:23;2886:32;2883:2;;;2931:1;2928;2921:12;2883:2;2966:1;2983:53;3028:7;3008:9;2983:53;;;2973:63;;2945:97;3073:2;3091:50;3133:7;3124:6;3113:9;3109:22;3091:50;;3164:366;;;3285:2;3273:9;3264:7;3260:23;3256:32;3253:2;;;3301:1;3298;3291:12;3253:2;3336:1;3353:53;3398:7;3378:9;3353:53;;;3343:63;;3315:97;3443:2;3461:53;3506:7;3497:6;3486:9;3482:22;3461:53;;3537:261;;3651:2;3639:9;3630:7;3626:23;3622:32;3619:2;;;3667:1;3664;3657:12;3619:2;3702:1;3719:63;3774:7;3754:9;3719:63;;3805:241;;3909:2;3897:9;3888:7;3884:23;3880:32;3877:2;;;3925:1;3922;3915:12;3877:2;3960:1;3977:53;4022:7;4002:9;3977:53;;4053:110;4126:31;4151:5;4126:31;;;4121:3;4114:44;4108:55;;;4170:101;4237:28;4259:5;4237:28;;4278:297;;4378:38;4410:5;4378:38;;;4433:6;4428:3;4421:19;4445:63;4501:6;4494:4;4489:3;4485:14;4478:4;4471:5;4467:16;4445:63;;;4540:29;4562:6;4540:29;;;4520:50;;;4533:4;4520:50;;4358:217;-1:-1;;;4358:217;4890:397;5045:2;5033:15;;5082:66;5077:2;5068:12;;5061:88;5183:66;5178:2;5169:12;;5162:88;5278:2;5269:12;;5026:261;5296:296;5451:2;5439:15;;5488:66;5483:2;5474:12;;5467:88;5583:2;5574:12;;5432:160;5601:397;5756:2;5744:15;;5793:66;5788:2;5779:12;;5772:88;5894:66;5889:2;5880:12;;5873:88;5989:2;5980:12;;5737:261;6006:110;6079:31;6104:5;6079:31;;6123:193;6231:2;6216:18;;6245:61;6220:9;6279:6;6245:61;;6323:479;6505:2;6490:18;;6519:61;6494:9;6553:6;6519:61;;;6591:62;6649:2;6638:9;6634:18;6625:6;6591:62;;;6701:9;6695:4;6691:20;6686:2;6675:9;6671:18;6664:48;6726:66;6787:4;6778:6;6726:66;;;6718:74;6476:326;-1:-1;;;;;6476:326;6809:181;6911:2;6896:18;;6925:55;6900:9;6953:6;6925:55;;6997:281;7125:2;7139:47;;;7110:18;;7200:68;7110:18;7254:6;7200:68;;7285:387;7466:2;7480:47;;;7451:18;;7541:121;7451:18;7541:121;;7679:387;7860:2;7874:47;;;7845:18;;7935:121;7845:18;7935:121;;8073:387;8254:2;8268:47;;;8239:18;;8329:121;8239:18;8329:121;;8467:193;8575:2;8560:18;;8589:61;8564:9;8623:6;8589:61;;8667:256;8729:2;8723:9;8755:17;;;8830:18;8815:34;;8851:22;;;8812:62;8809:2;;;8887:1;8884;8877:12;8809:2;8903;8896:22;8707:216;;-1:-1;8707:216;8930:258;;9073:18;9065:6;9062:30;9059:2;;;9105:1;9102;9095:12;9059:2;-1:-1;9178:4;9149;9126:17;;;;9145:9;9122:33;9168:15;;8996:192;9195:91;9269:12;;9253:33;9392:128;9472:42;9461:54;;9444:76;9527:92;9600:13;9593:21;;9576:43;9626:79;9695:5;9678:27;9946:151;10025:66;10014:78;;9997:100;10191:145;10272:6;10267:3;10262;10249:30;-1:-1;10328:1;10310:16;;10303:27;10242:94;10345:268;10410:1;10417:101;10431:6;10428:1;10425:13;10417:101;;;10498:11;;;10492:18;10479:11;;;10472:39;10453:2;10446:10;10417:101;;;10533:6;10530:1;10527:13;10524:2;;;-1:-1;;10598:1;10580:16;;10573:27;10394:219;10621:97;10709:2;10689:14;10705:7;10685:28;;10669:49"
+ "object": "0x6080604052600436106100e55763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde0381146100ea578063081812fc14610174578063095ea7b3146101b557806323b872dd146101e857806340c10f191461021f57806342842e0e146102505780634f558e79146102875780636352211e146102b357806370a08231146102cb5780638da5cb5b1461030b57806395d89b41146103205780639dc29fac14610335578063a22cb46514610366578063b88d4fde14610399578063e985e9c514610415578063f2fde38b14610449575b600080fd5b3480156100f657600080fd5b506100ff610477565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610139578181015183820152602001610121565b50505050905090810190601f1680156101665780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561018057600080fd5b5061018c60043561052a565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156101c157600080fd5b506101e673ffffffffffffffffffffffffffffffffffffffff60043516602435610552565b005b3480156101f457600080fd5b506101e673ffffffffffffffffffffffffffffffffffffffff60043581169060243516604435610690565b34801561022b57600080fd5b506101e673ffffffffffffffffffffffffffffffffffffffff60043516602435610773565b34801561025c57600080fd5b506101e673ffffffffffffffffffffffffffffffffffffffff600435811690602435166044356108a2565b34801561029357600080fd5b5061029f6004356108da565b604080519115158252519081900360200190f35b3480156102bf57600080fd5b5061018c600435610904565b3480156102d757600080fd5b506102f973ffffffffffffffffffffffffffffffffffffffff6004351661093b565b60408051918252519081900360200190f35b34801561031757600080fd5b5061018c610988565b34801561032c57600080fd5b506100ff6109a4565b34801561034157600080fd5b506101e673ffffffffffffffffffffffffffffffffffffffff60043516602435610a20565b34801561037257600080fd5b506101e673ffffffffffffffffffffffffffffffffffffffff600435166024351515610b4c565b3480156103a557600080fd5b50604080516020601f6064356004818101359283018490048402850184019095528184526101e69473ffffffffffffffffffffffffffffffffffffffff8135811695602480359092169560443595369560849401918190840183828082843750949750610c089650505050505050565b34801561042157600080fd5b5061029f73ffffffffffffffffffffffffffffffffffffffff60043581169060243516610c47565b34801561045557600080fd5b506101e673ffffffffffffffffffffffffffffffffffffffff60043516610c82565b60018054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010087891615020190951694909404938401819004810282018101909252828152606093909290918301828280156105205780601f106104f557610100808354040283529160200191610520565b820191906000526020600020905b81548152906001019060200180831161050357829003601f168201915b5050505050905090565b60009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b600061055d82610904565b905073ffffffffffffffffffffffffffffffffffffffff838116908216141561058557600080fd5b3373ffffffffffffffffffffffffffffffffffffffff821614806105ae57506105ae8133610c47565b15156105b957600080fd5b60006105c48361052a565b73ffffffffffffffffffffffffffffffffffffffff161415806105fc575073ffffffffffffffffffffffffffffffffffffffff831615155b1561068b5760008281526004602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff878116918217909255835186815293519093918516927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35b505050565b8061069b3382610d68565b15156106a657600080fd5b73ffffffffffffffffffffffffffffffffffffffff841615156106c857600080fd5b73ffffffffffffffffffffffffffffffffffffffff831615156106ea57600080fd5b6106f48483610dfb565b6106fe8483610ee7565b6107088383610fb6565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107f957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b610802816108da565b1561089457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f546f6b656e207769746820746f6b656e496420616c726561647920657869737460448201527f732e000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b61089e8282611079565b5050565b806108ad3382610d68565b15156108b857600080fd5b6108d48484846020604051908101604052806000815250610c08565b50505050565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff16151590565b60008181526003602052604081205473ffffffffffffffffffffffffffffffffffffffff1680151561093557600080fd5b92915050565b600073ffffffffffffffffffffffffffffffffffffffff8216151561095f57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff1660009081526005602052604090205490565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60028054604080516020601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010060018716150201909416859004938401819004810282018101909252828152606093909290918301828280156105205780601f106104f557610100808354040283529160200191610520565b60005473ffffffffffffffffffffffffffffffffffffffff163314610aa657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b610aaf816108da565b1515610b4257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f546f6b656e207769746820746f6b656e496420646f6573206e6f74206578697360448201527f742e000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b61089e82826110f7565b73ffffffffffffffffffffffffffffffffffffffff8216331415610b6f57600080fd5b33600081815260066020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b81610c133382610d68565b1515610c1e57600080fd5b610c29858585610690565b610c358585858561115d565b1515610c4057600080fd5b5050505050565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260066020908152604080832093909416825291909152205460ff1690565b60005473ffffffffffffffffffffffffffffffffffffffff163314610d0857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811615610d6557600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b600080610d7483610904565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610de357508373ffffffffffffffffffffffffffffffffffffffff16610dcb8461052a565b73ffffffffffffffffffffffffffffffffffffffff16145b80610df35750610df38185610c47565b949350505050565b8173ffffffffffffffffffffffffffffffffffffffff16610e1b82610904565b73ffffffffffffffffffffffffffffffffffffffff1614610e3b57600080fd5b60008181526004602052604090205473ffffffffffffffffffffffffffffffffffffffff161561089e57600081815260046020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690558051848152905173ffffffffffffffffffffffffffffffffffffffff8616927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35050565b8173ffffffffffffffffffffffffffffffffffffffff16610f0782610904565b73ffffffffffffffffffffffffffffffffffffffff1614610f2757600080fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260056020526040902054610f58906001611304565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526005602090815260408083209490945591815260039091522080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60008181526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1615610fe557600080fd5b600081815260036020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff87169081179091558352600590915290205461104c90600161137b565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526005602052604090209190915550565b73ffffffffffffffffffffffffffffffffffffffff8216151561109b57600080fd5b6110a58282610fb6565b60408051828152905173ffffffffffffffffffffffffffffffffffffffff8416916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6111018282610dfb565b61110b8282610ee7565b60408051828152905160009173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b600080611169856113f6565b151561117857600191506112fb565b8473ffffffffffffffffffffffffffffffffffffffff1663f0b9e5ba8786866040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561123757818101518382015260200161121f565b50505050905090810190601f1680156112645780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b15801561128557600080fd5b505af1158015611299573d6000803e3d6000fd5b505050506040513d60208110156112af57600080fd5b50517fffffffff0000000000000000000000000000000000000000000000000000000081167ff0b9e5ba0000000000000000000000000000000000000000000000000000000014925090505b50949350505050565b60008282111561137557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f55494e543235365f4f564552464c4f5700000000000000000000000000000000604482015290519081900360640190fd5b50900390565b6000828201838110156113ef57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f55494e543235365f4f564552464c4f5700000000000000000000000000000000604482015290519081900360640190fd5b9392505050565b6000903b11905600a165627a7a723058200d5d9642c4819ee7240b8bd4a7908b21e95e7446c5376821fac0a6251b07e1ad0029",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xE5 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x6FDDE03 DUP2 EQ PUSH2 0xEA JUMPI DUP1 PUSH4 0x81812FC EQ PUSH2 0x174 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x1B5 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1E8 JUMPI DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x21F JUMPI DUP1 PUSH4 0x42842E0E EQ PUSH2 0x250 JUMPI DUP1 PUSH4 0x4F558E79 EQ PUSH2 0x287 JUMPI DUP1 PUSH4 0x6352211E EQ PUSH2 0x2B3 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x2CB JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x30B JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x320 JUMPI DUP1 PUSH4 0x9DC29FAC EQ PUSH2 0x335 JUMPI DUP1 PUSH4 0xA22CB465 EQ PUSH2 0x366 JUMPI DUP1 PUSH4 0xB88D4FDE EQ PUSH2 0x399 JUMPI DUP1 PUSH4 0xE985E9C5 EQ PUSH2 0x415 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x449 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFF PUSH2 0x477 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 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x139 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x121 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x166 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 DUP1 ISZERO PUSH2 0x180 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x18C PUSH1 0x4 CALLDATALOAD PUSH2 0x52A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD PUSH2 0x552 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH1 0x44 CALLDATALOAD PUSH2 0x690 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x22B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD PUSH2 0x773 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x25C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH1 0x44 CALLDATALOAD PUSH2 0x8A2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x293 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x29F PUSH1 0x4 CALLDATALOAD PUSH2 0x8DA JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x18C PUSH1 0x4 CALLDATALOAD PUSH2 0x904 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2F9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x93B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x317 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x18C PUSH2 0x988 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x32C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFF PUSH2 0x9A4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x341 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD PUSH2 0xA20 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x372 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD ISZERO ISZERO PUSH2 0xB4C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x64 CALLDATALOAD PUSH1 0x4 DUP2 DUP2 ADD CALLDATALOAD SWAP3 DUP4 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP2 DUP5 MSTORE PUSH2 0x1E6 SWAP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD DUP2 AND SWAP6 PUSH1 0x24 DUP1 CALLDATALOAD SWAP1 SWAP3 AND SWAP6 PUSH1 0x44 CALLDATALOAD SWAP6 CALLDATASIZE SWAP6 PUSH1 0x84 SWAP5 ADD SWAP2 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0xC08 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x421 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x29F PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH2 0xC47 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x455 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0xC82 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 DUP8 DUP10 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x520 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x4F5 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x520 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x503 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x55D DUP3 PUSH2 0x904 JUMP JUMPDEST SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP1 DUP3 AND EQ ISZERO PUSH2 0x585 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND EQ DUP1 PUSH2 0x5AE JUMPI POP PUSH2 0x5AE DUP2 CALLER PUSH2 0xC47 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x5B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x5C4 DUP4 PUSH2 0x52A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 PUSH2 0x5FC JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x68B JUMPI PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND SWAP2 DUP3 OR SWAP1 SWAP3 SSTORE DUP4 MLOAD DUP7 DUP2 MSTORE SWAP4 MLOAD SWAP1 SWAP4 SWAP2 DUP6 AND SWAP3 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG3 JUMPDEST POP POP POP JUMP JUMPDEST DUP1 PUSH2 0x69B CALLER DUP3 PUSH2 0xD68 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x6A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND ISZERO ISZERO PUSH2 0x6C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND ISZERO ISZERO PUSH2 0x6EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x6F4 DUP5 DUP4 PUSH2 0xDFB JUMP JUMPDEST PUSH2 0x6FE DUP5 DUP4 PUSH2 0xEE7 JUMP JUMPDEST PUSH2 0x708 DUP4 DUP4 PUSH2 0xFB6 JUMP JUMPDEST DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP5 PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x7F9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x802 DUP2 PUSH2 0x8DA JUMP JUMPDEST ISZERO PUSH2 0x894 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x546F6B656E207769746820746F6B656E496420616C7265616479206578697374 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x732E000000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x84 ADD SWAP1 REVERT JUMPDEST PUSH2 0x89E DUP3 DUP3 PUSH2 0x1079 JUMP JUMPDEST POP POP JUMP JUMPDEST DUP1 PUSH2 0x8AD CALLER DUP3 PUSH2 0xD68 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x8B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8D4 DUP5 DUP5 DUP5 PUSH1 0x20 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH2 0xC08 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO ISZERO PUSH2 0x935 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND ISZERO ISZERO PUSH2 0x95F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP8 AND ISZERO MUL ADD SWAP1 SWAP5 AND DUP6 SWAP1 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x520 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x4F5 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x520 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xAA6 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xAAF DUP2 PUSH2 0x8DA JUMP JUMPDEST ISZERO ISZERO PUSH2 0xB42 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x546F6B656E207769746820746F6B656E496420646F6573206E6F742065786973 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x742E000000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x84 ADD SWAP1 REVERT JUMPDEST PUSH2 0x89E DUP3 DUP3 PUSH2 0x10F7 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND CALLER EQ ISZERO PUSH2 0xB6F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP7 ISZERO ISZERO SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP2 MLOAD SWAP1 DUP2 MSTORE SWAP1 MLOAD SWAP3 SWAP4 SWAP3 PUSH32 0x17307EAB39AB6107E8899845AD3D59BD9653F200F220920489CA2B5937696C31 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST DUP2 PUSH2 0xC13 CALLER DUP3 PUSH2 0xD68 JUMP JUMPDEST ISZERO ISZERO PUSH2 0xC1E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC29 DUP6 DUP6 DUP6 PUSH2 0x690 JUMP JUMPDEST PUSH2 0xC35 DUP6 DUP6 DUP6 DUP6 PUSH2 0x115D JUMP JUMPDEST ISZERO ISZERO PUSH2 0xC40 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xD08 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0xD65 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND OR SWAP1 SSTORE JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xD74 DUP4 PUSH2 0x904 JUMP JUMPDEST SWAP1 POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ DUP1 PUSH2 0xDE3 JUMPI POP DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xDCB DUP5 PUSH2 0x52A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ JUMPDEST DUP1 PUSH2 0xDF3 JUMPI POP PUSH2 0xDF3 DUP2 DUP6 PUSH2 0xC47 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xE1B DUP3 PUSH2 0x904 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xE3B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x89E JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE DUP1 MLOAD DUP5 DUP2 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP3 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP JUMP JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xF07 DUP3 PUSH2 0x904 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xF27 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xF58 SWAP1 PUSH1 0x1 PUSH2 0x1304 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE SWAP2 DUP2 MSTORE PUSH1 0x3 SWAP1 SWAP2 MSTORE KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0xFE5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP4 MSTORE PUSH1 0x5 SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0x104C SWAP1 PUSH1 0x1 PUSH2 0x137B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND ISZERO ISZERO PUSH2 0x109B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x10A5 DUP3 DUP3 PUSH2 0xFB6 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP2 PUSH1 0x0 SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH2 0x1101 DUP3 DUP3 PUSH2 0xDFB JUMP JUMPDEST PUSH2 0x110B DUP3 DUP3 PUSH2 0xEE7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1169 DUP6 PUSH2 0x13F6 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x1178 JUMPI PUSH1 0x1 SWAP2 POP PUSH2 0x12FB JUMP JUMPDEST DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xF0B9E5BA DUP8 DUP7 DUP7 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH29 0x100000000000000000000000000000000000000000000000000000000 MUL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1237 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x121F JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1264 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 SWAP5 POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1285 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1299 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x12AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH32 0xF0B9E5BA00000000000000000000000000000000000000000000000000000000 EQ SWAP3 POP SWAP1 POP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 GT ISZERO PUSH2 0x1375 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x55494E543235365F4F564552464C4F5700000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x13EF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x55494E543235365F4F564552464C4F5700000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP1 EXTCODESIZE GT SWAP1 JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 0xd 0x5d SWAP7 TIMESTAMP 0xc4 DUP2 SWAP15 0xe7 0x24 SIGNEXTEND DUP12 0xd4 0xa7 SWAP1 DUP12 0x21 0xe9 0x5e PUSH21 0x46C5376821FAC0A6251B07E1AD0029000000000000 ",
+ "sourceMap": "735:1237:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3034:102:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3034:102:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;3034:102:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5587:145;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5587:145:1;;;;;;;;;;;;;;;;;;;;;;;;4949:401;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4949:401:1;;;;;;;;;;;7191:362;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7191:362:1;;;;;;;;;;;;;;1333:222:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1333:222:0;;;;;;;;;8184:254:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8184:254:1;;;;;;;;;;;;;;4340:178;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4340:178:1;;;;;;;;;;;;;;;;;;;;;;;3948:206;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3948:206:1;;;;;3547:180;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3547:180:1;;;;;;;;;;;;;;;;;;;;;;;258:20:5;;8:9:-1;5:2;;;30:1;27;20:12;5:2;258:20:5;;;;3241:106:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3241:106:1;;;;1743:227:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1743:227:0;;;;;;;;;6026:231:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6026:231:1;;;;;;;;;;;9140:339;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9140:339:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9140:339:1;;-1:-1:-1;9140:339:1;;-1:-1:-1;;;;;;;9140:339:1;6575:176;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6575:176:1;;;;;;;;;;;;500:167:5;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;500:167:5;;;;;;;3034:102:1;3124:5;3117:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3095:6;;3117:12;;3124:5;;3117:12;;3124:5;3117:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3034:102;:::o;5587:145::-;5671:7;5701:24;;;:14;:24;;;;;;;;;5587:145::o;4949:401::-;5026:13;5042:17;5050:8;5042:7;:17::i;:::-;5026:33;-1:-1:-1;5077:12:1;;;;;;;;;5069:21;;;;;;5108:10;:19;;;;;:58;;;5131:35;5148:5;5155:10;5131:16;:35::i;:::-;5100:67;;;;;;;;5215:1;5182:21;5194:8;5182:11;:21::i;:::-;:35;;;;:56;;;-1:-1:-1;5221:17:1;;;;;5182:56;5178:166;;;5254:24;;;;:14;:24;;;;;;;;;:30;;;;;;;;;;;;;;5303;;;;;;;5254;;5303;;;;;;;;;;;;5178:166;4949:401;;;:::o;7191:362::-;7294:8;2733:39;2751:10;2763:8;2733:17;:39::i;:::-;2725:48;;;;;;;;7326:19;;;;;7318:28;;;;;;7364:17;;;;;7356:26;;;;;;7393:30;7407:5;7414:8;7393:13;:30::i;:::-;7433:32;7449:5;7456:8;7433:15;:32::i;:::-;7475:25;7486:3;7491:8;7475:10;:25::i;:::-;7532:3;7516:30;;7525:5;7516:30;;;7537:8;7516:30;;;;;;;;;;;;;;;;;;7191:362;;;;:::o;1333:222:0:-;426:5:5;;;;412:10;:19;391:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1445:15:0;1452:7;1445:6;:15::i;:::-;1444:16;1423:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1530:18;1536:2;1540:7;1530:5;:18::i;:::-;1333:222;;:::o;8184:254:1:-;8316:8;2733:39;2751:10;2763:8;2733:17;:39::i;:::-;2725:48;;;;;;;;8389:42;8406:5;8413:3;8418:8;8389:42;;;;;;;;;;;;;:16;:42::i;:::-;8184:254;;;;:::o;4340:178::-;4419:4;4455:20;;;:10;:20;;;;;;;;4492:19;;;4340:178::o;3948:206::-;4028:7;4067:20;;;:10;:20;;;;;;;;4105:19;;;4097:28;;;;;;4142:5;3948:206;-1:-1:-1;;3948:206:1:o;3547:180::-;3627:7;3658:20;;;;;3650:29;;;;;;-1:-1:-1;3696:24:1;;;;;;:16;:24;;;;;;;3547:180::o;258:20:5:-;;;;;;:::o;3241:106:1:-;3333:7;3326:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3304:6;;3326:14;;3333:7;;3326:14;;3333:7;3326:14;;;;;;;;;;;;;;;;;;;;;;;;1743:227:0;426:5:5;;;;412:10;:19;391:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1857:15:0;1864:7;1857:6;:15::i;:::-;1836:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1942:21;1948:5;1955:7;1942:5;:21::i;6026:231:1:-;6119:17;;;6126:10;6119:17;;6111:26;;;;;;6165:10;6147:29;;;;:17;:29;;;;;;;;;:34;;;;;;;;;;;;:46;;;;;;;;;;;;;6208:42;;;;;;;6147:34;;6165:10;6208:42;;;;;;;;;;;6026:231;;:::o;9140:339::-;9293:8;2733:39;2751:10;2763:8;2733:17;:39::i;:::-;2725:48;;;;;;;;9317:34;9330:5;9337:3;9342:8;9317:12;:34::i;:::-;9418:53;9443:5;9450:3;9455:8;9465:5;9418:24;:53::i;:::-;9410:62;;;;;;;;9140:339;;;;;:::o;6575:176::-;6708:25;;;;6681:4;6708:25;;;:17;:25;;;;;;;;:36;;;;;;;;;;;;;;;6575:176::o;500:167:5:-;426:5;;;;412:10;:19;391:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;596:22;;;;592:69;;634:5;:16;;;;;;;;;;592:69;500:167;:::o;9836:278:1:-;9946:4;9966:13;9982:17;9990:8;9982:7;:17::i;:::-;9966:33;;10028:5;10016:17;;:8;:17;;;:54;;;;10062:8;10037:33;;:21;10049:8;10037:11;:21::i;:::-;:33;;;10016:54;:91;;;;10074:33;10091:5;10098:8;10074:16;:33::i;:::-;10009:98;9836:278;-1:-1:-1;;;;9836:278:1:o;11261:303::-;11378:6;11357:27;;:17;11365:8;11357:7;:17::i;:::-;:27;;;11349:36;;;;;;11435:1;11399:24;;;:14;:24;;;;;;:38;:24;:38;11395:163;;11488:1;11453:24;;;:14;:24;;;;;;;;:37;;;;;;11509:38;;;;;;;11453:37;11509:38;;;;;;;;;;;11261:303;;:::o;12357:245::-;12475:5;12454:26;;:17;12462:8;12454:7;:17::i;:::-;:26;;;12446:35;;;;;;12525:23;;;;;;;:16;:23;;;;;;12517:35;;12550:1;12517:7;:35::i;:::-;12491:23;;;;;;;;:16;:23;;;;;;;;:61;;;;12562:20;;;:10;:20;;;;:33;;;;;;12357:245::o;11835:235::-;11957:1;11925:20;;;:10;:20;;;;;;:34;:20;:34;11917:43;;;;;;11970:20;;;;:10;:20;;;;;;;;:26;;;;;;;;;;;;;12038:21;;:16;:21;;;;;;12030:33;;-1:-1:-1;12030:7:1;:33::i;:::-;12006:21;;;;;;;;:16;:21;;;;;:57;;;;-1:-1:-1;11835:235:1:o;10377:195::-;10462:17;;;;;10454:26;;;;;;10490:25;10501:3;10506:8;10490:10;:25::i;:::-;10530:35;;;;;;;;;;;;10547:1;;10530:35;;;;;;;;;10377:195;;:::o;10771:214::-;10851:31;10865:6;10873:8;10851:13;:31::i;:::-;10892:33;10908:6;10916:8;10892:15;:33::i;:::-;10940:38;;;;;;;;10965:1;;10940:38;;;;;;;;;;;;;10771:214;;:::o;13125:375::-;13285:4;13372:13;13310:15;13321:3;13310:10;:15::i;:::-;13309:16;13305:58;;;13348:4;13341:11;;;;13305:58;13404:3;13388:37;;;13426:5;13433:8;13443:5;13388:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;13388:61:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13388:61:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13388:61:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13388:61:1;13467:25;;;13477:15;13467:25;;-1:-1:-1;13388:61:1;-1:-1:-1;13125:375:1;;;;;;;;:::o;501:207:6:-;587:7;631:6;;;;610:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;696:5:6;;;501:207::o;714:230::-;800:7;835:5;;;871:6;;;;850:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;936:1;714:230;-1:-1:-1;;;714:230:6:o;13506:634:1:-;13587:4;14038:17;;14125:8;;13506:634::o"
}
}
},
"sources": {
- "current/test/DummyERC721Token/DummyERC721Token.sol": {
+ "2.0.0/test/DummyERC721Token/DummyERC721Token.sol": {
"id": 0
},
- "current/tokens/ERC721Token/ERC721Token.sol": {
+ "2.0.0/tokens/ERC721Token/ERC721Token.sol": {
"id": 1
},
- "current/tokens/ERC721Token/IERC721Receiver.sol": {
+ "2.0.0/tokens/ERC721Token/IERC721Receiver.sol": {
"id": 2
},
- "current/tokens/ERC721Token/IERC721Token.sol": {
+ "2.0.0/tokens/ERC721Token/IERC721Token.sol": {
"id": 3
},
- "current/utils/Ownable/IOwnable.sol": {
+ "2.0.0/utils/Ownable/IOwnable.sol": {
"id": 4
},
- "current/utils/Ownable/Ownable.sol": {
+ "2.0.0/utils/Ownable/Ownable.sol": {
"id": 5
},
- "current/utils/SafeMath/SafeMath.sol": {
+ "2.0.0/utils/SafeMath/SafeMath.sol": {
"id": 6
}
},
"sourceCodes": {
- "current/test/DummyERC721Token/DummyERC721Token.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../../tokens/ERC721Token/ERC721Token.sol\";\nimport \"../../utils/Ownable/Ownable.sol\";\n\ncontract DummyERC721Token is\n Ownable,\n ERC721Token\n{\n\n /**\n * @dev Constructor passes its arguments to the base ERC721Token constructor\n * @param name of token\n * @param symbol of token\n */\n constructor (\n string name,\n string symbol\n )\n public\n ERC721Token(name, symbol)\n {}\n\n /**\n * @dev Function to mint a new token\n * @dev Reverts if the given token ID already exists\n * @param to address the beneficiary that will own the minted token\n * @param tokenId uint256 ID of the token to be minted by the msg.sender\n */\n function mint(address to, uint256 tokenId)\n public\n onlyOwner\n {\n require(\n !exists(tokenId),\n \"Token with tokenId already exists.\"\n );\n _mint(to, tokenId);\n }\n\n /**\n * @dev Function to burn a token\n * @dev Reverts if the given token ID doesn't exist\n * @param tokenId uint256 ID of the token to be minted by the msg.sender\n */\n function burn(address owner, uint256 tokenId)\n public\n onlyOwner\n {\n require(\n exists(tokenId),\n \"Token with tokenId does not exist.\"\n );\n _burn(owner, tokenId);\n }\n}\n",
- "current/tokens/ERC721Token/ERC721Token.sol": "/*\nThe MIT License (MIT)\n\nCopyright (c) 2016 Smart Contract Solutions, Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be included\nin all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\npragma solidity ^0.4.24;\n\nimport \"./IERC721Token.sol\";\nimport \"./IERC721Receiver.sol\";\nimport \"../../utils/SafeMath/SafeMath.sol\";\n\n/**\n * @title ERC721 Non-Fungible Token Standard basic implementation\n * @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md\n * Modified from https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/token/ERC721/ERC721BasicToken.sol\n */\ncontract ERC721Token is\n IERC721Token,\n SafeMath\n{\n // Equals to `bytes4(keccak256(\"onERC721Received(address,uint256,bytes)\"))`\n // which can be also obtained as `ERC721Receiver(0).onERC721Received.selector`\n bytes4 constant ERC721_RECEIVED = 0xf0b9e5ba;\n\n // Mapping from token ID to owner\n mapping (uint256 => address) internal tokenOwner;\n\n // Mapping from token ID to approved address\n mapping (uint256 => address) internal tokenApprovals;\n\n // Mapping from owner to number of owned token\n mapping (address => uint256) internal ownedTokensCount;\n\n // Mapping from owner to operator approvals\n mapping (address => mapping (address => bool)) internal operatorApprovals;\n\n /**\n * @dev Guarantees msg.sender is owner of the given token\n * @param _tokenId uint256 ID of the token to validate its ownership belongs to msg.sender\n */\n modifier onlyOwnerOf(uint256 _tokenId) {\n require(ownerOf(_tokenId) == msg.sender);\n _;\n }\n\n /**\n * @dev Checks msg.sender can transfer a token, by being owner, approved, or operator\n * @param _tokenId uint256 ID of the token to validate\n */\n modifier canTransfer(uint256 _tokenId) {\n require(isApprovedOrOwner(msg.sender, _tokenId));\n _;\n }\n\n function ERC721Token(\n string _name,\n string _symbol)\n public\n {\n name_ = _name;\n symbol_ = _symbol;\n }\n\n /**\n * @dev Gets the token name\n * @return string representing the token name\n */\n function name()\n public\n view\n returns (string)\n {\n return name_;\n }\n\n /**\n * @dev Gets the token symbol\n * @return string representing the token symbol\n */\n function symbol()\n public\n view\n returns (string)\n {\n return symbol_;\n }\n\n /**\n * @dev Gets the balance of the specified address\n * @param _owner address to query the balance of\n * @return uint256 representing the amount owned by the passed address\n */\n function balanceOf(address _owner)\n public\n view\n returns (uint256)\n {\n require(_owner != address(0));\n return ownedTokensCount[_owner];\n }\n\n /**\n * @dev Gets the owner of the specified token ID\n * @param _tokenId uint256 ID of the token to query the owner of\n * @return owner address currently marked as the owner of the given token ID\n */\n function ownerOf(uint256 _tokenId)\n public\n view\n returns (address)\n {\n address owner = tokenOwner[_tokenId];\n require(owner != address(0));\n return owner;\n }\n\n /**\n * @dev Returns whether the specified token exists\n * @param _tokenId uint256 ID of the token to query the existance of\n * @return whether the token exists\n */\n function exists(uint256 _tokenId)\n public\n view\n returns (bool)\n {\n address owner = tokenOwner[_tokenId];\n return owner != address(0);\n }\n\n /**\n * @dev Approves another address to transfer the given token ID\n * @dev The zero address indicates there is no approved address.\n * @dev There can only be one approved address per token at a given time.\n * @dev Can only be called by the token owner or an approved operator.\n * @param _to address to be approved for the given token ID\n * @param _tokenId uint256 ID of the token to be approved\n */\n function approve(address _to, uint256 _tokenId)\n public\n {\n address owner = ownerOf(_tokenId);\n require(_to != owner);\n require(msg.sender == owner || isApprovedForAll(owner, msg.sender));\n\n if (getApproved(_tokenId) != address(0) || _to != address(0)) {\n tokenApprovals[_tokenId] = _to;\n emit Approval(owner, _to, _tokenId);\n }\n }\n\n /**\n * @dev Gets the approved address for a token ID, or zero if no address set\n * @param _tokenId uint256 ID of the token to query the approval of\n * @return address currently approved for a the given token ID\n */\n function getApproved(uint256 _tokenId)\n public\n view\n returns (address)\n {\n return tokenApprovals[_tokenId];\n }\n\n /**\n * @dev Sets or unsets the approval of a given operator\n * @dev An operator is allowed to transfer all tokens of the sender on their behalf\n * @param _to operator address to set the approval\n * @param _approved representing the status of the approval to be set\n */\n function setApprovalForAll(address _to, bool _approved)\n public\n {\n require(_to != msg.sender);\n operatorApprovals[msg.sender][_to] = _approved;\n emit ApprovalForAll(msg.sender, _to, _approved);\n }\n\n /**\n * @dev Tells whether an operator is approved by a given owner\n * @param _owner owner address which you want to query the approval of\n * @param _operator operator address which you want to query the approval of\n * @return bool whether the given operator is approved by the given owner\n */\n function isApprovedForAll(address _owner, address _operator)\n public\n view\n returns (bool)\n {\n return operatorApprovals[_owner][_operator];\n }\n\n /**\n * @dev Transfers the ownership of a given token ID to another address\n * @dev Usage of this method is discouraged, use `safeTransferFrom` whenever possible\n * @dev Requires the msg sender to be the owner, approved, or operator\n * @param _from current owner of the token\n * @param _to address to receive the ownership of the given token ID\n * @param _tokenId uint256 ID of the token to be transferred\n */\n function transferFrom(address _from, address _to, uint256 _tokenId)\n public\n canTransfer(_tokenId)\n {\n require(_from != address(0));\n require(_to != address(0));\n\n clearApproval(_from, _tokenId);\n removeTokenFrom(_from, _tokenId);\n addTokenTo(_to, _tokenId);\n\n emit Transfer(_from, _to, _tokenId);\n }\n\n /**\n * @dev Safely transfers the ownership of a given token ID to another address\n * @dev If the target address is a contract, it must implement `onERC721Received`,\n * which is called upon a safe transfer, and return the magic value\n * `bytes4(keccak256(\"onERC721Received(address,uint256,bytes)\"))`; otherwise,\n * the transfer is reverted.\n * @dev Requires the msg sender to be the owner, approved, or operator\n * @param _from current owner of the token\n * @param _to address to receive the ownership of the given token ID\n * @param _tokenId uint256 ID of the token to be transferred\n */\n function safeTransferFrom(\n address _from,\n address _to,\n uint256 _tokenId)\n public\n canTransfer(_tokenId)\n {\n // solium-disable-next-line arg-overflow\n safeTransferFrom(_from, _to, _tokenId, \"\");\n }\n\n /**\n * @dev Safely transfers the ownership of a given token ID to another address\n * @dev If the target address is a contract, it must implement `onERC721Received`,\n * which is called upon a safe transfer, and return the magic value\n * `bytes4(keccak256(\"onERC721Received(address,uint256,bytes)\"))`; otherwise,\n * the transfer is reverted.\n * @dev Requires the msg sender to be the owner, approved, or operator\n * @param _from current owner of the token\n * @param _to address to receive the ownership of the given token ID\n * @param _tokenId uint256 ID of the token to be transferred\n * @param _data bytes data to send along with a safe transfer check\n */\n function safeTransferFrom(\n address _from,\n address _to,\n uint256 _tokenId,\n bytes _data)\n public\n canTransfer(_tokenId)\n {\n transferFrom(_from, _to, _tokenId);\n // solium-disable-next-line arg-overflow\n require(checkAndCallSafeTransfer(_from, _to, _tokenId, _data));\n }\n\n /**\n * @dev Returns whether the given spender can transfer a given token ID\n * @param _spender address of the spender to query\n * @param _tokenId uint256 ID of the token to be transferred\n * @return bool whether the msg.sender is approved for the given token ID,\n * is an operator of the owner, or is the owner of the token\n */\n function isApprovedOrOwner(address _spender, uint256 _tokenId)\n internal\n view\n returns (bool)\n {\n address owner = ownerOf(_tokenId);\n return _spender == owner || getApproved(_tokenId) == _spender || isApprovedForAll(owner, _spender);\n }\n\n /**\n * @dev Internal function to mint a new token\n * @dev Reverts if the given token ID already exists\n * @param _to The address that will own the minted token\n * @param _tokenId uint256 ID of the token to be minted by the msg.sender\n */\n function _mint(address _to, uint256 _tokenId)\n internal\n {\n require(_to != address(0));\n addTokenTo(_to, _tokenId);\n emit Transfer(address(0), _to, _tokenId);\n }\n\n /**\n * @dev Internal function to burn a specific token\n * @dev Reverts if the token does not exist\n * @param _tokenId uint256 ID of the token being burned by the msg.sender\n */\n function _burn(address _owner, uint256 _tokenId)\n internal\n {\n clearApproval(_owner, _tokenId);\n removeTokenFrom(_owner, _tokenId);\n emit Transfer(_owner, address(0), _tokenId);\n }\n\n /**\n * @dev Internal function to clear current approval of a given token ID\n * @dev Reverts if the given address is not indeed the owner of the token\n * @param _owner owner of the token\n * @param _tokenId uint256 ID of the token to be transferred\n */\n function clearApproval(address _owner, uint256 _tokenId)\n internal\n {\n require(ownerOf(_tokenId) == _owner);\n if (tokenApprovals[_tokenId] != address(0)) {\n tokenApprovals[_tokenId] = address(0);\n emit Approval(_owner, address(0), _tokenId);\n }\n }\n\n /**\n * @dev Internal function to add a token ID to the list of a given address\n * @param _to address representing the new owner of the given token ID\n * @param _tokenId uint256 ID of the token to be added to the tokens list of the given address\n */\n function addTokenTo(address _to, uint256 _tokenId)\n internal\n {\n require(tokenOwner[_tokenId] == address(0));\n tokenOwner[_tokenId] = _to;\n ownedTokensCount[_to] = safeAdd(ownedTokensCount[_to], 1);\n }\n\n /**\n * @dev Internal function to remove a token ID from the list of a given address\n * @param _from address representing the previous owner of the given token ID\n * @param _tokenId uint256 ID of the token to be removed from the tokens list of the given address\n */\n function removeTokenFrom(address _from, uint256 _tokenId)\n internal\n {\n require(ownerOf(_tokenId) == _from);\n ownedTokensCount[_from] = safeSub(ownedTokensCount[_from], 1);\n tokenOwner[_tokenId] = address(0);\n }\n\n /**\n * @dev Internal function to invoke `onERC721Received` on a target address\n * @dev The call is not executed if the target address is not a contract\n * @param _from address representing the previous owner of the given token ID\n * @param _to target address that will receive the tokens\n * @param _tokenId uint256 ID of the token to be transferred\n * @param _data bytes optional data to send along with the call\n * @return whether the call correctly returned the expected magic value\n */\n function checkAndCallSafeTransfer(\n address _from,\n address _to,\n uint256 _tokenId,\n bytes _data)\n internal\n returns (bool)\n {\n if (!isContract(_to)) {\n return true;\n }\n bytes4 retval = IERC721Receiver(_to).onERC721Received(_from, _tokenId, _data);\n return (retval == ERC721_RECEIVED);\n }\n\n function isContract(address addr)\n internal\n view\n returns (bool)\n {\n uint256 size;\n // XXX Currently there is no better way to check if there is a contract in an address\n // than to check the size of the code at that address.\n // See https://ethereum.stackexchange.com/a/14016/36603\n // for more details about how this works.\n // TODO Check this again before the Serenity release, because all addresses will be\n // contracts then.\n assembly { size := extcodesize(addr) } // solium-disable-line security/no-inline-assembly\n return size > 0;\n }\n}\n",
- "current/tokens/ERC721Token/IERC721Receiver.sol": "/*\nThe MIT License (MIT)\n\nCopyright (c) 2016 Smart Contract Solutions, Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be included\nin all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\npragma solidity ^0.4.24;\n\n/**\n * @title ERC721 token receiver interface\n * @dev Interface for any contract that wants to support safeTransfers\n * rom ERC721 asset contracts.\n * Modified from https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/token/ERC721/ERC721Receiver.sol\n */\ncontract IERC721Receiver {\n /**\n * @dev Magic value to be returned upon successful reception of an NFT\n * Equals to `bytes4(keccak256(\"onERC721Received(address,uint256,bytes)\"))`,\n * which can be also obtained as `ERC721Receiver(0).onERC721Received.selector`\n */\n bytes4 constant ERC721_RECEIVED = 0xf0b9e5ba;\n\n /**\n * @notice Handle the receipt of an NFT\n * @dev The ERC721 smart contract calls this function on the recipient\n * after a `safetransfer`. This function MAY throw to revert and reject the\n * transfer. This function MUST use 50,000 gas or less. Return of other\n * than the magic value MUST result in the transaction being reverted.\n * Note: the contract address is always the message sender.\n * @param _from The sending address\n * @param _tokenId The NFT identifier which is being transfered\n * @param _data Additional data with no specified format\n * @return `bytes4(keccak256(\"onERC721Received(address,uint256,bytes)\"))`\n */\n function onERC721Received(\n address _from,\n uint256 _tokenId,\n bytes _data)\n public\n returns (bytes4);\n}\n",
- "current/tokens/ERC721Token/IERC721Token.sol": "/*\nThe MIT License (MIT)\n\nCopyright (c) 2016 Smart Contract Solutions, Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be included\nin all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\npragma solidity ^0.4.24;\n\n/**\n * @title ERC721 Non-Fungible Token Standard basic interface\n * @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md\n * Modified from https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/token/ERC721/ERC721Basic.sol\n */\ncontract IERC721Token {\n string internal name_;\n string internal symbol_;\n\n event Transfer(\n address indexed _from,\n address indexed _to,\n uint256 _tokenId\n );\n event Approval(\n address indexed _owner,\n address indexed _approved,\n uint256 _tokenId\n );\n event ApprovalForAll(\n address indexed _owner,\n address indexed _operator,\n bool _approved\n );\n\n function name()\n public\n view\n returns (string);\n function symbol()\n public\n view\n returns (string);\n\n function balanceOf(address _owner)\n public\n view\n returns (uint256 _balance);\n function ownerOf(uint256 _tokenId)\n public\n view\n returns (address _owner);\n function exists(uint256 _tokenId)\n public\n view\n returns (bool _exists);\n\n function approve(address _to, uint256 _tokenId)\n public;\n function getApproved(uint256 _tokenId)\n public\n view\n returns (address _operator);\n\n function setApprovalForAll(address _operator, bool _approved)\n public;\n function isApprovedForAll(address _owner, address _operator)\n public\n view\n returns (bool);\n\n function transferFrom(\n address _from,\n address _to,\n uint256 _tokenId)\n public;\n function safeTransferFrom(\n address _from,\n address _to,\n uint256 _tokenId)\n public;\n function safeTransferFrom(\n address _from,\n address _to,\n uint256 _tokenId,\n bytes _data)\n public;\n}\n",
- "current/utils/Ownable/IOwnable.sol": "pragma solidity ^0.4.24;\npragma experimental ABIEncoderV2;\n\n/*\n * Ownable\n *\n * Base contract with an owner.\n * Provides onlyOwner modifier, which prevents function from running if it is called by anyone other than the owner.\n */\n\ncontract IOwnable {\n function transferOwnership(address newOwner)\n public;\n}\n",
- "current/utils/Ownable/Ownable.sol": "pragma solidity ^0.4.24;\npragma experimental ABIEncoderV2;\n\n/*\n * Ownable\n *\n * Base contract with an owner.\n * Provides onlyOwner modifier, which prevents function from running if it is called by anyone other than the owner.\n */\n\nimport \"./IOwnable.sol\";\n\ncontract Ownable is IOwnable {\n address public owner;\n\n constructor ()\n public\n {\n owner = msg.sender;\n }\n\n modifier onlyOwner() {\n require(\n msg.sender == owner,\n \"ONLY_CONTRACT_OWNER\"\n );\n _;\n }\n\n function transferOwnership(address newOwner)\n public\n onlyOwner\n {\n if (newOwner != address(0)) {\n owner = newOwner;\n }\n }\n}\n",
- "current/utils/SafeMath/SafeMath.sol": "pragma solidity ^0.4.24;\npragma experimental ABIEncoderV2;\n\ncontract SafeMath {\n function safeMul(uint a, uint b)\n internal\n pure\n returns (uint256)\n {\n uint c = a * b;\n assert(a == 0 || c / a == b);\n return c;\n }\n\n function safeDiv(uint a, uint b)\n internal\n pure\n returns (uint256)\n {\n uint c = a / b;\n return c;\n }\n\n function safeSub(uint a, uint b)\n internal\n pure\n returns (uint256)\n {\n assert(b <= a);\n return a - b;\n }\n\n function safeAdd(uint a, uint b)\n internal\n pure\n returns (uint256)\n {\n uint c = a + b;\n assert(c >= a);\n return c;\n }\n\n function max64(uint64 a, uint64 b)\n internal\n pure\n returns (uint256)\n {\n return a >= b ? a : b;\n }\n\n function min64(uint64 a, uint64 b)\n internal\n pure\n returns (uint256)\n {\n return a < b ? a : b;\n }\n\n function max256(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n return a >= b ? a : b;\n }\n\n function min256(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n return a < b ? a : b;\n }\n}\n"
+ "2.0.0/test/DummyERC721Token/DummyERC721Token.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.24;\n\nimport \"../../tokens/ERC721Token/ERC721Token.sol\";\nimport \"../../utils/Ownable/Ownable.sol\";\n\n\n// solhint-disable no-empty-blocks\ncontract DummyERC721Token is\n Ownable,\n ERC721Token\n{\n\n /**\n * @dev Constructor passes its arguments to the base ERC721Token constructor\n * @param name of token\n * @param symbol of token\n */\n constructor (\n string name,\n string symbol\n )\n public\n ERC721Token(name, symbol)\n {}\n\n /**\n * @dev Function to mint a new token\n * @dev Reverts if the given token ID already exists\n * @param to address the beneficiary that will own the minted token\n * @param tokenId uint256 ID of the token to be minted by the msg.sender\n */\n function mint(address to, uint256 tokenId)\n public\n onlyOwner\n {\n require(\n !exists(tokenId),\n \"Token with tokenId already exists.\"\n );\n _mint(to, tokenId);\n }\n\n /**\n * @dev Function to burn a token\n * @dev Reverts if the given token ID doesn't exist\n * @param tokenId uint256 ID of the token to be minted by the msg.sender\n */\n function burn(address owner, uint256 tokenId)\n public\n onlyOwner\n {\n require(\n exists(tokenId),\n \"Token with tokenId does not exist.\"\n );\n _burn(owner, tokenId);\n }\n}\n",
+ "2.0.0/tokens/ERC721Token/ERC721Token.sol": "/*\nThe MIT License (MIT)\n\nCopyright (c) 2016 Smart Contract Solutions, Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be included\nin all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\npragma solidity 0.4.24;\n\nimport \"./IERC721Token.sol\";\nimport \"./IERC721Receiver.sol\";\nimport \"../../utils/SafeMath/SafeMath.sol\";\n\n\n/**\n * @title ERC721 Non-Fungible Token Standard basic implementation\n * @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md\n * Modified from https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/token/ERC721/ERC721BasicToken.sol\n */\ncontract ERC721Token is\n IERC721Token,\n SafeMath\n{\n // Equals to `bytes4(keccak256(\"onERC721Received(address,uint256,bytes)\"))`\n // which can be also obtained as `ERC721Receiver(0).onERC721Received.selector`\n bytes4 constant internal ERC721_RECEIVED = 0xf0b9e5ba;\n\n // Mapping from token ID to owner\n mapping (uint256 => address) internal tokenOwner;\n\n // Mapping from token ID to approved address\n mapping (uint256 => address) internal tokenApprovals;\n\n // Mapping from owner to number of owned token\n mapping (address => uint256) internal ownedTokensCount;\n\n // Mapping from owner to operator approvals\n mapping (address => mapping (address => bool)) internal operatorApprovals;\n\n /**\n * @dev Guarantees msg.sender is owner of the given token\n * @param _tokenId uint256 ID of the token to validate its ownership belongs to msg.sender\n */\n modifier onlyOwnerOf(uint256 _tokenId) {\n require(ownerOf(_tokenId) == msg.sender);\n _;\n }\n\n /**\n * @dev Checks msg.sender can transfer a token, by being owner, approved, or operator\n * @param _tokenId uint256 ID of the token to validate\n */\n modifier canTransfer(uint256 _tokenId) {\n require(isApprovedOrOwner(msg.sender, _tokenId));\n _;\n }\n\n constructor (\n string _name,\n string _symbol)\n public\n {\n name_ = _name;\n symbol_ = _symbol;\n }\n\n /**\n * @dev Gets the token name\n * @return string representing the token name\n */\n function name()\n public\n view\n returns (string)\n {\n return name_;\n }\n\n /**\n * @dev Gets the token symbol\n * @return string representing the token symbol\n */\n function symbol()\n public\n view\n returns (string)\n {\n return symbol_;\n }\n\n /**\n * @dev Gets the balance of the specified address\n * @param _owner address to query the balance of\n * @return uint256 representing the amount owned by the passed address\n */\n function balanceOf(address _owner)\n public\n view\n returns (uint256)\n {\n require(_owner != address(0));\n return ownedTokensCount[_owner];\n }\n\n /**\n * @dev Gets the owner of the specified token ID\n * @param _tokenId uint256 ID of the token to query the owner of\n * @return owner address currently marked as the owner of the given token ID\n */\n function ownerOf(uint256 _tokenId)\n public\n view\n returns (address)\n {\n address owner = tokenOwner[_tokenId];\n require(owner != address(0));\n return owner;\n }\n\n /**\n * @dev Returns whether the specified token exists\n * @param _tokenId uint256 ID of the token to query the existance of\n * @return whether the token exists\n */\n function exists(uint256 _tokenId)\n public\n view\n returns (bool)\n {\n address owner = tokenOwner[_tokenId];\n return owner != address(0);\n }\n\n /**\n * @dev Approves another address to transfer the given token ID\n * @dev The zero address indicates there is no approved address.\n * @dev There can only be one approved address per token at a given time.\n * @dev Can only be called by the token owner or an approved operator.\n * @param _to address to be approved for the given token ID\n * @param _tokenId uint256 ID of the token to be approved\n */\n function approve(address _to, uint256 _tokenId)\n public\n {\n address owner = ownerOf(_tokenId);\n require(_to != owner);\n require(msg.sender == owner || isApprovedForAll(owner, msg.sender));\n\n if (getApproved(_tokenId) != address(0) || _to != address(0)) {\n tokenApprovals[_tokenId] = _to;\n emit Approval(owner, _to, _tokenId);\n }\n }\n\n /**\n * @dev Gets the approved address for a token ID, or zero if no address set\n * @param _tokenId uint256 ID of the token to query the approval of\n * @return address currently approved for a the given token ID\n */\n function getApproved(uint256 _tokenId)\n public\n view\n returns (address)\n {\n return tokenApprovals[_tokenId];\n }\n\n /**\n * @dev Sets or unsets the approval of a given operator\n * @dev An operator is allowed to transfer all tokens of the sender on their behalf\n * @param _to operator address to set the approval\n * @param _approved representing the status of the approval to be set\n */\n function setApprovalForAll(address _to, bool _approved)\n public\n {\n require(_to != msg.sender);\n operatorApprovals[msg.sender][_to] = _approved;\n emit ApprovalForAll(msg.sender, _to, _approved);\n }\n\n /**\n * @dev Tells whether an operator is approved by a given owner\n * @param _owner owner address which you want to query the approval of\n * @param _operator operator address which you want to query the approval of\n * @return bool whether the given operator is approved by the given owner\n */\n function isApprovedForAll(address _owner, address _operator)\n public\n view\n returns (bool)\n {\n return operatorApprovals[_owner][_operator];\n }\n\n /**\n * @dev Transfers the ownership of a given token ID to another address\n * @dev Usage of this method is discouraged, use `safeTransferFrom` whenever possible\n * @dev Requires the msg sender to be the owner, approved, or operator\n * @param _from current owner of the token\n * @param _to address to receive the ownership of the given token ID\n * @param _tokenId uint256 ID of the token to be transferred\n */\n function transferFrom(address _from, address _to, uint256 _tokenId)\n public\n canTransfer(_tokenId)\n {\n require(_from != address(0));\n require(_to != address(0));\n\n clearApproval(_from, _tokenId);\n removeTokenFrom(_from, _tokenId);\n addTokenTo(_to, _tokenId);\n\n emit Transfer(_from, _to, _tokenId);\n }\n\n /**\n * @dev Safely transfers the ownership of a given token ID to another address\n * @dev If the target address is a contract, it must implement `onERC721Received`,\n * which is called upon a safe transfer, and return the magic value\n * `bytes4(keccak256(\"onERC721Received(address,uint256,bytes)\"))`; otherwise,\n * the transfer is reverted.\n * @dev Requires the msg sender to be the owner, approved, or operator\n * @param _from current owner of the token\n * @param _to address to receive the ownership of the given token ID\n * @param _tokenId uint256 ID of the token to be transferred\n */\n function safeTransferFrom(\n address _from,\n address _to,\n uint256 _tokenId)\n public\n canTransfer(_tokenId)\n {\n // solium-disable-next-line arg-overflow\n safeTransferFrom(_from, _to, _tokenId, \"\");\n }\n\n /**\n * @dev Safely transfers the ownership of a given token ID to another address\n * @dev If the target address is a contract, it must implement `onERC721Received`,\n * which is called upon a safe transfer, and return the magic value\n * `bytes4(keccak256(\"onERC721Received(address,uint256,bytes)\"))`; otherwise,\n * the transfer is reverted.\n * @dev Requires the msg sender to be the owner, approved, or operator\n * @param _from current owner of the token\n * @param _to address to receive the ownership of the given token ID\n * @param _tokenId uint256 ID of the token to be transferred\n * @param _data bytes data to send along with a safe transfer check\n */\n function safeTransferFrom(\n address _from,\n address _to,\n uint256 _tokenId,\n bytes _data)\n public\n canTransfer(_tokenId)\n {\n transferFrom(_from, _to, _tokenId);\n // solium-disable-next-line arg-overflow\n require(checkAndCallSafeTransfer(_from, _to, _tokenId, _data));\n }\n\n /**\n * @dev Returns whether the given spender can transfer a given token ID\n * @param _spender address of the spender to query\n * @param _tokenId uint256 ID of the token to be transferred\n * @return bool whether the msg.sender is approved for the given token ID,\n * is an operator of the owner, or is the owner of the token\n */\n function isApprovedOrOwner(address _spender, uint256 _tokenId)\n internal\n view\n returns (bool)\n {\n address owner = ownerOf(_tokenId);\n return _spender == owner || getApproved(_tokenId) == _spender || isApprovedForAll(owner, _spender);\n }\n\n /**\n * @dev Internal function to mint a new token\n * @dev Reverts if the given token ID already exists\n * @param _to The address that will own the minted token\n * @param _tokenId uint256 ID of the token to be minted by the msg.sender\n */\n function _mint(address _to, uint256 _tokenId)\n internal\n {\n require(_to != address(0));\n addTokenTo(_to, _tokenId);\n emit Transfer(address(0), _to, _tokenId);\n }\n\n /**\n * @dev Internal function to burn a specific token\n * @dev Reverts if the token does not exist\n * @param _tokenId uint256 ID of the token being burned by the msg.sender\n */\n function _burn(address _owner, uint256 _tokenId)\n internal\n {\n clearApproval(_owner, _tokenId);\n removeTokenFrom(_owner, _tokenId);\n emit Transfer(_owner, address(0), _tokenId);\n }\n\n /**\n * @dev Internal function to clear current approval of a given token ID\n * @dev Reverts if the given address is not indeed the owner of the token\n * @param _owner owner of the token\n * @param _tokenId uint256 ID of the token to be transferred\n */\n function clearApproval(address _owner, uint256 _tokenId)\n internal\n {\n require(ownerOf(_tokenId) == _owner);\n if (tokenApprovals[_tokenId] != address(0)) {\n tokenApprovals[_tokenId] = address(0);\n emit Approval(_owner, address(0), _tokenId);\n }\n }\n\n /**\n * @dev Internal function to add a token ID to the list of a given address\n * @param _to address representing the new owner of the given token ID\n * @param _tokenId uint256 ID of the token to be added to the tokens list of the given address\n */\n function addTokenTo(address _to, uint256 _tokenId)\n internal\n {\n require(tokenOwner[_tokenId] == address(0));\n tokenOwner[_tokenId] = _to;\n ownedTokensCount[_to] = safeAdd(ownedTokensCount[_to], 1);\n }\n\n /**\n * @dev Internal function to remove a token ID from the list of a given address\n * @param _from address representing the previous owner of the given token ID\n * @param _tokenId uint256 ID of the token to be removed from the tokens list of the given address\n */\n function removeTokenFrom(address _from, uint256 _tokenId)\n internal\n {\n require(ownerOf(_tokenId) == _from);\n ownedTokensCount[_from] = safeSub(ownedTokensCount[_from], 1);\n tokenOwner[_tokenId] = address(0);\n }\n\n /**\n * @dev Internal function to invoke `onERC721Received` on a target address\n * @dev The call is not executed if the target address is not a contract\n * @param _from address representing the previous owner of the given token ID\n * @param _to target address that will receive the tokens\n * @param _tokenId uint256 ID of the token to be transferred\n * @param _data bytes optional data to send along with the call\n * @return whether the call correctly returned the expected magic value\n */\n function checkAndCallSafeTransfer(\n address _from,\n address _to,\n uint256 _tokenId,\n bytes _data)\n internal\n returns (bool)\n {\n if (!isContract(_to)) {\n return true;\n }\n bytes4 retval = IERC721Receiver(_to).onERC721Received(_from, _tokenId, _data);\n return (retval == ERC721_RECEIVED);\n }\n\n function isContract(address addr)\n internal\n view\n returns (bool)\n {\n uint256 size;\n // XXX Currently there is no better way to check if there is a contract in an address\n // than to check the size of the code at that address.\n // See https://ethereum.stackexchange.com/a/14016/36603\n // for more details about how this works.\n // TODO Check this again before the Serenity release, because all addresses will be\n // contracts then.\n assembly { size := extcodesize(addr) } // solium-disable-line security/no-inline-assembly\n return size > 0;\n }\n}\n",
+ "2.0.0/tokens/ERC721Token/IERC721Receiver.sol": "/*\nThe MIT License (MIT)\n\nCopyright (c) 2016 Smart Contract Solutions, Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be included\nin all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\npragma solidity 0.4.24;\n\n\n/**\n * @title ERC721 token receiver interface\n * @dev Interface for any contract that wants to support safeTransfers\n * rom ERC721 asset contracts.\n * Modified from https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/token/ERC721/ERC721Receiver.sol\n */\ncontract IERC721Receiver {\n /**\n * @dev Magic value to be returned upon successful reception of an NFT\n * Equals to `bytes4(keccak256(\"onERC721Received(address,uint256,bytes)\"))`,\n * which can be also obtained as `ERC721Receiver(0).onERC721Received.selector`\n */\n bytes4 constant internal ERC721_RECEIVED = 0xf0b9e5ba;\n\n /**\n * @notice Handle the receipt of an NFT\n * @dev The ERC721 smart contract calls this function on the recipient\n * after a `safetransfer`. This function MAY throw to revert and reject the\n * transfer. This function MUST use 50,000 gas or less. Return of other\n * than the magic value MUST result in the transaction being reverted.\n * Note: the contract address is always the message sender.\n * @param _from The sending address\n * @param _tokenId The NFT identifier which is being transfered\n * @param _data Additional data with no specified format\n * @return `bytes4(keccak256(\"onERC721Received(address,uint256,bytes)\"))`\n */\n function onERC721Received(\n address _from,\n uint256 _tokenId,\n bytes _data)\n public\n returns (bytes4);\n}\n",
+ "2.0.0/tokens/ERC721Token/IERC721Token.sol": "/*\nThe MIT License (MIT)\n\nCopyright (c) 2016 Smart Contract Solutions, Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be included\nin all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\npragma solidity 0.4.24;\n\n\n/**\n * @title ERC721 Non-Fungible Token Standard basic interface\n * @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md\n * Modified from https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/token/ERC721/ERC721Basic.sol\n */\ncontract IERC721Token {\n string internal name_;\n string internal symbol_;\n\n event Transfer(\n address indexed _from,\n address indexed _to,\n uint256 _tokenId\n );\n\n event Approval(\n address indexed _owner,\n address indexed _approved,\n uint256 _tokenId\n );\n\n event ApprovalForAll(\n address indexed _owner,\n address indexed _operator,\n bool _approved\n );\n\n function name()\n public\n view\n returns (string);\n\n function symbol()\n public\n view\n returns (string);\n\n function balanceOf(address _owner)\n public\n view\n returns (uint256 _balance);\n\n function ownerOf(uint256 _tokenId)\n public\n view\n returns (address _owner);\n\n function exists(uint256 _tokenId)\n public\n view\n returns (bool _exists);\n\n function approve(address _to, uint256 _tokenId)\n public;\n\n function getApproved(uint256 _tokenId)\n public\n view\n returns (address _operator);\n\n function setApprovalForAll(address _operator, bool _approved)\n public;\n\n function isApprovedForAll(address _owner, address _operator)\n public\n view\n returns (bool);\n\n function transferFrom(\n address _from,\n address _to,\n uint256 _tokenId\n )\n public;\n\n function safeTransferFrom(\n address _from,\n address _to,\n uint256 _tokenId\n )\n public;\n\n function safeTransferFrom(\n address _from,\n address _to,\n uint256 _tokenId,\n bytes _data\n )\n public;\n}\n",
+ "2.0.0/utils/Ownable/IOwnable.sol": "pragma solidity 0.4.24;\n\n/*\n * Ownable\n *\n * Base contract with an owner.\n * Provides onlyOwner modifier, which prevents function from running if it is called by anyone other than the owner.\n */\n\ncontract IOwnable {\n function transferOwnership(address newOwner)\n public;\n}\n",
+ "2.0.0/utils/Ownable/Ownable.sol": "pragma solidity 0.4.24;\n\n/*\n * Ownable\n *\n * Base contract with an owner.\n * Provides onlyOwner modifier, which prevents function from running if it is called by anyone other than the owner.\n */\n\nimport \"./IOwnable.sol\";\n\n\ncontract Ownable is IOwnable {\n address public owner;\n\n constructor ()\n public\n {\n owner = msg.sender;\n }\n\n modifier onlyOwner() {\n require(\n msg.sender == owner,\n \"ONLY_CONTRACT_OWNER\"\n );\n _;\n }\n\n function transferOwnership(address newOwner)\n public\n onlyOwner\n {\n if (newOwner != address(0)) {\n owner = newOwner;\n }\n }\n}\n",
+ "2.0.0/utils/SafeMath/SafeMath.sol": "pragma solidity 0.4.24;\n\n\ncontract SafeMath {\n function safeMul(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n if (a == 0) {\n return 0;\n }\n uint256 c = a * b;\n require(\n c / a == b,\n \"UINT256_OVERFLOW\"\n );\n return c;\n }\n\n function safeDiv(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n uint256 c = a / b;\n return c;\n }\n\n function safeSub(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n require(\n b <= a,\n \"UINT256_OVERFLOW\"\n );\n return a - b;\n }\n\n function safeAdd(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n uint256 c = a + b;\n require(\n c >= a,\n \"UINT256_OVERFLOW\"\n );\n return c;\n }\n\n function max64(uint64 a, uint64 b)\n internal\n pure\n returns (uint256)\n {\n return a >= b ? a : b;\n }\n\n function min64(uint64 a, uint64 b)\n internal\n pure\n returns (uint256)\n {\n return a < b ? a : b;\n }\n\n function max256(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n return a >= b ? a : b;\n }\n\n function min256(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n return a < b ? a : b;\n }\n}\n"
},
- "sourceTreeHashHex": "0xbcd6ee196f11737e8cb52b2fad3c819fd298a8d26112a57f9cfde797cd41ffff",
+ "sourceTreeHashHex": "0xa6ccfb4008931cb0e852aacbff48bc5e70b8a5238fc5b0da5fd188dc854d4e0e",
"compiler": {
"name": "solc",
"version": "soljson-v0.4.24+commit.e67f0147.js",
diff --git a/packages/migrations/artifacts/2.0.0/ERC20Proxy.json b/packages/migrations/artifacts/2.0.0/ERC20Proxy.json
index 1d58d94f4..ed755fbed 100644
--- a/packages/migrations/artifacts/2.0.0/ERC20Proxy.json
+++ b/packages/migrations/artifacts/2.0.0/ERC20Proxy.json
@@ -186,51 +186,51 @@
"evm": {
"bytecode": {
"linkReferences": {},
- "object": "0x608060405260008054600160a060020a03191633179055610f9f806100256000396000f3006080604052600436106100985763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166342f1181e8114610246578063494503d414610268578063707129391461029e5780638da5cb5b146102be5780639ad26744146102d3578063ae25532e146102f3578063b918161114610315578063d39de6e914610342578063f2fde38b14610364575b3480156100a457600080fd5b507fffffffff00000000000000000000000000000000000000000000000000000000600035167fa85e59e40000000000000000000000000000000000000000000000000000000081141561024357604080513381526001602082015290812054151561017b577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c1553454e4445525f4e4f545f415554484f52495a454400000000000000604052600060605260646000fd5b602860043501357f23b872dd0000000000000000000000000000000000000000000000000000000060005260606024600437602060006064600080855af1600080511160203d14163d15178116905080156101d257005b7f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c0f5452414e534645525f4641494c454400000000000000000000000000604052600060605260646000fd5b50005b34801561025257600080fd5b50610266610261366004610ca1565b610384565b005b34801561027457600080fd5b50610288610283366004610d01565b61050f565b6040516102959190610e87565b60405180910390f35b3480156102aa57600080fd5b506102666102b9366004610ca1565b610544565b3480156102ca57600080fd5b506102886107d3565b3480156102df57600080fd5b506102666102ee366004610cc7565b6107ef565b3480156102ff57600080fd5b50610308610ad0565b6040516102959190610eba565b34801561032157600080fd5b50610335610330366004610ca1565b610b06565b6040516102959190610eac565b34801561034e57600080fd5b50610357610b1b565b6040516102959190610e9b565b34801561037057600080fd5b5061026661037f366004610ca1565b610b8a565b60005473ffffffffffffffffffffffffffffffffffffffff1633146103de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d590610f08565b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff161561043e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d590610ee8565b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055513392917f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c91a350565b600280548290811061051d57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6000805473ffffffffffffffffffffffffffffffffffffffff163314610596576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d590610f08565b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff1615156105f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d590610ec8565b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260016020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b60025481101561078c578173ffffffffffffffffffffffffffffffffffffffff1660028281548110151561067457fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561078457600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019081106106cc57fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff90921691839081106106ff57fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019061077e9082610c3b565b5061078c565b600101610644565b604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff163314610840576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d590610f08565b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff1615156108a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d590610ec8565b60025481106108dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d590610ef8565b8173ffffffffffffffffffffffffffffffffffffffff1660028281548110151561090257fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff161461095b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d590610ed8565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019081106109d657fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff9092169183908110610a0957fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190610a889082610c3b565b50604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b604080517f4552433230546f6b656e28616464726573732900000000000000000000000000815290519081900360130190205b90565b60016020526000908152604090205460ff1681565b60606002805480602002602001604051908101604052809291908181526020018280548015610b8057602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610b55575b5050505050905090565b60005473ffffffffffffffffffffffffffffffffffffffff163314610bdb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d590610f08565b73ffffffffffffffffffffffffffffffffffffffff811615610c3857600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b815481835581811115610c5f57600083815260209020610c5f918101908301610c64565b505050565b610b0391905b80821115610c7e5760008155600101610c6a565b5090565b6000610c8e8235610f22565b9392505050565b6000610c8e8235610b03565b600060208284031215610cb357600080fd5b6000610cbf8484610c82565b949350505050565b60008060408385031215610cda57600080fd5b6000610ce68585610c82565b9250506020610cf785828601610c95565b9150509250929050565b600060208284031215610d1357600080fd5b6000610cbf8484610c95565b610d2881610f22565b82525050565b6000610d3982610f1e565b808452602084019350610d4b83610f18565b60005b82811015610d7b57610d61868351610d1f565b610d6a82610f18565b602096909601959150600101610d4e565b5093949350505050565b610d2881610f3b565b610d2881610f40565b601581527f5441524745545f4e4f545f415554484f52495a45440000000000000000000000602082015260400190565b601b81527f415554484f52495a45445f414444524553535f4d49534d415443480000000000602082015260400190565b601981527f5441524745545f414c52454144595f415554484f52495a454400000000000000602082015260400190565b601381527f494e4445585f4f55545f4f465f424f554e445300000000000000000000000000602082015260400190565b601381527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000602082015260400190565b60208101610e958284610d1f565b92915050565b60208082528101610c8e8184610d2e565b60208101610e958284610d85565b60208101610e958284610d8e565b60208082528101610e9581610d97565b60208082528101610e9581610dc7565b60208082528101610e9581610df7565b60208082528101610e9581610e27565b60208082528101610e9581610e57565b60200190565b5190565b73ffffffffffffffffffffffffffffffffffffffff1690565b151590565b7fffffffff0000000000000000000000000000000000000000000000000000000016905600a265627a7a723058207837a2cec6d5cf5d3c46b65c75d657c0bb2cd8889f924d61ee138ba973ed1bc96c6578706572696d656e74616cf50037",
- "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB NOT AND CALLER OR SWAP1 SSTORE PUSH2 0xF9F DUP1 PUSH2 0x25 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x98 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x42F1181E DUP2 EQ PUSH2 0x246 JUMPI DUP1 PUSH4 0x494503D4 EQ PUSH2 0x268 JUMPI DUP1 PUSH4 0x70712939 EQ PUSH2 0x29E JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x2BE JUMPI DUP1 PUSH4 0x9AD26744 EQ PUSH2 0x2D3 JUMPI DUP1 PUSH4 0xAE25532E EQ PUSH2 0x2F3 JUMPI DUP1 PUSH4 0xB9181611 EQ PUSH2 0x315 JUMPI DUP1 PUSH4 0xD39DE6E9 EQ PUSH2 0x342 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x364 JUMPI JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD AND PUSH32 0xA85E59E400000000000000000000000000000000000000000000000000000000 DUP2 EQ ISZERO PUSH2 0x243 JUMPI PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 DUP2 KECCAK256 SLOAD ISZERO ISZERO PUSH2 0x17B JUMPI PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH29 0x2000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 MSTORE PUSH29 0x1553454E4445525F4E4F545F415554484F52495A454400000000000000 PUSH1 0x40 MSTORE PUSH1 0x0 PUSH1 0x60 MSTORE PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x28 PUSH1 0x4 CALLDATALOAD ADD CALLDATALOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x60 PUSH1 0x24 PUSH1 0x4 CALLDATACOPY PUSH1 0x20 PUSH1 0x0 PUSH1 0x64 PUSH1 0x0 DUP1 DUP6 GAS CALL PUSH1 0x0 DUP1 MLOAD GT PUSH1 0x20 RETURNDATASIZE EQ AND RETURNDATASIZE ISZERO OR DUP2 AND SWAP1 POP DUP1 ISZERO PUSH2 0x1D2 JUMPI STOP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH29 0x2000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 MSTORE PUSH29 0xF5452414E534645525F4641494C454400000000000000000000000000 PUSH1 0x40 MSTORE PUSH1 0x0 PUSH1 0x60 MSTORE PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST POP STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x252 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x266 PUSH2 0x261 CALLDATASIZE PUSH1 0x4 PUSH2 0xCA1 JUMP JUMPDEST PUSH2 0x384 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x274 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x288 PUSH2 0x283 CALLDATASIZE PUSH1 0x4 PUSH2 0xD01 JUMP JUMPDEST PUSH2 0x50F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x295 SWAP2 SWAP1 PUSH2 0xE87 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x266 PUSH2 0x2B9 CALLDATASIZE PUSH1 0x4 PUSH2 0xCA1 JUMP JUMPDEST PUSH2 0x544 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x288 PUSH2 0x7D3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2DF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x266 PUSH2 0x2EE CALLDATASIZE PUSH1 0x4 PUSH2 0xCC7 JUMP JUMPDEST PUSH2 0x7EF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x308 PUSH2 0xAD0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x295 SWAP2 SWAP1 PUSH2 0xEBA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x321 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x335 PUSH2 0x330 CALLDATASIZE PUSH1 0x4 PUSH2 0xCA1 JUMP JUMPDEST PUSH2 0xB06 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x295 SWAP2 SWAP1 PUSH2 0xEAC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x34E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x357 PUSH2 0xB1B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x295 SWAP2 SWAP1 PUSH2 0xE9B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x370 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x266 PUSH2 0x37F CALLDATASIZE PUSH1 0x4 PUSH2 0xCA1 JUMP JUMPDEST PUSH2 0xB8A JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x3DE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3D5 SWAP1 PUSH2 0xF08 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x43E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3D5 SWAP1 PUSH2 0xEE8 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP4 OR SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD SWAP3 DUP4 ADD DUP2 SSTORE DUP4 MSTORE PUSH32 0x405787FA12A823E0F2B7631CC41B3BA8828B3321CA811111FA75CD3AA3BB5ACE SWAP1 SWAP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND DUP5 OR SWAP1 SSTORE MLOAD CALLER SWAP3 SWAP2 PUSH32 0x3147867C59D17E8FA9D522465651D44AAE0A9E38F902F3475B97E58072F0ED4C SWAP2 LOG3 POP JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD DUP3 SWAP1 DUP2 LT PUSH2 0x51D JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x596 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3D5 SWAP1 PUSH2 0xF08 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x5F7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3D5 SWAP1 PUSH2 0xEC8 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST PUSH1 0x2 SLOAD DUP2 LT ISZERO PUSH2 0x78C JUMPI DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 DUP3 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x674 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x784 JUMPI PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0x6CC JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x2 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 DUP4 SWAP1 DUP2 LT PUSH2 0x6FF JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 PUSH2 0x77E SWAP1 DUP3 PUSH2 0xC3B JUMP JUMPDEST POP PUSH2 0x78C JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x644 JUMP JUMPDEST PUSH1 0x40 MLOAD CALLER SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH32 0x1F32C1B084E2DE0713B8FB16BD46BB9DF710A3DBEAE2F3CA93AF46E016DCC6B0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x840 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3D5 SWAP1 PUSH2 0xF08 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x8A1 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3D5 SWAP1 PUSH2 0xEC8 JUMP JUMPDEST PUSH1 0x2 SLOAD DUP2 LT PUSH2 0x8DC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3D5 SWAP1 PUSH2 0xEF8 JUMP JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 DUP3 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x902 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x95B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3D5 SWAP1 PUSH2 0xED8 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0x9D6 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x2 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 DUP4 SWAP1 DUP2 LT PUSH2 0xA09 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 PUSH2 0xA88 SWAP1 DUP3 PUSH2 0xC3B JUMP JUMPDEST POP PUSH1 0x40 MLOAD CALLER SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH32 0x1F32C1B084E2DE0713B8FB16BD46BB9DF710A3DBEAE2F3CA93AF46E016DCC6B0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x4552433230546F6B656E28616464726573732900000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x13 ADD SWAP1 KECCAK256 JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x2 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0xB80 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xB55 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xBDB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3D5 SWAP1 PUSH2 0xF08 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0xC38 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND OR SWAP1 SSTORE JUMPDEST POP JUMP JUMPDEST DUP2 SLOAD DUP2 DUP4 SSTORE DUP2 DUP2 GT ISZERO PUSH2 0xC5F JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 PUSH2 0xC5F SWAP2 DUP2 ADD SWAP1 DUP4 ADD PUSH2 0xC64 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0xB03 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0xC7E JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0xC6A JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC8E DUP3 CALLDATALOAD PUSH2 0xF22 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC8E DUP3 CALLDATALOAD PUSH2 0xB03 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xCB3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xCBF DUP5 DUP5 PUSH2 0xC82 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xCDA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xCE6 DUP6 DUP6 PUSH2 0xC82 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0xCF7 DUP6 DUP3 DUP7 ADD PUSH2 0xC95 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xD13 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xCBF DUP5 DUP5 PUSH2 0xC95 JUMP JUMPDEST PUSH2 0xD28 DUP2 PUSH2 0xF22 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD39 DUP3 PUSH2 0xF1E JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH2 0xD4B DUP4 PUSH2 0xF18 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0xD7B JUMPI PUSH2 0xD61 DUP7 DUP4 MLOAD PUSH2 0xD1F JUMP JUMPDEST PUSH2 0xD6A DUP3 PUSH2 0xF18 JUMP JUMPDEST PUSH1 0x20 SWAP7 SWAP1 SWAP7 ADD SWAP6 SWAP2 POP PUSH1 0x1 ADD PUSH2 0xD4E JUMP JUMPDEST POP SWAP4 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0xD28 DUP2 PUSH2 0xF3B JUMP JUMPDEST PUSH2 0xD28 DUP2 PUSH2 0xF40 JUMP JUMPDEST PUSH1 0x15 DUP2 MSTORE PUSH32 0x5441524745545F4E4F545F415554484F52495A45440000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1B DUP2 MSTORE PUSH32 0x415554484F52495A45445F414444524553535F4D49534D415443480000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x19 DUP2 MSTORE PUSH32 0x5441524745545F414C52454144595F415554484F52495A454400000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x13 DUP2 MSTORE PUSH32 0x494E4445585F4F55545F4F465F424F554E445300000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x13 DUP2 MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xE95 DUP3 DUP5 PUSH2 0xD1F JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xC8E DUP2 DUP5 PUSH2 0xD2E JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xE95 DUP3 DUP5 PUSH2 0xD85 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xE95 DUP3 DUP5 PUSH2 0xD8E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xE95 DUP2 PUSH2 0xD97 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xE95 DUP2 PUSH2 0xDC7 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xE95 DUP2 PUSH2 0xDF7 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xE95 DUP2 PUSH2 0xE27 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xE95 DUP2 PUSH2 0xE57 JUMP JUMPDEST PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND SWAP1 JUMP STOP LOG2 PUSH6 0x627A7A723058 KECCAK256 PUSH25 0x37A2CEC6D5CF5D3C46B65C75D657C0BB2CD8889F924D61EE13 DUP12 0xa9 PUSH20 0xED1BC96C6578706572696D656E74616CF5003700 ",
- "sourceMap": "719:5081:0:-;;;363:5:6;:18;;-1:-1:-1;;;;;;363:18:6;371:10;363:18;;;719:5081:0;;;;;;"
+ "object": "0x608060405260008054600160a060020a03191633179055610f48806100256000396000f3006080604052600436106100985763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166342f1181e8114610246578063494503d41461027657806370712939146102b75780638da5cb5b146102e55780639ad26744146102fa578063ae25532e1461032b578063b918161114610375578063d39de6e9146103b7578063f2fde38b1461041c575b3480156100a457600080fd5b507fffffffff00000000000000000000000000000000000000000000000000000000600035167fa85e59e40000000000000000000000000000000000000000000000000000000081141561024357604080513381526001602082015290812054151561017b577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c1553454e4445525f4e4f545f415554484f52495a454400000000000000604052600060605260646000fd5b602860043501357f23b872dd0000000000000000000000000000000000000000000000000000000060005260606024600437602060006064600080855af1600080511160203d14163d15178116905080156101d257005b7f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c0f5452414e534645525f4641494c454400000000000000000000000000604052600060605260646000fd5b50005b34801561025257600080fd5b5061027473ffffffffffffffffffffffffffffffffffffffff6004351661044a565b005b34801561028257600080fd5b5061028e600435610636565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156102c357600080fd5b5061027473ffffffffffffffffffffffffffffffffffffffff6004351661066b565b3480156102f157600080fd5b5061028e610964565b34801561030657600080fd5b5061027473ffffffffffffffffffffffffffffffffffffffff60043516602435610980565b34801561033757600080fd5b50610340610d35565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b34801561038157600080fd5b506103a373ffffffffffffffffffffffffffffffffffffffff60043516610d6b565b604080519115158252519081900360200190f35b3480156103c357600080fd5b506103cc610d80565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156104085781810151838201526020016103f0565b505050509050019250505060405180910390f35b34801561042857600080fd5b5061027473ffffffffffffffffffffffffffffffffffffffff60043516610def565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104d057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff161561056557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f5441524745545f414c52454144595f415554484f52495a454400000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055513392917f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c91a350565b600280548290811061064457fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6000805473ffffffffffffffffffffffffffffffffffffffff1633146106f257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff16151561078857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5441524745545f4e4f545f415554484f52495a45440000000000000000000000604482015290519081900360640190fd5b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260016020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b60025481101561091d578173ffffffffffffffffffffffffffffffffffffffff1660028281548110151561080557fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561091557600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061085d57fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff909216918390811061089057fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019061090f9082610ed5565b5061091d565b6001016107d5565b604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a0657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff161515610a9c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5441524745545f4e4f545f415554484f52495a45440000000000000000000000604482015290519081900360640190fd5b6002548110610b0c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f494e4445585f4f55545f4f465f424f554e445300000000000000000000000000604482015290519081900360640190fd5b8173ffffffffffffffffffffffffffffffffffffffff16600282815481101515610b3257fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614610bc057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f415554484f52495a45445f414444524553535f4d49534d415443480000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908110610c3b57fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff9092169183908110610c6e57fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190610ced9082610ed5565b50604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b604080517f4552433230546f6b656e28616464726573732900000000000000000000000000815290519081900360130190205b90565b60016020526000908152604090205460ff1681565b60606002805480602002602001604051908101604052809291908181526020018280548015610de557602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610dba575b5050505050905090565b60005473ffffffffffffffffffffffffffffffffffffffff163314610e7557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811615610ed257600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b815481835581811115610ef957600083815260209020610ef9918101908301610efe565b505050565b610d6891905b80821115610f185760008155600101610f04565b50905600a165627a7a723058201466e5e24b5bc03ee391f9e0fc49b2c9d54685fe6a0f7742a10783f481e82a7b0029",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB NOT AND CALLER OR SWAP1 SSTORE PUSH2 0xF48 DUP1 PUSH2 0x25 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x98 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x42F1181E DUP2 EQ PUSH2 0x246 JUMPI DUP1 PUSH4 0x494503D4 EQ PUSH2 0x276 JUMPI DUP1 PUSH4 0x70712939 EQ PUSH2 0x2B7 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x2E5 JUMPI DUP1 PUSH4 0x9AD26744 EQ PUSH2 0x2FA JUMPI DUP1 PUSH4 0xAE25532E EQ PUSH2 0x32B JUMPI DUP1 PUSH4 0xB9181611 EQ PUSH2 0x375 JUMPI DUP1 PUSH4 0xD39DE6E9 EQ PUSH2 0x3B7 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x41C JUMPI JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD AND PUSH32 0xA85E59E400000000000000000000000000000000000000000000000000000000 DUP2 EQ ISZERO PUSH2 0x243 JUMPI PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 DUP2 KECCAK256 SLOAD ISZERO ISZERO PUSH2 0x17B JUMPI PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH29 0x2000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 MSTORE PUSH29 0x1553454E4445525F4E4F545F415554484F52495A454400000000000000 PUSH1 0x40 MSTORE PUSH1 0x0 PUSH1 0x60 MSTORE PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x28 PUSH1 0x4 CALLDATALOAD ADD CALLDATALOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x60 PUSH1 0x24 PUSH1 0x4 CALLDATACOPY PUSH1 0x20 PUSH1 0x0 PUSH1 0x64 PUSH1 0x0 DUP1 DUP6 GAS CALL PUSH1 0x0 DUP1 MLOAD GT PUSH1 0x20 RETURNDATASIZE EQ AND RETURNDATASIZE ISZERO OR DUP2 AND SWAP1 POP DUP1 ISZERO PUSH2 0x1D2 JUMPI STOP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH29 0x2000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 MSTORE PUSH29 0xF5452414E534645525F4641494C454400000000000000000000000000 PUSH1 0x40 MSTORE PUSH1 0x0 PUSH1 0x60 MSTORE PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST POP STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x252 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x274 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x44A JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x282 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28E PUSH1 0x4 CALLDATALOAD PUSH2 0x636 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x274 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x66B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28E PUSH2 0x964 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x306 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x274 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD PUSH2 0x980 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x337 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x340 PUSH2 0xD35 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x381 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3A3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0xD6B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3CC PUSH2 0xD80 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 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x408 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3F0 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x428 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x274 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0xDEF JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x4D0 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x565 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5441524745545F414C52454144595F415554484F52495A454400000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP4 OR SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD SWAP3 DUP4 ADD DUP2 SSTORE DUP4 MSTORE PUSH32 0x405787FA12A823E0F2B7631CC41B3BA8828B3321CA811111FA75CD3AA3BB5ACE SWAP1 SWAP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND DUP5 OR SWAP1 SSTORE MLOAD CALLER SWAP3 SWAP2 PUSH32 0x3147867C59D17E8FA9D522465651D44AAE0A9E38F902F3475B97E58072F0ED4C SWAP2 LOG3 POP JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD DUP3 SWAP1 DUP2 LT PUSH2 0x644 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x6F2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x788 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5441524745545F4E4F545F415554484F52495A45440000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST PUSH1 0x2 SLOAD DUP2 LT ISZERO PUSH2 0x91D JUMPI DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 DUP3 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x805 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x915 JUMPI PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0x85D JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x2 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 DUP4 SWAP1 DUP2 LT PUSH2 0x890 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 PUSH2 0x90F SWAP1 DUP3 PUSH2 0xED5 JUMP JUMPDEST POP PUSH2 0x91D JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x7D5 JUMP JUMPDEST PUSH1 0x40 MLOAD CALLER SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH32 0x1F32C1B084E2DE0713B8FB16BD46BB9DF710A3DBEAE2F3CA93AF46E016DCC6B0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xA06 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0xA9C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5441524745545F4E4F545F415554484F52495A45440000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD DUP2 LT PUSH2 0xB0C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E4445585F4F55545F4F465F424F554E445300000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 DUP3 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0xB32 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xBC0 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x415554484F52495A45445F414444524553535F4D49534D415443480000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0xC3B JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x2 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 DUP4 SWAP1 DUP2 LT PUSH2 0xC6E JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 PUSH2 0xCED SWAP1 DUP3 PUSH2 0xED5 JUMP JUMPDEST POP PUSH1 0x40 MLOAD CALLER SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH32 0x1F32C1B084E2DE0713B8FB16BD46BB9DF710A3DBEAE2F3CA93AF46E016DCC6B0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x4552433230546F6B656E28616464726573732900000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x13 ADD SWAP1 KECCAK256 JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x2 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0xDE5 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xDBA JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xE75 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0xED2 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND OR SWAP1 SSTORE JUMPDEST POP JUMP JUMPDEST DUP2 SLOAD DUP2 DUP4 SSTORE DUP2 DUP2 GT ISZERO PUSH2 0xEF9 JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 PUSH2 0xEF9 SWAP2 DUP2 ADD SWAP1 DUP4 ADD PUSH2 0xEFE JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0xD68 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0xF18 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0xF04 JUMP JUMPDEST POP SWAP1 JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 EQ PUSH7 0xE5E24B5BC03EE3 SWAP2 0xf9 0xe0 0xfc 0x49 0xb2 0xc9 0xd5 0x46 DUP6 INVALID PUSH11 0xF7742A10783F481E82A7B STOP 0x29 ",
+ "sourceMap": "685:5140:0:-;;;329:5:6;:18;;-1:-1:-1;;;;;;329:18:6;337:10;329:18;;;685:5140:0;;;;;;"
},
"deployedBytecode": {
"linkReferences": {},
- "object": "0x6080604052600436106100985763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166342f1181e8114610246578063494503d414610268578063707129391461029e5780638da5cb5b146102be5780639ad26744146102d3578063ae25532e146102f3578063b918161114610315578063d39de6e914610342578063f2fde38b14610364575b3480156100a457600080fd5b507fffffffff00000000000000000000000000000000000000000000000000000000600035167fa85e59e40000000000000000000000000000000000000000000000000000000081141561024357604080513381526001602082015290812054151561017b577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c1553454e4445525f4e4f545f415554484f52495a454400000000000000604052600060605260646000fd5b602860043501357f23b872dd0000000000000000000000000000000000000000000000000000000060005260606024600437602060006064600080855af1600080511160203d14163d15178116905080156101d257005b7f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c0f5452414e534645525f4641494c454400000000000000000000000000604052600060605260646000fd5b50005b34801561025257600080fd5b50610266610261366004610ca1565b610384565b005b34801561027457600080fd5b50610288610283366004610d01565b61050f565b6040516102959190610e87565b60405180910390f35b3480156102aa57600080fd5b506102666102b9366004610ca1565b610544565b3480156102ca57600080fd5b506102886107d3565b3480156102df57600080fd5b506102666102ee366004610cc7565b6107ef565b3480156102ff57600080fd5b50610308610ad0565b6040516102959190610eba565b34801561032157600080fd5b50610335610330366004610ca1565b610b06565b6040516102959190610eac565b34801561034e57600080fd5b50610357610b1b565b6040516102959190610e9b565b34801561037057600080fd5b5061026661037f366004610ca1565b610b8a565b60005473ffffffffffffffffffffffffffffffffffffffff1633146103de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d590610f08565b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff161561043e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d590610ee8565b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055513392917f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c91a350565b600280548290811061051d57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6000805473ffffffffffffffffffffffffffffffffffffffff163314610596576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d590610f08565b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff1615156105f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d590610ec8565b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260016020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b60025481101561078c578173ffffffffffffffffffffffffffffffffffffffff1660028281548110151561067457fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561078457600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019081106106cc57fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff90921691839081106106ff57fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019061077e9082610c3b565b5061078c565b600101610644565b604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff163314610840576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d590610f08565b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff1615156108a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d590610ec8565b60025481106108dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d590610ef8565b8173ffffffffffffffffffffffffffffffffffffffff1660028281548110151561090257fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff161461095b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d590610ed8565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019081106109d657fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff9092169183908110610a0957fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190610a889082610c3b565b50604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b604080517f4552433230546f6b656e28616464726573732900000000000000000000000000815290519081900360130190205b90565b60016020526000908152604090205460ff1681565b60606002805480602002602001604051908101604052809291908181526020018280548015610b8057602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610b55575b5050505050905090565b60005473ffffffffffffffffffffffffffffffffffffffff163314610bdb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d590610f08565b73ffffffffffffffffffffffffffffffffffffffff811615610c3857600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b815481835581811115610c5f57600083815260209020610c5f918101908301610c64565b505050565b610b0391905b80821115610c7e5760008155600101610c6a565b5090565b6000610c8e8235610f22565b9392505050565b6000610c8e8235610b03565b600060208284031215610cb357600080fd5b6000610cbf8484610c82565b949350505050565b60008060408385031215610cda57600080fd5b6000610ce68585610c82565b9250506020610cf785828601610c95565b9150509250929050565b600060208284031215610d1357600080fd5b6000610cbf8484610c95565b610d2881610f22565b82525050565b6000610d3982610f1e565b808452602084019350610d4b83610f18565b60005b82811015610d7b57610d61868351610d1f565b610d6a82610f18565b602096909601959150600101610d4e565b5093949350505050565b610d2881610f3b565b610d2881610f40565b601581527f5441524745545f4e4f545f415554484f52495a45440000000000000000000000602082015260400190565b601b81527f415554484f52495a45445f414444524553535f4d49534d415443480000000000602082015260400190565b601981527f5441524745545f414c52454144595f415554484f52495a454400000000000000602082015260400190565b601381527f494e4445585f4f55545f4f465f424f554e445300000000000000000000000000602082015260400190565b601381527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000602082015260400190565b60208101610e958284610d1f565b92915050565b60208082528101610c8e8184610d2e565b60208101610e958284610d85565b60208101610e958284610d8e565b60208082528101610e9581610d97565b60208082528101610e9581610dc7565b60208082528101610e9581610df7565b60208082528101610e9581610e27565b60208082528101610e9581610e57565b60200190565b5190565b73ffffffffffffffffffffffffffffffffffffffff1690565b151590565b7fffffffff0000000000000000000000000000000000000000000000000000000016905600a265627a7a723058207837a2cec6d5cf5d3c46b65c75d657c0bb2cd8889f924d61ee138ba973ed1bc96c6578706572696d656e74616cf50037",
- "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x98 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x42F1181E DUP2 EQ PUSH2 0x246 JUMPI DUP1 PUSH4 0x494503D4 EQ PUSH2 0x268 JUMPI DUP1 PUSH4 0x70712939 EQ PUSH2 0x29E JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x2BE JUMPI DUP1 PUSH4 0x9AD26744 EQ PUSH2 0x2D3 JUMPI DUP1 PUSH4 0xAE25532E EQ PUSH2 0x2F3 JUMPI DUP1 PUSH4 0xB9181611 EQ PUSH2 0x315 JUMPI DUP1 PUSH4 0xD39DE6E9 EQ PUSH2 0x342 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x364 JUMPI JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD AND PUSH32 0xA85E59E400000000000000000000000000000000000000000000000000000000 DUP2 EQ ISZERO PUSH2 0x243 JUMPI PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 DUP2 KECCAK256 SLOAD ISZERO ISZERO PUSH2 0x17B JUMPI PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH29 0x2000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 MSTORE PUSH29 0x1553454E4445525F4E4F545F415554484F52495A454400000000000000 PUSH1 0x40 MSTORE PUSH1 0x0 PUSH1 0x60 MSTORE PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x28 PUSH1 0x4 CALLDATALOAD ADD CALLDATALOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x60 PUSH1 0x24 PUSH1 0x4 CALLDATACOPY PUSH1 0x20 PUSH1 0x0 PUSH1 0x64 PUSH1 0x0 DUP1 DUP6 GAS CALL PUSH1 0x0 DUP1 MLOAD GT PUSH1 0x20 RETURNDATASIZE EQ AND RETURNDATASIZE ISZERO OR DUP2 AND SWAP1 POP DUP1 ISZERO PUSH2 0x1D2 JUMPI STOP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH29 0x2000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 MSTORE PUSH29 0xF5452414E534645525F4641494C454400000000000000000000000000 PUSH1 0x40 MSTORE PUSH1 0x0 PUSH1 0x60 MSTORE PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST POP STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x252 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x266 PUSH2 0x261 CALLDATASIZE PUSH1 0x4 PUSH2 0xCA1 JUMP JUMPDEST PUSH2 0x384 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x274 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x288 PUSH2 0x283 CALLDATASIZE PUSH1 0x4 PUSH2 0xD01 JUMP JUMPDEST PUSH2 0x50F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x295 SWAP2 SWAP1 PUSH2 0xE87 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x266 PUSH2 0x2B9 CALLDATASIZE PUSH1 0x4 PUSH2 0xCA1 JUMP JUMPDEST PUSH2 0x544 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x288 PUSH2 0x7D3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2DF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x266 PUSH2 0x2EE CALLDATASIZE PUSH1 0x4 PUSH2 0xCC7 JUMP JUMPDEST PUSH2 0x7EF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x308 PUSH2 0xAD0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x295 SWAP2 SWAP1 PUSH2 0xEBA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x321 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x335 PUSH2 0x330 CALLDATASIZE PUSH1 0x4 PUSH2 0xCA1 JUMP JUMPDEST PUSH2 0xB06 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x295 SWAP2 SWAP1 PUSH2 0xEAC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x34E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x357 PUSH2 0xB1B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x295 SWAP2 SWAP1 PUSH2 0xE9B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x370 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x266 PUSH2 0x37F CALLDATASIZE PUSH1 0x4 PUSH2 0xCA1 JUMP JUMPDEST PUSH2 0xB8A JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x3DE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3D5 SWAP1 PUSH2 0xF08 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x43E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3D5 SWAP1 PUSH2 0xEE8 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP4 OR SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD SWAP3 DUP4 ADD DUP2 SSTORE DUP4 MSTORE PUSH32 0x405787FA12A823E0F2B7631CC41B3BA8828B3321CA811111FA75CD3AA3BB5ACE SWAP1 SWAP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND DUP5 OR SWAP1 SSTORE MLOAD CALLER SWAP3 SWAP2 PUSH32 0x3147867C59D17E8FA9D522465651D44AAE0A9E38F902F3475B97E58072F0ED4C SWAP2 LOG3 POP JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD DUP3 SWAP1 DUP2 LT PUSH2 0x51D JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x596 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3D5 SWAP1 PUSH2 0xF08 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x5F7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3D5 SWAP1 PUSH2 0xEC8 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST PUSH1 0x2 SLOAD DUP2 LT ISZERO PUSH2 0x78C JUMPI DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 DUP3 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x674 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x784 JUMPI PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0x6CC JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x2 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 DUP4 SWAP1 DUP2 LT PUSH2 0x6FF JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 PUSH2 0x77E SWAP1 DUP3 PUSH2 0xC3B JUMP JUMPDEST POP PUSH2 0x78C JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x644 JUMP JUMPDEST PUSH1 0x40 MLOAD CALLER SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH32 0x1F32C1B084E2DE0713B8FB16BD46BB9DF710A3DBEAE2F3CA93AF46E016DCC6B0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x840 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3D5 SWAP1 PUSH2 0xF08 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x8A1 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3D5 SWAP1 PUSH2 0xEC8 JUMP JUMPDEST PUSH1 0x2 SLOAD DUP2 LT PUSH2 0x8DC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3D5 SWAP1 PUSH2 0xEF8 JUMP JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 DUP3 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x902 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x95B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3D5 SWAP1 PUSH2 0xED8 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0x9D6 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x2 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 DUP4 SWAP1 DUP2 LT PUSH2 0xA09 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 PUSH2 0xA88 SWAP1 DUP3 PUSH2 0xC3B JUMP JUMPDEST POP PUSH1 0x40 MLOAD CALLER SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH32 0x1F32C1B084E2DE0713B8FB16BD46BB9DF710A3DBEAE2F3CA93AF46E016DCC6B0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x4552433230546F6B656E28616464726573732900000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x13 ADD SWAP1 KECCAK256 JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x2 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0xB80 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xB55 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xBDB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3D5 SWAP1 PUSH2 0xF08 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0xC38 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND OR SWAP1 SSTORE JUMPDEST POP JUMP JUMPDEST DUP2 SLOAD DUP2 DUP4 SSTORE DUP2 DUP2 GT ISZERO PUSH2 0xC5F JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 PUSH2 0xC5F SWAP2 DUP2 ADD SWAP1 DUP4 ADD PUSH2 0xC64 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0xB03 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0xC7E JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0xC6A JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC8E DUP3 CALLDATALOAD PUSH2 0xF22 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC8E DUP3 CALLDATALOAD PUSH2 0xB03 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xCB3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xCBF DUP5 DUP5 PUSH2 0xC82 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xCDA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xCE6 DUP6 DUP6 PUSH2 0xC82 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0xCF7 DUP6 DUP3 DUP7 ADD PUSH2 0xC95 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xD13 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xCBF DUP5 DUP5 PUSH2 0xC95 JUMP JUMPDEST PUSH2 0xD28 DUP2 PUSH2 0xF22 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD39 DUP3 PUSH2 0xF1E JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH2 0xD4B DUP4 PUSH2 0xF18 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0xD7B JUMPI PUSH2 0xD61 DUP7 DUP4 MLOAD PUSH2 0xD1F JUMP JUMPDEST PUSH2 0xD6A DUP3 PUSH2 0xF18 JUMP JUMPDEST PUSH1 0x20 SWAP7 SWAP1 SWAP7 ADD SWAP6 SWAP2 POP PUSH1 0x1 ADD PUSH2 0xD4E JUMP JUMPDEST POP SWAP4 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0xD28 DUP2 PUSH2 0xF3B JUMP JUMPDEST PUSH2 0xD28 DUP2 PUSH2 0xF40 JUMP JUMPDEST PUSH1 0x15 DUP2 MSTORE PUSH32 0x5441524745545F4E4F545F415554484F52495A45440000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1B DUP2 MSTORE PUSH32 0x415554484F52495A45445F414444524553535F4D49534D415443480000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x19 DUP2 MSTORE PUSH32 0x5441524745545F414C52454144595F415554484F52495A454400000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x13 DUP2 MSTORE PUSH32 0x494E4445585F4F55545F4F465F424F554E445300000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x13 DUP2 MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xE95 DUP3 DUP5 PUSH2 0xD1F JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xC8E DUP2 DUP5 PUSH2 0xD2E JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xE95 DUP3 DUP5 PUSH2 0xD85 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xE95 DUP3 DUP5 PUSH2 0xD8E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xE95 DUP2 PUSH2 0xD97 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xE95 DUP2 PUSH2 0xDC7 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xE95 DUP2 PUSH2 0xDF7 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xE95 DUP2 PUSH2 0xE27 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xE95 DUP2 PUSH2 0xE57 JUMP JUMPDEST PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND SWAP1 JUMP STOP LOG2 PUSH6 0x627A7A723058 KECCAK256 PUSH25 0x37A2CEC6D5CF5D3C46B65C75D657C0BB2CD8889F924D61EE13 DUP12 0xa9 PUSH20 0xED1BC96C6578706572696D656E74616CF5003700 ",
- "sourceMap": "719:5081:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;719:5081:0;1050:66;1046:1;1033:15;1029:88;1512:66;1502:8;1499:80;1496:2;;;1808;1802:9;;1846:6;1828:70;;1938:15;1933:2;1922:14;;1915:39;2049:20;;;2043:27;2036:35;2033:2;;;2172:66;2169:1;2162:77;2271:66;2267:2;2260:78;2370:66;2366:2;2359:78;2469:1;2465:2;2458:13;2502:3;2499:1;2492:14;2033:2;3098;3094:1;3081:15;3077:24;3064:38;3394:66;3391:1;3384:77;3699:2;3695;3692:1;3679:23;4204:2;4141:1;4086:3;4021:1;3963;3893:5;3838:3;3812:459;5014:1;5010;5004:8;5001:15;4972:2;4956:14;4953:22;4924:114;4887:14;4880:22;4856:200;4847:7;4843:214;4832:225;;5077:7;5074:2;;;5107:12;5074:2;5239:66;5236:1;5229:77;5334:66;5330:2;5323:78;5429:66;5425:2;5418:78;5524:1;5520:2;5513:13;5553:3;5550:1;5543:14;1496:2;926:4655;719:5081;1180:320:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1180:320:1;;;;;;;;;;;1065:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1065:28:1;;;;;;;;;;;;;;;;;;;;;;;;;1614:547;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1614:547:1;;;;;;;;;292:20:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;292:20:6;;;;2334:643:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2334:643:1;;;;;;;;;5685:113:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5685:113:0;;;;;;;;;;;;1016:43:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1016:43:1;;;;;;;;;;;;;;;;;3074:138;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3074:138:1;;;;;;;;;;;;534:167:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;534:167:6;;;;;;;;;1180:320:1;460:5:6;;;;446:10;:19;425:85;;;;;;;;;;;;;;;;;;;;;;1297:18:1;;;;;;;:10;:18;;;;;;;;1296:19;1275:91;;;;;;;;;;;;;;1377:18;;;;;;;1398:4;1377:18;;;;;;;;:25;;;;;;;;1412:11;27:10:-1;;23:18;;;45:23;;1412:24:1;;;;;;;;;;;;;;1451:42;1482:10;;1377:18;1451:42;;;1180:320;:::o;1065:28::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1065:28:1;:::o;1614:547::-;1849:9;460:5:6;;;;446:10;:19;425:85;;;;;;;;;;;;;;1733:18:1;;;;;;;:10;:18;;;;;;;;1712:86;;;;;;;;;;;;;;;;-1:-1:-1;1816:18:1;;;;;;;:10;:18;;;;;1809:25;;;;;;1844:252;1868:11;:18;1864:22;;1844:252;;;1929:6;1911:24;;:11;1923:1;1911:14;;;;;;;;;;;;;;;;;;;;;;:24;1907:179;;;1972:11;1984:18;;:22;;;;1972:35;;;;;;;;;;;;;;;;1955:11;:14;;1972:35;;;;;1967:1;;1955:14;;;;;;;;;;;;;;;:52;;;;;;;;;;;;;;;2025:11;:23;;;;;;;;;:::i;:::-;;2066:5;;1907:179;1888:3;;1844:252;;;2110:44;;2143:10;;2110:44;;;;;;;;;1614:547;;:::o;292:20:6:-;;;;;;:::o;2334:643:1:-;460:5:6;;;;446:10;:19;425:85;;;;;;;;;;;;;;2497:18:1;;;;;;;:10;:18;;;;;;;;2476:86;;;;;;;;;;;;;;;;2601:11;:18;2593:26;;2572:92;;;;;;;;;;;;;;2717:6;2695:28;;:11;2707:5;2695:18;;;;;;;;;;;;;;;;;;;;;;:28;2674:102;;;;;;;;;;;;;;2794:18;;;;;;;:10;:18;;;;;2787:25;;;;;;2843:11;2855:18;;:22;;;;2843:35;;;;;;;;;;;;;;;;2822:11;:18;;2843:35;;;;;2834:5;;2822:18;;;;;;;;;;;;;;;:56;;;;;;;;;;;;;;;2888:11;:23;;;;;;;;;:::i;:::-;-1:-1:-1;2926:44:1;;2959:10;;2926:44;;;;;;;;;2334:643;;:::o;5685:113:0:-;829:32;;;;;;;;;;;;;;;;5685:113;;:::o;1016:43:1:-;;;;;;;;;;;;;;;:::o;3074:138::-;3155:9;3194:11;3187:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3074:138;:::o;534:167:6:-;460:5;;;;446:10;:19;425:85;;;;;;;;;;;;;;630:22;;;;626:69;;668:5;:16;;;;;;;;;;626:69;534:167;:::o;719:5081:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;5:118:-1;;72:46;110:6;97:20;72:46;;;63:55;57:66;-1:-1;;;57:66;130:118;;197:46;235:6;222:20;197:46;;255:241;;359:2;347:9;338:7;334:23;330:32;327:2;;;375:1;372;365:12;327:2;410:1;427:53;472:7;452:9;427:53;;;417:63;321:175;-1:-1;;;;321:175;503:366;;;624:2;612:9;603:7;599:23;595:32;592:2;;;640:1;637;630:12;592:2;675:1;692:53;737:7;717:9;692:53;;;682:63;;654:97;782:2;800:53;845:7;836:6;825:9;821:22;800:53;;;790:63;;761:98;586:283;;;;;;876:241;;980:2;968:9;959:7;955:23;951:32;948:2;;;996:1;993;986:12;948:2;1031:1;1048:53;1093:7;1073:9;1048:53;;1124:110;1197:31;1222:5;1197:31;;;1192:3;1185:44;1179:55;;;1272:590;;1407:54;1455:5;1407:54;;;1479:6;1474:3;1467:19;1503:4;1498:3;1494:14;1487:21;;1548:56;1598:5;1548:56;;;1625:1;1610:230;1635:6;1632:1;1629:13;1610:230;;;1675:53;1724:3;1715:6;1709:13;1675:53;;;1745:60;1798:6;1745:60;;;1828:4;1819:14;;;;;1735:70;-1:-1;1657:1;1650:9;1610:230;;;-1:-1;1853:3;;1386:476;-1:-1;;;;1386:476;1870:101;1937:28;1959:5;1937:28;;1978:107;2049:30;2073:5;2049:30;;2093:296;2248:2;2236:15;;2285:66;2280:2;2271:12;;2264:88;2380:2;2371:12;;2229:160;2398:296;2553:2;2541:15;;2590:66;2585:2;2576:12;;2569:88;2685:2;2676:12;;2534:160;2703:296;2858:2;2846:15;;2895:66;2890:2;2881:12;;2874:88;2990:2;2981:12;;2839:160;3008:296;3163:2;3151:15;;3200:66;3195:2;3186:12;;3179:88;3295:2;3286:12;;3144:160;3313:296;3468:2;3456:15;;3505:66;3500:2;3491:12;;3484:88;3600:2;3591:12;;3449:160;3617:193;3725:2;3710:18;;3739:61;3714:9;3773:6;3739:61;;;3696:114;;;;;3817:341;3975:2;3989:47;;;3960:18;;4050:98;3960:18;4134:6;4050:98;;4165:181;4267:2;4252:18;;4281:55;4256:9;4309:6;4281:55;;4353:189;4459:2;4444:18;;4473:59;4448:9;4505:6;4473:59;;4549:387;4730:2;4744:47;;;4715:18;;4805:121;4715:18;4805:121;;4943:387;5124:2;5138:47;;;5109:18;;5199:121;5109:18;5199:121;;5337:387;5518:2;5532:47;;;5503:18;;5593:121;5503:18;5593:121;;5731:387;5912:2;5926:47;;;5897:18;;5987:121;5897:18;5987:121;;6125:387;6306:2;6320:47;;;6291:18;;6381:121;6291:18;6381:121;;6521;6630:4;6618:17;;6599:43;6651:107;6741:12;;6725:33;6896:128;6976:42;6965:54;;6948:76;7031:92;7104:13;7097:21;;7080:43;7130:151;7209:66;7198:78;;7181:100"
+ "object": "0x6080604052600436106100985763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166342f1181e8114610246578063494503d41461027657806370712939146102b75780638da5cb5b146102e55780639ad26744146102fa578063ae25532e1461032b578063b918161114610375578063d39de6e9146103b7578063f2fde38b1461041c575b3480156100a457600080fd5b507fffffffff00000000000000000000000000000000000000000000000000000000600035167fa85e59e40000000000000000000000000000000000000000000000000000000081141561024357604080513381526001602082015290812054151561017b577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c1553454e4445525f4e4f545f415554484f52495a454400000000000000604052600060605260646000fd5b602860043501357f23b872dd0000000000000000000000000000000000000000000000000000000060005260606024600437602060006064600080855af1600080511160203d14163d15178116905080156101d257005b7f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c0f5452414e534645525f4641494c454400000000000000000000000000604052600060605260646000fd5b50005b34801561025257600080fd5b5061027473ffffffffffffffffffffffffffffffffffffffff6004351661044a565b005b34801561028257600080fd5b5061028e600435610636565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156102c357600080fd5b5061027473ffffffffffffffffffffffffffffffffffffffff6004351661066b565b3480156102f157600080fd5b5061028e610964565b34801561030657600080fd5b5061027473ffffffffffffffffffffffffffffffffffffffff60043516602435610980565b34801561033757600080fd5b50610340610d35565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b34801561038157600080fd5b506103a373ffffffffffffffffffffffffffffffffffffffff60043516610d6b565b604080519115158252519081900360200190f35b3480156103c357600080fd5b506103cc610d80565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156104085781810151838201526020016103f0565b505050509050019250505060405180910390f35b34801561042857600080fd5b5061027473ffffffffffffffffffffffffffffffffffffffff60043516610def565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104d057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff161561056557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f5441524745545f414c52454144595f415554484f52495a454400000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055513392917f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c91a350565b600280548290811061064457fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6000805473ffffffffffffffffffffffffffffffffffffffff1633146106f257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff16151561078857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5441524745545f4e4f545f415554484f52495a45440000000000000000000000604482015290519081900360640190fd5b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260016020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b60025481101561091d578173ffffffffffffffffffffffffffffffffffffffff1660028281548110151561080557fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561091557600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061085d57fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff909216918390811061089057fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019061090f9082610ed5565b5061091d565b6001016107d5565b604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a0657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff161515610a9c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5441524745545f4e4f545f415554484f52495a45440000000000000000000000604482015290519081900360640190fd5b6002548110610b0c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f494e4445585f4f55545f4f465f424f554e445300000000000000000000000000604482015290519081900360640190fd5b8173ffffffffffffffffffffffffffffffffffffffff16600282815481101515610b3257fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614610bc057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f415554484f52495a45445f414444524553535f4d49534d415443480000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908110610c3b57fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff9092169183908110610c6e57fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190610ced9082610ed5565b50604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b604080517f4552433230546f6b656e28616464726573732900000000000000000000000000815290519081900360130190205b90565b60016020526000908152604090205460ff1681565b60606002805480602002602001604051908101604052809291908181526020018280548015610de557602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610dba575b5050505050905090565b60005473ffffffffffffffffffffffffffffffffffffffff163314610e7557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811615610ed257600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b815481835581811115610ef957600083815260209020610ef9918101908301610efe565b505050565b610d6891905b80821115610f185760008155600101610f04565b50905600a165627a7a723058201466e5e24b5bc03ee391f9e0fc49b2c9d54685fe6a0f7742a10783f481e82a7b0029",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x98 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x42F1181E DUP2 EQ PUSH2 0x246 JUMPI DUP1 PUSH4 0x494503D4 EQ PUSH2 0x276 JUMPI DUP1 PUSH4 0x70712939 EQ PUSH2 0x2B7 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x2E5 JUMPI DUP1 PUSH4 0x9AD26744 EQ PUSH2 0x2FA JUMPI DUP1 PUSH4 0xAE25532E EQ PUSH2 0x32B JUMPI DUP1 PUSH4 0xB9181611 EQ PUSH2 0x375 JUMPI DUP1 PUSH4 0xD39DE6E9 EQ PUSH2 0x3B7 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x41C JUMPI JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD AND PUSH32 0xA85E59E400000000000000000000000000000000000000000000000000000000 DUP2 EQ ISZERO PUSH2 0x243 JUMPI PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 DUP2 KECCAK256 SLOAD ISZERO ISZERO PUSH2 0x17B JUMPI PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH29 0x2000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 MSTORE PUSH29 0x1553454E4445525F4E4F545F415554484F52495A454400000000000000 PUSH1 0x40 MSTORE PUSH1 0x0 PUSH1 0x60 MSTORE PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x28 PUSH1 0x4 CALLDATALOAD ADD CALLDATALOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x60 PUSH1 0x24 PUSH1 0x4 CALLDATACOPY PUSH1 0x20 PUSH1 0x0 PUSH1 0x64 PUSH1 0x0 DUP1 DUP6 GAS CALL PUSH1 0x0 DUP1 MLOAD GT PUSH1 0x20 RETURNDATASIZE EQ AND RETURNDATASIZE ISZERO OR DUP2 AND SWAP1 POP DUP1 ISZERO PUSH2 0x1D2 JUMPI STOP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH29 0x2000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 MSTORE PUSH29 0xF5452414E534645525F4641494C454400000000000000000000000000 PUSH1 0x40 MSTORE PUSH1 0x0 PUSH1 0x60 MSTORE PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST POP STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x252 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x274 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x44A JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x282 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28E PUSH1 0x4 CALLDATALOAD PUSH2 0x636 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x274 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x66B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28E PUSH2 0x964 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x306 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x274 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD PUSH2 0x980 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x337 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x340 PUSH2 0xD35 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x381 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3A3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0xD6B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3CC PUSH2 0xD80 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 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x408 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3F0 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x428 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x274 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0xDEF JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x4D0 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x565 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5441524745545F414C52454144595F415554484F52495A454400000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP4 OR SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD SWAP3 DUP4 ADD DUP2 SSTORE DUP4 MSTORE PUSH32 0x405787FA12A823E0F2B7631CC41B3BA8828B3321CA811111FA75CD3AA3BB5ACE SWAP1 SWAP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND DUP5 OR SWAP1 SSTORE MLOAD CALLER SWAP3 SWAP2 PUSH32 0x3147867C59D17E8FA9D522465651D44AAE0A9E38F902F3475B97E58072F0ED4C SWAP2 LOG3 POP JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD DUP3 SWAP1 DUP2 LT PUSH2 0x644 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x6F2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x788 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5441524745545F4E4F545F415554484F52495A45440000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST PUSH1 0x2 SLOAD DUP2 LT ISZERO PUSH2 0x91D JUMPI DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 DUP3 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x805 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x915 JUMPI PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0x85D JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x2 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 DUP4 SWAP1 DUP2 LT PUSH2 0x890 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 PUSH2 0x90F SWAP1 DUP3 PUSH2 0xED5 JUMP JUMPDEST POP PUSH2 0x91D JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x7D5 JUMP JUMPDEST PUSH1 0x40 MLOAD CALLER SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH32 0x1F32C1B084E2DE0713B8FB16BD46BB9DF710A3DBEAE2F3CA93AF46E016DCC6B0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xA06 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0xA9C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5441524745545F4E4F545F415554484F52495A45440000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD DUP2 LT PUSH2 0xB0C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E4445585F4F55545F4F465F424F554E445300000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 DUP3 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0xB32 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xBC0 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x415554484F52495A45445F414444524553535F4D49534D415443480000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0xC3B JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x2 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 DUP4 SWAP1 DUP2 LT PUSH2 0xC6E JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 PUSH2 0xCED SWAP1 DUP3 PUSH2 0xED5 JUMP JUMPDEST POP PUSH1 0x40 MLOAD CALLER SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH32 0x1F32C1B084E2DE0713B8FB16BD46BB9DF710A3DBEAE2F3CA93AF46E016DCC6B0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x4552433230546F6B656E28616464726573732900000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x13 ADD SWAP1 KECCAK256 JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x2 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0xDE5 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xDBA JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xE75 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0xED2 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND OR SWAP1 SSTORE JUMPDEST POP JUMP JUMPDEST DUP2 SLOAD DUP2 DUP4 SSTORE DUP2 DUP2 GT ISZERO PUSH2 0xEF9 JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 PUSH2 0xEF9 SWAP2 DUP2 ADD SWAP1 DUP4 ADD PUSH2 0xEFE JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0xD68 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0xF18 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0xF04 JUMP JUMPDEST POP SWAP1 JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 EQ PUSH7 0xE5E24B5BC03EE3 SWAP2 0xf9 0xe0 0xfc 0x49 0xb2 0xc9 0xd5 0x46 DUP6 INVALID PUSH11 0xF7742A10783F481E82A7B STOP 0x29 ",
+ "sourceMap": "685:5140:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;685:5140:0;1075:66;1071:1;1058:15;1054:88;1537:66;1527:8;1524:80;1521:2;;;1833;1827:9;;1871:6;1853:70;;1963:15;1958:2;1947:14;;1940:39;2074:20;;;2068:27;2061:35;2058:2;;;2197:66;2194:1;2187:77;2296:66;2292:2;2285:78;2395:66;2391:2;2384:78;2494:1;2490:2;2483:13;2527:3;2524:1;2517:14;2058:2;3123;3119:1;3106:15;3102:24;3089:38;3419:66;3416:1;3409:77;3724:2;3720;3717:1;3704:23;4229:2;4166:1;4111:3;4046:1;3988;3918:5;3863:3;3837:459;5039:1;5035;5029:8;5026:15;4997:2;4981:14;4978:22;4949:114;4912:14;4905:22;4881:200;4872:7;4868:214;4857:225;;5102:7;5099:2;;;5132:12;5099:2;5264:66;5261:1;5254:77;5359:66;5355:2;5348:78;5454:66;5450:2;5443:78;5549:1;5545:2;5538:13;5578:3;5575:1;5568:14;1521:2;951:4655;685:5140;1146:320:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1146:320:1;;;;;;;;;1031:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1031:28:1;;;;;;;;;;;;;;;;;;;;;;;;1580:547;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1580:547:1;;;;;;;258:20:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;258:20:6;;;;2300:643:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2300:643:1;;;;;;;;;5710:113:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5710:113:0;;;;;;;;;;;;;;;;;;;;;;;982:43:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;982:43:1;;;;;;;;;;;;;;;;;;;;;;;;;3040:138;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3040:138:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;3040:138:1;;;;;;;;;;;;;;;;;500:167:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;500:167:6;;;;;;;1146:320:1;426:5:6;;;;412:10;:19;391:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1263:18:1;;;;;;;:10;:18;;;;;;;;1262:19;1241:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1343:18;;;;;;;1364:4;1343:18;;;;;;;;:25;;;;;;;;1378:11;27:10:-1;;23:18;;;45:23;;1378:24:1;;;;;;;;;;;;;;1417:42;1448:10;;1343:18;1417:42;;;1146:320;:::o;1031:28::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1031:28:1;:::o;1580:547::-;1815:9;426:5:6;;;;412:10;:19;391:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1699:18:1;;;;;;;:10;:18;;;;;;;;1678:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1782:18:1;;;;;;;:10;:18;;;;;1775:25;;;;;;1810:252;1834:11;:18;1830:22;;1810:252;;;1895:6;1877:24;;:11;1889:1;1877:14;;;;;;;;;;;;;;;;;;;;;;:24;1873:179;;;1938:11;1950:18;;:22;;;;1938:35;;;;;;;;;;;;;;;;1921:11;:14;;1938:35;;;;;1933:1;;1921:14;;;;;;;;;;;;;;;:52;;;;;;;;;;;;;;;1991:11;:23;;;;;;;;;:::i;:::-;;2032:5;;1873:179;1854:3;;1810:252;;;2076:44;;2109:10;;2076:44;;;;;;;;;1580:547;;:::o;258:20:6:-;;;;;;:::o;2300:643:1:-;426:5:6;;;;412:10;:19;391:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2463:18:1;;;;;;;:10;:18;;;;;;;;2442:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2567:11;:18;2559:26;;2538:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2683:6;2661:28;;:11;2673:5;2661:18;;;;;;;;;;;;;;;;;;;;;;:28;2640:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2760:18;;;;;;;:10;:18;;;;;2753:25;;;;;;2809:11;2821:18;;:22;;;;2809:35;;;;;;;;;;;;;;;;2788:11;:18;;2809:35;;;;;2800:5;;2788:18;;;;;;;;;;;;;;;:56;;;;;;;;;;;;;;;2854:11;:23;;;;;;;;;:::i;:::-;-1:-1:-1;2892:44:1;;2925:10;;2892:44;;;;;;;;;2300:643;;:::o;5710:113:0:-;804:32;;;;;;;;;;;;;;;;5710:113;;:::o;982:43:1:-;;;;;;;;;;;;;;;:::o;3040:138::-;3121:9;3160:11;3153:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3040:138;:::o;500:167:6:-;426:5;;;;412:10;:19;391:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;596:22;;;;592:69;;634:5;:16;;;;;;;;;;592:69;500:167;:::o;685:5140:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;"
}
}
},
"sources": {
- "current/protocol/AssetProxy/ERC20Proxy.sol": {
+ "2.0.0/protocol/AssetProxy/ERC20Proxy.sol": {
"id": 0
},
- "current/protocol/AssetProxy/MixinAuthorizable.sol": {
+ "2.0.0/protocol/AssetProxy/MixinAuthorizable.sol": {
"id": 1
},
- "current/protocol/AssetProxy/interfaces/IAuthorizable.sol": {
+ "2.0.0/protocol/AssetProxy/interfaces/IAuthorizable.sol": {
"id": 2
},
- "current/protocol/AssetProxy/mixins/MAuthorizable.sol": {
+ "2.0.0/protocol/AssetProxy/mixins/MAuthorizable.sol": {
"id": 3
},
- "current/utils/LibBytes/LibBytes.sol": {
+ "2.0.0/utils/LibBytes/LibBytes.sol": {
"id": 4
},
- "current/utils/Ownable/IOwnable.sol": {
+ "2.0.0/utils/Ownable/IOwnable.sol": {
"id": 5
},
- "current/utils/Ownable/Ownable.sol": {
+ "2.0.0/utils/Ownable/Ownable.sol": {
"id": 6
}
},
"sourceCodes": {
- "current/protocol/AssetProxy/ERC20Proxy.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../../utils/LibBytes/LibBytes.sol\";\nimport \"./MixinAuthorizable.sol\";\n\ncontract ERC20Proxy is\n MixinAuthorizable\n{\n // Id of this proxy.\n bytes4 constant PROXY_ID = bytes4(keccak256(\"ERC20Token(address)\"));\n \n function () \n external\n {\n assembly {\n // The first 4 bytes of calldata holds the function selector\n let selector := and(calldataload(0), 0xffffffff00000000000000000000000000000000000000000000000000000000)\n\n // `transferFrom` will be called with the following parameters:\n // assetData Encoded byte array.\n // from Address to transfer asset from.\n // to Address to transfer asset to.\n // amount Amount of asset to transfer.\n // bytes4(keccak256(\"transferFrom(bytes,address,address,uint256)\")) = 0xa85e59e4\n if eq(selector, 0xa85e59e400000000000000000000000000000000000000000000000000000000) {\n\n // To lookup a value in a mapping, we load from the storage location keccak256(k, p),\n // where k is the key left padded to 32 bytes and p is the storage slot\n let start := mload(64)\n mstore(start, and(caller, 0xffffffffffffffffffffffffffffffffffffffff))\n mstore(add(start, 32), authorized_slot)\n\n // Revert if authorized[msg.sender] == false\n if iszero(sload(keccak256(start, 64))) {\n // Revert with `Error(\"SENDER_NOT_AUTHORIZED\")`\n mstore(0, 0x08c379a000000000000000000000000000000000000000000000000000000000)\n mstore(32, 0x0000002000000000000000000000000000000000000000000000000000000000)\n mstore(64, 0x0000001553454e4445525f4e4f545f415554484f52495a454400000000000000)\n mstore(96, 0)\n revert(0, 100)\n }\n \n /////// Token contract address ///////\n // The token address is found as follows:\n // * It is stored at offset 4 in `assetData` contents.\n // * This is stored at offset 32 from `assetData`.\n // * The offset to `assetData` from Params is stored at offset\n // 4 in calldata.\n // * The offset of Params in calldata is 4.\n // So we read location 4 and add 32 + 4 + 4 to it.\n let token := calldataload(add(calldataload(4), 40))\n \n /////// Setup Header Area ///////\n // This area holds the 4-byte `transferFrom` selector.\n // Any trailing data in transferFromSelector will be\n // overwritten in the next `mstore` call.\n mstore(0, 0x23b872dd00000000000000000000000000000000000000000000000000000000)\n \n /////// Setup Params Area ///////\n // We copy the fields `from`, `to` and `amount` in bulk\n // from our own calldata to the new calldata.\n calldatacopy(4, 36, 96)\n\n /////// Call `token.transferFrom` using the calldata ///////\n let success := call(\n gas, // forward all gas\n token, // call address of token contract\n 0, // don't send any ETH\n 0, // pointer to start of input\n 100, // length of input\n 0, // write output over input\n 32 // output size should be 32 bytes\n )\n\n /////// Check return data. ///////\n // If there is no return data, we assume the token incorrectly\n // does not return a bool. In this case we expect it to revert\n // on failure, which was handled above.\n // If the token does return data, we require that it is a single\n // nonzero 32 bytes value.\n // So the transfer succeeded if the call succeeded and either\n // returned nothing, or returned a non-zero 32 byte value. \n success := and(success, or(\n iszero(returndatasize),\n and(\n eq(returndatasize, 32),\n gt(mload(0), 0)\n )\n ))\n if success {\n return(0, 0)\n }\n \n // Revert with `Error(\"TRANSFER_FAILED\")`\n mstore(0, 0x08c379a000000000000000000000000000000000000000000000000000000000)\n mstore(32, 0x0000002000000000000000000000000000000000000000000000000000000000)\n mstore(64, 0x0000000f5452414e534645525f4641494c454400000000000000000000000000)\n mstore(96, 0)\n revert(0, 100)\n }\n }\n }\n\n /// @dev Gets the proxy id associated with the proxy address.\n /// @return Proxy id.\n function getProxyId()\n external\n pure\n returns (bytes4)\n {\n return PROXY_ID;\n }\n}\n",
- "current/protocol/AssetProxy/MixinAuthorizable.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../../utils/Ownable/Ownable.sol\";\nimport \"./mixins/MAuthorizable.sol\";\n\ncontract MixinAuthorizable is\n Ownable,\n MAuthorizable\n{\n\n /// @dev Only authorized addresses can invoke functions with this modifier.\n modifier onlyAuthorized {\n require(\n authorized[msg.sender],\n \"SENDER_NOT_AUTHORIZED\"\n );\n _;\n }\n\n mapping (address => bool) public authorized;\n address[] public authorities;\n\n /// @dev Authorizes an address.\n /// @param target Address to authorize.\n function addAuthorizedAddress(address target)\n external\n onlyOwner\n {\n require(\n !authorized[target],\n \"TARGET_ALREADY_AUTHORIZED\"\n );\n\n authorized[target] = true;\n authorities.push(target);\n emit AuthorizedAddressAdded(target, msg.sender);\n }\n\n /// @dev Removes authorizion of an address.\n /// @param target Address to remove authorization from.\n function removeAuthorizedAddress(address target)\n external\n onlyOwner\n {\n require(\n authorized[target],\n \"TARGET_NOT_AUTHORIZED\"\n );\n\n delete authorized[target];\n for (uint256 i = 0; i < authorities.length; i++) {\n if (authorities[i] == target) {\n authorities[i] = authorities[authorities.length - 1];\n authorities.length -= 1;\n break;\n }\n }\n emit AuthorizedAddressRemoved(target, msg.sender);\n }\n\n /// @dev Removes authorizion of an address.\n /// @param target Address to remove authorization from.\n /// @param index Index of target in authorities array.\n function removeAuthorizedAddressAtIndex(\n address target,\n uint256 index\n )\n external\n onlyOwner\n {\n require(\n authorized[target],\n \"TARGET_NOT_AUTHORIZED\"\n );\n require(\n index < authorities.length,\n \"INDEX_OUT_OF_BOUNDS\"\n );\n require(\n authorities[index] == target,\n \"AUTHORIZED_ADDRESS_MISMATCH\"\n );\n\n delete authorized[target];\n authorities[index] = authorities[authorities.length - 1];\n authorities.length -= 1;\n emit AuthorizedAddressRemoved(target, msg.sender);\n }\n\n /// @dev Gets all authorized addresses.\n /// @return Array of authorized addresses.\n function getAuthorizedAddresses()\n external\n view\n returns (address[] memory)\n {\n return authorities;\n }\n}\n",
- "current/protocol/AssetProxy/interfaces/IAuthorizable.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../../../utils/Ownable/IOwnable.sol\";\n\ncontract IAuthorizable is\n IOwnable\n{\n\n /// @dev Gets all authorized addresses.\n /// @return Array of authorized addresses.\n function getAuthorizedAddresses()\n external\n view\n returns (address[]);\n\n /// @dev Authorizes an address.\n /// @param target Address to authorize.\n function addAuthorizedAddress(address target)\n external;\n\n /// @dev Removes authorizion of an address.\n /// @param target Address to remove authorization from.\n function removeAuthorizedAddress(address target)\n external;\n\n /// @dev Removes authorizion of an address.\n /// @param target Address to remove authorization from.\n /// @param index Index of target in authorities array.\n function removeAuthorizedAddressAtIndex(\n address target,\n uint256 index\n )\n external;\n}\n",
- "current/protocol/AssetProxy/mixins/MAuthorizable.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../interfaces/IAuthorizable.sol\";\n\ncontract MAuthorizable is\n IAuthorizable\n{\n\n // Event logged when a new address is authorized.\n event AuthorizedAddressAdded(\n address indexed target,\n address indexed caller\n );\n\n // Event logged when a currently authorized address is unauthorized.\n event AuthorizedAddressRemoved(\n address indexed target,\n address indexed caller\n );\n\n /// @dev Only authorized addresses can invoke functions with this modifier.\n modifier onlyAuthorized { revert(); _; }\n}\n",
- "current/utils/LibBytes/LibBytes.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.24;\n\nlibrary LibBytes {\n\n using LibBytes for bytes;\n\n /// @dev Gets the memory address for a byte array.\n /// @param input Byte array to lookup.\n /// @return memoryAddress Memory address of byte array. This\n /// points to the header of the byte array which contains\n /// the length.\n function rawAddress(bytes memory input)\n internal\n pure\n returns (uint256 memoryAddress)\n {\n assembly {\n memoryAddress := input\n }\n return memoryAddress;\n }\n \n /// @dev Gets the memory address for the contents of a byte array.\n /// @param input Byte array to lookup.\n /// @return memoryAddress Memory address of the contents of the byte array.\n function contentAddress(bytes memory input)\n internal\n pure\n returns (uint256 memoryAddress)\n {\n assembly {\n memoryAddress := add(input, 32)\n }\n return memoryAddress;\n }\n\n /// @dev Copies `length` bytes from memory location `source` to `dest`.\n /// @param dest memory address to copy bytes to.\n /// @param source memory address to copy bytes from.\n /// @param length number of bytes to copy.\n function memCopy(\n uint256 dest,\n uint256 source,\n uint256 length\n )\n internal\n pure\n {\n if (length < 32) {\n // Handle a partial word by reading destination and masking\n // off the bits we are interested in.\n // This correctly handles overlap, zero lengths and source == dest\n assembly {\n let mask := sub(exp(256, sub(32, length)), 1)\n let s := and(mload(source), not(mask))\n let d := and(mload(dest), mask)\n mstore(dest, or(s, d))\n }\n } else {\n // Skip the O(length) loop when source == dest.\n if (source == dest) {\n return;\n }\n\n // For large copies we copy whole words at a time. The final\n // word is aligned to the end of the range (instead of after the\n // previous) to handle partial words. So a copy will look like this:\n //\n // ####\n // ####\n // ####\n // ####\n //\n // We handle overlap in the source and destination range by\n // changing the copying direction. This prevents us from\n // overwriting parts of source that we still need to copy.\n //\n // This correctly handles source == dest\n //\n if (source > dest) {\n assembly {\n // We subtract 32 from `sEnd` and `dEnd` because it\n // is easier to compare with in the loop, and these\n // are also the addresses we need for copying the\n // last bytes.\n length := sub(length, 32)\n let sEnd := add(source, length)\n let dEnd := add(dest, length)\n\n // Remember the last 32 bytes of source\n // This needs to be done here and not after the loop\n // because we may have overwritten the last bytes in\n // source already due to overlap.\n let last := mload(sEnd)\n\n // Copy whole words front to back\n // Note: the first check is always true,\n // this could have been a do-while loop.\n for {} lt(source, sEnd) {} {\n mstore(dest, mload(source))\n source := add(source, 32)\n dest := add(dest, 32)\n }\n \n // Write the last 32 bytes\n mstore(dEnd, last)\n }\n } else {\n assembly {\n // We subtract 32 from `sEnd` and `dEnd` because those\n // are the starting points when copying a word at the end.\n length := sub(length, 32)\n let sEnd := add(source, length)\n let dEnd := add(dest, length)\n\n // Remember the first 32 bytes of source\n // This needs to be done here and not after the loop\n // because we may have overwritten the first bytes in\n // source already due to overlap.\n let first := mload(source)\n\n // Copy whole words back to front\n // We use a signed comparisson here to allow dEnd to become\n // negative (happens when source and dest < 32). Valid\n // addresses in local memory will never be larger than\n // 2**255, so they can be safely re-interpreted as signed.\n // Note: the first check is always true,\n // this could have been a do-while loop.\n for {} slt(dest, dEnd) {} {\n mstore(dEnd, mload(sEnd))\n sEnd := sub(sEnd, 32)\n dEnd := sub(dEnd, 32)\n }\n \n // Write the first 32 bytes\n mstore(dest, first)\n }\n }\n }\n }\n \n /// @dev Returns a slices from a byte array.\n /// @param b The byte array to take a slice from.\n /// @param from The starting index for the slice (inclusive).\n /// @param to The final index for the slice (exclusive).\n /// @return result The slice containing bytes at indices [from, to)\n function slice(bytes memory b, uint256 from, uint256 to)\n internal\n pure\n returns (bytes memory result)\n {\n require(\n from <= to,\n \"FROM_LESS_THAN_TO_REQUIRED\"\n );\n require(\n to < b.length,\n \"TO_LESS_THAN_LENGTH_REQUIRED\"\n );\n \n // Create a new bytes structure and copy contents\n result = new bytes(to - from);\n memCopy(\n result.contentAddress(),\n b.contentAddress() + from,\n result.length);\n return result;\n }\n \n /// @dev Returns a slice from a byte array without preserving the input.\n /// @param b The byte array to take a slice from. Will be destroyed in the process.\n /// @param from The starting index for the slice (inclusive).\n /// @param to The final index for the slice (exclusive).\n /// @return result The slice containing bytes at indices [from, to)\n /// @dev When `from == 0`, the original array will match the slice. In other cases its state will be corrupted.\n function sliceDestructive(bytes memory b, uint256 from, uint256 to)\n internal\n pure\n returns (bytes memory result)\n {\n require(\n from <= to,\n \"FROM_LESS_THAN_TO_REQUIRED\"\n );\n require(\n to < b.length,\n \"TO_LESS_THAN_LENGTH_REQUIRED\"\n );\n \n // Create a new bytes structure around [from, to) in-place.\n assembly {\n result := add(b, from)\n mstore(result, sub(to, from))\n }\n return result;\n }\n\n /// @dev Pops the last byte off of a byte array by modifying its length.\n /// @param b Byte array that will be modified.\n /// @return The byte that was popped off.\n function popLastByte(bytes memory b)\n internal\n pure\n returns (bytes1 result)\n {\n require(\n b.length > 0,\n \"GREATER_THAN_ZERO_LENGTH_REQUIRED\"\n );\n\n // Store last byte.\n result = b[b.length - 1];\n\n assembly {\n // Decrement length of byte array.\n let newLen := sub(mload(b), 1)\n mstore(b, newLen)\n }\n return result;\n }\n\n /// @dev Pops the last 20 bytes off of a byte array by modifying its length.\n /// @param b Byte array that will be modified.\n /// @return The 20 byte address that was popped off.\n function popLast20Bytes(bytes memory b)\n internal\n pure\n returns (address result)\n {\n require(\n b.length >= 20,\n \"GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\"\n );\n\n // Store last 20 bytes.\n result = readAddress(b, b.length - 20);\n\n assembly {\n // Subtract 20 from byte array length.\n let newLen := sub(mload(b), 20)\n mstore(b, newLen)\n }\n return result;\n }\n\n /// @dev Tests equality of two byte arrays.\n /// @param lhs First byte array to compare.\n /// @param rhs Second byte array to compare.\n /// @return True if arrays are the same. False otherwise.\n function equals(\n bytes memory lhs,\n bytes memory rhs\n )\n internal\n pure\n returns (bool equal)\n {\n // Keccak gas cost is 30 + numWords * 6. This is a cheap way to compare.\n // We early exit on unequal lengths, but keccak would also correctly\n // handle this.\n return lhs.length == rhs.length && keccak256(lhs) == keccak256(rhs);\n }\n\n /// @dev Reads an address from a position in a byte array.\n /// @param b Byte array containing an address.\n /// @param index Index in byte array of address.\n /// @return address from byte array.\n function readAddress(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (address result)\n {\n require(\n b.length >= index + 20, // 20 is length of address\n \"GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\"\n );\n\n // Add offset to index:\n // 1. Arrays are prefixed by 32-byte length parameter (add 32 to index)\n // 2. Account for size difference between address length and 32-byte storage word (subtract 12 from index)\n index += 20;\n\n // Read address from array memory\n assembly {\n // 1. Add index to address of bytes array\n // 2. Load 32-byte word from memory\n // 3. Apply 20-byte mask to obtain address\n result := and(mload(add(b, index)), 0xffffffffffffffffffffffffffffffffffffffff)\n }\n return result;\n }\n\n /// @dev Writes an address into a specific position in a byte array.\n /// @param b Byte array to insert address into.\n /// @param index Index in byte array of address.\n /// @param input Address to put into byte array.\n function writeAddress(\n bytes memory b,\n uint256 index,\n address input\n )\n internal\n pure\n {\n require(\n b.length >= index + 20, // 20 is length of address\n \"GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\"\n );\n\n // Add offset to index:\n // 1. Arrays are prefixed by 32-byte length parameter (add 32 to index)\n // 2. Account for size difference between address length and 32-byte storage word (subtract 12 from index)\n index += 20;\n\n // Store address into array memory\n assembly {\n // The address occupies 20 bytes and mstore stores 32 bytes.\n // First fetch the 32-byte word where we'll be storing the address, then\n // apply a mask so we have only the bytes in the word that the address will not occupy.\n // Then combine these bytes with the address and store the 32 bytes back to memory with mstore.\n\n // 1. Add index to address of bytes array\n // 2. Load 32-byte word from memory\n // 3. Apply 12-byte mask to obtain extra bytes occupying word of memory where we'll store the address\n let neighbors := and(mload(add(b, index)), 0xffffffffffffffffffffffff0000000000000000000000000000000000000000)\n \n // Make sure input address is clean.\n // (Solidity does not guarantee this)\n input := and(input, 0xffffffffffffffffffffffffffffffffffffffff)\n\n // Store the neighbors and address into memory\n mstore(add(b, index), xor(input, neighbors))\n }\n }\n\n /// @dev Reads a bytes32 value from a position in a byte array.\n /// @param b Byte array containing a bytes32 value.\n /// @param index Index in byte array of bytes32 value.\n /// @return bytes32 value from byte array.\n function readBytes32(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (bytes32 result)\n {\n require(\n b.length >= index + 32,\n \"GREATER_OR_EQUAL_TO_32_LENGTH_REQUIRED\"\n );\n\n // Arrays are prefixed by a 256 bit length parameter\n index += 32;\n\n // Read the bytes32 from array memory\n assembly {\n result := mload(add(b, index))\n }\n return result;\n }\n\n /// @dev Writes a bytes32 into a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input bytes32 to put into byte array.\n function writeBytes32(\n bytes memory b,\n uint256 index,\n bytes32 input\n )\n internal\n pure\n {\n require(\n b.length >= index + 32,\n \"GREATER_OR_EQUAL_TO_32_LENGTH_REQUIRED\"\n );\n\n // Arrays are prefixed by a 256 bit length parameter\n index += 32;\n\n // Read the bytes32 from array memory\n assembly {\n mstore(add(b, index), input)\n }\n }\n\n /// @dev Reads a uint256 value from a position in a byte array.\n /// @param b Byte array containing a uint256 value.\n /// @param index Index in byte array of uint256 value.\n /// @return uint256 value from byte array.\n function readUint256(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (uint256 result)\n {\n return uint256(readBytes32(b, index));\n }\n\n /// @dev Writes a uint256 into a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input uint256 to put into byte array.\n function writeUint256(\n bytes memory b,\n uint256 index,\n uint256 input\n )\n internal\n pure\n {\n writeBytes32(b, index, bytes32(input));\n }\n\n /// @dev Reads an unpadded bytes4 value from a position in a byte array.\n /// @param b Byte array containing a bytes4 value.\n /// @param index Index in byte array of bytes4 value.\n /// @return bytes4 value from byte array.\n function readBytes4(\n bytes memory b,\n uint256 index)\n internal\n pure\n returns (bytes4 result)\n {\n require(\n b.length >= index + 4,\n \"GREATER_OR_EQUAL_TO_4_LENGTH_REQUIRED\"\n );\n assembly {\n result := mload(add(b, 32))\n // Solidity does not require us to clean the trailing bytes.\n // We do it anyway\n result := and(result, 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000)\n }\n return result;\n }\n\n /// @dev Reads nested bytes from a specific position.\n /// @dev NOTE: the returned value overlaps with the input value.\n /// Both should be treated as immutable.\n /// @param b Byte array containing nested bytes.\n /// @param index Index of nested bytes.\n /// @return result Nested bytes.\n function readBytesWithLength(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (bytes memory result)\n {\n // Read length of nested bytes\n uint256 nestedBytesLength = readUint256(b, index);\n index += 32;\n\n // Assert length of <b> is valid, given\n // length of nested bytes\n require(\n b.length >= index + nestedBytesLength,\n \"GREATER_OR_EQUAL_TO_NESTED_BYTES_LENGTH_REQUIRED\"\n );\n \n // Return a pointer to the byte array as it exists inside `b`\n assembly {\n result := add(b, index)\n }\n return result;\n }\n\n /// @dev Inserts bytes at a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input bytes to insert.\n function writeBytesWithLength(\n bytes memory b,\n uint256 index,\n bytes memory input\n )\n internal\n pure\n {\n // Assert length of <b> is valid, given\n // length of input\n require(\n b.length >= index + 32 /* 32 bytes to store length */ + input.length,\n \"GREATER_OR_EQUAL_TO_NESTED_BYTES_LENGTH_REQUIRED\"\n );\n\n // Copy <input> into <b>\n memCopy(\n b.contentAddress() + index,\n input.rawAddress(), // includes length of <input>\n input.length + 32 // +32 bytes to store <input> length\n );\n }\n\n /// @dev Performs a deep copy of a byte array onto another byte array of greater than or equal length.\n /// @param dest Byte array that will be overwritten with source bytes.\n /// @param source Byte array to copy onto dest bytes.\n function deepCopyBytes(\n bytes memory dest,\n bytes memory source\n )\n internal\n pure\n {\n uint256 sourceLen = source.length;\n // Dest length must be >= source length, or some bytes would not be copied.\n require(\n dest.length >= sourceLen,\n \"GREATER_OR_EQUAL_TO_SOURCE_BYTES_LENGTH_REQUIRED\"\n );\n memCopy(\n dest.contentAddress(),\n source.contentAddress(),\n sourceLen\n );\n }\n}\n",
- "current/utils/Ownable/IOwnable.sol": "pragma solidity ^0.4.24;\npragma experimental ABIEncoderV2;\n\n/*\n * Ownable\n *\n * Base contract with an owner.\n * Provides onlyOwner modifier, which prevents function from running if it is called by anyone other than the owner.\n */\n\ncontract IOwnable {\n function transferOwnership(address newOwner)\n public;\n}\n",
- "current/utils/Ownable/Ownable.sol": "pragma solidity ^0.4.24;\npragma experimental ABIEncoderV2;\n\n/*\n * Ownable\n *\n * Base contract with an owner.\n * Provides onlyOwner modifier, which prevents function from running if it is called by anyone other than the owner.\n */\n\nimport \"./IOwnable.sol\";\n\ncontract Ownable is IOwnable {\n address public owner;\n\n constructor ()\n public\n {\n owner = msg.sender;\n }\n\n modifier onlyOwner() {\n require(\n msg.sender == owner,\n \"ONLY_CONTRACT_OWNER\"\n );\n _;\n }\n\n function transferOwnership(address newOwner)\n public\n onlyOwner\n {\n if (newOwner != address(0)) {\n owner = newOwner;\n }\n }\n}\n"
+ "2.0.0/protocol/AssetProxy/ERC20Proxy.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.24;\n\nimport \"../../utils/LibBytes/LibBytes.sol\";\nimport \"./MixinAuthorizable.sol\";\n\n\ncontract ERC20Proxy is\n MixinAuthorizable\n{\n // Id of this proxy.\n bytes4 constant internal PROXY_ID = bytes4(keccak256(\"ERC20Token(address)\"));\n \n // solhint-disable-next-line payable-fallback\n function () \n external\n {\n assembly {\n // The first 4 bytes of calldata holds the function selector\n let selector := and(calldataload(0), 0xffffffff00000000000000000000000000000000000000000000000000000000)\n\n // `transferFrom` will be called with the following parameters:\n // assetData Encoded byte array.\n // from Address to transfer asset from.\n // to Address to transfer asset to.\n // amount Amount of asset to transfer.\n // bytes4(keccak256(\"transferFrom(bytes,address,address,uint256)\")) = 0xa85e59e4\n if eq(selector, 0xa85e59e400000000000000000000000000000000000000000000000000000000) {\n\n // To lookup a value in a mapping, we load from the storage location keccak256(k, p),\n // where k is the key left padded to 32 bytes and p is the storage slot\n let start := mload(64)\n mstore(start, and(caller, 0xffffffffffffffffffffffffffffffffffffffff))\n mstore(add(start, 32), authorized_slot)\n\n // Revert if authorized[msg.sender] == false\n if iszero(sload(keccak256(start, 64))) {\n // Revert with `Error(\"SENDER_NOT_AUTHORIZED\")`\n mstore(0, 0x08c379a000000000000000000000000000000000000000000000000000000000)\n mstore(32, 0x0000002000000000000000000000000000000000000000000000000000000000)\n mstore(64, 0x0000001553454e4445525f4e4f545f415554484f52495a454400000000000000)\n mstore(96, 0)\n revert(0, 100)\n }\n \n /////// Token contract address ///////\n // The token address is found as follows:\n // * It is stored at offset 4 in `assetData` contents.\n // * This is stored at offset 32 from `assetData`.\n // * The offset to `assetData` from Params is stored at offset\n // 4 in calldata.\n // * The offset of Params in calldata is 4.\n // So we read location 4 and add 32 + 4 + 4 to it.\n let token := calldataload(add(calldataload(4), 40))\n \n /////// Setup Header Area ///////\n // This area holds the 4-byte `transferFrom` selector.\n // Any trailing data in transferFromSelector will be\n // overwritten in the next `mstore` call.\n mstore(0, 0x23b872dd00000000000000000000000000000000000000000000000000000000)\n \n /////// Setup Params Area ///////\n // We copy the fields `from`, `to` and `amount` in bulk\n // from our own calldata to the new calldata.\n calldatacopy(4, 36, 96)\n\n /////// Call `token.transferFrom` using the calldata ///////\n let success := call(\n gas, // forward all gas\n token, // call address of token contract\n 0, // don't send any ETH\n 0, // pointer to start of input\n 100, // length of input\n 0, // write output over input\n 32 // output size should be 32 bytes\n )\n\n /////// Check return data. ///////\n // If there is no return data, we assume the token incorrectly\n // does not return a bool. In this case we expect it to revert\n // on failure, which was handled above.\n // If the token does return data, we require that it is a single\n // nonzero 32 bytes value.\n // So the transfer succeeded if the call succeeded and either\n // returned nothing, or returned a non-zero 32 byte value. \n success := and(success, or(\n iszero(returndatasize),\n and(\n eq(returndatasize, 32),\n gt(mload(0), 0)\n )\n ))\n if success {\n return(0, 0)\n }\n \n // Revert with `Error(\"TRANSFER_FAILED\")`\n mstore(0, 0x08c379a000000000000000000000000000000000000000000000000000000000)\n mstore(32, 0x0000002000000000000000000000000000000000000000000000000000000000)\n mstore(64, 0x0000000f5452414e534645525f4641494c454400000000000000000000000000)\n mstore(96, 0)\n revert(0, 100)\n }\n }\n }\n\n /// @dev Gets the proxy id associated with the proxy address.\n /// @return Proxy id.\n function getProxyId()\n external\n pure\n returns (bytes4)\n {\n return PROXY_ID;\n }\n}\n",
+ "2.0.0/protocol/AssetProxy/MixinAuthorizable.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.24;\n\nimport \"../../utils/Ownable/Ownable.sol\";\nimport \"./mixins/MAuthorizable.sol\";\n\n\ncontract MixinAuthorizable is\n Ownable,\n MAuthorizable\n{\n\n /// @dev Only authorized addresses can invoke functions with this modifier.\n modifier onlyAuthorized {\n require(\n authorized[msg.sender],\n \"SENDER_NOT_AUTHORIZED\"\n );\n _;\n }\n\n mapping (address => bool) public authorized;\n address[] public authorities;\n\n /// @dev Authorizes an address.\n /// @param target Address to authorize.\n function addAuthorizedAddress(address target)\n external\n onlyOwner\n {\n require(\n !authorized[target],\n \"TARGET_ALREADY_AUTHORIZED\"\n );\n\n authorized[target] = true;\n authorities.push(target);\n emit AuthorizedAddressAdded(target, msg.sender);\n }\n\n /// @dev Removes authorizion of an address.\n /// @param target Address to remove authorization from.\n function removeAuthorizedAddress(address target)\n external\n onlyOwner\n {\n require(\n authorized[target],\n \"TARGET_NOT_AUTHORIZED\"\n );\n\n delete authorized[target];\n for (uint256 i = 0; i < authorities.length; i++) {\n if (authorities[i] == target) {\n authorities[i] = authorities[authorities.length - 1];\n authorities.length -= 1;\n break;\n }\n }\n emit AuthorizedAddressRemoved(target, msg.sender);\n }\n\n /// @dev Removes authorizion of an address.\n /// @param target Address to remove authorization from.\n /// @param index Index of target in authorities array.\n function removeAuthorizedAddressAtIndex(\n address target,\n uint256 index\n )\n external\n onlyOwner\n {\n require(\n authorized[target],\n \"TARGET_NOT_AUTHORIZED\"\n );\n require(\n index < authorities.length,\n \"INDEX_OUT_OF_BOUNDS\"\n );\n require(\n authorities[index] == target,\n \"AUTHORIZED_ADDRESS_MISMATCH\"\n );\n\n delete authorized[target];\n authorities[index] = authorities[authorities.length - 1];\n authorities.length -= 1;\n emit AuthorizedAddressRemoved(target, msg.sender);\n }\n\n /// @dev Gets all authorized addresses.\n /// @return Array of authorized addresses.\n function getAuthorizedAddresses()\n external\n view\n returns (address[] memory)\n {\n return authorities;\n }\n}\n",
+ "2.0.0/protocol/AssetProxy/interfaces/IAuthorizable.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.24;\n\nimport \"../../../utils/Ownable/IOwnable.sol\";\n\n\ncontract IAuthorizable is\n IOwnable\n{\n\n /// @dev Authorizes an address.\n /// @param target Address to authorize.\n function addAuthorizedAddress(address target)\n external;\n\n /// @dev Removes authorizion of an address.\n /// @param target Address to remove authorization from.\n function removeAuthorizedAddress(address target)\n external;\n\n /// @dev Removes authorizion of an address.\n /// @param target Address to remove authorization from.\n /// @param index Index of target in authorities array.\n function removeAuthorizedAddressAtIndex(\n address target,\n uint256 index\n )\n external;\n \n /// @dev Gets all authorized addresses.\n /// @return Array of authorized addresses.\n function getAuthorizedAddresses()\n external\n view\n returns (address[] memory);\n}\n",
+ "2.0.0/protocol/AssetProxy/mixins/MAuthorizable.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.24;\n\nimport \"../interfaces/IAuthorizable.sol\";\n\n\ncontract MAuthorizable is\n IAuthorizable\n{\n\n // Event logged when a new address is authorized.\n event AuthorizedAddressAdded(\n address indexed target,\n address indexed caller\n );\n\n // Event logged when a currently authorized address is unauthorized.\n event AuthorizedAddressRemoved(\n address indexed target,\n address indexed caller\n );\n\n /// @dev Only authorized addresses can invoke functions with this modifier.\n modifier onlyAuthorized { revert(); _; }\n}\n",
+ "2.0.0/utils/LibBytes/LibBytes.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.24;\n\n\nlibrary LibBytes {\n\n using LibBytes for bytes;\n\n /// @dev Gets the memory address for a byte array.\n /// @param input Byte array to lookup.\n /// @return memoryAddress Memory address of byte array. This\n /// points to the header of the byte array which contains\n /// the length.\n function rawAddress(bytes memory input)\n internal\n pure\n returns (uint256 memoryAddress)\n {\n assembly {\n memoryAddress := input\n }\n return memoryAddress;\n }\n \n /// @dev Gets the memory address for the contents of a byte array.\n /// @param input Byte array to lookup.\n /// @return memoryAddress Memory address of the contents of the byte array.\n function contentAddress(bytes memory input)\n internal\n pure\n returns (uint256 memoryAddress)\n {\n assembly {\n memoryAddress := add(input, 32)\n }\n return memoryAddress;\n }\n\n /// @dev Copies `length` bytes from memory location `source` to `dest`.\n /// @param dest memory address to copy bytes to.\n /// @param source memory address to copy bytes from.\n /// @param length number of bytes to copy.\n function memCopy(\n uint256 dest,\n uint256 source,\n uint256 length\n )\n internal\n pure\n {\n if (length < 32) {\n // Handle a partial word by reading destination and masking\n // off the bits we are interested in.\n // This correctly handles overlap, zero lengths and source == dest\n assembly {\n let mask := sub(exp(256, sub(32, length)), 1)\n let s := and(mload(source), not(mask))\n let d := and(mload(dest), mask)\n mstore(dest, or(s, d))\n }\n } else {\n // Skip the O(length) loop when source == dest.\n if (source == dest) {\n return;\n }\n\n // For large copies we copy whole words at a time. The final\n // word is aligned to the end of the range (instead of after the\n // previous) to handle partial words. So a copy will look like this:\n //\n // ####\n // ####\n // ####\n // ####\n //\n // We handle overlap in the source and destination range by\n // changing the copying direction. This prevents us from\n // overwriting parts of source that we still need to copy.\n //\n // This correctly handles source == dest\n //\n if (source > dest) {\n assembly {\n // We subtract 32 from `sEnd` and `dEnd` because it\n // is easier to compare with in the loop, and these\n // are also the addresses we need for copying the\n // last bytes.\n length := sub(length, 32)\n let sEnd := add(source, length)\n let dEnd := add(dest, length)\n\n // Remember the last 32 bytes of source\n // This needs to be done here and not after the loop\n // because we may have overwritten the last bytes in\n // source already due to overlap.\n let last := mload(sEnd)\n\n // Copy whole words front to back\n // Note: the first check is always true,\n // this could have been a do-while loop.\n // solhint-disable-next-line no-empty-blocks\n for {} lt(source, sEnd) {} {\n mstore(dest, mload(source))\n source := add(source, 32)\n dest := add(dest, 32)\n }\n \n // Write the last 32 bytes\n mstore(dEnd, last)\n }\n } else {\n assembly {\n // We subtract 32 from `sEnd` and `dEnd` because those\n // are the starting points when copying a word at the end.\n length := sub(length, 32)\n let sEnd := add(source, length)\n let dEnd := add(dest, length)\n\n // Remember the first 32 bytes of source\n // This needs to be done here and not after the loop\n // because we may have overwritten the first bytes in\n // source already due to overlap.\n let first := mload(source)\n\n // Copy whole words back to front\n // We use a signed comparisson here to allow dEnd to become\n // negative (happens when source and dest < 32). Valid\n // addresses in local memory will never be larger than\n // 2**255, so they can be safely re-interpreted as signed.\n // Note: the first check is always true,\n // this could have been a do-while loop.\n // solhint-disable-next-line no-empty-blocks\n for {} slt(dest, dEnd) {} {\n mstore(dEnd, mload(sEnd))\n sEnd := sub(sEnd, 32)\n dEnd := sub(dEnd, 32)\n }\n \n // Write the first 32 bytes\n mstore(dest, first)\n }\n }\n }\n }\n\n /// @dev Returns a slices from a byte array.\n /// @param b The byte array to take a slice from.\n /// @param from The starting index for the slice (inclusive).\n /// @param to The final index for the slice (exclusive).\n /// @return result The slice containing bytes at indices [from, to)\n function slice(\n bytes memory b,\n uint256 from,\n uint256 to\n )\n internal\n pure\n returns (bytes memory result)\n {\n require(\n from <= to,\n \"FROM_LESS_THAN_TO_REQUIRED\"\n );\n require(\n to < b.length,\n \"TO_LESS_THAN_LENGTH_REQUIRED\"\n );\n \n // Create a new bytes structure and copy contents\n result = new bytes(to - from);\n memCopy(\n result.contentAddress(),\n b.contentAddress() + from,\n result.length);\n return result;\n }\n \n /// @dev Returns a slice from a byte array without preserving the input.\n /// @param b The byte array to take a slice from. Will be destroyed in the process.\n /// @param from The starting index for the slice (inclusive).\n /// @param to The final index for the slice (exclusive).\n /// @return result The slice containing bytes at indices [from, to)\n /// @dev When `from == 0`, the original array will match the slice. In other cases its state will be corrupted.\n function sliceDestructive(\n bytes memory b,\n uint256 from,\n uint256 to\n )\n internal\n pure\n returns (bytes memory result)\n {\n require(\n from <= to,\n \"FROM_LESS_THAN_TO_REQUIRED\"\n );\n require(\n to < b.length,\n \"TO_LESS_THAN_LENGTH_REQUIRED\"\n );\n \n // Create a new bytes structure around [from, to) in-place.\n assembly {\n result := add(b, from)\n mstore(result, sub(to, from))\n }\n return result;\n }\n\n /// @dev Pops the last byte off of a byte array by modifying its length.\n /// @param b Byte array that will be modified.\n /// @return The byte that was popped off.\n function popLastByte(bytes memory b)\n internal\n pure\n returns (bytes1 result)\n {\n require(\n b.length > 0,\n \"GREATER_THAN_ZERO_LENGTH_REQUIRED\"\n );\n\n // Store last byte.\n result = b[b.length - 1];\n\n assembly {\n // Decrement length of byte array.\n let newLen := sub(mload(b), 1)\n mstore(b, newLen)\n }\n return result;\n }\n\n /// @dev Pops the last 20 bytes off of a byte array by modifying its length.\n /// @param b Byte array that will be modified.\n /// @return The 20 byte address that was popped off.\n function popLast20Bytes(bytes memory b)\n internal\n pure\n returns (address result)\n {\n require(\n b.length >= 20,\n \"GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\"\n );\n\n // Store last 20 bytes.\n result = readAddress(b, b.length - 20);\n\n assembly {\n // Subtract 20 from byte array length.\n let newLen := sub(mload(b), 20)\n mstore(b, newLen)\n }\n return result;\n }\n\n /// @dev Tests equality of two byte arrays.\n /// @param lhs First byte array to compare.\n /// @param rhs Second byte array to compare.\n /// @return True if arrays are the same. False otherwise.\n function equals(\n bytes memory lhs,\n bytes memory rhs\n )\n internal\n pure\n returns (bool equal)\n {\n // Keccak gas cost is 30 + numWords * 6. This is a cheap way to compare.\n // We early exit on unequal lengths, but keccak would also correctly\n // handle this.\n return lhs.length == rhs.length && keccak256(lhs) == keccak256(rhs);\n }\n\n /// @dev Reads an address from a position in a byte array.\n /// @param b Byte array containing an address.\n /// @param index Index in byte array of address.\n /// @return address from byte array.\n function readAddress(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (address result)\n {\n require(\n b.length >= index + 20, // 20 is length of address\n \"GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\"\n );\n\n // Add offset to index:\n // 1. Arrays are prefixed by 32-byte length parameter (add 32 to index)\n // 2. Account for size difference between address length and 32-byte storage word (subtract 12 from index)\n index += 20;\n\n // Read address from array memory\n assembly {\n // 1. Add index to address of bytes array\n // 2. Load 32-byte word from memory\n // 3. Apply 20-byte mask to obtain address\n result := and(mload(add(b, index)), 0xffffffffffffffffffffffffffffffffffffffff)\n }\n return result;\n }\n\n /// @dev Writes an address into a specific position in a byte array.\n /// @param b Byte array to insert address into.\n /// @param index Index in byte array of address.\n /// @param input Address to put into byte array.\n function writeAddress(\n bytes memory b,\n uint256 index,\n address input\n )\n internal\n pure\n {\n require(\n b.length >= index + 20, // 20 is length of address\n \"GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\"\n );\n\n // Add offset to index:\n // 1. Arrays are prefixed by 32-byte length parameter (add 32 to index)\n // 2. Account for size difference between address length and 32-byte storage word (subtract 12 from index)\n index += 20;\n\n // Store address into array memory\n assembly {\n // The address occupies 20 bytes and mstore stores 32 bytes.\n // First fetch the 32-byte word where we'll be storing the address, then\n // apply a mask so we have only the bytes in the word that the address will not occupy.\n // Then combine these bytes with the address and store the 32 bytes back to memory with mstore.\n\n // 1. Add index to address of bytes array\n // 2. Load 32-byte word from memory\n // 3. Apply 12-byte mask to obtain extra bytes occupying word of memory where we'll store the address\n let neighbors := and(\n mload(add(b, index)),\n 0xffffffffffffffffffffffff0000000000000000000000000000000000000000\n )\n \n // Make sure input address is clean.\n // (Solidity does not guarantee this)\n input := and(input, 0xffffffffffffffffffffffffffffffffffffffff)\n\n // Store the neighbors and address into memory\n mstore(add(b, index), xor(input, neighbors))\n }\n }\n\n /// @dev Reads a bytes32 value from a position in a byte array.\n /// @param b Byte array containing a bytes32 value.\n /// @param index Index in byte array of bytes32 value.\n /// @return bytes32 value from byte array.\n function readBytes32(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (bytes32 result)\n {\n require(\n b.length >= index + 32,\n \"GREATER_OR_EQUAL_TO_32_LENGTH_REQUIRED\"\n );\n\n // Arrays are prefixed by a 256 bit length parameter\n index += 32;\n\n // Read the bytes32 from array memory\n assembly {\n result := mload(add(b, index))\n }\n return result;\n }\n\n /// @dev Writes a bytes32 into a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input bytes32 to put into byte array.\n function writeBytes32(\n bytes memory b,\n uint256 index,\n bytes32 input\n )\n internal\n pure\n {\n require(\n b.length >= index + 32,\n \"GREATER_OR_EQUAL_TO_32_LENGTH_REQUIRED\"\n );\n\n // Arrays are prefixed by a 256 bit length parameter\n index += 32;\n\n // Read the bytes32 from array memory\n assembly {\n mstore(add(b, index), input)\n }\n }\n\n /// @dev Reads a uint256 value from a position in a byte array.\n /// @param b Byte array containing a uint256 value.\n /// @param index Index in byte array of uint256 value.\n /// @return uint256 value from byte array.\n function readUint256(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (uint256 result)\n {\n return uint256(readBytes32(b, index));\n }\n\n /// @dev Writes a uint256 into a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input uint256 to put into byte array.\n function writeUint256(\n bytes memory b,\n uint256 index,\n uint256 input\n )\n internal\n pure\n {\n writeBytes32(b, index, bytes32(input));\n }\n\n /// @dev Reads an unpadded bytes4 value from a position in a byte array.\n /// @param b Byte array containing a bytes4 value.\n /// @param index Index in byte array of bytes4 value.\n /// @return bytes4 value from byte array.\n function readBytes4(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (bytes4 result)\n {\n require(\n b.length >= index + 4,\n \"GREATER_OR_EQUAL_TO_4_LENGTH_REQUIRED\"\n );\n assembly {\n result := mload(add(b, 32))\n // Solidity does not require us to clean the trailing bytes.\n // We do it anyway\n result := and(result, 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000)\n }\n return result;\n }\n\n /// @dev Reads nested bytes from a specific position.\n /// @dev NOTE: the returned value overlaps with the input value.\n /// Both should be treated as immutable.\n /// @param b Byte array containing nested bytes.\n /// @param index Index of nested bytes.\n /// @return result Nested bytes.\n function readBytesWithLength(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (bytes memory result)\n {\n // Read length of nested bytes\n uint256 nestedBytesLength = readUint256(b, index);\n index += 32;\n\n // Assert length of <b> is valid, given\n // length of nested bytes\n require(\n b.length >= index + nestedBytesLength,\n \"GREATER_OR_EQUAL_TO_NESTED_BYTES_LENGTH_REQUIRED\"\n );\n \n // Return a pointer to the byte array as it exists inside `b`\n assembly {\n result := add(b, index)\n }\n return result;\n }\n\n /// @dev Inserts bytes at a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input bytes to insert.\n function writeBytesWithLength(\n bytes memory b,\n uint256 index,\n bytes memory input\n )\n internal\n pure\n {\n // Assert length of <b> is valid, given\n // length of input\n require(\n b.length >= index + 32 + input.length, // 32 bytes to store length\n \"GREATER_OR_EQUAL_TO_NESTED_BYTES_LENGTH_REQUIRED\"\n );\n\n // Copy <input> into <b>\n memCopy(\n b.contentAddress() + index,\n input.rawAddress(), // includes length of <input>\n input.length + 32 // +32 bytes to store <input> length\n );\n }\n\n /// @dev Performs a deep copy of a byte array onto another byte array of greater than or equal length.\n /// @param dest Byte array that will be overwritten with source bytes.\n /// @param source Byte array to copy onto dest bytes.\n function deepCopyBytes(\n bytes memory dest,\n bytes memory source\n )\n internal\n pure\n {\n uint256 sourceLen = source.length;\n // Dest length must be >= source length, or some bytes would not be copied.\n require(\n dest.length >= sourceLen,\n \"GREATER_OR_EQUAL_TO_SOURCE_BYTES_LENGTH_REQUIRED\"\n );\n memCopy(\n dest.contentAddress(),\n source.contentAddress(),\n sourceLen\n );\n }\n}\n",
+ "2.0.0/utils/Ownable/IOwnable.sol": "pragma solidity 0.4.24;\n\n/*\n * Ownable\n *\n * Base contract with an owner.\n * Provides onlyOwner modifier, which prevents function from running if it is called by anyone other than the owner.\n */\n\ncontract IOwnable {\n function transferOwnership(address newOwner)\n public;\n}\n",
+ "2.0.0/utils/Ownable/Ownable.sol": "pragma solidity 0.4.24;\n\n/*\n * Ownable\n *\n * Base contract with an owner.\n * Provides onlyOwner modifier, which prevents function from running if it is called by anyone other than the owner.\n */\n\nimport \"./IOwnable.sol\";\n\n\ncontract Ownable is IOwnable {\n address public owner;\n\n constructor ()\n public\n {\n owner = msg.sender;\n }\n\n modifier onlyOwner() {\n require(\n msg.sender == owner,\n \"ONLY_CONTRACT_OWNER\"\n );\n _;\n }\n\n function transferOwnership(address newOwner)\n public\n onlyOwner\n {\n if (newOwner != address(0)) {\n owner = newOwner;\n }\n }\n}\n"
},
- "sourceTreeHashHex": "0x5169d3a1f88b27ccfc0121645ce925b5366db803184fcb3462f07a50a906de35",
+ "sourceTreeHashHex": "0xde9de8664ed39125c63cc0d58d264a030799b57b5ca904c5c69d1ddd8352ad77",
"compiler": {
"name": "solc",
"version": "soljson-v0.4.24+commit.e67f0147.js",
diff --git a/packages/migrations/artifacts/2.0.0/ERC20Token.json b/packages/migrations/artifacts/2.0.0/ERC20Token.json
index 858c7dc0d..837780e45 100644
--- a/packages/migrations/artifacts/2.0.0/ERC20Token.json
+++ b/packages/migrations/artifacts/2.0.0/ERC20Token.json
@@ -180,31 +180,31 @@
"evm": {
"bytecode": {
"linkReferences": {},
- "object": "0x608060405234801561001057600080fd5b506108aa806100206000396000f3006080604052600436106100775763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663095ea7b3811461007c57806318160ddd146100b257806323b872dd146100d457806370a08231146100f4578063a9059cbb14610114578063dd62ed3e14610134575b600080fd5b34801561008857600080fd5b5061009c610097366004610749565b610154565b6040516100a991906107c6565b60405180910390f35b3480156100be57600080fd5b506100c76101cc565b6040516100a991906107e5565b3480156100e057600080fd5b5061009c6100ef3660046106fc565b6101d2565b34801561010057600080fd5b506100c761010f36600461069c565b61046e565b34801561012057600080fd5b5061009c61012f366004610749565b610496565b34801561014057600080fd5b506100c761014f3660046106c2565b610645565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906101ba9086906107e5565b60405180910390a35060015b92915050565b60025481565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208181526040808320548151808301909252601a82527f45524332305f494e53554646494349454e545f42414c414e43450000000000009282019290925290831115610271576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026891906107d4565b60405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff84166000908152600160209081526040808320338452825291829020548251808401909352601c83527f45524332305f494e53554646494349454e545f414c4c4f57414e43450000000091830191909152831115610312576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026891906107d4565b5073ffffffffffffffffffffffffffffffffffffffff831660009081526020818152604091829020548251606081018452602581527f5472616e7366657220776f756c6420726573756c7420696e20616e206f766572928101929092527f666c6f772e000000000000000000000000000000000000000000000000000000928201929092529083810110156103d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026891906107d4565b5073ffffffffffffffffffffffffffffffffffffffff8084166000818152602081815260408083208054880190559388168083528483208054889003905560018252848320338452909152908390208054869003905591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061045c9086906107e5565b60405180910390a35060019392505050565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b33600090815260208181526040808320548151808301909252601a82527f45524332305f494e53554646494349454e545f42414c414e43450000000000009282019290925290831115610516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026891906107d4565b5073ffffffffffffffffffffffffffffffffffffffff831660009081526020818152604091829020548251606081018452602581527f5472616e7366657220776f756c6420726573756c7420696e20616e206f766572928101929092527f666c6f772e000000000000000000000000000000000000000000000000000000928201929092529083810110156105d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026891906107d4565b50336000818152602081905260408082208054869003905573ffffffffffffffffffffffffffffffffffffffff861680835291819020805486019055519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906101ba9086906107e5565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b600061068982356107ff565b9392505050565b600061068982356107fc565b6000602082840312156106ae57600080fd5b60006106ba848461067d565b949350505050565b600080604083850312156106d557600080fd5b60006106e1858561067d565b92505060206106f28582860161067d565b9150509250929050565b60008060006060848603121561071157600080fd5b600061071d868661067d565b935050602061072e8682870161067d565b925050604061073f86828701610690565b9150509250925092565b6000806040838503121561075c57600080fd5b6000610768858561067d565b92505060206106f285828601610690565b610782816107f7565b82525050565b6000610793826107f3565b8084526107a7816020860160208601610818565b6107b081610848565b9093016020019392505050565b610782816107fc565b602081016101c68284610779565b602080825281016106898184610788565b602081016101c682846107bd565b5190565b151590565b90565b73ffffffffffffffffffffffffffffffffffffffff1690565b60005b8381101561083357818101518382015260200161081b565b83811115610842576000848401525b50505050565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016905600a265627a7a72305820f6f770d9f6fbd388c5e5757ed24d436ce3757811b06fc2e0e47f7ff554d37d0c6c6578706572696d656e74616cf50037",
- "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x8AA DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x77 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x95EA7B3 DUP2 EQ PUSH2 0x7C JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0xB2 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0xD4 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0xF4 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x114 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x134 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x88 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x9C PUSH2 0x97 CALLDATASIZE PUSH1 0x4 PUSH2 0x749 JUMP JUMPDEST PUSH2 0x154 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xA9 SWAP2 SWAP1 PUSH2 0x7C6 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xBE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xC7 PUSH2 0x1CC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xA9 SWAP2 SWAP1 PUSH2 0x7E5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x9C PUSH2 0xEF CALLDATASIZE PUSH1 0x4 PUSH2 0x6FC JUMP JUMPDEST PUSH2 0x1D2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x100 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xC7 PUSH2 0x10F CALLDATASIZE PUSH1 0x4 PUSH2 0x69C JUMP JUMPDEST PUSH2 0x46E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x120 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x9C PUSH2 0x12F CALLDATASIZE PUSH1 0x4 PUSH2 0x749 JUMP JUMPDEST PUSH2 0x496 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x140 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xC7 PUSH2 0x14F CALLDATASIZE PUSH1 0x4 PUSH2 0x6C2 JUMP JUMPDEST PUSH2 0x645 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 KECCAK256 DUP6 SWAP1 SSTORE MLOAD SWAP2 SWAP3 SWAP1 SWAP2 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP1 PUSH2 0x1BA SWAP1 DUP7 SWAP1 PUSH2 0x7E5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD DUP2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD DUP2 MLOAD DUP1 DUP4 ADD SWAP1 SWAP3 MSTORE PUSH1 0x1A DUP3 MSTORE PUSH32 0x45524332305F494E53554646494349454E545F42414C414E4345000000000000 SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP4 GT ISZERO PUSH2 0x271 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x268 SWAP2 SWAP1 PUSH2 0x7D4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 SLOAD DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE PUSH1 0x1C DUP4 MSTORE PUSH32 0x45524332305F494E53554646494349454E545F414C4C4F57414E434500000000 SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP4 GT ISZERO PUSH2 0x312 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x268 SWAP2 SWAP1 PUSH2 0x7D4 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD DUP3 MLOAD PUSH1 0x60 DUP2 ADD DUP5 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH32 0x5472616E7366657220776F756C6420726573756C7420696E20616E206F766572 SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH32 0x666C6F772E000000000000000000000000000000000000000000000000000000 SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP4 DUP2 ADD LT ISZERO PUSH2 0x3D4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x268 SWAP2 SWAP1 PUSH2 0x7D4 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD DUP9 ADD SWAP1 SSTORE SWAP4 DUP9 AND DUP1 DUP4 MSTORE DUP5 DUP4 KECCAK256 DUP1 SLOAD DUP9 SWAP1 SUB SWAP1 SSTORE PUSH1 0x1 DUP3 MSTORE DUP5 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 DUP4 SWAP1 KECCAK256 DUP1 SLOAD DUP7 SWAP1 SUB SWAP1 SSTORE SWAP2 MLOAD SWAP1 SWAP2 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH2 0x45C SWAP1 DUP7 SWAP1 PUSH2 0x7E5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD DUP2 MLOAD DUP1 DUP4 ADD SWAP1 SWAP3 MSTORE PUSH1 0x1A DUP3 MSTORE PUSH32 0x45524332305F494E53554646494349454E545F42414C414E4345000000000000 SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP4 GT ISZERO PUSH2 0x516 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x268 SWAP2 SWAP1 PUSH2 0x7D4 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD DUP3 MLOAD PUSH1 0x60 DUP2 ADD DUP5 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH32 0x5472616E7366657220776F756C6420726573756C7420696E20616E206F766572 SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH32 0x666C6F772E000000000000000000000000000000000000000000000000000000 SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP4 DUP2 ADD LT ISZERO PUSH2 0x5D8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x268 SWAP2 SWAP1 PUSH2 0x7D4 JUMP JUMPDEST POP CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD DUP7 SWAP1 SUB SWAP1 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND DUP1 DUP4 MSTORE SWAP2 DUP2 SWAP1 KECCAK256 DUP1 SLOAD DUP7 ADD SWAP1 SSTORE MLOAD SWAP1 SWAP2 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH2 0x1BA SWAP1 DUP7 SWAP1 PUSH2 0x7E5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x689 DUP3 CALLDATALOAD PUSH2 0x7FF JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x689 DUP3 CALLDATALOAD PUSH2 0x7FC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x6AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x6BA DUP5 DUP5 PUSH2 0x67D JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x6D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x6E1 DUP6 DUP6 PUSH2 0x67D JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x6F2 DUP6 DUP3 DUP7 ADD PUSH2 0x67D JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x711 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x71D DUP7 DUP7 PUSH2 0x67D JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x72E DUP7 DUP3 DUP8 ADD PUSH2 0x67D JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x73F DUP7 DUP3 DUP8 ADD PUSH2 0x690 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x75C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x768 DUP6 DUP6 PUSH2 0x67D JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x6F2 DUP6 DUP3 DUP7 ADD PUSH2 0x690 JUMP JUMPDEST PUSH2 0x782 DUP2 PUSH2 0x7F7 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x793 DUP3 PUSH2 0x7F3 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH2 0x7A7 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x818 JUMP JUMPDEST PUSH2 0x7B0 DUP2 PUSH2 0x848 JUMP JUMPDEST SWAP1 SWAP4 ADD PUSH1 0x20 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x782 DUP2 PUSH2 0x7FC JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x1C6 DUP3 DUP5 PUSH2 0x779 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x689 DUP2 DUP5 PUSH2 0x788 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x1C6 DUP3 DUP5 PUSH2 0x7BD JUMP JUMPDEST MLOAD SWAP1 JUMP JUMPDEST ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x833 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x81B JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x842 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP1 JUMP STOP LOG2 PUSH6 0x627A7A723058 KECCAK256 0xf6 0xf7 PUSH17 0xD9F6FBD388C5E5757ED24D436CE3757811 0xb0 PUSH16 0xC2E0E47F7FF554D37D0C6C6578706572 PUSH10 0x6D656E74616CF5003700 ",
- "sourceMap": "669:1991:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;669:1991:0;;;;;;;"
+ "object": "0x608060405234801561001057600080fd5b506106a0806100206000396000f3006080604052600436106100775763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663095ea7b3811461007c57806318160ddd146100c157806323b872dd146100e857806370a082311461011f578063a9059cbb1461014d578063dd62ed3e1461017e575b600080fd5b34801561008857600080fd5b506100ad73ffffffffffffffffffffffffffffffffffffffff600435166024356101b2565b604080519115158252519081900360200190f35b3480156100cd57600080fd5b506100d6610225565b60408051918252519081900360200190f35b3480156100f457600080fd5b506100ad73ffffffffffffffffffffffffffffffffffffffff6004358116906024351660443561022b565b34801561012b57600080fd5b506100d673ffffffffffffffffffffffffffffffffffffffff60043516610487565b34801561015957600080fd5b506100ad73ffffffffffffffffffffffffffffffffffffffff600435166024356104af565b34801561018a57600080fd5b506100d673ffffffffffffffffffffffffffffffffffffffff6004358116906024351661063c565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b60025481565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120548211156102bf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f45524332305f494e53554646494349454e545f42414c414e4345000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482111561035e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f45524332305f494e53554646494349454e545f414c4c4f57414e434500000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205482810110156103f457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f4f564552464c4f57000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff80841660008181526020818152604080832080548801905593881680835284832080548890039055600182528483203384528252918490208054879003905583518681529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35060019392505050565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b3360009081526020819052604081205482111561052d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f45524332305f494e53554646494349454e545f42414c414e4345000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205482810110156105c357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f4f564552464c4f57000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b336000818152602081815260408083208054879003905573ffffffffffffffffffffffffffffffffffffffff871680845292819020805487019055805186815290519293927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152600160209081526040808320939094168252919091522054905600a165627a7a7230582049a166026f124a2c987796c84fbdc971bb7b3d917c525a7aeca272ff944e84c60029",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6A0 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x77 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x95EA7B3 DUP2 EQ PUSH2 0x7C JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0xC1 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0xE8 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x11F JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x14D JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x17E JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x88 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD PUSH2 0x1B2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD6 PUSH2 0x225 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH1 0x44 CALLDATALOAD PUSH2 0x22B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x12B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x487 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x159 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD PUSH2 0x4AF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x18A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH2 0x63C JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP7 SWAP1 SSTORE DUP2 MLOAD DUP7 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 SWAP1 SWAP4 SWAP1 SWAP3 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD DUP2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x2BF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332305F494E53554646494349454E545F42414C414E4345000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x35E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332305F494E53554646494349454E545F414C4C4F57414E434500000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 DUP2 ADD LT ISZERO PUSH2 0x3F4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x8 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F564552464C4F57000000000000000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD DUP9 ADD SWAP1 SSTORE SWAP4 DUP9 AND DUP1 DUP4 MSTORE DUP5 DUP4 KECCAK256 DUP1 SLOAD DUP9 SWAP1 SUB SWAP1 SSTORE PUSH1 0x1 DUP3 MSTORE DUP5 DUP4 KECCAK256 CALLER DUP5 MSTORE DUP3 MSTORE SWAP2 DUP5 SWAP1 KECCAK256 DUP1 SLOAD DUP8 SWAP1 SUB SWAP1 SSTORE DUP4 MLOAD DUP7 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x52D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332305F494E53554646494349454E545F42414C414E4345000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 DUP2 ADD LT ISZERO PUSH2 0x5C3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x8 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F564552464C4F57000000000000000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD DUP8 SWAP1 SUB SWAP1 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP1 DUP5 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP1 SLOAD DUP8 ADD SWAP1 SSTORE DUP1 MLOAD DUP7 DUP2 MSTORE SWAP1 MLOAD SWAP3 SWAP4 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 0x49 LOG1 PUSH7 0x26F124A2C9877 SWAP7 0xc8 0x4f 0xbd 0xc9 PUSH18 0xBB7B3D917C525A7AECA272FF944E84C60029 ",
+ "sourceMap": "635:1822:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;635:1822:0;;;;;;;"
},
"deployedBytecode": {
"linkReferences": {},
- "object": "0x6080604052600436106100775763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663095ea7b3811461007c57806318160ddd146100b257806323b872dd146100d457806370a08231146100f4578063a9059cbb14610114578063dd62ed3e14610134575b600080fd5b34801561008857600080fd5b5061009c610097366004610749565b610154565b6040516100a991906107c6565b60405180910390f35b3480156100be57600080fd5b506100c76101cc565b6040516100a991906107e5565b3480156100e057600080fd5b5061009c6100ef3660046106fc565b6101d2565b34801561010057600080fd5b506100c761010f36600461069c565b61046e565b34801561012057600080fd5b5061009c61012f366004610749565b610496565b34801561014057600080fd5b506100c761014f3660046106c2565b610645565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906101ba9086906107e5565b60405180910390a35060015b92915050565b60025481565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208181526040808320548151808301909252601a82527f45524332305f494e53554646494349454e545f42414c414e43450000000000009282019290925290831115610271576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026891906107d4565b60405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff84166000908152600160209081526040808320338452825291829020548251808401909352601c83527f45524332305f494e53554646494349454e545f414c4c4f57414e43450000000091830191909152831115610312576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026891906107d4565b5073ffffffffffffffffffffffffffffffffffffffff831660009081526020818152604091829020548251606081018452602581527f5472616e7366657220776f756c6420726573756c7420696e20616e206f766572928101929092527f666c6f772e000000000000000000000000000000000000000000000000000000928201929092529083810110156103d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026891906107d4565b5073ffffffffffffffffffffffffffffffffffffffff8084166000818152602081815260408083208054880190559388168083528483208054889003905560018252848320338452909152908390208054869003905591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061045c9086906107e5565b60405180910390a35060019392505050565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b33600090815260208181526040808320548151808301909252601a82527f45524332305f494e53554646494349454e545f42414c414e43450000000000009282019290925290831115610516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026891906107d4565b5073ffffffffffffffffffffffffffffffffffffffff831660009081526020818152604091829020548251606081018452602581527f5472616e7366657220776f756c6420726573756c7420696e20616e206f766572928101929092527f666c6f772e000000000000000000000000000000000000000000000000000000928201929092529083810110156105d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026891906107d4565b50336000818152602081905260408082208054869003905573ffffffffffffffffffffffffffffffffffffffff861680835291819020805486019055519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906101ba9086906107e5565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b600061068982356107ff565b9392505050565b600061068982356107fc565b6000602082840312156106ae57600080fd5b60006106ba848461067d565b949350505050565b600080604083850312156106d557600080fd5b60006106e1858561067d565b92505060206106f28582860161067d565b9150509250929050565b60008060006060848603121561071157600080fd5b600061071d868661067d565b935050602061072e8682870161067d565b925050604061073f86828701610690565b9150509250925092565b6000806040838503121561075c57600080fd5b6000610768858561067d565b92505060206106f285828601610690565b610782816107f7565b82525050565b6000610793826107f3565b8084526107a7816020860160208601610818565b6107b081610848565b9093016020019392505050565b610782816107fc565b602081016101c68284610779565b602080825281016106898184610788565b602081016101c682846107bd565b5190565b151590565b90565b73ffffffffffffffffffffffffffffffffffffffff1690565b60005b8381101561083357818101518382015260200161081b565b83811115610842576000848401525b50505050565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016905600a265627a7a72305820f6f770d9f6fbd388c5e5757ed24d436ce3757811b06fc2e0e47f7ff554d37d0c6c6578706572696d656e74616cf50037",
- "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x77 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x95EA7B3 DUP2 EQ PUSH2 0x7C JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0xB2 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0xD4 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0xF4 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x114 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x134 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x88 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x9C PUSH2 0x97 CALLDATASIZE PUSH1 0x4 PUSH2 0x749 JUMP JUMPDEST PUSH2 0x154 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xA9 SWAP2 SWAP1 PUSH2 0x7C6 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xBE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xC7 PUSH2 0x1CC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xA9 SWAP2 SWAP1 PUSH2 0x7E5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x9C PUSH2 0xEF CALLDATASIZE PUSH1 0x4 PUSH2 0x6FC JUMP JUMPDEST PUSH2 0x1D2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x100 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xC7 PUSH2 0x10F CALLDATASIZE PUSH1 0x4 PUSH2 0x69C JUMP JUMPDEST PUSH2 0x46E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x120 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x9C PUSH2 0x12F CALLDATASIZE PUSH1 0x4 PUSH2 0x749 JUMP JUMPDEST PUSH2 0x496 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x140 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xC7 PUSH2 0x14F CALLDATASIZE PUSH1 0x4 PUSH2 0x6C2 JUMP JUMPDEST PUSH2 0x645 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 KECCAK256 DUP6 SWAP1 SSTORE MLOAD SWAP2 SWAP3 SWAP1 SWAP2 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP1 PUSH2 0x1BA SWAP1 DUP7 SWAP1 PUSH2 0x7E5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD DUP2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD DUP2 MLOAD DUP1 DUP4 ADD SWAP1 SWAP3 MSTORE PUSH1 0x1A DUP3 MSTORE PUSH32 0x45524332305F494E53554646494349454E545F42414C414E4345000000000000 SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP4 GT ISZERO PUSH2 0x271 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x268 SWAP2 SWAP1 PUSH2 0x7D4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 SLOAD DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE PUSH1 0x1C DUP4 MSTORE PUSH32 0x45524332305F494E53554646494349454E545F414C4C4F57414E434500000000 SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP4 GT ISZERO PUSH2 0x312 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x268 SWAP2 SWAP1 PUSH2 0x7D4 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD DUP3 MLOAD PUSH1 0x60 DUP2 ADD DUP5 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH32 0x5472616E7366657220776F756C6420726573756C7420696E20616E206F766572 SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH32 0x666C6F772E000000000000000000000000000000000000000000000000000000 SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP4 DUP2 ADD LT ISZERO PUSH2 0x3D4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x268 SWAP2 SWAP1 PUSH2 0x7D4 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD DUP9 ADD SWAP1 SSTORE SWAP4 DUP9 AND DUP1 DUP4 MSTORE DUP5 DUP4 KECCAK256 DUP1 SLOAD DUP9 SWAP1 SUB SWAP1 SSTORE PUSH1 0x1 DUP3 MSTORE DUP5 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 DUP4 SWAP1 KECCAK256 DUP1 SLOAD DUP7 SWAP1 SUB SWAP1 SSTORE SWAP2 MLOAD SWAP1 SWAP2 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH2 0x45C SWAP1 DUP7 SWAP1 PUSH2 0x7E5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD DUP2 MLOAD DUP1 DUP4 ADD SWAP1 SWAP3 MSTORE PUSH1 0x1A DUP3 MSTORE PUSH32 0x45524332305F494E53554646494349454E545F42414C414E4345000000000000 SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP4 GT ISZERO PUSH2 0x516 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x268 SWAP2 SWAP1 PUSH2 0x7D4 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD DUP3 MLOAD PUSH1 0x60 DUP2 ADD DUP5 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH32 0x5472616E7366657220776F756C6420726573756C7420696E20616E206F766572 SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH32 0x666C6F772E000000000000000000000000000000000000000000000000000000 SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP4 DUP2 ADD LT ISZERO PUSH2 0x5D8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x268 SWAP2 SWAP1 PUSH2 0x7D4 JUMP JUMPDEST POP CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD DUP7 SWAP1 SUB SWAP1 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND DUP1 DUP4 MSTORE SWAP2 DUP2 SWAP1 KECCAK256 DUP1 SLOAD DUP7 ADD SWAP1 SSTORE MLOAD SWAP1 SWAP2 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH2 0x1BA SWAP1 DUP7 SWAP1 PUSH2 0x7E5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x689 DUP3 CALLDATALOAD PUSH2 0x7FF JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x689 DUP3 CALLDATALOAD PUSH2 0x7FC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x6AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x6BA DUP5 DUP5 PUSH2 0x67D JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x6D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x6E1 DUP6 DUP6 PUSH2 0x67D JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x6F2 DUP6 DUP3 DUP7 ADD PUSH2 0x67D JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x711 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x71D DUP7 DUP7 PUSH2 0x67D JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x72E DUP7 DUP3 DUP8 ADD PUSH2 0x67D JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x73F DUP7 DUP3 DUP8 ADD PUSH2 0x690 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x75C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x768 DUP6 DUP6 PUSH2 0x67D JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x6F2 DUP6 DUP3 DUP7 ADD PUSH2 0x690 JUMP JUMPDEST PUSH2 0x782 DUP2 PUSH2 0x7F7 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x793 DUP3 PUSH2 0x7F3 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH2 0x7A7 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x818 JUMP JUMPDEST PUSH2 0x7B0 DUP2 PUSH2 0x848 JUMP JUMPDEST SWAP1 SWAP4 ADD PUSH1 0x20 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x782 DUP2 PUSH2 0x7FC JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x1C6 DUP3 DUP5 PUSH2 0x779 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x689 DUP2 DUP5 PUSH2 0x788 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x1C6 DUP3 DUP5 PUSH2 0x7BD JUMP JUMPDEST MLOAD SWAP1 JUMP JUMPDEST ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x833 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x81B JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x842 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP1 JUMP STOP LOG2 PUSH6 0x627A7A723058 KECCAK256 0xf6 0xf7 PUSH17 0xD9F6FBD388C5E5757ED24D436CE3757811 0xb0 PUSH16 0xC2E0E47F7FF554D37D0C6C6578706572 PUSH10 0x6D656E74616CF5003700 ",
- "sourceMap": "669:1991:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2139:222;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2139:222:0;;;;;;;;;;;;;;;;;;;;;;;;;1041:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1041:26:0;;;;;;;;;;;;1525:608;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1525:608:0;;;;;;;;;2367:125;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2367:125:0;;;;;;;;;1074:445;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1074:445:0;;;;;;;;;2498:160;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2498:160:0;;;;;;;;;2139:222;2250:10;2222:4;2242:19;;;:7;:19;;;;;;;;;:29;;;;;;;;;;:38;;;2295;2222:4;;2242:29;;2295:38;;;;2274:6;;2295:38;;;;;;;;;;-1:-1:-1;2350:4:0;2139:222;;;;;:::o;1041:26::-;;;;:::o;1525:608::-;1664:15;;;1623:4;1664:15;;;;;;;;;;;;1703:20;;;;;;;;;;;;;;;;;;;;1664:25;-1:-1:-1;1664:25:0;1643:90;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1764:14:0;;;;;;;:7;:14;;;;;;;;1779:10;1764:26;;;;;;;;;1814:22;;;;;;;;;;;;;;;;;;;1764:36;-1:-1:-1;1764:36:0;1743:103;;;;;;;;;;;;;;;-1:-1:-1;1903:13:0;;;:8;:13;;;;;;;;;;;;;1930:8;;;;;;;;;;;;;;;;;;;;;;;;;;;1877:22;;;:39;;1856:92;;;;;;;;;;;;;;;-1:-1:-1;1958:13:0;;;;:8;:13;;;;;;;;;;;:23;;;;;;1991:15;;;;;;;;;:25;;;;;;;-1:-1:-1;2026:14:0;;;;;2041:10;2026:26;;;;;;;;;:36;;;;;;;2077:28;;1958:13;;1991:15;2077:28;;;;1975:6;;2077:28;;;;;;;;;;-1:-1:-1;2122:4:0;1525:608;;;;;:::o;2367:125::-;2469:16;;2439:7;2469:16;;;;;;;;;;;;2367:125::o;1074:445::-;1203:10;1153:4;1194:20;;;;;;;;;;;;1238;;;;;;;;;;;;;;;;;;;;1194:30;-1:-1:-1;1194:30:0;1173:95;;;;;;;;;;;;;;;-1:-1:-1;1325:13:0;;;:8;:13;;;;;;;;;;;;;1352:8;;;;;;;;;;;;;;;;;;;;;;;;;;;1299:22;;;:39;;1278:92;;;;;;;;;;;;;;;-1:-1:-1;1389:10:0;1380:8;:20;;;;;;;;;;;:30;;;;;;;:20;1420:13;;;;;;;;;:23;;;;;;1458:33;1420:13;;1389:10;1458:33;;;;1404:6;;1458:33;;2498:160;2626:15;;;;2596:7;2626:15;;;:7;:15;;;;;;;;:25;;;;;;;;;;;;;2498:160::o;5:118:-1:-;;72:46;110:6;97:20;72:46;;;63:55;57:66;-1:-1;;;57:66;130:118;;197:46;235:6;222:20;197:46;;255:241;;359:2;347:9;338:7;334:23;330:32;327:2;;;375:1;372;365:12;327:2;410:1;427:53;472:7;452:9;427:53;;;417:63;321:175;-1:-1;;;;321:175;503:366;;;624:2;612:9;603:7;599:23;595:32;592:2;;;640:1;637;630:12;592:2;675:1;692:53;737:7;717:9;692:53;;;682:63;;654:97;782:2;800:53;845:7;836:6;825:9;821:22;800:53;;;790:63;;761:98;586:283;;;;;;876:491;;;;1014:2;1002:9;993:7;989:23;985:32;982:2;;;1030:1;1027;1020:12;982:2;1065:1;1082:53;1127:7;1107:9;1082:53;;;1072:63;;1044:97;1172:2;1190:53;1235:7;1226:6;1215:9;1211:22;1190:53;;;1180:63;;1151:98;1280:2;1298:53;1343:7;1334:6;1323:9;1319:22;1298:53;;;1288:63;;1259:98;976:391;;;;;;1374:366;;;1495:2;1483:9;1474:7;1470:23;1466:32;1463:2;;;1511:1;1508;1501:12;1463:2;1546:1;1563:53;1608:7;1588:9;1563:53;;;1553:63;;1525:97;1653:2;1671:53;1716:7;1707:6;1696:9;1692:22;1671:53;;1747:101;1814:28;1836:5;1814:28;;;1809:3;1802:41;1796:52;;;1855:292;;1953:35;1982:5;1953:35;;;2005:6;2000:3;1993:19;2017:63;2073:6;2066:4;2061:3;2057:14;2050:4;2043:5;2039:16;2017:63;;;2112:29;2134:6;2112:29;;;2092:50;;;2105:4;2092:50;;1933:214;-1:-1;;;1933:214;2154:110;2227:31;2252:5;2227:31;;2271:181;2373:2;2358:18;;2387:55;2362:9;2415:6;2387:55;;2459:273;2583:2;2597:47;;;2568:18;;2658:64;2568:18;2708:6;2658:64;;2739:193;2847:2;2832:18;;2861:61;2836:9;2895:6;2861:61;;2939:88;3010:12;;2994:33;3034:92;3107:13;3100:21;;3083:43;3133:79;3202:5;3185:27;3219:128;3299:42;3288:54;;3271:76;3441:268;3506:1;3513:101;3527:6;3524:1;3521:13;3513:101;;;3594:11;;;3588:18;3575:11;;;3568:39;3549:2;3542:10;3513:101;;;3629:6;3626:1;3623:13;3620:2;;;3694:1;3685:6;3680:3;3676:16;3669:27;3620:2;3490:219;;;;;3717:97;3805:2;3785:14;3801:7;3781:28;;3765:49"
+ "object": "0x6080604052600436106100775763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663095ea7b3811461007c57806318160ddd146100c157806323b872dd146100e857806370a082311461011f578063a9059cbb1461014d578063dd62ed3e1461017e575b600080fd5b34801561008857600080fd5b506100ad73ffffffffffffffffffffffffffffffffffffffff600435166024356101b2565b604080519115158252519081900360200190f35b3480156100cd57600080fd5b506100d6610225565b60408051918252519081900360200190f35b3480156100f457600080fd5b506100ad73ffffffffffffffffffffffffffffffffffffffff6004358116906024351660443561022b565b34801561012b57600080fd5b506100d673ffffffffffffffffffffffffffffffffffffffff60043516610487565b34801561015957600080fd5b506100ad73ffffffffffffffffffffffffffffffffffffffff600435166024356104af565b34801561018a57600080fd5b506100d673ffffffffffffffffffffffffffffffffffffffff6004358116906024351661063c565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b60025481565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120548211156102bf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f45524332305f494e53554646494349454e545f42414c414e4345000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482111561035e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f45524332305f494e53554646494349454e545f414c4c4f57414e434500000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205482810110156103f457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f4f564552464c4f57000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff80841660008181526020818152604080832080548801905593881680835284832080548890039055600182528483203384528252918490208054879003905583518681529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35060019392505050565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b3360009081526020819052604081205482111561052d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f45524332305f494e53554646494349454e545f42414c414e4345000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205482810110156105c357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f4f564552464c4f57000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b336000818152602081815260408083208054879003905573ffffffffffffffffffffffffffffffffffffffff871680845292819020805487019055805186815290519293927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152600160209081526040808320939094168252919091522054905600a165627a7a7230582049a166026f124a2c987796c84fbdc971bb7b3d917c525a7aeca272ff944e84c60029",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x77 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x95EA7B3 DUP2 EQ PUSH2 0x7C JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0xC1 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0xE8 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x11F JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x14D JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x17E JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x88 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD PUSH2 0x1B2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD6 PUSH2 0x225 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH1 0x44 CALLDATALOAD PUSH2 0x22B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x12B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x487 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x159 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD PUSH2 0x4AF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x18A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH2 0x63C JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP7 SWAP1 SSTORE DUP2 MLOAD DUP7 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 SWAP1 SWAP4 SWAP1 SWAP3 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD DUP2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x2BF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332305F494E53554646494349454E545F42414C414E4345000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x35E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332305F494E53554646494349454E545F414C4C4F57414E434500000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 DUP2 ADD LT ISZERO PUSH2 0x3F4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x8 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F564552464C4F57000000000000000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD DUP9 ADD SWAP1 SSTORE SWAP4 DUP9 AND DUP1 DUP4 MSTORE DUP5 DUP4 KECCAK256 DUP1 SLOAD DUP9 SWAP1 SUB SWAP1 SSTORE PUSH1 0x1 DUP3 MSTORE DUP5 DUP4 KECCAK256 CALLER DUP5 MSTORE DUP3 MSTORE SWAP2 DUP5 SWAP1 KECCAK256 DUP1 SLOAD DUP8 SWAP1 SUB SWAP1 SSTORE DUP4 MLOAD DUP7 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x52D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332305F494E53554646494349454E545F42414C414E4345000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 DUP2 ADD LT ISZERO PUSH2 0x5C3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x8 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F564552464C4F57000000000000000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD DUP8 SWAP1 SUB SWAP1 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP1 DUP5 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP1 SLOAD DUP8 ADD SWAP1 SSTORE DUP1 MLOAD DUP7 DUP2 MSTORE SWAP1 MLOAD SWAP3 SWAP4 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 0x49 LOG1 PUSH7 0x26F124A2C9877 SWAP7 0xc8 0x4f 0xbd 0xc9 PUSH18 0xBB7B3D917C525A7AECA272FF944E84C60029 ",
+ "sourceMap": "635:1822:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1928:222;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1928:222:0;;;;;;;;;;;;;;;;;;;;;;;;;;;802:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;802:26:0;;;;;;;;;;;;;;;;;;;;1296:626;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1296:626:0;;;;;;;;;;;;;;2156:133;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2156:133:0;;;;;;;835:455;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;835:455:0;;;;;;;;;2295:160;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2295:160:0;;;;;;;;;;;;1928:222;2039:10;2011:4;2031:19;;;:7;:19;;;;;;;;;:29;;;;;;;;;;;:38;;;2084;;;;;;;2011:4;;2031:29;;2039:10;;2084:38;;;;;;;;-1:-1:-1;2139:4:0;1928:222;;;;:::o;802:26::-;;;;:::o;1296:626::-;1435:15;;;1394:4;1435:15;;;;;;;;;;;:25;-1:-1:-1;1435:25:0;1414:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1543:14;;;;;;;:7;:14;;;;;;;;1558:10;1543:26;;;;;;;;:36;-1:-1:-1;1543:36:0;1522:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1690:13;;;:8;:13;;;;;;;;;;;1664:22;;;:39;;1643:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1747:13;;;;:8;:13;;;;;;;;;;;:23;;;;;;1780:15;;;;;;;;;:25;;;;;;;-1:-1:-1;1815:14:0;;;;;1830:10;1815:26;;;;;;;;:36;;;;;;;1866:28;;;;;;;1747:13;;1780:15;;1866:28;;;;;;;;;;-1:-1:-1;1911:4:0;1296:626;;;;;:::o;2156:133::-;2266:16;;2236:7;2266:16;;;;;;;;;;;;2156:133::o;835:455::-;964:10;914:4;955:20;;;;;;;;;;;:30;-1:-1:-1;955:30:0;934:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1094:13;;;:8;:13;;;;;;;;;;;1068:22;;;:39;;1047:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1160:10;1151:8;:20;;;;;;;;;;;:30;;;;;;;:20;1191:13;;;;;;;;;:23;;;;;;1229:33;;;;;;;1191:13;;1160:10;1229:33;;;;;;;;;;;-1:-1:-1;1279:4:0;835:455;;;;:::o;2295:160::-;2423:15;;;;2393:7;2423:15;;;:7;:15;;;;;;;;:25;;;;;;;;;;;;;2295:160::o"
}
}
},
"sources": {
- "current/tokens/ERC20Token/ERC20Token.sol": {
+ "2.0.0/tokens/ERC20Token/ERC20Token.sol": {
"id": 0
},
- "current/tokens/ERC20Token/IERC20Token.sol": {
+ "2.0.0/tokens/ERC20Token/IERC20Token.sol": {
"id": 1
}
},
"sourceCodes": {
- "current/tokens/ERC20Token/ERC20Token.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"./IERC20Token.sol\";\n\ncontract ERC20Token is IERC20Token {\n\n string constant INSUFFICIENT_BALANCE = \"ERC20_INSUFFICIENT_BALANCE\";\n string constant INSUFFICIENT_ALLOWANCE = \"ERC20_INSUFFICIENT_ALLOWANCE\";\n string constant OVERFLOW = \"Transfer would result in an overflow.\";\n\n mapping (address => uint256) balances;\n mapping (address => mapping (address => uint256)) allowed;\n\n uint256 public totalSupply;\n\n function transfer(address _to, uint256 _value)\n public\n returns (bool)\n {\n require(\n balances[msg.sender] >= _value,\n INSUFFICIENT_BALANCE\n );\n require(\n balances[_to] + _value >= balances[_to],\n OVERFLOW\n );\n balances[msg.sender] -= _value;\n balances[_to] += _value;\n emit Transfer(msg.sender, _to, _value);\n return true;\n }\n\n function transferFrom(address _from, address _to, uint256 _value)\n public\n returns (bool)\n {\n require(\n balances[_from] >= _value,\n INSUFFICIENT_BALANCE\n );\n require(\n allowed[_from][msg.sender] >= _value,\n INSUFFICIENT_ALLOWANCE\n );\n require(\n balances[_to] + _value >= balances[_to],\n OVERFLOW\n );\n balances[_to] += _value;\n balances[_from] -= _value;\n allowed[_from][msg.sender] -= _value;\n emit Transfer(_from, _to, _value);\n return true;\n }\n\n function approve(address _spender, uint256 _value)\n public\n returns (bool)\n {\n allowed[msg.sender][_spender] = _value;\n emit Approval(msg.sender, _spender, _value);\n return true;\n }\n\n function balanceOf(address _owner)\n public view\n returns (uint256)\n {\n return balances[_owner];\n }\n\n function allowance(address _owner, address _spender)\n public\n view\n returns (uint256)\n {\n return allowed[_owner][_spender];\n }\n}\n",
- "current/tokens/ERC20Token/IERC20Token.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.24;\npragma experimental ABIEncoderV2;\n\ncontract IERC20Token {\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, uint256 _value)\n public\n returns (bool);\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, uint256 _value)\n public\n returns (bool);\n \n /// @notice `msg.sender` approves `_spender` 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, uint256 _value)\n public\n returns (bool);\n\n /// @param _owner The address from which the balance will be retrieved\n /// @return The balance\n function balanceOf(address _owner)\n public view\n returns (uint256);\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)\n public view\n returns (uint256);\n\n event Transfer(\n address indexed _from,\n address indexed _to,\n uint256 _value\n );\n \n event Approval(\n address indexed _owner,\n address indexed _spender,\n uint256 _value\n );\n}\n"
+ "2.0.0/tokens/ERC20Token/ERC20Token.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.24;\n\nimport \"./IERC20Token.sol\";\n\n\ncontract ERC20Token is IERC20Token {\n\n mapping (address => uint256) internal balances;\n mapping (address => mapping (address => uint256)) internal allowed;\n\n uint256 public totalSupply;\n\n function transfer(address _to, uint256 _value)\n public\n returns (bool)\n {\n require(\n balances[msg.sender] >= _value,\n \"ERC20_INSUFFICIENT_BALANCE\"\n );\n require(\n balances[_to] + _value >= balances[_to],\n \"OVERFLOW\"\n );\n balances[msg.sender] -= _value;\n balances[_to] += _value;\n emit Transfer(msg.sender, _to, _value);\n return true;\n }\n\n function transferFrom(address _from, address _to, uint256 _value)\n public\n returns (bool)\n {\n require(\n balances[_from] >= _value,\n \"ERC20_INSUFFICIENT_BALANCE\"\n );\n require(\n allowed[_from][msg.sender] >= _value,\n \"ERC20_INSUFFICIENT_ALLOWANCE\"\n );\n require(\n balances[_to] + _value >= balances[_to],\n \"OVERFLOW\"\n );\n balances[_to] += _value;\n balances[_from] -= _value;\n allowed[_from][msg.sender] -= _value;\n emit Transfer(_from, _to, _value);\n return true;\n }\n\n function approve(address _spender, uint256 _value)\n public\n returns (bool)\n {\n allowed[msg.sender][_spender] = _value;\n emit Approval(msg.sender, _spender, _value);\n return true;\n }\n\n function balanceOf(address _owner)\n public\n view\n returns (uint256)\n {\n return balances[_owner];\n }\n\n function allowance(address _owner, address _spender)\n public\n view\n returns (uint256)\n {\n return allowed[_owner][_spender];\n }\n}\n",
+ "2.0.0/tokens/ERC20Token/IERC20Token.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.24;\n\n\ncontract IERC20Token {\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, uint256 _value)\n public\n returns (bool);\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, uint256 _value)\n public\n returns (bool);\n \n /// @notice `msg.sender` approves `_spender` 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, uint256 _value)\n public\n returns (bool);\n\n /// @param _owner The address from which the balance will be retrieved\n /// @return The balance\n function balanceOf(address _owner)\n public view\n returns (uint256);\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)\n public view\n returns (uint256);\n\n // solhint-disable-next-line no-simple-event-func-name\n event Transfer(\n address indexed _from,\n address indexed _to,\n uint256 _value\n );\n \n event Approval(\n address indexed _owner,\n address indexed _spender,\n uint256 _value\n );\n}\n"
},
- "sourceTreeHashHex": "0xbbc0f26f0cc809896dfd6cda74cde0e3be6b9420374970cc780ba4597c949a7d",
+ "sourceTreeHashHex": "0x83f5c6eaadc10f6b60d2712425bd0f2d431ea54ee3d85bc82bed38f3d559d4f8",
"compiler": {
"name": "solc",
"version": "soljson-v0.4.24+commit.e67f0147.js",
diff --git a/packages/migrations/artifacts/2.0.0/ERC721Proxy.json b/packages/migrations/artifacts/2.0.0/ERC721Proxy.json
index c9efb6912..5b6e68dfa 100644
--- a/packages/migrations/artifacts/2.0.0/ERC721Proxy.json
+++ b/packages/migrations/artifacts/2.0.0/ERC721Proxy.json
@@ -186,51 +186,51 @@
"evm": {
"bytecode": {
"linkReferences": {},
- "object": "0x608060405260008054600160a060020a0319163317905561111e806100256000396000f3006080604052600436106100985763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166342f1181e811461039f578063494503d4146103c157806370712939146103f75780638da5cb5b146104175780639ad267441461042c578063ae25532e1461044c578063b91816111461046e578063d39de6e91461049b578063f2fde38b146104bd575b3480156100a457600080fd5b507fffffffff00000000000000000000000000000000000000000000000000000000600035167fa85e59e40000000000000000000000000000000000000000000000000000000081141561039c57604080513381526001602082015290812054151561017b577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c1553454e4445525f4e4f545f415554484f52495a454400000000000000604052600060605260646000fd5b600160643503156101f7577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c0e494e56414c49445f414d4f554e540000000000000000000000000000604052600060605260646000fd5b600435608460048201351015610297577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c204c454e4754485f475245415445525f5448414e5f3133315f524551556040527f495245440000000000000000000000000000000000000000000000000000000060605260646000fd5b6040517fb88d4fde000000000000000000000000000000000000000000000000000000008152608882013560288301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116915060406024600485013760488401356044840152608060648401526020820160888501608485013760008060a48401856000855af1801561032b57005b7f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c0f5452414e534645525f4641494c454400000000000000000000000000604052600060605260646000fd5b50005b3480156103ab57600080fd5b506103bf6103ba366004610e20565b6104dd565b005b3480156103cd57600080fd5b506103e16103dc366004610e80565b610668565b6040516103ee9190611006565b60405180910390f35b34801561040357600080fd5b506103bf610412366004610e20565b61069d565b34801561042357600080fd5b506103e161092c565b34801561043857600080fd5b506103bf610447366004610e46565b610948565b34801561045857600080fd5b50610461610c29565b6040516103ee9190611039565b34801561047a57600080fd5b5061048e610489366004610e20565b610c85565b6040516103ee919061102b565b3480156104a757600080fd5b506104b0610c9a565b6040516103ee919061101a565b3480156104c957600080fd5b506103bf6104d8366004610e20565b610d09565b60005473ffffffffffffffffffffffffffffffffffffffff163314610537576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052e90611087565b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff1615610597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052e90611067565b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055513392917f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c91a350565b600280548290811061067657fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6000805473ffffffffffffffffffffffffffffffffffffffff1633146106ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052e90611087565b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff161515610750576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052e90611047565b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260016020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b6002548110156108e5578173ffffffffffffffffffffffffffffffffffffffff166002828154811015156107cd57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614156108dd57600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061082557fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff909216918390811061085857fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01906108d79082610dba565b506108e5565b60010161079d565b604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff163314610999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052e90611087565b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff1615156109fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052e90611047565b6002548110610a35576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052e90611077565b8173ffffffffffffffffffffffffffffffffffffffff16600282815481101515610a5b57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614610ab4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052e90611057565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908110610b2f57fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff9092169183908110610b6257fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190610be19082610dba565b50604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b604080517f455243373231546f6b656e28616464726573732c75696e743235362c6279746581527f7329000000000000000000000000000000000000000000000000000000000000602082015290519081900360220190205b90565b60016020526000908152604090205460ff1681565b60606002805480602002602001604051908101604052809291908181526020018280548015610cff57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610cd4575b5050505050905090565b60005473ffffffffffffffffffffffffffffffffffffffff163314610d5a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052e90611087565b73ffffffffffffffffffffffffffffffffffffffff811615610db757600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b815481835581811115610dde57600083815260209020610dde918101908301610de3565b505050565b610c8291905b80821115610dfd5760008155600101610de9565b5090565b6000610e0d82356110a1565b9392505050565b6000610e0d8235610c82565b600060208284031215610e3257600080fd5b6000610e3e8484610e01565b949350505050565b60008060408385031215610e5957600080fd5b6000610e658585610e01565b9250506020610e7685828601610e14565b9150509250929050565b600060208284031215610e9257600080fd5b6000610e3e8484610e14565b610ea7816110a1565b82525050565b6000610eb88261109d565b808452602084019350610eca83611097565b60005b82811015610efa57610ee0868351610e9e565b610ee982611097565b602096909601959150600101610ecd565b5093949350505050565b610ea7816110ba565b610ea7816110bf565b601581527f5441524745545f4e4f545f415554484f52495a45440000000000000000000000602082015260400190565b601b81527f415554484f52495a45445f414444524553535f4d49534d415443480000000000602082015260400190565b601981527f5441524745545f414c52454144595f415554484f52495a454400000000000000602082015260400190565b601381527f494e4445585f4f55545f4f465f424f554e445300000000000000000000000000602082015260400190565b601381527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000602082015260400190565b602081016110148284610e9e565b92915050565b60208082528101610e0d8184610ead565b602081016110148284610f04565b602081016110148284610f0d565b6020808252810161101481610f16565b6020808252810161101481610f46565b6020808252810161101481610f76565b6020808252810161101481610fa6565b6020808252810161101481610fd6565b60200190565b5190565b73ffffffffffffffffffffffffffffffffffffffff1690565b151590565b7fffffffff0000000000000000000000000000000000000000000000000000000016905600a265627a7a7230582086b0ba0cb3f7db4b9419b3c793263922e1f4e5f2b5d0fe1e0c0989ef2356b1c56c6578706572696d656e74616cf50037",
- "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB NOT AND CALLER OR SWAP1 SSTORE PUSH2 0x111E DUP1 PUSH2 0x25 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x98 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x42F1181E DUP2 EQ PUSH2 0x39F JUMPI DUP1 PUSH4 0x494503D4 EQ PUSH2 0x3C1 JUMPI DUP1 PUSH4 0x70712939 EQ PUSH2 0x3F7 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x417 JUMPI DUP1 PUSH4 0x9AD26744 EQ PUSH2 0x42C JUMPI DUP1 PUSH4 0xAE25532E EQ PUSH2 0x44C JUMPI DUP1 PUSH4 0xB9181611 EQ PUSH2 0x46E JUMPI DUP1 PUSH4 0xD39DE6E9 EQ PUSH2 0x49B JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x4BD JUMPI JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD AND PUSH32 0xA85E59E400000000000000000000000000000000000000000000000000000000 DUP2 EQ ISZERO PUSH2 0x39C JUMPI PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 DUP2 KECCAK256 SLOAD ISZERO ISZERO PUSH2 0x17B JUMPI PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH29 0x2000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 MSTORE PUSH29 0x1553454E4445525F4E4F545F415554484F52495A454400000000000000 PUSH1 0x40 MSTORE PUSH1 0x0 PUSH1 0x60 MSTORE PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x64 CALLDATALOAD SUB ISZERO PUSH2 0x1F7 JUMPI PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH29 0x2000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 MSTORE PUSH29 0xE494E56414C49445F414D4F554E540000000000000000000000000000 PUSH1 0x40 MSTORE PUSH1 0x0 PUSH1 0x60 MSTORE PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x4 CALLDATALOAD PUSH1 0x84 PUSH1 0x4 DUP3 ADD CALLDATALOAD LT ISZERO PUSH2 0x297 JUMPI PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH29 0x2000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 MSTORE PUSH29 0x204C454E4754485F475245415445525F5448414E5F3133315F52455155 PUSH1 0x40 MSTORE PUSH32 0x4952454400000000000000000000000000000000000000000000000000000000 PUSH1 0x60 MSTORE PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xB88D4FDE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x88 DUP3 ADD CALLDATALOAD PUSH1 0x28 DUP4 ADD CALLDATALOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP4 ADD AND SWAP2 POP PUSH1 0x40 PUSH1 0x24 PUSH1 0x4 DUP6 ADD CALLDATACOPY PUSH1 0x48 DUP5 ADD CALLDATALOAD PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x80 PUSH1 0x64 DUP5 ADD MSTORE PUSH1 0x20 DUP3 ADD PUSH1 0x88 DUP6 ADD PUSH1 0x84 DUP6 ADD CALLDATACOPY PUSH1 0x0 DUP1 PUSH1 0xA4 DUP5 ADD DUP6 PUSH1 0x0 DUP6 GAS CALL DUP1 ISZERO PUSH2 0x32B JUMPI STOP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH29 0x2000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 MSTORE PUSH29 0xF5452414E534645525F4641494C454400000000000000000000000000 PUSH1 0x40 MSTORE PUSH1 0x0 PUSH1 0x60 MSTORE PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST POP STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3BF PUSH2 0x3BA CALLDATASIZE PUSH1 0x4 PUSH2 0xE20 JUMP JUMPDEST PUSH2 0x4DD JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E1 PUSH2 0x3DC CALLDATASIZE PUSH1 0x4 PUSH2 0xE80 JUMP JUMPDEST PUSH2 0x668 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3EE SWAP2 SWAP1 PUSH2 0x1006 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x403 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3BF PUSH2 0x412 CALLDATASIZE PUSH1 0x4 PUSH2 0xE20 JUMP JUMPDEST PUSH2 0x69D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x423 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E1 PUSH2 0x92C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x438 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3BF PUSH2 0x447 CALLDATASIZE PUSH1 0x4 PUSH2 0xE46 JUMP JUMPDEST PUSH2 0x948 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x458 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x461 PUSH2 0xC29 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3EE SWAP2 SWAP1 PUSH2 0x1039 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x47A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x48E PUSH2 0x489 CALLDATASIZE PUSH1 0x4 PUSH2 0xE20 JUMP JUMPDEST PUSH2 0xC85 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3EE SWAP2 SWAP1 PUSH2 0x102B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4B0 PUSH2 0xC9A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3EE SWAP2 SWAP1 PUSH2 0x101A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3BF PUSH2 0x4D8 CALLDATASIZE PUSH1 0x4 PUSH2 0xE20 JUMP JUMPDEST PUSH2 0xD09 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x537 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x52E SWAP1 PUSH2 0x1087 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x597 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x52E SWAP1 PUSH2 0x1067 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP4 OR SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD SWAP3 DUP4 ADD DUP2 SSTORE DUP4 MSTORE PUSH32 0x405787FA12A823E0F2B7631CC41B3BA8828B3321CA811111FA75CD3AA3BB5ACE SWAP1 SWAP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND DUP5 OR SWAP1 SSTORE MLOAD CALLER SWAP3 SWAP2 PUSH32 0x3147867C59D17E8FA9D522465651D44AAE0A9E38F902F3475B97E58072F0ED4C SWAP2 LOG3 POP JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD DUP3 SWAP1 DUP2 LT PUSH2 0x676 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x6EF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x52E SWAP1 PUSH2 0x1087 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x750 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x52E SWAP1 PUSH2 0x1047 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST PUSH1 0x2 SLOAD DUP2 LT ISZERO PUSH2 0x8E5 JUMPI DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 DUP3 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x7CD JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x8DD JUMPI PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0x825 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x2 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 DUP4 SWAP1 DUP2 LT PUSH2 0x858 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 PUSH2 0x8D7 SWAP1 DUP3 PUSH2 0xDBA JUMP JUMPDEST POP PUSH2 0x8E5 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x79D JUMP JUMPDEST PUSH1 0x40 MLOAD CALLER SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH32 0x1F32C1B084E2DE0713B8FB16BD46BB9DF710A3DBEAE2F3CA93AF46E016DCC6B0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x999 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x52E SWAP1 PUSH2 0x1087 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x9FA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x52E SWAP1 PUSH2 0x1047 JUMP JUMPDEST PUSH1 0x2 SLOAD DUP2 LT PUSH2 0xA35 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x52E SWAP1 PUSH2 0x1077 JUMP JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 DUP3 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0xA5B JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xAB4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x52E SWAP1 PUSH2 0x1057 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0xB2F JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x2 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 DUP4 SWAP1 DUP2 LT PUSH2 0xB62 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 PUSH2 0xBE1 SWAP1 DUP3 PUSH2 0xDBA JUMP JUMPDEST POP PUSH1 0x40 MLOAD CALLER SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH32 0x1F32C1B084E2DE0713B8FB16BD46BB9DF710A3DBEAE2F3CA93AF46E016DCC6B0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x455243373231546F6B656E28616464726573732C75696E743235362C62797465 DUP2 MSTORE PUSH32 0x7329000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x22 ADD SWAP1 KECCAK256 JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x2 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0xCFF JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xCD4 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xD5A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x52E SWAP1 PUSH2 0x1087 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0xDB7 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND OR SWAP1 SSTORE JUMPDEST POP JUMP JUMPDEST DUP2 SLOAD DUP2 DUP4 SSTORE DUP2 DUP2 GT ISZERO PUSH2 0xDDE JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 PUSH2 0xDDE SWAP2 DUP2 ADD SWAP1 DUP4 ADD PUSH2 0xDE3 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0xC82 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0xDFD JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0xDE9 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE0D DUP3 CALLDATALOAD PUSH2 0x10A1 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE0D DUP3 CALLDATALOAD PUSH2 0xC82 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xE32 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xE3E DUP5 DUP5 PUSH2 0xE01 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xE59 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xE65 DUP6 DUP6 PUSH2 0xE01 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0xE76 DUP6 DUP3 DUP7 ADD PUSH2 0xE14 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xE92 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xE3E DUP5 DUP5 PUSH2 0xE14 JUMP JUMPDEST PUSH2 0xEA7 DUP2 PUSH2 0x10A1 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xEB8 DUP3 PUSH2 0x109D JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH2 0xECA DUP4 PUSH2 0x1097 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0xEFA JUMPI PUSH2 0xEE0 DUP7 DUP4 MLOAD PUSH2 0xE9E JUMP JUMPDEST PUSH2 0xEE9 DUP3 PUSH2 0x1097 JUMP JUMPDEST PUSH1 0x20 SWAP7 SWAP1 SWAP7 ADD SWAP6 SWAP2 POP PUSH1 0x1 ADD PUSH2 0xECD JUMP JUMPDEST POP SWAP4 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0xEA7 DUP2 PUSH2 0x10BA JUMP JUMPDEST PUSH2 0xEA7 DUP2 PUSH2 0x10BF JUMP JUMPDEST PUSH1 0x15 DUP2 MSTORE PUSH32 0x5441524745545F4E4F545F415554484F52495A45440000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1B DUP2 MSTORE PUSH32 0x415554484F52495A45445F414444524553535F4D49534D415443480000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x19 DUP2 MSTORE PUSH32 0x5441524745545F414C52454144595F415554484F52495A454400000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x13 DUP2 MSTORE PUSH32 0x494E4445585F4F55545F4F465F424F554E445300000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x13 DUP2 MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x1014 DUP3 DUP5 PUSH2 0xE9E JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xE0D DUP2 DUP5 PUSH2 0xEAD JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x1014 DUP3 DUP5 PUSH2 0xF04 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x1014 DUP3 DUP5 PUSH2 0xF0D JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1014 DUP2 PUSH2 0xF16 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1014 DUP2 PUSH2 0xF46 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1014 DUP2 PUSH2 0xF76 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1014 DUP2 PUSH2 0xFA6 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1014 DUP2 PUSH2 0xFD6 JUMP JUMPDEST PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND SWAP1 JUMP STOP LOG2 PUSH6 0x627A7A723058 KECCAK256 DUP7 0xb0 0xba 0xc 0xb3 0xf7 0xdb 0x4b SWAP5 NOT 0xb3 0xc7 SWAP4 0x26 CODECOPY 0x22 0xe1 DELEGATECALL 0xe5 CALLCODE 0xb5 0xd0 INVALID 0x1e 0xc MULMOD DUP10 0xef 0x23 JUMP 0xb1 0xc5 PUSH13 0x6578706572696D656E74616CF5 STOP CALLDATACOPY ",
- "sourceMap": "719:10840:0:-;;;363:5:6;:18;;-1:-1:-1;;;;;;363:18:6;371:10;363:18;;;719:10840:0;;;;;;"
+ "object": "0x608060405260008054600160a060020a031916331790556110c7806100256000396000f3006080604052600436106100985763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166342f1181e811461039f578063494503d4146103cf57806370712939146104105780638da5cb5b1461043e5780639ad2674414610453578063ae25532e14610484578063b9181611146104ce578063d39de6e914610510578063f2fde38b14610575575b3480156100a457600080fd5b507fffffffff00000000000000000000000000000000000000000000000000000000600035167fa85e59e40000000000000000000000000000000000000000000000000000000081141561039c57604080513381526001602082015290812054151561017b577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c1553454e4445525f4e4f545f415554484f52495a454400000000000000604052600060605260646000fd5b600160643503156101f7577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c0e494e56414c49445f414d4f554e540000000000000000000000000000604052600060605260646000fd5b600435608460048201351015610297577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c204c454e4754485f475245415445525f5448414e5f3133315f524551556040527f495245440000000000000000000000000000000000000000000000000000000060605260646000fd5b6040517fb88d4fde000000000000000000000000000000000000000000000000000000008152608882013560288301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116915060406024600485013760488401356044840152608060648401526020820160888501608485013760008060a48401856000855af1801561032b57005b7f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c0f5452414e534645525f4641494c454400000000000000000000000000604052600060605260646000fd5b50005b3480156103ab57600080fd5b506103cd73ffffffffffffffffffffffffffffffffffffffff600435166105a3565b005b3480156103db57600080fd5b506103e760043561078f565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561041c57600080fd5b506103cd73ffffffffffffffffffffffffffffffffffffffff600435166107c4565b34801561044a57600080fd5b506103e7610abd565b34801561045f57600080fd5b506103cd73ffffffffffffffffffffffffffffffffffffffff60043516602435610ad9565b34801561049057600080fd5b50610499610e8e565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b3480156104da57600080fd5b506104fc73ffffffffffffffffffffffffffffffffffffffff60043516610eea565b604080519115158252519081900360200190f35b34801561051c57600080fd5b50610525610eff565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610561578181015183820152602001610549565b505050509050019250505060405180910390f35b34801561058157600080fd5b506103cd73ffffffffffffffffffffffffffffffffffffffff60043516610f6e565b60005473ffffffffffffffffffffffffffffffffffffffff16331461062957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff16156106be57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f5441524745545f414c52454144595f415554484f52495a454400000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055513392917f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c91a350565b600280548290811061079d57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6000805473ffffffffffffffffffffffffffffffffffffffff16331461084b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff1615156108e157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5441524745545f4e4f545f415554484f52495a45440000000000000000000000604482015290519081900360640190fd5b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260016020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b600254811015610a76578173ffffffffffffffffffffffffffffffffffffffff1660028281548110151561095e57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff161415610a6e57600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019081106109b657fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff90921691839081106109e957fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190610a689082611054565b50610a76565b60010161092e565b604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b5f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff161515610bf557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5441524745545f4e4f545f415554484f52495a45440000000000000000000000604482015290519081900360640190fd5b6002548110610c6557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f494e4445585f4f55545f4f465f424f554e445300000000000000000000000000604482015290519081900360640190fd5b8173ffffffffffffffffffffffffffffffffffffffff16600282815481101515610c8b57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614610d1957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f415554484f52495a45445f414444524553535f4d49534d415443480000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908110610d9457fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff9092169183908110610dc757fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190610e469082611054565b50604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b604080517f455243373231546f6b656e28616464726573732c75696e743235362c6279746581527f7329000000000000000000000000000000000000000000000000000000000000602082015290519081900360220190205b90565b60016020526000908152604090205460ff1681565b60606002805480602002602001604051908101604052809291908181526020018280548015610f6457602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610f39575b5050505050905090565b60005473ffffffffffffffffffffffffffffffffffffffff163314610ff457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81161561105157600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b8154818355818111156110785760008381526020902061107891810190830161107d565b505050565b610ee791905b808211156110975760008155600101611083565b50905600a165627a7a723058201f86e8de731e1fd4f59708de4fe11510edc0e819352d67a0f007ef2d1ae9bfb70029",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB NOT AND CALLER OR SWAP1 SSTORE PUSH2 0x10C7 DUP1 PUSH2 0x25 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x98 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x42F1181E DUP2 EQ PUSH2 0x39F JUMPI DUP1 PUSH4 0x494503D4 EQ PUSH2 0x3CF JUMPI DUP1 PUSH4 0x70712939 EQ PUSH2 0x410 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x43E JUMPI DUP1 PUSH4 0x9AD26744 EQ PUSH2 0x453 JUMPI DUP1 PUSH4 0xAE25532E EQ PUSH2 0x484 JUMPI DUP1 PUSH4 0xB9181611 EQ PUSH2 0x4CE JUMPI DUP1 PUSH4 0xD39DE6E9 EQ PUSH2 0x510 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x575 JUMPI JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD AND PUSH32 0xA85E59E400000000000000000000000000000000000000000000000000000000 DUP2 EQ ISZERO PUSH2 0x39C JUMPI PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 DUP2 KECCAK256 SLOAD ISZERO ISZERO PUSH2 0x17B JUMPI PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH29 0x2000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 MSTORE PUSH29 0x1553454E4445525F4E4F545F415554484F52495A454400000000000000 PUSH1 0x40 MSTORE PUSH1 0x0 PUSH1 0x60 MSTORE PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x64 CALLDATALOAD SUB ISZERO PUSH2 0x1F7 JUMPI PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH29 0x2000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 MSTORE PUSH29 0xE494E56414C49445F414D4F554E540000000000000000000000000000 PUSH1 0x40 MSTORE PUSH1 0x0 PUSH1 0x60 MSTORE PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x4 CALLDATALOAD PUSH1 0x84 PUSH1 0x4 DUP3 ADD CALLDATALOAD LT ISZERO PUSH2 0x297 JUMPI PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH29 0x2000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 MSTORE PUSH29 0x204C454E4754485F475245415445525F5448414E5F3133315F52455155 PUSH1 0x40 MSTORE PUSH32 0x4952454400000000000000000000000000000000000000000000000000000000 PUSH1 0x60 MSTORE PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xB88D4FDE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x88 DUP3 ADD CALLDATALOAD PUSH1 0x28 DUP4 ADD CALLDATALOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP4 ADD AND SWAP2 POP PUSH1 0x40 PUSH1 0x24 PUSH1 0x4 DUP6 ADD CALLDATACOPY PUSH1 0x48 DUP5 ADD CALLDATALOAD PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x80 PUSH1 0x64 DUP5 ADD MSTORE PUSH1 0x20 DUP3 ADD PUSH1 0x88 DUP6 ADD PUSH1 0x84 DUP6 ADD CALLDATACOPY PUSH1 0x0 DUP1 PUSH1 0xA4 DUP5 ADD DUP6 PUSH1 0x0 DUP6 GAS CALL DUP1 ISZERO PUSH2 0x32B JUMPI STOP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH29 0x2000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 MSTORE PUSH29 0xF5452414E534645525F4641494C454400000000000000000000000000 PUSH1 0x40 MSTORE PUSH1 0x0 PUSH1 0x60 MSTORE PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST POP STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3CD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x5A3 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E7 PUSH1 0x4 CALLDATALOAD PUSH2 0x78F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x41C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3CD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x7C4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x44A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E7 PUSH2 0xABD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x45F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3CD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD PUSH2 0xAD9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x490 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x499 PUSH2 0xE8E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4FC PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0xEEA JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x51C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x525 PUSH2 0xEFF 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 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x561 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x549 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x581 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3CD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0xF6E JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x629 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x6BE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5441524745545F414C52454144595F415554484F52495A454400000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP4 OR SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD SWAP3 DUP4 ADD DUP2 SSTORE DUP4 MSTORE PUSH32 0x405787FA12A823E0F2B7631CC41B3BA8828B3321CA811111FA75CD3AA3BB5ACE SWAP1 SWAP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND DUP5 OR SWAP1 SSTORE MLOAD CALLER SWAP3 SWAP2 PUSH32 0x3147867C59D17E8FA9D522465651D44AAE0A9E38F902F3475B97E58072F0ED4C SWAP2 LOG3 POP JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD DUP3 SWAP1 DUP2 LT PUSH2 0x79D JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x84B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x8E1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5441524745545F4E4F545F415554484F52495A45440000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST PUSH1 0x2 SLOAD DUP2 LT ISZERO PUSH2 0xA76 JUMPI DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 DUP3 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x95E JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0xA6E JUMPI PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0x9B6 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x2 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 DUP4 SWAP1 DUP2 LT PUSH2 0x9E9 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 PUSH2 0xA68 SWAP1 DUP3 PUSH2 0x1054 JUMP JUMPDEST POP PUSH2 0xA76 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x92E JUMP JUMPDEST PUSH1 0x40 MLOAD CALLER SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH32 0x1F32C1B084E2DE0713B8FB16BD46BB9DF710A3DBEAE2F3CA93AF46E016DCC6B0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xB5F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0xBF5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5441524745545F4E4F545F415554484F52495A45440000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD DUP2 LT PUSH2 0xC65 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E4445585F4F55545F4F465F424F554E445300000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 DUP3 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0xC8B JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xD19 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x415554484F52495A45445F414444524553535F4D49534D415443480000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0xD94 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x2 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 DUP4 SWAP1 DUP2 LT PUSH2 0xDC7 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 PUSH2 0xE46 SWAP1 DUP3 PUSH2 0x1054 JUMP JUMPDEST POP PUSH1 0x40 MLOAD CALLER SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH32 0x1F32C1B084E2DE0713B8FB16BD46BB9DF710A3DBEAE2F3CA93AF46E016DCC6B0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x455243373231546F6B656E28616464726573732C75696E743235362C62797465 DUP2 MSTORE PUSH32 0x7329000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x22 ADD SWAP1 KECCAK256 JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x2 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0xF64 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xF39 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xFF4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0x1051 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND OR SWAP1 SSTORE JUMPDEST POP JUMP JUMPDEST DUP2 SLOAD DUP2 DUP4 SSTORE DUP2 DUP2 GT ISZERO PUSH2 0x1078 JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 PUSH2 0x1078 SWAP2 DUP2 ADD SWAP1 DUP4 ADD PUSH2 0x107D JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0xEE7 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1097 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x1083 JUMP JUMPDEST POP SWAP1 JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 0x1f DUP7 0xe8 0xde PUSH20 0x1E1FD4F59708DE4FE11510EDC0E819352D67A0F0 SMOD 0xef 0x2d BYTE 0xe9 0xbf 0xb7 STOP 0x29 ",
+ "sourceMap": "685:10899:0:-;;;329:5:6;:18;;-1:-1:-1;;;;;;329:18:6;337:10;329:18;;;685:10899:0;;;;;;"
},
"deployedBytecode": {
"linkReferences": {},
- "object": "0x6080604052600436106100985763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166342f1181e811461039f578063494503d4146103c157806370712939146103f75780638da5cb5b146104175780639ad267441461042c578063ae25532e1461044c578063b91816111461046e578063d39de6e91461049b578063f2fde38b146104bd575b3480156100a457600080fd5b507fffffffff00000000000000000000000000000000000000000000000000000000600035167fa85e59e40000000000000000000000000000000000000000000000000000000081141561039c57604080513381526001602082015290812054151561017b577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c1553454e4445525f4e4f545f415554484f52495a454400000000000000604052600060605260646000fd5b600160643503156101f7577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c0e494e56414c49445f414d4f554e540000000000000000000000000000604052600060605260646000fd5b600435608460048201351015610297577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c204c454e4754485f475245415445525f5448414e5f3133315f524551556040527f495245440000000000000000000000000000000000000000000000000000000060605260646000fd5b6040517fb88d4fde000000000000000000000000000000000000000000000000000000008152608882013560288301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116915060406024600485013760488401356044840152608060648401526020820160888501608485013760008060a48401856000855af1801561032b57005b7f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c0f5452414e534645525f4641494c454400000000000000000000000000604052600060605260646000fd5b50005b3480156103ab57600080fd5b506103bf6103ba366004610e20565b6104dd565b005b3480156103cd57600080fd5b506103e16103dc366004610e80565b610668565b6040516103ee9190611006565b60405180910390f35b34801561040357600080fd5b506103bf610412366004610e20565b61069d565b34801561042357600080fd5b506103e161092c565b34801561043857600080fd5b506103bf610447366004610e46565b610948565b34801561045857600080fd5b50610461610c29565b6040516103ee9190611039565b34801561047a57600080fd5b5061048e610489366004610e20565b610c85565b6040516103ee919061102b565b3480156104a757600080fd5b506104b0610c9a565b6040516103ee919061101a565b3480156104c957600080fd5b506103bf6104d8366004610e20565b610d09565b60005473ffffffffffffffffffffffffffffffffffffffff163314610537576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052e90611087565b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff1615610597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052e90611067565b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055513392917f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c91a350565b600280548290811061067657fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6000805473ffffffffffffffffffffffffffffffffffffffff1633146106ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052e90611087565b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff161515610750576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052e90611047565b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260016020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b6002548110156108e5578173ffffffffffffffffffffffffffffffffffffffff166002828154811015156107cd57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614156108dd57600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061082557fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff909216918390811061085857fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01906108d79082610dba565b506108e5565b60010161079d565b604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff163314610999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052e90611087565b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff1615156109fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052e90611047565b6002548110610a35576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052e90611077565b8173ffffffffffffffffffffffffffffffffffffffff16600282815481101515610a5b57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614610ab4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052e90611057565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908110610b2f57fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff9092169183908110610b6257fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190610be19082610dba565b50604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b604080517f455243373231546f6b656e28616464726573732c75696e743235362c6279746581527f7329000000000000000000000000000000000000000000000000000000000000602082015290519081900360220190205b90565b60016020526000908152604090205460ff1681565b60606002805480602002602001604051908101604052809291908181526020018280548015610cff57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610cd4575b5050505050905090565b60005473ffffffffffffffffffffffffffffffffffffffff163314610d5a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052e90611087565b73ffffffffffffffffffffffffffffffffffffffff811615610db757600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b815481835581811115610dde57600083815260209020610dde918101908301610de3565b505050565b610c8291905b80821115610dfd5760008155600101610de9565b5090565b6000610e0d82356110a1565b9392505050565b6000610e0d8235610c82565b600060208284031215610e3257600080fd5b6000610e3e8484610e01565b949350505050565b60008060408385031215610e5957600080fd5b6000610e658585610e01565b9250506020610e7685828601610e14565b9150509250929050565b600060208284031215610e9257600080fd5b6000610e3e8484610e14565b610ea7816110a1565b82525050565b6000610eb88261109d565b808452602084019350610eca83611097565b60005b82811015610efa57610ee0868351610e9e565b610ee982611097565b602096909601959150600101610ecd565b5093949350505050565b610ea7816110ba565b610ea7816110bf565b601581527f5441524745545f4e4f545f415554484f52495a45440000000000000000000000602082015260400190565b601b81527f415554484f52495a45445f414444524553535f4d49534d415443480000000000602082015260400190565b601981527f5441524745545f414c52454144595f415554484f52495a454400000000000000602082015260400190565b601381527f494e4445585f4f55545f4f465f424f554e445300000000000000000000000000602082015260400190565b601381527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000602082015260400190565b602081016110148284610e9e565b92915050565b60208082528101610e0d8184610ead565b602081016110148284610f04565b602081016110148284610f0d565b6020808252810161101481610f16565b6020808252810161101481610f46565b6020808252810161101481610f76565b6020808252810161101481610fa6565b6020808252810161101481610fd6565b60200190565b5190565b73ffffffffffffffffffffffffffffffffffffffff1690565b151590565b7fffffffff0000000000000000000000000000000000000000000000000000000016905600a265627a7a7230582086b0ba0cb3f7db4b9419b3c793263922e1f4e5f2b5d0fe1e0c0989ef2356b1c56c6578706572696d656e74616cf50037",
- "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x98 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x42F1181E DUP2 EQ PUSH2 0x39F JUMPI DUP1 PUSH4 0x494503D4 EQ PUSH2 0x3C1 JUMPI DUP1 PUSH4 0x70712939 EQ PUSH2 0x3F7 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x417 JUMPI DUP1 PUSH4 0x9AD26744 EQ PUSH2 0x42C JUMPI DUP1 PUSH4 0xAE25532E EQ PUSH2 0x44C JUMPI DUP1 PUSH4 0xB9181611 EQ PUSH2 0x46E JUMPI DUP1 PUSH4 0xD39DE6E9 EQ PUSH2 0x49B JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x4BD JUMPI JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD AND PUSH32 0xA85E59E400000000000000000000000000000000000000000000000000000000 DUP2 EQ ISZERO PUSH2 0x39C JUMPI PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 DUP2 KECCAK256 SLOAD ISZERO ISZERO PUSH2 0x17B JUMPI PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH29 0x2000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 MSTORE PUSH29 0x1553454E4445525F4E4F545F415554484F52495A454400000000000000 PUSH1 0x40 MSTORE PUSH1 0x0 PUSH1 0x60 MSTORE PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x64 CALLDATALOAD SUB ISZERO PUSH2 0x1F7 JUMPI PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH29 0x2000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 MSTORE PUSH29 0xE494E56414C49445F414D4F554E540000000000000000000000000000 PUSH1 0x40 MSTORE PUSH1 0x0 PUSH1 0x60 MSTORE PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x4 CALLDATALOAD PUSH1 0x84 PUSH1 0x4 DUP3 ADD CALLDATALOAD LT ISZERO PUSH2 0x297 JUMPI PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH29 0x2000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 MSTORE PUSH29 0x204C454E4754485F475245415445525F5448414E5F3133315F52455155 PUSH1 0x40 MSTORE PUSH32 0x4952454400000000000000000000000000000000000000000000000000000000 PUSH1 0x60 MSTORE PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xB88D4FDE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x88 DUP3 ADD CALLDATALOAD PUSH1 0x28 DUP4 ADD CALLDATALOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP4 ADD AND SWAP2 POP PUSH1 0x40 PUSH1 0x24 PUSH1 0x4 DUP6 ADD CALLDATACOPY PUSH1 0x48 DUP5 ADD CALLDATALOAD PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x80 PUSH1 0x64 DUP5 ADD MSTORE PUSH1 0x20 DUP3 ADD PUSH1 0x88 DUP6 ADD PUSH1 0x84 DUP6 ADD CALLDATACOPY PUSH1 0x0 DUP1 PUSH1 0xA4 DUP5 ADD DUP6 PUSH1 0x0 DUP6 GAS CALL DUP1 ISZERO PUSH2 0x32B JUMPI STOP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH29 0x2000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 MSTORE PUSH29 0xF5452414E534645525F4641494C454400000000000000000000000000 PUSH1 0x40 MSTORE PUSH1 0x0 PUSH1 0x60 MSTORE PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST POP STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3BF PUSH2 0x3BA CALLDATASIZE PUSH1 0x4 PUSH2 0xE20 JUMP JUMPDEST PUSH2 0x4DD JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E1 PUSH2 0x3DC CALLDATASIZE PUSH1 0x4 PUSH2 0xE80 JUMP JUMPDEST PUSH2 0x668 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3EE SWAP2 SWAP1 PUSH2 0x1006 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x403 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3BF PUSH2 0x412 CALLDATASIZE PUSH1 0x4 PUSH2 0xE20 JUMP JUMPDEST PUSH2 0x69D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x423 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E1 PUSH2 0x92C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x438 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3BF PUSH2 0x447 CALLDATASIZE PUSH1 0x4 PUSH2 0xE46 JUMP JUMPDEST PUSH2 0x948 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x458 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x461 PUSH2 0xC29 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3EE SWAP2 SWAP1 PUSH2 0x1039 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x47A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x48E PUSH2 0x489 CALLDATASIZE PUSH1 0x4 PUSH2 0xE20 JUMP JUMPDEST PUSH2 0xC85 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3EE SWAP2 SWAP1 PUSH2 0x102B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4B0 PUSH2 0xC9A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3EE SWAP2 SWAP1 PUSH2 0x101A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3BF PUSH2 0x4D8 CALLDATASIZE PUSH1 0x4 PUSH2 0xE20 JUMP JUMPDEST PUSH2 0xD09 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x537 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x52E SWAP1 PUSH2 0x1087 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x597 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x52E SWAP1 PUSH2 0x1067 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP4 OR SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD SWAP3 DUP4 ADD DUP2 SSTORE DUP4 MSTORE PUSH32 0x405787FA12A823E0F2B7631CC41B3BA8828B3321CA811111FA75CD3AA3BB5ACE SWAP1 SWAP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND DUP5 OR SWAP1 SSTORE MLOAD CALLER SWAP3 SWAP2 PUSH32 0x3147867C59D17E8FA9D522465651D44AAE0A9E38F902F3475B97E58072F0ED4C SWAP2 LOG3 POP JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD DUP3 SWAP1 DUP2 LT PUSH2 0x676 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x6EF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x52E SWAP1 PUSH2 0x1087 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x750 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x52E SWAP1 PUSH2 0x1047 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST PUSH1 0x2 SLOAD DUP2 LT ISZERO PUSH2 0x8E5 JUMPI DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 DUP3 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x7CD JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x8DD JUMPI PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0x825 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x2 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 DUP4 SWAP1 DUP2 LT PUSH2 0x858 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 PUSH2 0x8D7 SWAP1 DUP3 PUSH2 0xDBA JUMP JUMPDEST POP PUSH2 0x8E5 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x79D JUMP JUMPDEST PUSH1 0x40 MLOAD CALLER SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH32 0x1F32C1B084E2DE0713B8FB16BD46BB9DF710A3DBEAE2F3CA93AF46E016DCC6B0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x999 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x52E SWAP1 PUSH2 0x1087 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x9FA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x52E SWAP1 PUSH2 0x1047 JUMP JUMPDEST PUSH1 0x2 SLOAD DUP2 LT PUSH2 0xA35 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x52E SWAP1 PUSH2 0x1077 JUMP JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 DUP3 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0xA5B JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xAB4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x52E SWAP1 PUSH2 0x1057 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0xB2F JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x2 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 DUP4 SWAP1 DUP2 LT PUSH2 0xB62 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 PUSH2 0xBE1 SWAP1 DUP3 PUSH2 0xDBA JUMP JUMPDEST POP PUSH1 0x40 MLOAD CALLER SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH32 0x1F32C1B084E2DE0713B8FB16BD46BB9DF710A3DBEAE2F3CA93AF46E016DCC6B0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x455243373231546F6B656E28616464726573732C75696E743235362C62797465 DUP2 MSTORE PUSH32 0x7329000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x22 ADD SWAP1 KECCAK256 JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x2 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0xCFF JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xCD4 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xD5A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x52E SWAP1 PUSH2 0x1087 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0xDB7 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND OR SWAP1 SSTORE JUMPDEST POP JUMP JUMPDEST DUP2 SLOAD DUP2 DUP4 SSTORE DUP2 DUP2 GT ISZERO PUSH2 0xDDE JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 PUSH2 0xDDE SWAP2 DUP2 ADD SWAP1 DUP4 ADD PUSH2 0xDE3 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0xC82 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0xDFD JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0xDE9 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE0D DUP3 CALLDATALOAD PUSH2 0x10A1 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE0D DUP3 CALLDATALOAD PUSH2 0xC82 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xE32 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xE3E DUP5 DUP5 PUSH2 0xE01 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xE59 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xE65 DUP6 DUP6 PUSH2 0xE01 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0xE76 DUP6 DUP3 DUP7 ADD PUSH2 0xE14 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xE92 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xE3E DUP5 DUP5 PUSH2 0xE14 JUMP JUMPDEST PUSH2 0xEA7 DUP2 PUSH2 0x10A1 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xEB8 DUP3 PUSH2 0x109D JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH2 0xECA DUP4 PUSH2 0x1097 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0xEFA JUMPI PUSH2 0xEE0 DUP7 DUP4 MLOAD PUSH2 0xE9E JUMP JUMPDEST PUSH2 0xEE9 DUP3 PUSH2 0x1097 JUMP JUMPDEST PUSH1 0x20 SWAP7 SWAP1 SWAP7 ADD SWAP6 SWAP2 POP PUSH1 0x1 ADD PUSH2 0xECD JUMP JUMPDEST POP SWAP4 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0xEA7 DUP2 PUSH2 0x10BA JUMP JUMPDEST PUSH2 0xEA7 DUP2 PUSH2 0x10BF JUMP JUMPDEST PUSH1 0x15 DUP2 MSTORE PUSH32 0x5441524745545F4E4F545F415554484F52495A45440000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1B DUP2 MSTORE PUSH32 0x415554484F52495A45445F414444524553535F4D49534D415443480000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x19 DUP2 MSTORE PUSH32 0x5441524745545F414C52454144595F415554484F52495A454400000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x13 DUP2 MSTORE PUSH32 0x494E4445585F4F55545F4F465F424F554E445300000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x13 DUP2 MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x1014 DUP3 DUP5 PUSH2 0xE9E JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xE0D DUP2 DUP5 PUSH2 0xEAD JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x1014 DUP3 DUP5 PUSH2 0xF04 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x1014 DUP3 DUP5 PUSH2 0xF0D JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1014 DUP2 PUSH2 0xF16 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1014 DUP2 PUSH2 0xF46 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1014 DUP2 PUSH2 0xF76 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1014 DUP2 PUSH2 0xFA6 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1014 DUP2 PUSH2 0xFD6 JUMP JUMPDEST PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND SWAP1 JUMP STOP LOG2 PUSH6 0x627A7A723058 KECCAK256 DUP7 0xb0 0xba 0xc 0xb3 0xf7 0xdb 0x4b SWAP5 NOT 0xb3 0xc7 SWAP4 0x26 CODECOPY 0x22 0xe1 DELEGATECALL 0xe5 CALLCODE 0xb5 0xd0 INVALID 0x1e 0xc MULMOD DUP10 0xef 0x23 JUMP 0xb1 0xc5 PUSH13 0x6578706572696D656E74616CF5 STOP CALLDATACOPY ",
- "sourceMap": "719:10840:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;719:10840:0;1062:66;1058:1;1045:15;1041:88;1524:66;1514:8;1511:80;1508:2;;;1820;1814:9;;1858:6;1840:70;;1950:15;1945:2;1934:14;;1927:39;2061:20;;;2055:27;2048:35;2045:2;;;2184:66;2181:1;2174:77;2283:66;2279:2;2272:78;2382:66;2378:2;2371:78;2481:1;2477:2;2470:13;2514:3;2511:1;2504:14;2045:2;6486:1;6480:3;6467:17;6463:25;6460:2;;;6582:66;6579:1;6572:77;6681:66;6677:2;6670:78;6780:66;6776:2;6769:78;6879:1;6875:2;6868:13;6912:3;6909:1;6902:14;6460:2;7057:1;7044:15;7112:3;7107:1;7099:6;7095:14;7082:28;7079:37;7076:2;;;7228:66;7225:1;7218:77;7327:66;7323:2;7316:78;7426:66;7422:2;7415:78;7525:66;7521:2;7514:78;7623:3;7620:1;7613:14;7076:2;7878;7872:9;8863:66;8854:7;8847:83;9449:3;9441:6;9437:16;9424:30;9509:2;9501:6;9497:15;9484:29;9631:66;9626:2;9618:6;9614:15;9610:88;9600:98;;9806:2;9802;9798:1;9789:7;9785:15;9772:37;9920:2;9912:6;9908:15;9895:29;9890:2;9881:7;9877:16;9870:55;10027:3;10021;10012:7;10008:17;10001:30;10178:2;10170:6;10166:15;10160:3;10152:6;10148:16;10142:3;10133:7;10129:17;10116:66;10749:1;10681;10630:3;10622:6;10618:16;10545:7;10479:1;10401:5;10338:3;10312:504;10836:7;10833:2;;;10866:12;10833:2;10998:66;10995:1;10988:77;11093:66;11089:2;11082:78;11188:66;11184:2;11177:78;11283:1;11279:2;11272:13;11312:3;11309:1;11302:14;1508:2;938:10402;719:10840;1180:320:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1180:320:1;;;;;;;;;;;1065:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1065:28:1;;;;;;;;;;;;;;;;;;;;;;;;;1614:547;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1614:547:1;;;;;;;;;292:20:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;292:20:6;;;;2334:643:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2334:643:1;;;;;;;;;11444:113:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11444:113:0;;;;;;;;;;;;1016:43:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1016:43:1;;;;;;;;;;;;;;;;;3074:138;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3074:138:1;;;;;;;;;;;;534:167:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;534:167:6;;;;;;;;;1180:320:1;460:5:6;;;;446:10;:19;425:85;;;;;;;;;;;;;;;;;;;;;;1297:18:1;;;;;;;:10;:18;;;;;;;;1296:19;1275:91;;;;;;;;;;;;;;1377:18;;;;;;;1398:4;1377:18;;;;;;;;:25;;;;;;;;1412:11;27:10:-1;;23:18;;;45:23;;1412:24:1;;;;;;;;;;;;;;1451:42;1482:10;;1377:18;1451:42;;;1180:320;:::o;1065:28::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1065:28:1;:::o;1614:547::-;1849:9;460:5:6;;;;446:10;:19;425:85;;;;;;;;;;;;;;1733:18:1;;;;;;;:10;:18;;;;;;;;1712:86;;;;;;;;;;;;;;;;-1:-1:-1;1816:18:1;;;;;;;:10;:18;;;;;1809:25;;;;;;1844:252;1868:11;:18;1864:22;;1844:252;;;1929:6;1911:24;;:11;1923:1;1911:14;;;;;;;;;;;;;;;;;;;;;;:24;1907:179;;;1972:11;1984:18;;:22;;;;1972:35;;;;;;;;;;;;;;;;1955:11;:14;;1972:35;;;;;1967:1;;1955:14;;;;;;;;;;;;;;;:52;;;;;;;;;;;;;;;2025:11;:23;;;;;;;;;:::i;:::-;;2066:5;;1907:179;1888:3;;1844:252;;;2110:44;;2143:10;;2110:44;;;;;;;;;1614:547;;:::o;292:20:6:-;;;;;;:::o;2334:643:1:-;460:5:6;;;;446:10;:19;425:85;;;;;;;;;;;;;;2497:18:1;;;;;;;:10;:18;;;;;;;;2476:86;;;;;;;;;;;;;;;;2601:11;:18;2593:26;;2572:92;;;;;;;;;;;;;;2717:6;2695:28;;:11;2707:5;2695:18;;;;;;;;;;;;;;;;;;;;;;:28;2674:102;;;;;;;;;;;;;;2794:18;;;;;;;:10;:18;;;;;2787:25;;;;;;2843:11;2855:18;;:22;;;;2843:35;;;;;;;;;;;;;;;;2822:11;:18;;2843:35;;;;;2834:5;;2822:18;;;;;;;;;;;;;;;:56;;;;;;;;;;;;;;;2888:11;:23;;;;;;;;;:::i;:::-;-1:-1:-1;2926:44:1;;2959:10;;2926:44;;;;;;;;;2334:643;;:::o;11444:113:0:-;830:47;;;;;;;;;;;;;;;;;;;;;11444:113;;:::o;1016:43:1:-;;;;;;;;;;;;;;;:::o;3074:138::-;3155:9;3194:11;3187:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3074:138;:::o;534:167:6:-;460:5;;;;446:10;:19;425:85;;;;;;;;;;;;;;630:22;;;;626:69;;668:5;:16;;;;;;;;;;626:69;534:167;:::o;719:10840:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;5:118:-1;;72:46;110:6;97:20;72:46;;;63:55;57:66;-1:-1;;;57:66;130:118;;197:46;235:6;222:20;197:46;;255:241;;359:2;347:9;338:7;334:23;330:32;327:2;;;375:1;372;365:12;327:2;410:1;427:53;472:7;452:9;427:53;;;417:63;321:175;-1:-1;;;;321:175;503:366;;;624:2;612:9;603:7;599:23;595:32;592:2;;;640:1;637;630:12;592:2;675:1;692:53;737:7;717:9;692:53;;;682:63;;654:97;782:2;800:53;845:7;836:6;825:9;821:22;800:53;;;790:63;;761:98;586:283;;;;;;876:241;;980:2;968:9;959:7;955:23;951:32;948:2;;;996:1;993;986:12;948:2;1031:1;1048:53;1093:7;1073:9;1048:53;;1124:110;1197:31;1222:5;1197:31;;;1192:3;1185:44;1179:55;;;1272:590;;1407:54;1455:5;1407:54;;;1479:6;1474:3;1467:19;1503:4;1498:3;1494:14;1487:21;;1548:56;1598:5;1548:56;;;1625:1;1610:230;1635:6;1632:1;1629:13;1610:230;;;1675:53;1724:3;1715:6;1709:13;1675:53;;;1745:60;1798:6;1745:60;;;1828:4;1819:14;;;;;1735:70;-1:-1;1657:1;1650:9;1610:230;;;-1:-1;1853:3;;1386:476;-1:-1;;;;1386:476;1870:101;1937:28;1959:5;1937:28;;1978:107;2049:30;2073:5;2049:30;;2093:296;2248:2;2236:15;;2285:66;2280:2;2271:12;;2264:88;2380:2;2371:12;;2229:160;2398:296;2553:2;2541:15;;2590:66;2585:2;2576:12;;2569:88;2685:2;2676:12;;2534:160;2703:296;2858:2;2846:15;;2895:66;2890:2;2881:12;;2874:88;2990:2;2981:12;;2839:160;3008:296;3163:2;3151:15;;3200:66;3195:2;3186:12;;3179:88;3295:2;3286:12;;3144:160;3313:296;3468:2;3456:15;;3505:66;3500:2;3491:12;;3484:88;3600:2;3591:12;;3449:160;3617:193;3725:2;3710:18;;3739:61;3714:9;3773:6;3739:61;;;3696:114;;;;;3817:341;3975:2;3989:47;;;3960:18;;4050:98;3960:18;4134:6;4050:98;;4165:181;4267:2;4252:18;;4281:55;4256:9;4309:6;4281:55;;4353:189;4459:2;4444:18;;4473:59;4448:9;4505:6;4473:59;;4549:387;4730:2;4744:47;;;4715:18;;4805:121;4715:18;4805:121;;4943:387;5124:2;5138:47;;;5109:18;;5199:121;5109:18;5199:121;;5337:387;5518:2;5532:47;;;5503:18;;5593:121;5503:18;5593:121;;5731:387;5912:2;5926:47;;;5897:18;;5987:121;5897:18;5987:121;;6125:387;6306:2;6320:47;;;6291:18;;6381:121;6291:18;6381:121;;6521;6630:4;6618:17;;6599:43;6651:107;6741:12;;6725:33;6896:128;6976:42;6965:54;;6948:76;7031:92;7104:13;7097:21;;7080:43;7130:151;7209:66;7198:78;;7181:100"
+ "object": "0x6080604052600436106100985763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166342f1181e811461039f578063494503d4146103cf57806370712939146104105780638da5cb5b1461043e5780639ad2674414610453578063ae25532e14610484578063b9181611146104ce578063d39de6e914610510578063f2fde38b14610575575b3480156100a457600080fd5b507fffffffff00000000000000000000000000000000000000000000000000000000600035167fa85e59e40000000000000000000000000000000000000000000000000000000081141561039c57604080513381526001602082015290812054151561017b577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c1553454e4445525f4e4f545f415554484f52495a454400000000000000604052600060605260646000fd5b600160643503156101f7577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c0e494e56414c49445f414d4f554e540000000000000000000000000000604052600060605260646000fd5b600435608460048201351015610297577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c204c454e4754485f475245415445525f5448414e5f3133315f524551556040527f495245440000000000000000000000000000000000000000000000000000000060605260646000fd5b6040517fb88d4fde000000000000000000000000000000000000000000000000000000008152608882013560288301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116915060406024600485013760488401356044840152608060648401526020820160888501608485013760008060a48401856000855af1801561032b57005b7f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c0f5452414e534645525f4641494c454400000000000000000000000000604052600060605260646000fd5b50005b3480156103ab57600080fd5b506103cd73ffffffffffffffffffffffffffffffffffffffff600435166105a3565b005b3480156103db57600080fd5b506103e760043561078f565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561041c57600080fd5b506103cd73ffffffffffffffffffffffffffffffffffffffff600435166107c4565b34801561044a57600080fd5b506103e7610abd565b34801561045f57600080fd5b506103cd73ffffffffffffffffffffffffffffffffffffffff60043516602435610ad9565b34801561049057600080fd5b50610499610e8e565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b3480156104da57600080fd5b506104fc73ffffffffffffffffffffffffffffffffffffffff60043516610eea565b604080519115158252519081900360200190f35b34801561051c57600080fd5b50610525610eff565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610561578181015183820152602001610549565b505050509050019250505060405180910390f35b34801561058157600080fd5b506103cd73ffffffffffffffffffffffffffffffffffffffff60043516610f6e565b60005473ffffffffffffffffffffffffffffffffffffffff16331461062957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff16156106be57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f5441524745545f414c52454144595f415554484f52495a454400000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055513392917f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c91a350565b600280548290811061079d57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6000805473ffffffffffffffffffffffffffffffffffffffff16331461084b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff1615156108e157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5441524745545f4e4f545f415554484f52495a45440000000000000000000000604482015290519081900360640190fd5b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260016020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b600254811015610a76578173ffffffffffffffffffffffffffffffffffffffff1660028281548110151561095e57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff161415610a6e57600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019081106109b657fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff90921691839081106109e957fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190610a689082611054565b50610a76565b60010161092e565b604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b5f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff161515610bf557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5441524745545f4e4f545f415554484f52495a45440000000000000000000000604482015290519081900360640190fd5b6002548110610c6557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f494e4445585f4f55545f4f465f424f554e445300000000000000000000000000604482015290519081900360640190fd5b8173ffffffffffffffffffffffffffffffffffffffff16600282815481101515610c8b57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614610d1957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f415554484f52495a45445f414444524553535f4d49534d415443480000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908110610d9457fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff9092169183908110610dc757fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190610e469082611054565b50604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b604080517f455243373231546f6b656e28616464726573732c75696e743235362c6279746581527f7329000000000000000000000000000000000000000000000000000000000000602082015290519081900360220190205b90565b60016020526000908152604090205460ff1681565b60606002805480602002602001604051908101604052809291908181526020018280548015610f6457602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610f39575b5050505050905090565b60005473ffffffffffffffffffffffffffffffffffffffff163314610ff457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81161561105157600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b8154818355818111156110785760008381526020902061107891810190830161107d565b505050565b610ee791905b808211156110975760008155600101611083565b50905600a165627a7a723058201f86e8de731e1fd4f59708de4fe11510edc0e819352d67a0f007ef2d1ae9bfb70029",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x98 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x42F1181E DUP2 EQ PUSH2 0x39F JUMPI DUP1 PUSH4 0x494503D4 EQ PUSH2 0x3CF JUMPI DUP1 PUSH4 0x70712939 EQ PUSH2 0x410 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x43E JUMPI DUP1 PUSH4 0x9AD26744 EQ PUSH2 0x453 JUMPI DUP1 PUSH4 0xAE25532E EQ PUSH2 0x484 JUMPI DUP1 PUSH4 0xB9181611 EQ PUSH2 0x4CE JUMPI DUP1 PUSH4 0xD39DE6E9 EQ PUSH2 0x510 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x575 JUMPI JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD AND PUSH32 0xA85E59E400000000000000000000000000000000000000000000000000000000 DUP2 EQ ISZERO PUSH2 0x39C JUMPI PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 DUP2 KECCAK256 SLOAD ISZERO ISZERO PUSH2 0x17B JUMPI PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH29 0x2000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 MSTORE PUSH29 0x1553454E4445525F4E4F545F415554484F52495A454400000000000000 PUSH1 0x40 MSTORE PUSH1 0x0 PUSH1 0x60 MSTORE PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x64 CALLDATALOAD SUB ISZERO PUSH2 0x1F7 JUMPI PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH29 0x2000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 MSTORE PUSH29 0xE494E56414C49445F414D4F554E540000000000000000000000000000 PUSH1 0x40 MSTORE PUSH1 0x0 PUSH1 0x60 MSTORE PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x4 CALLDATALOAD PUSH1 0x84 PUSH1 0x4 DUP3 ADD CALLDATALOAD LT ISZERO PUSH2 0x297 JUMPI PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH29 0x2000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 MSTORE PUSH29 0x204C454E4754485F475245415445525F5448414E5F3133315F52455155 PUSH1 0x40 MSTORE PUSH32 0x4952454400000000000000000000000000000000000000000000000000000000 PUSH1 0x60 MSTORE PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xB88D4FDE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x88 DUP3 ADD CALLDATALOAD PUSH1 0x28 DUP4 ADD CALLDATALOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP4 ADD AND SWAP2 POP PUSH1 0x40 PUSH1 0x24 PUSH1 0x4 DUP6 ADD CALLDATACOPY PUSH1 0x48 DUP5 ADD CALLDATALOAD PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x80 PUSH1 0x64 DUP5 ADD MSTORE PUSH1 0x20 DUP3 ADD PUSH1 0x88 DUP6 ADD PUSH1 0x84 DUP6 ADD CALLDATACOPY PUSH1 0x0 DUP1 PUSH1 0xA4 DUP5 ADD DUP6 PUSH1 0x0 DUP6 GAS CALL DUP1 ISZERO PUSH2 0x32B JUMPI STOP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH29 0x2000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 MSTORE PUSH29 0xF5452414E534645525F4641494C454400000000000000000000000000 PUSH1 0x40 MSTORE PUSH1 0x0 PUSH1 0x60 MSTORE PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST POP STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3CD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x5A3 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E7 PUSH1 0x4 CALLDATALOAD PUSH2 0x78F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x41C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3CD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x7C4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x44A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E7 PUSH2 0xABD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x45F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3CD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD PUSH2 0xAD9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x490 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x499 PUSH2 0xE8E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4FC PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0xEEA JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x51C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x525 PUSH2 0xEFF 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 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x561 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x549 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x581 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3CD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0xF6E JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x629 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x6BE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5441524745545F414C52454144595F415554484F52495A454400000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP4 OR SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD SWAP3 DUP4 ADD DUP2 SSTORE DUP4 MSTORE PUSH32 0x405787FA12A823E0F2B7631CC41B3BA8828B3321CA811111FA75CD3AA3BB5ACE SWAP1 SWAP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND DUP5 OR SWAP1 SSTORE MLOAD CALLER SWAP3 SWAP2 PUSH32 0x3147867C59D17E8FA9D522465651D44AAE0A9E38F902F3475B97E58072F0ED4C SWAP2 LOG3 POP JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD DUP3 SWAP1 DUP2 LT PUSH2 0x79D JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x84B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x8E1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5441524745545F4E4F545F415554484F52495A45440000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST PUSH1 0x2 SLOAD DUP2 LT ISZERO PUSH2 0xA76 JUMPI DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 DUP3 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x95E JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0xA6E JUMPI PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0x9B6 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x2 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 DUP4 SWAP1 DUP2 LT PUSH2 0x9E9 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 PUSH2 0xA68 SWAP1 DUP3 PUSH2 0x1054 JUMP JUMPDEST POP PUSH2 0xA76 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x92E JUMP JUMPDEST PUSH1 0x40 MLOAD CALLER SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH32 0x1F32C1B084E2DE0713B8FB16BD46BB9DF710A3DBEAE2F3CA93AF46E016DCC6B0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xB5F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0xBF5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5441524745545F4E4F545F415554484F52495A45440000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD DUP2 LT PUSH2 0xC65 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E4445585F4F55545F4F465F424F554E445300000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 DUP3 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0xC8B JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xD19 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x415554484F52495A45445F414444524553535F4D49534D415443480000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0xD94 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x2 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 DUP4 SWAP1 DUP2 LT PUSH2 0xDC7 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 PUSH2 0xE46 SWAP1 DUP3 PUSH2 0x1054 JUMP JUMPDEST POP PUSH1 0x40 MLOAD CALLER SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH32 0x1F32C1B084E2DE0713B8FB16BD46BB9DF710A3DBEAE2F3CA93AF46E016DCC6B0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x455243373231546F6B656E28616464726573732C75696E743235362C62797465 DUP2 MSTORE PUSH32 0x7329000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x22 ADD SWAP1 KECCAK256 JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x2 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0xF64 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xF39 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xFF4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0x1051 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND OR SWAP1 SSTORE JUMPDEST POP JUMP JUMPDEST DUP2 SLOAD DUP2 DUP4 SSTORE DUP2 DUP2 GT ISZERO PUSH2 0x1078 JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 PUSH2 0x1078 SWAP2 DUP2 ADD SWAP1 DUP4 ADD PUSH2 0x107D JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0xEE7 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1097 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x1083 JUMP JUMPDEST POP SWAP1 JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 0x1f DUP7 0xe8 0xde PUSH20 0x1E1FD4F59708DE4FE11510EDC0E819352D67A0F0 SMOD 0xef 0x2d BYTE 0xe9 0xbf 0xb7 STOP 0x29 ",
+ "sourceMap": "685:10899:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;685:10899:0;1087:66;1083:1;1070:15;1066:88;1549:66;1539:8;1536:80;1533:2;;;1845;1839:9;;1883:6;1865:70;;1975:15;1970:2;1959:14;;1952:39;2086:20;;;2080:27;2073:35;2070:2;;;2209:66;2206:1;2199:77;2308:66;2304:2;2297:78;2407:66;2403:2;2396:78;2506:1;2502:2;2495:13;2539:3;2536:1;2529:14;2070:2;6511:1;6505:3;6492:17;6488:25;6485:2;;;6607:66;6604:1;6597:77;6706:66;6702:2;6695:78;6805:66;6801:2;6794:78;6904:1;6900:2;6893:13;6937:3;6934:1;6927:14;6485:2;7082:1;7069:15;7137:3;7132:1;7124:6;7120:14;7107:28;7104:37;7101:2;;;7253:66;7250:1;7243:77;7352:66;7348:2;7341:78;7451:66;7447:2;7440:78;7550:66;7546:2;7539:78;7648:3;7645:1;7638:14;7101:2;7903;7897:9;8888:66;8879:7;8872:83;9474:3;9466:6;9462:16;9449:30;9534:2;9526:6;9522:15;9509:29;9656:66;9651:2;9643:6;9639:15;9635:88;9625:98;;9831:2;9827;9823:1;9814:7;9810:15;9797:37;9945:2;9937:6;9933:15;9920:29;9915:2;9906:7;9902:16;9895:55;10052:3;10046;10037:7;10033:17;10026:30;10203:2;10195:6;10191:15;10185:3;10177:6;10173:16;10167:3;10158:7;10154:17;10141:66;10774:1;10706;10655:3;10647:6;10643:16;10570:7;10504:1;10426:5;10363:3;10337:504;10861:7;10858:2;;;10891:12;10858:2;11023:66;11020:1;11013:77;11118:66;11114:2;11107:78;11213:66;11209:2;11202:78;11308:1;11304:2;11297:13;11337:3;11334:1;11327:14;1533:2;963:10402;685:10899;1146:320:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1146:320:1;;;;;;;;;1031:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1031:28:1;;;;;;;;;;;;;;;;;;;;;;;;1580:547;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1580:547:1;;;;;;;258:20:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;258:20:6;;;;2300:643:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2300:643:1;;;;;;;;;11469:113:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11469:113:0;;;;;;;;;;;;;;;;;;;;;;;982:43:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;982:43:1;;;;;;;;;;;;;;;;;;;;;;;;;3040:138;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3040:138:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;3040:138:1;;;;;;;;;;;;;;;;;500:167:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;500:167:6;;;;;;;1146:320:1;426:5:6;;;;412:10;:19;391:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1263:18:1;;;;;;;:10;:18;;;;;;;;1262:19;1241:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1343:18;;;;;;;1364:4;1343:18;;;;;;;;:25;;;;;;;;1378:11;27:10:-1;;23:18;;;45:23;;1378:24:1;;;;;;;;;;;;;;1417:42;1448:10;;1343:18;1417:42;;;1146:320;:::o;1031:28::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1031:28:1;:::o;1580:547::-;1815:9;426:5:6;;;;412:10;:19;391:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1699:18:1;;;;;;;:10;:18;;;;;;;;1678:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1782:18:1;;;;;;;:10;:18;;;;;1775:25;;;;;;1810:252;1834:11;:18;1830:22;;1810:252;;;1895:6;1877:24;;:11;1889:1;1877:14;;;;;;;;;;;;;;;;;;;;;;:24;1873:179;;;1938:11;1950:18;;:22;;;;1938:35;;;;;;;;;;;;;;;;1921:11;:14;;1938:35;;;;;1933:1;;1921:14;;;;;;;;;;;;;;;:52;;;;;;;;;;;;;;;1991:11;:23;;;;;;;;;:::i;:::-;;2032:5;;1873:179;1854:3;;1810:252;;;2076:44;;2109:10;;2076:44;;;;;;;;;1580:547;;:::o;258:20:6:-;;;;;;:::o;2300:643:1:-;426:5:6;;;;412:10;:19;391:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2463:18:1;;;;;;;:10;:18;;;;;;;;2442:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2567:11;:18;2559:26;;2538:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2683:6;2661:28;;:11;2673:5;2661:18;;;;;;;;;;;;;;;;;;;;;;:28;2640:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2760:18;;;;;;;:10;:18;;;;;2753:25;;;;;;2809:11;2821:18;;:22;;;;2809:35;;;;;;;;;;;;;;;;2788:11;:18;;2809:35;;;;;2800:5;;2788:18;;;;;;;;;;;;;;;:56;;;;;;;;;;;;;;;2854:11;:23;;;;;;;;;:::i;:::-;-1:-1:-1;2892:44:1;;2925:10;;2892:44;;;;;;;;;2300:643;;:::o;11469:113:0:-;805:47;;;;;;;;;;;;;;;;;;;;;11469:113;;:::o;982:43:1:-;;;;;;;;;;;;;;;:::o;3040:138::-;3121:9;3160:11;3153:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3040:138;:::o;500:167:6:-;426:5;;;;412:10;:19;391:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;596:22;;;;592:69;;634:5;:16;;;;;;;;;;592:69;500:167;:::o;685:10899:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;"
}
}
},
"sources": {
- "current/protocol/AssetProxy/ERC721Proxy.sol": {
+ "2.0.0/protocol/AssetProxy/ERC721Proxy.sol": {
"id": 0
},
- "current/protocol/AssetProxy/MixinAuthorizable.sol": {
+ "2.0.0/protocol/AssetProxy/MixinAuthorizable.sol": {
"id": 1
},
- "current/protocol/AssetProxy/interfaces/IAuthorizable.sol": {
+ "2.0.0/protocol/AssetProxy/interfaces/IAuthorizable.sol": {
"id": 2
},
- "current/protocol/AssetProxy/mixins/MAuthorizable.sol": {
+ "2.0.0/protocol/AssetProxy/mixins/MAuthorizable.sol": {
"id": 3
},
- "current/utils/LibBytes/LibBytes.sol": {
+ "2.0.0/utils/LibBytes/LibBytes.sol": {
"id": 4
},
- "current/utils/Ownable/IOwnable.sol": {
+ "2.0.0/utils/Ownable/IOwnable.sol": {
"id": 5
},
- "current/utils/Ownable/Ownable.sol": {
+ "2.0.0/utils/Ownable/Ownable.sol": {
"id": 6
}
},
"sourceCodes": {
- "current/protocol/AssetProxy/ERC721Proxy.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../../utils/LibBytes/LibBytes.sol\";\nimport \"./MixinAuthorizable.sol\";\n\ncontract ERC721Proxy is\n MixinAuthorizable\n{\n // Id of this proxy.\n bytes4 constant PROXY_ID = bytes4(keccak256(\"ERC721Token(address,uint256,bytes)\"));\n\n function () \n external\n {\n assembly {\n // The first 4 bytes of calldata holds the function selector\n let selector := and(calldataload(0), 0xffffffff00000000000000000000000000000000000000000000000000000000)\n\n // `transferFrom` will be called with the following parameters:\n // assetData Encoded byte array.\n // from Address to transfer asset from.\n // to Address to transfer asset to.\n // amount Amount of asset to transfer.\n // bytes4(keccak256(\"transferFrom(bytes,address,address,uint256)\")) = 0xa85e59e4\n if eq(selector, 0xa85e59e400000000000000000000000000000000000000000000000000000000) {\n\n // To lookup a value in a mapping, we load from the storage location keccak256(k, p),\n // where k is the key left padded to 32 bytes and p is the storage slot\n let start := mload(64)\n mstore(start, and(caller, 0xffffffffffffffffffffffffffffffffffffffff))\n mstore(add(start, 32), authorized_slot)\n\n // Revert if authorized[msg.sender] == false\n if iszero(sload(keccak256(start, 64))) {\n // Revert with `Error(\"SENDER_NOT_AUTHORIZED\")`\n mstore(0, 0x08c379a000000000000000000000000000000000000000000000000000000000)\n mstore(32, 0x0000002000000000000000000000000000000000000000000000000000000000)\n mstore(64, 0x0000001553454e4445525f4e4f545f415554484f52495a454400000000000000)\n mstore(96, 0)\n revert(0, 100)\n }\n\n // `transferFrom`.\n // The function is marked `external`, so no abi decodeding is done for\n // us. Instead, we expect the `calldata` memory to contain the\n // following:\n //\n // | Area | Offset | Length | Contents |\n // |----------|--------|---------|-------------------------------------|\n // | Header | 0 | 4 | function selector |\n // | Params | | 4 * 32 | function parameters: |\n // | | 4 | | 1. offset to assetData (*) |\n // | | 36 | | 2. from |\n // | | 68 | | 3. to |\n // | | 100 | | 4. amount |\n // | Data | | | assetData: |\n // | | 132 | 32 | assetData Length |\n // | | 164 | ** | assetData Contents |\n //\n // (*): offset is computed from start of function parameters, so offset\n // by an additional 4 bytes in the calldata.\n //\n // WARNING: The ABIv2 specification allows additional padding between\n // the Params and Data section. This will result in a larger\n // offset to assetData.\n \n // Asset data itself is encoded as follows:\n //\n // | Area | Offset | Length | Contents |\n // |----------|--------|---------|-------------------------------------|\n // | Header | 0 | 4 | function selector |\n // | Params | | 3 * 32 | function parameters: |\n // | | 4 | 12 + 20 | 1. token address |\n // | | 36 | | 2. tokenId |\n // | | 68 | | 3. offset to receiverData (*) |\n // | Data | | | receiverData: |\n // | | 100 | 32 | receiverData Length |\n // | | 132 | ** | receiverData Contents |\n \n // We construct calldata for the `token.safeTransferFrom` ABI.\n // The layout of this calldata is in the table below.\n // \n // | Area | Offset | Length | Contents |\n // |----------|--------|---------|-------------------------------------|\n // | Header | 0 | 4 | function selector |\n // | Params | | 4 * 32 | function parameters: |\n // | | 4 | | 1. from |\n // | | 36 | | 2. to |\n // | | 68 | | 3. tokenId |\n // | | 100 | | 4. offset to receiverData (*) |\n // | Data | | | receiverData: |\n // | | 132 | 32 | receiverData Length |\n // | | 164 | ** | receiverData Contents |\n\n // There exists only 1 of each token.\n // require(amount == 1, \"INVALID_AMOUNT\")\n if sub(calldataload(100), 1) {\n // Revert with `Error(\"INVALID_AMOUNT\")`\n mstore(0, 0x08c379a000000000000000000000000000000000000000000000000000000000)\n mstore(32, 0x0000002000000000000000000000000000000000000000000000000000000000)\n mstore(64, 0x0000000e494e56414c49445f414d4f554e540000000000000000000000000000)\n mstore(96, 0)\n revert(0, 100)\n }\n \n // Require assetData to be at least 132 bytes\n let offset := calldataload(4)\n if lt(calldataload(add(offset, 4)), 132) {\n // Revert with `Error(\"LENGTH_GREATER_THAN_131_REQUIRED\")`\n mstore(0, 0x08c379a000000000000000000000000000000000000000000000000000000000)\n mstore(32, 0x0000002000000000000000000000000000000000000000000000000000000000)\n mstore(64, 0x000000204c454e4754485f475245415445525f5448414e5f3133315f52455155)\n mstore(96, 0x4952454400000000000000000000000000000000000000000000000000000000)\n revert(0, 100)\n }\n \n /////// Setup State ///////\n // `cdStart` is the start of the calldata for\n // `token.safeTransferFrom` (equal to free memory ptr).\n let cdStart := mload(64)\n // `dataAreaLength` is the total number of words\n // needed to store `receiverData`\n // As-per the ABI spec, this value is padded up to\n // the nearest multiple of 32,\n // and includes 32-bytes for length.\n // It's calculated as folows:\n // - Unpadded length in bytes = `mload(receiverData) + 32`\n // - Add 31 to convert rounding down to rounding up.\n // Combined with the previous and this is `63`.\n // - Round down to nearest multiple of 32 by clearing\n // bits 0x1F. This is done with `and` and a mask.\n\n /////// Setup Header Area ///////\n // This area holds the 4-byte `transferFromSelector`.\n // Any trailing data in transferFromSelector will be\n // overwritten in the next `mstore` call.\n mstore(cdStart, 0xb88d4fde00000000000000000000000000000000000000000000000000000000)\n \n /////// Setup Params Area ///////\n // Each parameter is padded to 32-bytes.\n // The entire Params Area is 128 bytes.\n // Notes:\n // 1. A 20-byte mask is applied to addresses\n // to zero-out the unused bytes.\n // 2. The offset to `receiverData` is the length\n // of the Params Area (128 bytes).\n \n let length := calldataload(add(offset, 136))\n let token := calldataload(add(offset, 40))\n \n // Round length up to multiple of 32\n length := and(add(length, 31), 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0)\n \n // Copy `from` and `to`\n calldatacopy(add(cdStart, 4), 36, 64)\n \n // TokenId\n mstore(add(cdStart, 68), calldataload(add(offset, 72)))\n \n // Offset to receiverData\n mstore(add(cdStart, 100), 128)\n \n // receiverData (including length)\n calldatacopy(add(cdStart, 132), add(offset, 136), add(length, 32))\n \n /////// Call `token.safeTransferFrom` using the calldata ///////\n let success := call(\n gas, // forward all gas\n token, // call address of token contract\n 0, // don't send any ETH\n cdStart, // pointer to start of input\n add(length, 164), // length of input\n 0, // write output to null\n 0 // output size is 0 bytes\n )\n if success {\n return(0, 0)\n }\n \n // Revert with `Error(\"TRANSFER_FAILED\")`\n mstore(0, 0x08c379a000000000000000000000000000000000000000000000000000000000)\n mstore(32, 0x0000002000000000000000000000000000000000000000000000000000000000)\n mstore(64, 0x0000000f5452414e534645525f4641494c454400000000000000000000000000)\n mstore(96, 0)\n revert(0, 100)\n }\n }\n }\n\n /// @dev Gets the proxy id associated with the proxy address.\n /// @return Proxy id.\n function getProxyId()\n external\n pure\n returns (bytes4)\n {\n return PROXY_ID;\n }\n}\n",
- "current/protocol/AssetProxy/MixinAuthorizable.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../../utils/Ownable/Ownable.sol\";\nimport \"./mixins/MAuthorizable.sol\";\n\ncontract MixinAuthorizable is\n Ownable,\n MAuthorizable\n{\n\n /// @dev Only authorized addresses can invoke functions with this modifier.\n modifier onlyAuthorized {\n require(\n authorized[msg.sender],\n \"SENDER_NOT_AUTHORIZED\"\n );\n _;\n }\n\n mapping (address => bool) public authorized;\n address[] public authorities;\n\n /// @dev Authorizes an address.\n /// @param target Address to authorize.\n function addAuthorizedAddress(address target)\n external\n onlyOwner\n {\n require(\n !authorized[target],\n \"TARGET_ALREADY_AUTHORIZED\"\n );\n\n authorized[target] = true;\n authorities.push(target);\n emit AuthorizedAddressAdded(target, msg.sender);\n }\n\n /// @dev Removes authorizion of an address.\n /// @param target Address to remove authorization from.\n function removeAuthorizedAddress(address target)\n external\n onlyOwner\n {\n require(\n authorized[target],\n \"TARGET_NOT_AUTHORIZED\"\n );\n\n delete authorized[target];\n for (uint256 i = 0; i < authorities.length; i++) {\n if (authorities[i] == target) {\n authorities[i] = authorities[authorities.length - 1];\n authorities.length -= 1;\n break;\n }\n }\n emit AuthorizedAddressRemoved(target, msg.sender);\n }\n\n /// @dev Removes authorizion of an address.\n /// @param target Address to remove authorization from.\n /// @param index Index of target in authorities array.\n function removeAuthorizedAddressAtIndex(\n address target,\n uint256 index\n )\n external\n onlyOwner\n {\n require(\n authorized[target],\n \"TARGET_NOT_AUTHORIZED\"\n );\n require(\n index < authorities.length,\n \"INDEX_OUT_OF_BOUNDS\"\n );\n require(\n authorities[index] == target,\n \"AUTHORIZED_ADDRESS_MISMATCH\"\n );\n\n delete authorized[target];\n authorities[index] = authorities[authorities.length - 1];\n authorities.length -= 1;\n emit AuthorizedAddressRemoved(target, msg.sender);\n }\n\n /// @dev Gets all authorized addresses.\n /// @return Array of authorized addresses.\n function getAuthorizedAddresses()\n external\n view\n returns (address[] memory)\n {\n return authorities;\n }\n}\n",
- "current/protocol/AssetProxy/interfaces/IAuthorizable.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../../../utils/Ownable/IOwnable.sol\";\n\ncontract IAuthorizable is\n IOwnable\n{\n\n /// @dev Gets all authorized addresses.\n /// @return Array of authorized addresses.\n function getAuthorizedAddresses()\n external\n view\n returns (address[]);\n\n /// @dev Authorizes an address.\n /// @param target Address to authorize.\n function addAuthorizedAddress(address target)\n external;\n\n /// @dev Removes authorizion of an address.\n /// @param target Address to remove authorization from.\n function removeAuthorizedAddress(address target)\n external;\n\n /// @dev Removes authorizion of an address.\n /// @param target Address to remove authorization from.\n /// @param index Index of target in authorities array.\n function removeAuthorizedAddressAtIndex(\n address target,\n uint256 index\n )\n external;\n}\n",
- "current/protocol/AssetProxy/mixins/MAuthorizable.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../interfaces/IAuthorizable.sol\";\n\ncontract MAuthorizable is\n IAuthorizable\n{\n\n // Event logged when a new address is authorized.\n event AuthorizedAddressAdded(\n address indexed target,\n address indexed caller\n );\n\n // Event logged when a currently authorized address is unauthorized.\n event AuthorizedAddressRemoved(\n address indexed target,\n address indexed caller\n );\n\n /// @dev Only authorized addresses can invoke functions with this modifier.\n modifier onlyAuthorized { revert(); _; }\n}\n",
- "current/utils/LibBytes/LibBytes.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.24;\n\nlibrary LibBytes {\n\n using LibBytes for bytes;\n\n /// @dev Gets the memory address for a byte array.\n /// @param input Byte array to lookup.\n /// @return memoryAddress Memory address of byte array. This\n /// points to the header of the byte array which contains\n /// the length.\n function rawAddress(bytes memory input)\n internal\n pure\n returns (uint256 memoryAddress)\n {\n assembly {\n memoryAddress := input\n }\n return memoryAddress;\n }\n \n /// @dev Gets the memory address for the contents of a byte array.\n /// @param input Byte array to lookup.\n /// @return memoryAddress Memory address of the contents of the byte array.\n function contentAddress(bytes memory input)\n internal\n pure\n returns (uint256 memoryAddress)\n {\n assembly {\n memoryAddress := add(input, 32)\n }\n return memoryAddress;\n }\n\n /// @dev Copies `length` bytes from memory location `source` to `dest`.\n /// @param dest memory address to copy bytes to.\n /// @param source memory address to copy bytes from.\n /// @param length number of bytes to copy.\n function memCopy(\n uint256 dest,\n uint256 source,\n uint256 length\n )\n internal\n pure\n {\n if (length < 32) {\n // Handle a partial word by reading destination and masking\n // off the bits we are interested in.\n // This correctly handles overlap, zero lengths and source == dest\n assembly {\n let mask := sub(exp(256, sub(32, length)), 1)\n let s := and(mload(source), not(mask))\n let d := and(mload(dest), mask)\n mstore(dest, or(s, d))\n }\n } else {\n // Skip the O(length) loop when source == dest.\n if (source == dest) {\n return;\n }\n\n // For large copies we copy whole words at a time. The final\n // word is aligned to the end of the range (instead of after the\n // previous) to handle partial words. So a copy will look like this:\n //\n // ####\n // ####\n // ####\n // ####\n //\n // We handle overlap in the source and destination range by\n // changing the copying direction. This prevents us from\n // overwriting parts of source that we still need to copy.\n //\n // This correctly handles source == dest\n //\n if (source > dest) {\n assembly {\n // We subtract 32 from `sEnd` and `dEnd` because it\n // is easier to compare with in the loop, and these\n // are also the addresses we need for copying the\n // last bytes.\n length := sub(length, 32)\n let sEnd := add(source, length)\n let dEnd := add(dest, length)\n\n // Remember the last 32 bytes of source\n // This needs to be done here and not after the loop\n // because we may have overwritten the last bytes in\n // source already due to overlap.\n let last := mload(sEnd)\n\n // Copy whole words front to back\n // Note: the first check is always true,\n // this could have been a do-while loop.\n for {} lt(source, sEnd) {} {\n mstore(dest, mload(source))\n source := add(source, 32)\n dest := add(dest, 32)\n }\n \n // Write the last 32 bytes\n mstore(dEnd, last)\n }\n } else {\n assembly {\n // We subtract 32 from `sEnd` and `dEnd` because those\n // are the starting points when copying a word at the end.\n length := sub(length, 32)\n let sEnd := add(source, length)\n let dEnd := add(dest, length)\n\n // Remember the first 32 bytes of source\n // This needs to be done here and not after the loop\n // because we may have overwritten the first bytes in\n // source already due to overlap.\n let first := mload(source)\n\n // Copy whole words back to front\n // We use a signed comparisson here to allow dEnd to become\n // negative (happens when source and dest < 32). Valid\n // addresses in local memory will never be larger than\n // 2**255, so they can be safely re-interpreted as signed.\n // Note: the first check is always true,\n // this could have been a do-while loop.\n for {} slt(dest, dEnd) {} {\n mstore(dEnd, mload(sEnd))\n sEnd := sub(sEnd, 32)\n dEnd := sub(dEnd, 32)\n }\n \n // Write the first 32 bytes\n mstore(dest, first)\n }\n }\n }\n }\n \n /// @dev Returns a slices from a byte array.\n /// @param b The byte array to take a slice from.\n /// @param from The starting index for the slice (inclusive).\n /// @param to The final index for the slice (exclusive).\n /// @return result The slice containing bytes at indices [from, to)\n function slice(bytes memory b, uint256 from, uint256 to)\n internal\n pure\n returns (bytes memory result)\n {\n require(\n from <= to,\n \"FROM_LESS_THAN_TO_REQUIRED\"\n );\n require(\n to < b.length,\n \"TO_LESS_THAN_LENGTH_REQUIRED\"\n );\n \n // Create a new bytes structure and copy contents\n result = new bytes(to - from);\n memCopy(\n result.contentAddress(),\n b.contentAddress() + from,\n result.length);\n return result;\n }\n \n /// @dev Returns a slice from a byte array without preserving the input.\n /// @param b The byte array to take a slice from. Will be destroyed in the process.\n /// @param from The starting index for the slice (inclusive).\n /// @param to The final index for the slice (exclusive).\n /// @return result The slice containing bytes at indices [from, to)\n /// @dev When `from == 0`, the original array will match the slice. In other cases its state will be corrupted.\n function sliceDestructive(bytes memory b, uint256 from, uint256 to)\n internal\n pure\n returns (bytes memory result)\n {\n require(\n from <= to,\n \"FROM_LESS_THAN_TO_REQUIRED\"\n );\n require(\n to < b.length,\n \"TO_LESS_THAN_LENGTH_REQUIRED\"\n );\n \n // Create a new bytes structure around [from, to) in-place.\n assembly {\n result := add(b, from)\n mstore(result, sub(to, from))\n }\n return result;\n }\n\n /// @dev Pops the last byte off of a byte array by modifying its length.\n /// @param b Byte array that will be modified.\n /// @return The byte that was popped off.\n function popLastByte(bytes memory b)\n internal\n pure\n returns (bytes1 result)\n {\n require(\n b.length > 0,\n \"GREATER_THAN_ZERO_LENGTH_REQUIRED\"\n );\n\n // Store last byte.\n result = b[b.length - 1];\n\n assembly {\n // Decrement length of byte array.\n let newLen := sub(mload(b), 1)\n mstore(b, newLen)\n }\n return result;\n }\n\n /// @dev Pops the last 20 bytes off of a byte array by modifying its length.\n /// @param b Byte array that will be modified.\n /// @return The 20 byte address that was popped off.\n function popLast20Bytes(bytes memory b)\n internal\n pure\n returns (address result)\n {\n require(\n b.length >= 20,\n \"GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\"\n );\n\n // Store last 20 bytes.\n result = readAddress(b, b.length - 20);\n\n assembly {\n // Subtract 20 from byte array length.\n let newLen := sub(mload(b), 20)\n mstore(b, newLen)\n }\n return result;\n }\n\n /// @dev Tests equality of two byte arrays.\n /// @param lhs First byte array to compare.\n /// @param rhs Second byte array to compare.\n /// @return True if arrays are the same. False otherwise.\n function equals(\n bytes memory lhs,\n bytes memory rhs\n )\n internal\n pure\n returns (bool equal)\n {\n // Keccak gas cost is 30 + numWords * 6. This is a cheap way to compare.\n // We early exit on unequal lengths, but keccak would also correctly\n // handle this.\n return lhs.length == rhs.length && keccak256(lhs) == keccak256(rhs);\n }\n\n /// @dev Reads an address from a position in a byte array.\n /// @param b Byte array containing an address.\n /// @param index Index in byte array of address.\n /// @return address from byte array.\n function readAddress(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (address result)\n {\n require(\n b.length >= index + 20, // 20 is length of address\n \"GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\"\n );\n\n // Add offset to index:\n // 1. Arrays are prefixed by 32-byte length parameter (add 32 to index)\n // 2. Account for size difference between address length and 32-byte storage word (subtract 12 from index)\n index += 20;\n\n // Read address from array memory\n assembly {\n // 1. Add index to address of bytes array\n // 2. Load 32-byte word from memory\n // 3. Apply 20-byte mask to obtain address\n result := and(mload(add(b, index)), 0xffffffffffffffffffffffffffffffffffffffff)\n }\n return result;\n }\n\n /// @dev Writes an address into a specific position in a byte array.\n /// @param b Byte array to insert address into.\n /// @param index Index in byte array of address.\n /// @param input Address to put into byte array.\n function writeAddress(\n bytes memory b,\n uint256 index,\n address input\n )\n internal\n pure\n {\n require(\n b.length >= index + 20, // 20 is length of address\n \"GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\"\n );\n\n // Add offset to index:\n // 1. Arrays are prefixed by 32-byte length parameter (add 32 to index)\n // 2. Account for size difference between address length and 32-byte storage word (subtract 12 from index)\n index += 20;\n\n // Store address into array memory\n assembly {\n // The address occupies 20 bytes and mstore stores 32 bytes.\n // First fetch the 32-byte word where we'll be storing the address, then\n // apply a mask so we have only the bytes in the word that the address will not occupy.\n // Then combine these bytes with the address and store the 32 bytes back to memory with mstore.\n\n // 1. Add index to address of bytes array\n // 2. Load 32-byte word from memory\n // 3. Apply 12-byte mask to obtain extra bytes occupying word of memory where we'll store the address\n let neighbors := and(mload(add(b, index)), 0xffffffffffffffffffffffff0000000000000000000000000000000000000000)\n \n // Make sure input address is clean.\n // (Solidity does not guarantee this)\n input := and(input, 0xffffffffffffffffffffffffffffffffffffffff)\n\n // Store the neighbors and address into memory\n mstore(add(b, index), xor(input, neighbors))\n }\n }\n\n /// @dev Reads a bytes32 value from a position in a byte array.\n /// @param b Byte array containing a bytes32 value.\n /// @param index Index in byte array of bytes32 value.\n /// @return bytes32 value from byte array.\n function readBytes32(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (bytes32 result)\n {\n require(\n b.length >= index + 32,\n \"GREATER_OR_EQUAL_TO_32_LENGTH_REQUIRED\"\n );\n\n // Arrays are prefixed by a 256 bit length parameter\n index += 32;\n\n // Read the bytes32 from array memory\n assembly {\n result := mload(add(b, index))\n }\n return result;\n }\n\n /// @dev Writes a bytes32 into a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input bytes32 to put into byte array.\n function writeBytes32(\n bytes memory b,\n uint256 index,\n bytes32 input\n )\n internal\n pure\n {\n require(\n b.length >= index + 32,\n \"GREATER_OR_EQUAL_TO_32_LENGTH_REQUIRED\"\n );\n\n // Arrays are prefixed by a 256 bit length parameter\n index += 32;\n\n // Read the bytes32 from array memory\n assembly {\n mstore(add(b, index), input)\n }\n }\n\n /// @dev Reads a uint256 value from a position in a byte array.\n /// @param b Byte array containing a uint256 value.\n /// @param index Index in byte array of uint256 value.\n /// @return uint256 value from byte array.\n function readUint256(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (uint256 result)\n {\n return uint256(readBytes32(b, index));\n }\n\n /// @dev Writes a uint256 into a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input uint256 to put into byte array.\n function writeUint256(\n bytes memory b,\n uint256 index,\n uint256 input\n )\n internal\n pure\n {\n writeBytes32(b, index, bytes32(input));\n }\n\n /// @dev Reads an unpadded bytes4 value from a position in a byte array.\n /// @param b Byte array containing a bytes4 value.\n /// @param index Index in byte array of bytes4 value.\n /// @return bytes4 value from byte array.\n function readBytes4(\n bytes memory b,\n uint256 index)\n internal\n pure\n returns (bytes4 result)\n {\n require(\n b.length >= index + 4,\n \"GREATER_OR_EQUAL_TO_4_LENGTH_REQUIRED\"\n );\n assembly {\n result := mload(add(b, 32))\n // Solidity does not require us to clean the trailing bytes.\n // We do it anyway\n result := and(result, 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000)\n }\n return result;\n }\n\n /// @dev Reads nested bytes from a specific position.\n /// @dev NOTE: the returned value overlaps with the input value.\n /// Both should be treated as immutable.\n /// @param b Byte array containing nested bytes.\n /// @param index Index of nested bytes.\n /// @return result Nested bytes.\n function readBytesWithLength(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (bytes memory result)\n {\n // Read length of nested bytes\n uint256 nestedBytesLength = readUint256(b, index);\n index += 32;\n\n // Assert length of <b> is valid, given\n // length of nested bytes\n require(\n b.length >= index + nestedBytesLength,\n \"GREATER_OR_EQUAL_TO_NESTED_BYTES_LENGTH_REQUIRED\"\n );\n \n // Return a pointer to the byte array as it exists inside `b`\n assembly {\n result := add(b, index)\n }\n return result;\n }\n\n /// @dev Inserts bytes at a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input bytes to insert.\n function writeBytesWithLength(\n bytes memory b,\n uint256 index,\n bytes memory input\n )\n internal\n pure\n {\n // Assert length of <b> is valid, given\n // length of input\n require(\n b.length >= index + 32 /* 32 bytes to store length */ + input.length,\n \"GREATER_OR_EQUAL_TO_NESTED_BYTES_LENGTH_REQUIRED\"\n );\n\n // Copy <input> into <b>\n memCopy(\n b.contentAddress() + index,\n input.rawAddress(), // includes length of <input>\n input.length + 32 // +32 bytes to store <input> length\n );\n }\n\n /// @dev Performs a deep copy of a byte array onto another byte array of greater than or equal length.\n /// @param dest Byte array that will be overwritten with source bytes.\n /// @param source Byte array to copy onto dest bytes.\n function deepCopyBytes(\n bytes memory dest,\n bytes memory source\n )\n internal\n pure\n {\n uint256 sourceLen = source.length;\n // Dest length must be >= source length, or some bytes would not be copied.\n require(\n dest.length >= sourceLen,\n \"GREATER_OR_EQUAL_TO_SOURCE_BYTES_LENGTH_REQUIRED\"\n );\n memCopy(\n dest.contentAddress(),\n source.contentAddress(),\n sourceLen\n );\n }\n}\n",
- "current/utils/Ownable/IOwnable.sol": "pragma solidity ^0.4.24;\npragma experimental ABIEncoderV2;\n\n/*\n * Ownable\n *\n * Base contract with an owner.\n * Provides onlyOwner modifier, which prevents function from running if it is called by anyone other than the owner.\n */\n\ncontract IOwnable {\n function transferOwnership(address newOwner)\n public;\n}\n",
- "current/utils/Ownable/Ownable.sol": "pragma solidity ^0.4.24;\npragma experimental ABIEncoderV2;\n\n/*\n * Ownable\n *\n * Base contract with an owner.\n * Provides onlyOwner modifier, which prevents function from running if it is called by anyone other than the owner.\n */\n\nimport \"./IOwnable.sol\";\n\ncontract Ownable is IOwnable {\n address public owner;\n\n constructor ()\n public\n {\n owner = msg.sender;\n }\n\n modifier onlyOwner() {\n require(\n msg.sender == owner,\n \"ONLY_CONTRACT_OWNER\"\n );\n _;\n }\n\n function transferOwnership(address newOwner)\n public\n onlyOwner\n {\n if (newOwner != address(0)) {\n owner = newOwner;\n }\n }\n}\n"
+ "2.0.0/protocol/AssetProxy/ERC721Proxy.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.24;\n\nimport \"../../utils/LibBytes/LibBytes.sol\";\nimport \"./MixinAuthorizable.sol\";\n\n\ncontract ERC721Proxy is\n MixinAuthorizable\n{\n // Id of this proxy.\n bytes4 constant internal PROXY_ID = bytes4(keccak256(\"ERC721Token(address,uint256,bytes)\"));\n\n // solhint-disable-next-line payable-fallback\n function () \n external\n {\n assembly {\n // The first 4 bytes of calldata holds the function selector\n let selector := and(calldataload(0), 0xffffffff00000000000000000000000000000000000000000000000000000000)\n\n // `transferFrom` will be called with the following parameters:\n // assetData Encoded byte array.\n // from Address to transfer asset from.\n // to Address to transfer asset to.\n // amount Amount of asset to transfer.\n // bytes4(keccak256(\"transferFrom(bytes,address,address,uint256)\")) = 0xa85e59e4\n if eq(selector, 0xa85e59e400000000000000000000000000000000000000000000000000000000) {\n\n // To lookup a value in a mapping, we load from the storage location keccak256(k, p),\n // where k is the key left padded to 32 bytes and p is the storage slot\n let start := mload(64)\n mstore(start, and(caller, 0xffffffffffffffffffffffffffffffffffffffff))\n mstore(add(start, 32), authorized_slot)\n\n // Revert if authorized[msg.sender] == false\n if iszero(sload(keccak256(start, 64))) {\n // Revert with `Error(\"SENDER_NOT_AUTHORIZED\")`\n mstore(0, 0x08c379a000000000000000000000000000000000000000000000000000000000)\n mstore(32, 0x0000002000000000000000000000000000000000000000000000000000000000)\n mstore(64, 0x0000001553454e4445525f4e4f545f415554484f52495a454400000000000000)\n mstore(96, 0)\n revert(0, 100)\n }\n\n // `transferFrom`.\n // The function is marked `external`, so no abi decodeding is done for\n // us. Instead, we expect the `calldata` memory to contain the\n // following:\n //\n // | Area | Offset | Length | Contents |\n // |----------|--------|---------|-------------------------------------|\n // | Header | 0 | 4 | function selector |\n // | Params | | 4 * 32 | function parameters: |\n // | | 4 | | 1. offset to assetData (*) |\n // | | 36 | | 2. from |\n // | | 68 | | 3. to |\n // | | 100 | | 4. amount |\n // | Data | | | assetData: |\n // | | 132 | 32 | assetData Length |\n // | | 164 | ** | assetData Contents |\n //\n // (*): offset is computed from start of function parameters, so offset\n // by an additional 4 bytes in the calldata.\n //\n // WARNING: The ABIv2 specification allows additional padding between\n // the Params and Data section. This will result in a larger\n // offset to assetData.\n \n // Asset data itself is encoded as follows:\n //\n // | Area | Offset | Length | Contents |\n // |----------|--------|---------|-------------------------------------|\n // | Header | 0 | 4 | function selector |\n // | Params | | 3 * 32 | function parameters: |\n // | | 4 | 12 + 20 | 1. token address |\n // | | 36 | | 2. tokenId |\n // | | 68 | | 3. offset to receiverData (*) |\n // | Data | | | receiverData: |\n // | | 100 | 32 | receiverData Length |\n // | | 132 | ** | receiverData Contents |\n \n // We construct calldata for the `token.safeTransferFrom` ABI.\n // The layout of this calldata is in the table below.\n // \n // | Area | Offset | Length | Contents |\n // |----------|--------|---------|-------------------------------------|\n // | Header | 0 | 4 | function selector |\n // | Params | | 4 * 32 | function parameters: |\n // | | 4 | | 1. from |\n // | | 36 | | 2. to |\n // | | 68 | | 3. tokenId |\n // | | 100 | | 4. offset to receiverData (*) |\n // | Data | | | receiverData: |\n // | | 132 | 32 | receiverData Length |\n // | | 164 | ** | receiverData Contents |\n\n // There exists only 1 of each token.\n // require(amount == 1, \"INVALID_AMOUNT\")\n if sub(calldataload(100), 1) {\n // Revert with `Error(\"INVALID_AMOUNT\")`\n mstore(0, 0x08c379a000000000000000000000000000000000000000000000000000000000)\n mstore(32, 0x0000002000000000000000000000000000000000000000000000000000000000)\n mstore(64, 0x0000000e494e56414c49445f414d4f554e540000000000000000000000000000)\n mstore(96, 0)\n revert(0, 100)\n }\n \n // Require assetData to be at least 132 bytes\n let offset := calldataload(4)\n if lt(calldataload(add(offset, 4)), 132) {\n // Revert with `Error(\"LENGTH_GREATER_THAN_131_REQUIRED\")`\n mstore(0, 0x08c379a000000000000000000000000000000000000000000000000000000000)\n mstore(32, 0x0000002000000000000000000000000000000000000000000000000000000000)\n mstore(64, 0x000000204c454e4754485f475245415445525f5448414e5f3133315f52455155)\n mstore(96, 0x4952454400000000000000000000000000000000000000000000000000000000)\n revert(0, 100)\n }\n \n /////// Setup State ///////\n // `cdStart` is the start of the calldata for\n // `token.safeTransferFrom` (equal to free memory ptr).\n let cdStart := mload(64)\n // `dataAreaLength` is the total number of words\n // needed to store `receiverData`\n // As-per the ABI spec, this value is padded up to\n // the nearest multiple of 32,\n // and includes 32-bytes for length.\n // It's calculated as folows:\n // - Unpadded length in bytes = `mload(receiverData) + 32`\n // - Add 31 to convert rounding down to rounding up.\n // Combined with the previous and this is `63`.\n // - Round down to nearest multiple of 32 by clearing\n // bits 0x1F. This is done with `and` and a mask.\n\n /////// Setup Header Area ///////\n // This area holds the 4-byte `transferFromSelector`.\n // Any trailing data in transferFromSelector will be\n // overwritten in the next `mstore` call.\n mstore(cdStart, 0xb88d4fde00000000000000000000000000000000000000000000000000000000)\n \n /////// Setup Params Area ///////\n // Each parameter is padded to 32-bytes.\n // The entire Params Area is 128 bytes.\n // Notes:\n // 1. A 20-byte mask is applied to addresses\n // to zero-out the unused bytes.\n // 2. The offset to `receiverData` is the length\n // of the Params Area (128 bytes).\n \n let length := calldataload(add(offset, 136))\n let token := calldataload(add(offset, 40))\n \n // Round length up to multiple of 32\n length := and(add(length, 31), 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0)\n \n // Copy `from` and `to`\n calldatacopy(add(cdStart, 4), 36, 64)\n \n // TokenId\n mstore(add(cdStart, 68), calldataload(add(offset, 72)))\n \n // Offset to receiverData\n mstore(add(cdStart, 100), 128)\n \n // receiverData (including length)\n calldatacopy(add(cdStart, 132), add(offset, 136), add(length, 32))\n \n /////// Call `token.safeTransferFrom` using the calldata ///////\n let success := call(\n gas, // forward all gas\n token, // call address of token contract\n 0, // don't send any ETH\n cdStart, // pointer to start of input\n add(length, 164), // length of input\n 0, // write output to null\n 0 // output size is 0 bytes\n )\n if success {\n return(0, 0)\n }\n \n // Revert with `Error(\"TRANSFER_FAILED\")`\n mstore(0, 0x08c379a000000000000000000000000000000000000000000000000000000000)\n mstore(32, 0x0000002000000000000000000000000000000000000000000000000000000000)\n mstore(64, 0x0000000f5452414e534645525f4641494c454400000000000000000000000000)\n mstore(96, 0)\n revert(0, 100)\n }\n }\n }\n\n /// @dev Gets the proxy id associated with the proxy address.\n /// @return Proxy id.\n function getProxyId()\n external\n pure\n returns (bytes4)\n {\n return PROXY_ID;\n }\n}\n",
+ "2.0.0/protocol/AssetProxy/MixinAuthorizable.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.24;\n\nimport \"../../utils/Ownable/Ownable.sol\";\nimport \"./mixins/MAuthorizable.sol\";\n\n\ncontract MixinAuthorizable is\n Ownable,\n MAuthorizable\n{\n\n /// @dev Only authorized addresses can invoke functions with this modifier.\n modifier onlyAuthorized {\n require(\n authorized[msg.sender],\n \"SENDER_NOT_AUTHORIZED\"\n );\n _;\n }\n\n mapping (address => bool) public authorized;\n address[] public authorities;\n\n /// @dev Authorizes an address.\n /// @param target Address to authorize.\n function addAuthorizedAddress(address target)\n external\n onlyOwner\n {\n require(\n !authorized[target],\n \"TARGET_ALREADY_AUTHORIZED\"\n );\n\n authorized[target] = true;\n authorities.push(target);\n emit AuthorizedAddressAdded(target, msg.sender);\n }\n\n /// @dev Removes authorizion of an address.\n /// @param target Address to remove authorization from.\n function removeAuthorizedAddress(address target)\n external\n onlyOwner\n {\n require(\n authorized[target],\n \"TARGET_NOT_AUTHORIZED\"\n );\n\n delete authorized[target];\n for (uint256 i = 0; i < authorities.length; i++) {\n if (authorities[i] == target) {\n authorities[i] = authorities[authorities.length - 1];\n authorities.length -= 1;\n break;\n }\n }\n emit AuthorizedAddressRemoved(target, msg.sender);\n }\n\n /// @dev Removes authorizion of an address.\n /// @param target Address to remove authorization from.\n /// @param index Index of target in authorities array.\n function removeAuthorizedAddressAtIndex(\n address target,\n uint256 index\n )\n external\n onlyOwner\n {\n require(\n authorized[target],\n \"TARGET_NOT_AUTHORIZED\"\n );\n require(\n index < authorities.length,\n \"INDEX_OUT_OF_BOUNDS\"\n );\n require(\n authorities[index] == target,\n \"AUTHORIZED_ADDRESS_MISMATCH\"\n );\n\n delete authorized[target];\n authorities[index] = authorities[authorities.length - 1];\n authorities.length -= 1;\n emit AuthorizedAddressRemoved(target, msg.sender);\n }\n\n /// @dev Gets all authorized addresses.\n /// @return Array of authorized addresses.\n function getAuthorizedAddresses()\n external\n view\n returns (address[] memory)\n {\n return authorities;\n }\n}\n",
+ "2.0.0/protocol/AssetProxy/interfaces/IAuthorizable.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.24;\n\nimport \"../../../utils/Ownable/IOwnable.sol\";\n\n\ncontract IAuthorizable is\n IOwnable\n{\n\n /// @dev Authorizes an address.\n /// @param target Address to authorize.\n function addAuthorizedAddress(address target)\n external;\n\n /// @dev Removes authorizion of an address.\n /// @param target Address to remove authorization from.\n function removeAuthorizedAddress(address target)\n external;\n\n /// @dev Removes authorizion of an address.\n /// @param target Address to remove authorization from.\n /// @param index Index of target in authorities array.\n function removeAuthorizedAddressAtIndex(\n address target,\n uint256 index\n )\n external;\n \n /// @dev Gets all authorized addresses.\n /// @return Array of authorized addresses.\n function getAuthorizedAddresses()\n external\n view\n returns (address[] memory);\n}\n",
+ "2.0.0/protocol/AssetProxy/mixins/MAuthorizable.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.24;\n\nimport \"../interfaces/IAuthorizable.sol\";\n\n\ncontract MAuthorizable is\n IAuthorizable\n{\n\n // Event logged when a new address is authorized.\n event AuthorizedAddressAdded(\n address indexed target,\n address indexed caller\n );\n\n // Event logged when a currently authorized address is unauthorized.\n event AuthorizedAddressRemoved(\n address indexed target,\n address indexed caller\n );\n\n /// @dev Only authorized addresses can invoke functions with this modifier.\n modifier onlyAuthorized { revert(); _; }\n}\n",
+ "2.0.0/utils/LibBytes/LibBytes.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.24;\n\n\nlibrary LibBytes {\n\n using LibBytes for bytes;\n\n /// @dev Gets the memory address for a byte array.\n /// @param input Byte array to lookup.\n /// @return memoryAddress Memory address of byte array. This\n /// points to the header of the byte array which contains\n /// the length.\n function rawAddress(bytes memory input)\n internal\n pure\n returns (uint256 memoryAddress)\n {\n assembly {\n memoryAddress := input\n }\n return memoryAddress;\n }\n \n /// @dev Gets the memory address for the contents of a byte array.\n /// @param input Byte array to lookup.\n /// @return memoryAddress Memory address of the contents of the byte array.\n function contentAddress(bytes memory input)\n internal\n pure\n returns (uint256 memoryAddress)\n {\n assembly {\n memoryAddress := add(input, 32)\n }\n return memoryAddress;\n }\n\n /// @dev Copies `length` bytes from memory location `source` to `dest`.\n /// @param dest memory address to copy bytes to.\n /// @param source memory address to copy bytes from.\n /// @param length number of bytes to copy.\n function memCopy(\n uint256 dest,\n uint256 source,\n uint256 length\n )\n internal\n pure\n {\n if (length < 32) {\n // Handle a partial word by reading destination and masking\n // off the bits we are interested in.\n // This correctly handles overlap, zero lengths and source == dest\n assembly {\n let mask := sub(exp(256, sub(32, length)), 1)\n let s := and(mload(source), not(mask))\n let d := and(mload(dest), mask)\n mstore(dest, or(s, d))\n }\n } else {\n // Skip the O(length) loop when source == dest.\n if (source == dest) {\n return;\n }\n\n // For large copies we copy whole words at a time. The final\n // word is aligned to the end of the range (instead of after the\n // previous) to handle partial words. So a copy will look like this:\n //\n // ####\n // ####\n // ####\n // ####\n //\n // We handle overlap in the source and destination range by\n // changing the copying direction. This prevents us from\n // overwriting parts of source that we still need to copy.\n //\n // This correctly handles source == dest\n //\n if (source > dest) {\n assembly {\n // We subtract 32 from `sEnd` and `dEnd` because it\n // is easier to compare with in the loop, and these\n // are also the addresses we need for copying the\n // last bytes.\n length := sub(length, 32)\n let sEnd := add(source, length)\n let dEnd := add(dest, length)\n\n // Remember the last 32 bytes of source\n // This needs to be done here and not after the loop\n // because we may have overwritten the last bytes in\n // source already due to overlap.\n let last := mload(sEnd)\n\n // Copy whole words front to back\n // Note: the first check is always true,\n // this could have been a do-while loop.\n // solhint-disable-next-line no-empty-blocks\n for {} lt(source, sEnd) {} {\n mstore(dest, mload(source))\n source := add(source, 32)\n dest := add(dest, 32)\n }\n \n // Write the last 32 bytes\n mstore(dEnd, last)\n }\n } else {\n assembly {\n // We subtract 32 from `sEnd` and `dEnd` because those\n // are the starting points when copying a word at the end.\n length := sub(length, 32)\n let sEnd := add(source, length)\n let dEnd := add(dest, length)\n\n // Remember the first 32 bytes of source\n // This needs to be done here and not after the loop\n // because we may have overwritten the first bytes in\n // source already due to overlap.\n let first := mload(source)\n\n // Copy whole words back to front\n // We use a signed comparisson here to allow dEnd to become\n // negative (happens when source and dest < 32). Valid\n // addresses in local memory will never be larger than\n // 2**255, so they can be safely re-interpreted as signed.\n // Note: the first check is always true,\n // this could have been a do-while loop.\n // solhint-disable-next-line no-empty-blocks\n for {} slt(dest, dEnd) {} {\n mstore(dEnd, mload(sEnd))\n sEnd := sub(sEnd, 32)\n dEnd := sub(dEnd, 32)\n }\n \n // Write the first 32 bytes\n mstore(dest, first)\n }\n }\n }\n }\n\n /// @dev Returns a slices from a byte array.\n /// @param b The byte array to take a slice from.\n /// @param from The starting index for the slice (inclusive).\n /// @param to The final index for the slice (exclusive).\n /// @return result The slice containing bytes at indices [from, to)\n function slice(\n bytes memory b,\n uint256 from,\n uint256 to\n )\n internal\n pure\n returns (bytes memory result)\n {\n require(\n from <= to,\n \"FROM_LESS_THAN_TO_REQUIRED\"\n );\n require(\n to < b.length,\n \"TO_LESS_THAN_LENGTH_REQUIRED\"\n );\n \n // Create a new bytes structure and copy contents\n result = new bytes(to - from);\n memCopy(\n result.contentAddress(),\n b.contentAddress() + from,\n result.length);\n return result;\n }\n \n /// @dev Returns a slice from a byte array without preserving the input.\n /// @param b The byte array to take a slice from. Will be destroyed in the process.\n /// @param from The starting index for the slice (inclusive).\n /// @param to The final index for the slice (exclusive).\n /// @return result The slice containing bytes at indices [from, to)\n /// @dev When `from == 0`, the original array will match the slice. In other cases its state will be corrupted.\n function sliceDestructive(\n bytes memory b,\n uint256 from,\n uint256 to\n )\n internal\n pure\n returns (bytes memory result)\n {\n require(\n from <= to,\n \"FROM_LESS_THAN_TO_REQUIRED\"\n );\n require(\n to < b.length,\n \"TO_LESS_THAN_LENGTH_REQUIRED\"\n );\n \n // Create a new bytes structure around [from, to) in-place.\n assembly {\n result := add(b, from)\n mstore(result, sub(to, from))\n }\n return result;\n }\n\n /// @dev Pops the last byte off of a byte array by modifying its length.\n /// @param b Byte array that will be modified.\n /// @return The byte that was popped off.\n function popLastByte(bytes memory b)\n internal\n pure\n returns (bytes1 result)\n {\n require(\n b.length > 0,\n \"GREATER_THAN_ZERO_LENGTH_REQUIRED\"\n );\n\n // Store last byte.\n result = b[b.length - 1];\n\n assembly {\n // Decrement length of byte array.\n let newLen := sub(mload(b), 1)\n mstore(b, newLen)\n }\n return result;\n }\n\n /// @dev Pops the last 20 bytes off of a byte array by modifying its length.\n /// @param b Byte array that will be modified.\n /// @return The 20 byte address that was popped off.\n function popLast20Bytes(bytes memory b)\n internal\n pure\n returns (address result)\n {\n require(\n b.length >= 20,\n \"GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\"\n );\n\n // Store last 20 bytes.\n result = readAddress(b, b.length - 20);\n\n assembly {\n // Subtract 20 from byte array length.\n let newLen := sub(mload(b), 20)\n mstore(b, newLen)\n }\n return result;\n }\n\n /// @dev Tests equality of two byte arrays.\n /// @param lhs First byte array to compare.\n /// @param rhs Second byte array to compare.\n /// @return True if arrays are the same. False otherwise.\n function equals(\n bytes memory lhs,\n bytes memory rhs\n )\n internal\n pure\n returns (bool equal)\n {\n // Keccak gas cost is 30 + numWords * 6. This is a cheap way to compare.\n // We early exit on unequal lengths, but keccak would also correctly\n // handle this.\n return lhs.length == rhs.length && keccak256(lhs) == keccak256(rhs);\n }\n\n /// @dev Reads an address from a position in a byte array.\n /// @param b Byte array containing an address.\n /// @param index Index in byte array of address.\n /// @return address from byte array.\n function readAddress(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (address result)\n {\n require(\n b.length >= index + 20, // 20 is length of address\n \"GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\"\n );\n\n // Add offset to index:\n // 1. Arrays are prefixed by 32-byte length parameter (add 32 to index)\n // 2. Account for size difference between address length and 32-byte storage word (subtract 12 from index)\n index += 20;\n\n // Read address from array memory\n assembly {\n // 1. Add index to address of bytes array\n // 2. Load 32-byte word from memory\n // 3. Apply 20-byte mask to obtain address\n result := and(mload(add(b, index)), 0xffffffffffffffffffffffffffffffffffffffff)\n }\n return result;\n }\n\n /// @dev Writes an address into a specific position in a byte array.\n /// @param b Byte array to insert address into.\n /// @param index Index in byte array of address.\n /// @param input Address to put into byte array.\n function writeAddress(\n bytes memory b,\n uint256 index,\n address input\n )\n internal\n pure\n {\n require(\n b.length >= index + 20, // 20 is length of address\n \"GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\"\n );\n\n // Add offset to index:\n // 1. Arrays are prefixed by 32-byte length parameter (add 32 to index)\n // 2. Account for size difference between address length and 32-byte storage word (subtract 12 from index)\n index += 20;\n\n // Store address into array memory\n assembly {\n // The address occupies 20 bytes and mstore stores 32 bytes.\n // First fetch the 32-byte word where we'll be storing the address, then\n // apply a mask so we have only the bytes in the word that the address will not occupy.\n // Then combine these bytes with the address and store the 32 bytes back to memory with mstore.\n\n // 1. Add index to address of bytes array\n // 2. Load 32-byte word from memory\n // 3. Apply 12-byte mask to obtain extra bytes occupying word of memory where we'll store the address\n let neighbors := and(\n mload(add(b, index)),\n 0xffffffffffffffffffffffff0000000000000000000000000000000000000000\n )\n \n // Make sure input address is clean.\n // (Solidity does not guarantee this)\n input := and(input, 0xffffffffffffffffffffffffffffffffffffffff)\n\n // Store the neighbors and address into memory\n mstore(add(b, index), xor(input, neighbors))\n }\n }\n\n /// @dev Reads a bytes32 value from a position in a byte array.\n /// @param b Byte array containing a bytes32 value.\n /// @param index Index in byte array of bytes32 value.\n /// @return bytes32 value from byte array.\n function readBytes32(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (bytes32 result)\n {\n require(\n b.length >= index + 32,\n \"GREATER_OR_EQUAL_TO_32_LENGTH_REQUIRED\"\n );\n\n // Arrays are prefixed by a 256 bit length parameter\n index += 32;\n\n // Read the bytes32 from array memory\n assembly {\n result := mload(add(b, index))\n }\n return result;\n }\n\n /// @dev Writes a bytes32 into a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input bytes32 to put into byte array.\n function writeBytes32(\n bytes memory b,\n uint256 index,\n bytes32 input\n )\n internal\n pure\n {\n require(\n b.length >= index + 32,\n \"GREATER_OR_EQUAL_TO_32_LENGTH_REQUIRED\"\n );\n\n // Arrays are prefixed by a 256 bit length parameter\n index += 32;\n\n // Read the bytes32 from array memory\n assembly {\n mstore(add(b, index), input)\n }\n }\n\n /// @dev Reads a uint256 value from a position in a byte array.\n /// @param b Byte array containing a uint256 value.\n /// @param index Index in byte array of uint256 value.\n /// @return uint256 value from byte array.\n function readUint256(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (uint256 result)\n {\n return uint256(readBytes32(b, index));\n }\n\n /// @dev Writes a uint256 into a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input uint256 to put into byte array.\n function writeUint256(\n bytes memory b,\n uint256 index,\n uint256 input\n )\n internal\n pure\n {\n writeBytes32(b, index, bytes32(input));\n }\n\n /// @dev Reads an unpadded bytes4 value from a position in a byte array.\n /// @param b Byte array containing a bytes4 value.\n /// @param index Index in byte array of bytes4 value.\n /// @return bytes4 value from byte array.\n function readBytes4(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (bytes4 result)\n {\n require(\n b.length >= index + 4,\n \"GREATER_OR_EQUAL_TO_4_LENGTH_REQUIRED\"\n );\n assembly {\n result := mload(add(b, 32))\n // Solidity does not require us to clean the trailing bytes.\n // We do it anyway\n result := and(result, 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000)\n }\n return result;\n }\n\n /// @dev Reads nested bytes from a specific position.\n /// @dev NOTE: the returned value overlaps with the input value.\n /// Both should be treated as immutable.\n /// @param b Byte array containing nested bytes.\n /// @param index Index of nested bytes.\n /// @return result Nested bytes.\n function readBytesWithLength(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (bytes memory result)\n {\n // Read length of nested bytes\n uint256 nestedBytesLength = readUint256(b, index);\n index += 32;\n\n // Assert length of <b> is valid, given\n // length of nested bytes\n require(\n b.length >= index + nestedBytesLength,\n \"GREATER_OR_EQUAL_TO_NESTED_BYTES_LENGTH_REQUIRED\"\n );\n \n // Return a pointer to the byte array as it exists inside `b`\n assembly {\n result := add(b, index)\n }\n return result;\n }\n\n /// @dev Inserts bytes at a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input bytes to insert.\n function writeBytesWithLength(\n bytes memory b,\n uint256 index,\n bytes memory input\n )\n internal\n pure\n {\n // Assert length of <b> is valid, given\n // length of input\n require(\n b.length >= index + 32 + input.length, // 32 bytes to store length\n \"GREATER_OR_EQUAL_TO_NESTED_BYTES_LENGTH_REQUIRED\"\n );\n\n // Copy <input> into <b>\n memCopy(\n b.contentAddress() + index,\n input.rawAddress(), // includes length of <input>\n input.length + 32 // +32 bytes to store <input> length\n );\n }\n\n /// @dev Performs a deep copy of a byte array onto another byte array of greater than or equal length.\n /// @param dest Byte array that will be overwritten with source bytes.\n /// @param source Byte array to copy onto dest bytes.\n function deepCopyBytes(\n bytes memory dest,\n bytes memory source\n )\n internal\n pure\n {\n uint256 sourceLen = source.length;\n // Dest length must be >= source length, or some bytes would not be copied.\n require(\n dest.length >= sourceLen,\n \"GREATER_OR_EQUAL_TO_SOURCE_BYTES_LENGTH_REQUIRED\"\n );\n memCopy(\n dest.contentAddress(),\n source.contentAddress(),\n sourceLen\n );\n }\n}\n",
+ "2.0.0/utils/Ownable/IOwnable.sol": "pragma solidity 0.4.24;\n\n/*\n * Ownable\n *\n * Base contract with an owner.\n * Provides onlyOwner modifier, which prevents function from running if it is called by anyone other than the owner.\n */\n\ncontract IOwnable {\n function transferOwnership(address newOwner)\n public;\n}\n",
+ "2.0.0/utils/Ownable/Ownable.sol": "pragma solidity 0.4.24;\n\n/*\n * Ownable\n *\n * Base contract with an owner.\n * Provides onlyOwner modifier, which prevents function from running if it is called by anyone other than the owner.\n */\n\nimport \"./IOwnable.sol\";\n\n\ncontract Ownable is IOwnable {\n address public owner;\n\n constructor ()\n public\n {\n owner = msg.sender;\n }\n\n modifier onlyOwner() {\n require(\n msg.sender == owner,\n \"ONLY_CONTRACT_OWNER\"\n );\n _;\n }\n\n function transferOwnership(address newOwner)\n public\n onlyOwner\n {\n if (newOwner != address(0)) {\n owner = newOwner;\n }\n }\n}\n"
},
- "sourceTreeHashHex": "0xe83596e2b65d27690437ee627ef672d1b899ab98ebb66b4a0238ff1e8f442ba4",
+ "sourceTreeHashHex": "0x35c34008b18bef3b0eb7605f70e81487f22fef727a30cf8aa7789c35e4bb6255",
"compiler": {
"name": "solc",
"version": "soljson-v0.4.24+commit.e67f0147.js",
diff --git a/packages/migrations/artifacts/2.0.0/ERC721Token.json b/packages/migrations/artifacts/2.0.0/ERC721Token.json
index 87eca3183..ea18faed9 100644
--- a/packages/migrations/artifacts/2.0.0/ERC721Token.json
+++ b/packages/migrations/artifacts/2.0.0/ERC721Token.json
@@ -321,39 +321,39 @@
"evm": {
"bytecode": {
"linkReferences": {},
- "object": "0x608060405234801561001057600080fd5b50604051610f60380380610f608339810160405280516020808301519183018051909392909201916100489160009190850190610064565b50805161005c906001906020840190610064565b5050506100ff565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100a557805160ff19168380011785556100d2565b828001600101855582156100d2579182015b828111156100d25782518255916020019190600101906100b7565b506100de9291506100e2565b5090565b6100fc91905b808211156100de57600081556001016100e8565b90565b610e528061010e6000396000f3006080604052600436106100b95763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde0381146100be578063081812fc14610148578063095ea7b31461018957806323b872dd146101bc57806342842e0e146101f35780634f558e791461022a5780636352211e1461025657806370a082311461026e57806395d89b41146102ae578063a22cb465146102c3578063b88d4fde146102f6578063e985e9c514610372575b600080fd5b3480156100ca57600080fd5b506100d36103a6565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561010d5781810151838201526020016100f5565b50505050905090810190601f16801561013a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561015457600080fd5b5061016060043561045a565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561019557600080fd5b506101ba73ffffffffffffffffffffffffffffffffffffffff60043516602435610482565b005b3480156101c857600080fd5b506101ba73ffffffffffffffffffffffffffffffffffffffff600435811690602435166044356105c0565b3480156101ff57600080fd5b506101ba73ffffffffffffffffffffffffffffffffffffffff600435811690602435166044356106a3565b34801561023657600080fd5b506102426004356106db565b604080519115158252519081900360200190f35b34801561026257600080fd5b50610160600435610705565b34801561027a57600080fd5b5061029c73ffffffffffffffffffffffffffffffffffffffff6004351661073c565b60408051918252519081900360200190f35b3480156102ba57600080fd5b506100d3610789565b3480156102cf57600080fd5b506101ba73ffffffffffffffffffffffffffffffffffffffff600435166024351515610807565b34801561030257600080fd5b50604080516020601f6064356004818101359283018490048402850184019095528184526101ba9473ffffffffffffffffffffffffffffffffffffffff81358116956024803590921695604435953695608494019181908401838280828437509497506108c39650505050505050565b34801561037e57600080fd5b5061024273ffffffffffffffffffffffffffffffffffffffff60043581169060243516610902565b60008054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104505780601f1061042557610100808354040283529160200191610450565b820191906000526020600020905b81548152906001019060200180831161043357829003601f168201915b5050505050905090565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b600061048d82610705565b905073ffffffffffffffffffffffffffffffffffffffff83811690821614156104b557600080fd5b3373ffffffffffffffffffffffffffffffffffffffff821614806104de57506104de8133610902565b15156104e957600080fd5b60006104f48361045a565b73ffffffffffffffffffffffffffffffffffffffff1614158061052c575073ffffffffffffffffffffffffffffffffffffffff831615155b156105bb5760008281526003602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff878116918217909255835186815293519093918516927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35b505050565b806105cb338261093d565b15156105d657600080fd5b73ffffffffffffffffffffffffffffffffffffffff841615156105f857600080fd5b73ffffffffffffffffffffffffffffffffffffffff8316151561061a57600080fd5b61062484836109d0565b61062e8483610abd565b6106388383610b8c565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a350505050565b806106ae338261093d565b15156106b957600080fd5b6106d584848460206040519081016040528060008152506108c3565b50505050565b60009081526002602052604090205473ffffffffffffffffffffffffffffffffffffffff16151590565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff1680151561073657600080fd5b92915050565b600073ffffffffffffffffffffffffffffffffffffffff8216151561076057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff1660009081526004602052604090205490565b60018054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010087891615020190951694909404938401819004810282018101909252828152606093909290918301828280156104505780601f1061042557610100808354040283529160200191610450565b73ffffffffffffffffffffffffffffffffffffffff821633141561082a57600080fd5b33600081815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b816108ce338261093d565b15156108d957600080fd5b6108e48585856105c0565b6108f085858585610c4f565b15156108fb57600080fd5b5050505050565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b60008061094983610705565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806109b857508373ffffffffffffffffffffffffffffffffffffffff166109a08461045a565b73ffffffffffffffffffffffffffffffffffffffff16145b806109c857506109c88185610902565b949350505050565b8173ffffffffffffffffffffffffffffffffffffffff166109f082610705565b73ffffffffffffffffffffffffffffffffffffffff1614610a1057600080fd5b60008181526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1615610ab957600081815260036020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690558051848152905173ffffffffffffffffffffffffffffffffffffffff8616927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35b5050565b8173ffffffffffffffffffffffffffffffffffffffff16610add82610705565b73ffffffffffffffffffffffffffffffffffffffff1614610afd57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260046020526040902054610b2e906001610df6565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526004602090815260408083209490945591815260029091522080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1615610bbb57600080fd5b600081815260026020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff871690811790915583526004909152902054610c22906001610e08565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526004602052604090209190915550565b600080610c5b85610e1e565b1515610c6a5760019150610ded565b8473ffffffffffffffffffffffffffffffffffffffff1663f0b9e5ba8786866040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610d29578181015183820152602001610d11565b50505050905090810190601f168015610d565780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b158015610d7757600080fd5b505af1158015610d8b573d6000803e3d6000fd5b505050506040513d6020811015610da157600080fd5b50517fffffffff0000000000000000000000000000000000000000000000000000000081167ff0b9e5ba0000000000000000000000000000000000000000000000000000000014925090505b50949350505050565b600082821115610e0257fe5b50900390565b600082820183811015610e1757fe5b9392505050565b6000903b11905600a165627a7a7230582004558fc9858a51e11dc082481a3160384756a03fb45a249a2295bf567358fb3c0029",
- "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0xF60 CODESIZE SUB DUP1 PUSH2 0xF60 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 MSTORE DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP2 DUP4 ADD DUP1 MLOAD SWAP1 SWAP4 SWAP3 SWAP1 SWAP3 ADD SWAP2 PUSH2 0x48 SWAP2 PUSH1 0x0 SWAP2 SWAP1 DUP6 ADD SWAP1 PUSH2 0x64 JUMP JUMPDEST POP DUP1 MLOAD PUSH2 0x5C SWAP1 PUSH1 0x1 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x64 JUMP JUMPDEST POP POP POP PUSH2 0xFF JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0xA5 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0xD2 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0xD2 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0xD2 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0xB7 JUMP JUMPDEST POP PUSH2 0xDE SWAP3 SWAP2 POP PUSH2 0xE2 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0xFC SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0xDE JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0xE8 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0xE52 DUP1 PUSH2 0x10E PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xB9 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x6FDDE03 DUP2 EQ PUSH2 0xBE JUMPI DUP1 PUSH4 0x81812FC EQ PUSH2 0x148 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x189 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1BC JUMPI DUP1 PUSH4 0x42842E0E EQ PUSH2 0x1F3 JUMPI DUP1 PUSH4 0x4F558E79 EQ PUSH2 0x22A JUMPI DUP1 PUSH4 0x6352211E EQ PUSH2 0x256 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x26E JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x2AE JUMPI DUP1 PUSH4 0xA22CB465 EQ PUSH2 0x2C3 JUMPI DUP1 PUSH4 0xB88D4FDE EQ PUSH2 0x2F6 JUMPI DUP1 PUSH4 0xE985E9C5 EQ PUSH2 0x372 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD3 PUSH2 0x3A6 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 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x10D JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xF5 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x13A 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 DUP1 ISZERO PUSH2 0x154 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x160 PUSH1 0x4 CALLDATALOAD PUSH2 0x45A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x195 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BA PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD PUSH2 0x482 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BA PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH1 0x44 CALLDATALOAD PUSH2 0x5C0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BA PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH1 0x44 CALLDATALOAD PUSH2 0x6A3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x236 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x242 PUSH1 0x4 CALLDATALOAD PUSH2 0x6DB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x262 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x160 PUSH1 0x4 CALLDATALOAD PUSH2 0x705 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x27A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x29C PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x73C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD3 PUSH2 0x789 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BA PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD ISZERO ISZERO PUSH2 0x807 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x302 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x64 CALLDATALOAD PUSH1 0x4 DUP2 DUP2 ADD CALLDATALOAD SWAP3 DUP4 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP2 DUP5 MSTORE PUSH2 0x1BA SWAP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD DUP2 AND SWAP6 PUSH1 0x24 DUP1 CALLDATALOAD SWAP1 SWAP3 AND SWAP6 PUSH1 0x44 CALLDATALOAD SWAP6 CALLDATASIZE SWAP6 PUSH1 0x84 SWAP5 ADD SWAP2 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x8C3 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x37E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x242 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH2 0x902 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x450 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x425 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x450 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x433 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x48D DUP3 PUSH2 0x705 JUMP JUMPDEST SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP1 DUP3 AND EQ ISZERO PUSH2 0x4B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND EQ DUP1 PUSH2 0x4DE JUMPI POP PUSH2 0x4DE DUP2 CALLER PUSH2 0x902 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x4E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x4F4 DUP4 PUSH2 0x45A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 PUSH2 0x52C JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x5BB JUMPI PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND SWAP2 DUP3 OR SWAP1 SWAP3 SSTORE DUP4 MLOAD DUP7 DUP2 MSTORE SWAP4 MLOAD SWAP1 SWAP4 SWAP2 DUP6 AND SWAP3 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG3 JUMPDEST POP POP POP JUMP JUMPDEST DUP1 PUSH2 0x5CB CALLER DUP3 PUSH2 0x93D JUMP JUMPDEST ISZERO ISZERO PUSH2 0x5D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND ISZERO ISZERO PUSH2 0x5F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND ISZERO ISZERO PUSH2 0x61A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x624 DUP5 DUP4 PUSH2 0x9D0 JUMP JUMPDEST PUSH2 0x62E DUP5 DUP4 PUSH2 0xABD JUMP JUMPDEST PUSH2 0x638 DUP4 DUP4 PUSH2 0xB8C JUMP JUMPDEST DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP5 PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP JUMP JUMPDEST DUP1 PUSH2 0x6AE CALLER DUP3 PUSH2 0x93D JUMP JUMPDEST ISZERO ISZERO PUSH2 0x6B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x6D5 DUP5 DUP5 DUP5 PUSH1 0x20 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH2 0x8C3 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO ISZERO PUSH2 0x736 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND ISZERO ISZERO PUSH2 0x760 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 DUP8 DUP10 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x450 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x425 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x450 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND CALLER EQ ISZERO PUSH2 0x82A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP7 ISZERO ISZERO SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP2 MLOAD SWAP1 DUP2 MSTORE SWAP1 MLOAD SWAP3 SWAP4 SWAP3 PUSH32 0x17307EAB39AB6107E8899845AD3D59BD9653F200F220920489CA2B5937696C31 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST DUP2 PUSH2 0x8CE CALLER DUP3 PUSH2 0x93D JUMP JUMPDEST ISZERO ISZERO PUSH2 0x8D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8E4 DUP6 DUP6 DUP6 PUSH2 0x5C0 JUMP JUMPDEST PUSH2 0x8F0 DUP6 DUP6 DUP6 DUP6 PUSH2 0xC4F JUMP JUMPDEST ISZERO ISZERO PUSH2 0x8FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x949 DUP4 PUSH2 0x705 JUMP JUMPDEST SWAP1 POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ DUP1 PUSH2 0x9B8 JUMPI POP DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x9A0 DUP5 PUSH2 0x45A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ JUMPDEST DUP1 PUSH2 0x9C8 JUMPI POP PUSH2 0x9C8 DUP2 DUP6 PUSH2 0x902 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x9F0 DUP3 PUSH2 0x705 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xA10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0xAB9 JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE DUP1 MLOAD DUP5 DUP2 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP3 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG3 JUMPDEST POP POP JUMP JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xADD DUP3 PUSH2 0x705 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xAFD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xB2E SWAP1 PUSH1 0x1 PUSH2 0xDF6 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE SWAP2 DUP2 MSTORE PUSH1 0x2 SWAP1 SWAP2 MSTORE KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0xBBB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP4 MSTORE PUSH1 0x4 SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0xC22 SWAP1 PUSH1 0x1 PUSH2 0xE08 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xC5B DUP6 PUSH2 0xE1E JUMP JUMPDEST ISZERO ISZERO PUSH2 0xC6A JUMPI PUSH1 0x1 SWAP2 POP PUSH2 0xDED JUMP JUMPDEST DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xF0B9E5BA DUP8 DUP7 DUP7 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH29 0x100000000000000000000000000000000000000000000000000000000 MUL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xD29 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xD11 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xD56 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 SWAP5 POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xD77 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xD8B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xDA1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH32 0xF0B9E5BA00000000000000000000000000000000000000000000000000000000 EQ SWAP3 POP SWAP1 POP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 GT ISZERO PUSH2 0xE02 JUMPI INVALID JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0xE17 JUMPI INVALID JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP1 EXTCODESIZE GT SWAP1 JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 DIV SSTORE DUP16 0xc9 DUP6 DUP11 MLOAD 0xe1 SAR 0xc0 DUP3 0x48 BYTE BALANCE PUSH1 0x38 0x47 JUMP LOG0 0x3f 0xb4 GAS 0x24 SWAP11 0x22 SWAP6 0xbf JUMP PUSH20 0x58FB3C0029000000000000000000000000000000 ",
- "sourceMap": "1506:12635:0:-;;;2788:144;8:9:-1;5:2;;;30:1;27;20:12;5:2;2788:144:0;;;;;;;;;;;;;;;;;;;;;;;;2885:13;;2788:144;;;;;;;2885:13;;:5;;:13;;;;;:::i;:::-;-1:-1:-1;2908:17:0;;;;:7;;:17;;;;;:::i;:::-;;2788:144;;1506:12635;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1506:12635:0;;;-1:-1:-1;1506:12635:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;"
+ "object": "0x608060405234801561001057600080fd5b506040516200102d3803806200102d83398101604052805160208083015191830180519093929092019161004a9160009190850190610066565b50805161005e906001906020840190610066565b505050610101565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100a757805160ff19168380011785556100d4565b828001600101855582156100d4579182015b828111156100d45782518255916020019190600101906100b9565b506100e09291506100e4565b5090565b6100fe91905b808211156100e057600081556001016100ea565b90565b610f1c80620001116000396000f3006080604052600436106100b95763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde0381146100be578063081812fc14610148578063095ea7b31461018957806323b872dd146101bc57806342842e0e146101f35780634f558e791461022a5780636352211e1461025657806370a082311461026e57806395d89b41146102ae578063a22cb465146102c3578063b88d4fde146102f6578063e985e9c514610372575b600080fd5b3480156100ca57600080fd5b506100d36103a6565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561010d5781810151838201526020016100f5565b50505050905090810190601f16801561013a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561015457600080fd5b5061016060043561045a565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561019557600080fd5b506101ba73ffffffffffffffffffffffffffffffffffffffff60043516602435610482565b005b3480156101c857600080fd5b506101ba73ffffffffffffffffffffffffffffffffffffffff600435811690602435166044356105c0565b3480156101ff57600080fd5b506101ba73ffffffffffffffffffffffffffffffffffffffff600435811690602435166044356106a3565b34801561023657600080fd5b506102426004356106db565b604080519115158252519081900360200190f35b34801561026257600080fd5b50610160600435610705565b34801561027a57600080fd5b5061029c73ffffffffffffffffffffffffffffffffffffffff6004351661073c565b60408051918252519081900360200190f35b3480156102ba57600080fd5b506100d3610789565b3480156102cf57600080fd5b506101ba73ffffffffffffffffffffffffffffffffffffffff600435166024351515610807565b34801561030257600080fd5b50604080516020601f6064356004818101359283018490048402850184019095528184526101ba9473ffffffffffffffffffffffffffffffffffffffff81358116956024803590921695604435953695608494019181908401838280828437509497506108c39650505050505050565b34801561037e57600080fd5b5061024273ffffffffffffffffffffffffffffffffffffffff60043581169060243516610902565b60008054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104505780601f1061042557610100808354040283529160200191610450565b820191906000526020600020905b81548152906001019060200180831161043357829003601f168201915b5050505050905090565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b600061048d82610705565b905073ffffffffffffffffffffffffffffffffffffffff83811690821614156104b557600080fd5b3373ffffffffffffffffffffffffffffffffffffffff821614806104de57506104de8133610902565b15156104e957600080fd5b60006104f48361045a565b73ffffffffffffffffffffffffffffffffffffffff1614158061052c575073ffffffffffffffffffffffffffffffffffffffff831615155b156105bb5760008281526003602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff878116918217909255835186815293519093918516927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35b505050565b806105cb338261093d565b15156105d657600080fd5b73ffffffffffffffffffffffffffffffffffffffff841615156105f857600080fd5b73ffffffffffffffffffffffffffffffffffffffff8316151561061a57600080fd5b61062484836109d0565b61062e8483610abd565b6106388383610b8c565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a350505050565b806106ae338261093d565b15156106b957600080fd5b6106d584848460206040519081016040528060008152506108c3565b50505050565b60009081526002602052604090205473ffffffffffffffffffffffffffffffffffffffff16151590565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff1680151561073657600080fd5b92915050565b600073ffffffffffffffffffffffffffffffffffffffff8216151561076057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff1660009081526004602052604090205490565b60018054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010087891615020190951694909404938401819004810282018101909252828152606093909290918301828280156104505780601f1061042557610100808354040283529160200191610450565b73ffffffffffffffffffffffffffffffffffffffff821633141561082a57600080fd5b33600081815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b816108ce338261093d565b15156108d957600080fd5b6108e48585856105c0565b6108f085858585610c4f565b15156108fb57600080fd5b5050505050565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b60008061094983610705565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806109b857508373ffffffffffffffffffffffffffffffffffffffff166109a08461045a565b73ffffffffffffffffffffffffffffffffffffffff16145b806109c857506109c88185610902565b949350505050565b8173ffffffffffffffffffffffffffffffffffffffff166109f082610705565b73ffffffffffffffffffffffffffffffffffffffff1614610a1057600080fd5b60008181526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1615610ab957600081815260036020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690558051848152905173ffffffffffffffffffffffffffffffffffffffff8616927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35b5050565b8173ffffffffffffffffffffffffffffffffffffffff16610add82610705565b73ffffffffffffffffffffffffffffffffffffffff1614610afd57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260046020526040902054610b2e906001610df6565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526004602090815260408083209490945591815260029091522080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1615610bbb57600080fd5b600081815260026020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff871690811790915583526004909152902054610c22906001610e6d565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526004602052604090209190915550565b600080610c5b85610ee8565b1515610c6a5760019150610ded565b8473ffffffffffffffffffffffffffffffffffffffff1663f0b9e5ba8786866040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610d29578181015183820152602001610d11565b50505050905090810190601f168015610d565780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b158015610d7757600080fd5b505af1158015610d8b573d6000803e3d6000fd5b505050506040513d6020811015610da157600080fd5b50517fffffffff0000000000000000000000000000000000000000000000000000000081167ff0b9e5ba0000000000000000000000000000000000000000000000000000000014925090505b50949350505050565b600082821115610e6757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f55494e543235365f4f564552464c4f5700000000000000000000000000000000604482015290519081900360640190fd5b50900390565b600082820183811015610ee157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f55494e543235365f4f564552464c4f5700000000000000000000000000000000604482015290519081900360640190fd5b9392505050565b6000903b11905600a165627a7a723058203b8ccc1829015734ddfc23ae46887a4de96066aa5a523d21ce4645ac878c6b5d0029",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x102D CODESIZE SUB DUP1 PUSH3 0x102D DUP4 CODECOPY DUP2 ADD PUSH1 0x40 MSTORE DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP2 DUP4 ADD DUP1 MLOAD SWAP1 SWAP4 SWAP3 SWAP1 SWAP3 ADD SWAP2 PUSH2 0x4A SWAP2 PUSH1 0x0 SWAP2 SWAP1 DUP6 ADD SWAP1 PUSH2 0x66 JUMP JUMPDEST POP DUP1 MLOAD PUSH2 0x5E SWAP1 PUSH1 0x1 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x66 JUMP JUMPDEST POP POP POP PUSH2 0x101 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0xA7 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0xD4 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0xD4 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0xD4 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0xB9 JUMP JUMPDEST POP PUSH2 0xE0 SWAP3 SWAP2 POP PUSH2 0xE4 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0xFE SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0xE0 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0xEA JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0xF1C DUP1 PUSH3 0x111 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xB9 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x6FDDE03 DUP2 EQ PUSH2 0xBE JUMPI DUP1 PUSH4 0x81812FC EQ PUSH2 0x148 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x189 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1BC JUMPI DUP1 PUSH4 0x42842E0E EQ PUSH2 0x1F3 JUMPI DUP1 PUSH4 0x4F558E79 EQ PUSH2 0x22A JUMPI DUP1 PUSH4 0x6352211E EQ PUSH2 0x256 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x26E JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x2AE JUMPI DUP1 PUSH4 0xA22CB465 EQ PUSH2 0x2C3 JUMPI DUP1 PUSH4 0xB88D4FDE EQ PUSH2 0x2F6 JUMPI DUP1 PUSH4 0xE985E9C5 EQ PUSH2 0x372 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD3 PUSH2 0x3A6 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 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x10D JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xF5 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x13A 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 DUP1 ISZERO PUSH2 0x154 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x160 PUSH1 0x4 CALLDATALOAD PUSH2 0x45A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x195 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BA PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD PUSH2 0x482 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BA PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH1 0x44 CALLDATALOAD PUSH2 0x5C0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BA PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH1 0x44 CALLDATALOAD PUSH2 0x6A3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x236 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x242 PUSH1 0x4 CALLDATALOAD PUSH2 0x6DB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x262 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x160 PUSH1 0x4 CALLDATALOAD PUSH2 0x705 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x27A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x29C PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x73C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD3 PUSH2 0x789 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BA PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD ISZERO ISZERO PUSH2 0x807 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x302 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x64 CALLDATALOAD PUSH1 0x4 DUP2 DUP2 ADD CALLDATALOAD SWAP3 DUP4 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP2 DUP5 MSTORE PUSH2 0x1BA SWAP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD DUP2 AND SWAP6 PUSH1 0x24 DUP1 CALLDATALOAD SWAP1 SWAP3 AND SWAP6 PUSH1 0x44 CALLDATALOAD SWAP6 CALLDATASIZE SWAP6 PUSH1 0x84 SWAP5 ADD SWAP2 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x8C3 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x37E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x242 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH2 0x902 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x450 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x425 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x450 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x433 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x48D DUP3 PUSH2 0x705 JUMP JUMPDEST SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP1 DUP3 AND EQ ISZERO PUSH2 0x4B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND EQ DUP1 PUSH2 0x4DE JUMPI POP PUSH2 0x4DE DUP2 CALLER PUSH2 0x902 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x4E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x4F4 DUP4 PUSH2 0x45A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 PUSH2 0x52C JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x5BB JUMPI PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND SWAP2 DUP3 OR SWAP1 SWAP3 SSTORE DUP4 MLOAD DUP7 DUP2 MSTORE SWAP4 MLOAD SWAP1 SWAP4 SWAP2 DUP6 AND SWAP3 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG3 JUMPDEST POP POP POP JUMP JUMPDEST DUP1 PUSH2 0x5CB CALLER DUP3 PUSH2 0x93D JUMP JUMPDEST ISZERO ISZERO PUSH2 0x5D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND ISZERO ISZERO PUSH2 0x5F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND ISZERO ISZERO PUSH2 0x61A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x624 DUP5 DUP4 PUSH2 0x9D0 JUMP JUMPDEST PUSH2 0x62E DUP5 DUP4 PUSH2 0xABD JUMP JUMPDEST PUSH2 0x638 DUP4 DUP4 PUSH2 0xB8C JUMP JUMPDEST DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP5 PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP JUMP JUMPDEST DUP1 PUSH2 0x6AE CALLER DUP3 PUSH2 0x93D JUMP JUMPDEST ISZERO ISZERO PUSH2 0x6B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x6D5 DUP5 DUP5 DUP5 PUSH1 0x20 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH2 0x8C3 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO ISZERO PUSH2 0x736 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND ISZERO ISZERO PUSH2 0x760 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 DUP8 DUP10 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x450 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x425 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x450 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND CALLER EQ ISZERO PUSH2 0x82A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP7 ISZERO ISZERO SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP2 MLOAD SWAP1 DUP2 MSTORE SWAP1 MLOAD SWAP3 SWAP4 SWAP3 PUSH32 0x17307EAB39AB6107E8899845AD3D59BD9653F200F220920489CA2B5937696C31 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST DUP2 PUSH2 0x8CE CALLER DUP3 PUSH2 0x93D JUMP JUMPDEST ISZERO ISZERO PUSH2 0x8D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8E4 DUP6 DUP6 DUP6 PUSH2 0x5C0 JUMP JUMPDEST PUSH2 0x8F0 DUP6 DUP6 DUP6 DUP6 PUSH2 0xC4F JUMP JUMPDEST ISZERO ISZERO PUSH2 0x8FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x949 DUP4 PUSH2 0x705 JUMP JUMPDEST SWAP1 POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ DUP1 PUSH2 0x9B8 JUMPI POP DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x9A0 DUP5 PUSH2 0x45A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ JUMPDEST DUP1 PUSH2 0x9C8 JUMPI POP PUSH2 0x9C8 DUP2 DUP6 PUSH2 0x902 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x9F0 DUP3 PUSH2 0x705 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xA10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0xAB9 JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE DUP1 MLOAD DUP5 DUP2 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP3 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG3 JUMPDEST POP POP JUMP JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xADD DUP3 PUSH2 0x705 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xAFD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xB2E SWAP1 PUSH1 0x1 PUSH2 0xDF6 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE SWAP2 DUP2 MSTORE PUSH1 0x2 SWAP1 SWAP2 MSTORE KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0xBBB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP4 MSTORE PUSH1 0x4 SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0xC22 SWAP1 PUSH1 0x1 PUSH2 0xE6D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xC5B DUP6 PUSH2 0xEE8 JUMP JUMPDEST ISZERO ISZERO PUSH2 0xC6A JUMPI PUSH1 0x1 SWAP2 POP PUSH2 0xDED JUMP JUMPDEST DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xF0B9E5BA DUP8 DUP7 DUP7 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH29 0x100000000000000000000000000000000000000000000000000000000 MUL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xD29 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xD11 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xD56 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 SWAP5 POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xD77 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xD8B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xDA1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH32 0xF0B9E5BA00000000000000000000000000000000000000000000000000000000 EQ SWAP3 POP SWAP1 POP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 GT ISZERO PUSH2 0xE67 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x55494E543235365F4F564552464C4F5700000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0xEE1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x55494E543235365F4F564552464C4F5700000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP1 EXTCODESIZE GT SWAP1 JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 EXTCODESIZE DUP13 0xcc XOR 0x29 ADD JUMPI CALLVALUE 0xdd 0xfc 0x23 0xae 0x46 DUP9 PUSH27 0x4DE96066AA5A523D21CE4645AC878C6B5D00290000000000000000 ",
+ "sourceMap": "1506:12636:0:-;;;2797:136;8:9:-1;5:2;;;30:1;27;20:12;5:2;2797:136:0;;;;;;;;;;;;;;;;;;;;;;;;2886:13;;2797:136;;;;;;;2886:13;;:5;;:13;;;;;:::i;:::-;-1:-1:-1;2909:17:0;;;;:7;;:17;;;;;:::i;:::-;;2797:136;;1506:12636;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1506:12636:0;;;-1:-1:-1;1506:12636:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;"
},
"deployedBytecode": {
"linkReferences": {},
- "object": "0x6080604052600436106100b95763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde0381146100be578063081812fc14610148578063095ea7b31461018957806323b872dd146101bc57806342842e0e146101f35780634f558e791461022a5780636352211e1461025657806370a082311461026e57806395d89b41146102ae578063a22cb465146102c3578063b88d4fde146102f6578063e985e9c514610372575b600080fd5b3480156100ca57600080fd5b506100d36103a6565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561010d5781810151838201526020016100f5565b50505050905090810190601f16801561013a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561015457600080fd5b5061016060043561045a565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561019557600080fd5b506101ba73ffffffffffffffffffffffffffffffffffffffff60043516602435610482565b005b3480156101c857600080fd5b506101ba73ffffffffffffffffffffffffffffffffffffffff600435811690602435166044356105c0565b3480156101ff57600080fd5b506101ba73ffffffffffffffffffffffffffffffffffffffff600435811690602435166044356106a3565b34801561023657600080fd5b506102426004356106db565b604080519115158252519081900360200190f35b34801561026257600080fd5b50610160600435610705565b34801561027a57600080fd5b5061029c73ffffffffffffffffffffffffffffffffffffffff6004351661073c565b60408051918252519081900360200190f35b3480156102ba57600080fd5b506100d3610789565b3480156102cf57600080fd5b506101ba73ffffffffffffffffffffffffffffffffffffffff600435166024351515610807565b34801561030257600080fd5b50604080516020601f6064356004818101359283018490048402850184019095528184526101ba9473ffffffffffffffffffffffffffffffffffffffff81358116956024803590921695604435953695608494019181908401838280828437509497506108c39650505050505050565b34801561037e57600080fd5b5061024273ffffffffffffffffffffffffffffffffffffffff60043581169060243516610902565b60008054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104505780601f1061042557610100808354040283529160200191610450565b820191906000526020600020905b81548152906001019060200180831161043357829003601f168201915b5050505050905090565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b600061048d82610705565b905073ffffffffffffffffffffffffffffffffffffffff83811690821614156104b557600080fd5b3373ffffffffffffffffffffffffffffffffffffffff821614806104de57506104de8133610902565b15156104e957600080fd5b60006104f48361045a565b73ffffffffffffffffffffffffffffffffffffffff1614158061052c575073ffffffffffffffffffffffffffffffffffffffff831615155b156105bb5760008281526003602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff878116918217909255835186815293519093918516927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35b505050565b806105cb338261093d565b15156105d657600080fd5b73ffffffffffffffffffffffffffffffffffffffff841615156105f857600080fd5b73ffffffffffffffffffffffffffffffffffffffff8316151561061a57600080fd5b61062484836109d0565b61062e8483610abd565b6106388383610b8c565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a350505050565b806106ae338261093d565b15156106b957600080fd5b6106d584848460206040519081016040528060008152506108c3565b50505050565b60009081526002602052604090205473ffffffffffffffffffffffffffffffffffffffff16151590565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff1680151561073657600080fd5b92915050565b600073ffffffffffffffffffffffffffffffffffffffff8216151561076057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff1660009081526004602052604090205490565b60018054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010087891615020190951694909404938401819004810282018101909252828152606093909290918301828280156104505780601f1061042557610100808354040283529160200191610450565b73ffffffffffffffffffffffffffffffffffffffff821633141561082a57600080fd5b33600081815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b816108ce338261093d565b15156108d957600080fd5b6108e48585856105c0565b6108f085858585610c4f565b15156108fb57600080fd5b5050505050565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b60008061094983610705565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806109b857508373ffffffffffffffffffffffffffffffffffffffff166109a08461045a565b73ffffffffffffffffffffffffffffffffffffffff16145b806109c857506109c88185610902565b949350505050565b8173ffffffffffffffffffffffffffffffffffffffff166109f082610705565b73ffffffffffffffffffffffffffffffffffffffff1614610a1057600080fd5b60008181526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1615610ab957600081815260036020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690558051848152905173ffffffffffffffffffffffffffffffffffffffff8616927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35b5050565b8173ffffffffffffffffffffffffffffffffffffffff16610add82610705565b73ffffffffffffffffffffffffffffffffffffffff1614610afd57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260046020526040902054610b2e906001610df6565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526004602090815260408083209490945591815260029091522080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1615610bbb57600080fd5b600081815260026020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff871690811790915583526004909152902054610c22906001610e08565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526004602052604090209190915550565b600080610c5b85610e1e565b1515610c6a5760019150610ded565b8473ffffffffffffffffffffffffffffffffffffffff1663f0b9e5ba8786866040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610d29578181015183820152602001610d11565b50505050905090810190601f168015610d565780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b158015610d7757600080fd5b505af1158015610d8b573d6000803e3d6000fd5b505050506040513d6020811015610da157600080fd5b50517fffffffff0000000000000000000000000000000000000000000000000000000081167ff0b9e5ba0000000000000000000000000000000000000000000000000000000014925090505b50949350505050565b600082821115610e0257fe5b50900390565b600082820183811015610e1757fe5b9392505050565b6000903b11905600a165627a7a7230582004558fc9858a51e11dc082481a3160384756a03fb45a249a2295bf567358fb3c0029",
- "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xB9 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x6FDDE03 DUP2 EQ PUSH2 0xBE JUMPI DUP1 PUSH4 0x81812FC EQ PUSH2 0x148 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x189 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1BC JUMPI DUP1 PUSH4 0x42842E0E EQ PUSH2 0x1F3 JUMPI DUP1 PUSH4 0x4F558E79 EQ PUSH2 0x22A JUMPI DUP1 PUSH4 0x6352211E EQ PUSH2 0x256 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x26E JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x2AE JUMPI DUP1 PUSH4 0xA22CB465 EQ PUSH2 0x2C3 JUMPI DUP1 PUSH4 0xB88D4FDE EQ PUSH2 0x2F6 JUMPI DUP1 PUSH4 0xE985E9C5 EQ PUSH2 0x372 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD3 PUSH2 0x3A6 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 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x10D JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xF5 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x13A 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 DUP1 ISZERO PUSH2 0x154 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x160 PUSH1 0x4 CALLDATALOAD PUSH2 0x45A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x195 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BA PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD PUSH2 0x482 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BA PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH1 0x44 CALLDATALOAD PUSH2 0x5C0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BA PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH1 0x44 CALLDATALOAD PUSH2 0x6A3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x236 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x242 PUSH1 0x4 CALLDATALOAD PUSH2 0x6DB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x262 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x160 PUSH1 0x4 CALLDATALOAD PUSH2 0x705 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x27A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x29C PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x73C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD3 PUSH2 0x789 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BA PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD ISZERO ISZERO PUSH2 0x807 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x302 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x64 CALLDATALOAD PUSH1 0x4 DUP2 DUP2 ADD CALLDATALOAD SWAP3 DUP4 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP2 DUP5 MSTORE PUSH2 0x1BA SWAP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD DUP2 AND SWAP6 PUSH1 0x24 DUP1 CALLDATALOAD SWAP1 SWAP3 AND SWAP6 PUSH1 0x44 CALLDATALOAD SWAP6 CALLDATASIZE SWAP6 PUSH1 0x84 SWAP5 ADD SWAP2 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x8C3 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x37E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x242 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH2 0x902 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x450 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x425 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x450 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x433 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x48D DUP3 PUSH2 0x705 JUMP JUMPDEST SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP1 DUP3 AND EQ ISZERO PUSH2 0x4B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND EQ DUP1 PUSH2 0x4DE JUMPI POP PUSH2 0x4DE DUP2 CALLER PUSH2 0x902 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x4E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x4F4 DUP4 PUSH2 0x45A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 PUSH2 0x52C JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x5BB JUMPI PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND SWAP2 DUP3 OR SWAP1 SWAP3 SSTORE DUP4 MLOAD DUP7 DUP2 MSTORE SWAP4 MLOAD SWAP1 SWAP4 SWAP2 DUP6 AND SWAP3 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG3 JUMPDEST POP POP POP JUMP JUMPDEST DUP1 PUSH2 0x5CB CALLER DUP3 PUSH2 0x93D JUMP JUMPDEST ISZERO ISZERO PUSH2 0x5D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND ISZERO ISZERO PUSH2 0x5F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND ISZERO ISZERO PUSH2 0x61A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x624 DUP5 DUP4 PUSH2 0x9D0 JUMP JUMPDEST PUSH2 0x62E DUP5 DUP4 PUSH2 0xABD JUMP JUMPDEST PUSH2 0x638 DUP4 DUP4 PUSH2 0xB8C JUMP JUMPDEST DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP5 PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP JUMP JUMPDEST DUP1 PUSH2 0x6AE CALLER DUP3 PUSH2 0x93D JUMP JUMPDEST ISZERO ISZERO PUSH2 0x6B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x6D5 DUP5 DUP5 DUP5 PUSH1 0x20 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH2 0x8C3 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO ISZERO PUSH2 0x736 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND ISZERO ISZERO PUSH2 0x760 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 DUP8 DUP10 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x450 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x425 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x450 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND CALLER EQ ISZERO PUSH2 0x82A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP7 ISZERO ISZERO SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP2 MLOAD SWAP1 DUP2 MSTORE SWAP1 MLOAD SWAP3 SWAP4 SWAP3 PUSH32 0x17307EAB39AB6107E8899845AD3D59BD9653F200F220920489CA2B5937696C31 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST DUP2 PUSH2 0x8CE CALLER DUP3 PUSH2 0x93D JUMP JUMPDEST ISZERO ISZERO PUSH2 0x8D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8E4 DUP6 DUP6 DUP6 PUSH2 0x5C0 JUMP JUMPDEST PUSH2 0x8F0 DUP6 DUP6 DUP6 DUP6 PUSH2 0xC4F JUMP JUMPDEST ISZERO ISZERO PUSH2 0x8FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x949 DUP4 PUSH2 0x705 JUMP JUMPDEST SWAP1 POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ DUP1 PUSH2 0x9B8 JUMPI POP DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x9A0 DUP5 PUSH2 0x45A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ JUMPDEST DUP1 PUSH2 0x9C8 JUMPI POP PUSH2 0x9C8 DUP2 DUP6 PUSH2 0x902 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x9F0 DUP3 PUSH2 0x705 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xA10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0xAB9 JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE DUP1 MLOAD DUP5 DUP2 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP3 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG3 JUMPDEST POP POP JUMP JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xADD DUP3 PUSH2 0x705 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xAFD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xB2E SWAP1 PUSH1 0x1 PUSH2 0xDF6 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE SWAP2 DUP2 MSTORE PUSH1 0x2 SWAP1 SWAP2 MSTORE KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0xBBB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP4 MSTORE PUSH1 0x4 SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0xC22 SWAP1 PUSH1 0x1 PUSH2 0xE08 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xC5B DUP6 PUSH2 0xE1E JUMP JUMPDEST ISZERO ISZERO PUSH2 0xC6A JUMPI PUSH1 0x1 SWAP2 POP PUSH2 0xDED JUMP JUMPDEST DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xF0B9E5BA DUP8 DUP7 DUP7 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH29 0x100000000000000000000000000000000000000000000000000000000 MUL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xD29 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xD11 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xD56 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 SWAP5 POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xD77 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xD8B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xDA1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH32 0xF0B9E5BA00000000000000000000000000000000000000000000000000000000 EQ SWAP3 POP SWAP1 POP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 GT ISZERO PUSH2 0xE02 JUMPI INVALID JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0xE17 JUMPI INVALID JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP1 EXTCODESIZE GT SWAP1 JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 DIV SSTORE DUP16 0xc9 DUP6 DUP11 MLOAD 0xe1 SAR 0xc0 DUP3 0x48 BYTE BALANCE PUSH1 0x38 0x47 JUMP LOG0 0x3f 0xb4 GAS 0x24 SWAP11 0x22 SWAP6 0xbf JUMP PUSH20 0x58FB3C0029000000000000000000000000000000 ",
- "sourceMap": "1506:12635:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3033:102;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3033:102:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;3033:102:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5586:145;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5586:145:0;;;;;;;;;;;;;;;;;;;;;;;;4948:401;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4948:401:0;;;;;;;;;;;7190:362;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7190:362:0;;;;;;;;;;;;;;8183:254;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8183:254:0;;;;;;;;;;;;;;4339:178;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4339:178:0;;;;;;;;;;;;;;;;;;;;;;;3947:206;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3947:206:0;;;;;3546:180;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3546:180:0;;;;;;;;;;;;;;;;;;;;;;;3240:106;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3240:106:0;;;;6025:231;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6025:231:0;;;;;;;;;;;9139:339;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9139:339:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9139:339:0;;-1:-1:-1;9139:339:0;;-1:-1:-1;;;;;;;9139:339:0;6574:176;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6574:176:0;;;;;;;;;;;;3033:102;3123:5;3116:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3094:6;;3116:12;;3123:5;;3116:12;;3123:5;3116:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3033:102;:::o;5586:145::-;5670:7;5700:24;;;:14;:24;;;;;;;;;5586:145::o;4948:401::-;5025:13;5041:17;5049:8;5041:7;:17::i;:::-;5025:33;-1:-1:-1;5076:12:0;;;;;;;;;5068:21;;;;;;5107:10;:19;;;;;:58;;;5130:35;5147:5;5154:10;5130:16;:35::i;:::-;5099:67;;;;;;;;5214:1;5181:21;5193:8;5181:11;:21::i;:::-;:35;;;;:56;;;-1:-1:-1;5220:17:0;;;;;5181:56;5177:166;;;5253:24;;;;:14;:24;;;;;;;;;:30;;;;;;;;;;;;;;5302;;;;;;;5253;;5302;;;;;;;;;;;;5177:166;4948:401;;;:::o;7190:362::-;7293:8;2724:39;2742:10;2754:8;2724:17;:39::i;:::-;2716:48;;;;;;;;7325:19;;;;;7317:28;;;;;;7363:17;;;;;7355:26;;;;;;7392:30;7406:5;7413:8;7392:13;:30::i;:::-;7432:32;7448:5;7455:8;7432:15;:32::i;:::-;7474:25;7485:3;7490:8;7474:10;:25::i;:::-;7531:3;7515:30;;7524:5;7515:30;;;7536:8;7515:30;;;;;;;;;;;;;;;;;;7190:362;;;;:::o;8183:254::-;8315:8;2724:39;2742:10;2754:8;2724:17;:39::i;:::-;2716:48;;;;;;;;8388:42;8405:5;8412:3;8417:8;8388:42;;;;;;;;;;;;;:16;:42::i;:::-;8183:254;;;;:::o;4339:178::-;4418:4;4454:20;;;:10;:20;;;;;;;;4491:19;;;4339:178::o;3947:206::-;4027:7;4066:20;;;:10;:20;;;;;;;;4104:19;;;4096:28;;;;;;4141:5;3947:206;-1:-1:-1;;3947:206:0:o;3546:180::-;3626:7;3657:20;;;;;3649:29;;;;;;-1:-1:-1;3695:24:0;;;;;;:16;:24;;;;;;;3546:180::o;3240:106::-;3332:7;3325:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3303:6;;3325:14;;3332:7;;3325:14;;3332:7;3325:14;;;;;;;;;;;;;;;;;;;;;;;;6025:231;6118:17;;;6125:10;6118:17;;6110:26;;;;;;6164:10;6146:29;;;;:17;:29;;;;;;;;;:34;;;;;;;;;;;;:46;;;;;;;;;;;;;6207:42;;;;;;;6146:34;;6164:10;6207:42;;;;;;;;;;;6025:231;;:::o;9139:339::-;9292:8;2724:39;2742:10;2754:8;2724:17;:39::i;:::-;2716:48;;;;;;;;9316:34;9329:5;9336:3;9341:8;9316:12;:34::i;:::-;9417:53;9442:5;9449:3;9454:8;9464:5;9417:24;:53::i;:::-;9409:62;;;;;;;;9139:339;;;;;:::o;6574:176::-;6707:25;;;;6680:4;6707:25;;;:17;:25;;;;;;;;:36;;;;;;;;;;;;;;;6574:176::o;9835:278::-;9945:4;9965:13;9981:17;9989:8;9981:7;:17::i;:::-;9965:33;;10027:5;10015:17;;:8;:17;;;:54;;;;10061:8;10036:33;;:21;10048:8;10036:11;:21::i;:::-;:33;;;10015:54;:91;;;;10073:33;10090:5;10097:8;10073:16;:33::i;:::-;10008:98;9835:278;-1:-1:-1;;;;9835:278:0:o;11260:303::-;11377:6;11356:27;;:17;11364:8;11356:7;:17::i;:::-;:27;;;11348:36;;;;;;11434:1;11398:24;;;:14;:24;;;;;;:38;:24;:38;11394:163;;11487:1;11452:24;;;:14;:24;;;;;;;;:37;;;;;;11508:38;;;;;;;11452:37;11508:38;;;;;;;;;;;11394:163;11260:303;;:::o;12356:245::-;12474:5;12453:26;;:17;12461:8;12453:7;:17::i;:::-;:26;;;12445:35;;;;;;12524:23;;;;;;;:16;:23;;;;;;12516:35;;12549:1;12516:7;:35::i;:::-;12490:23;;;;;;;;:16;:23;;;;;;;;:61;;;;12561:20;;;:10;:20;;;;:33;;;;;;12356:245::o;11834:235::-;11956:1;11924:20;;;:10;:20;;;;;;:34;:20;:34;11916:43;;;;;;11969:20;;;;:10;:20;;;;;;;;:26;;;;;;;;;;;;;12037:21;;:16;:21;;;;;;12029:33;;-1:-1:-1;12029:7:0;:33::i;:::-;12005:21;;;;;;;;:16;:21;;;;;:57;;;;-1:-1:-1;11834:235:0:o;13124:375::-;13284:4;13371:13;13309:15;13320:3;13309:10;:15::i;:::-;13308:16;13304:58;;;13347:4;13340:11;;;;13304:58;13403:3;13387:37;;;13425:5;13432:8;13442:5;13387:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;13387:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13387:61:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13387:61:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13387:61:0;13466:25;;;13476:15;13466:25;;-1:-1:-1;13387:61:0;-1:-1:-1;13124:375:0;;;;;;;;:::o;418:146:3:-;498:7;528:6;;;;521:14;;;;-1:-1:-1;552:5:3;;;418:146::o;570:166::-;650:7;682:5;;;704:6;;;;697:14;;;;728:1;570:166;-1:-1:-1;;;570:166:3:o;13505:634:0:-;13586:4;14037:17;;14124:8;;13505:634::o"
+ "object": "0x6080604052600436106100b95763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde0381146100be578063081812fc14610148578063095ea7b31461018957806323b872dd146101bc57806342842e0e146101f35780634f558e791461022a5780636352211e1461025657806370a082311461026e57806395d89b41146102ae578063a22cb465146102c3578063b88d4fde146102f6578063e985e9c514610372575b600080fd5b3480156100ca57600080fd5b506100d36103a6565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561010d5781810151838201526020016100f5565b50505050905090810190601f16801561013a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561015457600080fd5b5061016060043561045a565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561019557600080fd5b506101ba73ffffffffffffffffffffffffffffffffffffffff60043516602435610482565b005b3480156101c857600080fd5b506101ba73ffffffffffffffffffffffffffffffffffffffff600435811690602435166044356105c0565b3480156101ff57600080fd5b506101ba73ffffffffffffffffffffffffffffffffffffffff600435811690602435166044356106a3565b34801561023657600080fd5b506102426004356106db565b604080519115158252519081900360200190f35b34801561026257600080fd5b50610160600435610705565b34801561027a57600080fd5b5061029c73ffffffffffffffffffffffffffffffffffffffff6004351661073c565b60408051918252519081900360200190f35b3480156102ba57600080fd5b506100d3610789565b3480156102cf57600080fd5b506101ba73ffffffffffffffffffffffffffffffffffffffff600435166024351515610807565b34801561030257600080fd5b50604080516020601f6064356004818101359283018490048402850184019095528184526101ba9473ffffffffffffffffffffffffffffffffffffffff81358116956024803590921695604435953695608494019181908401838280828437509497506108c39650505050505050565b34801561037e57600080fd5b5061024273ffffffffffffffffffffffffffffffffffffffff60043581169060243516610902565b60008054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104505780601f1061042557610100808354040283529160200191610450565b820191906000526020600020905b81548152906001019060200180831161043357829003601f168201915b5050505050905090565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b600061048d82610705565b905073ffffffffffffffffffffffffffffffffffffffff83811690821614156104b557600080fd5b3373ffffffffffffffffffffffffffffffffffffffff821614806104de57506104de8133610902565b15156104e957600080fd5b60006104f48361045a565b73ffffffffffffffffffffffffffffffffffffffff1614158061052c575073ffffffffffffffffffffffffffffffffffffffff831615155b156105bb5760008281526003602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff878116918217909255835186815293519093918516927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35b505050565b806105cb338261093d565b15156105d657600080fd5b73ffffffffffffffffffffffffffffffffffffffff841615156105f857600080fd5b73ffffffffffffffffffffffffffffffffffffffff8316151561061a57600080fd5b61062484836109d0565b61062e8483610abd565b6106388383610b8c565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a350505050565b806106ae338261093d565b15156106b957600080fd5b6106d584848460206040519081016040528060008152506108c3565b50505050565b60009081526002602052604090205473ffffffffffffffffffffffffffffffffffffffff16151590565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff1680151561073657600080fd5b92915050565b600073ffffffffffffffffffffffffffffffffffffffff8216151561076057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff1660009081526004602052604090205490565b60018054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010087891615020190951694909404938401819004810282018101909252828152606093909290918301828280156104505780601f1061042557610100808354040283529160200191610450565b73ffffffffffffffffffffffffffffffffffffffff821633141561082a57600080fd5b33600081815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b816108ce338261093d565b15156108d957600080fd5b6108e48585856105c0565b6108f085858585610c4f565b15156108fb57600080fd5b5050505050565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b60008061094983610705565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806109b857508373ffffffffffffffffffffffffffffffffffffffff166109a08461045a565b73ffffffffffffffffffffffffffffffffffffffff16145b806109c857506109c88185610902565b949350505050565b8173ffffffffffffffffffffffffffffffffffffffff166109f082610705565b73ffffffffffffffffffffffffffffffffffffffff1614610a1057600080fd5b60008181526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1615610ab957600081815260036020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690558051848152905173ffffffffffffffffffffffffffffffffffffffff8616927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35b5050565b8173ffffffffffffffffffffffffffffffffffffffff16610add82610705565b73ffffffffffffffffffffffffffffffffffffffff1614610afd57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260046020526040902054610b2e906001610df6565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526004602090815260408083209490945591815260029091522080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1615610bbb57600080fd5b600081815260026020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff871690811790915583526004909152902054610c22906001610e6d565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526004602052604090209190915550565b600080610c5b85610ee8565b1515610c6a5760019150610ded565b8473ffffffffffffffffffffffffffffffffffffffff1663f0b9e5ba8786866040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610d29578181015183820152602001610d11565b50505050905090810190601f168015610d565780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b158015610d7757600080fd5b505af1158015610d8b573d6000803e3d6000fd5b505050506040513d6020811015610da157600080fd5b50517fffffffff0000000000000000000000000000000000000000000000000000000081167ff0b9e5ba0000000000000000000000000000000000000000000000000000000014925090505b50949350505050565b600082821115610e6757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f55494e543235365f4f564552464c4f5700000000000000000000000000000000604482015290519081900360640190fd5b50900390565b600082820183811015610ee157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f55494e543235365f4f564552464c4f5700000000000000000000000000000000604482015290519081900360640190fd5b9392505050565b6000903b11905600a165627a7a723058203b8ccc1829015734ddfc23ae46887a4de96066aa5a523d21ce4645ac878c6b5d0029",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xB9 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x6FDDE03 DUP2 EQ PUSH2 0xBE JUMPI DUP1 PUSH4 0x81812FC EQ PUSH2 0x148 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x189 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1BC JUMPI DUP1 PUSH4 0x42842E0E EQ PUSH2 0x1F3 JUMPI DUP1 PUSH4 0x4F558E79 EQ PUSH2 0x22A JUMPI DUP1 PUSH4 0x6352211E EQ PUSH2 0x256 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x26E JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x2AE JUMPI DUP1 PUSH4 0xA22CB465 EQ PUSH2 0x2C3 JUMPI DUP1 PUSH4 0xB88D4FDE EQ PUSH2 0x2F6 JUMPI DUP1 PUSH4 0xE985E9C5 EQ PUSH2 0x372 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD3 PUSH2 0x3A6 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 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x10D JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xF5 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x13A 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 DUP1 ISZERO PUSH2 0x154 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x160 PUSH1 0x4 CALLDATALOAD PUSH2 0x45A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x195 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BA PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD PUSH2 0x482 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BA PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH1 0x44 CALLDATALOAD PUSH2 0x5C0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BA PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH1 0x44 CALLDATALOAD PUSH2 0x6A3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x236 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x242 PUSH1 0x4 CALLDATALOAD PUSH2 0x6DB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x262 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x160 PUSH1 0x4 CALLDATALOAD PUSH2 0x705 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x27A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x29C PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x73C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD3 PUSH2 0x789 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BA PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD ISZERO ISZERO PUSH2 0x807 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x302 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x64 CALLDATALOAD PUSH1 0x4 DUP2 DUP2 ADD CALLDATALOAD SWAP3 DUP4 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP2 DUP5 MSTORE PUSH2 0x1BA SWAP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD DUP2 AND SWAP6 PUSH1 0x24 DUP1 CALLDATALOAD SWAP1 SWAP3 AND SWAP6 PUSH1 0x44 CALLDATALOAD SWAP6 CALLDATASIZE SWAP6 PUSH1 0x84 SWAP5 ADD SWAP2 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x8C3 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x37E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x242 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH2 0x902 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x450 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x425 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x450 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x433 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x48D DUP3 PUSH2 0x705 JUMP JUMPDEST SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP1 DUP3 AND EQ ISZERO PUSH2 0x4B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND EQ DUP1 PUSH2 0x4DE JUMPI POP PUSH2 0x4DE DUP2 CALLER PUSH2 0x902 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x4E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x4F4 DUP4 PUSH2 0x45A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 PUSH2 0x52C JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x5BB JUMPI PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND SWAP2 DUP3 OR SWAP1 SWAP3 SSTORE DUP4 MLOAD DUP7 DUP2 MSTORE SWAP4 MLOAD SWAP1 SWAP4 SWAP2 DUP6 AND SWAP3 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG3 JUMPDEST POP POP POP JUMP JUMPDEST DUP1 PUSH2 0x5CB CALLER DUP3 PUSH2 0x93D JUMP JUMPDEST ISZERO ISZERO PUSH2 0x5D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND ISZERO ISZERO PUSH2 0x5F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND ISZERO ISZERO PUSH2 0x61A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x624 DUP5 DUP4 PUSH2 0x9D0 JUMP JUMPDEST PUSH2 0x62E DUP5 DUP4 PUSH2 0xABD JUMP JUMPDEST PUSH2 0x638 DUP4 DUP4 PUSH2 0xB8C JUMP JUMPDEST DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP5 PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP JUMP JUMPDEST DUP1 PUSH2 0x6AE CALLER DUP3 PUSH2 0x93D JUMP JUMPDEST ISZERO ISZERO PUSH2 0x6B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x6D5 DUP5 DUP5 DUP5 PUSH1 0x20 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH2 0x8C3 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO ISZERO PUSH2 0x736 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND ISZERO ISZERO PUSH2 0x760 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 DUP8 DUP10 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x450 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x425 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x450 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND CALLER EQ ISZERO PUSH2 0x82A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP7 ISZERO ISZERO SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP2 MLOAD SWAP1 DUP2 MSTORE SWAP1 MLOAD SWAP3 SWAP4 SWAP3 PUSH32 0x17307EAB39AB6107E8899845AD3D59BD9653F200F220920489CA2B5937696C31 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST DUP2 PUSH2 0x8CE CALLER DUP3 PUSH2 0x93D JUMP JUMPDEST ISZERO ISZERO PUSH2 0x8D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8E4 DUP6 DUP6 DUP6 PUSH2 0x5C0 JUMP JUMPDEST PUSH2 0x8F0 DUP6 DUP6 DUP6 DUP6 PUSH2 0xC4F JUMP JUMPDEST ISZERO ISZERO PUSH2 0x8FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x949 DUP4 PUSH2 0x705 JUMP JUMPDEST SWAP1 POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ DUP1 PUSH2 0x9B8 JUMPI POP DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x9A0 DUP5 PUSH2 0x45A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ JUMPDEST DUP1 PUSH2 0x9C8 JUMPI POP PUSH2 0x9C8 DUP2 DUP6 PUSH2 0x902 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x9F0 DUP3 PUSH2 0x705 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xA10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0xAB9 JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE DUP1 MLOAD DUP5 DUP2 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP3 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG3 JUMPDEST POP POP JUMP JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xADD DUP3 PUSH2 0x705 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xAFD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xB2E SWAP1 PUSH1 0x1 PUSH2 0xDF6 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE SWAP2 DUP2 MSTORE PUSH1 0x2 SWAP1 SWAP2 MSTORE KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0xBBB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP4 MSTORE PUSH1 0x4 SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0xC22 SWAP1 PUSH1 0x1 PUSH2 0xE6D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xC5B DUP6 PUSH2 0xEE8 JUMP JUMPDEST ISZERO ISZERO PUSH2 0xC6A JUMPI PUSH1 0x1 SWAP2 POP PUSH2 0xDED JUMP JUMPDEST DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xF0B9E5BA DUP8 DUP7 DUP7 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH29 0x100000000000000000000000000000000000000000000000000000000 MUL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xD29 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xD11 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xD56 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 SWAP5 POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xD77 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xD8B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xDA1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH32 0xF0B9E5BA00000000000000000000000000000000000000000000000000000000 EQ SWAP3 POP SWAP1 POP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 GT ISZERO PUSH2 0xE67 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x55494E543235365F4F564552464C4F5700000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0xEE1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x55494E543235365F4F564552464C4F5700000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP1 EXTCODESIZE GT SWAP1 JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 EXTCODESIZE DUP13 0xcc XOR 0x29 ADD JUMPI CALLVALUE 0xdd 0xfc 0x23 0xae 0x46 DUP9 PUSH27 0x4DE96066AA5A523D21CE4645AC878C6B5D00290000000000000000 ",
+ "sourceMap": "1506:12636:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3034:102;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3034:102:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;3034:102:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5587:145;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5587:145:0;;;;;;;;;;;;;;;;;;;;;;;;4949:401;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4949:401:0;;;;;;;;;;;7191:362;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7191:362:0;;;;;;;;;;;;;;8184:254;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8184:254:0;;;;;;;;;;;;;;4340:178;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4340:178:0;;;;;;;;;;;;;;;;;;;;;;;3948:206;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3948:206:0;;;;;3547:180;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3547:180:0;;;;;;;;;;;;;;;;;;;;;;;3241:106;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3241:106:0;;;;6026:231;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6026:231:0;;;;;;;;;;;9140:339;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9140:339:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9140:339:0;;-1:-1:-1;9140:339:0;;-1:-1:-1;;;;;;;9140:339:0;6575:176;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6575:176:0;;;;;;;;;;;;3034:102;3124:5;3117:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3095:6;;3117:12;;3124:5;;3117:12;;3124:5;3117:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3034:102;:::o;5587:145::-;5671:7;5701:24;;;:14;:24;;;;;;;;;5587:145::o;4949:401::-;5026:13;5042:17;5050:8;5042:7;:17::i;:::-;5026:33;-1:-1:-1;5077:12:0;;;;;;;;;5069:21;;;;;;5108:10;:19;;;;;:58;;;5131:35;5148:5;5155:10;5131:16;:35::i;:::-;5100:67;;;;;;;;5215:1;5182:21;5194:8;5182:11;:21::i;:::-;:35;;;;:56;;;-1:-1:-1;5221:17:0;;;;;5182:56;5178:166;;;5254:24;;;;:14;:24;;;;;;;;;:30;;;;;;;;;;;;;;5303;;;;;;;5254;;5303;;;;;;;;;;;;5178:166;4949:401;;;:::o;7191:362::-;7294:8;2733:39;2751:10;2763:8;2733:17;:39::i;:::-;2725:48;;;;;;;;7326:19;;;;;7318:28;;;;;;7364:17;;;;;7356:26;;;;;;7393:30;7407:5;7414:8;7393:13;:30::i;:::-;7433:32;7449:5;7456:8;7433:15;:32::i;:::-;7475:25;7486:3;7491:8;7475:10;:25::i;:::-;7532:3;7516:30;;7525:5;7516:30;;;7537:8;7516:30;;;;;;;;;;;;;;;;;;7191:362;;;;:::o;8184:254::-;8316:8;2733:39;2751:10;2763:8;2733:17;:39::i;:::-;2725:48;;;;;;;;8389:42;8406:5;8413:3;8418:8;8389:42;;;;;;;;;;;;;:16;:42::i;:::-;8184:254;;;;:::o;4340:178::-;4419:4;4455:20;;;:10;:20;;;;;;;;4492:19;;;4340:178::o;3948:206::-;4028:7;4067:20;;;:10;:20;;;;;;;;4105:19;;;4097:28;;;;;;4142:5;3948:206;-1:-1:-1;;3948:206:0:o;3547:180::-;3627:7;3658:20;;;;;3650:29;;;;;;-1:-1:-1;3696:24:0;;;;;;:16;:24;;;;;;;3547:180::o;3241:106::-;3333:7;3326:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3304:6;;3326:14;;3333:7;;3326:14;;3333:7;3326:14;;;;;;;;;;;;;;;;;;;;;;;;6026:231;6119:17;;;6126:10;6119:17;;6111:26;;;;;;6165:10;6147:29;;;;:17;:29;;;;;;;;;:34;;;;;;;;;;;;:46;;;;;;;;;;;;;6208:42;;;;;;;6147:34;;6165:10;6208:42;;;;;;;;;;;6026:231;;:::o;9140:339::-;9293:8;2733:39;2751:10;2763:8;2733:17;:39::i;:::-;2725:48;;;;;;;;9317:34;9330:5;9337:3;9342:8;9317:12;:34::i;:::-;9418:53;9443:5;9450:3;9455:8;9465:5;9418:24;:53::i;:::-;9410:62;;;;;;;;9140:339;;;;;:::o;6575:176::-;6708:25;;;;6681:4;6708:25;;;:17;:25;;;;;;;;:36;;;;;;;;;;;;;;;6575:176::o;9836:278::-;9946:4;9966:13;9982:17;9990:8;9982:7;:17::i;:::-;9966:33;;10028:5;10016:17;;:8;:17;;;:54;;;;10062:8;10037:33;;:21;10049:8;10037:11;:21::i;:::-;:33;;;10016:54;:91;;;;10074:33;10091:5;10098:8;10074:16;:33::i;:::-;10009:98;9836:278;-1:-1:-1;;;;9836:278:0:o;11261:303::-;11378:6;11357:27;;:17;11365:8;11357:7;:17::i;:::-;:27;;;11349:36;;;;;;11435:1;11399:24;;;:14;:24;;;;;;:38;:24;:38;11395:163;;11488:1;11453:24;;;:14;:24;;;;;;;;:37;;;;;;11509:38;;;;;;;11453:37;11509:38;;;;;;;;;;;11395:163;11261:303;;:::o;12357:245::-;12475:5;12454:26;;:17;12462:8;12454:7;:17::i;:::-;:26;;;12446:35;;;;;;12525:23;;;;;;;:16;:23;;;;;;12517:35;;12550:1;12517:7;:35::i;:::-;12491:23;;;;;;;;:16;:23;;;;;;;;:61;;;;12562:20;;;:10;:20;;;;:33;;;;;;12357:245::o;11835:235::-;11957:1;11925:20;;;:10;:20;;;;;;:34;:20;:34;11917:43;;;;;;11970:20;;;;:10;:20;;;;;;;;:26;;;;;;;;;;;;;12038:21;;:16;:21;;;;;;12030:33;;-1:-1:-1;12030:7:0;:33::i;:::-;12006:21;;;;;;;;:16;:21;;;;;:57;;;;-1:-1:-1;11835:235:0:o;13125:375::-;13285:4;13372:13;13310:15;13321:3;13310:10;:15::i;:::-;13309:16;13305:58;;;13348:4;13341:11;;;;13305:58;13404:3;13388:37;;;13426:5;13433:8;13443:5;13388:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;13388:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13388:61:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13388:61:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13388:61:0;13467:25;;;13477:15;13467:25;;-1:-1:-1;13388:61:0;-1:-1:-1;13125:375:0;;;;;;;;:::o;501:207:3:-;587:7;631:6;;;;610:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;696:5:3;;;501:207::o;714:230::-;800:7;835:5;;;871:6;;;;850:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;936:1;714:230;-1:-1:-1;;;714:230:3:o;13506:634:0:-;13587:4;14038:17;;14125:8;;13506:634::o"
}
}
},
"sources": {
- "current/tokens/ERC721Token/ERC721Token.sol": {
+ "2.0.0/tokens/ERC721Token/ERC721Token.sol": {
"id": 0
},
- "current/tokens/ERC721Token/IERC721Receiver.sol": {
+ "2.0.0/tokens/ERC721Token/IERC721Receiver.sol": {
"id": 1
},
- "current/tokens/ERC721Token/IERC721Token.sol": {
+ "2.0.0/tokens/ERC721Token/IERC721Token.sol": {
"id": 2
},
- "current/utils/SafeMath/SafeMath.sol": {
+ "2.0.0/utils/SafeMath/SafeMath.sol": {
"id": 3
}
},
"sourceCodes": {
- "current/tokens/ERC721Token/ERC721Token.sol": "/*\nThe MIT License (MIT)\n\nCopyright (c) 2016 Smart Contract Solutions, Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be included\nin all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\npragma solidity ^0.4.24;\n\nimport \"./IERC721Token.sol\";\nimport \"./IERC721Receiver.sol\";\nimport \"../../utils/SafeMath/SafeMath.sol\";\n\n/**\n * @title ERC721 Non-Fungible Token Standard basic implementation\n * @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md\n * Modified from https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/token/ERC721/ERC721BasicToken.sol\n */\ncontract ERC721Token is\n IERC721Token,\n SafeMath\n{\n // Equals to `bytes4(keccak256(\"onERC721Received(address,uint256,bytes)\"))`\n // which can be also obtained as `ERC721Receiver(0).onERC721Received.selector`\n bytes4 constant ERC721_RECEIVED = 0xf0b9e5ba;\n\n // Mapping from token ID to owner\n mapping (uint256 => address) internal tokenOwner;\n\n // Mapping from token ID to approved address\n mapping (uint256 => address) internal tokenApprovals;\n\n // Mapping from owner to number of owned token\n mapping (address => uint256) internal ownedTokensCount;\n\n // Mapping from owner to operator approvals\n mapping (address => mapping (address => bool)) internal operatorApprovals;\n\n /**\n * @dev Guarantees msg.sender is owner of the given token\n * @param _tokenId uint256 ID of the token to validate its ownership belongs to msg.sender\n */\n modifier onlyOwnerOf(uint256 _tokenId) {\n require(ownerOf(_tokenId) == msg.sender);\n _;\n }\n\n /**\n * @dev Checks msg.sender can transfer a token, by being owner, approved, or operator\n * @param _tokenId uint256 ID of the token to validate\n */\n modifier canTransfer(uint256 _tokenId) {\n require(isApprovedOrOwner(msg.sender, _tokenId));\n _;\n }\n\n function ERC721Token(\n string _name,\n string _symbol)\n public\n {\n name_ = _name;\n symbol_ = _symbol;\n }\n\n /**\n * @dev Gets the token name\n * @return string representing the token name\n */\n function name()\n public\n view\n returns (string)\n {\n return name_;\n }\n\n /**\n * @dev Gets the token symbol\n * @return string representing the token symbol\n */\n function symbol()\n public\n view\n returns (string)\n {\n return symbol_;\n }\n\n /**\n * @dev Gets the balance of the specified address\n * @param _owner address to query the balance of\n * @return uint256 representing the amount owned by the passed address\n */\n function balanceOf(address _owner)\n public\n view\n returns (uint256)\n {\n require(_owner != address(0));\n return ownedTokensCount[_owner];\n }\n\n /**\n * @dev Gets the owner of the specified token ID\n * @param _tokenId uint256 ID of the token to query the owner of\n * @return owner address currently marked as the owner of the given token ID\n */\n function ownerOf(uint256 _tokenId)\n public\n view\n returns (address)\n {\n address owner = tokenOwner[_tokenId];\n require(owner != address(0));\n return owner;\n }\n\n /**\n * @dev Returns whether the specified token exists\n * @param _tokenId uint256 ID of the token to query the existance of\n * @return whether the token exists\n */\n function exists(uint256 _tokenId)\n public\n view\n returns (bool)\n {\n address owner = tokenOwner[_tokenId];\n return owner != address(0);\n }\n\n /**\n * @dev Approves another address to transfer the given token ID\n * @dev The zero address indicates there is no approved address.\n * @dev There can only be one approved address per token at a given time.\n * @dev Can only be called by the token owner or an approved operator.\n * @param _to address to be approved for the given token ID\n * @param _tokenId uint256 ID of the token to be approved\n */\n function approve(address _to, uint256 _tokenId)\n public\n {\n address owner = ownerOf(_tokenId);\n require(_to != owner);\n require(msg.sender == owner || isApprovedForAll(owner, msg.sender));\n\n if (getApproved(_tokenId) != address(0) || _to != address(0)) {\n tokenApprovals[_tokenId] = _to;\n emit Approval(owner, _to, _tokenId);\n }\n }\n\n /**\n * @dev Gets the approved address for a token ID, or zero if no address set\n * @param _tokenId uint256 ID of the token to query the approval of\n * @return address currently approved for a the given token ID\n */\n function getApproved(uint256 _tokenId)\n public\n view\n returns (address)\n {\n return tokenApprovals[_tokenId];\n }\n\n /**\n * @dev Sets or unsets the approval of a given operator\n * @dev An operator is allowed to transfer all tokens of the sender on their behalf\n * @param _to operator address to set the approval\n * @param _approved representing the status of the approval to be set\n */\n function setApprovalForAll(address _to, bool _approved)\n public\n {\n require(_to != msg.sender);\n operatorApprovals[msg.sender][_to] = _approved;\n emit ApprovalForAll(msg.sender, _to, _approved);\n }\n\n /**\n * @dev Tells whether an operator is approved by a given owner\n * @param _owner owner address which you want to query the approval of\n * @param _operator operator address which you want to query the approval of\n * @return bool whether the given operator is approved by the given owner\n */\n function isApprovedForAll(address _owner, address _operator)\n public\n view\n returns (bool)\n {\n return operatorApprovals[_owner][_operator];\n }\n\n /**\n * @dev Transfers the ownership of a given token ID to another address\n * @dev Usage of this method is discouraged, use `safeTransferFrom` whenever possible\n * @dev Requires the msg sender to be the owner, approved, or operator\n * @param _from current owner of the token\n * @param _to address to receive the ownership of the given token ID\n * @param _tokenId uint256 ID of the token to be transferred\n */\n function transferFrom(address _from, address _to, uint256 _tokenId)\n public\n canTransfer(_tokenId)\n {\n require(_from != address(0));\n require(_to != address(0));\n\n clearApproval(_from, _tokenId);\n removeTokenFrom(_from, _tokenId);\n addTokenTo(_to, _tokenId);\n\n emit Transfer(_from, _to, _tokenId);\n }\n\n /**\n * @dev Safely transfers the ownership of a given token ID to another address\n * @dev If the target address is a contract, it must implement `onERC721Received`,\n * which is called upon a safe transfer, and return the magic value\n * `bytes4(keccak256(\"onERC721Received(address,uint256,bytes)\"))`; otherwise,\n * the transfer is reverted.\n * @dev Requires the msg sender to be the owner, approved, or operator\n * @param _from current owner of the token\n * @param _to address to receive the ownership of the given token ID\n * @param _tokenId uint256 ID of the token to be transferred\n */\n function safeTransferFrom(\n address _from,\n address _to,\n uint256 _tokenId)\n public\n canTransfer(_tokenId)\n {\n // solium-disable-next-line arg-overflow\n safeTransferFrom(_from, _to, _tokenId, \"\");\n }\n\n /**\n * @dev Safely transfers the ownership of a given token ID to another address\n * @dev If the target address is a contract, it must implement `onERC721Received`,\n * which is called upon a safe transfer, and return the magic value\n * `bytes4(keccak256(\"onERC721Received(address,uint256,bytes)\"))`; otherwise,\n * the transfer is reverted.\n * @dev Requires the msg sender to be the owner, approved, or operator\n * @param _from current owner of the token\n * @param _to address to receive the ownership of the given token ID\n * @param _tokenId uint256 ID of the token to be transferred\n * @param _data bytes data to send along with a safe transfer check\n */\n function safeTransferFrom(\n address _from,\n address _to,\n uint256 _tokenId,\n bytes _data)\n public\n canTransfer(_tokenId)\n {\n transferFrom(_from, _to, _tokenId);\n // solium-disable-next-line arg-overflow\n require(checkAndCallSafeTransfer(_from, _to, _tokenId, _data));\n }\n\n /**\n * @dev Returns whether the given spender can transfer a given token ID\n * @param _spender address of the spender to query\n * @param _tokenId uint256 ID of the token to be transferred\n * @return bool whether the msg.sender is approved for the given token ID,\n * is an operator of the owner, or is the owner of the token\n */\n function isApprovedOrOwner(address _spender, uint256 _tokenId)\n internal\n view\n returns (bool)\n {\n address owner = ownerOf(_tokenId);\n return _spender == owner || getApproved(_tokenId) == _spender || isApprovedForAll(owner, _spender);\n }\n\n /**\n * @dev Internal function to mint a new token\n * @dev Reverts if the given token ID already exists\n * @param _to The address that will own the minted token\n * @param _tokenId uint256 ID of the token to be minted by the msg.sender\n */\n function _mint(address _to, uint256 _tokenId)\n internal\n {\n require(_to != address(0));\n addTokenTo(_to, _tokenId);\n emit Transfer(address(0), _to, _tokenId);\n }\n\n /**\n * @dev Internal function to burn a specific token\n * @dev Reverts if the token does not exist\n * @param _tokenId uint256 ID of the token being burned by the msg.sender\n */\n function _burn(address _owner, uint256 _tokenId)\n internal\n {\n clearApproval(_owner, _tokenId);\n removeTokenFrom(_owner, _tokenId);\n emit Transfer(_owner, address(0), _tokenId);\n }\n\n /**\n * @dev Internal function to clear current approval of a given token ID\n * @dev Reverts if the given address is not indeed the owner of the token\n * @param _owner owner of the token\n * @param _tokenId uint256 ID of the token to be transferred\n */\n function clearApproval(address _owner, uint256 _tokenId)\n internal\n {\n require(ownerOf(_tokenId) == _owner);\n if (tokenApprovals[_tokenId] != address(0)) {\n tokenApprovals[_tokenId] = address(0);\n emit Approval(_owner, address(0), _tokenId);\n }\n }\n\n /**\n * @dev Internal function to add a token ID to the list of a given address\n * @param _to address representing the new owner of the given token ID\n * @param _tokenId uint256 ID of the token to be added to the tokens list of the given address\n */\n function addTokenTo(address _to, uint256 _tokenId)\n internal\n {\n require(tokenOwner[_tokenId] == address(0));\n tokenOwner[_tokenId] = _to;\n ownedTokensCount[_to] = safeAdd(ownedTokensCount[_to], 1);\n }\n\n /**\n * @dev Internal function to remove a token ID from the list of a given address\n * @param _from address representing the previous owner of the given token ID\n * @param _tokenId uint256 ID of the token to be removed from the tokens list of the given address\n */\n function removeTokenFrom(address _from, uint256 _tokenId)\n internal\n {\n require(ownerOf(_tokenId) == _from);\n ownedTokensCount[_from] = safeSub(ownedTokensCount[_from], 1);\n tokenOwner[_tokenId] = address(0);\n }\n\n /**\n * @dev Internal function to invoke `onERC721Received` on a target address\n * @dev The call is not executed if the target address is not a contract\n * @param _from address representing the previous owner of the given token ID\n * @param _to target address that will receive the tokens\n * @param _tokenId uint256 ID of the token to be transferred\n * @param _data bytes optional data to send along with the call\n * @return whether the call correctly returned the expected magic value\n */\n function checkAndCallSafeTransfer(\n address _from,\n address _to,\n uint256 _tokenId,\n bytes _data)\n internal\n returns (bool)\n {\n if (!isContract(_to)) {\n return true;\n }\n bytes4 retval = IERC721Receiver(_to).onERC721Received(_from, _tokenId, _data);\n return (retval == ERC721_RECEIVED);\n }\n\n function isContract(address addr)\n internal\n view\n returns (bool)\n {\n uint256 size;\n // XXX Currently there is no better way to check if there is a contract in an address\n // than to check the size of the code at that address.\n // See https://ethereum.stackexchange.com/a/14016/36603\n // for more details about how this works.\n // TODO Check this again before the Serenity release, because all addresses will be\n // contracts then.\n assembly { size := extcodesize(addr) } // solium-disable-line security/no-inline-assembly\n return size > 0;\n }\n}\n",
- "current/tokens/ERC721Token/IERC721Receiver.sol": "/*\nThe MIT License (MIT)\n\nCopyright (c) 2016 Smart Contract Solutions, Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be included\nin all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\npragma solidity ^0.4.24;\n\n/**\n * @title ERC721 token receiver interface\n * @dev Interface for any contract that wants to support safeTransfers\n * rom ERC721 asset contracts.\n * Modified from https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/token/ERC721/ERC721Receiver.sol\n */\ncontract IERC721Receiver {\n /**\n * @dev Magic value to be returned upon successful reception of an NFT\n * Equals to `bytes4(keccak256(\"onERC721Received(address,uint256,bytes)\"))`,\n * which can be also obtained as `ERC721Receiver(0).onERC721Received.selector`\n */\n bytes4 constant ERC721_RECEIVED = 0xf0b9e5ba;\n\n /**\n * @notice Handle the receipt of an NFT\n * @dev The ERC721 smart contract calls this function on the recipient\n * after a `safetransfer`. This function MAY throw to revert and reject the\n * transfer. This function MUST use 50,000 gas or less. Return of other\n * than the magic value MUST result in the transaction being reverted.\n * Note: the contract address is always the message sender.\n * @param _from The sending address\n * @param _tokenId The NFT identifier which is being transfered\n * @param _data Additional data with no specified format\n * @return `bytes4(keccak256(\"onERC721Received(address,uint256,bytes)\"))`\n */\n function onERC721Received(\n address _from,\n uint256 _tokenId,\n bytes _data)\n public\n returns (bytes4);\n}\n",
- "current/tokens/ERC721Token/IERC721Token.sol": "/*\nThe MIT License (MIT)\n\nCopyright (c) 2016 Smart Contract Solutions, Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be included\nin all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\npragma solidity ^0.4.24;\n\n/**\n * @title ERC721 Non-Fungible Token Standard basic interface\n * @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md\n * Modified from https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/token/ERC721/ERC721Basic.sol\n */\ncontract IERC721Token {\n string internal name_;\n string internal symbol_;\n\n event Transfer(\n address indexed _from,\n address indexed _to,\n uint256 _tokenId\n );\n event Approval(\n address indexed _owner,\n address indexed _approved,\n uint256 _tokenId\n );\n event ApprovalForAll(\n address indexed _owner,\n address indexed _operator,\n bool _approved\n );\n\n function name()\n public\n view\n returns (string);\n function symbol()\n public\n view\n returns (string);\n\n function balanceOf(address _owner)\n public\n view\n returns (uint256 _balance);\n function ownerOf(uint256 _tokenId)\n public\n view\n returns (address _owner);\n function exists(uint256 _tokenId)\n public\n view\n returns (bool _exists);\n\n function approve(address _to, uint256 _tokenId)\n public;\n function getApproved(uint256 _tokenId)\n public\n view\n returns (address _operator);\n\n function setApprovalForAll(address _operator, bool _approved)\n public;\n function isApprovedForAll(address _owner, address _operator)\n public\n view\n returns (bool);\n\n function transferFrom(\n address _from,\n address _to,\n uint256 _tokenId)\n public;\n function safeTransferFrom(\n address _from,\n address _to,\n uint256 _tokenId)\n public;\n function safeTransferFrom(\n address _from,\n address _to,\n uint256 _tokenId,\n bytes _data)\n public;\n}\n",
- "current/utils/SafeMath/SafeMath.sol": "pragma solidity ^0.4.24;\npragma experimental ABIEncoderV2;\n\ncontract SafeMath {\n function safeMul(uint a, uint b)\n internal\n pure\n returns (uint256)\n {\n uint c = a * b;\n assert(a == 0 || c / a == b);\n return c;\n }\n\n function safeDiv(uint a, uint b)\n internal\n pure\n returns (uint256)\n {\n uint c = a / b;\n return c;\n }\n\n function safeSub(uint a, uint b)\n internal\n pure\n returns (uint256)\n {\n assert(b <= a);\n return a - b;\n }\n\n function safeAdd(uint a, uint b)\n internal\n pure\n returns (uint256)\n {\n uint c = a + b;\n assert(c >= a);\n return c;\n }\n\n function max64(uint64 a, uint64 b)\n internal\n pure\n returns (uint256)\n {\n return a >= b ? a : b;\n }\n\n function min64(uint64 a, uint64 b)\n internal\n pure\n returns (uint256)\n {\n return a < b ? a : b;\n }\n\n function max256(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n return a >= b ? a : b;\n }\n\n function min256(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n return a < b ? a : b;\n }\n}\n"
+ "2.0.0/tokens/ERC721Token/ERC721Token.sol": "/*\nThe MIT License (MIT)\n\nCopyright (c) 2016 Smart Contract Solutions, Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be included\nin all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\npragma solidity 0.4.24;\n\nimport \"./IERC721Token.sol\";\nimport \"./IERC721Receiver.sol\";\nimport \"../../utils/SafeMath/SafeMath.sol\";\n\n\n/**\n * @title ERC721 Non-Fungible Token Standard basic implementation\n * @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md\n * Modified from https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/token/ERC721/ERC721BasicToken.sol\n */\ncontract ERC721Token is\n IERC721Token,\n SafeMath\n{\n // Equals to `bytes4(keccak256(\"onERC721Received(address,uint256,bytes)\"))`\n // which can be also obtained as `ERC721Receiver(0).onERC721Received.selector`\n bytes4 constant internal ERC721_RECEIVED = 0xf0b9e5ba;\n\n // Mapping from token ID to owner\n mapping (uint256 => address) internal tokenOwner;\n\n // Mapping from token ID to approved address\n mapping (uint256 => address) internal tokenApprovals;\n\n // Mapping from owner to number of owned token\n mapping (address => uint256) internal ownedTokensCount;\n\n // Mapping from owner to operator approvals\n mapping (address => mapping (address => bool)) internal operatorApprovals;\n\n /**\n * @dev Guarantees msg.sender is owner of the given token\n * @param _tokenId uint256 ID of the token to validate its ownership belongs to msg.sender\n */\n modifier onlyOwnerOf(uint256 _tokenId) {\n require(ownerOf(_tokenId) == msg.sender);\n _;\n }\n\n /**\n * @dev Checks msg.sender can transfer a token, by being owner, approved, or operator\n * @param _tokenId uint256 ID of the token to validate\n */\n modifier canTransfer(uint256 _tokenId) {\n require(isApprovedOrOwner(msg.sender, _tokenId));\n _;\n }\n\n constructor (\n string _name,\n string _symbol)\n public\n {\n name_ = _name;\n symbol_ = _symbol;\n }\n\n /**\n * @dev Gets the token name\n * @return string representing the token name\n */\n function name()\n public\n view\n returns (string)\n {\n return name_;\n }\n\n /**\n * @dev Gets the token symbol\n * @return string representing the token symbol\n */\n function symbol()\n public\n view\n returns (string)\n {\n return symbol_;\n }\n\n /**\n * @dev Gets the balance of the specified address\n * @param _owner address to query the balance of\n * @return uint256 representing the amount owned by the passed address\n */\n function balanceOf(address _owner)\n public\n view\n returns (uint256)\n {\n require(_owner != address(0));\n return ownedTokensCount[_owner];\n }\n\n /**\n * @dev Gets the owner of the specified token ID\n * @param _tokenId uint256 ID of the token to query the owner of\n * @return owner address currently marked as the owner of the given token ID\n */\n function ownerOf(uint256 _tokenId)\n public\n view\n returns (address)\n {\n address owner = tokenOwner[_tokenId];\n require(owner != address(0));\n return owner;\n }\n\n /**\n * @dev Returns whether the specified token exists\n * @param _tokenId uint256 ID of the token to query the existance of\n * @return whether the token exists\n */\n function exists(uint256 _tokenId)\n public\n view\n returns (bool)\n {\n address owner = tokenOwner[_tokenId];\n return owner != address(0);\n }\n\n /**\n * @dev Approves another address to transfer the given token ID\n * @dev The zero address indicates there is no approved address.\n * @dev There can only be one approved address per token at a given time.\n * @dev Can only be called by the token owner or an approved operator.\n * @param _to address to be approved for the given token ID\n * @param _tokenId uint256 ID of the token to be approved\n */\n function approve(address _to, uint256 _tokenId)\n public\n {\n address owner = ownerOf(_tokenId);\n require(_to != owner);\n require(msg.sender == owner || isApprovedForAll(owner, msg.sender));\n\n if (getApproved(_tokenId) != address(0) || _to != address(0)) {\n tokenApprovals[_tokenId] = _to;\n emit Approval(owner, _to, _tokenId);\n }\n }\n\n /**\n * @dev Gets the approved address for a token ID, or zero if no address set\n * @param _tokenId uint256 ID of the token to query the approval of\n * @return address currently approved for a the given token ID\n */\n function getApproved(uint256 _tokenId)\n public\n view\n returns (address)\n {\n return tokenApprovals[_tokenId];\n }\n\n /**\n * @dev Sets or unsets the approval of a given operator\n * @dev An operator is allowed to transfer all tokens of the sender on their behalf\n * @param _to operator address to set the approval\n * @param _approved representing the status of the approval to be set\n */\n function setApprovalForAll(address _to, bool _approved)\n public\n {\n require(_to != msg.sender);\n operatorApprovals[msg.sender][_to] = _approved;\n emit ApprovalForAll(msg.sender, _to, _approved);\n }\n\n /**\n * @dev Tells whether an operator is approved by a given owner\n * @param _owner owner address which you want to query the approval of\n * @param _operator operator address which you want to query the approval of\n * @return bool whether the given operator is approved by the given owner\n */\n function isApprovedForAll(address _owner, address _operator)\n public\n view\n returns (bool)\n {\n return operatorApprovals[_owner][_operator];\n }\n\n /**\n * @dev Transfers the ownership of a given token ID to another address\n * @dev Usage of this method is discouraged, use `safeTransferFrom` whenever possible\n * @dev Requires the msg sender to be the owner, approved, or operator\n * @param _from current owner of the token\n * @param _to address to receive the ownership of the given token ID\n * @param _tokenId uint256 ID of the token to be transferred\n */\n function transferFrom(address _from, address _to, uint256 _tokenId)\n public\n canTransfer(_tokenId)\n {\n require(_from != address(0));\n require(_to != address(0));\n\n clearApproval(_from, _tokenId);\n removeTokenFrom(_from, _tokenId);\n addTokenTo(_to, _tokenId);\n\n emit Transfer(_from, _to, _tokenId);\n }\n\n /**\n * @dev Safely transfers the ownership of a given token ID to another address\n * @dev If the target address is a contract, it must implement `onERC721Received`,\n * which is called upon a safe transfer, and return the magic value\n * `bytes4(keccak256(\"onERC721Received(address,uint256,bytes)\"))`; otherwise,\n * the transfer is reverted.\n * @dev Requires the msg sender to be the owner, approved, or operator\n * @param _from current owner of the token\n * @param _to address to receive the ownership of the given token ID\n * @param _tokenId uint256 ID of the token to be transferred\n */\n function safeTransferFrom(\n address _from,\n address _to,\n uint256 _tokenId)\n public\n canTransfer(_tokenId)\n {\n // solium-disable-next-line arg-overflow\n safeTransferFrom(_from, _to, _tokenId, \"\");\n }\n\n /**\n * @dev Safely transfers the ownership of a given token ID to another address\n * @dev If the target address is a contract, it must implement `onERC721Received`,\n * which is called upon a safe transfer, and return the magic value\n * `bytes4(keccak256(\"onERC721Received(address,uint256,bytes)\"))`; otherwise,\n * the transfer is reverted.\n * @dev Requires the msg sender to be the owner, approved, or operator\n * @param _from current owner of the token\n * @param _to address to receive the ownership of the given token ID\n * @param _tokenId uint256 ID of the token to be transferred\n * @param _data bytes data to send along with a safe transfer check\n */\n function safeTransferFrom(\n address _from,\n address _to,\n uint256 _tokenId,\n bytes _data)\n public\n canTransfer(_tokenId)\n {\n transferFrom(_from, _to, _tokenId);\n // solium-disable-next-line arg-overflow\n require(checkAndCallSafeTransfer(_from, _to, _tokenId, _data));\n }\n\n /**\n * @dev Returns whether the given spender can transfer a given token ID\n * @param _spender address of the spender to query\n * @param _tokenId uint256 ID of the token to be transferred\n * @return bool whether the msg.sender is approved for the given token ID,\n * is an operator of the owner, or is the owner of the token\n */\n function isApprovedOrOwner(address _spender, uint256 _tokenId)\n internal\n view\n returns (bool)\n {\n address owner = ownerOf(_tokenId);\n return _spender == owner || getApproved(_tokenId) == _spender || isApprovedForAll(owner, _spender);\n }\n\n /**\n * @dev Internal function to mint a new token\n * @dev Reverts if the given token ID already exists\n * @param _to The address that will own the minted token\n * @param _tokenId uint256 ID of the token to be minted by the msg.sender\n */\n function _mint(address _to, uint256 _tokenId)\n internal\n {\n require(_to != address(0));\n addTokenTo(_to, _tokenId);\n emit Transfer(address(0), _to, _tokenId);\n }\n\n /**\n * @dev Internal function to burn a specific token\n * @dev Reverts if the token does not exist\n * @param _tokenId uint256 ID of the token being burned by the msg.sender\n */\n function _burn(address _owner, uint256 _tokenId)\n internal\n {\n clearApproval(_owner, _tokenId);\n removeTokenFrom(_owner, _tokenId);\n emit Transfer(_owner, address(0), _tokenId);\n }\n\n /**\n * @dev Internal function to clear current approval of a given token ID\n * @dev Reverts if the given address is not indeed the owner of the token\n * @param _owner owner of the token\n * @param _tokenId uint256 ID of the token to be transferred\n */\n function clearApproval(address _owner, uint256 _tokenId)\n internal\n {\n require(ownerOf(_tokenId) == _owner);\n if (tokenApprovals[_tokenId] != address(0)) {\n tokenApprovals[_tokenId] = address(0);\n emit Approval(_owner, address(0), _tokenId);\n }\n }\n\n /**\n * @dev Internal function to add a token ID to the list of a given address\n * @param _to address representing the new owner of the given token ID\n * @param _tokenId uint256 ID of the token to be added to the tokens list of the given address\n */\n function addTokenTo(address _to, uint256 _tokenId)\n internal\n {\n require(tokenOwner[_tokenId] == address(0));\n tokenOwner[_tokenId] = _to;\n ownedTokensCount[_to] = safeAdd(ownedTokensCount[_to], 1);\n }\n\n /**\n * @dev Internal function to remove a token ID from the list of a given address\n * @param _from address representing the previous owner of the given token ID\n * @param _tokenId uint256 ID of the token to be removed from the tokens list of the given address\n */\n function removeTokenFrom(address _from, uint256 _tokenId)\n internal\n {\n require(ownerOf(_tokenId) == _from);\n ownedTokensCount[_from] = safeSub(ownedTokensCount[_from], 1);\n tokenOwner[_tokenId] = address(0);\n }\n\n /**\n * @dev Internal function to invoke `onERC721Received` on a target address\n * @dev The call is not executed if the target address is not a contract\n * @param _from address representing the previous owner of the given token ID\n * @param _to target address that will receive the tokens\n * @param _tokenId uint256 ID of the token to be transferred\n * @param _data bytes optional data to send along with the call\n * @return whether the call correctly returned the expected magic value\n */\n function checkAndCallSafeTransfer(\n address _from,\n address _to,\n uint256 _tokenId,\n bytes _data)\n internal\n returns (bool)\n {\n if (!isContract(_to)) {\n return true;\n }\n bytes4 retval = IERC721Receiver(_to).onERC721Received(_from, _tokenId, _data);\n return (retval == ERC721_RECEIVED);\n }\n\n function isContract(address addr)\n internal\n view\n returns (bool)\n {\n uint256 size;\n // XXX Currently there is no better way to check if there is a contract in an address\n // than to check the size of the code at that address.\n // See https://ethereum.stackexchange.com/a/14016/36603\n // for more details about how this works.\n // TODO Check this again before the Serenity release, because all addresses will be\n // contracts then.\n assembly { size := extcodesize(addr) } // solium-disable-line security/no-inline-assembly\n return size > 0;\n }\n}\n",
+ "2.0.0/tokens/ERC721Token/IERC721Receiver.sol": "/*\nThe MIT License (MIT)\n\nCopyright (c) 2016 Smart Contract Solutions, Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be included\nin all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\npragma solidity 0.4.24;\n\n\n/**\n * @title ERC721 token receiver interface\n * @dev Interface for any contract that wants to support safeTransfers\n * rom ERC721 asset contracts.\n * Modified from https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/token/ERC721/ERC721Receiver.sol\n */\ncontract IERC721Receiver {\n /**\n * @dev Magic value to be returned upon successful reception of an NFT\n * Equals to `bytes4(keccak256(\"onERC721Received(address,uint256,bytes)\"))`,\n * which can be also obtained as `ERC721Receiver(0).onERC721Received.selector`\n */\n bytes4 constant internal ERC721_RECEIVED = 0xf0b9e5ba;\n\n /**\n * @notice Handle the receipt of an NFT\n * @dev The ERC721 smart contract calls this function on the recipient\n * after a `safetransfer`. This function MAY throw to revert and reject the\n * transfer. This function MUST use 50,000 gas or less. Return of other\n * than the magic value MUST result in the transaction being reverted.\n * Note: the contract address is always the message sender.\n * @param _from The sending address\n * @param _tokenId The NFT identifier which is being transfered\n * @param _data Additional data with no specified format\n * @return `bytes4(keccak256(\"onERC721Received(address,uint256,bytes)\"))`\n */\n function onERC721Received(\n address _from,\n uint256 _tokenId,\n bytes _data)\n public\n returns (bytes4);\n}\n",
+ "2.0.0/tokens/ERC721Token/IERC721Token.sol": "/*\nThe MIT License (MIT)\n\nCopyright (c) 2016 Smart Contract Solutions, Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be included\nin all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\npragma solidity 0.4.24;\n\n\n/**\n * @title ERC721 Non-Fungible Token Standard basic interface\n * @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md\n * Modified from https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/token/ERC721/ERC721Basic.sol\n */\ncontract IERC721Token {\n string internal name_;\n string internal symbol_;\n\n event Transfer(\n address indexed _from,\n address indexed _to,\n uint256 _tokenId\n );\n\n event Approval(\n address indexed _owner,\n address indexed _approved,\n uint256 _tokenId\n );\n\n event ApprovalForAll(\n address indexed _owner,\n address indexed _operator,\n bool _approved\n );\n\n function name()\n public\n view\n returns (string);\n\n function symbol()\n public\n view\n returns (string);\n\n function balanceOf(address _owner)\n public\n view\n returns (uint256 _balance);\n\n function ownerOf(uint256 _tokenId)\n public\n view\n returns (address _owner);\n\n function exists(uint256 _tokenId)\n public\n view\n returns (bool _exists);\n\n function approve(address _to, uint256 _tokenId)\n public;\n\n function getApproved(uint256 _tokenId)\n public\n view\n returns (address _operator);\n\n function setApprovalForAll(address _operator, bool _approved)\n public;\n\n function isApprovedForAll(address _owner, address _operator)\n public\n view\n returns (bool);\n\n function transferFrom(\n address _from,\n address _to,\n uint256 _tokenId\n )\n public;\n\n function safeTransferFrom(\n address _from,\n address _to,\n uint256 _tokenId\n )\n public;\n\n function safeTransferFrom(\n address _from,\n address _to,\n uint256 _tokenId,\n bytes _data\n )\n public;\n}\n",
+ "2.0.0/utils/SafeMath/SafeMath.sol": "pragma solidity 0.4.24;\n\n\ncontract SafeMath {\n function safeMul(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n if (a == 0) {\n return 0;\n }\n uint256 c = a * b;\n require(\n c / a == b,\n \"UINT256_OVERFLOW\"\n );\n return c;\n }\n\n function safeDiv(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n uint256 c = a / b;\n return c;\n }\n\n function safeSub(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n require(\n b <= a,\n \"UINT256_OVERFLOW\"\n );\n return a - b;\n }\n\n function safeAdd(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n uint256 c = a + b;\n require(\n c >= a,\n \"UINT256_OVERFLOW\"\n );\n return c;\n }\n\n function max64(uint64 a, uint64 b)\n internal\n pure\n returns (uint256)\n {\n return a >= b ? a : b;\n }\n\n function min64(uint64 a, uint64 b)\n internal\n pure\n returns (uint256)\n {\n return a < b ? a : b;\n }\n\n function max256(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n return a >= b ? a : b;\n }\n\n function min256(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n return a < b ? a : b;\n }\n}\n"
},
- "sourceTreeHashHex": "0x0226236808262ce8e54893f2f9307018ab4de14b78f2caf193eed21ed008d926",
+ "sourceTreeHashHex": "0xf19917b6dd59b2d042f807298df297bf8b885ac33b0be8d986dac91271e13176",
"compiler": {
"name": "solc",
"version": "soljson-v0.4.24+commit.e67f0147.js",
diff --git a/packages/migrations/artifacts/2.0.0/Exchange.json b/packages/migrations/artifacts/2.0.0/Exchange.json
index b2e7f2bd1..3add148b5 100644
--- a/packages/migrations/artifacts/2.0.0/Exchange.json
+++ b/packages/migrations/artifacts/2.0.0/Exchange.json
@@ -1008,6 +1008,89 @@
"constant": true,
"inputs": [
{
+ "components": [
+ {
+ "name": "makerAddress",
+ "type": "address"
+ },
+ {
+ "name": "takerAddress",
+ "type": "address"
+ },
+ {
+ "name": "feeRecipientAddress",
+ "type": "address"
+ },
+ {
+ "name": "senderAddress",
+ "type": "address"
+ },
+ {
+ "name": "makerAssetAmount",
+ "type": "uint256"
+ },
+ {
+ "name": "takerAssetAmount",
+ "type": "uint256"
+ },
+ {
+ "name": "makerFee",
+ "type": "uint256"
+ },
+ {
+ "name": "takerFee",
+ "type": "uint256"
+ },
+ {
+ "name": "expirationTimeSeconds",
+ "type": "uint256"
+ },
+ {
+ "name": "salt",
+ "type": "uint256"
+ },
+ {
+ "name": "makerAssetData",
+ "type": "bytes"
+ },
+ {
+ "name": "takerAssetData",
+ "type": "bytes"
+ }
+ ],
+ "name": "orders",
+ "type": "tuple[]"
+ }
+ ],
+ "name": "getOrdersInfo",
+ "outputs": [
+ {
+ "components": [
+ {
+ "name": "orderStatus",
+ "type": "uint8"
+ },
+ {
+ "name": "orderHash",
+ "type": "bytes32"
+ },
+ {
+ "name": "orderTakerAssetFilledAmount",
+ "type": "uint256"
+ }
+ ],
+ "name": "",
+ "type": "tuple[]"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "constant": true,
+ "inputs": [
+ {
"name": "",
"type": "bytes32"
},
@@ -1903,15 +1986,15 @@
"evm": {
"bytecode": {
"linkReferences": {},
- "object": "0x60806040523480156200001157600080fd5b506040516200544338038062005443833981018060405262000037919081019062000433565b805181906200004e90600090602084019062000332565b5050604080517f454950373132446f6d61696e28000000000000000000000000000000000000006020808301919091527f737472696e67206e616d652c0000000000000000000000000000000000000000602d8301527f737472696e672076657273696f6e2c000000000000000000000000000000000060398301527f6164647265737320766572696679696e67436f6e74726163740000000000000060488301527f2900000000000000000000000000000000000000000000000000000000000000606183015282516042818403018152606290920192839052815191929182918401908083835b60208310620001585780518252601f19909201916020918201910162000137565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208285018552600b8084527f30782050726f746f636f6c000000000000000000000000000000000000000000928401928352945190965091945090928392508083835b60208310620001e25780518252601f199092019160209182019101620001c1565b51815160209384036101000a600019018019909216911617905260408051929094018290038220828501855260018084527f3200000000000000000000000000000000000000000000000000000000000000928401928352945190965091945090928392508083835b602083106200026c5780518252601f1990920191602091820191016200024b565b51815160209384036101000a6000190180199092169116179052604051919093018190038120620002a797969550935030920190506200048f565b6040516020818303038152906040526040518082805190602001908083835b60208310620002e75780518252601f199092019160209182019101620002c6565b5181516000196020949094036101000a939093019283169219169190911790526040519201829003909120600155505060028054600160a060020a0319163317905550620005639050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200037557805160ff1916838001178555620003a5565b82800160010185558215620003a5579182015b82811115620003a557825182559160200191906001019062000388565b50620003b3929150620003b7565b5090565b620003d491905b80821115620003b35760008155600101620003be565b90565b6000601f82018313620003e957600080fd5b815162000400620003fa82620004fc565b620004d5565b915080825260208301602083018583830111156200041d57600080fd5b6200042a83828462000530565b50505092915050565b6000602082840312156200044657600080fd5b81516001604060020a038111156200045d57600080fd5b6200046b84828501620003d7565b949350505050565b6200047e8162000524565b82525050565b6200047e81620003d4565b608081016200049f828762000484565b620004ae602083018662000484565b620004bd604083018562000484565b620004cc606083018462000473565b95945050505050565b6040518181016001604060020a0381118282101715620004f457600080fd5b604052919050565b60006001604060020a038211156200051357600080fd5b506020601f91909101601f19160190565b600160a060020a031690565b60005b838110156200054d57818101518382015260200162000533565b838111156200055d576000848401525b50505050565b614ed080620005736000396000f3006080604052600436106101b65763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416632624b2d981146101bb578063288cdc91146101e6578063297bb70b146102065780632ac12622146102335780633683ef8e146102605780633c28d861146102825780633e228bae146102af5780633fd3c997146102cf5780634ac14782146102fc5780634d0ae5461461031c5780634f9559b11461033c57806350dde1901461035c578063607041081461037c578063642f2eaf146103a957806364a3bc15146103c957806377fcce68146103e95780637b8e3514146104095780637e1d98081461042957806382c174d0146104495780638da5cb5b14610469578063936347021461047e578063a3e203801461049e578063b4be83d5146104be578063bfc8bfce146104de578063c585bb93146104fe578063c75e0a811461051e578063d46b02c31461054b578063d9bfa73e1461056b578063db123b1a1461058b578063dd1c7d18146105ad578063e306f779146105cd578063e5fa431b146105e2578063eea086ba14610602578063f2fde38b14610617578063ffa1ad7414610637575b600080fd5b3480156101c757600080fd5b506101d061064c565b6040516101dd9190614aa8565b60405180910390f35b3480156101f257600080fd5b506101d061020136600461400b565b6107a0565b34801561021257600080fd5b50610226610221366004613f10565b6107b2565b6040516101dd9190614d22565b34801561023f57600080fd5b5061025361024e36600461400b565b610842565b6040516101dd9190614a9a565b34801561026c57600080fd5b5061028061027b366004614048565b610857565b005b34801561028e57600080fd5b506102a261029d36600461417c565b610930565b6040516101dd9190614d30565b3480156102bb57600080fd5b506102266102ca36600461423c565b610a1c565b3480156102db57600080fd5b506102ef6102ea36600461410b565b610c2c565b6040516101dd9190614b64565b34801561030857600080fd5b50610280610317366004613edb565b610c54565b34801561032857600080fd5b50610226610337366004613f10565b610c8c565b34801561034857600080fd5b5061028061035736600461400b565b610d13565b34801561036857600080fd5b50610226610377366004613f10565b610e37565b34801561038857600080fd5b5061039c61039736600461410b565b610ebe565b6040516101dd91906149cb565b3480156103b557600080fd5b506102536103c436600461400b565b610f0c565b3480156103d557600080fd5b506102266103e436600461423c565b610f21565b3480156103f557600080fd5b50610280610404366004613eab565b610f7b565b34801561041557600080fd5b50610253610424366004613e71565b611026565b34801561043557600080fd5b50610226610444366004613fa4565b611046565b34801561045557600080fd5b50610253610464366004614029565b611117565b34801561047557600080fd5b5061039c611137565b34801561048a57600080fd5b506102536104993660046140b0565b611153565b3480156104aa57600080fd5b506102266104b9366004613fa4565b611979565b3480156104ca57600080fd5b506102266104d936600461423c565b611a89565b3480156104ea57600080fd5b506102806104f9366004614285565b611b0d565b34801561050a57600080fd5b50610280610519366004613e53565b611d88565b34801561052a57600080fd5b5061053e610539366004614147565b611fb3565b6040516101dd9190614d3f565b34801561055757600080fd5b50610280610566366004614147565b6120ae565b34801561057757600080fd5b506101d0610586366004613e71565b6120d9565b34801561059757600080fd5b506105a06120f6565b6040516101dd9190614b53565b3480156105b957600080fd5b506102266105c8366004613fa4565b6121a2565b3480156105d957600080fd5b506101d0612268565b3480156105ee57600080fd5b506102266105fd366004613fa4565b61226e565b34801561060e57600080fd5b5061039c612342565b34801561062357600080fd5b50610280610632366004613e53565b61235e565b34801561064357600080fd5b506105a061240f565b604080517f454950373132446f6d61696e28000000000000000000000000000000000000006020808301919091527f737472696e67206e616d652c0000000000000000000000000000000000000000602d8301527f737472696e672076657273696f6e2c000000000000000000000000000000000060398301527f6164647265737320766572696679696e67436f6e74726163740000000000000060488301527f2900000000000000000000000000000000000000000000000000000000000000606183015282516042818403018152606290920192839052815191929182918401908083835b6020831061077057805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610733565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902081565b60036020526000908152604090205481565b6107ba613a79565b60006107c4613a79565b600091505b85518210156108395761082286838151811015156107e357fe5b9060200190602002015186848151811015156107fb57fe5b90602001906020020151868581518110151561081357fe5b90602001906020020151611a89565b905061082e8382612446565b6001909101906107c9565b50509392505050565b60046020526000908152604090205460ff1681565b610892848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843750611153945050505050565b15156108d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614bf2565b60405180910390fd5b5050600091825260066020908152604080842073ffffffffffffffffffffffffffffffffffffffff9093168452919052902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b610938613aa2565b610940613ad1565b610948613ad1565b610160808801516101408089019190915288015190870152600061096b88611fb3565b925061097687611fb3565b91506109806124a8565b905061098c88886124f1565b6109a088888560400151856040015161254d565b8051602001519094506109ba90899085908490808b612611565b60208085015101516109d390889084908490808a612611565b6109ec888285602001518660400151886000015161282e565b610a05878284602001518560400151886020015161282e565b610a11888883876128da565b505050949350505050565b610a24613a79565b604080517fb4be83d5000000000000000000000000000000000000000000000000000000008082526060600483018181528851606485019081526020808b01516084870152958a015160a48601529189015160c4850152608089015160e485015260a089015161010485015260c089015161012485015260e0890151610144850152610100890151610164850152610120890151610184850152610140890180516101a486019081526101608b01516101c487015261018090525180516101e48601819052939591938493926024870192849261020489019291820191601f82010460005b81811015610b27578351855260209485019490930192600101610b09565b50505050818103610160808401919091528c0151805180835260209283019291820191601f82010460005b81811015610b70578351855260209485019490930192600101610b52565b5050508b84525084810360209384019081528a518083529093918201918b81019190601f82010460005b81811015610bb8578351855260209485019490930192600101610b9a565b5060808a8b86038c305af4808015610bd75760018114610bf557610c18565b60008e52600060208f0152600060408f0152600060608f0152610c18565b8b518e5260208c015160208f015260408c015160408f015260608c015160608f01525b505050505050505050505050509392505050565b600a6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60005b8151811015610c8857610c808282815181101515610c7157fe5b906020019060200201516120ae565b600101610c57565b5050565b610c94613a79565b6000610c9e613a79565b600091505b855182101561083957610cfc8683815181101515610cbd57fe5b906020019060200201518684815181101515610cd557fe5b906020019060200201518685815181101515610ced57fe5b90602001906020020151610f21565b9050610d088382612446565b600190910190610ca3565b600080600080610d216124a8565b935073ffffffffffffffffffffffffffffffffffffffff84163314610d465733610d49565b60005b73ffffffffffffffffffffffffffffffffffffffff8086166000908152600560209081526040808320938516835292905220549093506001860192509050808211610dc0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614c72565b73ffffffffffffffffffffffffffffffffffffffff80851660008181526005602090815260408083209488168084529490915290819020859055517f82af639571738f4ebd4268fb0363d8957ebe1bbb9e78dba5ebd69eed39b154f090610e28908690614aa8565b60405180910390a35050505050565b610e3f613a79565b6000610e49613a79565b600091505b855182101561083957610ea78683815181101515610e6857fe5b906020019060200201518684815181101515610e8057fe5b906020019060200201518685815181101515610e9857fe5b90602001906020020151610a1c565b9050610eb38382612446565b600190910190610e4e565b7fffffffff0000000000000000000000000000000000000000000000000000000081166000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff165b919050565b60086020526000908152604090205460ff1681565b610f29613a79565b610f34848484611a89565b60208101519091508314610f74576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614c92565b9392505050565b6000610f856124a8565b73ffffffffffffffffffffffffffffffffffffffff8181166000818152600760209081526040808320948916808452949091529081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168715151790555192935090917fa8656e308026eeabce8f0bc18048433252318ab80ac79da0b3d3d8697dfba89190611019908690614a9a565b60405180910390a3505050565b600760209081526000928352604080842090915290825290205460ff1681565b61104e613a79565b606060008061105b613a79565b87600081518110151561106a57fe5b9060200190602002015161016001519350600092505b875183101561110c5783888481518110151561109857fe5b9060200190602002015161016001819052506110b8878660200151612aba565b91506110e488848151811015156110cb57fe5b9060200190602002015183888681518110151561081357fe5b90506110f08582612446565b86856020015114156111015761110c565b600190920191611080565b505050509392505050565b600660209081526000928352604080842090915290825290205460ff1681565b60025473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000806000806000806000895111151561119c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614c62565b6111a589612acc565b7f010000000000000000000000000000000000000000000000000000000000000090049650600960ff881610611207576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614bb2565b8660ff16600981111561121657fe5b9550600086600981111561122657fe5b141561125e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614c52565b600186600981111561126c57fe5b14156112b4578851156112ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614d12565b6000975061196b565b60028660098111156112c257fe5b14156113fd578851604114611303576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614b72565b88600081518110151561131257fe5b01602001517f010000000000000000000000000000000000000000000000000000000000000090819004810204945061135289600163ffffffff612b9016565b935061136589602163ffffffff612b9016565b925060018b8686866040516000815260200160405260405161138a9493929190614b03565b60206040516020810390808403906000865af11580156113ae573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015173ffffffffffffffffffffffffffffffffffffffff8c8116908216149950925061196b9050565b600386600981111561140b57fe5b14156115b157885160411461144c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614b72565b88600081518110151561145b57fe5b01602001517f010000000000000000000000000000000000000000000000000000000000000090819004810204945061149b89600163ffffffff612b9016565b93506114ae89602163ffffffff612b9016565b925060018b60405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c0182600019166000191681526020019150506040516020818303038152906040526040518082805190602001908083835b6020831061154f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611512565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199092169116179052604080519290940182900382206000835291019283905261138a9450925089918991508890614b03565b60048660098111156115bf57fe5b141561161e578851156115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614d12565b73ffffffffffffffffffffffffffffffffffffffff8a163314975061196b565b600586600981111561162c57fe5b14156116df576040517f1626ba7e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b1690631626ba7e90611686908e908d90600401614ae3565b602060405180830381600087803b1580156116a057600080fd5b505af11580156116b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506116d89190810190613fed565b975061196b565b60068660098111156116ed57fe5b141561179a576116fc89612bdb565b73ffffffffffffffffffffffffffffffffffffffff808c1660009081526007602090815260408083209385168352929052205490915060ff161515611744576000975061196b565b6040517f9363470200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690639363470290611686908e908e908e90600401614ab6565b60078660098111156117a857fe5b14156117e85760008b815260066020908152604080832073ffffffffffffffffffffffffffffffffffffffff8e16845290915290205460ff16975061196b565b60088660098111156117f657fe5b1415611939578851604114611837576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614b72565b88600081518110151561184657fe5b01602001517f010000000000000000000000000000000000000000000000000000000000000090819004810204945061188689600163ffffffff612b9016565b935061189989602163ffffffff612b9016565b925060018b60405160200180807f19457468657265756d205369676e6564204d6573736167653a0a200000000000815250601b0182600019166000191681526020019150506040516020818303038152906040526040518082805190602001908083836020831061154f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611512565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614bb2565b505050505050509392505050565b611981613a79565b60606000806000611990613a79565b88600081518110151561199f57fe5b9060200190602002015161014001519450600093505b8851841015611a7d578489858151811015156119cd57fe5b60209081029091010151610140015285516119e9908990612aba565b9250611a2c89858151811015156119fc57fe5b9060200190602002015160a001518a86815181101515611a1857fe5b906020019060200201516080015185612c54565b9150611a588985815181101515611a3f57fe5b90602001906020020151838987815181101515610e9857fe5b9050611a648682612446565b8551881415611a7257611a7d565b6001909301926119b5565b50505050509392505050565b611a91613a79565b611a99613ad1565b6000806000611aa788611fb3565b9350611ab16124a8565b9250611ac58860a001518560400151612aba565b9150611ad18783612c71565b9050611ae18885858a858b612611565b611aeb8882612c87565b9450611b028884866020015187604001518961282e565b61110c888487612cf1565b60095460009073ffffffffffffffffffffffffffffffffffffffff1615611b60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614ca2565b611ba3611b9e888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843750612e06945050505050565b613047565b60008181526008602052604090205490915060ff1615611bef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614be2565b73ffffffffffffffffffffffffffffffffffffffff86163314611cc057611c47818785858080601f01602080910402602001604051908101604052809392919081815260200183838082843750611153945050505050565b1515611c7f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614d02565b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff88161790555b6000818152600860205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555130908690869080838380828437820191505092505050600060405180830381855af49150501515611d57576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614c12565b5050600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555050505050565b6002546000908190819073ffffffffffffffffffffffffffffffffffffffff163314611de0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614cb2565b8392508273ffffffffffffffffffffffffffffffffffffffff1663ae25532e6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015611e4757600080fd5b505af1158015611e5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611e7f9190810190614129565b7fffffffff0000000000000000000000000000000000000000000000000000000081166000908152600a602052604090205490925073ffffffffffffffffffffffffffffffffffffffff1690508015611f04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614b92565b7fffffffff0000000000000000000000000000000000000000000000000000000082166000908152600a60205260409081902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8616179055517fd2c6b762299c609bdb96520b58a49bfb80186934d4f71a86a367571a15c0319490611fa59084908790614b38565b60405180910390a150505050565b611fbb613ad1565b611fc4826131c7565b602082015260808201511515611fe15760015b60ff168152610f07565b60a08201511515611ff3576002611fd7565b6101008201514210612006576004611fd7565b60208082015160009081526004909152604090205460ff161561202a576006611fd7565b610120820151825173ffffffffffffffffffffffffffffffffffffffff90811660009081526005602090815260408083206060880151909416835292905220541115612077576006611fd7565b602080820151600090815260039091526040908190205490820181905260a0830151116120a5576005611fd7565b60038152919050565b6120b6613ad1565b6120bf82611fb3565b90506120cb82826131d5565b610c888282602001516132ec565b600560209081526000928352604080842090915290825290205481565b6000805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f8101849004840282018401909252818152929183018282801561219a5780601f1061216f5761010080835404028352916020019161219a565b820191906000526020600020905b81548152906001019060200180831161217d57829003601f168201915b505050505081565b6121aa613a79565b60606000806121b7613a79565b8760008151811015156121c657fe5b9060200190602002015161016001519350600092505b875183101561110c578388848151811015156121f457fe5b906020019060200201516101600181905250612214878660200151612aba565b9150612240888481518110151561222757fe5b90602001906020020151838886815181101515610e9857fe5b905061224c8582612446565b868560200151141561225d5761110c565b6001909201916121dc565b60015481565b612276613a79565b60606000806000612285613a79565b88600081518110151561229457fe5b9060200190602002015161014001519450600093505b8851841015611a7d578489858151811015156122c257fe5b60209081029091010151610140015285516122de908990612aba565b92506122f189858151811015156119fc57fe5b915061231d898581518110151561230457fe5b9060200190602002015183898781518110151561081357fe5b90506123298682612446565b855188141561233757611a7d565b6001909301926122aa565b60095473ffffffffffffffffffffffffffffffffffffffff1681565b60025473ffffffffffffffffffffffffffffffffffffffff1633146123af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614cb2565b73ffffffffffffffffffffffffffffffffffffffff81161561240c57600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b60408051808201909152600b81527f322e302e312d616c706861000000000000000000000000000000000000000000602082015281565b815181516124549190613393565b82526020808301519082015161246a9190613393565b6020830152604080830151908201516124839190613393565b60408301526060808301519082015161249c9190613393565b60609092019190915250565b600954600090819073ffffffffffffffffffffffffffffffffffffffff16156124e95760095473ffffffffffffffffffffffffffffffffffffffff166124eb565b335b92915050565b6125038260a001518260a001516133a2565b612515836080015183608001516133a2565b1015610c88576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614cf2565b612555613aa2565b6000806000806125698960a0015188612aba565b93506125798860a0015187612aba565b92506125898389608001516133a2565b612597858a60a001516133a2565b116125b9578391506125b28860a00151896080015184612c54565b90506125d2565b8290506125cf88608001518960a0015183612c54565b91505b6125dc8983612c87565b85526125e88882612c87565b60208087018290528651519101516126009190612aba565b604086015250505050949350505050565b845160ff1660031461264f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614cd2565b821515612688576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614c22565b606086015173ffffffffffffffffffffffffffffffffffffffff16156126fb57606086015173ffffffffffffffffffffffffffffffffffffffff1633146126fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614ce2565b602086015173ffffffffffffffffffffffffffffffffffffffff1615612786578373ffffffffffffffffffffffffffffffffffffffff16866020015173ffffffffffffffffffffffffffffffffffffffff16141515612786576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614b82565b604085015115156127dc576127a48560200151876000015183611153565b15156127dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614bc2565b6127ef828760a0015188608001516133c6565b15612826576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614c02565b505050505050565b61283c828260200151613393565b600084815260036020908152604091829020929092558681015187518451938501518584015160608701516101408c01516101608d015196518b9873ffffffffffffffffffffffffffffffffffffffff9788169897909616967f0bcc4c97732e47d9946f229edb95f5b6323f601300e4690de719993f3c371129966128cb968f963396929591949093906149d9565b60405180910390a45050505050565b60008054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156129845780601f1061295957610100808354040283529160200191612984565b820191906000526020600020905b81548152906001019060200180831161296757829003601f168201915b505050505090506129ac85610140015186600001518660000151856020015160200151613417565b610140840151845186518451602001516129c893929190613417565b6129e18561014001518660000151858560400151613417565b6129fd8186600001518760400151856000015160400151613417565b612a198185600001518660400151856020015160400151613417565b836040015173ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff161415612a8357612a7e81848760400151612a79866000015160600151876020015160600151613393565b613417565b612ab3565b612a9b81848760400151856000015160600151613417565b612ab381848660400151856020015160600151613417565b5050505050565b600082821115612ac657fe5b50900390565b6000808251111515612b0a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614c42565b815182907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908110612b3a57fe5b016020015182517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01909252507f0100000000000000000000000000000000000000000000000000000000000000908190040290565b600081602001835110151515612bd2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614ba2565b50016020015190565b60006014825110151515612c1b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614cc2565b612c298260148451036135a8565b82517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec019092525090565b6000612c69612c6385846133a2565b84613609565b949350505050565b6000818310612c805781610f74565b5090919050565b612c8f613a79565b6020810182905260a08301516080840151612cab918491612c54565b8152602081015160a084015160c0850151612cc7929190612c54565b6040820152602081015160a084015160e0850151612ce6929190612c54565b606082015292915050565b60008054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015612d9b5780601f10612d7057610100808354040283529160200191612d9b565b820191906000526020600020905b815481529060010190602001808311612d7e57829003601f168201915b50505050509050612dbb8461014001518560000151858560000151613417565b612dd48461016001518486600001518560200151613417565b612dec81856000015186604001518560400151613417565b612e00818486604001518560600151613417565b50505050565b604080517f5a65726f45785472616e73616374696f6e2800000000000000000000000000006020808301919091527f75696e743235362073616c742c0000000000000000000000000000000000000060328301527f61646472657373207369676e6572416464726573732c00000000000000000000603f8301527f627974657320646174610000000000000000000000000000000000000000000060558301527f2900000000000000000000000000000000000000000000000000000000000000605f830152825180830384018152606090920192839052815160009384938493909282918401908083835b60208310612f2f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612ef2565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260405191909301819003812089519097508995509093508392850191508083835b60208310612fc557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612f88565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040805192909401829003822097825281019a909a525073ffffffffffffffffffffffffffffffffffffffff97909716968801969096525050606085015250506080909120919050565b60006040805190810160405280600281526020017f1901000000000000000000000000000000000000000000000000000000000000815250600154836040516020018084805190602001908083835b602083106130d357805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613096565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199092169116179052920194855250838101929092525060408051808403830181529281019081905282519293509182918401908083835b6020831061317757805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161313a565b5181516020939093036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199091169216919091179052604051920182900390912095945050505050565b60006124eb611b9e83613620565b805160009060ff16600314613216576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614cd2565b606083015173ffffffffffffffffffffffffffffffffffffffff161561328957606083015173ffffffffffffffffffffffffffffffffffffffff163314613289576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614ce2565b6132916124a8565b835190915073ffffffffffffffffffffffffffffffffffffffff8083169116146132e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614bd2565b505050565b6000818152600460205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558281015183516101408501516101608601519351859473ffffffffffffffffffffffffffffffffffffffff9485169493909316927fdc47b3613d9fe400085f6dbdc99453462279057e6207385042827ed6b1a62cf79261338792339290614a5d565b60405180910390a45050565b600082820183811015610f7457fe5b60008282028315806133be57508284828115156133bb57fe5b04145b1515610f7457fe5b6000806000848015156133d557fe5b86850991508115156133ea5760009250610839565b6134096133fa83620f42406133a2565b61340488876133a2565b613609565b6103e8109695505050505050565b600080600083111561282657855160031061345e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614c82565b50506020848101517fffffffff00000000000000000000000000000000000000000000000000000000166000818152600a90925260409091205473ffffffffffffffffffffffffffffffffffffffff168015156134e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614c32565b604051660fffffffffffe0603f885101168060840182017fa85e59e40000000000000000000000000000000000000000000000000000000083526080600484015273ffffffffffffffffffffffffffffffffffffffff8816602484015273ffffffffffffffffffffffffffffffffffffffff87166044840152856064840152608483015b8181101561358357895181526020998a01990161356b565b61020084858403866000895af180151561359b573d85fd5b5050505050505050505050565b6000816014018351101515156135ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614cc2565b50016014015173ffffffffffffffffffffffffffffffffffffffff1690565b600080828481151561361757fe5b04949350505050565b604080517f4f726465722800000000000000000000000000000000000000000000000000006020808301919091527f61646472657373206d616b6572416464726573732c000000000000000000000060268301527f616464726573732074616b6572416464726573732c0000000000000000000000603b8301527f6164647265737320666565526563697069656e74416464726573732c0000000060508301527f616464726573732073656e646572416464726573732c00000000000000000000606c8301527f75696e74323536206d616b65724173736574416d6f756e742c0000000000000060828301527f75696e743235362074616b65724173736574416d6f756e742c00000000000000609b8301527f75696e74323536206d616b65724665652c00000000000000000000000000000060b48301527f75696e743235362074616b65724665652c00000000000000000000000000000060c58301527f75696e743235362065787069726174696f6e54696d655365636f6e64732c000060d68301527f75696e743235362073616c742c0000000000000000000000000000000000000060f48301527f6279746573206d616b65724173736574446174612c00000000000000000000006101018301527f62797465732074616b65724173736574446174610000000000000000000000006101168301527f290000000000000000000000000000000000000000000000000000000000000061012a830152825161010b81840301815261012b90920192839052815160009384938493849391929182918401908083835b602083106138a857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161386b565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930181900381206101408b0151805191995095509093508392850191508083835b6020831061394357805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613906565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930181900381206101608b0151805191985095509093508392850191508083835b602083106139de57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016139a1565b5181516020939093036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909116921691909117905260405192018290039091207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0890180516101408b018051610160909c0180519a84529881529288526101a0822091529890525050509190525090919050565b608060405190810160405280600081526020016000815260200160008152602001600081525090565b61012060405190810160405280613ab7613a79565b8152602001613ac4613a79565b8152602001600081525090565b604080516060810182526000808252602082018190529181019190915290565b6000610f748235614ddf565b6000601f82018313613b0e57600080fd5b8135613b21613b1c82614d74565b614d4d565b81815260209384019390925082018360005b83811015613b5f5781358601613b498882613cbb565b8452506020928301929190910190600101613b33565b5050505092915050565b6000601f82018313613b7a57600080fd5b8135613b88613b1c82614d74565b81815260209384019390925082018360005b83811015613b5f5781358601613bb08882613d0a565b8452506020928301929190910190600101613b9a565b6000601f82018313613bd757600080fd5b8135613be5613b1c82614d74565b91508181835260208401935060208101905083856020840282011115613c0a57600080fd5b60005b83811015613b5f5781613c208882613c4e565b8452506020928301929190910190600101613c0d565b6000610f748235614df8565b6000610f748251614df8565b6000610f748235614dfd565b6000610f748235614e00565b6000610f748251614e00565b600080601f83018413613c8457600080fd5b50813567ffffffffffffffff811115613c9c57600080fd5b602083019150836001820283011115613cb457600080fd5b9250929050565b6000601f82018313613ccc57600080fd5b8135613cda613b1c82614d95565b91508082526020830160208301858383011115613cf657600080fd5b613d01838284614e36565b50505092915050565b60006101808284031215613d1d57600080fd5b613d28610180614d4d565b90506000613d368484613af1565b8252506020613d4784848301613af1565b6020830152506040613d5b84828501613af1565b6040830152506060613d6f84828501613af1565b6060830152506080613d8384828501613c4e565b60808301525060a0613d9784828501613c4e565b60a08301525060c0613dab84828501613c4e565b60c08301525060e0613dbf84828501613c4e565b60e083015250610100613dd484828501613c4e565b61010083015250610120613dea84828501613c4e565b6101208301525061014082013567ffffffffffffffff811115613e0c57600080fd5b613e1884828501613cbb565b6101408301525061016082013567ffffffffffffffff811115613e3a57600080fd5b613e4684828501613cbb565b6101608301525092915050565b600060208284031215613e6557600080fd5b6000612c698484613af1565b60008060408385031215613e8457600080fd5b6000613e908585613af1565b9250506020613ea185828601613af1565b9150509250929050565b60008060408385031215613ebe57600080fd5b6000613eca8585613af1565b9250506020613ea185828601613c36565b600060208284031215613eed57600080fd5b813567ffffffffffffffff811115613f0457600080fd5b612c6984828501613b69565b600080600060608486031215613f2557600080fd5b833567ffffffffffffffff811115613f3c57600080fd5b613f4886828701613b69565b935050602084013567ffffffffffffffff811115613f6557600080fd5b613f7186828701613bc6565b925050604084013567ffffffffffffffff811115613f8e57600080fd5b613f9a86828701613afd565b9150509250925092565b600080600060608486031215613fb957600080fd5b833567ffffffffffffffff811115613fd057600080fd5b613fdc86828701613b69565b9350506020613f7186828701613c4e565b600060208284031215613fff57600080fd5b6000612c698484613c42565b60006020828403121561401d57600080fd5b6000612c698484613c4e565b6000806040838503121561403c57600080fd5b6000613e908585613c4e565b6000806000806060858703121561405e57600080fd5b600061406a8787613c4e565b945050602061407b87828801613af1565b935050604085013567ffffffffffffffff81111561409857600080fd5b6140a487828801613c72565b95989497509550505050565b6000806000606084860312156140c557600080fd5b60006140d18686613c4e565b93505060206140e286828701613af1565b925050604084013567ffffffffffffffff8111156140ff57600080fd5b613f9a86828701613cbb565b60006020828403121561411d57600080fd5b6000612c698484613c5a565b60006020828403121561413b57600080fd5b6000612c698484613c66565b60006020828403121561415957600080fd5b813567ffffffffffffffff81111561417057600080fd5b612c6984828501613d0a565b6000806000806080858703121561419257600080fd5b843567ffffffffffffffff8111156141a957600080fd5b6141b587828801613d0a565b945050602085013567ffffffffffffffff8111156141d257600080fd5b6141de87828801613d0a565b935050604085013567ffffffffffffffff8111156141fb57600080fd5b61420787828801613cbb565b925050606085013567ffffffffffffffff81111561422457600080fd5b61423087828801613cbb565b91505092959194509250565b60008060006060848603121561425157600080fd5b833567ffffffffffffffff81111561426857600080fd5b61427486828701613d0a565b93505060206140e286828701613c4e565b6000806000806000806080878903121561429e57600080fd5b60006142aa8989613c4e565b96505060206142bb89828a01613af1565b955050604087013567ffffffffffffffff8111156142d857600080fd5b6142e489828a01613c72565b9450945050606087013567ffffffffffffffff81111561430357600080fd5b61430f89828a01613c72565b92509250509295509295509295565b61432781614ddf565b82525050565b61432781614df8565b61432781614dfd565b61432781614e00565b600061435382614ddb565b808452614367816020860160208601614e42565b61437081614e6e565b9093016020019392505050565b61432781614e2b565b601281527f4c454e4754485f36355f52455155495245440000000000000000000000000000602082015260400190565b600d81527f494e56414c49445f54414b455200000000000000000000000000000000000000602082015260400190565b601a81527f41535345545f50524f58595f414c52454144595f455849535453000000000000602082015260400190565b602681527f475245415445525f4f525f455155414c5f544f5f33325f4c454e4754485f524560208201527f5155495245440000000000000000000000000000000000000000000000000000604082015260600190565b601581527f5349474e41545552455f554e535550504f525445440000000000000000000000602082015260400190565b601781527f494e56414c49445f4f524445525f5349474e4154555245000000000000000000602082015260400190565b600d81527f494e56414c49445f4d414b455200000000000000000000000000000000000000602082015260400190565b600f81527f494e56414c49445f54585f484153480000000000000000000000000000000000602082015260400190565b601181527f494e56414c49445f5349474e4154555245000000000000000000000000000000602082015260400190565b600e81527f524f554e44494e475f4552524f52000000000000000000000000000000000000602082015260400190565b601081527f4641494c45445f455845435554494f4e00000000000000000000000000000000602082015260400190565b601481527f494e56414c49445f54414b45525f414d4f554e54000000000000000000000000602082015260400190565b601a81527f41535345545f50524f58595f444f45535f4e4f545f4558495354000000000000602082015260400190565b602181527f475245415445525f5448414e5f5a45524f5f4c454e4754485f5245515549524560208201527f4400000000000000000000000000000000000000000000000000000000000000604082015260600190565b601181527f5349474e41545552455f494c4c4547414c000000000000000000000000000000602082015260400190565b601e81527f4c454e4754485f475245415445525f5448414e5f305f52455155495245440000602082015260400190565b601781527f494e56414c49445f4e45575f4f524445525f45504f4348000000000000000000602082015260400190565b601e81527f4c454e4754485f475245415445525f5448414e5f335f52455155495245440000602082015260400190565b601481527f434f4d504c4554455f46494c4c5f4641494c4544000000000000000000000000602082015260400190565b601281527f5245454e5452414e43595f494c4c4547414c0000000000000000000000000000602082015260400190565b601381527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000602082015260400190565b602681527f475245415445525f4f525f455155414c5f544f5f32305f4c454e4754485f524560208201527f5155495245440000000000000000000000000000000000000000000000000000604082015260600190565b601081527f4f524445525f554e46494c4c41424c4500000000000000000000000000000000602082015260400190565b600e81527f494e56414c49445f53454e444552000000000000000000000000000000000000602082015260400190565b601881527f4e454741544956455f5350524541445f52455155495245440000000000000000602082015260400190565b601481527f494e56414c49445f54585f5349474e4154555245000000000000000000000000602082015260400190565b601181527f4c454e4754485f305f5245515549524544000000000000000000000000000000602082015260400190565b805160808301906149198482614336565b50602082015161492c6020850182614336565b50604082015161493f6040850182614336565b506060820151612e006060850182614336565b80516101208301906149648482614908565b5060208201516149776080850182614908565b506040820151612e00610100850182614336565b8051606083019061499c84826149c2565b5060208201516149af6020850182614336565b506040820151612e006040850182614336565b61432781614e25565b602081016124eb828461431e565b61010081016149e8828b61431e565b6149f5602083018a61431e565b614a026040830189614336565b614a0f6060830188614336565b614a1c6080830187614336565b614a2960a0830186614336565b81810360c0830152614a3b8185614348565b905081810360e0830152614a4f8184614348565b9a9950505050505050505050565b60608101614a6b828661431e565b8181036020830152614a7d8185614348565b90508181036040830152614a918184614348565b95945050505050565b602081016124eb828461432d565b602081016124eb8284614336565b60608101614ac48286614336565b614ad1602083018561431e565b8181036040830152614a918184614348565b60408101614af18285614336565b8181036020830152612c698184614348565b60808101614b118287614336565b614b1e60208301866149c2565b614b2b6040830185614336565b614a916060830184614336565b60408101614b46828561433f565b610f74602083018461431e565b60208082528101610f748184614348565b602081016124eb828461437d565b602080825281016124eb81614386565b602080825281016124eb816143b6565b602080825281016124eb816143e6565b602080825281016124eb81614416565b602080825281016124eb8161446c565b602080825281016124eb8161449c565b602080825281016124eb816144cc565b602080825281016124eb816144fc565b602080825281016124eb8161452c565b602080825281016124eb8161455c565b602080825281016124eb8161458c565b602080825281016124eb816145bc565b602080825281016124eb816145ec565b602080825281016124eb8161461c565b602080825281016124eb81614672565b602080825281016124eb816146a2565b602080825281016124eb816146d2565b602080825281016124eb81614702565b602080825281016124eb81614732565b602080825281016124eb81614762565b602080825281016124eb81614792565b602080825281016124eb816147c2565b602080825281016124eb81614818565b602080825281016124eb81614848565b602080825281016124eb81614878565b602080825281016124eb816148a8565b602080825281016124eb816148d8565b608081016124eb8284614908565b61012081016124eb8284614952565b606081016124eb828461498b565b60405181810167ffffffffffffffff81118282101715614d6c57600080fd5b604052919050565b600067ffffffffffffffff821115614d8b57600080fd5b5060209081020190565b600067ffffffffffffffff821115614dac57600080fd5b506020601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160190565b5190565b73ffffffffffffffffffffffffffffffffffffffff1690565b151590565b90565b7fffffffff000000000000000000000000000000000000000000000000000000001690565b60ff1690565b60006124eb82614ddf565b82818337506000910152565b60005b83811015614e5d578181015183820152602001614e45565b83811115612e005750506000910152565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016905600a265627a7a723058200bd2eaba4ff39a570e39f1d59c5028c5276506c4ca9f20566cd5328a8887d16a6c6578706572696d656e74616cf50037",
- "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x5443 CODESIZE SUB DUP1 PUSH3 0x5443 DUP4 CODECOPY DUP2 ADD DUP1 PUSH1 0x40 MSTORE PUSH3 0x37 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH3 0x433 JUMP JUMPDEST DUP1 MLOAD DUP2 SWAP1 PUSH3 0x4E SWAP1 PUSH1 0x0 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH3 0x332 JUMP JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH32 0x454950373132446F6D61696E2800000000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x737472696E67206E616D652C0000000000000000000000000000000000000000 PUSH1 0x2D DUP4 ADD MSTORE PUSH32 0x737472696E672076657273696F6E2C0000000000000000000000000000000000 PUSH1 0x39 DUP4 ADD MSTORE PUSH32 0x6164647265737320766572696679696E67436F6E747261637400000000000000 PUSH1 0x48 DUP4 ADD MSTORE PUSH32 0x2900000000000000000000000000000000000000000000000000000000000000 PUSH1 0x61 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x42 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x62 SWAP1 SWAP3 ADD SWAP3 DUP4 SWAP1 MSTORE DUP2 MLOAD SWAP2 SWAP3 SWAP2 DUP3 SWAP2 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH3 0x158 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH3 0x137 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP5 ADD DUP3 SWAP1 SUB DUP3 KECCAK256 DUP3 DUP6 ADD DUP6 MSTORE PUSH1 0xB DUP1 DUP5 MSTORE PUSH32 0x30782050726F746F636F6C000000000000000000000000000000000000000000 SWAP3 DUP5 ADD SWAP3 DUP4 MSTORE SWAP5 MLOAD SWAP1 SWAP7 POP SWAP2 SWAP5 POP SWAP1 SWAP3 DUP4 SWAP3 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH3 0x1E2 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH3 0x1C1 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP5 ADD DUP3 SWAP1 SUB DUP3 KECCAK256 DUP3 DUP6 ADD DUP6 MSTORE PUSH1 0x1 DUP1 DUP5 MSTORE PUSH32 0x3200000000000000000000000000000000000000000000000000000000000000 SWAP3 DUP5 ADD SWAP3 DUP4 MSTORE SWAP5 MLOAD SWAP1 SWAP7 POP SWAP2 SWAP5 POP SWAP1 SWAP3 DUP4 SWAP3 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH3 0x26C JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH3 0x24B JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP4 ADD DUP2 SWAP1 SUB DUP2 KECCAK256 PUSH3 0x2A7 SWAP8 SWAP7 SWAP6 POP SWAP4 POP ADDRESS SWAP3 ADD SWAP1 POP PUSH3 0x48F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH3 0x2E7 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH3 0x2C6 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x0 NOT PUSH1 0x20 SWAP5 SWAP1 SWAP5 SUB PUSH2 0x100 EXP SWAP4 SWAP1 SWAP4 ADD SWAP3 DUP4 AND SWAP3 NOT AND SWAP2 SWAP1 SWAP2 OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP3 ADD DUP3 SWAP1 SUB SWAP1 SWAP2 KECCAK256 PUSH1 0x1 SSTORE POP POP PUSH1 0x2 DUP1 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB NOT AND CALLER OR SWAP1 SSTORE POP PUSH3 0x563 SWAP1 POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH3 0x375 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x3A5 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x3A5 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x3A5 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x388 JUMP JUMPDEST POP PUSH3 0x3B3 SWAP3 SWAP2 POP PUSH3 0x3B7 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH3 0x3D4 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x3B3 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x3BE JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH3 0x3E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x400 PUSH3 0x3FA DUP3 PUSH3 0x4FC JUMP JUMPDEST PUSH3 0x4D5 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP4 ADD DUP6 DUP4 DUP4 ADD GT ISZERO PUSH3 0x41D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x42A DUP4 DUP3 DUP5 PUSH3 0x530 JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x446 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x40 PUSH1 0x2 EXP SUB DUP2 GT ISZERO PUSH3 0x45D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x46B DUP5 DUP3 DUP6 ADD PUSH3 0x3D7 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH3 0x47E DUP2 PUSH3 0x524 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH3 0x47E DUP2 PUSH3 0x3D4 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH3 0x49F DUP3 DUP8 PUSH3 0x484 JUMP JUMPDEST PUSH3 0x4AE PUSH1 0x20 DUP4 ADD DUP7 PUSH3 0x484 JUMP JUMPDEST PUSH3 0x4BD PUSH1 0x40 DUP4 ADD DUP6 PUSH3 0x484 JUMP JUMPDEST PUSH3 0x4CC PUSH1 0x60 DUP4 ADD DUP5 PUSH3 0x473 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH1 0x1 PUSH1 0x40 PUSH1 0x2 EXP SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH3 0x4F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x40 PUSH1 0x2 EXP SUB DUP3 GT ISZERO PUSH3 0x513 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x1F SWAP2 SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x54D JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x533 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH3 0x55D JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x4ED0 DUP1 PUSH3 0x573 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1B6 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x2624B2D9 DUP2 EQ PUSH2 0x1BB JUMPI DUP1 PUSH4 0x288CDC91 EQ PUSH2 0x1E6 JUMPI DUP1 PUSH4 0x297BB70B EQ PUSH2 0x206 JUMPI DUP1 PUSH4 0x2AC12622 EQ PUSH2 0x233 JUMPI DUP1 PUSH4 0x3683EF8E EQ PUSH2 0x260 JUMPI DUP1 PUSH4 0x3C28D861 EQ PUSH2 0x282 JUMPI DUP1 PUSH4 0x3E228BAE EQ PUSH2 0x2AF JUMPI DUP1 PUSH4 0x3FD3C997 EQ PUSH2 0x2CF JUMPI DUP1 PUSH4 0x4AC14782 EQ PUSH2 0x2FC JUMPI DUP1 PUSH4 0x4D0AE546 EQ PUSH2 0x31C JUMPI DUP1 PUSH4 0x4F9559B1 EQ PUSH2 0x33C JUMPI DUP1 PUSH4 0x50DDE190 EQ PUSH2 0x35C JUMPI DUP1 PUSH4 0x60704108 EQ PUSH2 0x37C JUMPI DUP1 PUSH4 0x642F2EAF EQ PUSH2 0x3A9 JUMPI DUP1 PUSH4 0x64A3BC15 EQ PUSH2 0x3C9 JUMPI DUP1 PUSH4 0x77FCCE68 EQ PUSH2 0x3E9 JUMPI DUP1 PUSH4 0x7B8E3514 EQ PUSH2 0x409 JUMPI DUP1 PUSH4 0x7E1D9808 EQ PUSH2 0x429 JUMPI DUP1 PUSH4 0x82C174D0 EQ PUSH2 0x449 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x469 JUMPI DUP1 PUSH4 0x93634702 EQ PUSH2 0x47E JUMPI DUP1 PUSH4 0xA3E20380 EQ PUSH2 0x49E JUMPI DUP1 PUSH4 0xB4BE83D5 EQ PUSH2 0x4BE JUMPI DUP1 PUSH4 0xBFC8BFCE EQ PUSH2 0x4DE JUMPI DUP1 PUSH4 0xC585BB93 EQ PUSH2 0x4FE JUMPI DUP1 PUSH4 0xC75E0A81 EQ PUSH2 0x51E JUMPI DUP1 PUSH4 0xD46B02C3 EQ PUSH2 0x54B JUMPI DUP1 PUSH4 0xD9BFA73E EQ PUSH2 0x56B JUMPI DUP1 PUSH4 0xDB123B1A EQ PUSH2 0x58B JUMPI DUP1 PUSH4 0xDD1C7D18 EQ PUSH2 0x5AD JUMPI DUP1 PUSH4 0xE306F779 EQ PUSH2 0x5CD JUMPI DUP1 PUSH4 0xE5FA431B EQ PUSH2 0x5E2 JUMPI DUP1 PUSH4 0xEEA086BA EQ PUSH2 0x602 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x617 JUMPI DUP1 PUSH4 0xFFA1AD74 EQ PUSH2 0x637 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1D0 PUSH2 0x64C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1DD SWAP2 SWAP1 PUSH2 0x4AA8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1D0 PUSH2 0x201 CALLDATASIZE PUSH1 0x4 PUSH2 0x400B JUMP JUMPDEST PUSH2 0x7A0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x212 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x226 PUSH2 0x221 CALLDATASIZE PUSH1 0x4 PUSH2 0x3F10 JUMP JUMPDEST PUSH2 0x7B2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1DD SWAP2 SWAP1 PUSH2 0x4D22 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x23F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x253 PUSH2 0x24E CALLDATASIZE PUSH1 0x4 PUSH2 0x400B JUMP JUMPDEST PUSH2 0x842 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1DD SWAP2 SWAP1 PUSH2 0x4A9A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x26C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x280 PUSH2 0x27B CALLDATASIZE PUSH1 0x4 PUSH2 0x4048 JUMP JUMPDEST PUSH2 0x857 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x28E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A2 PUSH2 0x29D CALLDATASIZE PUSH1 0x4 PUSH2 0x417C JUMP JUMPDEST PUSH2 0x930 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1DD SWAP2 SWAP1 PUSH2 0x4D30 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x226 PUSH2 0x2CA CALLDATASIZE PUSH1 0x4 PUSH2 0x423C JUMP JUMPDEST PUSH2 0xA1C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2EF PUSH2 0x2EA CALLDATASIZE PUSH1 0x4 PUSH2 0x410B JUMP JUMPDEST PUSH2 0xC2C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1DD SWAP2 SWAP1 PUSH2 0x4B64 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x308 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x280 PUSH2 0x317 CALLDATASIZE PUSH1 0x4 PUSH2 0x3EDB JUMP JUMPDEST PUSH2 0xC54 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x328 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x226 PUSH2 0x337 CALLDATASIZE PUSH1 0x4 PUSH2 0x3F10 JUMP JUMPDEST PUSH2 0xC8C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x348 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x280 PUSH2 0x357 CALLDATASIZE PUSH1 0x4 PUSH2 0x400B JUMP JUMPDEST PUSH2 0xD13 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x368 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x226 PUSH2 0x377 CALLDATASIZE PUSH1 0x4 PUSH2 0x3F10 JUMP JUMPDEST PUSH2 0xE37 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x388 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x39C PUSH2 0x397 CALLDATASIZE PUSH1 0x4 PUSH2 0x410B JUMP JUMPDEST PUSH2 0xEBE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1DD SWAP2 SWAP1 PUSH2 0x49CB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x253 PUSH2 0x3C4 CALLDATASIZE PUSH1 0x4 PUSH2 0x400B JUMP JUMPDEST PUSH2 0xF0C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x226 PUSH2 0x3E4 CALLDATASIZE PUSH1 0x4 PUSH2 0x423C JUMP JUMPDEST PUSH2 0xF21 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x280 PUSH2 0x404 CALLDATASIZE PUSH1 0x4 PUSH2 0x3EAB JUMP JUMPDEST PUSH2 0xF7B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x415 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x253 PUSH2 0x424 CALLDATASIZE PUSH1 0x4 PUSH2 0x3E71 JUMP JUMPDEST PUSH2 0x1026 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x435 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x226 PUSH2 0x444 CALLDATASIZE PUSH1 0x4 PUSH2 0x3FA4 JUMP JUMPDEST PUSH2 0x1046 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x455 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x253 PUSH2 0x464 CALLDATASIZE PUSH1 0x4 PUSH2 0x4029 JUMP JUMPDEST PUSH2 0x1117 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x475 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x39C PUSH2 0x1137 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x48A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x253 PUSH2 0x499 CALLDATASIZE PUSH1 0x4 PUSH2 0x40B0 JUMP JUMPDEST PUSH2 0x1153 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x226 PUSH2 0x4B9 CALLDATASIZE PUSH1 0x4 PUSH2 0x3FA4 JUMP JUMPDEST PUSH2 0x1979 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x226 PUSH2 0x4D9 CALLDATASIZE PUSH1 0x4 PUSH2 0x423C JUMP JUMPDEST PUSH2 0x1A89 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x280 PUSH2 0x4F9 CALLDATASIZE PUSH1 0x4 PUSH2 0x4285 JUMP JUMPDEST PUSH2 0x1B0D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x50A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x280 PUSH2 0x519 CALLDATASIZE PUSH1 0x4 PUSH2 0x3E53 JUMP JUMPDEST PUSH2 0x1D88 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x52A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x53E PUSH2 0x539 CALLDATASIZE PUSH1 0x4 PUSH2 0x4147 JUMP JUMPDEST PUSH2 0x1FB3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1DD SWAP2 SWAP1 PUSH2 0x4D3F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x557 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x280 PUSH2 0x566 CALLDATASIZE PUSH1 0x4 PUSH2 0x4147 JUMP JUMPDEST PUSH2 0x20AE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x577 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1D0 PUSH2 0x586 CALLDATASIZE PUSH1 0x4 PUSH2 0x3E71 JUMP JUMPDEST PUSH2 0x20D9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x597 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5A0 PUSH2 0x20F6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1DD SWAP2 SWAP1 PUSH2 0x4B53 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x226 PUSH2 0x5C8 CALLDATASIZE PUSH1 0x4 PUSH2 0x3FA4 JUMP JUMPDEST PUSH2 0x21A2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1D0 PUSH2 0x2268 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x226 PUSH2 0x5FD CALLDATASIZE PUSH1 0x4 PUSH2 0x3FA4 JUMP JUMPDEST PUSH2 0x226E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x60E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x39C PUSH2 0x2342 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x623 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x280 PUSH2 0x632 CALLDATASIZE PUSH1 0x4 PUSH2 0x3E53 JUMP JUMPDEST PUSH2 0x235E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x643 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5A0 PUSH2 0x240F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x454950373132446F6D61696E2800000000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x737472696E67206E616D652C0000000000000000000000000000000000000000 PUSH1 0x2D DUP4 ADD MSTORE PUSH32 0x737472696E672076657273696F6E2C0000000000000000000000000000000000 PUSH1 0x39 DUP4 ADD MSTORE PUSH32 0x6164647265737320766572696679696E67436F6E747261637400000000000000 PUSH1 0x48 DUP4 ADD MSTORE PUSH32 0x2900000000000000000000000000000000000000000000000000000000000000 PUSH1 0x61 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x42 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x62 SWAP1 SWAP3 ADD SWAP3 DUP4 SWAP1 MSTORE DUP2 MLOAD SWAP2 SWAP3 SWAP2 DUP3 SWAP2 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x770 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x733 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 DUP2 JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x7BA PUSH2 0x3A79 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7C4 PUSH2 0x3A79 JUMP JUMPDEST PUSH1 0x0 SWAP2 POP JUMPDEST DUP6 MLOAD DUP3 LT ISZERO PUSH2 0x839 JUMPI PUSH2 0x822 DUP7 DUP4 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x7E3 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP7 DUP5 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x7FB JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP7 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x813 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x1A89 JUMP JUMPDEST SWAP1 POP PUSH2 0x82E DUP4 DUP3 PUSH2 0x2446 JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x7C9 JUMP JUMPDEST POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x892 DUP5 DUP5 DUP5 DUP5 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY POP PUSH2 0x1153 SWAP5 POP POP POP POP POP JUMP JUMPDEST ISZERO ISZERO PUSH2 0x8D3 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4BF2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND DUP5 MSTORE SWAP2 SWAP1 MSTORE SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x938 PUSH2 0x3AA2 JUMP JUMPDEST PUSH2 0x940 PUSH2 0x3AD1 JUMP JUMPDEST PUSH2 0x948 PUSH2 0x3AD1 JUMP JUMPDEST PUSH2 0x160 DUP1 DUP9 ADD MLOAD PUSH2 0x140 DUP1 DUP10 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP9 ADD MLOAD SWAP1 DUP8 ADD MSTORE PUSH1 0x0 PUSH2 0x96B DUP9 PUSH2 0x1FB3 JUMP JUMPDEST SWAP3 POP PUSH2 0x976 DUP8 PUSH2 0x1FB3 JUMP JUMPDEST SWAP2 POP PUSH2 0x980 PUSH2 0x24A8 JUMP JUMPDEST SWAP1 POP PUSH2 0x98C DUP9 DUP9 PUSH2 0x24F1 JUMP JUMPDEST PUSH2 0x9A0 DUP9 DUP9 DUP6 PUSH1 0x40 ADD MLOAD DUP6 PUSH1 0x40 ADD MLOAD PUSH2 0x254D JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 ADD MLOAD SWAP1 SWAP5 POP PUSH2 0x9BA SWAP1 DUP10 SWAP1 DUP6 SWAP1 DUP5 SWAP1 DUP1 DUP12 PUSH2 0x2611 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP6 ADD MLOAD ADD MLOAD PUSH2 0x9D3 SWAP1 DUP9 SWAP1 DUP5 SWAP1 DUP5 SWAP1 DUP1 DUP11 PUSH2 0x2611 JUMP JUMPDEST PUSH2 0x9EC DUP9 DUP3 DUP6 PUSH1 0x20 ADD MLOAD DUP7 PUSH1 0x40 ADD MLOAD DUP9 PUSH1 0x0 ADD MLOAD PUSH2 0x282E JUMP JUMPDEST PUSH2 0xA05 DUP8 DUP3 DUP5 PUSH1 0x20 ADD MLOAD DUP6 PUSH1 0x40 ADD MLOAD DUP9 PUSH1 0x20 ADD MLOAD PUSH2 0x282E JUMP JUMPDEST PUSH2 0xA11 DUP9 DUP9 DUP4 DUP8 PUSH2 0x28DA JUMP JUMPDEST POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0xA24 PUSH2 0x3A79 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xB4BE83D500000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH1 0x60 PUSH1 0x4 DUP4 ADD DUP2 DUP2 MSTORE DUP9 MLOAD PUSH1 0x64 DUP6 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 DUP1 DUP12 ADD MLOAD PUSH1 0x84 DUP8 ADD MSTORE SWAP6 DUP11 ADD MLOAD PUSH1 0xA4 DUP7 ADD MSTORE SWAP2 DUP10 ADD MLOAD PUSH1 0xC4 DUP6 ADD MSTORE PUSH1 0x80 DUP10 ADD MLOAD PUSH1 0xE4 DUP6 ADD MSTORE PUSH1 0xA0 DUP10 ADD MLOAD PUSH2 0x104 DUP6 ADD MSTORE PUSH1 0xC0 DUP10 ADD MLOAD PUSH2 0x124 DUP6 ADD MSTORE PUSH1 0xE0 DUP10 ADD MLOAD PUSH2 0x144 DUP6 ADD MSTORE PUSH2 0x100 DUP10 ADD MLOAD PUSH2 0x164 DUP6 ADD MSTORE PUSH2 0x120 DUP10 ADD MLOAD PUSH2 0x184 DUP6 ADD MSTORE PUSH2 0x140 DUP10 ADD DUP1 MLOAD PUSH2 0x1A4 DUP7 ADD SWAP1 DUP2 MSTORE PUSH2 0x160 DUP12 ADD MLOAD PUSH2 0x1C4 DUP8 ADD MSTORE PUSH2 0x180 SWAP1 MSTORE MLOAD DUP1 MLOAD PUSH2 0x1E4 DUP7 ADD DUP2 SWAP1 MSTORE SWAP4 SWAP6 SWAP2 SWAP4 DUP5 SWAP4 SWAP3 PUSH1 0x24 DUP8 ADD SWAP3 DUP5 SWAP3 PUSH2 0x204 DUP10 ADD SWAP3 SWAP2 DUP3 ADD SWAP2 PUSH1 0x1F DUP3 ADD DIV PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xB27 JUMPI DUP4 MLOAD DUP6 MSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 SWAP1 SWAP4 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0xB09 JUMP JUMPDEST POP POP POP POP DUP2 DUP2 SUB PUSH2 0x160 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP13 ADD MLOAD DUP1 MLOAD DUP1 DUP4 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 SWAP2 DUP3 ADD SWAP2 PUSH1 0x1F DUP3 ADD DIV PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xB70 JUMPI DUP4 MLOAD DUP6 MSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 SWAP1 SWAP4 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0xB52 JUMP JUMPDEST POP POP POP DUP12 DUP5 MSTORE POP DUP5 DUP2 SUB PUSH1 0x20 SWAP4 DUP5 ADD SWAP1 DUP2 MSTORE DUP11 MLOAD DUP1 DUP4 MSTORE SWAP1 SWAP4 SWAP2 DUP3 ADD SWAP2 DUP12 DUP2 ADD SWAP2 SWAP1 PUSH1 0x1F DUP3 ADD DIV PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xBB8 JUMPI DUP4 MLOAD DUP6 MSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 SWAP1 SWAP4 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0xB9A JUMP JUMPDEST POP PUSH1 0x80 DUP11 DUP12 DUP7 SUB DUP13 ADDRESS GAS DELEGATECALL DUP1 DUP1 ISZERO PUSH2 0xBD7 JUMPI PUSH1 0x1 DUP2 EQ PUSH2 0xBF5 JUMPI PUSH2 0xC18 JUMP JUMPDEST PUSH1 0x0 DUP15 MSTORE PUSH1 0x0 PUSH1 0x20 DUP16 ADD MSTORE PUSH1 0x0 PUSH1 0x40 DUP16 ADD MSTORE PUSH1 0x0 PUSH1 0x60 DUP16 ADD MSTORE PUSH2 0xC18 JUMP JUMPDEST DUP12 MLOAD DUP15 MSTORE PUSH1 0x20 DUP13 ADD MLOAD PUSH1 0x20 DUP16 ADD MSTORE PUSH1 0x40 DUP13 ADD MLOAD PUSH1 0x40 DUP16 ADD MSTORE PUSH1 0x60 DUP13 ADD MLOAD PUSH1 0x60 DUP16 ADD MSTORE JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0xC88 JUMPI PUSH2 0xC80 DUP3 DUP3 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xC71 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x20AE JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0xC57 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0xC94 PUSH2 0x3A79 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC9E PUSH2 0x3A79 JUMP JUMPDEST PUSH1 0x0 SWAP2 POP JUMPDEST DUP6 MLOAD DUP3 LT ISZERO PUSH2 0x839 JUMPI PUSH2 0xCFC DUP7 DUP4 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xCBD JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP7 DUP5 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xCD5 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP7 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xCED JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0xF21 JUMP JUMPDEST SWAP1 POP PUSH2 0xD08 DUP4 DUP3 PUSH2 0x2446 JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH2 0xCA3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0xD21 PUSH2 0x24A8 JUMP JUMPDEST SWAP4 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND CALLER EQ PUSH2 0xD46 JUMPI CALLER PUSH2 0xD49 JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP6 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD SWAP1 SWAP4 POP PUSH1 0x1 DUP7 ADD SWAP3 POP SWAP1 POP DUP1 DUP3 GT PUSH2 0xDC0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4C72 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP9 AND DUP1 DUP5 MSTORE SWAP5 SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE MLOAD PUSH32 0x82AF639571738F4EBD4268FB0363D8957EBE1BBB9E78DBA5EBD69EED39B154F0 SWAP1 PUSH2 0xE28 SWAP1 DUP7 SWAP1 PUSH2 0x4AA8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP JUMP JUMPDEST PUSH2 0xE3F PUSH2 0x3A79 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE49 PUSH2 0x3A79 JUMP JUMPDEST PUSH1 0x0 SWAP2 POP JUMPDEST DUP6 MLOAD DUP3 LT ISZERO PUSH2 0x839 JUMPI PUSH2 0xEA7 DUP7 DUP4 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xE68 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP7 DUP5 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xE80 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP7 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xE98 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0xA1C JUMP JUMPDEST SWAP1 POP PUSH2 0xEB3 DUP4 DUP3 PUSH2 0x2446 JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH2 0xE4E JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0xF29 PUSH2 0x3A79 JUMP JUMPDEST PUSH2 0xF34 DUP5 DUP5 DUP5 PUSH2 0x1A89 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD SWAP1 SWAP2 POP DUP4 EQ PUSH2 0xF74 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4C92 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF85 PUSH2 0x24A8 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP10 AND DUP1 DUP5 MSTORE SWAP5 SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP8 ISZERO ISZERO OR SWAP1 SSTORE MLOAD SWAP3 SWAP4 POP SWAP1 SWAP2 PUSH32 0xA8656E308026EEABCE8F0BC18048433252318AB80AC79DA0B3D3D8697DFBA891 SWAP1 PUSH2 0x1019 SWAP1 DUP7 SWAP1 PUSH2 0x4A9A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x104E PUSH2 0x3A79 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 PUSH2 0x105B PUSH2 0x3A79 JUMP JUMPDEST DUP8 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x106A JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x160 ADD MLOAD SWAP4 POP PUSH1 0x0 SWAP3 POP JUMPDEST DUP8 MLOAD DUP4 LT ISZERO PUSH2 0x110C JUMPI DUP4 DUP9 DUP5 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1098 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x160 ADD DUP2 SWAP1 MSTORE POP PUSH2 0x10B8 DUP8 DUP7 PUSH1 0x20 ADD MLOAD PUSH2 0x2ABA JUMP JUMPDEST SWAP2 POP PUSH2 0x10E4 DUP9 DUP5 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x10CB JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP4 DUP9 DUP7 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x813 JUMPI INVALID JUMPDEST SWAP1 POP PUSH2 0x10F0 DUP6 DUP3 PUSH2 0x2446 JUMP JUMPDEST DUP7 DUP6 PUSH1 0x20 ADD MLOAD EQ ISZERO PUSH2 0x1101 JUMPI PUSH2 0x110C JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 PUSH2 0x1080 JUMP JUMPDEST POP POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP10 MLOAD GT ISZERO ISZERO PUSH2 0x119C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4C62 JUMP JUMPDEST PUSH2 0x11A5 DUP10 PUSH2 0x2ACC JUMP JUMPDEST PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DIV SWAP7 POP PUSH1 0x9 PUSH1 0xFF DUP9 AND LT PUSH2 0x1207 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4BB2 JUMP JUMPDEST DUP7 PUSH1 0xFF AND PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x1216 JUMPI INVALID JUMPDEST SWAP6 POP PUSH1 0x0 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x1226 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x125E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4C52 JUMP JUMPDEST PUSH1 0x1 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x126C JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x12B4 JUMPI DUP9 MLOAD ISZERO PUSH2 0x12AB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4D12 JUMP JUMPDEST PUSH1 0x0 SWAP8 POP PUSH2 0x196B JUMP JUMPDEST PUSH1 0x2 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x12C2 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x13FD JUMPI DUP9 MLOAD PUSH1 0x41 EQ PUSH2 0x1303 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4B72 JUMP JUMPDEST DUP9 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1312 JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV DUP2 MUL DIV SWAP5 POP PUSH2 0x1352 DUP10 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x2B90 AND JUMP JUMPDEST SWAP4 POP PUSH2 0x1365 DUP10 PUSH1 0x21 PUSH4 0xFFFFFFFF PUSH2 0x2B90 AND JUMP JUMPDEST SWAP3 POP PUSH1 0x1 DUP12 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH2 0x138A SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4B03 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 PUSH1 0x0 DUP7 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x13AE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 DUP2 AND SWAP1 DUP3 AND EQ SWAP10 POP SWAP3 POP PUSH2 0x196B SWAP1 POP JUMP JUMPDEST PUSH1 0x3 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x140B JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x15B1 JUMPI DUP9 MLOAD PUSH1 0x41 EQ PUSH2 0x144C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4B72 JUMP JUMPDEST DUP9 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x145B JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV DUP2 MUL DIV SWAP5 POP PUSH2 0x149B DUP10 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x2B90 AND JUMP JUMPDEST SWAP4 POP PUSH2 0x14AE DUP10 PUSH1 0x21 PUSH4 0xFFFFFFFF PUSH2 0x2B90 AND JUMP JUMPDEST SWAP3 POP PUSH1 0x1 DUP12 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP1 PUSH32 0x19457468657265756D205369676E6564204D6573736167653A0A333200000000 DUP2 MSTORE POP PUSH1 0x1C ADD DUP3 PUSH1 0x0 NOT AND PUSH1 0x0 NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x154F JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1512 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP5 ADD DUP3 SWAP1 SUB DUP3 KECCAK256 PUSH1 0x0 DUP4 MSTORE SWAP2 ADD SWAP3 DUP4 SWAP1 MSTORE PUSH2 0x138A SWAP5 POP SWAP3 POP DUP10 SWAP2 DUP10 SWAP2 POP DUP9 SWAP1 PUSH2 0x4B03 JUMP JUMPDEST PUSH1 0x4 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x15BF JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x161E JUMPI DUP9 MLOAD ISZERO PUSH2 0x15FE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4D12 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND CALLER EQ SWAP8 POP PUSH2 0x196B JUMP JUMPDEST PUSH1 0x5 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x162C JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x16DF JUMPI PUSH1 0x40 MLOAD PUSH32 0x1626BA7E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND SWAP1 PUSH4 0x1626BA7E SWAP1 PUSH2 0x1686 SWAP1 DUP15 SWAP1 DUP14 SWAP1 PUSH1 0x4 ADD PUSH2 0x4AE3 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x16A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x16B4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0x16D8 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x3FED JUMP JUMPDEST SWAP8 POP PUSH2 0x196B JUMP JUMPDEST PUSH1 0x6 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x16ED JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x179A JUMPI PUSH2 0x16FC DUP10 PUSH2 0x2BDB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP13 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP6 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x1744 JUMPI PUSH1 0x0 SWAP8 POP PUSH2 0x196B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x9363470200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x93634702 SWAP1 PUSH2 0x1686 SWAP1 DUP15 SWAP1 DUP15 SWAP1 DUP15 SWAP1 PUSH1 0x4 ADD PUSH2 0x4AB6 JUMP JUMPDEST PUSH1 0x7 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x17A8 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x17E8 JUMPI PUSH1 0x0 DUP12 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP15 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP8 POP PUSH2 0x196B JUMP JUMPDEST PUSH1 0x8 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x17F6 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x1939 JUMPI DUP9 MLOAD PUSH1 0x41 EQ PUSH2 0x1837 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4B72 JUMP JUMPDEST DUP9 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1846 JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV DUP2 MUL DIV SWAP5 POP PUSH2 0x1886 DUP10 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x2B90 AND JUMP JUMPDEST SWAP4 POP PUSH2 0x1899 DUP10 PUSH1 0x21 PUSH4 0xFFFFFFFF PUSH2 0x2B90 AND JUMP JUMPDEST SWAP3 POP PUSH1 0x1 DUP12 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP1 PUSH32 0x19457468657265756D205369676E6564204D6573736167653A0A200000000000 DUP2 MSTORE POP PUSH1 0x1B ADD DUP3 PUSH1 0x0 NOT AND PUSH1 0x0 NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x20 DUP4 LT PUSH2 0x154F JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1512 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4BB2 JUMP JUMPDEST POP POP POP POP POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x1981 PUSH2 0x3A79 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1990 PUSH2 0x3A79 JUMP JUMPDEST DUP9 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x199F JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x140 ADD MLOAD SWAP5 POP PUSH1 0x0 SWAP4 POP JUMPDEST DUP9 MLOAD DUP5 LT ISZERO PUSH2 0x1A7D JUMPI DUP5 DUP10 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x19CD JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MLOAD PUSH2 0x140 ADD MSTORE DUP6 MLOAD PUSH2 0x19E9 SWAP1 DUP10 SWAP1 PUSH2 0x2ABA JUMP JUMPDEST SWAP3 POP PUSH2 0x1A2C DUP10 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x19FC JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0xA0 ADD MLOAD DUP11 DUP7 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1A18 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0x80 ADD MLOAD DUP6 PUSH2 0x2C54 JUMP JUMPDEST SWAP2 POP PUSH2 0x1A58 DUP10 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1A3F JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP4 DUP10 DUP8 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xE98 JUMPI INVALID JUMPDEST SWAP1 POP PUSH2 0x1A64 DUP7 DUP3 PUSH2 0x2446 JUMP JUMPDEST DUP6 MLOAD DUP9 EQ ISZERO PUSH2 0x1A72 JUMPI PUSH2 0x1A7D JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP4 ADD SWAP3 PUSH2 0x19B5 JUMP JUMPDEST POP POP POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x1A91 PUSH2 0x3A79 JUMP JUMPDEST PUSH2 0x1A99 PUSH2 0x3AD1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1AA7 DUP9 PUSH2 0x1FB3 JUMP JUMPDEST SWAP4 POP PUSH2 0x1AB1 PUSH2 0x24A8 JUMP JUMPDEST SWAP3 POP PUSH2 0x1AC5 DUP9 PUSH1 0xA0 ADD MLOAD DUP6 PUSH1 0x40 ADD MLOAD PUSH2 0x2ABA JUMP JUMPDEST SWAP2 POP PUSH2 0x1AD1 DUP8 DUP4 PUSH2 0x2C71 JUMP JUMPDEST SWAP1 POP PUSH2 0x1AE1 DUP9 DUP6 DUP6 DUP11 DUP6 DUP12 PUSH2 0x2611 JUMP JUMPDEST PUSH2 0x1AEB DUP9 DUP3 PUSH2 0x2C87 JUMP JUMPDEST SWAP5 POP PUSH2 0x1B02 DUP9 DUP5 DUP7 PUSH1 0x20 ADD MLOAD DUP8 PUSH1 0x40 ADD MLOAD DUP10 PUSH2 0x282E JUMP JUMPDEST PUSH2 0x110C DUP9 DUP5 DUP8 PUSH2 0x2CF1 JUMP JUMPDEST PUSH1 0x9 SLOAD PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x1B60 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4CA2 JUMP JUMPDEST PUSH2 0x1BA3 PUSH2 0x1B9E DUP9 DUP9 DUP9 DUP9 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY POP PUSH2 0x2E06 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x3047 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF AND ISZERO PUSH2 0x1BEF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4BE2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND CALLER EQ PUSH2 0x1CC0 JUMPI PUSH2 0x1C47 DUP2 DUP8 DUP6 DUP6 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY POP PUSH2 0x1153 SWAP5 POP POP POP POP POP JUMP JUMPDEST ISZERO ISZERO PUSH2 0x1C7F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4D02 JUMP JUMPDEST PUSH1 0x9 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND OR SWAP1 SSTORE JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD ADDRESS SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP1 DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY DUP3 ADD SWAP2 POP POP SWAP3 POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP ISZERO ISZERO PUSH2 0x1D57 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4C12 JUMP JUMPDEST POP POP PUSH1 0x9 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x1DE0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4CB2 JUMP JUMPDEST DUP4 SWAP3 POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xAE25532E PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH29 0x100000000000000000000000000000000000000000000000000000000 MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1E47 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1E5B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0x1E7F SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x4129 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP3 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP1 ISZERO PUSH2 0x1F04 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4B92 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND OR SWAP1 SSTORE MLOAD PUSH32 0xD2C6B762299C609BDB96520B58A49BFB80186934D4F71A86A367571A15C03194 SWAP1 PUSH2 0x1FA5 SWAP1 DUP5 SWAP1 DUP8 SWAP1 PUSH2 0x4B38 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP JUMP JUMPDEST PUSH2 0x1FBB PUSH2 0x3AD1 JUMP JUMPDEST PUSH2 0x1FC4 DUP3 PUSH2 0x31C7 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x80 DUP3 ADD MLOAD ISZERO ISZERO PUSH2 0x1FE1 JUMPI PUSH1 0x1 JUMPDEST PUSH1 0xFF AND DUP2 MSTORE PUSH2 0xF07 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MLOAD ISZERO ISZERO PUSH2 0x1FF3 JUMPI PUSH1 0x2 PUSH2 0x1FD7 JUMP JUMPDEST PUSH2 0x100 DUP3 ADD MLOAD TIMESTAMP LT PUSH2 0x2006 JUMPI PUSH1 0x4 PUSH2 0x1FD7 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x202A JUMPI PUSH1 0x6 PUSH2 0x1FD7 JUMP JUMPDEST PUSH2 0x120 DUP3 ADD MLOAD DUP3 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x60 DUP9 ADD MLOAD SWAP1 SWAP5 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD GT ISZERO PUSH2 0x2077 JUMPI PUSH1 0x6 PUSH2 0x1FD7 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SLOAD SWAP1 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xA0 DUP4 ADD MLOAD GT PUSH2 0x20A5 JUMPI PUSH1 0x5 PUSH2 0x1FD7 JUMP JUMPDEST PUSH1 0x3 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x20B6 PUSH2 0x3AD1 JUMP JUMPDEST PUSH2 0x20BF DUP3 PUSH2 0x1FB3 JUMP JUMPDEST SWAP1 POP PUSH2 0x20CB DUP3 DUP3 PUSH2 0x31D5 JUMP JUMPDEST PUSH2 0xC88 DUP3 DUP3 PUSH1 0x20 ADD MLOAD PUSH2 0x32EC JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x219A JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x216F JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x219A JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x217D JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST PUSH2 0x21AA PUSH2 0x3A79 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 PUSH2 0x21B7 PUSH2 0x3A79 JUMP JUMPDEST DUP8 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x21C6 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x160 ADD MLOAD SWAP4 POP PUSH1 0x0 SWAP3 POP JUMPDEST DUP8 MLOAD DUP4 LT ISZERO PUSH2 0x110C JUMPI DUP4 DUP9 DUP5 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x21F4 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x160 ADD DUP2 SWAP1 MSTORE POP PUSH2 0x2214 DUP8 DUP7 PUSH1 0x20 ADD MLOAD PUSH2 0x2ABA JUMP JUMPDEST SWAP2 POP PUSH2 0x2240 DUP9 DUP5 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x2227 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP4 DUP9 DUP7 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xE98 JUMPI INVALID JUMPDEST SWAP1 POP PUSH2 0x224C DUP6 DUP3 PUSH2 0x2446 JUMP JUMPDEST DUP7 DUP6 PUSH1 0x20 ADD MLOAD EQ ISZERO PUSH2 0x225D JUMPI PUSH2 0x110C JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 PUSH2 0x21DC JUMP JUMPDEST PUSH1 0x1 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2276 PUSH2 0x3A79 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x2285 PUSH2 0x3A79 JUMP JUMPDEST DUP9 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x2294 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x140 ADD MLOAD SWAP5 POP PUSH1 0x0 SWAP4 POP JUMPDEST DUP9 MLOAD DUP5 LT ISZERO PUSH2 0x1A7D JUMPI DUP5 DUP10 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x22C2 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MLOAD PUSH2 0x140 ADD MSTORE DUP6 MLOAD PUSH2 0x22DE SWAP1 DUP10 SWAP1 PUSH2 0x2ABA JUMP JUMPDEST SWAP3 POP PUSH2 0x22F1 DUP10 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x19FC JUMPI INVALID JUMPDEST SWAP2 POP PUSH2 0x231D DUP10 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x2304 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP4 DUP10 DUP8 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x813 JUMPI INVALID JUMPDEST SWAP1 POP PUSH2 0x2329 DUP7 DUP3 PUSH2 0x2446 JUMP JUMPDEST DUP6 MLOAD DUP9 EQ ISZERO PUSH2 0x2337 JUMPI PUSH2 0x1A7D JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP4 ADD SWAP3 PUSH2 0x22AA JUMP JUMPDEST PUSH1 0x9 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x23AF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4CB2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0x240C JUMPI PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND OR SWAP1 SSTORE JUMPDEST POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0xB DUP2 MSTORE PUSH32 0x322E302E312D616C706861000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD PUSH2 0x2454 SWAP2 SWAP1 PUSH2 0x3393 JUMP JUMPDEST DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MLOAD PUSH2 0x246A SWAP2 SWAP1 PUSH2 0x3393 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MLOAD PUSH2 0x2483 SWAP2 SWAP1 PUSH2 0x3393 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MLOAD PUSH2 0x249C SWAP2 SWAP1 PUSH2 0x3393 JUMP JUMPDEST PUSH1 0x60 SWAP1 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x9 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x24E9 JUMPI PUSH1 0x9 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x24EB JUMP JUMPDEST CALLER JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x2503 DUP3 PUSH1 0xA0 ADD MLOAD DUP3 PUSH1 0xA0 ADD MLOAD PUSH2 0x33A2 JUMP JUMPDEST PUSH2 0x2515 DUP4 PUSH1 0x80 ADD MLOAD DUP4 PUSH1 0x80 ADD MLOAD PUSH2 0x33A2 JUMP JUMPDEST LT ISZERO PUSH2 0xC88 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4CF2 JUMP JUMPDEST PUSH2 0x2555 PUSH2 0x3AA2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x2569 DUP10 PUSH1 0xA0 ADD MLOAD DUP9 PUSH2 0x2ABA JUMP JUMPDEST SWAP4 POP PUSH2 0x2579 DUP9 PUSH1 0xA0 ADD MLOAD DUP8 PUSH2 0x2ABA JUMP JUMPDEST SWAP3 POP PUSH2 0x2589 DUP4 DUP10 PUSH1 0x80 ADD MLOAD PUSH2 0x33A2 JUMP JUMPDEST PUSH2 0x2597 DUP6 DUP11 PUSH1 0xA0 ADD MLOAD PUSH2 0x33A2 JUMP JUMPDEST GT PUSH2 0x25B9 JUMPI DUP4 SWAP2 POP PUSH2 0x25B2 DUP9 PUSH1 0xA0 ADD MLOAD DUP10 PUSH1 0x80 ADD MLOAD DUP5 PUSH2 0x2C54 JUMP JUMPDEST SWAP1 POP PUSH2 0x25D2 JUMP JUMPDEST DUP3 SWAP1 POP PUSH2 0x25CF DUP9 PUSH1 0x80 ADD MLOAD DUP10 PUSH1 0xA0 ADD MLOAD DUP4 PUSH2 0x2C54 JUMP JUMPDEST SWAP2 POP JUMPDEST PUSH2 0x25DC DUP10 DUP4 PUSH2 0x2C87 JUMP JUMPDEST DUP6 MSTORE PUSH2 0x25E8 DUP9 DUP3 PUSH2 0x2C87 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP8 ADD DUP3 SWAP1 MSTORE DUP7 MLOAD MLOAD SWAP2 ADD MLOAD PUSH2 0x2600 SWAP2 SWAP1 PUSH2 0x2ABA JUMP JUMPDEST PUSH1 0x40 DUP7 ADD MSTORE POP POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP5 MLOAD PUSH1 0xFF AND PUSH1 0x3 EQ PUSH2 0x264F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4CD2 JUMP JUMPDEST DUP3 ISZERO ISZERO PUSH2 0x2688 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4C22 JUMP JUMPDEST PUSH1 0x60 DUP7 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x26FB JUMPI PUSH1 0x60 DUP7 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x26FB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4CE2 JUMP JUMPDEST PUSH1 0x20 DUP7 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x2786 JUMPI DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH1 0x20 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO ISZERO PUSH2 0x2786 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4B82 JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MLOAD ISZERO ISZERO PUSH2 0x27DC JUMPI PUSH2 0x27A4 DUP6 PUSH1 0x20 ADD MLOAD DUP8 PUSH1 0x0 ADD MLOAD DUP4 PUSH2 0x1153 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x27DC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4BC2 JUMP JUMPDEST PUSH2 0x27EF DUP3 DUP8 PUSH1 0xA0 ADD MLOAD DUP9 PUSH1 0x80 ADD MLOAD PUSH2 0x33C6 JUMP JUMPDEST ISZERO PUSH2 0x2826 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4C02 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x283C DUP3 DUP3 PUSH1 0x20 ADD MLOAD PUSH2 0x3393 JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP3 SWAP1 SWAP3 SSTORE DUP7 DUP2 ADD MLOAD DUP8 MLOAD DUP5 MLOAD SWAP4 DUP6 ADD MLOAD DUP6 DUP5 ADD MLOAD PUSH1 0x60 DUP8 ADD MLOAD PUSH2 0x140 DUP13 ADD MLOAD PUSH2 0x160 DUP14 ADD MLOAD SWAP7 MLOAD DUP12 SWAP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP8 DUP9 AND SWAP9 SWAP8 SWAP1 SWAP7 AND SWAP7 PUSH32 0xBCC4C97732E47D9946F229EDB95F5B6323F601300E4690DE719993F3C371129 SWAP7 PUSH2 0x28CB SWAP7 DUP16 SWAP7 CALLER SWAP7 SWAP3 SWAP6 SWAP2 SWAP5 SWAP1 SWAP4 SWAP1 PUSH2 0x49D9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x2984 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2959 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x2984 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x2967 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP PUSH2 0x29AC DUP6 PUSH2 0x140 ADD MLOAD DUP7 PUSH1 0x0 ADD MLOAD DUP7 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH1 0x20 ADD MLOAD PUSH2 0x3417 JUMP JUMPDEST PUSH2 0x140 DUP5 ADD MLOAD DUP5 MLOAD DUP7 MLOAD DUP5 MLOAD PUSH1 0x20 ADD MLOAD PUSH2 0x29C8 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3417 JUMP JUMPDEST PUSH2 0x29E1 DUP6 PUSH2 0x140 ADD MLOAD DUP7 PUSH1 0x0 ADD MLOAD DUP6 DUP6 PUSH1 0x40 ADD MLOAD PUSH2 0x3417 JUMP JUMPDEST PUSH2 0x29FD DUP2 DUP7 PUSH1 0x0 ADD MLOAD DUP8 PUSH1 0x40 ADD MLOAD DUP6 PUSH1 0x0 ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH2 0x3417 JUMP JUMPDEST PUSH2 0x2A19 DUP2 DUP6 PUSH1 0x0 ADD MLOAD DUP7 PUSH1 0x40 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH2 0x3417 JUMP JUMPDEST DUP4 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x2A83 JUMPI PUSH2 0x2A7E DUP2 DUP5 DUP8 PUSH1 0x40 ADD MLOAD PUSH2 0x2A79 DUP7 PUSH1 0x0 ADD MLOAD PUSH1 0x60 ADD MLOAD DUP8 PUSH1 0x20 ADD MLOAD PUSH1 0x60 ADD MLOAD PUSH2 0x3393 JUMP JUMPDEST PUSH2 0x3417 JUMP JUMPDEST PUSH2 0x2AB3 JUMP JUMPDEST PUSH2 0x2A9B DUP2 DUP5 DUP8 PUSH1 0x40 ADD MLOAD DUP6 PUSH1 0x0 ADD MLOAD PUSH1 0x60 ADD MLOAD PUSH2 0x3417 JUMP JUMPDEST PUSH2 0x2AB3 DUP2 DUP5 DUP7 PUSH1 0x40 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH1 0x60 ADD MLOAD PUSH2 0x3417 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 GT ISZERO PUSH2 0x2AC6 JUMPI INVALID JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 MLOAD GT ISZERO ISZERO PUSH2 0x2B0A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4C42 JUMP JUMPDEST DUP2 MLOAD DUP3 SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0x2B3A JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD DUP3 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP3 MSTORE POP PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x20 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x2BD2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST POP ADD PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x14 DUP3 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x2C1B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4CC2 JUMP JUMPDEST PUSH2 0x2C29 DUP3 PUSH1 0x14 DUP5 MLOAD SUB PUSH2 0x35A8 JUMP JUMPDEST DUP3 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC ADD SWAP1 SWAP3 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2C69 PUSH2 0x2C63 DUP6 DUP5 PUSH2 0x33A2 JUMP JUMPDEST DUP5 PUSH2 0x3609 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x2C80 JUMPI DUP2 PUSH2 0xF74 JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x2C8F PUSH2 0x3A79 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0x80 DUP5 ADD MLOAD PUSH2 0x2CAB SWAP2 DUP5 SWAP2 PUSH2 0x2C54 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0xA0 DUP5 ADD MLOAD PUSH1 0xC0 DUP6 ADD MLOAD PUSH2 0x2CC7 SWAP3 SWAP2 SWAP1 PUSH2 0x2C54 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0xA0 DUP5 ADD MLOAD PUSH1 0xE0 DUP6 ADD MLOAD PUSH2 0x2CE6 SWAP3 SWAP2 SWAP1 PUSH2 0x2C54 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x2D9B JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2D70 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x2D9B JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x2D7E JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP PUSH2 0x2DBB DUP5 PUSH2 0x140 ADD MLOAD DUP6 PUSH1 0x0 ADD MLOAD DUP6 DUP6 PUSH1 0x0 ADD MLOAD PUSH2 0x3417 JUMP JUMPDEST PUSH2 0x2DD4 DUP5 PUSH2 0x160 ADD MLOAD DUP5 DUP7 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x3417 JUMP JUMPDEST PUSH2 0x2DEC DUP2 DUP6 PUSH1 0x0 ADD MLOAD DUP7 PUSH1 0x40 ADD MLOAD DUP6 PUSH1 0x40 ADD MLOAD PUSH2 0x3417 JUMP JUMPDEST PUSH2 0x2E00 DUP2 DUP5 DUP7 PUSH1 0x40 ADD MLOAD DUP6 PUSH1 0x60 ADD MLOAD PUSH2 0x3417 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x5A65726F45785472616E73616374696F6E280000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x75696E743235362073616C742C00000000000000000000000000000000000000 PUSH1 0x32 DUP4 ADD MSTORE PUSH32 0x61646472657373207369676E6572416464726573732C00000000000000000000 PUSH1 0x3F DUP4 ADD MSTORE PUSH32 0x6279746573206461746100000000000000000000000000000000000000000000 PUSH1 0x55 DUP4 ADD MSTORE PUSH32 0x2900000000000000000000000000000000000000000000000000000000000000 PUSH1 0x5F DUP4 ADD MSTORE DUP3 MLOAD DUP1 DUP4 SUB DUP5 ADD DUP2 MSTORE PUSH1 0x60 SWAP1 SWAP3 ADD SWAP3 DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH1 0x0 SWAP4 DUP5 SWAP4 DUP5 SWAP4 SWAP1 SWAP3 DUP3 SWAP2 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x2F2F JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x2EF2 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP4 ADD DUP2 SWAP1 SUB DUP2 KECCAK256 DUP10 MLOAD SWAP1 SWAP8 POP DUP10 SWAP6 POP SWAP1 SWAP4 POP DUP4 SWAP3 DUP6 ADD SWAP2 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x2FC5 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x2F88 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP5 ADD DUP3 SWAP1 SUB DUP3 KECCAK256 SWAP8 DUP3 MSTORE DUP2 ADD SWAP11 SWAP1 SWAP11 MSTORE POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP8 SWAP1 SWAP8 AND SWAP7 DUP9 ADD SWAP7 SWAP1 SWAP7 MSTORE POP POP PUSH1 0x60 DUP6 ADD MSTORE POP POP PUSH1 0x80 SWAP1 SWAP2 KECCAK256 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x1 SLOAD DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP5 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x30D3 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x3096 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP5 DUP6 MSTORE POP DUP4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP5 SUB DUP4 ADD DUP2 MSTORE SWAP3 DUP2 ADD SWAP1 DUP2 SWAP1 MSTORE DUP3 MLOAD SWAP3 SWAP4 POP SWAP2 DUP3 SWAP2 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x3177 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x313A JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 SWAP1 SWAP4 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP2 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP3 ADD DUP3 SWAP1 SUB SWAP1 SWAP2 KECCAK256 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x24EB PUSH2 0x1B9E DUP4 PUSH2 0x3620 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND PUSH1 0x3 EQ PUSH2 0x3216 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4CD2 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x3289 JUMPI PUSH1 0x60 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x3289 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4CE2 JUMP JUMPDEST PUSH2 0x3291 PUSH2 0x24A8 JUMP JUMPDEST DUP4 MLOAD SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND SWAP2 AND EQ PUSH2 0x32E7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4BD2 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 OR SWAP1 SSTORE DUP3 DUP2 ADD MLOAD DUP4 MLOAD PUSH2 0x140 DUP6 ADD MLOAD PUSH2 0x160 DUP7 ADD MLOAD SWAP4 MLOAD DUP6 SWAP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND SWAP5 SWAP4 SWAP1 SWAP4 AND SWAP3 PUSH32 0xDC47B3613D9FE400085F6DBDC99453462279057E6207385042827ED6B1A62CF7 SWAP3 PUSH2 0x3387 SWAP3 CALLER SWAP3 SWAP1 PUSH2 0x4A5D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0xF74 JUMPI INVALID JUMPDEST PUSH1 0x0 DUP3 DUP3 MUL DUP4 ISZERO DUP1 PUSH2 0x33BE JUMPI POP DUP3 DUP5 DUP3 DUP2 ISZERO ISZERO PUSH2 0x33BB JUMPI INVALID JUMPDEST DIV EQ JUMPDEST ISZERO ISZERO PUSH2 0xF74 JUMPI INVALID JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP5 DUP1 ISZERO ISZERO PUSH2 0x33D5 JUMPI INVALID JUMPDEST DUP7 DUP6 MULMOD SWAP2 POP DUP2 ISZERO ISZERO PUSH2 0x33EA JUMPI PUSH1 0x0 SWAP3 POP PUSH2 0x839 JUMP JUMPDEST PUSH2 0x3409 PUSH2 0x33FA DUP4 PUSH3 0xF4240 PUSH2 0x33A2 JUMP JUMPDEST PUSH2 0x3404 DUP9 DUP8 PUSH2 0x33A2 JUMP JUMPDEST PUSH2 0x3609 JUMP JUMPDEST PUSH2 0x3E8 LT SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 GT ISZERO PUSH2 0x2826 JUMPI DUP6 MLOAD PUSH1 0x3 LT PUSH2 0x345E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4C82 JUMP JUMPDEST POP POP PUSH1 0x20 DUP5 DUP2 ADD MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA SWAP1 SWAP3 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO ISZERO PUSH2 0x34E7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4C32 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH7 0xFFFFFFFFFFFE0 PUSH1 0x3F DUP9 MLOAD ADD AND DUP1 PUSH1 0x84 ADD DUP3 ADD PUSH32 0xA85E59E400000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x80 PUSH1 0x4 DUP5 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x24 DUP5 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x44 DUP5 ADD MSTORE DUP6 PUSH1 0x64 DUP5 ADD MSTORE PUSH1 0x84 DUP4 ADD JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3583 JUMPI DUP10 MLOAD DUP2 MSTORE PUSH1 0x20 SWAP10 DUP11 ADD SWAP10 ADD PUSH2 0x356B JUMP JUMPDEST PUSH2 0x200 DUP5 DUP6 DUP5 SUB DUP7 PUSH1 0x0 DUP10 GAS CALL DUP1 ISZERO ISZERO PUSH2 0x359B JUMPI RETURNDATASIZE DUP6 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x14 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x35EA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4CC2 JUMP JUMPDEST POP ADD PUSH1 0x14 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 DUP5 DUP2 ISZERO ISZERO PUSH2 0x3617 JUMPI INVALID JUMPDEST DIV SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x4F72646572280000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x61646472657373206D616B6572416464726573732C0000000000000000000000 PUSH1 0x26 DUP4 ADD MSTORE PUSH32 0x616464726573732074616B6572416464726573732C0000000000000000000000 PUSH1 0x3B DUP4 ADD MSTORE PUSH32 0x6164647265737320666565526563697069656E74416464726573732C00000000 PUSH1 0x50 DUP4 ADD MSTORE PUSH32 0x616464726573732073656E646572416464726573732C00000000000000000000 PUSH1 0x6C DUP4 ADD MSTORE PUSH32 0x75696E74323536206D616B65724173736574416D6F756E742C00000000000000 PUSH1 0x82 DUP4 ADD MSTORE PUSH32 0x75696E743235362074616B65724173736574416D6F756E742C00000000000000 PUSH1 0x9B DUP4 ADD MSTORE PUSH32 0x75696E74323536206D616B65724665652C000000000000000000000000000000 PUSH1 0xB4 DUP4 ADD MSTORE PUSH32 0x75696E743235362074616B65724665652C000000000000000000000000000000 PUSH1 0xC5 DUP4 ADD MSTORE PUSH32 0x75696E743235362065787069726174696F6E54696D655365636F6E64732C0000 PUSH1 0xD6 DUP4 ADD MSTORE PUSH32 0x75696E743235362073616C742C00000000000000000000000000000000000000 PUSH1 0xF4 DUP4 ADD MSTORE PUSH32 0x6279746573206D616B65724173736574446174612C0000000000000000000000 PUSH2 0x101 DUP4 ADD MSTORE PUSH32 0x62797465732074616B6572417373657444617461000000000000000000000000 PUSH2 0x116 DUP4 ADD MSTORE PUSH32 0x2900000000000000000000000000000000000000000000000000000000000000 PUSH2 0x12A DUP4 ADD MSTORE DUP3 MLOAD PUSH2 0x10B DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH2 0x12B SWAP1 SWAP3 ADD SWAP3 DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH1 0x0 SWAP4 DUP5 SWAP4 DUP5 SWAP4 DUP5 SWAP4 SWAP2 SWAP3 SWAP2 DUP3 SWAP2 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x38A8 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x386B JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP4 ADD DUP2 SWAP1 SUB DUP2 KECCAK256 PUSH2 0x140 DUP12 ADD MLOAD DUP1 MLOAD SWAP2 SWAP10 POP SWAP6 POP SWAP1 SWAP4 POP DUP4 SWAP3 DUP6 ADD SWAP2 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x3943 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x3906 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP4 ADD DUP2 SWAP1 SUB DUP2 KECCAK256 PUSH2 0x160 DUP12 ADD MLOAD DUP1 MLOAD SWAP2 SWAP9 POP SWAP6 POP SWAP1 SWAP4 POP DUP4 SWAP3 DUP6 ADD SWAP2 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x39DE JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x39A1 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 SWAP1 SWAP4 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP2 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP3 ADD DUP3 SWAP1 SUB SWAP1 SWAP2 KECCAK256 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP10 ADD DUP1 MLOAD PUSH2 0x140 DUP12 ADD DUP1 MLOAD PUSH2 0x160 SWAP1 SWAP13 ADD DUP1 MLOAD SWAP11 DUP5 MSTORE SWAP9 DUP2 MSTORE SWAP3 DUP9 MSTORE PUSH2 0x1A0 DUP3 KECCAK256 SWAP2 MSTORE SWAP9 SWAP1 MSTORE POP POP POP SWAP2 SWAP1 MSTORE POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x120 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x3AB7 PUSH2 0x3A79 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3AC4 PUSH2 0x3A79 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF74 DUP3 CALLDATALOAD PUSH2 0x4DDF JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0x3B0E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x3B21 PUSH2 0x3B1C DUP3 PUSH2 0x4D74 JUMP JUMPDEST PUSH2 0x4D4D JUMP JUMPDEST DUP2 DUP2 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP3 POP DUP3 ADD DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3B5F JUMPI DUP2 CALLDATALOAD DUP7 ADD PUSH2 0x3B49 DUP9 DUP3 PUSH2 0x3CBB JUMP JUMPDEST DUP5 MSTORE POP PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x3B33 JUMP JUMPDEST POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0x3B7A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x3B88 PUSH2 0x3B1C DUP3 PUSH2 0x4D74 JUMP JUMPDEST DUP2 DUP2 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP3 POP DUP3 ADD DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3B5F JUMPI DUP2 CALLDATALOAD DUP7 ADD PUSH2 0x3BB0 DUP9 DUP3 PUSH2 0x3D0A JUMP JUMPDEST DUP5 MSTORE POP PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x3B9A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0x3BD7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x3BE5 PUSH2 0x3B1C DUP3 PUSH2 0x4D74 JUMP JUMPDEST SWAP2 POP DUP2 DUP2 DUP4 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH1 0x20 DUP2 ADD SWAP1 POP DUP4 DUP6 PUSH1 0x20 DUP5 MUL DUP3 ADD GT ISZERO PUSH2 0x3C0A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3B5F JUMPI DUP2 PUSH2 0x3C20 DUP9 DUP3 PUSH2 0x3C4E JUMP JUMPDEST DUP5 MSTORE POP PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x3C0D JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF74 DUP3 CALLDATALOAD PUSH2 0x4DF8 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF74 DUP3 MLOAD PUSH2 0x4DF8 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF74 DUP3 CALLDATALOAD PUSH2 0x4DFD JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF74 DUP3 CALLDATALOAD PUSH2 0x4E00 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF74 DUP3 MLOAD PUSH2 0x4E00 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x1F DUP4 ADD DUP5 SGT PUSH2 0x3C84 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3C9C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x1 DUP3 MUL DUP4 ADD GT ISZERO PUSH2 0x3CB4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0x3CCC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x3CDA PUSH2 0x3B1C DUP3 PUSH2 0x4D95 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP4 ADD DUP6 DUP4 DUP4 ADD GT ISZERO PUSH2 0x3CF6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3D01 DUP4 DUP3 DUP5 PUSH2 0x4E36 JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x180 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3D1D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3D28 PUSH2 0x180 PUSH2 0x4D4D JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3D36 DUP5 DUP5 PUSH2 0x3AF1 JUMP JUMPDEST DUP3 MSTORE POP PUSH1 0x20 PUSH2 0x3D47 DUP5 DUP5 DUP4 ADD PUSH2 0x3AF1 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP PUSH1 0x40 PUSH2 0x3D5B DUP5 DUP3 DUP6 ADD PUSH2 0x3AF1 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 PUSH2 0x3D6F DUP5 DUP3 DUP6 ADD PUSH2 0x3AF1 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE POP PUSH1 0x80 PUSH2 0x3D83 DUP5 DUP3 DUP6 ADD PUSH2 0x3C4E JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE POP PUSH1 0xA0 PUSH2 0x3D97 DUP5 DUP3 DUP6 ADD PUSH2 0x3C4E JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE POP PUSH1 0xC0 PUSH2 0x3DAB DUP5 DUP3 DUP6 ADD PUSH2 0x3C4E JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE POP PUSH1 0xE0 PUSH2 0x3DBF DUP5 DUP3 DUP6 ADD PUSH2 0x3C4E JUMP JUMPDEST PUSH1 0xE0 DUP4 ADD MSTORE POP PUSH2 0x100 PUSH2 0x3DD4 DUP5 DUP3 DUP6 ADD PUSH2 0x3C4E JUMP JUMPDEST PUSH2 0x100 DUP4 ADD MSTORE POP PUSH2 0x120 PUSH2 0x3DEA DUP5 DUP3 DUP6 ADD PUSH2 0x3C4E JUMP JUMPDEST PUSH2 0x120 DUP4 ADD MSTORE POP PUSH2 0x140 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3E0C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3E18 DUP5 DUP3 DUP6 ADD PUSH2 0x3CBB JUMP JUMPDEST PUSH2 0x140 DUP4 ADD MSTORE POP PUSH2 0x160 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3E3A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3E46 DUP5 DUP3 DUP6 ADD PUSH2 0x3CBB JUMP JUMPDEST PUSH2 0x160 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3E65 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2C69 DUP5 DUP5 PUSH2 0x3AF1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3E84 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x3E90 DUP6 DUP6 PUSH2 0x3AF1 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x3EA1 DUP6 DUP3 DUP7 ADD PUSH2 0x3AF1 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3EBE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x3ECA DUP6 DUP6 PUSH2 0x3AF1 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x3EA1 DUP6 DUP3 DUP7 ADD PUSH2 0x3C36 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3EED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3F04 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2C69 DUP5 DUP3 DUP6 ADD PUSH2 0x3B69 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3F25 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3F3C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3F48 DUP7 DUP3 DUP8 ADD PUSH2 0x3B69 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3F65 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3F71 DUP7 DUP3 DUP8 ADD PUSH2 0x3BC6 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3F8E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3F9A DUP7 DUP3 DUP8 ADD PUSH2 0x3AFD JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3FB9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3FD0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3FDC DUP7 DUP3 DUP8 ADD PUSH2 0x3B69 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x3F71 DUP7 DUP3 DUP8 ADD PUSH2 0x3C4E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3FFF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2C69 DUP5 DUP5 PUSH2 0x3C42 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x401D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2C69 DUP5 DUP5 PUSH2 0x3C4E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x403C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x3E90 DUP6 DUP6 PUSH2 0x3C4E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x405E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x406A DUP8 DUP8 PUSH2 0x3C4E JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x407B DUP8 DUP3 DUP9 ADD PUSH2 0x3AF1 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4098 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x40A4 DUP8 DUP3 DUP9 ADD PUSH2 0x3C72 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x40C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x40D1 DUP7 DUP7 PUSH2 0x3C4E JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x40E2 DUP7 DUP3 DUP8 ADD PUSH2 0x3AF1 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x40FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3F9A DUP7 DUP3 DUP8 ADD PUSH2 0x3CBB JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x411D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2C69 DUP5 DUP5 PUSH2 0x3C5A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x413B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2C69 DUP5 DUP5 PUSH2 0x3C66 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4159 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4170 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2C69 DUP5 DUP3 DUP6 ADD PUSH2 0x3D0A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x4192 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x41A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x41B5 DUP8 DUP3 DUP9 ADD PUSH2 0x3D0A JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x41D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x41DE DUP8 DUP3 DUP9 ADD PUSH2 0x3D0A JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x41FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4207 DUP8 DUP3 DUP9 ADD PUSH2 0x3CBB JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4224 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4230 DUP8 DUP3 DUP9 ADD PUSH2 0x3CBB JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x4251 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4268 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4274 DUP7 DUP3 DUP8 ADD PUSH2 0x3D0A JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x40E2 DUP7 DUP3 DUP8 ADD PUSH2 0x3C4E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x429E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x42AA DUP10 DUP10 PUSH2 0x3C4E JUMP JUMPDEST SWAP7 POP POP PUSH1 0x20 PUSH2 0x42BB DUP10 DUP3 DUP11 ADD PUSH2 0x3AF1 JUMP JUMPDEST SWAP6 POP POP PUSH1 0x40 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x42D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x42E4 DUP10 DUP3 DUP11 ADD PUSH2 0x3C72 JUMP JUMPDEST SWAP5 POP SWAP5 POP POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4303 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x430F DUP10 DUP3 DUP11 ADD PUSH2 0x3C72 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH2 0x4327 DUP2 PUSH2 0x4DDF JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x4327 DUP2 PUSH2 0x4DF8 JUMP JUMPDEST PUSH2 0x4327 DUP2 PUSH2 0x4DFD JUMP JUMPDEST PUSH2 0x4327 DUP2 PUSH2 0x4E00 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4353 DUP3 PUSH2 0x4DDB JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH2 0x4367 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x4E42 JUMP JUMPDEST PUSH2 0x4370 DUP2 PUSH2 0x4E6E JUMP JUMPDEST SWAP1 SWAP4 ADD PUSH1 0x20 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x4327 DUP2 PUSH2 0x4E2B JUMP JUMPDEST PUSH1 0x12 DUP2 MSTORE PUSH32 0x4C454E4754485F36355F52455155495245440000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0xD DUP2 MSTORE PUSH32 0x494E56414C49445F54414B455200000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1A DUP2 MSTORE PUSH32 0x41535345545F50524F58595F414C52454144595F455849535453000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F33325F4C454E4754485F5245 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x15 DUP2 MSTORE PUSH32 0x5349474E41545552455F554E535550504F525445440000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x17 DUP2 MSTORE PUSH32 0x494E56414C49445F4F524445525F5349474E4154555245000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0xD DUP2 MSTORE PUSH32 0x494E56414C49445F4D414B455200000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0xF DUP2 MSTORE PUSH32 0x494E56414C49445F54585F484153480000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x11 DUP2 MSTORE PUSH32 0x494E56414C49445F5349474E4154555245000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0xE DUP2 MSTORE PUSH32 0x524F554E44494E475F4552524F52000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x10 DUP2 MSTORE PUSH32 0x4641494C45445F455845435554494F4E00000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x14 DUP2 MSTORE PUSH32 0x494E56414C49445F54414B45525F414D4F554E54000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1A DUP2 MSTORE PUSH32 0x41535345545F50524F58595F444F45535F4E4F545F4558495354000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x21 DUP2 MSTORE PUSH32 0x475245415445525F5448414E5F5A45524F5F4C454E4754485F52455155495245 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x4400000000000000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x11 DUP2 MSTORE PUSH32 0x5349474E41545552455F494C4C4547414C000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1E DUP2 MSTORE PUSH32 0x4C454E4754485F475245415445525F5448414E5F305F52455155495245440000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x17 DUP2 MSTORE PUSH32 0x494E56414C49445F4E45575F4F524445525F45504F4348000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1E DUP2 MSTORE PUSH32 0x4C454E4754485F475245415445525F5448414E5F335F52455155495245440000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x14 DUP2 MSTORE PUSH32 0x434F4D504C4554455F46494C4C5F4641494C4544000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x12 DUP2 MSTORE PUSH32 0x5245454E5452414E43595F494C4C4547414C0000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x13 DUP2 MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F32305F4C454E4754485F5245 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x10 DUP2 MSTORE PUSH32 0x4F524445525F554E46494C4C41424C4500000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0xE DUP2 MSTORE PUSH32 0x494E56414C49445F53454E444552000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x18 DUP2 MSTORE PUSH32 0x4E454741544956455F5350524541445F52455155495245440000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x14 DUP2 MSTORE PUSH32 0x494E56414C49445F54585F5349474E4154555245000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x11 DUP2 MSTORE PUSH32 0x4C454E4754485F305F5245515549524544000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x80 DUP4 ADD SWAP1 PUSH2 0x4919 DUP5 DUP3 PUSH2 0x4336 JUMP JUMPDEST POP PUSH1 0x20 DUP3 ADD MLOAD PUSH2 0x492C PUSH1 0x20 DUP6 ADD DUP3 PUSH2 0x4336 JUMP JUMPDEST POP PUSH1 0x40 DUP3 ADD MLOAD PUSH2 0x493F PUSH1 0x40 DUP6 ADD DUP3 PUSH2 0x4336 JUMP JUMPDEST POP PUSH1 0x60 DUP3 ADD MLOAD PUSH2 0x2E00 PUSH1 0x60 DUP6 ADD DUP3 PUSH2 0x4336 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x120 DUP4 ADD SWAP1 PUSH2 0x4964 DUP5 DUP3 PUSH2 0x4908 JUMP JUMPDEST POP PUSH1 0x20 DUP3 ADD MLOAD PUSH2 0x4977 PUSH1 0x80 DUP6 ADD DUP3 PUSH2 0x4908 JUMP JUMPDEST POP PUSH1 0x40 DUP3 ADD MLOAD PUSH2 0x2E00 PUSH2 0x100 DUP6 ADD DUP3 PUSH2 0x4336 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x60 DUP4 ADD SWAP1 PUSH2 0x499C DUP5 DUP3 PUSH2 0x49C2 JUMP JUMPDEST POP PUSH1 0x20 DUP3 ADD MLOAD PUSH2 0x49AF PUSH1 0x20 DUP6 ADD DUP3 PUSH2 0x4336 JUMP JUMPDEST POP PUSH1 0x40 DUP3 ADD MLOAD PUSH2 0x2E00 PUSH1 0x40 DUP6 ADD DUP3 PUSH2 0x4336 JUMP JUMPDEST PUSH2 0x4327 DUP2 PUSH2 0x4E25 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x24EB DUP3 DUP5 PUSH2 0x431E JUMP JUMPDEST PUSH2 0x100 DUP2 ADD PUSH2 0x49E8 DUP3 DUP12 PUSH2 0x431E JUMP JUMPDEST PUSH2 0x49F5 PUSH1 0x20 DUP4 ADD DUP11 PUSH2 0x431E JUMP JUMPDEST PUSH2 0x4A02 PUSH1 0x40 DUP4 ADD DUP10 PUSH2 0x4336 JUMP JUMPDEST PUSH2 0x4A0F PUSH1 0x60 DUP4 ADD DUP9 PUSH2 0x4336 JUMP JUMPDEST PUSH2 0x4A1C PUSH1 0x80 DUP4 ADD DUP8 PUSH2 0x4336 JUMP JUMPDEST PUSH2 0x4A29 PUSH1 0xA0 DUP4 ADD DUP7 PUSH2 0x4336 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0xC0 DUP4 ADD MSTORE PUSH2 0x4A3B DUP2 DUP6 PUSH2 0x4348 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x4A4F DUP2 DUP5 PUSH2 0x4348 JUMP JUMPDEST SWAP11 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x4A6B DUP3 DUP7 PUSH2 0x431E JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x4A7D DUP2 DUP6 PUSH2 0x4348 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x4A91 DUP2 DUP5 PUSH2 0x4348 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x24EB DUP3 DUP5 PUSH2 0x432D JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x24EB DUP3 DUP5 PUSH2 0x4336 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x4AC4 DUP3 DUP7 PUSH2 0x4336 JUMP JUMPDEST PUSH2 0x4AD1 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x431E JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x4A91 DUP2 DUP5 PUSH2 0x4348 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x4AF1 DUP3 DUP6 PUSH2 0x4336 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x2C69 DUP2 DUP5 PUSH2 0x4348 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x4B11 DUP3 DUP8 PUSH2 0x4336 JUMP JUMPDEST PUSH2 0x4B1E PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x49C2 JUMP JUMPDEST PUSH2 0x4B2B PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x4336 JUMP JUMPDEST PUSH2 0x4A91 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x4336 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x4B46 DUP3 DUP6 PUSH2 0x433F JUMP JUMPDEST PUSH2 0xF74 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x431E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xF74 DUP2 DUP5 PUSH2 0x4348 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x24EB DUP3 DUP5 PUSH2 0x437D JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x24EB DUP2 PUSH2 0x4386 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x24EB DUP2 PUSH2 0x43B6 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x24EB DUP2 PUSH2 0x43E6 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x24EB DUP2 PUSH2 0x4416 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x24EB DUP2 PUSH2 0x446C JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x24EB DUP2 PUSH2 0x449C JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x24EB DUP2 PUSH2 0x44CC JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x24EB DUP2 PUSH2 0x44FC JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x24EB DUP2 PUSH2 0x452C JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x24EB DUP2 PUSH2 0x455C JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x24EB DUP2 PUSH2 0x458C JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x24EB DUP2 PUSH2 0x45BC JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x24EB DUP2 PUSH2 0x45EC JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x24EB DUP2 PUSH2 0x461C JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x24EB DUP2 PUSH2 0x4672 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x24EB DUP2 PUSH2 0x46A2 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x24EB DUP2 PUSH2 0x46D2 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x24EB DUP2 PUSH2 0x4702 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x24EB DUP2 PUSH2 0x4732 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x24EB DUP2 PUSH2 0x4762 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x24EB DUP2 PUSH2 0x4792 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x24EB DUP2 PUSH2 0x47C2 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x24EB DUP2 PUSH2 0x4818 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x24EB DUP2 PUSH2 0x4848 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x24EB DUP2 PUSH2 0x4878 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x24EB DUP2 PUSH2 0x48A8 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x24EB DUP2 PUSH2 0x48D8 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x24EB DUP3 DUP5 PUSH2 0x4908 JUMP JUMPDEST PUSH2 0x120 DUP2 ADD PUSH2 0x24EB DUP3 DUP5 PUSH2 0x4952 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x24EB DUP3 DUP5 PUSH2 0x498B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x4D6C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x4D8B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 SWAP1 DUP2 MUL ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x4DAC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x1F SWAP2 SWAP1 SWAP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND SWAP1 JUMP JUMPDEST PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x24EB DUP3 PUSH2 0x4DDF JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4E5D JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x4E45 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x2E00 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP1 JUMP STOP LOG2 PUSH6 0x627A7A723058 KECCAK256 SIGNEXTEND 0xd2 0xea 0xba 0x4f RETURN SWAP11 JUMPI 0xe CODECOPY CALL 0xd5 SWAP13 POP 0x28 0xc5 0x27 PUSH6 0x6C4CA9F2056 PUSH13 0xD5328A8887D16A6C6578706572 PUSH10 0x6D656E74616CF5003700 ",
- "sourceMap": "896:616:2:-;;;1194:316;8:9:-1;5:2;;;30:1;27;20:12;5:2;1194:316:2;;;;;;;;;;;;;;;;;;;;;;;;945:29:16;;1271:13:2;;945:29:16;;:14;;:29;;;;;:::i;:::-;-1:-1:-1;;1015:148:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;1015:148:17;;;;;;;;1005:159;;1015:148;;;;;1005:159;;;;1015:148;1005:159;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;1005:159:17;;;;;;;;;;;;1423:18;;;;;;;;;;;;;;;;1407:36;;1005:159;;-1:-1:-1;1005:159:17;;-1:-1:-1;1407:36:17;;;;-1:-1:-1;1423:18:17;1407:36;1423:18;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;1407:36:17;;;;;;;;;;;;1473:21;;;;;274:1:-1;1473:21:17;;;;;;;;;;1457:39;;1407:36;;-1:-1:-1;1407:36:17;;-1:-1:-1;1457:39:17;;;;-1:-1:-1;274:1;1457:39:17;1473:21;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;1457:39:17;;;;;;;;;;;1334:199;;;;-1:-1:-1;1457:39:17;-1:-1:-1;1518:4:17;;1334:199;;-1:-1:-1;1334:199:17;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;1334:199:17;;;1324:210;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;-1:-1;;263:2;259:12;;;;254:3;250:22;246:30;;;;340:21;;;311:9;;295:26;377:20;;;;365:33;;1324:210:17;;;;;;;;;;274:1:-1;1303:231:17;-1:-1:-1;;363:5:29;:18;;-1:-1:-1;;;;;;363:18:29;371:10;363:18;;;-1:-1:-1;896:616:2;;-1:-1:-1;896:616:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;896:616:2;;;-1:-1:-1;896:616:2;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;6:442:-1:-;;111:4;99:17;;95:27;-1:-1;85:2;;136:1;133;126:12;85:2;166:6;160:13;188:64;203:48;244:6;203:48;;;188:64;;;179:73;;272:6;265:5;258:21;308:4;300:6;296:17;341:4;334:5;330:16;376:3;367:6;362:3;358:16;355:25;352:2;;;393:1;390;383:12;352:2;403:39;435:6;430:3;425;403:39;;;78:370;;;;;;;;456:360;;580:2;568:9;559:7;555:23;551:32;548:2;;;596:1;593;586:12;548:2;631:24;;-1:-1;;;;;664:30;;661:2;;;707:1;704;697:12;661:2;727:73;792:7;783:6;772:9;768:22;727:73;;;717:83;542:274;-1:-1;;;;542:274;823:110;896:31;921:5;896:31;;;891:3;884:44;878:55;;;940:110;1013:31;1038:5;1013:31;;1057:497;1249:3;1234:19;;1264:61;1238:9;1298:6;1264:61;;;1336:62;1394:2;1383:9;1379:18;1370:6;1336:62;;;1409;1467:2;1456:9;1452:18;1443:6;1409:62;;;1482;1540:2;1529:9;1525:18;1516:6;1482:62;;;1220:334;;;;;;;;1561:256;1623:2;1617:9;1649:17;;;-1:-1;;;;;1709:34;;1745:22;;;1706:62;1703:2;;;1781:1;1778;1771:12;1703:2;1797;1790:22;1601:216;;-1:-1;1601:216;1824:258;;-1:-1;;;;;1959:6;1956:30;1953:2;;;1999:1;1996;1989:12;1953:2;-1:-1;2072:4;2043;2020:17;;;;-1:-1;;2016:33;2062:15;;1890:192;2089:128;-1:-1;;;;;2158:54;;2141:76;2311:268;2376:1;2383:101;2397:6;2394:1;2391:13;2383:101;;;2464:11;;;2458:18;2445:11;;;2438:39;2419:2;2412:10;2383:101;;;2499:6;2496:1;2493:13;2490:2;;;2564:1;2555:6;2550:3;2546:16;2539:27;2490:2;2360:219;;;;;;896:616:2;;;;;;"
+ "object": "0x60806040523480156200001157600080fd5b506040516200567c3803806200567c833981018060405262000037919081019062000433565b805181906200004e90600090602084019062000332565b5050604080517f454950373132446f6d61696e28000000000000000000000000000000000000006020808301919091527f737472696e67206e616d652c0000000000000000000000000000000000000000602d8301527f737472696e672076657273696f6e2c000000000000000000000000000000000060398301527f6164647265737320766572696679696e67436f6e74726163740000000000000060488301527f2900000000000000000000000000000000000000000000000000000000000000606183015282516042818403018152606290920192839052815191929182918401908083835b60208310620001585780518252601f19909201916020918201910162000137565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208285018552600b8084527f30782050726f746f636f6c000000000000000000000000000000000000000000928401928352945190965091945090928392508083835b60208310620001e25780518252601f199092019160209182019101620001c1565b51815160209384036101000a600019018019909216911617905260408051929094018290038220828501855260018084527f3200000000000000000000000000000000000000000000000000000000000000928401928352945190965091945090928392508083835b602083106200026c5780518252601f1990920191602091820191016200024b565b51815160209384036101000a6000190180199092169116179052604051919093018190038120620002a797969550935030920190506200048f565b6040516020818303038152906040526040518082805190602001908083835b60208310620002e75780518252601f199092019160209182019101620002c6565b5181516000196020949094036101000a939093019283169219169190911790526040519201829003909120600155505060028054600160a060020a0319163317905550620005639050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200037557805160ff1916838001178555620003a5565b82800160010185558215620003a5579182015b82811115620003a557825182559160200191906001019062000388565b50620003b3929150620003b7565b5090565b620003d491905b80821115620003b35760008155600101620003be565b90565b6000601f82018313620003e957600080fd5b815162000400620003fa82620004fc565b620004d5565b915080825260208301602083018583830111156200041d57600080fd5b6200042a83828462000530565b50505092915050565b6000602082840312156200044657600080fd5b81516001604060020a038111156200045d57600080fd5b6200046b84828501620003d7565b949350505050565b6200047e8162000524565b82525050565b6200047e81620003d4565b608081016200049f828762000484565b620004ae602083018662000484565b620004bd604083018562000484565b620004cc606083018462000473565b95945050505050565b6040518181016001604060020a0381118282101715620004f457600080fd5b604052919050565b60006001604060020a038211156200051357600080fd5b506020601f91909101601f19160190565b600160a060020a031690565b60005b838110156200054d57818101518382015260200162000533565b838111156200055d576000848401525b50505050565b61510980620005736000396000f3006080604052600436106101c15763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416632624b2d981146101c6578063288cdc91146101f1578063297bb70b146102115780632ac126221461023e5780633683ef8e1461026b5780633c28d8611461028d5780633e228bae146102ba5780633fd3c997146102da5780634ac14782146103075780634d0ae546146103275780634f9559b11461034757806350dde190146103675780636070410814610387578063642f2eaf146103b457806364a3bc15146103d457806377fcce68146103f45780637b8e3514146104145780637e1d9808146104345780637e9d74dc1461045457806382c174d0146104815780638da5cb5b146104a157806393634702146104b6578063a3e20380146104d6578063b4be83d5146104f6578063bfc8bfce14610516578063c585bb9314610536578063c75e0a8114610556578063d46b02c314610583578063d9bfa73e146105a3578063db123b1a146105c3578063dd1c7d18146105e5578063e306f77914610605578063e5fa431b1461061a578063eea086ba1461063a578063f2fde38b1461064f578063ffa1ad741461066f575b600080fd5b3480156101d257600080fd5b506101db610684565b6040516101e89190614ccb565b60405180910390f35b3480156101fd57600080fd5b506101db61020c366004614196565b6107d8565b34801561021d57600080fd5b5061023161022c36600461409b565b6107ea565b6040516101e89190614f55565b34801561024a57600080fd5b5061025e610259366004614196565b61087a565b6040516101e89190614cbd565b34801561027757600080fd5b5061028b6102863660046141d3565b61088f565b005b34801561029957600080fd5b506102ad6102a8366004614307565b610968565b6040516101e89190614f63565b3480156102c657600080fd5b506102316102d53660046143c7565b610a54565b3480156102e657600080fd5b506102fa6102f5366004614296565b610c64565b6040516101e89190614d87565b34801561031357600080fd5b5061028b610322366004614066565b610c8c565b34801561033357600080fd5b5061023161034236600461409b565b610cc4565b34801561035357600080fd5b5061028b610362366004614196565b610d4b565b34801561037357600080fd5b5061023161038236600461409b565b610e6f565b34801561039357600080fd5b506103a76103a2366004614296565b610ef6565b6040516101e89190614bdd565b3480156103c057600080fd5b5061025e6103cf366004614196565b610f44565b3480156103e057600080fd5b506102316103ef3660046143c7565b610f59565b34801561040057600080fd5b5061028b61040f366004614036565b610fb3565b34801561042057600080fd5b5061025e61042f366004613ffc565b61105e565b34801561044057600080fd5b5061023161044f36600461412f565b61107e565b34801561046057600080fd5b5061047461046f366004614066565b61114f565b6040516101e89190614cac565b34801561048d57600080fd5b5061025e61049c3660046141b4565b6111ed565b3480156104ad57600080fd5b506103a761120d565b3480156104c257600080fd5b5061025e6104d136600461423b565b611229565b3480156104e257600080fd5b506102316104f136600461412f565b611a4f565b34801561050257600080fd5b506102316105113660046143c7565b611b5f565b34801561052257600080fd5b5061028b610531366004614410565b611be3565b34801561054257600080fd5b5061028b610551366004613fde565b611e7c565b34801561056257600080fd5b506105766105713660046142d2565b6120a7565b6040516101e89190614f72565b34801561058f57600080fd5b5061028b61059e3660046142d2565b6121a1565b3480156105af57600080fd5b506101db6105be366004613ffc565b6121cc565b3480156105cf57600080fd5b506105d86121e9565b6040516101e89190614d76565b3480156105f157600080fd5b5061023161060036600461412f565b612295565b34801561061157600080fd5b506101db61235b565b34801561062657600080fd5b5061023161063536600461412f565b612361565b34801561064657600080fd5b506103a7612435565b34801561065b57600080fd5b5061028b61066a366004613fde565b612451565b34801561067b57600080fd5b506105d8612502565b604080517f454950373132446f6d61696e28000000000000000000000000000000000000006020808301919091527f737472696e67206e616d652c0000000000000000000000000000000000000000602d8301527f737472696e672076657273696f6e2c000000000000000000000000000000000060398301527f6164647265737320766572696679696e67436f6e74726163740000000000000060488301527f2900000000000000000000000000000000000000000000000000000000000000606183015282516042818403018152606290920192839052815191929182918401908083835b602083106107a857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161076b565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902081565b60036020526000908152604090205481565b6107f2613c04565b60006107fc613c04565b600091505b85518210156108715761085a868381518110151561081b57fe5b90602001906020020151868481518110151561083357fe5b90602001906020020151868581518110151561084b57fe5b90602001906020020151611b5f565b90506108668382612539565b600190910190610801565b50509392505050565b60046020526000908152604090205460ff1681565b6108ca848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843750611229945050505050565b151561090b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614e25565b60405180910390fd5b5050600091825260066020908152604080842073ffffffffffffffffffffffffffffffffffffffff9093168452919052902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b610970613c2d565b610978613c5c565b610980613c5c565b61016080880151610140808901919091528801519087015260006109a3886120a7565b92506109ae876120a7565b91506109b861259b565b90506109c488886125e4565b6109d8888885604001518560400151612640565b8051602001519094506109f290899085908490808b612704565b6020808501510151610a0b90889084908490808a612704565b610a248882856020015186604001518860000151612921565b610a3d8782846020015185604001518860200151612921565b610a49888883876129cd565b505050949350505050565b610a5c613c04565b604080517fb4be83d5000000000000000000000000000000000000000000000000000000008082526060600483018181528851606485019081526020808b01516084870152958a015160a48601529189015160c4850152608089015160e485015260a089015161010485015260c089015161012485015260e0890151610144850152610100890151610164850152610120890151610184850152610140890180516101a486019081526101608b01516101c487015261018090525180516101e48601819052939591938493926024870192849261020489019291820191601f82010460005b81811015610b5f578351855260209485019490930192600101610b41565b50505050818103610160808401919091528c0151805180835260209283019291820191601f82010460005b81811015610ba8578351855260209485019490930192600101610b8a565b5050508b84525084810360209384019081528a518083529093918201918b81019190601f82010460005b81811015610bf0578351855260209485019490930192600101610bd2565b5060808a8b86038c305af4808015610c0f5760018114610c2d57610c50565b60008e52600060208f0152600060408f0152600060608f0152610c50565b8b518e5260208c015160208f015260408c015160408f015260608c015160608f01525b505050505050505050505050509392505050565b600a6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60005b8151811015610cc057610cb88282815181101515610ca957fe5b906020019060200201516121a1565b600101610c8f565b5050565b610ccc613c04565b6000610cd6613c04565b600091505b855182101561087157610d348683815181101515610cf557fe5b906020019060200201518684815181101515610d0d57fe5b906020019060200201518685815181101515610d2557fe5b90602001906020020151610f59565b9050610d408382612539565b600190910190610cdb565b600080600080610d5961259b565b935073ffffffffffffffffffffffffffffffffffffffff84163314610d7e5733610d81565b60005b73ffffffffffffffffffffffffffffffffffffffff8086166000908152600560209081526040808320938516835292905220549093506001860192509050808211610df8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614ea5565b73ffffffffffffffffffffffffffffffffffffffff80851660008181526005602090815260408083209488168084529490915290819020859055517f82af639571738f4ebd4268fb0363d8957ebe1bbb9e78dba5ebd69eed39b154f090610e60908690614ccb565b60405180910390a35050505050565b610e77613c04565b6000610e81613c04565b600091505b855182101561087157610edf8683815181101515610ea057fe5b906020019060200201518684815181101515610eb857fe5b906020019060200201518685815181101515610ed057fe5b90602001906020020151610a54565b9050610eeb8382612539565b600190910190610e86565b7fffffffff0000000000000000000000000000000000000000000000000000000081166000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff165b919050565b60086020526000908152604090205460ff1681565b610f61613c04565b610f6c848484611b5f565b60208101519091508314610fac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614ec5565b9392505050565b6000610fbd61259b565b73ffffffffffffffffffffffffffffffffffffffff8181166000818152600760209081526040808320948916808452949091529081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168715151790555192935090917fa8656e308026eeabce8f0bc18048433252318ab80ac79da0b3d3d8697dfba89190611051908690614cbd565b60405180910390a3505050565b600760209081526000928352604080842090915290825290205460ff1681565b611086613c04565b6060600080611093613c04565b8760008151811015156110a257fe5b9060200190602002015161016001519350600092505b8751831015611144578388848151811015156110d057fe5b9060200190602002015161016001819052506110f0878660200151612bad565b915061111c888481518110151561110357fe5b9060200190602002015183888681518110151561084b57fe5b90506111288582612539565b868560200151141561113957611144565b6001909201916110b8565b505050509392505050565b6060600060606000845192508260405190808252806020026020018201604052801561119557816020015b611182613c5c565b81526020019060019003908161117a5790505b509150600090505b828110156111e5576111c585828151811015156111b657fe5b906020019060200201516120a7565b82828151811015156111d357fe5b6020908102909101015260010161119d565b509392505050565b600660209081526000928352604080842090915290825290205460ff1681565b60025473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008060008060008060008951111515611272576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614e95565b61127b89612bef565b7f010000000000000000000000000000000000000000000000000000000000000090049650600960ff8816106112dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614dd5565b8660ff1660098111156112ec57fe5b955060008660098111156112fc57fe5b1415611334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614e85565b600186600981111561134257fe5b141561138a57885115611381576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614f45565b60009750611a41565b600286600981111561139857fe5b14156114d35788516041146113d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614d95565b8860008151811015156113e857fe5b01602001517f010000000000000000000000000000000000000000000000000000000000000090819004810204945061142889600163ffffffff612cb316565b935061143b89602163ffffffff612cb316565b925060018b868686604051600081526020016040526040516114609493929190614d26565b60206040516020810390808403906000865af1158015611484573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015173ffffffffffffffffffffffffffffffffffffffff8c81169082161499509250611a419050565b60038660098111156114e157fe5b1415611687578851604114611522576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614d95565b88600081518110151561153157fe5b01602001517f010000000000000000000000000000000000000000000000000000000000000090819004810204945061157189600163ffffffff612cb316565b935061158489602163ffffffff612cb316565b925060018b60405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c0182600019166000191681526020019150506040516020818303038152906040526040518082805190602001908083835b6020831061162557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016115e8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260408051929094018290038220600083529101928390526114609450925089918991508890614d26565b600486600981111561169557fe5b14156116f4578851156116d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614f45565b73ffffffffffffffffffffffffffffffffffffffff8a1633149750611a41565b600586600981111561170257fe5b14156117b5576040517f1626ba7e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b1690631626ba7e9061175c908e908d90600401614d06565b602060405180830381600087803b15801561177657600080fd5b505af115801561178a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506117ae9190810190614178565b9750611a41565b60068660098111156117c357fe5b1415611870576117d289612cfe565b73ffffffffffffffffffffffffffffffffffffffff808c1660009081526007602090815260408083209385168352929052205490915060ff16151561181a5760009750611a41565b6040517f9363470200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063936347029061175c908e908e908e90600401614cd9565b600786600981111561187e57fe5b14156118be5760008b815260066020908152604080832073ffffffffffffffffffffffffffffffffffffffff8e16845290915290205460ff169750611a41565b60088660098111156118cc57fe5b1415611a0f57885160411461190d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614d95565b88600081518110151561191c57fe5b01602001517f010000000000000000000000000000000000000000000000000000000000000090819004810204945061195c89600163ffffffff612cb316565b935061196f89602163ffffffff612cb316565b925060018b60405160200180807f19457468657265756d205369676e6564204d6573736167653a0a200000000000815250601b0182600019166000191681526020019150506040516020818303038152906040526040518082805190602001908083836020831061162557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016115e8565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614dd5565b505050505050509392505050565b611a57613c04565b60606000806000611a66613c04565b886000815181101515611a7557fe5b9060200190602002015161014001519450600093505b8851841015611b5357848985815181101515611aa357fe5b6020908102909101015161014001528551611abf908990612bad565b9250611b028985815181101515611ad257fe5b9060200190602002015160a001518a86815181101515611aee57fe5b906020019060200201516080015185612d77565b9150611b2e8985815181101515611b1557fe5b90602001906020020151838987815181101515610ed057fe5b9050611b3a8682612539565b8551881415611b4857611b53565b600190930192611a8b565b50505050509392505050565b611b67613c04565b611b6f613c5c565b6000806000611b7d886120a7565b9350611b8761259b565b9250611b9b8860a001518560400151612bad565b9150611ba78783612d94565b9050611bb78885858a858b612704565b611bc18882612daa565b9450611bd888848660200151876040015189612921565b611144888487612e0a565b60095460009073ffffffffffffffffffffffffffffffffffffffff1615611c36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614ed5565b611c79611c74888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843750612f1f945050505050565b613160565b60008181526008602052604090205490915060ff1615611cc5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614e15565b73ffffffffffffffffffffffffffffffffffffffff86163314611d9657611d1d818785858080601f01602080910402602001604051908101604052809392919081815260200183838082843750611229945050505050565b1515611d55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614f35565b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff88161790555b6000818152600860205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555130908690869080838380828437820191505092505050600060405180830381855af49150501515611e2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614e45565b73ffffffffffffffffffffffffffffffffffffffff86163314611e7357600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555b50505050505050565b6002546000908190819073ffffffffffffffffffffffffffffffffffffffff163314611ed4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614ee5565b8392508273ffffffffffffffffffffffffffffffffffffffff1663ae25532e6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015611f3b57600080fd5b505af1158015611f4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611f7391908101906142b4565b7fffffffff0000000000000000000000000000000000000000000000000000000081166000908152600a602052604090205490925073ffffffffffffffffffffffffffffffffffffffff1690508015611ff8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614db5565b7fffffffff0000000000000000000000000000000000000000000000000000000082166000908152600a60205260409081902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8616179055517fd2c6b762299c609bdb96520b58a49bfb80186934d4f71a86a367571a15c03194906120999084908790614d5b565b60405180910390a150505050565b6120af613c5c565b6120b8826132e0565b60208083018290526000918252600390526040908190205490820152608082015115156120ec5760015b60ff168152610f3f565b60a082015115156120fe5760026120e2565b60a08201516040820151106121145760056120e2565b61010082015142106121275760046120e2565b60208082015160009081526004909152604090205460ff161561214b5760066120e2565b610120820151825173ffffffffffffffffffffffffffffffffffffffff908116600090815260056020908152604080832060608801519094168352929052205411156121985760066120e2565b60038152919050565b6121a9613c5c565b6121b2826120a7565b90506121be82826132ee565b610cc0828260200151613405565b600560209081526000928352604080842090915290825290205481565b6000805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f8101849004840282018401909252818152929183018282801561228d5780601f106122625761010080835404028352916020019161228d565b820191906000526020600020905b81548152906001019060200180831161227057829003601f168201915b505050505081565b61229d613c04565b60606000806122aa613c04565b8760008151811015156122b957fe5b9060200190602002015161016001519350600092505b8751831015611144578388848151811015156122e757fe5b906020019060200201516101600181905250612307878660200151612bad565b9150612333888481518110151561231a57fe5b90602001906020020151838886815181101515610ed057fe5b905061233f8582612539565b868560200151141561235057611144565b6001909201916122cf565b60015481565b612369613c04565b60606000806000612378613c04565b88600081518110151561238757fe5b9060200190602002015161014001519450600093505b8851841015611b53578489858151811015156123b557fe5b60209081029091010151610140015285516123d1908990612bad565b92506123e48985815181101515611ad257fe5b915061241089858151811015156123f757fe5b9060200190602002015183898781518110151561084b57fe5b905061241c8682612539565b855188141561242a57611b53565b60019093019261239d565b60095473ffffffffffffffffffffffffffffffffffffffff1681565b60025473ffffffffffffffffffffffffffffffffffffffff1633146124a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614ee5565b73ffffffffffffffffffffffffffffffffffffffff8116156124ff57600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b60408051808201909152600b81527f322e302e312d616c706861000000000000000000000000000000000000000000602082015281565b8151815161254791906134ac565b82526020808301519082015161255d91906134ac565b60208301526040808301519082015161257691906134ac565b60408301526060808301519082015161258f91906134ac565b60609092019190915250565b600954600090819073ffffffffffffffffffffffffffffffffffffffff16156125dc5760095473ffffffffffffffffffffffffffffffffffffffff166125de565b335b92915050565b6125f68260a001518260a001516134f6565b612608836080015183608001516134f6565b1015610cc0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614f25565b612648613c2d565b60008060008061265c8960a0015188612bad565b935061266c8860a0015187612bad565b925061267c8389608001516134f6565b61268a858a60a001516134f6565b116126ac578391506126a58860a00151896080015184612d77565b90506126c5565b8290506126c288608001518960a0015183612d77565b91505b6126cf8983612daa565b85526126db8882612daa565b60208087018290528651519101516126f39190612bad565b604086015250505050949350505050565b845160ff16600314612742576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614f05565b82151561277b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614e55565b606086015173ffffffffffffffffffffffffffffffffffffffff16156127ee57606086015173ffffffffffffffffffffffffffffffffffffffff1633146127ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614f15565b602086015173ffffffffffffffffffffffffffffffffffffffff1615612879578373ffffffffffffffffffffffffffffffffffffffff16866020015173ffffffffffffffffffffffffffffffffffffffff16141515612879576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614da5565b604085015115156128cf576128978560200151876000015183611229565b15156128cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614de5565b6128e2828760a001518860800151613551565b15612919576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614e35565b505050505050565b61292f8282602001516134ac565b600084815260036020908152604091829020929092558681015187518451938501518584015160608701516101408c01516101608d015196518b9873ffffffffffffffffffffffffffffffffffffffff9788169897909616967f0bcc4c97732e47d9946f229edb95f5b6323f601300e4690de719993f3c371129966129be968f96339692959194909390614beb565b60405180910390a45050505050565b60008054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015612a775780601f10612a4c57610100808354040283529160200191612a77565b820191906000526020600020905b815481529060010190602001808311612a5a57829003601f168201915b50505050509050612a9f856101400151866000015186600001518560200151602001516135a2565b61014084015184518651845160200151612abb939291906135a2565b612ad485610140015186600001518585604001516135a2565b612af081866000015187604001518560000151604001516135a2565b612b0c81856000015186604001518560200151604001516135a2565b836040015173ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff161415612b7657612b7181848760400151612b6c8660000151606001518760200151606001516134ac565b6135a2565b612ba6565b612b8e818487604001518560000151606001516135a2565b612ba6818486604001518560200151606001516135a2565b5050505050565b600082821115612be9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614e05565b50900390565b6000808251111515612c2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614e75565b815182907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908110612c5d57fe5b016020015182517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01909252507f0100000000000000000000000000000000000000000000000000000000000000908190040290565b600081602001835110151515612cf5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614dc5565b50016020015190565b60006014825110151515612d3e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614ef5565b612d4c826014845103613733565b82517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec019092525090565b6000612d8c612d8685846134f6565b84613794565b949350505050565b6000818310612da35781610fac565b5090919050565b612db2613c04565b6020810182905260a08301516080840151612dce918491612d77565b815260a083015160c0840151612de5918491612d77565b604082015260a083015160e0840151612dff918491612d77565b606082015292915050565b60008054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015612eb45780601f10612e8957610100808354040283529160200191612eb4565b820191906000526020600020905b815481529060010190602001808311612e9757829003601f168201915b50505050509050612ed484610140015185600001518585600001516135a2565b612eed84610160015184866000015185602001516135a2565b612f05818560000151866040015185604001516135a2565b612f198184866040015185606001516135a2565b50505050565b604080517f5a65726f45785472616e73616374696f6e2800000000000000000000000000006020808301919091527f75696e743235362073616c742c0000000000000000000000000000000000000060328301527f61646472657373207369676e6572416464726573732c00000000000000000000603f8301527f627974657320646174610000000000000000000000000000000000000000000060558301527f2900000000000000000000000000000000000000000000000000000000000000605f830152825180830384018152606090920192839052815160009384938493909282918401908083835b6020831061304857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161300b565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260405191909301819003812089519097508995509093508392850191508083835b602083106130de57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016130a1565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040805192909401829003822097825281019a909a525073ffffffffffffffffffffffffffffffffffffffff97909716968801969096525050606085015250506080909120919050565b60006040805190810160405280600281526020017f1901000000000000000000000000000000000000000000000000000000000000815250600154836040516020018084805190602001908083835b602083106131ec57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016131af565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199092169116179052920194855250838101929092525060408051808403830181529281019081905282519293509182918401908083835b6020831061329057805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613253565b5181516020939093036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199091169216919091179052604051920182900390912095945050505050565b60006125de611c74836137ab565b805160009060ff1660031461332f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614f05565b606083015173ffffffffffffffffffffffffffffffffffffffff16156133a257606083015173ffffffffffffffffffffffffffffffffffffffff1633146133a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614f15565b6133aa61259b565b835190915073ffffffffffffffffffffffffffffffffffffffff808316911614613400576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614df5565b505050565b6000818152600460205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558281015183516101408501516101608601519351859473ffffffffffffffffffffffffffffffffffffffff9485169493909316927fdc47b3613d9fe400085f6dbdc99453462279057e6207385042827ed6b1a62cf7926134a092339290614c6f565b60405180910390a45050565b6000828201838110156134eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614e05565b8091505b5092915050565b60008083151561350957600091506134ef565b5082820282848281151561351957fe5b04146134eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614e05565b60008060008480151561356057fe5b86850991508115156135755760009250610871565b61359461358583620f42406134f6565b61358f88876134f6565b613794565b6103e8109695505050505050565b60008060008311156129195785516003106135e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614eb5565b50506020848101517fffffffff00000000000000000000000000000000000000000000000000000000166000818152600a90925260409091205473ffffffffffffffffffffffffffffffffffffffff16801515613672576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614e65565b604051660fffffffffffe0603f885101168060840182017fa85e59e40000000000000000000000000000000000000000000000000000000083526080600484015273ffffffffffffffffffffffffffffffffffffffff8816602484015273ffffffffffffffffffffffffffffffffffffffff87166044840152856064840152608483015b8181101561370e57895181526020998a0199016136f6565b61020084858403866000895af1801515613726573d85fd5b5050505050505050505050565b600081601401835110151515613775576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614ef5565b50016014015173ffffffffffffffffffffffffffffffffffffffff1690565b60008082848115156137a257fe5b04949350505050565b604080517f4f726465722800000000000000000000000000000000000000000000000000006020808301919091527f61646472657373206d616b6572416464726573732c000000000000000000000060268301527f616464726573732074616b6572416464726573732c0000000000000000000000603b8301527f6164647265737320666565526563697069656e74416464726573732c0000000060508301527f616464726573732073656e646572416464726573732c00000000000000000000606c8301527f75696e74323536206d616b65724173736574416d6f756e742c0000000000000060828301527f75696e743235362074616b65724173736574416d6f756e742c00000000000000609b8301527f75696e74323536206d616b65724665652c00000000000000000000000000000060b48301527f75696e743235362074616b65724665652c00000000000000000000000000000060c58301527f75696e743235362065787069726174696f6e54696d655365636f6e64732c000060d68301527f75696e743235362073616c742c0000000000000000000000000000000000000060f48301527f6279746573206d616b65724173736574446174612c00000000000000000000006101018301527f62797465732074616b65724173736574446174610000000000000000000000006101168301527f290000000000000000000000000000000000000000000000000000000000000061012a830152825161010b81840301815261012b90920192839052815160009384938493849391929182918401908083835b60208310613a3357805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016139f6565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930181900381206101408b0151805191995095509093508392850191508083835b60208310613ace57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613a91565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930181900381206101608b0151805191985095509093508392850191508083835b60208310613b6957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613b2c565b5181516020939093036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909116921691909117905260405192018290039091207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0890180516101408b018051610160909c0180519a84529881529288526101a0822091529890525050509190525090919050565b608060405190810160405280600081526020016000815260200160008152602001600081525090565b61012060405190810160405280613c42613c04565b8152602001613c4f613c04565b8152602001600081525090565b604080516060810182526000808252602082018190529181019190915290565b6000610fac8235615018565b6000601f82018313613c9957600080fd5b8135613cac613ca782614fa7565b614f80565b81815260209384019390925082018360005b83811015613cea5781358601613cd48882613e46565b8452506020928301929190910190600101613cbe565b5050505092915050565b6000601f82018313613d0557600080fd5b8135613d13613ca782614fa7565b81815260209384019390925082018360005b83811015613cea5781358601613d3b8882613e95565b8452506020928301929190910190600101613d25565b6000601f82018313613d6257600080fd5b8135613d70613ca782614fa7565b91508181835260208401935060208101905083856020840282011115613d9557600080fd5b60005b83811015613cea5781613dab8882613dd9565b8452506020928301929190910190600101613d98565b6000610fac8235615031565b6000610fac8251615031565b6000610fac8235615036565b6000610fac8235615039565b6000610fac8251615039565b600080601f83018413613e0f57600080fd5b50813567ffffffffffffffff811115613e2757600080fd5b602083019150836001820283011115613e3f57600080fd5b9250929050565b6000601f82018313613e5757600080fd5b8135613e65613ca782614fc8565b91508082526020830160208301858383011115613e8157600080fd5b613e8c83828461506f565b50505092915050565b60006101808284031215613ea857600080fd5b613eb3610180614f80565b90506000613ec18484613c7c565b8252506020613ed284848301613c7c565b6020830152506040613ee684828501613c7c565b6040830152506060613efa84828501613c7c565b6060830152506080613f0e84828501613dd9565b60808301525060a0613f2284828501613dd9565b60a08301525060c0613f3684828501613dd9565b60c08301525060e0613f4a84828501613dd9565b60e083015250610100613f5f84828501613dd9565b61010083015250610120613f7584828501613dd9565b6101208301525061014082013567ffffffffffffffff811115613f9757600080fd5b613fa384828501613e46565b6101408301525061016082013567ffffffffffffffff811115613fc557600080fd5b613fd184828501613e46565b6101608301525092915050565b600060208284031215613ff057600080fd5b6000612d8c8484613c7c565b6000806040838503121561400f57600080fd5b600061401b8585613c7c565b925050602061402c85828601613c7c565b9150509250929050565b6000806040838503121561404957600080fd5b60006140558585613c7c565b925050602061402c85828601613dc1565b60006020828403121561407857600080fd5b813567ffffffffffffffff81111561408f57600080fd5b612d8c84828501613cf4565b6000806000606084860312156140b057600080fd5b833567ffffffffffffffff8111156140c757600080fd5b6140d386828701613cf4565b935050602084013567ffffffffffffffff8111156140f057600080fd5b6140fc86828701613d51565b925050604084013567ffffffffffffffff81111561411957600080fd5b61412586828701613c88565b9150509250925092565b60008060006060848603121561414457600080fd5b833567ffffffffffffffff81111561415b57600080fd5b61416786828701613cf4565b93505060206140fc86828701613dd9565b60006020828403121561418a57600080fd5b6000612d8c8484613dcd565b6000602082840312156141a857600080fd5b6000612d8c8484613dd9565b600080604083850312156141c757600080fd5b600061401b8585613dd9565b600080600080606085870312156141e957600080fd5b60006141f58787613dd9565b945050602061420687828801613c7c565b935050604085013567ffffffffffffffff81111561422357600080fd5b61422f87828801613dfd565b95989497509550505050565b60008060006060848603121561425057600080fd5b600061425c8686613dd9565b935050602061426d86828701613c7c565b925050604084013567ffffffffffffffff81111561428a57600080fd5b61412586828701613e46565b6000602082840312156142a857600080fd5b6000612d8c8484613de5565b6000602082840312156142c657600080fd5b6000612d8c8484613df1565b6000602082840312156142e457600080fd5b813567ffffffffffffffff8111156142fb57600080fd5b612d8c84828501613e95565b6000806000806080858703121561431d57600080fd5b843567ffffffffffffffff81111561433457600080fd5b61434087828801613e95565b945050602085013567ffffffffffffffff81111561435d57600080fd5b61436987828801613e95565b935050604085013567ffffffffffffffff81111561438657600080fd5b61439287828801613e46565b925050606085013567ffffffffffffffff8111156143af57600080fd5b6143bb87828801613e46565b91505092959194509250565b6000806000606084860312156143dc57600080fd5b833567ffffffffffffffff8111156143f357600080fd5b6143ff86828701613e95565b935050602061426d86828701613dd9565b6000806000806000806080878903121561442957600080fd5b60006144358989613dd9565b965050602061444689828a01613c7c565b955050604087013567ffffffffffffffff81111561446357600080fd5b61446f89828a01613dfd565b9450945050606087013567ffffffffffffffff81111561448e57600080fd5b61449a89828a01613dfd565b92509250509295509295509295565b6144b281615018565b82525050565b60006144c382615014565b8084526020840193506144d58361500e565b60005b82811015614505576144eb868351614b9d565b6144f48261500e565b6060969096019591506001016144d8565b5093949350505050565b6144b281615031565b6144b281615036565b6144b281615039565b600061453582615014565b80845261454981602086016020860161507b565b614552816150a7565b9093016020019392505050565b6144b281615064565b601281527f4c454e4754485f36355f52455155495245440000000000000000000000000000602082015260400190565b600d81527f494e56414c49445f54414b455200000000000000000000000000000000000000602082015260400190565b601a81527f41535345545f50524f58595f414c52454144595f455849535453000000000000602082015260400190565b602681527f475245415445525f4f525f455155414c5f544f5f33325f4c454e4754485f524560208201527f5155495245440000000000000000000000000000000000000000000000000000604082015260600190565b601581527f5349474e41545552455f554e535550504f525445440000000000000000000000602082015260400190565b601781527f494e56414c49445f4f524445525f5349474e4154555245000000000000000000602082015260400190565b600d81527f494e56414c49445f4d414b455200000000000000000000000000000000000000602082015260400190565b601081527f55494e543235365f4f564552464c4f5700000000000000000000000000000000602082015260400190565b600f81527f494e56414c49445f54585f484153480000000000000000000000000000000000602082015260400190565b601181527f494e56414c49445f5349474e4154555245000000000000000000000000000000602082015260400190565b600e81527f524f554e44494e475f4552524f52000000000000000000000000000000000000602082015260400190565b601081527f4641494c45445f455845435554494f4e00000000000000000000000000000000602082015260400190565b601481527f494e56414c49445f54414b45525f414d4f554e54000000000000000000000000602082015260400190565b601a81527f41535345545f50524f58595f444f45535f4e4f545f4558495354000000000000602082015260400190565b602181527f475245415445525f5448414e5f5a45524f5f4c454e4754485f5245515549524560208201527f4400000000000000000000000000000000000000000000000000000000000000604082015260600190565b601181527f5349474e41545552455f494c4c4547414c000000000000000000000000000000602082015260400190565b601e81527f4c454e4754485f475245415445525f5448414e5f305f52455155495245440000602082015260400190565b601781527f494e56414c49445f4e45575f4f524445525f45504f4348000000000000000000602082015260400190565b601e81527f4c454e4754485f475245415445525f5448414e5f335f52455155495245440000602082015260400190565b601481527f434f4d504c4554455f46494c4c5f4641494c4544000000000000000000000000602082015260400190565b601281527f5245454e5452414e43595f494c4c4547414c0000000000000000000000000000602082015260400190565b601381527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000602082015260400190565b602681527f475245415445525f4f525f455155414c5f544f5f32305f4c454e4754485f524560208201527f5155495245440000000000000000000000000000000000000000000000000000604082015260600190565b601081527f4f524445525f554e46494c4c41424c4500000000000000000000000000000000602082015260400190565b600e81527f494e56414c49445f53454e444552000000000000000000000000000000000000602082015260400190565b601881527f4e454741544956455f5350524541445f52455155495245440000000000000000602082015260400190565b601481527f494e56414c49445f54585f5349474e4154555245000000000000000000000000602082015260400190565b601181527f4c454e4754485f305f5245515549524544000000000000000000000000000000602082015260400190565b80516080830190614b2b8482614518565b506020820151614b3e6020850182614518565b506040820151614b516040850182614518565b506060820151612f196060850182614518565b8051610120830190614b768482614b1a565b506020820151614b896080850182614b1a565b506040820151612f19610100850182614518565b80516060830190614bae8482614bd4565b506020820151614bc16020850182614518565b506040820151612f196040850182614518565b6144b28161505e565b602081016125de82846144a9565b6101008101614bfa828b6144a9565b614c07602083018a6144a9565b614c146040830189614518565b614c216060830188614518565b614c2e6080830187614518565b614c3b60a0830186614518565b81810360c0830152614c4d818561452a565b905081810360e0830152614c61818461452a565b9a9950505050505050505050565b60608101614c7d82866144a9565b8181036020830152614c8f818561452a565b90508181036040830152614ca3818461452a565b95945050505050565b60208082528101610fac81846144b8565b602081016125de828461450f565b602081016125de8284614518565b60608101614ce78286614518565b614cf460208301856144a9565b8181036040830152614ca3818461452a565b60408101614d148285614518565b8181036020830152612d8c818461452a565b60808101614d348287614518565b614d416020830186614bd4565b614d4e6040830185614518565b614ca36060830184614518565b60408101614d698285614521565b610fac60208301846144a9565b60208082528101610fac818461452a565b602081016125de828461455f565b602080825281016125de81614568565b602080825281016125de81614598565b602080825281016125de816145c8565b602080825281016125de816145f8565b602080825281016125de8161464e565b602080825281016125de8161467e565b602080825281016125de816146ae565b602080825281016125de816146de565b602080825281016125de8161470e565b602080825281016125de8161473e565b602080825281016125de8161476e565b602080825281016125de8161479e565b602080825281016125de816147ce565b602080825281016125de816147fe565b602080825281016125de8161482e565b602080825281016125de81614884565b602080825281016125de816148b4565b602080825281016125de816148e4565b602080825281016125de81614914565b602080825281016125de81614944565b602080825281016125de81614974565b602080825281016125de816149a4565b602080825281016125de816149d4565b602080825281016125de81614a2a565b602080825281016125de81614a5a565b602080825281016125de81614a8a565b602080825281016125de81614aba565b602080825281016125de81614aea565b608081016125de8284614b1a565b61012081016125de8284614b64565b606081016125de8284614b9d565b60405181810167ffffffffffffffff81118282101715614f9f57600080fd5b604052919050565b600067ffffffffffffffff821115614fbe57600080fd5b5060209081020190565b600067ffffffffffffffff821115614fdf57600080fd5b506020601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160190565b60200190565b5190565b73ffffffffffffffffffffffffffffffffffffffff1690565b151590565b90565b7fffffffff000000000000000000000000000000000000000000000000000000001690565b60ff1690565b60006125de82615018565b82818337506000910152565b60005b8381101561509657818101518382015260200161507e565b83811115612f195750506000910152565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016905600a265627a7a723058207c5f5af88134aeeede952e9cdda7741efb0001f235c761ec650b76b231ab60266c6578706572696d656e74616cf50037",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x567C CODESIZE SUB DUP1 PUSH3 0x567C DUP4 CODECOPY DUP2 ADD DUP1 PUSH1 0x40 MSTORE PUSH3 0x37 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH3 0x433 JUMP JUMPDEST DUP1 MLOAD DUP2 SWAP1 PUSH3 0x4E SWAP1 PUSH1 0x0 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH3 0x332 JUMP JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH32 0x454950373132446F6D61696E2800000000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x737472696E67206E616D652C0000000000000000000000000000000000000000 PUSH1 0x2D DUP4 ADD MSTORE PUSH32 0x737472696E672076657273696F6E2C0000000000000000000000000000000000 PUSH1 0x39 DUP4 ADD MSTORE PUSH32 0x6164647265737320766572696679696E67436F6E747261637400000000000000 PUSH1 0x48 DUP4 ADD MSTORE PUSH32 0x2900000000000000000000000000000000000000000000000000000000000000 PUSH1 0x61 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x42 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x62 SWAP1 SWAP3 ADD SWAP3 DUP4 SWAP1 MSTORE DUP2 MLOAD SWAP2 SWAP3 SWAP2 DUP3 SWAP2 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH3 0x158 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH3 0x137 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP5 ADD DUP3 SWAP1 SUB DUP3 KECCAK256 DUP3 DUP6 ADD DUP6 MSTORE PUSH1 0xB DUP1 DUP5 MSTORE PUSH32 0x30782050726F746F636F6C000000000000000000000000000000000000000000 SWAP3 DUP5 ADD SWAP3 DUP4 MSTORE SWAP5 MLOAD SWAP1 SWAP7 POP SWAP2 SWAP5 POP SWAP1 SWAP3 DUP4 SWAP3 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH3 0x1E2 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH3 0x1C1 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP5 ADD DUP3 SWAP1 SUB DUP3 KECCAK256 DUP3 DUP6 ADD DUP6 MSTORE PUSH1 0x1 DUP1 DUP5 MSTORE PUSH32 0x3200000000000000000000000000000000000000000000000000000000000000 SWAP3 DUP5 ADD SWAP3 DUP4 MSTORE SWAP5 MLOAD SWAP1 SWAP7 POP SWAP2 SWAP5 POP SWAP1 SWAP3 DUP4 SWAP3 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH3 0x26C JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH3 0x24B JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP4 ADD DUP2 SWAP1 SUB DUP2 KECCAK256 PUSH3 0x2A7 SWAP8 SWAP7 SWAP6 POP SWAP4 POP ADDRESS SWAP3 ADD SWAP1 POP PUSH3 0x48F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH3 0x2E7 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH3 0x2C6 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x0 NOT PUSH1 0x20 SWAP5 SWAP1 SWAP5 SUB PUSH2 0x100 EXP SWAP4 SWAP1 SWAP4 ADD SWAP3 DUP4 AND SWAP3 NOT AND SWAP2 SWAP1 SWAP2 OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP3 ADD DUP3 SWAP1 SUB SWAP1 SWAP2 KECCAK256 PUSH1 0x1 SSTORE POP POP PUSH1 0x2 DUP1 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB NOT AND CALLER OR SWAP1 SSTORE POP PUSH3 0x563 SWAP1 POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH3 0x375 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x3A5 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x3A5 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x3A5 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x388 JUMP JUMPDEST POP PUSH3 0x3B3 SWAP3 SWAP2 POP PUSH3 0x3B7 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH3 0x3D4 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x3B3 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x3BE JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH3 0x3E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x400 PUSH3 0x3FA DUP3 PUSH3 0x4FC JUMP JUMPDEST PUSH3 0x4D5 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP4 ADD DUP6 DUP4 DUP4 ADD GT ISZERO PUSH3 0x41D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x42A DUP4 DUP3 DUP5 PUSH3 0x530 JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x446 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x40 PUSH1 0x2 EXP SUB DUP2 GT ISZERO PUSH3 0x45D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x46B DUP5 DUP3 DUP6 ADD PUSH3 0x3D7 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH3 0x47E DUP2 PUSH3 0x524 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH3 0x47E DUP2 PUSH3 0x3D4 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH3 0x49F DUP3 DUP8 PUSH3 0x484 JUMP JUMPDEST PUSH3 0x4AE PUSH1 0x20 DUP4 ADD DUP7 PUSH3 0x484 JUMP JUMPDEST PUSH3 0x4BD PUSH1 0x40 DUP4 ADD DUP6 PUSH3 0x484 JUMP JUMPDEST PUSH3 0x4CC PUSH1 0x60 DUP4 ADD DUP5 PUSH3 0x473 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH1 0x1 PUSH1 0x40 PUSH1 0x2 EXP SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH3 0x4F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x40 PUSH1 0x2 EXP SUB DUP3 GT ISZERO PUSH3 0x513 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x1F SWAP2 SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x54D JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x533 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH3 0x55D JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x5109 DUP1 PUSH3 0x573 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1C1 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x2624B2D9 DUP2 EQ PUSH2 0x1C6 JUMPI DUP1 PUSH4 0x288CDC91 EQ PUSH2 0x1F1 JUMPI DUP1 PUSH4 0x297BB70B EQ PUSH2 0x211 JUMPI DUP1 PUSH4 0x2AC12622 EQ PUSH2 0x23E JUMPI DUP1 PUSH4 0x3683EF8E EQ PUSH2 0x26B JUMPI DUP1 PUSH4 0x3C28D861 EQ PUSH2 0x28D JUMPI DUP1 PUSH4 0x3E228BAE EQ PUSH2 0x2BA JUMPI DUP1 PUSH4 0x3FD3C997 EQ PUSH2 0x2DA JUMPI DUP1 PUSH4 0x4AC14782 EQ PUSH2 0x307 JUMPI DUP1 PUSH4 0x4D0AE546 EQ PUSH2 0x327 JUMPI DUP1 PUSH4 0x4F9559B1 EQ PUSH2 0x347 JUMPI DUP1 PUSH4 0x50DDE190 EQ PUSH2 0x367 JUMPI DUP1 PUSH4 0x60704108 EQ PUSH2 0x387 JUMPI DUP1 PUSH4 0x642F2EAF EQ PUSH2 0x3B4 JUMPI DUP1 PUSH4 0x64A3BC15 EQ PUSH2 0x3D4 JUMPI DUP1 PUSH4 0x77FCCE68 EQ PUSH2 0x3F4 JUMPI DUP1 PUSH4 0x7B8E3514 EQ PUSH2 0x414 JUMPI DUP1 PUSH4 0x7E1D9808 EQ PUSH2 0x434 JUMPI DUP1 PUSH4 0x7E9D74DC EQ PUSH2 0x454 JUMPI DUP1 PUSH4 0x82C174D0 EQ PUSH2 0x481 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x4A1 JUMPI DUP1 PUSH4 0x93634702 EQ PUSH2 0x4B6 JUMPI DUP1 PUSH4 0xA3E20380 EQ PUSH2 0x4D6 JUMPI DUP1 PUSH4 0xB4BE83D5 EQ PUSH2 0x4F6 JUMPI DUP1 PUSH4 0xBFC8BFCE EQ PUSH2 0x516 JUMPI DUP1 PUSH4 0xC585BB93 EQ PUSH2 0x536 JUMPI DUP1 PUSH4 0xC75E0A81 EQ PUSH2 0x556 JUMPI DUP1 PUSH4 0xD46B02C3 EQ PUSH2 0x583 JUMPI DUP1 PUSH4 0xD9BFA73E EQ PUSH2 0x5A3 JUMPI DUP1 PUSH4 0xDB123B1A EQ PUSH2 0x5C3 JUMPI DUP1 PUSH4 0xDD1C7D18 EQ PUSH2 0x5E5 JUMPI DUP1 PUSH4 0xE306F779 EQ PUSH2 0x605 JUMPI DUP1 PUSH4 0xE5FA431B EQ PUSH2 0x61A JUMPI DUP1 PUSH4 0xEEA086BA EQ PUSH2 0x63A JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x64F JUMPI DUP1 PUSH4 0xFFA1AD74 EQ PUSH2 0x66F JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1DB PUSH2 0x684 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E8 SWAP2 SWAP1 PUSH2 0x4CCB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1DB PUSH2 0x20C CALLDATASIZE PUSH1 0x4 PUSH2 0x4196 JUMP JUMPDEST PUSH2 0x7D8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x21D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x231 PUSH2 0x22C CALLDATASIZE PUSH1 0x4 PUSH2 0x409B JUMP JUMPDEST PUSH2 0x7EA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E8 SWAP2 SWAP1 PUSH2 0x4F55 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x24A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25E PUSH2 0x259 CALLDATASIZE PUSH1 0x4 PUSH2 0x4196 JUMP JUMPDEST PUSH2 0x87A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E8 SWAP2 SWAP1 PUSH2 0x4CBD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x277 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28B PUSH2 0x286 CALLDATASIZE PUSH1 0x4 PUSH2 0x41D3 JUMP JUMPDEST PUSH2 0x88F JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x299 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AD PUSH2 0x2A8 CALLDATASIZE PUSH1 0x4 PUSH2 0x4307 JUMP JUMPDEST PUSH2 0x968 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E8 SWAP2 SWAP1 PUSH2 0x4F63 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x231 PUSH2 0x2D5 CALLDATASIZE PUSH1 0x4 PUSH2 0x43C7 JUMP JUMPDEST PUSH2 0xA54 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2FA PUSH2 0x2F5 CALLDATASIZE PUSH1 0x4 PUSH2 0x4296 JUMP JUMPDEST PUSH2 0xC64 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E8 SWAP2 SWAP1 PUSH2 0x4D87 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x313 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28B PUSH2 0x322 CALLDATASIZE PUSH1 0x4 PUSH2 0x4066 JUMP JUMPDEST PUSH2 0xC8C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x333 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x231 PUSH2 0x342 CALLDATASIZE PUSH1 0x4 PUSH2 0x409B JUMP JUMPDEST PUSH2 0xCC4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x353 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28B PUSH2 0x362 CALLDATASIZE PUSH1 0x4 PUSH2 0x4196 JUMP JUMPDEST PUSH2 0xD4B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x373 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x231 PUSH2 0x382 CALLDATASIZE PUSH1 0x4 PUSH2 0x409B JUMP JUMPDEST PUSH2 0xE6F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x393 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3A7 PUSH2 0x3A2 CALLDATASIZE PUSH1 0x4 PUSH2 0x4296 JUMP JUMPDEST PUSH2 0xEF6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E8 SWAP2 SWAP1 PUSH2 0x4BDD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25E PUSH2 0x3CF CALLDATASIZE PUSH1 0x4 PUSH2 0x4196 JUMP JUMPDEST PUSH2 0xF44 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x231 PUSH2 0x3EF CALLDATASIZE PUSH1 0x4 PUSH2 0x43C7 JUMP JUMPDEST PUSH2 0xF59 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x400 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28B PUSH2 0x40F CALLDATASIZE PUSH1 0x4 PUSH2 0x4036 JUMP JUMPDEST PUSH2 0xFB3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x420 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25E PUSH2 0x42F CALLDATASIZE PUSH1 0x4 PUSH2 0x3FFC JUMP JUMPDEST PUSH2 0x105E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x440 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x231 PUSH2 0x44F CALLDATASIZE PUSH1 0x4 PUSH2 0x412F JUMP JUMPDEST PUSH2 0x107E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x460 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x474 PUSH2 0x46F CALLDATASIZE PUSH1 0x4 PUSH2 0x4066 JUMP JUMPDEST PUSH2 0x114F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E8 SWAP2 SWAP1 PUSH2 0x4CAC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x48D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25E PUSH2 0x49C CALLDATASIZE PUSH1 0x4 PUSH2 0x41B4 JUMP JUMPDEST PUSH2 0x11ED JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3A7 PUSH2 0x120D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25E PUSH2 0x4D1 CALLDATASIZE PUSH1 0x4 PUSH2 0x423B JUMP JUMPDEST PUSH2 0x1229 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x231 PUSH2 0x4F1 CALLDATASIZE PUSH1 0x4 PUSH2 0x412F JUMP JUMPDEST PUSH2 0x1A4F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x502 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x231 PUSH2 0x511 CALLDATASIZE PUSH1 0x4 PUSH2 0x43C7 JUMP JUMPDEST PUSH2 0x1B5F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x522 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28B PUSH2 0x531 CALLDATASIZE PUSH1 0x4 PUSH2 0x4410 JUMP JUMPDEST PUSH2 0x1BE3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x542 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28B PUSH2 0x551 CALLDATASIZE PUSH1 0x4 PUSH2 0x3FDE JUMP JUMPDEST PUSH2 0x1E7C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x562 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x576 PUSH2 0x571 CALLDATASIZE PUSH1 0x4 PUSH2 0x42D2 JUMP JUMPDEST PUSH2 0x20A7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E8 SWAP2 SWAP1 PUSH2 0x4F72 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x58F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28B PUSH2 0x59E CALLDATASIZE PUSH1 0x4 PUSH2 0x42D2 JUMP JUMPDEST PUSH2 0x21A1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1DB PUSH2 0x5BE CALLDATASIZE PUSH1 0x4 PUSH2 0x3FFC JUMP JUMPDEST PUSH2 0x21CC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5D8 PUSH2 0x21E9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E8 SWAP2 SWAP1 PUSH2 0x4D76 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x231 PUSH2 0x600 CALLDATASIZE PUSH1 0x4 PUSH2 0x412F JUMP JUMPDEST PUSH2 0x2295 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x611 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1DB PUSH2 0x235B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x626 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x231 PUSH2 0x635 CALLDATASIZE PUSH1 0x4 PUSH2 0x412F JUMP JUMPDEST PUSH2 0x2361 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x646 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3A7 PUSH2 0x2435 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x65B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28B PUSH2 0x66A CALLDATASIZE PUSH1 0x4 PUSH2 0x3FDE JUMP JUMPDEST PUSH2 0x2451 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x67B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5D8 PUSH2 0x2502 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x454950373132446F6D61696E2800000000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x737472696E67206E616D652C0000000000000000000000000000000000000000 PUSH1 0x2D DUP4 ADD MSTORE PUSH32 0x737472696E672076657273696F6E2C0000000000000000000000000000000000 PUSH1 0x39 DUP4 ADD MSTORE PUSH32 0x6164647265737320766572696679696E67436F6E747261637400000000000000 PUSH1 0x48 DUP4 ADD MSTORE PUSH32 0x2900000000000000000000000000000000000000000000000000000000000000 PUSH1 0x61 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x42 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x62 SWAP1 SWAP3 ADD SWAP3 DUP4 SWAP1 MSTORE DUP2 MLOAD SWAP2 SWAP3 SWAP2 DUP3 SWAP2 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x7A8 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x76B JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 DUP2 JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x7F2 PUSH2 0x3C04 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7FC PUSH2 0x3C04 JUMP JUMPDEST PUSH1 0x0 SWAP2 POP JUMPDEST DUP6 MLOAD DUP3 LT ISZERO PUSH2 0x871 JUMPI PUSH2 0x85A DUP7 DUP4 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x81B JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP7 DUP5 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x833 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP7 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x84B JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x1B5F JUMP JUMPDEST SWAP1 POP PUSH2 0x866 DUP4 DUP3 PUSH2 0x2539 JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x801 JUMP JUMPDEST POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x8CA DUP5 DUP5 DUP5 DUP5 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY POP PUSH2 0x1229 SWAP5 POP POP POP POP POP JUMP JUMPDEST ISZERO ISZERO PUSH2 0x90B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4E25 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND DUP5 MSTORE SWAP2 SWAP1 MSTORE SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x970 PUSH2 0x3C2D JUMP JUMPDEST PUSH2 0x978 PUSH2 0x3C5C JUMP JUMPDEST PUSH2 0x980 PUSH2 0x3C5C JUMP JUMPDEST PUSH2 0x160 DUP1 DUP9 ADD MLOAD PUSH2 0x140 DUP1 DUP10 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP9 ADD MLOAD SWAP1 DUP8 ADD MSTORE PUSH1 0x0 PUSH2 0x9A3 DUP9 PUSH2 0x20A7 JUMP JUMPDEST SWAP3 POP PUSH2 0x9AE DUP8 PUSH2 0x20A7 JUMP JUMPDEST SWAP2 POP PUSH2 0x9B8 PUSH2 0x259B JUMP JUMPDEST SWAP1 POP PUSH2 0x9C4 DUP9 DUP9 PUSH2 0x25E4 JUMP JUMPDEST PUSH2 0x9D8 DUP9 DUP9 DUP6 PUSH1 0x40 ADD MLOAD DUP6 PUSH1 0x40 ADD MLOAD PUSH2 0x2640 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 ADD MLOAD SWAP1 SWAP5 POP PUSH2 0x9F2 SWAP1 DUP10 SWAP1 DUP6 SWAP1 DUP5 SWAP1 DUP1 DUP12 PUSH2 0x2704 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP6 ADD MLOAD ADD MLOAD PUSH2 0xA0B SWAP1 DUP9 SWAP1 DUP5 SWAP1 DUP5 SWAP1 DUP1 DUP11 PUSH2 0x2704 JUMP JUMPDEST PUSH2 0xA24 DUP9 DUP3 DUP6 PUSH1 0x20 ADD MLOAD DUP7 PUSH1 0x40 ADD MLOAD DUP9 PUSH1 0x0 ADD MLOAD PUSH2 0x2921 JUMP JUMPDEST PUSH2 0xA3D DUP8 DUP3 DUP5 PUSH1 0x20 ADD MLOAD DUP6 PUSH1 0x40 ADD MLOAD DUP9 PUSH1 0x20 ADD MLOAD PUSH2 0x2921 JUMP JUMPDEST PUSH2 0xA49 DUP9 DUP9 DUP4 DUP8 PUSH2 0x29CD JUMP JUMPDEST POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0xA5C PUSH2 0x3C04 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xB4BE83D500000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH1 0x60 PUSH1 0x4 DUP4 ADD DUP2 DUP2 MSTORE DUP9 MLOAD PUSH1 0x64 DUP6 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 DUP1 DUP12 ADD MLOAD PUSH1 0x84 DUP8 ADD MSTORE SWAP6 DUP11 ADD MLOAD PUSH1 0xA4 DUP7 ADD MSTORE SWAP2 DUP10 ADD MLOAD PUSH1 0xC4 DUP6 ADD MSTORE PUSH1 0x80 DUP10 ADD MLOAD PUSH1 0xE4 DUP6 ADD MSTORE PUSH1 0xA0 DUP10 ADD MLOAD PUSH2 0x104 DUP6 ADD MSTORE PUSH1 0xC0 DUP10 ADD MLOAD PUSH2 0x124 DUP6 ADD MSTORE PUSH1 0xE0 DUP10 ADD MLOAD PUSH2 0x144 DUP6 ADD MSTORE PUSH2 0x100 DUP10 ADD MLOAD PUSH2 0x164 DUP6 ADD MSTORE PUSH2 0x120 DUP10 ADD MLOAD PUSH2 0x184 DUP6 ADD MSTORE PUSH2 0x140 DUP10 ADD DUP1 MLOAD PUSH2 0x1A4 DUP7 ADD SWAP1 DUP2 MSTORE PUSH2 0x160 DUP12 ADD MLOAD PUSH2 0x1C4 DUP8 ADD MSTORE PUSH2 0x180 SWAP1 MSTORE MLOAD DUP1 MLOAD PUSH2 0x1E4 DUP7 ADD DUP2 SWAP1 MSTORE SWAP4 SWAP6 SWAP2 SWAP4 DUP5 SWAP4 SWAP3 PUSH1 0x24 DUP8 ADD SWAP3 DUP5 SWAP3 PUSH2 0x204 DUP10 ADD SWAP3 SWAP2 DUP3 ADD SWAP2 PUSH1 0x1F DUP3 ADD DIV PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xB5F JUMPI DUP4 MLOAD DUP6 MSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 SWAP1 SWAP4 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0xB41 JUMP JUMPDEST POP POP POP POP DUP2 DUP2 SUB PUSH2 0x160 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP13 ADD MLOAD DUP1 MLOAD DUP1 DUP4 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 SWAP2 DUP3 ADD SWAP2 PUSH1 0x1F DUP3 ADD DIV PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xBA8 JUMPI DUP4 MLOAD DUP6 MSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 SWAP1 SWAP4 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0xB8A JUMP JUMPDEST POP POP POP DUP12 DUP5 MSTORE POP DUP5 DUP2 SUB PUSH1 0x20 SWAP4 DUP5 ADD SWAP1 DUP2 MSTORE DUP11 MLOAD DUP1 DUP4 MSTORE SWAP1 SWAP4 SWAP2 DUP3 ADD SWAP2 DUP12 DUP2 ADD SWAP2 SWAP1 PUSH1 0x1F DUP3 ADD DIV PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xBF0 JUMPI DUP4 MLOAD DUP6 MSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 SWAP1 SWAP4 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0xBD2 JUMP JUMPDEST POP PUSH1 0x80 DUP11 DUP12 DUP7 SUB DUP13 ADDRESS GAS DELEGATECALL DUP1 DUP1 ISZERO PUSH2 0xC0F JUMPI PUSH1 0x1 DUP2 EQ PUSH2 0xC2D JUMPI PUSH2 0xC50 JUMP JUMPDEST PUSH1 0x0 DUP15 MSTORE PUSH1 0x0 PUSH1 0x20 DUP16 ADD MSTORE PUSH1 0x0 PUSH1 0x40 DUP16 ADD MSTORE PUSH1 0x0 PUSH1 0x60 DUP16 ADD MSTORE PUSH2 0xC50 JUMP JUMPDEST DUP12 MLOAD DUP15 MSTORE PUSH1 0x20 DUP13 ADD MLOAD PUSH1 0x20 DUP16 ADD MSTORE PUSH1 0x40 DUP13 ADD MLOAD PUSH1 0x40 DUP16 ADD MSTORE PUSH1 0x60 DUP13 ADD MLOAD PUSH1 0x60 DUP16 ADD MSTORE JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0xCC0 JUMPI PUSH2 0xCB8 DUP3 DUP3 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xCA9 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x21A1 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0xC8F JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0xCCC PUSH2 0x3C04 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCD6 PUSH2 0x3C04 JUMP JUMPDEST PUSH1 0x0 SWAP2 POP JUMPDEST DUP6 MLOAD DUP3 LT ISZERO PUSH2 0x871 JUMPI PUSH2 0xD34 DUP7 DUP4 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xCF5 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP7 DUP5 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xD0D JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP7 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xD25 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0xF59 JUMP JUMPDEST SWAP1 POP PUSH2 0xD40 DUP4 DUP3 PUSH2 0x2539 JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH2 0xCDB JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0xD59 PUSH2 0x259B JUMP JUMPDEST SWAP4 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND CALLER EQ PUSH2 0xD7E JUMPI CALLER PUSH2 0xD81 JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP6 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD SWAP1 SWAP4 POP PUSH1 0x1 DUP7 ADD SWAP3 POP SWAP1 POP DUP1 DUP3 GT PUSH2 0xDF8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4EA5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP9 AND DUP1 DUP5 MSTORE SWAP5 SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE MLOAD PUSH32 0x82AF639571738F4EBD4268FB0363D8957EBE1BBB9E78DBA5EBD69EED39B154F0 SWAP1 PUSH2 0xE60 SWAP1 DUP7 SWAP1 PUSH2 0x4CCB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP JUMP JUMPDEST PUSH2 0xE77 PUSH2 0x3C04 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE81 PUSH2 0x3C04 JUMP JUMPDEST PUSH1 0x0 SWAP2 POP JUMPDEST DUP6 MLOAD DUP3 LT ISZERO PUSH2 0x871 JUMPI PUSH2 0xEDF DUP7 DUP4 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xEA0 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP7 DUP5 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xEB8 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP7 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xED0 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0xA54 JUMP JUMPDEST SWAP1 POP PUSH2 0xEEB DUP4 DUP3 PUSH2 0x2539 JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH2 0xE86 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0xF61 PUSH2 0x3C04 JUMP JUMPDEST PUSH2 0xF6C DUP5 DUP5 DUP5 PUSH2 0x1B5F JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD SWAP1 SWAP2 POP DUP4 EQ PUSH2 0xFAC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4EC5 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFBD PUSH2 0x259B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP10 AND DUP1 DUP5 MSTORE SWAP5 SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP8 ISZERO ISZERO OR SWAP1 SSTORE MLOAD SWAP3 SWAP4 POP SWAP1 SWAP2 PUSH32 0xA8656E308026EEABCE8F0BC18048433252318AB80AC79DA0B3D3D8697DFBA891 SWAP1 PUSH2 0x1051 SWAP1 DUP7 SWAP1 PUSH2 0x4CBD JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x1086 PUSH2 0x3C04 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 PUSH2 0x1093 PUSH2 0x3C04 JUMP JUMPDEST DUP8 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x10A2 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x160 ADD MLOAD SWAP4 POP PUSH1 0x0 SWAP3 POP JUMPDEST DUP8 MLOAD DUP4 LT ISZERO PUSH2 0x1144 JUMPI DUP4 DUP9 DUP5 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x10D0 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x160 ADD DUP2 SWAP1 MSTORE POP PUSH2 0x10F0 DUP8 DUP7 PUSH1 0x20 ADD MLOAD PUSH2 0x2BAD JUMP JUMPDEST SWAP2 POP PUSH2 0x111C DUP9 DUP5 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1103 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP4 DUP9 DUP7 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x84B JUMPI INVALID JUMPDEST SWAP1 POP PUSH2 0x1128 DUP6 DUP3 PUSH2 0x2539 JUMP JUMPDEST DUP7 DUP6 PUSH1 0x20 ADD MLOAD EQ ISZERO PUSH2 0x1139 JUMPI PUSH2 0x1144 JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 PUSH2 0x10B8 JUMP JUMPDEST POP POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP5 MLOAD SWAP3 POP DUP3 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1195 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH2 0x1182 PUSH2 0x3C5C JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x117A JUMPI SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 SWAP1 POP JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x11E5 JUMPI PUSH2 0x11C5 DUP6 DUP3 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x11B6 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x20A7 JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x11D3 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x119D JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP10 MLOAD GT ISZERO ISZERO PUSH2 0x1272 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4E95 JUMP JUMPDEST PUSH2 0x127B DUP10 PUSH2 0x2BEF JUMP JUMPDEST PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DIV SWAP7 POP PUSH1 0x9 PUSH1 0xFF DUP9 AND LT PUSH2 0x12DD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4DD5 JUMP JUMPDEST DUP7 PUSH1 0xFF AND PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x12EC JUMPI INVALID JUMPDEST SWAP6 POP PUSH1 0x0 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x12FC JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x1334 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4E85 JUMP JUMPDEST PUSH1 0x1 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x1342 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x138A JUMPI DUP9 MLOAD ISZERO PUSH2 0x1381 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4F45 JUMP JUMPDEST PUSH1 0x0 SWAP8 POP PUSH2 0x1A41 JUMP JUMPDEST PUSH1 0x2 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x1398 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x14D3 JUMPI DUP9 MLOAD PUSH1 0x41 EQ PUSH2 0x13D9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4D95 JUMP JUMPDEST DUP9 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x13E8 JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV DUP2 MUL DIV SWAP5 POP PUSH2 0x1428 DUP10 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x2CB3 AND JUMP JUMPDEST SWAP4 POP PUSH2 0x143B DUP10 PUSH1 0x21 PUSH4 0xFFFFFFFF PUSH2 0x2CB3 AND JUMP JUMPDEST SWAP3 POP PUSH1 0x1 DUP12 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH2 0x1460 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4D26 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 PUSH1 0x0 DUP7 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1484 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 DUP2 AND SWAP1 DUP3 AND EQ SWAP10 POP SWAP3 POP PUSH2 0x1A41 SWAP1 POP JUMP JUMPDEST PUSH1 0x3 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x14E1 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x1687 JUMPI DUP9 MLOAD PUSH1 0x41 EQ PUSH2 0x1522 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4D95 JUMP JUMPDEST DUP9 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1531 JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV DUP2 MUL DIV SWAP5 POP PUSH2 0x1571 DUP10 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x2CB3 AND JUMP JUMPDEST SWAP4 POP PUSH2 0x1584 DUP10 PUSH1 0x21 PUSH4 0xFFFFFFFF PUSH2 0x2CB3 AND JUMP JUMPDEST SWAP3 POP PUSH1 0x1 DUP12 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP1 PUSH32 0x19457468657265756D205369676E6564204D6573736167653A0A333200000000 DUP2 MSTORE POP PUSH1 0x1C ADD DUP3 PUSH1 0x0 NOT AND PUSH1 0x0 NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1625 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x15E8 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP5 ADD DUP3 SWAP1 SUB DUP3 KECCAK256 PUSH1 0x0 DUP4 MSTORE SWAP2 ADD SWAP3 DUP4 SWAP1 MSTORE PUSH2 0x1460 SWAP5 POP SWAP3 POP DUP10 SWAP2 DUP10 SWAP2 POP DUP9 SWAP1 PUSH2 0x4D26 JUMP JUMPDEST PUSH1 0x4 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x1695 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x16F4 JUMPI DUP9 MLOAD ISZERO PUSH2 0x16D4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4F45 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND CALLER EQ SWAP8 POP PUSH2 0x1A41 JUMP JUMPDEST PUSH1 0x5 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x1702 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x17B5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x1626BA7E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND SWAP1 PUSH4 0x1626BA7E SWAP1 PUSH2 0x175C SWAP1 DUP15 SWAP1 DUP14 SWAP1 PUSH1 0x4 ADD PUSH2 0x4D06 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1776 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x178A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0x17AE SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x4178 JUMP JUMPDEST SWAP8 POP PUSH2 0x1A41 JUMP JUMPDEST PUSH1 0x6 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x17C3 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x1870 JUMPI PUSH2 0x17D2 DUP10 PUSH2 0x2CFE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP13 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP6 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x181A JUMPI PUSH1 0x0 SWAP8 POP PUSH2 0x1A41 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x9363470200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x93634702 SWAP1 PUSH2 0x175C SWAP1 DUP15 SWAP1 DUP15 SWAP1 DUP15 SWAP1 PUSH1 0x4 ADD PUSH2 0x4CD9 JUMP JUMPDEST PUSH1 0x7 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x187E JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x18BE JUMPI PUSH1 0x0 DUP12 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP15 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP8 POP PUSH2 0x1A41 JUMP JUMPDEST PUSH1 0x8 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x18CC JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x1A0F JUMPI DUP9 MLOAD PUSH1 0x41 EQ PUSH2 0x190D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4D95 JUMP JUMPDEST DUP9 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x191C JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV DUP2 MUL DIV SWAP5 POP PUSH2 0x195C DUP10 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x2CB3 AND JUMP JUMPDEST SWAP4 POP PUSH2 0x196F DUP10 PUSH1 0x21 PUSH4 0xFFFFFFFF PUSH2 0x2CB3 AND JUMP JUMPDEST SWAP3 POP PUSH1 0x1 DUP12 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP1 PUSH32 0x19457468657265756D205369676E6564204D6573736167653A0A200000000000 DUP2 MSTORE POP PUSH1 0x1B ADD DUP3 PUSH1 0x0 NOT AND PUSH1 0x0 NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x20 DUP4 LT PUSH2 0x1625 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x15E8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4DD5 JUMP JUMPDEST POP POP POP POP POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x1A57 PUSH2 0x3C04 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1A66 PUSH2 0x3C04 JUMP JUMPDEST DUP9 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1A75 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x140 ADD MLOAD SWAP5 POP PUSH1 0x0 SWAP4 POP JUMPDEST DUP9 MLOAD DUP5 LT ISZERO PUSH2 0x1B53 JUMPI DUP5 DUP10 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1AA3 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MLOAD PUSH2 0x140 ADD MSTORE DUP6 MLOAD PUSH2 0x1ABF SWAP1 DUP10 SWAP1 PUSH2 0x2BAD JUMP JUMPDEST SWAP3 POP PUSH2 0x1B02 DUP10 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1AD2 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0xA0 ADD MLOAD DUP11 DUP7 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1AEE JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0x80 ADD MLOAD DUP6 PUSH2 0x2D77 JUMP JUMPDEST SWAP2 POP PUSH2 0x1B2E DUP10 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1B15 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP4 DUP10 DUP8 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xED0 JUMPI INVALID JUMPDEST SWAP1 POP PUSH2 0x1B3A DUP7 DUP3 PUSH2 0x2539 JUMP JUMPDEST DUP6 MLOAD DUP9 EQ ISZERO PUSH2 0x1B48 JUMPI PUSH2 0x1B53 JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP4 ADD SWAP3 PUSH2 0x1A8B JUMP JUMPDEST POP POP POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x1B67 PUSH2 0x3C04 JUMP JUMPDEST PUSH2 0x1B6F PUSH2 0x3C5C JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1B7D DUP9 PUSH2 0x20A7 JUMP JUMPDEST SWAP4 POP PUSH2 0x1B87 PUSH2 0x259B JUMP JUMPDEST SWAP3 POP PUSH2 0x1B9B DUP9 PUSH1 0xA0 ADD MLOAD DUP6 PUSH1 0x40 ADD MLOAD PUSH2 0x2BAD JUMP JUMPDEST SWAP2 POP PUSH2 0x1BA7 DUP8 DUP4 PUSH2 0x2D94 JUMP JUMPDEST SWAP1 POP PUSH2 0x1BB7 DUP9 DUP6 DUP6 DUP11 DUP6 DUP12 PUSH2 0x2704 JUMP JUMPDEST PUSH2 0x1BC1 DUP9 DUP3 PUSH2 0x2DAA JUMP JUMPDEST SWAP5 POP PUSH2 0x1BD8 DUP9 DUP5 DUP7 PUSH1 0x20 ADD MLOAD DUP8 PUSH1 0x40 ADD MLOAD DUP10 PUSH2 0x2921 JUMP JUMPDEST PUSH2 0x1144 DUP9 DUP5 DUP8 PUSH2 0x2E0A JUMP JUMPDEST PUSH1 0x9 SLOAD PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x1C36 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4ED5 JUMP JUMPDEST PUSH2 0x1C79 PUSH2 0x1C74 DUP9 DUP9 DUP9 DUP9 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY POP PUSH2 0x2F1F SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x3160 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF AND ISZERO PUSH2 0x1CC5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4E15 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND CALLER EQ PUSH2 0x1D96 JUMPI PUSH2 0x1D1D DUP2 DUP8 DUP6 DUP6 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY POP PUSH2 0x1229 SWAP5 POP POP POP POP POP JUMP JUMPDEST ISZERO ISZERO PUSH2 0x1D55 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4F35 JUMP JUMPDEST PUSH1 0x9 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND OR SWAP1 SSTORE JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD ADDRESS SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP1 DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY DUP3 ADD SWAP2 POP POP SWAP3 POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP ISZERO ISZERO PUSH2 0x1E2D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4E45 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND CALLER EQ PUSH2 0x1E73 JUMPI PUSH1 0x9 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x1ED4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4EE5 JUMP JUMPDEST DUP4 SWAP3 POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xAE25532E PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH29 0x100000000000000000000000000000000000000000000000000000000 MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1F3B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1F4F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0x1F73 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x42B4 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP3 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP1 ISZERO PUSH2 0x1FF8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4DB5 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND OR SWAP1 SSTORE MLOAD PUSH32 0xD2C6B762299C609BDB96520B58A49BFB80186934D4F71A86A367571A15C03194 SWAP1 PUSH2 0x2099 SWAP1 DUP5 SWAP1 DUP8 SWAP1 PUSH2 0x4D5B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP JUMP JUMPDEST PUSH2 0x20AF PUSH2 0x3C5C JUMP JUMPDEST PUSH2 0x20B8 DUP3 PUSH2 0x32E0 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x3 SWAP1 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x80 DUP3 ADD MLOAD ISZERO ISZERO PUSH2 0x20EC JUMPI PUSH1 0x1 JUMPDEST PUSH1 0xFF AND DUP2 MSTORE PUSH2 0xF3F JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MLOAD ISZERO ISZERO PUSH2 0x20FE JUMPI PUSH1 0x2 PUSH2 0x20E2 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MLOAD PUSH1 0x40 DUP3 ADD MLOAD LT PUSH2 0x2114 JUMPI PUSH1 0x5 PUSH2 0x20E2 JUMP JUMPDEST PUSH2 0x100 DUP3 ADD MLOAD TIMESTAMP LT PUSH2 0x2127 JUMPI PUSH1 0x4 PUSH2 0x20E2 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x214B JUMPI PUSH1 0x6 PUSH2 0x20E2 JUMP JUMPDEST PUSH2 0x120 DUP3 ADD MLOAD DUP3 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x60 DUP9 ADD MLOAD SWAP1 SWAP5 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD GT ISZERO PUSH2 0x2198 JUMPI PUSH1 0x6 PUSH2 0x20E2 JUMP JUMPDEST PUSH1 0x3 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x21A9 PUSH2 0x3C5C JUMP JUMPDEST PUSH2 0x21B2 DUP3 PUSH2 0x20A7 JUMP JUMPDEST SWAP1 POP PUSH2 0x21BE DUP3 DUP3 PUSH2 0x32EE JUMP JUMPDEST PUSH2 0xCC0 DUP3 DUP3 PUSH1 0x20 ADD MLOAD PUSH2 0x3405 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x228D JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2262 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x228D JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x2270 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST PUSH2 0x229D PUSH2 0x3C04 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 PUSH2 0x22AA PUSH2 0x3C04 JUMP JUMPDEST DUP8 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x22B9 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x160 ADD MLOAD SWAP4 POP PUSH1 0x0 SWAP3 POP JUMPDEST DUP8 MLOAD DUP4 LT ISZERO PUSH2 0x1144 JUMPI DUP4 DUP9 DUP5 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x22E7 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x160 ADD DUP2 SWAP1 MSTORE POP PUSH2 0x2307 DUP8 DUP7 PUSH1 0x20 ADD MLOAD PUSH2 0x2BAD JUMP JUMPDEST SWAP2 POP PUSH2 0x2333 DUP9 DUP5 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x231A JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP4 DUP9 DUP7 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xED0 JUMPI INVALID JUMPDEST SWAP1 POP PUSH2 0x233F DUP6 DUP3 PUSH2 0x2539 JUMP JUMPDEST DUP7 DUP6 PUSH1 0x20 ADD MLOAD EQ ISZERO PUSH2 0x2350 JUMPI PUSH2 0x1144 JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 PUSH2 0x22CF JUMP JUMPDEST PUSH1 0x1 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2369 PUSH2 0x3C04 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x2378 PUSH2 0x3C04 JUMP JUMPDEST DUP9 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x2387 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x140 ADD MLOAD SWAP5 POP PUSH1 0x0 SWAP4 POP JUMPDEST DUP9 MLOAD DUP5 LT ISZERO PUSH2 0x1B53 JUMPI DUP5 DUP10 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x23B5 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MLOAD PUSH2 0x140 ADD MSTORE DUP6 MLOAD PUSH2 0x23D1 SWAP1 DUP10 SWAP1 PUSH2 0x2BAD JUMP JUMPDEST SWAP3 POP PUSH2 0x23E4 DUP10 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1AD2 JUMPI INVALID JUMPDEST SWAP2 POP PUSH2 0x2410 DUP10 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x23F7 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP4 DUP10 DUP8 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x84B JUMPI INVALID JUMPDEST SWAP1 POP PUSH2 0x241C DUP7 DUP3 PUSH2 0x2539 JUMP JUMPDEST DUP6 MLOAD DUP9 EQ ISZERO PUSH2 0x242A JUMPI PUSH2 0x1B53 JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP4 ADD SWAP3 PUSH2 0x239D JUMP JUMPDEST PUSH1 0x9 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x24A2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4EE5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0x24FF JUMPI PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND OR SWAP1 SSTORE JUMPDEST POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0xB DUP2 MSTORE PUSH32 0x322E302E312D616C706861000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD PUSH2 0x2547 SWAP2 SWAP1 PUSH2 0x34AC JUMP JUMPDEST DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MLOAD PUSH2 0x255D SWAP2 SWAP1 PUSH2 0x34AC JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MLOAD PUSH2 0x2576 SWAP2 SWAP1 PUSH2 0x34AC JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MLOAD PUSH2 0x258F SWAP2 SWAP1 PUSH2 0x34AC JUMP JUMPDEST PUSH1 0x60 SWAP1 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x9 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x25DC JUMPI PUSH1 0x9 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x25DE JUMP JUMPDEST CALLER JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x25F6 DUP3 PUSH1 0xA0 ADD MLOAD DUP3 PUSH1 0xA0 ADD MLOAD PUSH2 0x34F6 JUMP JUMPDEST PUSH2 0x2608 DUP4 PUSH1 0x80 ADD MLOAD DUP4 PUSH1 0x80 ADD MLOAD PUSH2 0x34F6 JUMP JUMPDEST LT ISZERO PUSH2 0xCC0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4F25 JUMP JUMPDEST PUSH2 0x2648 PUSH2 0x3C2D JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x265C DUP10 PUSH1 0xA0 ADD MLOAD DUP9 PUSH2 0x2BAD JUMP JUMPDEST SWAP4 POP PUSH2 0x266C DUP9 PUSH1 0xA0 ADD MLOAD DUP8 PUSH2 0x2BAD JUMP JUMPDEST SWAP3 POP PUSH2 0x267C DUP4 DUP10 PUSH1 0x80 ADD MLOAD PUSH2 0x34F6 JUMP JUMPDEST PUSH2 0x268A DUP6 DUP11 PUSH1 0xA0 ADD MLOAD PUSH2 0x34F6 JUMP JUMPDEST GT PUSH2 0x26AC JUMPI DUP4 SWAP2 POP PUSH2 0x26A5 DUP9 PUSH1 0xA0 ADD MLOAD DUP10 PUSH1 0x80 ADD MLOAD DUP5 PUSH2 0x2D77 JUMP JUMPDEST SWAP1 POP PUSH2 0x26C5 JUMP JUMPDEST DUP3 SWAP1 POP PUSH2 0x26C2 DUP9 PUSH1 0x80 ADD MLOAD DUP10 PUSH1 0xA0 ADD MLOAD DUP4 PUSH2 0x2D77 JUMP JUMPDEST SWAP2 POP JUMPDEST PUSH2 0x26CF DUP10 DUP4 PUSH2 0x2DAA JUMP JUMPDEST DUP6 MSTORE PUSH2 0x26DB DUP9 DUP3 PUSH2 0x2DAA JUMP JUMPDEST PUSH1 0x20 DUP1 DUP8 ADD DUP3 SWAP1 MSTORE DUP7 MLOAD MLOAD SWAP2 ADD MLOAD PUSH2 0x26F3 SWAP2 SWAP1 PUSH2 0x2BAD JUMP JUMPDEST PUSH1 0x40 DUP7 ADD MSTORE POP POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP5 MLOAD PUSH1 0xFF AND PUSH1 0x3 EQ PUSH2 0x2742 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4F05 JUMP JUMPDEST DUP3 ISZERO ISZERO PUSH2 0x277B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4E55 JUMP JUMPDEST PUSH1 0x60 DUP7 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x27EE JUMPI PUSH1 0x60 DUP7 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x27EE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4F15 JUMP JUMPDEST PUSH1 0x20 DUP7 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x2879 JUMPI DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH1 0x20 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO ISZERO PUSH2 0x2879 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4DA5 JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MLOAD ISZERO ISZERO PUSH2 0x28CF JUMPI PUSH2 0x2897 DUP6 PUSH1 0x20 ADD MLOAD DUP8 PUSH1 0x0 ADD MLOAD DUP4 PUSH2 0x1229 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x28CF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4DE5 JUMP JUMPDEST PUSH2 0x28E2 DUP3 DUP8 PUSH1 0xA0 ADD MLOAD DUP9 PUSH1 0x80 ADD MLOAD PUSH2 0x3551 JUMP JUMPDEST ISZERO PUSH2 0x2919 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4E35 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x292F DUP3 DUP3 PUSH1 0x20 ADD MLOAD PUSH2 0x34AC JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP3 SWAP1 SWAP3 SSTORE DUP7 DUP2 ADD MLOAD DUP8 MLOAD DUP5 MLOAD SWAP4 DUP6 ADD MLOAD DUP6 DUP5 ADD MLOAD PUSH1 0x60 DUP8 ADD MLOAD PUSH2 0x140 DUP13 ADD MLOAD PUSH2 0x160 DUP14 ADD MLOAD SWAP7 MLOAD DUP12 SWAP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP8 DUP9 AND SWAP9 SWAP8 SWAP1 SWAP7 AND SWAP7 PUSH32 0xBCC4C97732E47D9946F229EDB95F5B6323F601300E4690DE719993F3C371129 SWAP7 PUSH2 0x29BE SWAP7 DUP16 SWAP7 CALLER SWAP7 SWAP3 SWAP6 SWAP2 SWAP5 SWAP1 SWAP4 SWAP1 PUSH2 0x4BEB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x2A77 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2A4C JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x2A77 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x2A5A JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP PUSH2 0x2A9F DUP6 PUSH2 0x140 ADD MLOAD DUP7 PUSH1 0x0 ADD MLOAD DUP7 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH1 0x20 ADD MLOAD PUSH2 0x35A2 JUMP JUMPDEST PUSH2 0x140 DUP5 ADD MLOAD DUP5 MLOAD DUP7 MLOAD DUP5 MLOAD PUSH1 0x20 ADD MLOAD PUSH2 0x2ABB SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x35A2 JUMP JUMPDEST PUSH2 0x2AD4 DUP6 PUSH2 0x140 ADD MLOAD DUP7 PUSH1 0x0 ADD MLOAD DUP6 DUP6 PUSH1 0x40 ADD MLOAD PUSH2 0x35A2 JUMP JUMPDEST PUSH2 0x2AF0 DUP2 DUP7 PUSH1 0x0 ADD MLOAD DUP8 PUSH1 0x40 ADD MLOAD DUP6 PUSH1 0x0 ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH2 0x35A2 JUMP JUMPDEST PUSH2 0x2B0C DUP2 DUP6 PUSH1 0x0 ADD MLOAD DUP7 PUSH1 0x40 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH2 0x35A2 JUMP JUMPDEST DUP4 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x2B76 JUMPI PUSH2 0x2B71 DUP2 DUP5 DUP8 PUSH1 0x40 ADD MLOAD PUSH2 0x2B6C DUP7 PUSH1 0x0 ADD MLOAD PUSH1 0x60 ADD MLOAD DUP8 PUSH1 0x20 ADD MLOAD PUSH1 0x60 ADD MLOAD PUSH2 0x34AC JUMP JUMPDEST PUSH2 0x35A2 JUMP JUMPDEST PUSH2 0x2BA6 JUMP JUMPDEST PUSH2 0x2B8E DUP2 DUP5 DUP8 PUSH1 0x40 ADD MLOAD DUP6 PUSH1 0x0 ADD MLOAD PUSH1 0x60 ADD MLOAD PUSH2 0x35A2 JUMP JUMPDEST PUSH2 0x2BA6 DUP2 DUP5 DUP7 PUSH1 0x40 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH1 0x60 ADD MLOAD PUSH2 0x35A2 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 GT ISZERO PUSH2 0x2BE9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4E05 JUMP JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 MLOAD GT ISZERO ISZERO PUSH2 0x2C2D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4E75 JUMP JUMPDEST DUP2 MLOAD DUP3 SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0x2C5D JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD DUP3 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP3 MSTORE POP PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x20 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x2CF5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4DC5 JUMP JUMPDEST POP ADD PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x14 DUP3 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x2D3E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4EF5 JUMP JUMPDEST PUSH2 0x2D4C DUP3 PUSH1 0x14 DUP5 MLOAD SUB PUSH2 0x3733 JUMP JUMPDEST DUP3 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC ADD SWAP1 SWAP3 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2D8C PUSH2 0x2D86 DUP6 DUP5 PUSH2 0x34F6 JUMP JUMPDEST DUP5 PUSH2 0x3794 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x2DA3 JUMPI DUP2 PUSH2 0xFAC JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x2DB2 PUSH2 0x3C04 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0x80 DUP5 ADD MLOAD PUSH2 0x2DCE SWAP2 DUP5 SWAP2 PUSH2 0x2D77 JUMP JUMPDEST DUP2 MSTORE PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0xC0 DUP5 ADD MLOAD PUSH2 0x2DE5 SWAP2 DUP5 SWAP2 PUSH2 0x2D77 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0xE0 DUP5 ADD MLOAD PUSH2 0x2DFF SWAP2 DUP5 SWAP2 PUSH2 0x2D77 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x2EB4 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2E89 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x2EB4 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x2E97 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP PUSH2 0x2ED4 DUP5 PUSH2 0x140 ADD MLOAD DUP6 PUSH1 0x0 ADD MLOAD DUP6 DUP6 PUSH1 0x0 ADD MLOAD PUSH2 0x35A2 JUMP JUMPDEST PUSH2 0x2EED DUP5 PUSH2 0x160 ADD MLOAD DUP5 DUP7 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x35A2 JUMP JUMPDEST PUSH2 0x2F05 DUP2 DUP6 PUSH1 0x0 ADD MLOAD DUP7 PUSH1 0x40 ADD MLOAD DUP6 PUSH1 0x40 ADD MLOAD PUSH2 0x35A2 JUMP JUMPDEST PUSH2 0x2F19 DUP2 DUP5 DUP7 PUSH1 0x40 ADD MLOAD DUP6 PUSH1 0x60 ADD MLOAD PUSH2 0x35A2 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x5A65726F45785472616E73616374696F6E280000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x75696E743235362073616C742C00000000000000000000000000000000000000 PUSH1 0x32 DUP4 ADD MSTORE PUSH32 0x61646472657373207369676E6572416464726573732C00000000000000000000 PUSH1 0x3F DUP4 ADD MSTORE PUSH32 0x6279746573206461746100000000000000000000000000000000000000000000 PUSH1 0x55 DUP4 ADD MSTORE PUSH32 0x2900000000000000000000000000000000000000000000000000000000000000 PUSH1 0x5F DUP4 ADD MSTORE DUP3 MLOAD DUP1 DUP4 SUB DUP5 ADD DUP2 MSTORE PUSH1 0x60 SWAP1 SWAP3 ADD SWAP3 DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH1 0x0 SWAP4 DUP5 SWAP4 DUP5 SWAP4 SWAP1 SWAP3 DUP3 SWAP2 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x3048 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x300B JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP4 ADD DUP2 SWAP1 SUB DUP2 KECCAK256 DUP10 MLOAD SWAP1 SWAP8 POP DUP10 SWAP6 POP SWAP1 SWAP4 POP DUP4 SWAP3 DUP6 ADD SWAP2 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x30DE JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x30A1 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP5 ADD DUP3 SWAP1 SUB DUP3 KECCAK256 SWAP8 DUP3 MSTORE DUP2 ADD SWAP11 SWAP1 SWAP11 MSTORE POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP8 SWAP1 SWAP8 AND SWAP7 DUP9 ADD SWAP7 SWAP1 SWAP7 MSTORE POP POP PUSH1 0x60 DUP6 ADD MSTORE POP POP PUSH1 0x80 SWAP1 SWAP2 KECCAK256 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x1 SLOAD DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP5 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x31EC JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x31AF JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP5 DUP6 MSTORE POP DUP4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP5 SUB DUP4 ADD DUP2 MSTORE SWAP3 DUP2 ADD SWAP1 DUP2 SWAP1 MSTORE DUP3 MLOAD SWAP3 SWAP4 POP SWAP2 DUP3 SWAP2 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x3290 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x3253 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 SWAP1 SWAP4 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP2 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP3 ADD DUP3 SWAP1 SUB SWAP1 SWAP2 KECCAK256 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x25DE PUSH2 0x1C74 DUP4 PUSH2 0x37AB JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND PUSH1 0x3 EQ PUSH2 0x332F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4F05 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x33A2 JUMPI PUSH1 0x60 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x33A2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4F15 JUMP JUMPDEST PUSH2 0x33AA PUSH2 0x259B JUMP JUMPDEST DUP4 MLOAD SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND SWAP2 AND EQ PUSH2 0x3400 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4DF5 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 OR SWAP1 SSTORE DUP3 DUP2 ADD MLOAD DUP4 MLOAD PUSH2 0x140 DUP6 ADD MLOAD PUSH2 0x160 DUP7 ADD MLOAD SWAP4 MLOAD DUP6 SWAP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND SWAP5 SWAP4 SWAP1 SWAP4 AND SWAP3 PUSH32 0xDC47B3613D9FE400085F6DBDC99453462279057E6207385042827ED6B1A62CF7 SWAP3 PUSH2 0x34A0 SWAP3 CALLER SWAP3 SWAP1 PUSH2 0x4C6F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x34EB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4E05 JUMP JUMPDEST DUP1 SWAP2 POP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 ISZERO ISZERO PUSH2 0x3509 JUMPI PUSH1 0x0 SWAP2 POP PUSH2 0x34EF JUMP JUMPDEST POP DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 ISZERO ISZERO PUSH2 0x3519 JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x34EB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4E05 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP5 DUP1 ISZERO ISZERO PUSH2 0x3560 JUMPI INVALID JUMPDEST DUP7 DUP6 MULMOD SWAP2 POP DUP2 ISZERO ISZERO PUSH2 0x3575 JUMPI PUSH1 0x0 SWAP3 POP PUSH2 0x871 JUMP JUMPDEST PUSH2 0x3594 PUSH2 0x3585 DUP4 PUSH3 0xF4240 PUSH2 0x34F6 JUMP JUMPDEST PUSH2 0x358F DUP9 DUP8 PUSH2 0x34F6 JUMP JUMPDEST PUSH2 0x3794 JUMP JUMPDEST PUSH2 0x3E8 LT SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 GT ISZERO PUSH2 0x2919 JUMPI DUP6 MLOAD PUSH1 0x3 LT PUSH2 0x35E9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4EB5 JUMP JUMPDEST POP POP PUSH1 0x20 DUP5 DUP2 ADD MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA SWAP1 SWAP3 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO ISZERO PUSH2 0x3672 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4E65 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH7 0xFFFFFFFFFFFE0 PUSH1 0x3F DUP9 MLOAD ADD AND DUP1 PUSH1 0x84 ADD DUP3 ADD PUSH32 0xA85E59E400000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x80 PUSH1 0x4 DUP5 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x24 DUP5 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x44 DUP5 ADD MSTORE DUP6 PUSH1 0x64 DUP5 ADD MSTORE PUSH1 0x84 DUP4 ADD JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x370E JUMPI DUP10 MLOAD DUP2 MSTORE PUSH1 0x20 SWAP10 DUP11 ADD SWAP10 ADD PUSH2 0x36F6 JUMP JUMPDEST PUSH2 0x200 DUP5 DUP6 DUP5 SUB DUP7 PUSH1 0x0 DUP10 GAS CALL DUP1 ISZERO ISZERO PUSH2 0x3726 JUMPI RETURNDATASIZE DUP6 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x14 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x3775 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4EF5 JUMP JUMPDEST POP ADD PUSH1 0x14 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 DUP5 DUP2 ISZERO ISZERO PUSH2 0x37A2 JUMPI INVALID JUMPDEST DIV SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x4F72646572280000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x61646472657373206D616B6572416464726573732C0000000000000000000000 PUSH1 0x26 DUP4 ADD MSTORE PUSH32 0x616464726573732074616B6572416464726573732C0000000000000000000000 PUSH1 0x3B DUP4 ADD MSTORE PUSH32 0x6164647265737320666565526563697069656E74416464726573732C00000000 PUSH1 0x50 DUP4 ADD MSTORE PUSH32 0x616464726573732073656E646572416464726573732C00000000000000000000 PUSH1 0x6C DUP4 ADD MSTORE PUSH32 0x75696E74323536206D616B65724173736574416D6F756E742C00000000000000 PUSH1 0x82 DUP4 ADD MSTORE PUSH32 0x75696E743235362074616B65724173736574416D6F756E742C00000000000000 PUSH1 0x9B DUP4 ADD MSTORE PUSH32 0x75696E74323536206D616B65724665652C000000000000000000000000000000 PUSH1 0xB4 DUP4 ADD MSTORE PUSH32 0x75696E743235362074616B65724665652C000000000000000000000000000000 PUSH1 0xC5 DUP4 ADD MSTORE PUSH32 0x75696E743235362065787069726174696F6E54696D655365636F6E64732C0000 PUSH1 0xD6 DUP4 ADD MSTORE PUSH32 0x75696E743235362073616C742C00000000000000000000000000000000000000 PUSH1 0xF4 DUP4 ADD MSTORE PUSH32 0x6279746573206D616B65724173736574446174612C0000000000000000000000 PUSH2 0x101 DUP4 ADD MSTORE PUSH32 0x62797465732074616B6572417373657444617461000000000000000000000000 PUSH2 0x116 DUP4 ADD MSTORE PUSH32 0x2900000000000000000000000000000000000000000000000000000000000000 PUSH2 0x12A DUP4 ADD MSTORE DUP3 MLOAD PUSH2 0x10B DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH2 0x12B SWAP1 SWAP3 ADD SWAP3 DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH1 0x0 SWAP4 DUP5 SWAP4 DUP5 SWAP4 DUP5 SWAP4 SWAP2 SWAP3 SWAP2 DUP3 SWAP2 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x3A33 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x39F6 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP4 ADD DUP2 SWAP1 SUB DUP2 KECCAK256 PUSH2 0x140 DUP12 ADD MLOAD DUP1 MLOAD SWAP2 SWAP10 POP SWAP6 POP SWAP1 SWAP4 POP DUP4 SWAP3 DUP6 ADD SWAP2 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x3ACE JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x3A91 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP4 ADD DUP2 SWAP1 SUB DUP2 KECCAK256 PUSH2 0x160 DUP12 ADD MLOAD DUP1 MLOAD SWAP2 SWAP9 POP SWAP6 POP SWAP1 SWAP4 POP DUP4 SWAP3 DUP6 ADD SWAP2 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x3B69 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x3B2C JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 SWAP1 SWAP4 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP2 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP3 ADD DUP3 SWAP1 SUB SWAP1 SWAP2 KECCAK256 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP10 ADD DUP1 MLOAD PUSH2 0x140 DUP12 ADD DUP1 MLOAD PUSH2 0x160 SWAP1 SWAP13 ADD DUP1 MLOAD SWAP11 DUP5 MSTORE SWAP9 DUP2 MSTORE SWAP3 DUP9 MSTORE PUSH2 0x1A0 DUP3 KECCAK256 SWAP2 MSTORE SWAP9 SWAP1 MSTORE POP POP POP SWAP2 SWAP1 MSTORE POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x120 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x3C42 PUSH2 0x3C04 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3C4F PUSH2 0x3C04 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFAC DUP3 CALLDATALOAD PUSH2 0x5018 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0x3C99 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x3CAC PUSH2 0x3CA7 DUP3 PUSH2 0x4FA7 JUMP JUMPDEST PUSH2 0x4F80 JUMP JUMPDEST DUP2 DUP2 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP3 POP DUP3 ADD DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3CEA JUMPI DUP2 CALLDATALOAD DUP7 ADD PUSH2 0x3CD4 DUP9 DUP3 PUSH2 0x3E46 JUMP JUMPDEST DUP5 MSTORE POP PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x3CBE JUMP JUMPDEST POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0x3D05 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x3D13 PUSH2 0x3CA7 DUP3 PUSH2 0x4FA7 JUMP JUMPDEST DUP2 DUP2 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP3 POP DUP3 ADD DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3CEA JUMPI DUP2 CALLDATALOAD DUP7 ADD PUSH2 0x3D3B DUP9 DUP3 PUSH2 0x3E95 JUMP JUMPDEST DUP5 MSTORE POP PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x3D25 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0x3D62 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x3D70 PUSH2 0x3CA7 DUP3 PUSH2 0x4FA7 JUMP JUMPDEST SWAP2 POP DUP2 DUP2 DUP4 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH1 0x20 DUP2 ADD SWAP1 POP DUP4 DUP6 PUSH1 0x20 DUP5 MUL DUP3 ADD GT ISZERO PUSH2 0x3D95 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3CEA JUMPI DUP2 PUSH2 0x3DAB DUP9 DUP3 PUSH2 0x3DD9 JUMP JUMPDEST DUP5 MSTORE POP PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x3D98 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFAC DUP3 CALLDATALOAD PUSH2 0x5031 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFAC DUP3 MLOAD PUSH2 0x5031 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFAC DUP3 CALLDATALOAD PUSH2 0x5036 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFAC DUP3 CALLDATALOAD PUSH2 0x5039 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFAC DUP3 MLOAD PUSH2 0x5039 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x1F DUP4 ADD DUP5 SGT PUSH2 0x3E0F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3E27 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x1 DUP3 MUL DUP4 ADD GT ISZERO PUSH2 0x3E3F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0x3E57 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x3E65 PUSH2 0x3CA7 DUP3 PUSH2 0x4FC8 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP4 ADD DUP6 DUP4 DUP4 ADD GT ISZERO PUSH2 0x3E81 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3E8C DUP4 DUP3 DUP5 PUSH2 0x506F JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x180 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3EA8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3EB3 PUSH2 0x180 PUSH2 0x4F80 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3EC1 DUP5 DUP5 PUSH2 0x3C7C JUMP JUMPDEST DUP3 MSTORE POP PUSH1 0x20 PUSH2 0x3ED2 DUP5 DUP5 DUP4 ADD PUSH2 0x3C7C JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP PUSH1 0x40 PUSH2 0x3EE6 DUP5 DUP3 DUP6 ADD PUSH2 0x3C7C JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 PUSH2 0x3EFA DUP5 DUP3 DUP6 ADD PUSH2 0x3C7C JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE POP PUSH1 0x80 PUSH2 0x3F0E DUP5 DUP3 DUP6 ADD PUSH2 0x3DD9 JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE POP PUSH1 0xA0 PUSH2 0x3F22 DUP5 DUP3 DUP6 ADD PUSH2 0x3DD9 JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE POP PUSH1 0xC0 PUSH2 0x3F36 DUP5 DUP3 DUP6 ADD PUSH2 0x3DD9 JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE POP PUSH1 0xE0 PUSH2 0x3F4A DUP5 DUP3 DUP6 ADD PUSH2 0x3DD9 JUMP JUMPDEST PUSH1 0xE0 DUP4 ADD MSTORE POP PUSH2 0x100 PUSH2 0x3F5F DUP5 DUP3 DUP6 ADD PUSH2 0x3DD9 JUMP JUMPDEST PUSH2 0x100 DUP4 ADD MSTORE POP PUSH2 0x120 PUSH2 0x3F75 DUP5 DUP3 DUP6 ADD PUSH2 0x3DD9 JUMP JUMPDEST PUSH2 0x120 DUP4 ADD MSTORE POP PUSH2 0x140 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3F97 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3FA3 DUP5 DUP3 DUP6 ADD PUSH2 0x3E46 JUMP JUMPDEST PUSH2 0x140 DUP4 ADD MSTORE POP PUSH2 0x160 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3FC5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3FD1 DUP5 DUP3 DUP6 ADD PUSH2 0x3E46 JUMP JUMPDEST PUSH2 0x160 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3FF0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2D8C DUP5 DUP5 PUSH2 0x3C7C JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x400F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x401B DUP6 DUP6 PUSH2 0x3C7C JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x402C DUP6 DUP3 DUP7 ADD PUSH2 0x3C7C JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4049 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x4055 DUP6 DUP6 PUSH2 0x3C7C JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x402C DUP6 DUP3 DUP7 ADD PUSH2 0x3DC1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4078 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x408F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2D8C DUP5 DUP3 DUP6 ADD PUSH2 0x3CF4 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x40B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x40C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x40D3 DUP7 DUP3 DUP8 ADD PUSH2 0x3CF4 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x40F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x40FC DUP7 DUP3 DUP8 ADD PUSH2 0x3D51 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4119 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4125 DUP7 DUP3 DUP8 ADD PUSH2 0x3C88 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x4144 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x415B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4167 DUP7 DUP3 DUP8 ADD PUSH2 0x3CF4 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x40FC DUP7 DUP3 DUP8 ADD PUSH2 0x3DD9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x418A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2D8C DUP5 DUP5 PUSH2 0x3DCD JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x41A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2D8C DUP5 DUP5 PUSH2 0x3DD9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x41C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x401B DUP6 DUP6 PUSH2 0x3DD9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x41E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x41F5 DUP8 DUP8 PUSH2 0x3DD9 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x4206 DUP8 DUP3 DUP9 ADD PUSH2 0x3C7C JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4223 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x422F DUP8 DUP3 DUP9 ADD PUSH2 0x3DFD JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x4250 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x425C DUP7 DUP7 PUSH2 0x3DD9 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x426D DUP7 DUP3 DUP8 ADD PUSH2 0x3C7C JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x428A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4125 DUP7 DUP3 DUP8 ADD PUSH2 0x3E46 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x42A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2D8C DUP5 DUP5 PUSH2 0x3DE5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x42C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2D8C DUP5 DUP5 PUSH2 0x3DF1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x42E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x42FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2D8C DUP5 DUP3 DUP6 ADD PUSH2 0x3E95 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x431D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4334 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4340 DUP8 DUP3 DUP9 ADD PUSH2 0x3E95 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x435D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4369 DUP8 DUP3 DUP9 ADD PUSH2 0x3E95 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4386 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4392 DUP8 DUP3 DUP9 ADD PUSH2 0x3E46 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x43AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43BB DUP8 DUP3 DUP9 ADD PUSH2 0x3E46 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x43DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x43F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43FF DUP7 DUP3 DUP8 ADD PUSH2 0x3E95 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x426D DUP7 DUP3 DUP8 ADD PUSH2 0x3DD9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x4429 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x4435 DUP10 DUP10 PUSH2 0x3DD9 JUMP JUMPDEST SWAP7 POP POP PUSH1 0x20 PUSH2 0x4446 DUP10 DUP3 DUP11 ADD PUSH2 0x3C7C JUMP JUMPDEST SWAP6 POP POP PUSH1 0x40 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4463 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x446F DUP10 DUP3 DUP11 ADD PUSH2 0x3DFD JUMP JUMPDEST SWAP5 POP SWAP5 POP POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x448E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x449A DUP10 DUP3 DUP11 ADD PUSH2 0x3DFD JUMP JUMPDEST SWAP3 POP SWAP3 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH2 0x44B2 DUP2 PUSH2 0x5018 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x44C3 DUP3 PUSH2 0x5014 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH2 0x44D5 DUP4 PUSH2 0x500E JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x4505 JUMPI PUSH2 0x44EB DUP7 DUP4 MLOAD PUSH2 0x4B9D JUMP JUMPDEST PUSH2 0x44F4 DUP3 PUSH2 0x500E JUMP JUMPDEST PUSH1 0x60 SWAP7 SWAP1 SWAP7 ADD SWAP6 SWAP2 POP PUSH1 0x1 ADD PUSH2 0x44D8 JUMP JUMPDEST POP SWAP4 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x44B2 DUP2 PUSH2 0x5031 JUMP JUMPDEST PUSH2 0x44B2 DUP2 PUSH2 0x5036 JUMP JUMPDEST PUSH2 0x44B2 DUP2 PUSH2 0x5039 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4535 DUP3 PUSH2 0x5014 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH2 0x4549 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x507B JUMP JUMPDEST PUSH2 0x4552 DUP2 PUSH2 0x50A7 JUMP JUMPDEST SWAP1 SWAP4 ADD PUSH1 0x20 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x44B2 DUP2 PUSH2 0x5064 JUMP JUMPDEST PUSH1 0x12 DUP2 MSTORE PUSH32 0x4C454E4754485F36355F52455155495245440000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0xD DUP2 MSTORE PUSH32 0x494E56414C49445F54414B455200000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1A DUP2 MSTORE PUSH32 0x41535345545F50524F58595F414C52454144595F455849535453000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F33325F4C454E4754485F5245 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x15 DUP2 MSTORE PUSH32 0x5349474E41545552455F554E535550504F525445440000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x17 DUP2 MSTORE PUSH32 0x494E56414C49445F4F524445525F5349474E4154555245000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0xD DUP2 MSTORE PUSH32 0x494E56414C49445F4D414B455200000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x10 DUP2 MSTORE PUSH32 0x55494E543235365F4F564552464C4F5700000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0xF DUP2 MSTORE PUSH32 0x494E56414C49445F54585F484153480000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x11 DUP2 MSTORE PUSH32 0x494E56414C49445F5349474E4154555245000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0xE DUP2 MSTORE PUSH32 0x524F554E44494E475F4552524F52000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x10 DUP2 MSTORE PUSH32 0x4641494C45445F455845435554494F4E00000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x14 DUP2 MSTORE PUSH32 0x494E56414C49445F54414B45525F414D4F554E54000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1A DUP2 MSTORE PUSH32 0x41535345545F50524F58595F444F45535F4E4F545F4558495354000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x21 DUP2 MSTORE PUSH32 0x475245415445525F5448414E5F5A45524F5F4C454E4754485F52455155495245 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x4400000000000000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x11 DUP2 MSTORE PUSH32 0x5349474E41545552455F494C4C4547414C000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1E DUP2 MSTORE PUSH32 0x4C454E4754485F475245415445525F5448414E5F305F52455155495245440000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x17 DUP2 MSTORE PUSH32 0x494E56414C49445F4E45575F4F524445525F45504F4348000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1E DUP2 MSTORE PUSH32 0x4C454E4754485F475245415445525F5448414E5F335F52455155495245440000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x14 DUP2 MSTORE PUSH32 0x434F4D504C4554455F46494C4C5F4641494C4544000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x12 DUP2 MSTORE PUSH32 0x5245454E5452414E43595F494C4C4547414C0000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x13 DUP2 MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F32305F4C454E4754485F5245 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x10 DUP2 MSTORE PUSH32 0x4F524445525F554E46494C4C41424C4500000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0xE DUP2 MSTORE PUSH32 0x494E56414C49445F53454E444552000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x18 DUP2 MSTORE PUSH32 0x4E454741544956455F5350524541445F52455155495245440000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x14 DUP2 MSTORE PUSH32 0x494E56414C49445F54585F5349474E4154555245000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x11 DUP2 MSTORE PUSH32 0x4C454E4754485F305F5245515549524544000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x80 DUP4 ADD SWAP1 PUSH2 0x4B2B DUP5 DUP3 PUSH2 0x4518 JUMP JUMPDEST POP PUSH1 0x20 DUP3 ADD MLOAD PUSH2 0x4B3E PUSH1 0x20 DUP6 ADD DUP3 PUSH2 0x4518 JUMP JUMPDEST POP PUSH1 0x40 DUP3 ADD MLOAD PUSH2 0x4B51 PUSH1 0x40 DUP6 ADD DUP3 PUSH2 0x4518 JUMP JUMPDEST POP PUSH1 0x60 DUP3 ADD MLOAD PUSH2 0x2F19 PUSH1 0x60 DUP6 ADD DUP3 PUSH2 0x4518 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x120 DUP4 ADD SWAP1 PUSH2 0x4B76 DUP5 DUP3 PUSH2 0x4B1A JUMP JUMPDEST POP PUSH1 0x20 DUP3 ADD MLOAD PUSH2 0x4B89 PUSH1 0x80 DUP6 ADD DUP3 PUSH2 0x4B1A JUMP JUMPDEST POP PUSH1 0x40 DUP3 ADD MLOAD PUSH2 0x2F19 PUSH2 0x100 DUP6 ADD DUP3 PUSH2 0x4518 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x60 DUP4 ADD SWAP1 PUSH2 0x4BAE DUP5 DUP3 PUSH2 0x4BD4 JUMP JUMPDEST POP PUSH1 0x20 DUP3 ADD MLOAD PUSH2 0x4BC1 PUSH1 0x20 DUP6 ADD DUP3 PUSH2 0x4518 JUMP JUMPDEST POP PUSH1 0x40 DUP3 ADD MLOAD PUSH2 0x2F19 PUSH1 0x40 DUP6 ADD DUP3 PUSH2 0x4518 JUMP JUMPDEST PUSH2 0x44B2 DUP2 PUSH2 0x505E JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x25DE DUP3 DUP5 PUSH2 0x44A9 JUMP JUMPDEST PUSH2 0x100 DUP2 ADD PUSH2 0x4BFA DUP3 DUP12 PUSH2 0x44A9 JUMP JUMPDEST PUSH2 0x4C07 PUSH1 0x20 DUP4 ADD DUP11 PUSH2 0x44A9 JUMP JUMPDEST PUSH2 0x4C14 PUSH1 0x40 DUP4 ADD DUP10 PUSH2 0x4518 JUMP JUMPDEST PUSH2 0x4C21 PUSH1 0x60 DUP4 ADD DUP9 PUSH2 0x4518 JUMP JUMPDEST PUSH2 0x4C2E PUSH1 0x80 DUP4 ADD DUP8 PUSH2 0x4518 JUMP JUMPDEST PUSH2 0x4C3B PUSH1 0xA0 DUP4 ADD DUP7 PUSH2 0x4518 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0xC0 DUP4 ADD MSTORE PUSH2 0x4C4D DUP2 DUP6 PUSH2 0x452A JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x4C61 DUP2 DUP5 PUSH2 0x452A JUMP JUMPDEST SWAP11 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x4C7D DUP3 DUP7 PUSH2 0x44A9 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x4C8F DUP2 DUP6 PUSH2 0x452A JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x4CA3 DUP2 DUP5 PUSH2 0x452A JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xFAC DUP2 DUP5 PUSH2 0x44B8 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x25DE DUP3 DUP5 PUSH2 0x450F JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x25DE DUP3 DUP5 PUSH2 0x4518 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x4CE7 DUP3 DUP7 PUSH2 0x4518 JUMP JUMPDEST PUSH2 0x4CF4 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x44A9 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x4CA3 DUP2 DUP5 PUSH2 0x452A JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x4D14 DUP3 DUP6 PUSH2 0x4518 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x2D8C DUP2 DUP5 PUSH2 0x452A JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x4D34 DUP3 DUP8 PUSH2 0x4518 JUMP JUMPDEST PUSH2 0x4D41 PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x4BD4 JUMP JUMPDEST PUSH2 0x4D4E PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x4518 JUMP JUMPDEST PUSH2 0x4CA3 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x4518 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x4D69 DUP3 DUP6 PUSH2 0x4521 JUMP JUMPDEST PUSH2 0xFAC PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x44A9 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xFAC DUP2 DUP5 PUSH2 0x452A JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x25DE DUP3 DUP5 PUSH2 0x455F JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x4568 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x4598 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x45C8 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x45F8 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x464E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x467E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x46AE JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x46DE JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x470E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x473E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x476E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x479E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x47CE JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x47FE JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x482E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x4884 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x48B4 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x48E4 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x4914 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x4944 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x4974 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x49A4 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x49D4 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x4A2A JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x4A5A JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x4A8A JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x4ABA JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x4AEA JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x25DE DUP3 DUP5 PUSH2 0x4B1A JUMP JUMPDEST PUSH2 0x120 DUP2 ADD PUSH2 0x25DE DUP3 DUP5 PUSH2 0x4B64 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x25DE DUP3 DUP5 PUSH2 0x4B9D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x4F9F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x4FBE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 SWAP1 DUP2 MUL ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x4FDF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x1F SWAP2 SWAP1 SWAP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND SWAP1 JUMP JUMPDEST PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x25DE DUP3 PUSH2 0x5018 JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x5096 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x507E JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x2F19 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP1 JUMP STOP LOG2 PUSH6 0x627A7A723058 KECCAK256 PUSH29 0x5F5AF88134AEEEDE952E9CDDA7741EFB0001F235C761EC650B76B231AB PUSH1 0x26 PUSH13 0x6578706572696D656E74616CF5 STOP CALLDATACOPY ",
+ "sourceMap": "931:616:2:-;;;1229:316;8:9:-1;5:2;;;30:1;27;20:12;5:2;1229:316:2;;;;;;;;;;;;;;;;;;;;;;;;997:29:16;;1306:13:2;;997:29:16;;:14;;:29;;;;;:::i;:::-;-1:-1:-1;;1042:148:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;1042:148:17;;;;;;;;1032:159;;1042:148;;;;;1032:159;;;;1042:148;1032:159;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;1032:159:17;;;;;;;;;;;;1502:18;;;;;;;;;;;;;;;;1486:36;;1032:159;;-1:-1:-1;1032:159:17;;-1:-1:-1;1486:36:17;;;;-1:-1:-1;1502:18:17;1486:36;1502:18;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;1486:36:17;;;;;;;;;;;;1552:21;;;;;274:1:-1;1552:21:17;;;;;;;;;;1536:39;;1486:36;;-1:-1:-1;1486:36:17;;-1:-1:-1;1536:39:17;;;;-1:-1:-1;274:1;1536:39:17;1552:21;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;1536:39:17;;;;;;;;;;;1413:199;;;;-1:-1:-1;1536:39:17;-1:-1:-1;1597:4:17;;1413:199;;-1:-1:-1;1413:199:17;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;1413:199:17;;;1403:210;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;-1:-1;;263:2;259:12;;;;254:3;250:22;246:30;;;;340:21;;;311:9;;295:26;377:20;;;;365:33;;1403:210:17;;;;;;;;;;274:1:-1;1382:231:17;-1:-1:-1;;329:5:29;:18;;-1:-1:-1;;;;;;329:18:29;337:10;329:18;;;-1:-1:-1;931:616:2;;-1:-1:-1;931:616:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;931:616:2;;;-1:-1:-1;931:616:2;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;6:442:-1:-;;111:4;99:17;;95:27;-1:-1;85:2;;136:1;133;126:12;85:2;166:6;160:13;188:64;203:48;244:6;203:48;;;188:64;;;179:73;;272:6;265:5;258:21;308:4;300:6;296:17;341:4;334:5;330:16;376:3;367:6;362:3;358:16;355:25;352:2;;;393:1;390;383:12;352:2;403:39;435:6;430:3;425;403:39;;;78:370;;;;;;;;456:360;;580:2;568:9;559:7;555:23;551:32;548:2;;;596:1;593;586:12;548:2;631:24;;-1:-1;;;;;664:30;;661:2;;;707:1;704;697:12;661:2;727:73;792:7;783:6;772:9;768:22;727:73;;;717:83;542:274;-1:-1;;;;542:274;823:110;896:31;921:5;896:31;;;891:3;884:44;878:55;;;940:110;1013:31;1038:5;1013:31;;1057:497;1249:3;1234:19;;1264:61;1238:9;1298:6;1264:61;;;1336:62;1394:2;1383:9;1379:18;1370:6;1336:62;;;1409;1467:2;1456:9;1452:18;1443:6;1409:62;;;1482;1540:2;1529:9;1525:18;1516:6;1482:62;;;1220:334;;;;;;;;1561:256;1623:2;1617:9;1649:17;;;-1:-1;;;;;1709:34;;1745:22;;;1706:62;1703:2;;;1781:1;1778;1771:12;1703:2;1797;1790:22;1601:216;;-1:-1;1601:216;1824:258;;-1:-1;;;;;1959:6;1956:30;1953:2;;;1999:1;1996;1989:12;1953:2;-1:-1;2072:4;2043;2020:17;;;;-1:-1;;2016:33;2062:15;;1890:192;2089:128;-1:-1;;;;;2158:54;;2141:76;2311:268;2376:1;2383:101;2397:6;2394:1;2391:13;2383:101;;;2464:11;;;2458:18;2445:11;;;2438:39;2419:2;2412:10;2383:101;;;2499:6;2496:1;2493:13;2490:2;;;2564:1;2555:6;2550:3;2546:16;2539:27;2490:2;2360:219;;;;;;931:616:2;;;;;;"
},
"deployedBytecode": {
"linkReferences": {},
- "object": "0x6080604052600436106101b65763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416632624b2d981146101bb578063288cdc91146101e6578063297bb70b146102065780632ac12622146102335780633683ef8e146102605780633c28d861146102825780633e228bae146102af5780633fd3c997146102cf5780634ac14782146102fc5780634d0ae5461461031c5780634f9559b11461033c57806350dde1901461035c578063607041081461037c578063642f2eaf146103a957806364a3bc15146103c957806377fcce68146103e95780637b8e3514146104095780637e1d98081461042957806382c174d0146104495780638da5cb5b14610469578063936347021461047e578063a3e203801461049e578063b4be83d5146104be578063bfc8bfce146104de578063c585bb93146104fe578063c75e0a811461051e578063d46b02c31461054b578063d9bfa73e1461056b578063db123b1a1461058b578063dd1c7d18146105ad578063e306f779146105cd578063e5fa431b146105e2578063eea086ba14610602578063f2fde38b14610617578063ffa1ad7414610637575b600080fd5b3480156101c757600080fd5b506101d061064c565b6040516101dd9190614aa8565b60405180910390f35b3480156101f257600080fd5b506101d061020136600461400b565b6107a0565b34801561021257600080fd5b50610226610221366004613f10565b6107b2565b6040516101dd9190614d22565b34801561023f57600080fd5b5061025361024e36600461400b565b610842565b6040516101dd9190614a9a565b34801561026c57600080fd5b5061028061027b366004614048565b610857565b005b34801561028e57600080fd5b506102a261029d36600461417c565b610930565b6040516101dd9190614d30565b3480156102bb57600080fd5b506102266102ca36600461423c565b610a1c565b3480156102db57600080fd5b506102ef6102ea36600461410b565b610c2c565b6040516101dd9190614b64565b34801561030857600080fd5b50610280610317366004613edb565b610c54565b34801561032857600080fd5b50610226610337366004613f10565b610c8c565b34801561034857600080fd5b5061028061035736600461400b565b610d13565b34801561036857600080fd5b50610226610377366004613f10565b610e37565b34801561038857600080fd5b5061039c61039736600461410b565b610ebe565b6040516101dd91906149cb565b3480156103b557600080fd5b506102536103c436600461400b565b610f0c565b3480156103d557600080fd5b506102266103e436600461423c565b610f21565b3480156103f557600080fd5b50610280610404366004613eab565b610f7b565b34801561041557600080fd5b50610253610424366004613e71565b611026565b34801561043557600080fd5b50610226610444366004613fa4565b611046565b34801561045557600080fd5b50610253610464366004614029565b611117565b34801561047557600080fd5b5061039c611137565b34801561048a57600080fd5b506102536104993660046140b0565b611153565b3480156104aa57600080fd5b506102266104b9366004613fa4565b611979565b3480156104ca57600080fd5b506102266104d936600461423c565b611a89565b3480156104ea57600080fd5b506102806104f9366004614285565b611b0d565b34801561050a57600080fd5b50610280610519366004613e53565b611d88565b34801561052a57600080fd5b5061053e610539366004614147565b611fb3565b6040516101dd9190614d3f565b34801561055757600080fd5b50610280610566366004614147565b6120ae565b34801561057757600080fd5b506101d0610586366004613e71565b6120d9565b34801561059757600080fd5b506105a06120f6565b6040516101dd9190614b53565b3480156105b957600080fd5b506102266105c8366004613fa4565b6121a2565b3480156105d957600080fd5b506101d0612268565b3480156105ee57600080fd5b506102266105fd366004613fa4565b61226e565b34801561060e57600080fd5b5061039c612342565b34801561062357600080fd5b50610280610632366004613e53565b61235e565b34801561064357600080fd5b506105a061240f565b604080517f454950373132446f6d61696e28000000000000000000000000000000000000006020808301919091527f737472696e67206e616d652c0000000000000000000000000000000000000000602d8301527f737472696e672076657273696f6e2c000000000000000000000000000000000060398301527f6164647265737320766572696679696e67436f6e74726163740000000000000060488301527f2900000000000000000000000000000000000000000000000000000000000000606183015282516042818403018152606290920192839052815191929182918401908083835b6020831061077057805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610733565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902081565b60036020526000908152604090205481565b6107ba613a79565b60006107c4613a79565b600091505b85518210156108395761082286838151811015156107e357fe5b9060200190602002015186848151811015156107fb57fe5b90602001906020020151868581518110151561081357fe5b90602001906020020151611a89565b905061082e8382612446565b6001909101906107c9565b50509392505050565b60046020526000908152604090205460ff1681565b610892848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843750611153945050505050565b15156108d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614bf2565b60405180910390fd5b5050600091825260066020908152604080842073ffffffffffffffffffffffffffffffffffffffff9093168452919052902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b610938613aa2565b610940613ad1565b610948613ad1565b610160808801516101408089019190915288015190870152600061096b88611fb3565b925061097687611fb3565b91506109806124a8565b905061098c88886124f1565b6109a088888560400151856040015161254d565b8051602001519094506109ba90899085908490808b612611565b60208085015101516109d390889084908490808a612611565b6109ec888285602001518660400151886000015161282e565b610a05878284602001518560400151886020015161282e565b610a11888883876128da565b505050949350505050565b610a24613a79565b604080517fb4be83d5000000000000000000000000000000000000000000000000000000008082526060600483018181528851606485019081526020808b01516084870152958a015160a48601529189015160c4850152608089015160e485015260a089015161010485015260c089015161012485015260e0890151610144850152610100890151610164850152610120890151610184850152610140890180516101a486019081526101608b01516101c487015261018090525180516101e48601819052939591938493926024870192849261020489019291820191601f82010460005b81811015610b27578351855260209485019490930192600101610b09565b50505050818103610160808401919091528c0151805180835260209283019291820191601f82010460005b81811015610b70578351855260209485019490930192600101610b52565b5050508b84525084810360209384019081528a518083529093918201918b81019190601f82010460005b81811015610bb8578351855260209485019490930192600101610b9a565b5060808a8b86038c305af4808015610bd75760018114610bf557610c18565b60008e52600060208f0152600060408f0152600060608f0152610c18565b8b518e5260208c015160208f015260408c015160408f015260608c015160608f01525b505050505050505050505050509392505050565b600a6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60005b8151811015610c8857610c808282815181101515610c7157fe5b906020019060200201516120ae565b600101610c57565b5050565b610c94613a79565b6000610c9e613a79565b600091505b855182101561083957610cfc8683815181101515610cbd57fe5b906020019060200201518684815181101515610cd557fe5b906020019060200201518685815181101515610ced57fe5b90602001906020020151610f21565b9050610d088382612446565b600190910190610ca3565b600080600080610d216124a8565b935073ffffffffffffffffffffffffffffffffffffffff84163314610d465733610d49565b60005b73ffffffffffffffffffffffffffffffffffffffff8086166000908152600560209081526040808320938516835292905220549093506001860192509050808211610dc0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614c72565b73ffffffffffffffffffffffffffffffffffffffff80851660008181526005602090815260408083209488168084529490915290819020859055517f82af639571738f4ebd4268fb0363d8957ebe1bbb9e78dba5ebd69eed39b154f090610e28908690614aa8565b60405180910390a35050505050565b610e3f613a79565b6000610e49613a79565b600091505b855182101561083957610ea78683815181101515610e6857fe5b906020019060200201518684815181101515610e8057fe5b906020019060200201518685815181101515610e9857fe5b90602001906020020151610a1c565b9050610eb38382612446565b600190910190610e4e565b7fffffffff0000000000000000000000000000000000000000000000000000000081166000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff165b919050565b60086020526000908152604090205460ff1681565b610f29613a79565b610f34848484611a89565b60208101519091508314610f74576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614c92565b9392505050565b6000610f856124a8565b73ffffffffffffffffffffffffffffffffffffffff8181166000818152600760209081526040808320948916808452949091529081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168715151790555192935090917fa8656e308026eeabce8f0bc18048433252318ab80ac79da0b3d3d8697dfba89190611019908690614a9a565b60405180910390a3505050565b600760209081526000928352604080842090915290825290205460ff1681565b61104e613a79565b606060008061105b613a79565b87600081518110151561106a57fe5b9060200190602002015161016001519350600092505b875183101561110c5783888481518110151561109857fe5b9060200190602002015161016001819052506110b8878660200151612aba565b91506110e488848151811015156110cb57fe5b9060200190602002015183888681518110151561081357fe5b90506110f08582612446565b86856020015114156111015761110c565b600190920191611080565b505050509392505050565b600660209081526000928352604080842090915290825290205460ff1681565b60025473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000806000806000806000895111151561119c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614c62565b6111a589612acc565b7f010000000000000000000000000000000000000000000000000000000000000090049650600960ff881610611207576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614bb2565b8660ff16600981111561121657fe5b9550600086600981111561122657fe5b141561125e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614c52565b600186600981111561126c57fe5b14156112b4578851156112ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614d12565b6000975061196b565b60028660098111156112c257fe5b14156113fd578851604114611303576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614b72565b88600081518110151561131257fe5b01602001517f010000000000000000000000000000000000000000000000000000000000000090819004810204945061135289600163ffffffff612b9016565b935061136589602163ffffffff612b9016565b925060018b8686866040516000815260200160405260405161138a9493929190614b03565b60206040516020810390808403906000865af11580156113ae573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015173ffffffffffffffffffffffffffffffffffffffff8c8116908216149950925061196b9050565b600386600981111561140b57fe5b14156115b157885160411461144c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614b72565b88600081518110151561145b57fe5b01602001517f010000000000000000000000000000000000000000000000000000000000000090819004810204945061149b89600163ffffffff612b9016565b93506114ae89602163ffffffff612b9016565b925060018b60405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c0182600019166000191681526020019150506040516020818303038152906040526040518082805190602001908083835b6020831061154f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611512565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199092169116179052604080519290940182900382206000835291019283905261138a9450925089918991508890614b03565b60048660098111156115bf57fe5b141561161e578851156115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614d12565b73ffffffffffffffffffffffffffffffffffffffff8a163314975061196b565b600586600981111561162c57fe5b14156116df576040517f1626ba7e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b1690631626ba7e90611686908e908d90600401614ae3565b602060405180830381600087803b1580156116a057600080fd5b505af11580156116b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506116d89190810190613fed565b975061196b565b60068660098111156116ed57fe5b141561179a576116fc89612bdb565b73ffffffffffffffffffffffffffffffffffffffff808c1660009081526007602090815260408083209385168352929052205490915060ff161515611744576000975061196b565b6040517f9363470200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690639363470290611686908e908e908e90600401614ab6565b60078660098111156117a857fe5b14156117e85760008b815260066020908152604080832073ffffffffffffffffffffffffffffffffffffffff8e16845290915290205460ff16975061196b565b60088660098111156117f657fe5b1415611939578851604114611837576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614b72565b88600081518110151561184657fe5b01602001517f010000000000000000000000000000000000000000000000000000000000000090819004810204945061188689600163ffffffff612b9016565b935061189989602163ffffffff612b9016565b925060018b60405160200180807f19457468657265756d205369676e6564204d6573736167653a0a200000000000815250601b0182600019166000191681526020019150506040516020818303038152906040526040518082805190602001908083836020831061154f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611512565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614bb2565b505050505050509392505050565b611981613a79565b60606000806000611990613a79565b88600081518110151561199f57fe5b9060200190602002015161014001519450600093505b8851841015611a7d578489858151811015156119cd57fe5b60209081029091010151610140015285516119e9908990612aba565b9250611a2c89858151811015156119fc57fe5b9060200190602002015160a001518a86815181101515611a1857fe5b906020019060200201516080015185612c54565b9150611a588985815181101515611a3f57fe5b90602001906020020151838987815181101515610e9857fe5b9050611a648682612446565b8551881415611a7257611a7d565b6001909301926119b5565b50505050509392505050565b611a91613a79565b611a99613ad1565b6000806000611aa788611fb3565b9350611ab16124a8565b9250611ac58860a001518560400151612aba565b9150611ad18783612c71565b9050611ae18885858a858b612611565b611aeb8882612c87565b9450611b028884866020015187604001518961282e565b61110c888487612cf1565b60095460009073ffffffffffffffffffffffffffffffffffffffff1615611b60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614ca2565b611ba3611b9e888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843750612e06945050505050565b613047565b60008181526008602052604090205490915060ff1615611bef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614be2565b73ffffffffffffffffffffffffffffffffffffffff86163314611cc057611c47818785858080601f01602080910402602001604051908101604052809392919081815260200183838082843750611153945050505050565b1515611c7f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614d02565b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff88161790555b6000818152600860205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555130908690869080838380828437820191505092505050600060405180830381855af49150501515611d57576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614c12565b5050600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555050505050565b6002546000908190819073ffffffffffffffffffffffffffffffffffffffff163314611de0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614cb2565b8392508273ffffffffffffffffffffffffffffffffffffffff1663ae25532e6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015611e4757600080fd5b505af1158015611e5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611e7f9190810190614129565b7fffffffff0000000000000000000000000000000000000000000000000000000081166000908152600a602052604090205490925073ffffffffffffffffffffffffffffffffffffffff1690508015611f04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614b92565b7fffffffff0000000000000000000000000000000000000000000000000000000082166000908152600a60205260409081902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8616179055517fd2c6b762299c609bdb96520b58a49bfb80186934d4f71a86a367571a15c0319490611fa59084908790614b38565b60405180910390a150505050565b611fbb613ad1565b611fc4826131c7565b602082015260808201511515611fe15760015b60ff168152610f07565b60a08201511515611ff3576002611fd7565b6101008201514210612006576004611fd7565b60208082015160009081526004909152604090205460ff161561202a576006611fd7565b610120820151825173ffffffffffffffffffffffffffffffffffffffff90811660009081526005602090815260408083206060880151909416835292905220541115612077576006611fd7565b602080820151600090815260039091526040908190205490820181905260a0830151116120a5576005611fd7565b60038152919050565b6120b6613ad1565b6120bf82611fb3565b90506120cb82826131d5565b610c888282602001516132ec565b600560209081526000928352604080842090915290825290205481565b6000805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f8101849004840282018401909252818152929183018282801561219a5780601f1061216f5761010080835404028352916020019161219a565b820191906000526020600020905b81548152906001019060200180831161217d57829003601f168201915b505050505081565b6121aa613a79565b60606000806121b7613a79565b8760008151811015156121c657fe5b9060200190602002015161016001519350600092505b875183101561110c578388848151811015156121f457fe5b906020019060200201516101600181905250612214878660200151612aba565b9150612240888481518110151561222757fe5b90602001906020020151838886815181101515610e9857fe5b905061224c8582612446565b868560200151141561225d5761110c565b6001909201916121dc565b60015481565b612276613a79565b60606000806000612285613a79565b88600081518110151561229457fe5b9060200190602002015161014001519450600093505b8851841015611a7d578489858151811015156122c257fe5b60209081029091010151610140015285516122de908990612aba565b92506122f189858151811015156119fc57fe5b915061231d898581518110151561230457fe5b9060200190602002015183898781518110151561081357fe5b90506123298682612446565b855188141561233757611a7d565b6001909301926122aa565b60095473ffffffffffffffffffffffffffffffffffffffff1681565b60025473ffffffffffffffffffffffffffffffffffffffff1633146123af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614cb2565b73ffffffffffffffffffffffffffffffffffffffff81161561240c57600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b60408051808201909152600b81527f322e302e312d616c706861000000000000000000000000000000000000000000602082015281565b815181516124549190613393565b82526020808301519082015161246a9190613393565b6020830152604080830151908201516124839190613393565b60408301526060808301519082015161249c9190613393565b60609092019190915250565b600954600090819073ffffffffffffffffffffffffffffffffffffffff16156124e95760095473ffffffffffffffffffffffffffffffffffffffff166124eb565b335b92915050565b6125038260a001518260a001516133a2565b612515836080015183608001516133a2565b1015610c88576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614cf2565b612555613aa2565b6000806000806125698960a0015188612aba565b93506125798860a0015187612aba565b92506125898389608001516133a2565b612597858a60a001516133a2565b116125b9578391506125b28860a00151896080015184612c54565b90506125d2565b8290506125cf88608001518960a0015183612c54565b91505b6125dc8983612c87565b85526125e88882612c87565b60208087018290528651519101516126009190612aba565b604086015250505050949350505050565b845160ff1660031461264f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614cd2565b821515612688576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614c22565b606086015173ffffffffffffffffffffffffffffffffffffffff16156126fb57606086015173ffffffffffffffffffffffffffffffffffffffff1633146126fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614ce2565b602086015173ffffffffffffffffffffffffffffffffffffffff1615612786578373ffffffffffffffffffffffffffffffffffffffff16866020015173ffffffffffffffffffffffffffffffffffffffff16141515612786576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614b82565b604085015115156127dc576127a48560200151876000015183611153565b15156127dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614bc2565b6127ef828760a0015188608001516133c6565b15612826576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614c02565b505050505050565b61283c828260200151613393565b600084815260036020908152604091829020929092558681015187518451938501518584015160608701516101408c01516101608d015196518b9873ffffffffffffffffffffffffffffffffffffffff9788169897909616967f0bcc4c97732e47d9946f229edb95f5b6323f601300e4690de719993f3c371129966128cb968f963396929591949093906149d9565b60405180910390a45050505050565b60008054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156129845780601f1061295957610100808354040283529160200191612984565b820191906000526020600020905b81548152906001019060200180831161296757829003601f168201915b505050505090506129ac85610140015186600001518660000151856020015160200151613417565b610140840151845186518451602001516129c893929190613417565b6129e18561014001518660000151858560400151613417565b6129fd8186600001518760400151856000015160400151613417565b612a198185600001518660400151856020015160400151613417565b836040015173ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff161415612a8357612a7e81848760400151612a79866000015160600151876020015160600151613393565b613417565b612ab3565b612a9b81848760400151856000015160600151613417565b612ab381848660400151856020015160600151613417565b5050505050565b600082821115612ac657fe5b50900390565b6000808251111515612b0a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614c42565b815182907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908110612b3a57fe5b016020015182517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01909252507f0100000000000000000000000000000000000000000000000000000000000000908190040290565b600081602001835110151515612bd2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614ba2565b50016020015190565b60006014825110151515612c1b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614cc2565b612c298260148451036135a8565b82517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec019092525090565b6000612c69612c6385846133a2565b84613609565b949350505050565b6000818310612c805781610f74565b5090919050565b612c8f613a79565b6020810182905260a08301516080840151612cab918491612c54565b8152602081015160a084015160c0850151612cc7929190612c54565b6040820152602081015160a084015160e0850151612ce6929190612c54565b606082015292915050565b60008054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015612d9b5780601f10612d7057610100808354040283529160200191612d9b565b820191906000526020600020905b815481529060010190602001808311612d7e57829003601f168201915b50505050509050612dbb8461014001518560000151858560000151613417565b612dd48461016001518486600001518560200151613417565b612dec81856000015186604001518560400151613417565b612e00818486604001518560600151613417565b50505050565b604080517f5a65726f45785472616e73616374696f6e2800000000000000000000000000006020808301919091527f75696e743235362073616c742c0000000000000000000000000000000000000060328301527f61646472657373207369676e6572416464726573732c00000000000000000000603f8301527f627974657320646174610000000000000000000000000000000000000000000060558301527f2900000000000000000000000000000000000000000000000000000000000000605f830152825180830384018152606090920192839052815160009384938493909282918401908083835b60208310612f2f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612ef2565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260405191909301819003812089519097508995509093508392850191508083835b60208310612fc557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612f88565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040805192909401829003822097825281019a909a525073ffffffffffffffffffffffffffffffffffffffff97909716968801969096525050606085015250506080909120919050565b60006040805190810160405280600281526020017f1901000000000000000000000000000000000000000000000000000000000000815250600154836040516020018084805190602001908083835b602083106130d357805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613096565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199092169116179052920194855250838101929092525060408051808403830181529281019081905282519293509182918401908083835b6020831061317757805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161313a565b5181516020939093036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199091169216919091179052604051920182900390912095945050505050565b60006124eb611b9e83613620565b805160009060ff16600314613216576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614cd2565b606083015173ffffffffffffffffffffffffffffffffffffffff161561328957606083015173ffffffffffffffffffffffffffffffffffffffff163314613289576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614ce2565b6132916124a8565b835190915073ffffffffffffffffffffffffffffffffffffffff8083169116146132e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614bd2565b505050565b6000818152600460205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558281015183516101408501516101608601519351859473ffffffffffffffffffffffffffffffffffffffff9485169493909316927fdc47b3613d9fe400085f6dbdc99453462279057e6207385042827ed6b1a62cf79261338792339290614a5d565b60405180910390a45050565b600082820183811015610f7457fe5b60008282028315806133be57508284828115156133bb57fe5b04145b1515610f7457fe5b6000806000848015156133d557fe5b86850991508115156133ea5760009250610839565b6134096133fa83620f42406133a2565b61340488876133a2565b613609565b6103e8109695505050505050565b600080600083111561282657855160031061345e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614c82565b50506020848101517fffffffff00000000000000000000000000000000000000000000000000000000166000818152600a90925260409091205473ffffffffffffffffffffffffffffffffffffffff168015156134e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614c32565b604051660fffffffffffe0603f885101168060840182017fa85e59e40000000000000000000000000000000000000000000000000000000083526080600484015273ffffffffffffffffffffffffffffffffffffffff8816602484015273ffffffffffffffffffffffffffffffffffffffff87166044840152856064840152608483015b8181101561358357895181526020998a01990161356b565b61020084858403866000895af180151561359b573d85fd5b5050505050505050505050565b6000816014018351101515156135ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90614cc2565b50016014015173ffffffffffffffffffffffffffffffffffffffff1690565b600080828481151561361757fe5b04949350505050565b604080517f4f726465722800000000000000000000000000000000000000000000000000006020808301919091527f61646472657373206d616b6572416464726573732c000000000000000000000060268301527f616464726573732074616b6572416464726573732c0000000000000000000000603b8301527f6164647265737320666565526563697069656e74416464726573732c0000000060508301527f616464726573732073656e646572416464726573732c00000000000000000000606c8301527f75696e74323536206d616b65724173736574416d6f756e742c0000000000000060828301527f75696e743235362074616b65724173736574416d6f756e742c00000000000000609b8301527f75696e74323536206d616b65724665652c00000000000000000000000000000060b48301527f75696e743235362074616b65724665652c00000000000000000000000000000060c58301527f75696e743235362065787069726174696f6e54696d655365636f6e64732c000060d68301527f75696e743235362073616c742c0000000000000000000000000000000000000060f48301527f6279746573206d616b65724173736574446174612c00000000000000000000006101018301527f62797465732074616b65724173736574446174610000000000000000000000006101168301527f290000000000000000000000000000000000000000000000000000000000000061012a830152825161010b81840301815261012b90920192839052815160009384938493849391929182918401908083835b602083106138a857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161386b565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930181900381206101408b0151805191995095509093508392850191508083835b6020831061394357805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613906565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930181900381206101608b0151805191985095509093508392850191508083835b602083106139de57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016139a1565b5181516020939093036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909116921691909117905260405192018290039091207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0890180516101408b018051610160909c0180519a84529881529288526101a0822091529890525050509190525090919050565b608060405190810160405280600081526020016000815260200160008152602001600081525090565b61012060405190810160405280613ab7613a79565b8152602001613ac4613a79565b8152602001600081525090565b604080516060810182526000808252602082018190529181019190915290565b6000610f748235614ddf565b6000601f82018313613b0e57600080fd5b8135613b21613b1c82614d74565b614d4d565b81815260209384019390925082018360005b83811015613b5f5781358601613b498882613cbb565b8452506020928301929190910190600101613b33565b5050505092915050565b6000601f82018313613b7a57600080fd5b8135613b88613b1c82614d74565b81815260209384019390925082018360005b83811015613b5f5781358601613bb08882613d0a565b8452506020928301929190910190600101613b9a565b6000601f82018313613bd757600080fd5b8135613be5613b1c82614d74565b91508181835260208401935060208101905083856020840282011115613c0a57600080fd5b60005b83811015613b5f5781613c208882613c4e565b8452506020928301929190910190600101613c0d565b6000610f748235614df8565b6000610f748251614df8565b6000610f748235614dfd565b6000610f748235614e00565b6000610f748251614e00565b600080601f83018413613c8457600080fd5b50813567ffffffffffffffff811115613c9c57600080fd5b602083019150836001820283011115613cb457600080fd5b9250929050565b6000601f82018313613ccc57600080fd5b8135613cda613b1c82614d95565b91508082526020830160208301858383011115613cf657600080fd5b613d01838284614e36565b50505092915050565b60006101808284031215613d1d57600080fd5b613d28610180614d4d565b90506000613d368484613af1565b8252506020613d4784848301613af1565b6020830152506040613d5b84828501613af1565b6040830152506060613d6f84828501613af1565b6060830152506080613d8384828501613c4e565b60808301525060a0613d9784828501613c4e565b60a08301525060c0613dab84828501613c4e565b60c08301525060e0613dbf84828501613c4e565b60e083015250610100613dd484828501613c4e565b61010083015250610120613dea84828501613c4e565b6101208301525061014082013567ffffffffffffffff811115613e0c57600080fd5b613e1884828501613cbb565b6101408301525061016082013567ffffffffffffffff811115613e3a57600080fd5b613e4684828501613cbb565b6101608301525092915050565b600060208284031215613e6557600080fd5b6000612c698484613af1565b60008060408385031215613e8457600080fd5b6000613e908585613af1565b9250506020613ea185828601613af1565b9150509250929050565b60008060408385031215613ebe57600080fd5b6000613eca8585613af1565b9250506020613ea185828601613c36565b600060208284031215613eed57600080fd5b813567ffffffffffffffff811115613f0457600080fd5b612c6984828501613b69565b600080600060608486031215613f2557600080fd5b833567ffffffffffffffff811115613f3c57600080fd5b613f4886828701613b69565b935050602084013567ffffffffffffffff811115613f6557600080fd5b613f7186828701613bc6565b925050604084013567ffffffffffffffff811115613f8e57600080fd5b613f9a86828701613afd565b9150509250925092565b600080600060608486031215613fb957600080fd5b833567ffffffffffffffff811115613fd057600080fd5b613fdc86828701613b69565b9350506020613f7186828701613c4e565b600060208284031215613fff57600080fd5b6000612c698484613c42565b60006020828403121561401d57600080fd5b6000612c698484613c4e565b6000806040838503121561403c57600080fd5b6000613e908585613c4e565b6000806000806060858703121561405e57600080fd5b600061406a8787613c4e565b945050602061407b87828801613af1565b935050604085013567ffffffffffffffff81111561409857600080fd5b6140a487828801613c72565b95989497509550505050565b6000806000606084860312156140c557600080fd5b60006140d18686613c4e565b93505060206140e286828701613af1565b925050604084013567ffffffffffffffff8111156140ff57600080fd5b613f9a86828701613cbb565b60006020828403121561411d57600080fd5b6000612c698484613c5a565b60006020828403121561413b57600080fd5b6000612c698484613c66565b60006020828403121561415957600080fd5b813567ffffffffffffffff81111561417057600080fd5b612c6984828501613d0a565b6000806000806080858703121561419257600080fd5b843567ffffffffffffffff8111156141a957600080fd5b6141b587828801613d0a565b945050602085013567ffffffffffffffff8111156141d257600080fd5b6141de87828801613d0a565b935050604085013567ffffffffffffffff8111156141fb57600080fd5b61420787828801613cbb565b925050606085013567ffffffffffffffff81111561422457600080fd5b61423087828801613cbb565b91505092959194509250565b60008060006060848603121561425157600080fd5b833567ffffffffffffffff81111561426857600080fd5b61427486828701613d0a565b93505060206140e286828701613c4e565b6000806000806000806080878903121561429e57600080fd5b60006142aa8989613c4e565b96505060206142bb89828a01613af1565b955050604087013567ffffffffffffffff8111156142d857600080fd5b6142e489828a01613c72565b9450945050606087013567ffffffffffffffff81111561430357600080fd5b61430f89828a01613c72565b92509250509295509295509295565b61432781614ddf565b82525050565b61432781614df8565b61432781614dfd565b61432781614e00565b600061435382614ddb565b808452614367816020860160208601614e42565b61437081614e6e565b9093016020019392505050565b61432781614e2b565b601281527f4c454e4754485f36355f52455155495245440000000000000000000000000000602082015260400190565b600d81527f494e56414c49445f54414b455200000000000000000000000000000000000000602082015260400190565b601a81527f41535345545f50524f58595f414c52454144595f455849535453000000000000602082015260400190565b602681527f475245415445525f4f525f455155414c5f544f5f33325f4c454e4754485f524560208201527f5155495245440000000000000000000000000000000000000000000000000000604082015260600190565b601581527f5349474e41545552455f554e535550504f525445440000000000000000000000602082015260400190565b601781527f494e56414c49445f4f524445525f5349474e4154555245000000000000000000602082015260400190565b600d81527f494e56414c49445f4d414b455200000000000000000000000000000000000000602082015260400190565b600f81527f494e56414c49445f54585f484153480000000000000000000000000000000000602082015260400190565b601181527f494e56414c49445f5349474e4154555245000000000000000000000000000000602082015260400190565b600e81527f524f554e44494e475f4552524f52000000000000000000000000000000000000602082015260400190565b601081527f4641494c45445f455845435554494f4e00000000000000000000000000000000602082015260400190565b601481527f494e56414c49445f54414b45525f414d4f554e54000000000000000000000000602082015260400190565b601a81527f41535345545f50524f58595f444f45535f4e4f545f4558495354000000000000602082015260400190565b602181527f475245415445525f5448414e5f5a45524f5f4c454e4754485f5245515549524560208201527f4400000000000000000000000000000000000000000000000000000000000000604082015260600190565b601181527f5349474e41545552455f494c4c4547414c000000000000000000000000000000602082015260400190565b601e81527f4c454e4754485f475245415445525f5448414e5f305f52455155495245440000602082015260400190565b601781527f494e56414c49445f4e45575f4f524445525f45504f4348000000000000000000602082015260400190565b601e81527f4c454e4754485f475245415445525f5448414e5f335f52455155495245440000602082015260400190565b601481527f434f4d504c4554455f46494c4c5f4641494c4544000000000000000000000000602082015260400190565b601281527f5245454e5452414e43595f494c4c4547414c0000000000000000000000000000602082015260400190565b601381527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000602082015260400190565b602681527f475245415445525f4f525f455155414c5f544f5f32305f4c454e4754485f524560208201527f5155495245440000000000000000000000000000000000000000000000000000604082015260600190565b601081527f4f524445525f554e46494c4c41424c4500000000000000000000000000000000602082015260400190565b600e81527f494e56414c49445f53454e444552000000000000000000000000000000000000602082015260400190565b601881527f4e454741544956455f5350524541445f52455155495245440000000000000000602082015260400190565b601481527f494e56414c49445f54585f5349474e4154555245000000000000000000000000602082015260400190565b601181527f4c454e4754485f305f5245515549524544000000000000000000000000000000602082015260400190565b805160808301906149198482614336565b50602082015161492c6020850182614336565b50604082015161493f6040850182614336565b506060820151612e006060850182614336565b80516101208301906149648482614908565b5060208201516149776080850182614908565b506040820151612e00610100850182614336565b8051606083019061499c84826149c2565b5060208201516149af6020850182614336565b506040820151612e006040850182614336565b61432781614e25565b602081016124eb828461431e565b61010081016149e8828b61431e565b6149f5602083018a61431e565b614a026040830189614336565b614a0f6060830188614336565b614a1c6080830187614336565b614a2960a0830186614336565b81810360c0830152614a3b8185614348565b905081810360e0830152614a4f8184614348565b9a9950505050505050505050565b60608101614a6b828661431e565b8181036020830152614a7d8185614348565b90508181036040830152614a918184614348565b95945050505050565b602081016124eb828461432d565b602081016124eb8284614336565b60608101614ac48286614336565b614ad1602083018561431e565b8181036040830152614a918184614348565b60408101614af18285614336565b8181036020830152612c698184614348565b60808101614b118287614336565b614b1e60208301866149c2565b614b2b6040830185614336565b614a916060830184614336565b60408101614b46828561433f565b610f74602083018461431e565b60208082528101610f748184614348565b602081016124eb828461437d565b602080825281016124eb81614386565b602080825281016124eb816143b6565b602080825281016124eb816143e6565b602080825281016124eb81614416565b602080825281016124eb8161446c565b602080825281016124eb8161449c565b602080825281016124eb816144cc565b602080825281016124eb816144fc565b602080825281016124eb8161452c565b602080825281016124eb8161455c565b602080825281016124eb8161458c565b602080825281016124eb816145bc565b602080825281016124eb816145ec565b602080825281016124eb8161461c565b602080825281016124eb81614672565b602080825281016124eb816146a2565b602080825281016124eb816146d2565b602080825281016124eb81614702565b602080825281016124eb81614732565b602080825281016124eb81614762565b602080825281016124eb81614792565b602080825281016124eb816147c2565b602080825281016124eb81614818565b602080825281016124eb81614848565b602080825281016124eb81614878565b602080825281016124eb816148a8565b602080825281016124eb816148d8565b608081016124eb8284614908565b61012081016124eb8284614952565b606081016124eb828461498b565b60405181810167ffffffffffffffff81118282101715614d6c57600080fd5b604052919050565b600067ffffffffffffffff821115614d8b57600080fd5b5060209081020190565b600067ffffffffffffffff821115614dac57600080fd5b506020601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160190565b5190565b73ffffffffffffffffffffffffffffffffffffffff1690565b151590565b90565b7fffffffff000000000000000000000000000000000000000000000000000000001690565b60ff1690565b60006124eb82614ddf565b82818337506000910152565b60005b83811015614e5d578181015183820152602001614e45565b83811115612e005750506000910152565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016905600a265627a7a723058200bd2eaba4ff39a570e39f1d59c5028c5276506c4ca9f20566cd5328a8887d16a6c6578706572696d656e74616cf50037",
- "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1B6 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x2624B2D9 DUP2 EQ PUSH2 0x1BB JUMPI DUP1 PUSH4 0x288CDC91 EQ PUSH2 0x1E6 JUMPI DUP1 PUSH4 0x297BB70B EQ PUSH2 0x206 JUMPI DUP1 PUSH4 0x2AC12622 EQ PUSH2 0x233 JUMPI DUP1 PUSH4 0x3683EF8E EQ PUSH2 0x260 JUMPI DUP1 PUSH4 0x3C28D861 EQ PUSH2 0x282 JUMPI DUP1 PUSH4 0x3E228BAE EQ PUSH2 0x2AF JUMPI DUP1 PUSH4 0x3FD3C997 EQ PUSH2 0x2CF JUMPI DUP1 PUSH4 0x4AC14782 EQ PUSH2 0x2FC JUMPI DUP1 PUSH4 0x4D0AE546 EQ PUSH2 0x31C JUMPI DUP1 PUSH4 0x4F9559B1 EQ PUSH2 0x33C JUMPI DUP1 PUSH4 0x50DDE190 EQ PUSH2 0x35C JUMPI DUP1 PUSH4 0x60704108 EQ PUSH2 0x37C JUMPI DUP1 PUSH4 0x642F2EAF EQ PUSH2 0x3A9 JUMPI DUP1 PUSH4 0x64A3BC15 EQ PUSH2 0x3C9 JUMPI DUP1 PUSH4 0x77FCCE68 EQ PUSH2 0x3E9 JUMPI DUP1 PUSH4 0x7B8E3514 EQ PUSH2 0x409 JUMPI DUP1 PUSH4 0x7E1D9808 EQ PUSH2 0x429 JUMPI DUP1 PUSH4 0x82C174D0 EQ PUSH2 0x449 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x469 JUMPI DUP1 PUSH4 0x93634702 EQ PUSH2 0x47E JUMPI DUP1 PUSH4 0xA3E20380 EQ PUSH2 0x49E JUMPI DUP1 PUSH4 0xB4BE83D5 EQ PUSH2 0x4BE JUMPI DUP1 PUSH4 0xBFC8BFCE EQ PUSH2 0x4DE JUMPI DUP1 PUSH4 0xC585BB93 EQ PUSH2 0x4FE JUMPI DUP1 PUSH4 0xC75E0A81 EQ PUSH2 0x51E JUMPI DUP1 PUSH4 0xD46B02C3 EQ PUSH2 0x54B JUMPI DUP1 PUSH4 0xD9BFA73E EQ PUSH2 0x56B JUMPI DUP1 PUSH4 0xDB123B1A EQ PUSH2 0x58B JUMPI DUP1 PUSH4 0xDD1C7D18 EQ PUSH2 0x5AD JUMPI DUP1 PUSH4 0xE306F779 EQ PUSH2 0x5CD JUMPI DUP1 PUSH4 0xE5FA431B EQ PUSH2 0x5E2 JUMPI DUP1 PUSH4 0xEEA086BA EQ PUSH2 0x602 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x617 JUMPI DUP1 PUSH4 0xFFA1AD74 EQ PUSH2 0x637 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1D0 PUSH2 0x64C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1DD SWAP2 SWAP1 PUSH2 0x4AA8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1D0 PUSH2 0x201 CALLDATASIZE PUSH1 0x4 PUSH2 0x400B JUMP JUMPDEST PUSH2 0x7A0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x212 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x226 PUSH2 0x221 CALLDATASIZE PUSH1 0x4 PUSH2 0x3F10 JUMP JUMPDEST PUSH2 0x7B2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1DD SWAP2 SWAP1 PUSH2 0x4D22 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x23F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x253 PUSH2 0x24E CALLDATASIZE PUSH1 0x4 PUSH2 0x400B JUMP JUMPDEST PUSH2 0x842 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1DD SWAP2 SWAP1 PUSH2 0x4A9A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x26C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x280 PUSH2 0x27B CALLDATASIZE PUSH1 0x4 PUSH2 0x4048 JUMP JUMPDEST PUSH2 0x857 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x28E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A2 PUSH2 0x29D CALLDATASIZE PUSH1 0x4 PUSH2 0x417C JUMP JUMPDEST PUSH2 0x930 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1DD SWAP2 SWAP1 PUSH2 0x4D30 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x226 PUSH2 0x2CA CALLDATASIZE PUSH1 0x4 PUSH2 0x423C JUMP JUMPDEST PUSH2 0xA1C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2EF PUSH2 0x2EA CALLDATASIZE PUSH1 0x4 PUSH2 0x410B JUMP JUMPDEST PUSH2 0xC2C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1DD SWAP2 SWAP1 PUSH2 0x4B64 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x308 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x280 PUSH2 0x317 CALLDATASIZE PUSH1 0x4 PUSH2 0x3EDB JUMP JUMPDEST PUSH2 0xC54 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x328 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x226 PUSH2 0x337 CALLDATASIZE PUSH1 0x4 PUSH2 0x3F10 JUMP JUMPDEST PUSH2 0xC8C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x348 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x280 PUSH2 0x357 CALLDATASIZE PUSH1 0x4 PUSH2 0x400B JUMP JUMPDEST PUSH2 0xD13 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x368 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x226 PUSH2 0x377 CALLDATASIZE PUSH1 0x4 PUSH2 0x3F10 JUMP JUMPDEST PUSH2 0xE37 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x388 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x39C PUSH2 0x397 CALLDATASIZE PUSH1 0x4 PUSH2 0x410B JUMP JUMPDEST PUSH2 0xEBE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1DD SWAP2 SWAP1 PUSH2 0x49CB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x253 PUSH2 0x3C4 CALLDATASIZE PUSH1 0x4 PUSH2 0x400B JUMP JUMPDEST PUSH2 0xF0C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x226 PUSH2 0x3E4 CALLDATASIZE PUSH1 0x4 PUSH2 0x423C JUMP JUMPDEST PUSH2 0xF21 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x280 PUSH2 0x404 CALLDATASIZE PUSH1 0x4 PUSH2 0x3EAB JUMP JUMPDEST PUSH2 0xF7B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x415 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x253 PUSH2 0x424 CALLDATASIZE PUSH1 0x4 PUSH2 0x3E71 JUMP JUMPDEST PUSH2 0x1026 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x435 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x226 PUSH2 0x444 CALLDATASIZE PUSH1 0x4 PUSH2 0x3FA4 JUMP JUMPDEST PUSH2 0x1046 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x455 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x253 PUSH2 0x464 CALLDATASIZE PUSH1 0x4 PUSH2 0x4029 JUMP JUMPDEST PUSH2 0x1117 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x475 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x39C PUSH2 0x1137 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x48A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x253 PUSH2 0x499 CALLDATASIZE PUSH1 0x4 PUSH2 0x40B0 JUMP JUMPDEST PUSH2 0x1153 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x226 PUSH2 0x4B9 CALLDATASIZE PUSH1 0x4 PUSH2 0x3FA4 JUMP JUMPDEST PUSH2 0x1979 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x226 PUSH2 0x4D9 CALLDATASIZE PUSH1 0x4 PUSH2 0x423C JUMP JUMPDEST PUSH2 0x1A89 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x280 PUSH2 0x4F9 CALLDATASIZE PUSH1 0x4 PUSH2 0x4285 JUMP JUMPDEST PUSH2 0x1B0D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x50A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x280 PUSH2 0x519 CALLDATASIZE PUSH1 0x4 PUSH2 0x3E53 JUMP JUMPDEST PUSH2 0x1D88 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x52A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x53E PUSH2 0x539 CALLDATASIZE PUSH1 0x4 PUSH2 0x4147 JUMP JUMPDEST PUSH2 0x1FB3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1DD SWAP2 SWAP1 PUSH2 0x4D3F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x557 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x280 PUSH2 0x566 CALLDATASIZE PUSH1 0x4 PUSH2 0x4147 JUMP JUMPDEST PUSH2 0x20AE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x577 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1D0 PUSH2 0x586 CALLDATASIZE PUSH1 0x4 PUSH2 0x3E71 JUMP JUMPDEST PUSH2 0x20D9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x597 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5A0 PUSH2 0x20F6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1DD SWAP2 SWAP1 PUSH2 0x4B53 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x226 PUSH2 0x5C8 CALLDATASIZE PUSH1 0x4 PUSH2 0x3FA4 JUMP JUMPDEST PUSH2 0x21A2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1D0 PUSH2 0x2268 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x226 PUSH2 0x5FD CALLDATASIZE PUSH1 0x4 PUSH2 0x3FA4 JUMP JUMPDEST PUSH2 0x226E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x60E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x39C PUSH2 0x2342 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x623 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x280 PUSH2 0x632 CALLDATASIZE PUSH1 0x4 PUSH2 0x3E53 JUMP JUMPDEST PUSH2 0x235E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x643 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5A0 PUSH2 0x240F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x454950373132446F6D61696E2800000000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x737472696E67206E616D652C0000000000000000000000000000000000000000 PUSH1 0x2D DUP4 ADD MSTORE PUSH32 0x737472696E672076657273696F6E2C0000000000000000000000000000000000 PUSH1 0x39 DUP4 ADD MSTORE PUSH32 0x6164647265737320766572696679696E67436F6E747261637400000000000000 PUSH1 0x48 DUP4 ADD MSTORE PUSH32 0x2900000000000000000000000000000000000000000000000000000000000000 PUSH1 0x61 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x42 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x62 SWAP1 SWAP3 ADD SWAP3 DUP4 SWAP1 MSTORE DUP2 MLOAD SWAP2 SWAP3 SWAP2 DUP3 SWAP2 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x770 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x733 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 DUP2 JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x7BA PUSH2 0x3A79 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7C4 PUSH2 0x3A79 JUMP JUMPDEST PUSH1 0x0 SWAP2 POP JUMPDEST DUP6 MLOAD DUP3 LT ISZERO PUSH2 0x839 JUMPI PUSH2 0x822 DUP7 DUP4 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x7E3 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP7 DUP5 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x7FB JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP7 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x813 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x1A89 JUMP JUMPDEST SWAP1 POP PUSH2 0x82E DUP4 DUP3 PUSH2 0x2446 JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x7C9 JUMP JUMPDEST POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x892 DUP5 DUP5 DUP5 DUP5 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY POP PUSH2 0x1153 SWAP5 POP POP POP POP POP JUMP JUMPDEST ISZERO ISZERO PUSH2 0x8D3 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4BF2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND DUP5 MSTORE SWAP2 SWAP1 MSTORE SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x938 PUSH2 0x3AA2 JUMP JUMPDEST PUSH2 0x940 PUSH2 0x3AD1 JUMP JUMPDEST PUSH2 0x948 PUSH2 0x3AD1 JUMP JUMPDEST PUSH2 0x160 DUP1 DUP9 ADD MLOAD PUSH2 0x140 DUP1 DUP10 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP9 ADD MLOAD SWAP1 DUP8 ADD MSTORE PUSH1 0x0 PUSH2 0x96B DUP9 PUSH2 0x1FB3 JUMP JUMPDEST SWAP3 POP PUSH2 0x976 DUP8 PUSH2 0x1FB3 JUMP JUMPDEST SWAP2 POP PUSH2 0x980 PUSH2 0x24A8 JUMP JUMPDEST SWAP1 POP PUSH2 0x98C DUP9 DUP9 PUSH2 0x24F1 JUMP JUMPDEST PUSH2 0x9A0 DUP9 DUP9 DUP6 PUSH1 0x40 ADD MLOAD DUP6 PUSH1 0x40 ADD MLOAD PUSH2 0x254D JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 ADD MLOAD SWAP1 SWAP5 POP PUSH2 0x9BA SWAP1 DUP10 SWAP1 DUP6 SWAP1 DUP5 SWAP1 DUP1 DUP12 PUSH2 0x2611 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP6 ADD MLOAD ADD MLOAD PUSH2 0x9D3 SWAP1 DUP9 SWAP1 DUP5 SWAP1 DUP5 SWAP1 DUP1 DUP11 PUSH2 0x2611 JUMP JUMPDEST PUSH2 0x9EC DUP9 DUP3 DUP6 PUSH1 0x20 ADD MLOAD DUP7 PUSH1 0x40 ADD MLOAD DUP9 PUSH1 0x0 ADD MLOAD PUSH2 0x282E JUMP JUMPDEST PUSH2 0xA05 DUP8 DUP3 DUP5 PUSH1 0x20 ADD MLOAD DUP6 PUSH1 0x40 ADD MLOAD DUP9 PUSH1 0x20 ADD MLOAD PUSH2 0x282E JUMP JUMPDEST PUSH2 0xA11 DUP9 DUP9 DUP4 DUP8 PUSH2 0x28DA JUMP JUMPDEST POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0xA24 PUSH2 0x3A79 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xB4BE83D500000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH1 0x60 PUSH1 0x4 DUP4 ADD DUP2 DUP2 MSTORE DUP9 MLOAD PUSH1 0x64 DUP6 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 DUP1 DUP12 ADD MLOAD PUSH1 0x84 DUP8 ADD MSTORE SWAP6 DUP11 ADD MLOAD PUSH1 0xA4 DUP7 ADD MSTORE SWAP2 DUP10 ADD MLOAD PUSH1 0xC4 DUP6 ADD MSTORE PUSH1 0x80 DUP10 ADD MLOAD PUSH1 0xE4 DUP6 ADD MSTORE PUSH1 0xA0 DUP10 ADD MLOAD PUSH2 0x104 DUP6 ADD MSTORE PUSH1 0xC0 DUP10 ADD MLOAD PUSH2 0x124 DUP6 ADD MSTORE PUSH1 0xE0 DUP10 ADD MLOAD PUSH2 0x144 DUP6 ADD MSTORE PUSH2 0x100 DUP10 ADD MLOAD PUSH2 0x164 DUP6 ADD MSTORE PUSH2 0x120 DUP10 ADD MLOAD PUSH2 0x184 DUP6 ADD MSTORE PUSH2 0x140 DUP10 ADD DUP1 MLOAD PUSH2 0x1A4 DUP7 ADD SWAP1 DUP2 MSTORE PUSH2 0x160 DUP12 ADD MLOAD PUSH2 0x1C4 DUP8 ADD MSTORE PUSH2 0x180 SWAP1 MSTORE MLOAD DUP1 MLOAD PUSH2 0x1E4 DUP7 ADD DUP2 SWAP1 MSTORE SWAP4 SWAP6 SWAP2 SWAP4 DUP5 SWAP4 SWAP3 PUSH1 0x24 DUP8 ADD SWAP3 DUP5 SWAP3 PUSH2 0x204 DUP10 ADD SWAP3 SWAP2 DUP3 ADD SWAP2 PUSH1 0x1F DUP3 ADD DIV PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xB27 JUMPI DUP4 MLOAD DUP6 MSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 SWAP1 SWAP4 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0xB09 JUMP JUMPDEST POP POP POP POP DUP2 DUP2 SUB PUSH2 0x160 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP13 ADD MLOAD DUP1 MLOAD DUP1 DUP4 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 SWAP2 DUP3 ADD SWAP2 PUSH1 0x1F DUP3 ADD DIV PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xB70 JUMPI DUP4 MLOAD DUP6 MSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 SWAP1 SWAP4 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0xB52 JUMP JUMPDEST POP POP POP DUP12 DUP5 MSTORE POP DUP5 DUP2 SUB PUSH1 0x20 SWAP4 DUP5 ADD SWAP1 DUP2 MSTORE DUP11 MLOAD DUP1 DUP4 MSTORE SWAP1 SWAP4 SWAP2 DUP3 ADD SWAP2 DUP12 DUP2 ADD SWAP2 SWAP1 PUSH1 0x1F DUP3 ADD DIV PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xBB8 JUMPI DUP4 MLOAD DUP6 MSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 SWAP1 SWAP4 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0xB9A JUMP JUMPDEST POP PUSH1 0x80 DUP11 DUP12 DUP7 SUB DUP13 ADDRESS GAS DELEGATECALL DUP1 DUP1 ISZERO PUSH2 0xBD7 JUMPI PUSH1 0x1 DUP2 EQ PUSH2 0xBF5 JUMPI PUSH2 0xC18 JUMP JUMPDEST PUSH1 0x0 DUP15 MSTORE PUSH1 0x0 PUSH1 0x20 DUP16 ADD MSTORE PUSH1 0x0 PUSH1 0x40 DUP16 ADD MSTORE PUSH1 0x0 PUSH1 0x60 DUP16 ADD MSTORE PUSH2 0xC18 JUMP JUMPDEST DUP12 MLOAD DUP15 MSTORE PUSH1 0x20 DUP13 ADD MLOAD PUSH1 0x20 DUP16 ADD MSTORE PUSH1 0x40 DUP13 ADD MLOAD PUSH1 0x40 DUP16 ADD MSTORE PUSH1 0x60 DUP13 ADD MLOAD PUSH1 0x60 DUP16 ADD MSTORE JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0xC88 JUMPI PUSH2 0xC80 DUP3 DUP3 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xC71 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x20AE JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0xC57 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0xC94 PUSH2 0x3A79 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC9E PUSH2 0x3A79 JUMP JUMPDEST PUSH1 0x0 SWAP2 POP JUMPDEST DUP6 MLOAD DUP3 LT ISZERO PUSH2 0x839 JUMPI PUSH2 0xCFC DUP7 DUP4 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xCBD JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP7 DUP5 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xCD5 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP7 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xCED JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0xF21 JUMP JUMPDEST SWAP1 POP PUSH2 0xD08 DUP4 DUP3 PUSH2 0x2446 JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH2 0xCA3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0xD21 PUSH2 0x24A8 JUMP JUMPDEST SWAP4 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND CALLER EQ PUSH2 0xD46 JUMPI CALLER PUSH2 0xD49 JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP6 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD SWAP1 SWAP4 POP PUSH1 0x1 DUP7 ADD SWAP3 POP SWAP1 POP DUP1 DUP3 GT PUSH2 0xDC0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4C72 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP9 AND DUP1 DUP5 MSTORE SWAP5 SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE MLOAD PUSH32 0x82AF639571738F4EBD4268FB0363D8957EBE1BBB9E78DBA5EBD69EED39B154F0 SWAP1 PUSH2 0xE28 SWAP1 DUP7 SWAP1 PUSH2 0x4AA8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP JUMP JUMPDEST PUSH2 0xE3F PUSH2 0x3A79 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE49 PUSH2 0x3A79 JUMP JUMPDEST PUSH1 0x0 SWAP2 POP JUMPDEST DUP6 MLOAD DUP3 LT ISZERO PUSH2 0x839 JUMPI PUSH2 0xEA7 DUP7 DUP4 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xE68 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP7 DUP5 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xE80 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP7 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xE98 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0xA1C JUMP JUMPDEST SWAP1 POP PUSH2 0xEB3 DUP4 DUP3 PUSH2 0x2446 JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH2 0xE4E JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0xF29 PUSH2 0x3A79 JUMP JUMPDEST PUSH2 0xF34 DUP5 DUP5 DUP5 PUSH2 0x1A89 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD SWAP1 SWAP2 POP DUP4 EQ PUSH2 0xF74 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4C92 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF85 PUSH2 0x24A8 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP10 AND DUP1 DUP5 MSTORE SWAP5 SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP8 ISZERO ISZERO OR SWAP1 SSTORE MLOAD SWAP3 SWAP4 POP SWAP1 SWAP2 PUSH32 0xA8656E308026EEABCE8F0BC18048433252318AB80AC79DA0B3D3D8697DFBA891 SWAP1 PUSH2 0x1019 SWAP1 DUP7 SWAP1 PUSH2 0x4A9A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x104E PUSH2 0x3A79 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 PUSH2 0x105B PUSH2 0x3A79 JUMP JUMPDEST DUP8 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x106A JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x160 ADD MLOAD SWAP4 POP PUSH1 0x0 SWAP3 POP JUMPDEST DUP8 MLOAD DUP4 LT ISZERO PUSH2 0x110C JUMPI DUP4 DUP9 DUP5 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1098 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x160 ADD DUP2 SWAP1 MSTORE POP PUSH2 0x10B8 DUP8 DUP7 PUSH1 0x20 ADD MLOAD PUSH2 0x2ABA JUMP JUMPDEST SWAP2 POP PUSH2 0x10E4 DUP9 DUP5 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x10CB JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP4 DUP9 DUP7 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x813 JUMPI INVALID JUMPDEST SWAP1 POP PUSH2 0x10F0 DUP6 DUP3 PUSH2 0x2446 JUMP JUMPDEST DUP7 DUP6 PUSH1 0x20 ADD MLOAD EQ ISZERO PUSH2 0x1101 JUMPI PUSH2 0x110C JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 PUSH2 0x1080 JUMP JUMPDEST POP POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP10 MLOAD GT ISZERO ISZERO PUSH2 0x119C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4C62 JUMP JUMPDEST PUSH2 0x11A5 DUP10 PUSH2 0x2ACC JUMP JUMPDEST PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DIV SWAP7 POP PUSH1 0x9 PUSH1 0xFF DUP9 AND LT PUSH2 0x1207 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4BB2 JUMP JUMPDEST DUP7 PUSH1 0xFF AND PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x1216 JUMPI INVALID JUMPDEST SWAP6 POP PUSH1 0x0 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x1226 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x125E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4C52 JUMP JUMPDEST PUSH1 0x1 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x126C JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x12B4 JUMPI DUP9 MLOAD ISZERO PUSH2 0x12AB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4D12 JUMP JUMPDEST PUSH1 0x0 SWAP8 POP PUSH2 0x196B JUMP JUMPDEST PUSH1 0x2 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x12C2 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x13FD JUMPI DUP9 MLOAD PUSH1 0x41 EQ PUSH2 0x1303 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4B72 JUMP JUMPDEST DUP9 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1312 JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV DUP2 MUL DIV SWAP5 POP PUSH2 0x1352 DUP10 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x2B90 AND JUMP JUMPDEST SWAP4 POP PUSH2 0x1365 DUP10 PUSH1 0x21 PUSH4 0xFFFFFFFF PUSH2 0x2B90 AND JUMP JUMPDEST SWAP3 POP PUSH1 0x1 DUP12 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH2 0x138A SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4B03 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 PUSH1 0x0 DUP7 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x13AE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 DUP2 AND SWAP1 DUP3 AND EQ SWAP10 POP SWAP3 POP PUSH2 0x196B SWAP1 POP JUMP JUMPDEST PUSH1 0x3 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x140B JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x15B1 JUMPI DUP9 MLOAD PUSH1 0x41 EQ PUSH2 0x144C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4B72 JUMP JUMPDEST DUP9 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x145B JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV DUP2 MUL DIV SWAP5 POP PUSH2 0x149B DUP10 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x2B90 AND JUMP JUMPDEST SWAP4 POP PUSH2 0x14AE DUP10 PUSH1 0x21 PUSH4 0xFFFFFFFF PUSH2 0x2B90 AND JUMP JUMPDEST SWAP3 POP PUSH1 0x1 DUP12 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP1 PUSH32 0x19457468657265756D205369676E6564204D6573736167653A0A333200000000 DUP2 MSTORE POP PUSH1 0x1C ADD DUP3 PUSH1 0x0 NOT AND PUSH1 0x0 NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x154F JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1512 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP5 ADD DUP3 SWAP1 SUB DUP3 KECCAK256 PUSH1 0x0 DUP4 MSTORE SWAP2 ADD SWAP3 DUP4 SWAP1 MSTORE PUSH2 0x138A SWAP5 POP SWAP3 POP DUP10 SWAP2 DUP10 SWAP2 POP DUP9 SWAP1 PUSH2 0x4B03 JUMP JUMPDEST PUSH1 0x4 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x15BF JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x161E JUMPI DUP9 MLOAD ISZERO PUSH2 0x15FE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4D12 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND CALLER EQ SWAP8 POP PUSH2 0x196B JUMP JUMPDEST PUSH1 0x5 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x162C JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x16DF JUMPI PUSH1 0x40 MLOAD PUSH32 0x1626BA7E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND SWAP1 PUSH4 0x1626BA7E SWAP1 PUSH2 0x1686 SWAP1 DUP15 SWAP1 DUP14 SWAP1 PUSH1 0x4 ADD PUSH2 0x4AE3 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x16A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x16B4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0x16D8 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x3FED JUMP JUMPDEST SWAP8 POP PUSH2 0x196B JUMP JUMPDEST PUSH1 0x6 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x16ED JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x179A JUMPI PUSH2 0x16FC DUP10 PUSH2 0x2BDB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP13 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP6 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x1744 JUMPI PUSH1 0x0 SWAP8 POP PUSH2 0x196B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x9363470200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x93634702 SWAP1 PUSH2 0x1686 SWAP1 DUP15 SWAP1 DUP15 SWAP1 DUP15 SWAP1 PUSH1 0x4 ADD PUSH2 0x4AB6 JUMP JUMPDEST PUSH1 0x7 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x17A8 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x17E8 JUMPI PUSH1 0x0 DUP12 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP15 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP8 POP PUSH2 0x196B JUMP JUMPDEST PUSH1 0x8 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x17F6 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x1939 JUMPI DUP9 MLOAD PUSH1 0x41 EQ PUSH2 0x1837 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4B72 JUMP JUMPDEST DUP9 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1846 JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV DUP2 MUL DIV SWAP5 POP PUSH2 0x1886 DUP10 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x2B90 AND JUMP JUMPDEST SWAP4 POP PUSH2 0x1899 DUP10 PUSH1 0x21 PUSH4 0xFFFFFFFF PUSH2 0x2B90 AND JUMP JUMPDEST SWAP3 POP PUSH1 0x1 DUP12 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP1 PUSH32 0x19457468657265756D205369676E6564204D6573736167653A0A200000000000 DUP2 MSTORE POP PUSH1 0x1B ADD DUP3 PUSH1 0x0 NOT AND PUSH1 0x0 NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x20 DUP4 LT PUSH2 0x154F JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1512 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4BB2 JUMP JUMPDEST POP POP POP POP POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x1981 PUSH2 0x3A79 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1990 PUSH2 0x3A79 JUMP JUMPDEST DUP9 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x199F JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x140 ADD MLOAD SWAP5 POP PUSH1 0x0 SWAP4 POP JUMPDEST DUP9 MLOAD DUP5 LT ISZERO PUSH2 0x1A7D JUMPI DUP5 DUP10 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x19CD JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MLOAD PUSH2 0x140 ADD MSTORE DUP6 MLOAD PUSH2 0x19E9 SWAP1 DUP10 SWAP1 PUSH2 0x2ABA JUMP JUMPDEST SWAP3 POP PUSH2 0x1A2C DUP10 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x19FC JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0xA0 ADD MLOAD DUP11 DUP7 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1A18 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0x80 ADD MLOAD DUP6 PUSH2 0x2C54 JUMP JUMPDEST SWAP2 POP PUSH2 0x1A58 DUP10 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1A3F JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP4 DUP10 DUP8 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xE98 JUMPI INVALID JUMPDEST SWAP1 POP PUSH2 0x1A64 DUP7 DUP3 PUSH2 0x2446 JUMP JUMPDEST DUP6 MLOAD DUP9 EQ ISZERO PUSH2 0x1A72 JUMPI PUSH2 0x1A7D JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP4 ADD SWAP3 PUSH2 0x19B5 JUMP JUMPDEST POP POP POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x1A91 PUSH2 0x3A79 JUMP JUMPDEST PUSH2 0x1A99 PUSH2 0x3AD1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1AA7 DUP9 PUSH2 0x1FB3 JUMP JUMPDEST SWAP4 POP PUSH2 0x1AB1 PUSH2 0x24A8 JUMP JUMPDEST SWAP3 POP PUSH2 0x1AC5 DUP9 PUSH1 0xA0 ADD MLOAD DUP6 PUSH1 0x40 ADD MLOAD PUSH2 0x2ABA JUMP JUMPDEST SWAP2 POP PUSH2 0x1AD1 DUP8 DUP4 PUSH2 0x2C71 JUMP JUMPDEST SWAP1 POP PUSH2 0x1AE1 DUP9 DUP6 DUP6 DUP11 DUP6 DUP12 PUSH2 0x2611 JUMP JUMPDEST PUSH2 0x1AEB DUP9 DUP3 PUSH2 0x2C87 JUMP JUMPDEST SWAP5 POP PUSH2 0x1B02 DUP9 DUP5 DUP7 PUSH1 0x20 ADD MLOAD DUP8 PUSH1 0x40 ADD MLOAD DUP10 PUSH2 0x282E JUMP JUMPDEST PUSH2 0x110C DUP9 DUP5 DUP8 PUSH2 0x2CF1 JUMP JUMPDEST PUSH1 0x9 SLOAD PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x1B60 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4CA2 JUMP JUMPDEST PUSH2 0x1BA3 PUSH2 0x1B9E DUP9 DUP9 DUP9 DUP9 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY POP PUSH2 0x2E06 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x3047 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF AND ISZERO PUSH2 0x1BEF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4BE2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND CALLER EQ PUSH2 0x1CC0 JUMPI PUSH2 0x1C47 DUP2 DUP8 DUP6 DUP6 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY POP PUSH2 0x1153 SWAP5 POP POP POP POP POP JUMP JUMPDEST ISZERO ISZERO PUSH2 0x1C7F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4D02 JUMP JUMPDEST PUSH1 0x9 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND OR SWAP1 SSTORE JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD ADDRESS SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP1 DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY DUP3 ADD SWAP2 POP POP SWAP3 POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP ISZERO ISZERO PUSH2 0x1D57 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4C12 JUMP JUMPDEST POP POP PUSH1 0x9 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x1DE0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4CB2 JUMP JUMPDEST DUP4 SWAP3 POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xAE25532E PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH29 0x100000000000000000000000000000000000000000000000000000000 MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1E47 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1E5B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0x1E7F SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x4129 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP3 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP1 ISZERO PUSH2 0x1F04 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4B92 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND OR SWAP1 SSTORE MLOAD PUSH32 0xD2C6B762299C609BDB96520B58A49BFB80186934D4F71A86A367571A15C03194 SWAP1 PUSH2 0x1FA5 SWAP1 DUP5 SWAP1 DUP8 SWAP1 PUSH2 0x4B38 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP JUMP JUMPDEST PUSH2 0x1FBB PUSH2 0x3AD1 JUMP JUMPDEST PUSH2 0x1FC4 DUP3 PUSH2 0x31C7 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x80 DUP3 ADD MLOAD ISZERO ISZERO PUSH2 0x1FE1 JUMPI PUSH1 0x1 JUMPDEST PUSH1 0xFF AND DUP2 MSTORE PUSH2 0xF07 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MLOAD ISZERO ISZERO PUSH2 0x1FF3 JUMPI PUSH1 0x2 PUSH2 0x1FD7 JUMP JUMPDEST PUSH2 0x100 DUP3 ADD MLOAD TIMESTAMP LT PUSH2 0x2006 JUMPI PUSH1 0x4 PUSH2 0x1FD7 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x202A JUMPI PUSH1 0x6 PUSH2 0x1FD7 JUMP JUMPDEST PUSH2 0x120 DUP3 ADD MLOAD DUP3 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x60 DUP9 ADD MLOAD SWAP1 SWAP5 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD GT ISZERO PUSH2 0x2077 JUMPI PUSH1 0x6 PUSH2 0x1FD7 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SLOAD SWAP1 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xA0 DUP4 ADD MLOAD GT PUSH2 0x20A5 JUMPI PUSH1 0x5 PUSH2 0x1FD7 JUMP JUMPDEST PUSH1 0x3 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x20B6 PUSH2 0x3AD1 JUMP JUMPDEST PUSH2 0x20BF DUP3 PUSH2 0x1FB3 JUMP JUMPDEST SWAP1 POP PUSH2 0x20CB DUP3 DUP3 PUSH2 0x31D5 JUMP JUMPDEST PUSH2 0xC88 DUP3 DUP3 PUSH1 0x20 ADD MLOAD PUSH2 0x32EC JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x219A JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x216F JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x219A JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x217D JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST PUSH2 0x21AA PUSH2 0x3A79 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 PUSH2 0x21B7 PUSH2 0x3A79 JUMP JUMPDEST DUP8 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x21C6 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x160 ADD MLOAD SWAP4 POP PUSH1 0x0 SWAP3 POP JUMPDEST DUP8 MLOAD DUP4 LT ISZERO PUSH2 0x110C JUMPI DUP4 DUP9 DUP5 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x21F4 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x160 ADD DUP2 SWAP1 MSTORE POP PUSH2 0x2214 DUP8 DUP7 PUSH1 0x20 ADD MLOAD PUSH2 0x2ABA JUMP JUMPDEST SWAP2 POP PUSH2 0x2240 DUP9 DUP5 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x2227 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP4 DUP9 DUP7 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xE98 JUMPI INVALID JUMPDEST SWAP1 POP PUSH2 0x224C DUP6 DUP3 PUSH2 0x2446 JUMP JUMPDEST DUP7 DUP6 PUSH1 0x20 ADD MLOAD EQ ISZERO PUSH2 0x225D JUMPI PUSH2 0x110C JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 PUSH2 0x21DC JUMP JUMPDEST PUSH1 0x1 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2276 PUSH2 0x3A79 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x2285 PUSH2 0x3A79 JUMP JUMPDEST DUP9 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x2294 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x140 ADD MLOAD SWAP5 POP PUSH1 0x0 SWAP4 POP JUMPDEST DUP9 MLOAD DUP5 LT ISZERO PUSH2 0x1A7D JUMPI DUP5 DUP10 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x22C2 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MLOAD PUSH2 0x140 ADD MSTORE DUP6 MLOAD PUSH2 0x22DE SWAP1 DUP10 SWAP1 PUSH2 0x2ABA JUMP JUMPDEST SWAP3 POP PUSH2 0x22F1 DUP10 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x19FC JUMPI INVALID JUMPDEST SWAP2 POP PUSH2 0x231D DUP10 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x2304 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP4 DUP10 DUP8 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x813 JUMPI INVALID JUMPDEST SWAP1 POP PUSH2 0x2329 DUP7 DUP3 PUSH2 0x2446 JUMP JUMPDEST DUP6 MLOAD DUP9 EQ ISZERO PUSH2 0x2337 JUMPI PUSH2 0x1A7D JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP4 ADD SWAP3 PUSH2 0x22AA JUMP JUMPDEST PUSH1 0x9 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x23AF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4CB2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0x240C JUMPI PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND OR SWAP1 SSTORE JUMPDEST POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0xB DUP2 MSTORE PUSH32 0x322E302E312D616C706861000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD PUSH2 0x2454 SWAP2 SWAP1 PUSH2 0x3393 JUMP JUMPDEST DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MLOAD PUSH2 0x246A SWAP2 SWAP1 PUSH2 0x3393 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MLOAD PUSH2 0x2483 SWAP2 SWAP1 PUSH2 0x3393 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MLOAD PUSH2 0x249C SWAP2 SWAP1 PUSH2 0x3393 JUMP JUMPDEST PUSH1 0x60 SWAP1 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x9 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x24E9 JUMPI PUSH1 0x9 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x24EB JUMP JUMPDEST CALLER JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x2503 DUP3 PUSH1 0xA0 ADD MLOAD DUP3 PUSH1 0xA0 ADD MLOAD PUSH2 0x33A2 JUMP JUMPDEST PUSH2 0x2515 DUP4 PUSH1 0x80 ADD MLOAD DUP4 PUSH1 0x80 ADD MLOAD PUSH2 0x33A2 JUMP JUMPDEST LT ISZERO PUSH2 0xC88 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4CF2 JUMP JUMPDEST PUSH2 0x2555 PUSH2 0x3AA2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x2569 DUP10 PUSH1 0xA0 ADD MLOAD DUP9 PUSH2 0x2ABA JUMP JUMPDEST SWAP4 POP PUSH2 0x2579 DUP9 PUSH1 0xA0 ADD MLOAD DUP8 PUSH2 0x2ABA JUMP JUMPDEST SWAP3 POP PUSH2 0x2589 DUP4 DUP10 PUSH1 0x80 ADD MLOAD PUSH2 0x33A2 JUMP JUMPDEST PUSH2 0x2597 DUP6 DUP11 PUSH1 0xA0 ADD MLOAD PUSH2 0x33A2 JUMP JUMPDEST GT PUSH2 0x25B9 JUMPI DUP4 SWAP2 POP PUSH2 0x25B2 DUP9 PUSH1 0xA0 ADD MLOAD DUP10 PUSH1 0x80 ADD MLOAD DUP5 PUSH2 0x2C54 JUMP JUMPDEST SWAP1 POP PUSH2 0x25D2 JUMP JUMPDEST DUP3 SWAP1 POP PUSH2 0x25CF DUP9 PUSH1 0x80 ADD MLOAD DUP10 PUSH1 0xA0 ADD MLOAD DUP4 PUSH2 0x2C54 JUMP JUMPDEST SWAP2 POP JUMPDEST PUSH2 0x25DC DUP10 DUP4 PUSH2 0x2C87 JUMP JUMPDEST DUP6 MSTORE PUSH2 0x25E8 DUP9 DUP3 PUSH2 0x2C87 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP8 ADD DUP3 SWAP1 MSTORE DUP7 MLOAD MLOAD SWAP2 ADD MLOAD PUSH2 0x2600 SWAP2 SWAP1 PUSH2 0x2ABA JUMP JUMPDEST PUSH1 0x40 DUP7 ADD MSTORE POP POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP5 MLOAD PUSH1 0xFF AND PUSH1 0x3 EQ PUSH2 0x264F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4CD2 JUMP JUMPDEST DUP3 ISZERO ISZERO PUSH2 0x2688 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4C22 JUMP JUMPDEST PUSH1 0x60 DUP7 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x26FB JUMPI PUSH1 0x60 DUP7 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x26FB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4CE2 JUMP JUMPDEST PUSH1 0x20 DUP7 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x2786 JUMPI DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH1 0x20 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO ISZERO PUSH2 0x2786 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4B82 JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MLOAD ISZERO ISZERO PUSH2 0x27DC JUMPI PUSH2 0x27A4 DUP6 PUSH1 0x20 ADD MLOAD DUP8 PUSH1 0x0 ADD MLOAD DUP4 PUSH2 0x1153 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x27DC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4BC2 JUMP JUMPDEST PUSH2 0x27EF DUP3 DUP8 PUSH1 0xA0 ADD MLOAD DUP9 PUSH1 0x80 ADD MLOAD PUSH2 0x33C6 JUMP JUMPDEST ISZERO PUSH2 0x2826 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4C02 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x283C DUP3 DUP3 PUSH1 0x20 ADD MLOAD PUSH2 0x3393 JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP3 SWAP1 SWAP3 SSTORE DUP7 DUP2 ADD MLOAD DUP8 MLOAD DUP5 MLOAD SWAP4 DUP6 ADD MLOAD DUP6 DUP5 ADD MLOAD PUSH1 0x60 DUP8 ADD MLOAD PUSH2 0x140 DUP13 ADD MLOAD PUSH2 0x160 DUP14 ADD MLOAD SWAP7 MLOAD DUP12 SWAP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP8 DUP9 AND SWAP9 SWAP8 SWAP1 SWAP7 AND SWAP7 PUSH32 0xBCC4C97732E47D9946F229EDB95F5B6323F601300E4690DE719993F3C371129 SWAP7 PUSH2 0x28CB SWAP7 DUP16 SWAP7 CALLER SWAP7 SWAP3 SWAP6 SWAP2 SWAP5 SWAP1 SWAP4 SWAP1 PUSH2 0x49D9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x2984 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2959 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x2984 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x2967 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP PUSH2 0x29AC DUP6 PUSH2 0x140 ADD MLOAD DUP7 PUSH1 0x0 ADD MLOAD DUP7 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH1 0x20 ADD MLOAD PUSH2 0x3417 JUMP JUMPDEST PUSH2 0x140 DUP5 ADD MLOAD DUP5 MLOAD DUP7 MLOAD DUP5 MLOAD PUSH1 0x20 ADD MLOAD PUSH2 0x29C8 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3417 JUMP JUMPDEST PUSH2 0x29E1 DUP6 PUSH2 0x140 ADD MLOAD DUP7 PUSH1 0x0 ADD MLOAD DUP6 DUP6 PUSH1 0x40 ADD MLOAD PUSH2 0x3417 JUMP JUMPDEST PUSH2 0x29FD DUP2 DUP7 PUSH1 0x0 ADD MLOAD DUP8 PUSH1 0x40 ADD MLOAD DUP6 PUSH1 0x0 ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH2 0x3417 JUMP JUMPDEST PUSH2 0x2A19 DUP2 DUP6 PUSH1 0x0 ADD MLOAD DUP7 PUSH1 0x40 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH2 0x3417 JUMP JUMPDEST DUP4 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x2A83 JUMPI PUSH2 0x2A7E DUP2 DUP5 DUP8 PUSH1 0x40 ADD MLOAD PUSH2 0x2A79 DUP7 PUSH1 0x0 ADD MLOAD PUSH1 0x60 ADD MLOAD DUP8 PUSH1 0x20 ADD MLOAD PUSH1 0x60 ADD MLOAD PUSH2 0x3393 JUMP JUMPDEST PUSH2 0x3417 JUMP JUMPDEST PUSH2 0x2AB3 JUMP JUMPDEST PUSH2 0x2A9B DUP2 DUP5 DUP8 PUSH1 0x40 ADD MLOAD DUP6 PUSH1 0x0 ADD MLOAD PUSH1 0x60 ADD MLOAD PUSH2 0x3417 JUMP JUMPDEST PUSH2 0x2AB3 DUP2 DUP5 DUP7 PUSH1 0x40 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH1 0x60 ADD MLOAD PUSH2 0x3417 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 GT ISZERO PUSH2 0x2AC6 JUMPI INVALID JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 MLOAD GT ISZERO ISZERO PUSH2 0x2B0A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4C42 JUMP JUMPDEST DUP2 MLOAD DUP3 SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0x2B3A JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD DUP3 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP3 MSTORE POP PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x20 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x2BD2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST POP ADD PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x14 DUP3 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x2C1B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4CC2 JUMP JUMPDEST PUSH2 0x2C29 DUP3 PUSH1 0x14 DUP5 MLOAD SUB PUSH2 0x35A8 JUMP JUMPDEST DUP3 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC ADD SWAP1 SWAP3 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2C69 PUSH2 0x2C63 DUP6 DUP5 PUSH2 0x33A2 JUMP JUMPDEST DUP5 PUSH2 0x3609 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x2C80 JUMPI DUP2 PUSH2 0xF74 JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x2C8F PUSH2 0x3A79 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0x80 DUP5 ADD MLOAD PUSH2 0x2CAB SWAP2 DUP5 SWAP2 PUSH2 0x2C54 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0xA0 DUP5 ADD MLOAD PUSH1 0xC0 DUP6 ADD MLOAD PUSH2 0x2CC7 SWAP3 SWAP2 SWAP1 PUSH2 0x2C54 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0xA0 DUP5 ADD MLOAD PUSH1 0xE0 DUP6 ADD MLOAD PUSH2 0x2CE6 SWAP3 SWAP2 SWAP1 PUSH2 0x2C54 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x2D9B JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2D70 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x2D9B JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x2D7E JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP PUSH2 0x2DBB DUP5 PUSH2 0x140 ADD MLOAD DUP6 PUSH1 0x0 ADD MLOAD DUP6 DUP6 PUSH1 0x0 ADD MLOAD PUSH2 0x3417 JUMP JUMPDEST PUSH2 0x2DD4 DUP5 PUSH2 0x160 ADD MLOAD DUP5 DUP7 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x3417 JUMP JUMPDEST PUSH2 0x2DEC DUP2 DUP6 PUSH1 0x0 ADD MLOAD DUP7 PUSH1 0x40 ADD MLOAD DUP6 PUSH1 0x40 ADD MLOAD PUSH2 0x3417 JUMP JUMPDEST PUSH2 0x2E00 DUP2 DUP5 DUP7 PUSH1 0x40 ADD MLOAD DUP6 PUSH1 0x60 ADD MLOAD PUSH2 0x3417 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x5A65726F45785472616E73616374696F6E280000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x75696E743235362073616C742C00000000000000000000000000000000000000 PUSH1 0x32 DUP4 ADD MSTORE PUSH32 0x61646472657373207369676E6572416464726573732C00000000000000000000 PUSH1 0x3F DUP4 ADD MSTORE PUSH32 0x6279746573206461746100000000000000000000000000000000000000000000 PUSH1 0x55 DUP4 ADD MSTORE PUSH32 0x2900000000000000000000000000000000000000000000000000000000000000 PUSH1 0x5F DUP4 ADD MSTORE DUP3 MLOAD DUP1 DUP4 SUB DUP5 ADD DUP2 MSTORE PUSH1 0x60 SWAP1 SWAP3 ADD SWAP3 DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH1 0x0 SWAP4 DUP5 SWAP4 DUP5 SWAP4 SWAP1 SWAP3 DUP3 SWAP2 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x2F2F JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x2EF2 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP4 ADD DUP2 SWAP1 SUB DUP2 KECCAK256 DUP10 MLOAD SWAP1 SWAP8 POP DUP10 SWAP6 POP SWAP1 SWAP4 POP DUP4 SWAP3 DUP6 ADD SWAP2 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x2FC5 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x2F88 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP5 ADD DUP3 SWAP1 SUB DUP3 KECCAK256 SWAP8 DUP3 MSTORE DUP2 ADD SWAP11 SWAP1 SWAP11 MSTORE POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP8 SWAP1 SWAP8 AND SWAP7 DUP9 ADD SWAP7 SWAP1 SWAP7 MSTORE POP POP PUSH1 0x60 DUP6 ADD MSTORE POP POP PUSH1 0x80 SWAP1 SWAP2 KECCAK256 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x1 SLOAD DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP5 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x30D3 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x3096 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP5 DUP6 MSTORE POP DUP4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP5 SUB DUP4 ADD DUP2 MSTORE SWAP3 DUP2 ADD SWAP1 DUP2 SWAP1 MSTORE DUP3 MLOAD SWAP3 SWAP4 POP SWAP2 DUP3 SWAP2 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x3177 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x313A JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 SWAP1 SWAP4 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP2 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP3 ADD DUP3 SWAP1 SUB SWAP1 SWAP2 KECCAK256 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x24EB PUSH2 0x1B9E DUP4 PUSH2 0x3620 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND PUSH1 0x3 EQ PUSH2 0x3216 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4CD2 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x3289 JUMPI PUSH1 0x60 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x3289 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4CE2 JUMP JUMPDEST PUSH2 0x3291 PUSH2 0x24A8 JUMP JUMPDEST DUP4 MLOAD SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND SWAP2 AND EQ PUSH2 0x32E7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4BD2 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 OR SWAP1 SSTORE DUP3 DUP2 ADD MLOAD DUP4 MLOAD PUSH2 0x140 DUP6 ADD MLOAD PUSH2 0x160 DUP7 ADD MLOAD SWAP4 MLOAD DUP6 SWAP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND SWAP5 SWAP4 SWAP1 SWAP4 AND SWAP3 PUSH32 0xDC47B3613D9FE400085F6DBDC99453462279057E6207385042827ED6B1A62CF7 SWAP3 PUSH2 0x3387 SWAP3 CALLER SWAP3 SWAP1 PUSH2 0x4A5D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0xF74 JUMPI INVALID JUMPDEST PUSH1 0x0 DUP3 DUP3 MUL DUP4 ISZERO DUP1 PUSH2 0x33BE JUMPI POP DUP3 DUP5 DUP3 DUP2 ISZERO ISZERO PUSH2 0x33BB JUMPI INVALID JUMPDEST DIV EQ JUMPDEST ISZERO ISZERO PUSH2 0xF74 JUMPI INVALID JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP5 DUP1 ISZERO ISZERO PUSH2 0x33D5 JUMPI INVALID JUMPDEST DUP7 DUP6 MULMOD SWAP2 POP DUP2 ISZERO ISZERO PUSH2 0x33EA JUMPI PUSH1 0x0 SWAP3 POP PUSH2 0x839 JUMP JUMPDEST PUSH2 0x3409 PUSH2 0x33FA DUP4 PUSH3 0xF4240 PUSH2 0x33A2 JUMP JUMPDEST PUSH2 0x3404 DUP9 DUP8 PUSH2 0x33A2 JUMP JUMPDEST PUSH2 0x3609 JUMP JUMPDEST PUSH2 0x3E8 LT SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 GT ISZERO PUSH2 0x2826 JUMPI DUP6 MLOAD PUSH1 0x3 LT PUSH2 0x345E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4C82 JUMP JUMPDEST POP POP PUSH1 0x20 DUP5 DUP2 ADD MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA SWAP1 SWAP3 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO ISZERO PUSH2 0x34E7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4C32 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH7 0xFFFFFFFFFFFE0 PUSH1 0x3F DUP9 MLOAD ADD AND DUP1 PUSH1 0x84 ADD DUP3 ADD PUSH32 0xA85E59E400000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x80 PUSH1 0x4 DUP5 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x24 DUP5 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x44 DUP5 ADD MSTORE DUP6 PUSH1 0x64 DUP5 ADD MSTORE PUSH1 0x84 DUP4 ADD JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3583 JUMPI DUP10 MLOAD DUP2 MSTORE PUSH1 0x20 SWAP10 DUP11 ADD SWAP10 ADD PUSH2 0x356B JUMP JUMPDEST PUSH2 0x200 DUP5 DUP6 DUP5 SUB DUP7 PUSH1 0x0 DUP10 GAS CALL DUP1 ISZERO ISZERO PUSH2 0x359B JUMPI RETURNDATASIZE DUP6 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x14 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x35EA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8CA SWAP1 PUSH2 0x4CC2 JUMP JUMPDEST POP ADD PUSH1 0x14 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 DUP5 DUP2 ISZERO ISZERO PUSH2 0x3617 JUMPI INVALID JUMPDEST DIV SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x4F72646572280000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x61646472657373206D616B6572416464726573732C0000000000000000000000 PUSH1 0x26 DUP4 ADD MSTORE PUSH32 0x616464726573732074616B6572416464726573732C0000000000000000000000 PUSH1 0x3B DUP4 ADD MSTORE PUSH32 0x6164647265737320666565526563697069656E74416464726573732C00000000 PUSH1 0x50 DUP4 ADD MSTORE PUSH32 0x616464726573732073656E646572416464726573732C00000000000000000000 PUSH1 0x6C DUP4 ADD MSTORE PUSH32 0x75696E74323536206D616B65724173736574416D6F756E742C00000000000000 PUSH1 0x82 DUP4 ADD MSTORE PUSH32 0x75696E743235362074616B65724173736574416D6F756E742C00000000000000 PUSH1 0x9B DUP4 ADD MSTORE PUSH32 0x75696E74323536206D616B65724665652C000000000000000000000000000000 PUSH1 0xB4 DUP4 ADD MSTORE PUSH32 0x75696E743235362074616B65724665652C000000000000000000000000000000 PUSH1 0xC5 DUP4 ADD MSTORE PUSH32 0x75696E743235362065787069726174696F6E54696D655365636F6E64732C0000 PUSH1 0xD6 DUP4 ADD MSTORE PUSH32 0x75696E743235362073616C742C00000000000000000000000000000000000000 PUSH1 0xF4 DUP4 ADD MSTORE PUSH32 0x6279746573206D616B65724173736574446174612C0000000000000000000000 PUSH2 0x101 DUP4 ADD MSTORE PUSH32 0x62797465732074616B6572417373657444617461000000000000000000000000 PUSH2 0x116 DUP4 ADD MSTORE PUSH32 0x2900000000000000000000000000000000000000000000000000000000000000 PUSH2 0x12A DUP4 ADD MSTORE DUP3 MLOAD PUSH2 0x10B DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH2 0x12B SWAP1 SWAP3 ADD SWAP3 DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH1 0x0 SWAP4 DUP5 SWAP4 DUP5 SWAP4 DUP5 SWAP4 SWAP2 SWAP3 SWAP2 DUP3 SWAP2 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x38A8 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x386B JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP4 ADD DUP2 SWAP1 SUB DUP2 KECCAK256 PUSH2 0x140 DUP12 ADD MLOAD DUP1 MLOAD SWAP2 SWAP10 POP SWAP6 POP SWAP1 SWAP4 POP DUP4 SWAP3 DUP6 ADD SWAP2 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x3943 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x3906 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP4 ADD DUP2 SWAP1 SUB DUP2 KECCAK256 PUSH2 0x160 DUP12 ADD MLOAD DUP1 MLOAD SWAP2 SWAP9 POP SWAP6 POP SWAP1 SWAP4 POP DUP4 SWAP3 DUP6 ADD SWAP2 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x39DE JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x39A1 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 SWAP1 SWAP4 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP2 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP3 ADD DUP3 SWAP1 SUB SWAP1 SWAP2 KECCAK256 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP10 ADD DUP1 MLOAD PUSH2 0x140 DUP12 ADD DUP1 MLOAD PUSH2 0x160 SWAP1 SWAP13 ADD DUP1 MLOAD SWAP11 DUP5 MSTORE SWAP9 DUP2 MSTORE SWAP3 DUP9 MSTORE PUSH2 0x1A0 DUP3 KECCAK256 SWAP2 MSTORE SWAP9 SWAP1 MSTORE POP POP POP SWAP2 SWAP1 MSTORE POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x120 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x3AB7 PUSH2 0x3A79 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3AC4 PUSH2 0x3A79 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF74 DUP3 CALLDATALOAD PUSH2 0x4DDF JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0x3B0E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x3B21 PUSH2 0x3B1C DUP3 PUSH2 0x4D74 JUMP JUMPDEST PUSH2 0x4D4D JUMP JUMPDEST DUP2 DUP2 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP3 POP DUP3 ADD DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3B5F JUMPI DUP2 CALLDATALOAD DUP7 ADD PUSH2 0x3B49 DUP9 DUP3 PUSH2 0x3CBB JUMP JUMPDEST DUP5 MSTORE POP PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x3B33 JUMP JUMPDEST POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0x3B7A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x3B88 PUSH2 0x3B1C DUP3 PUSH2 0x4D74 JUMP JUMPDEST DUP2 DUP2 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP3 POP DUP3 ADD DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3B5F JUMPI DUP2 CALLDATALOAD DUP7 ADD PUSH2 0x3BB0 DUP9 DUP3 PUSH2 0x3D0A JUMP JUMPDEST DUP5 MSTORE POP PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x3B9A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0x3BD7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x3BE5 PUSH2 0x3B1C DUP3 PUSH2 0x4D74 JUMP JUMPDEST SWAP2 POP DUP2 DUP2 DUP4 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH1 0x20 DUP2 ADD SWAP1 POP DUP4 DUP6 PUSH1 0x20 DUP5 MUL DUP3 ADD GT ISZERO PUSH2 0x3C0A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3B5F JUMPI DUP2 PUSH2 0x3C20 DUP9 DUP3 PUSH2 0x3C4E JUMP JUMPDEST DUP5 MSTORE POP PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x3C0D JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF74 DUP3 CALLDATALOAD PUSH2 0x4DF8 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF74 DUP3 MLOAD PUSH2 0x4DF8 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF74 DUP3 CALLDATALOAD PUSH2 0x4DFD JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF74 DUP3 CALLDATALOAD PUSH2 0x4E00 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF74 DUP3 MLOAD PUSH2 0x4E00 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x1F DUP4 ADD DUP5 SGT PUSH2 0x3C84 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3C9C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x1 DUP3 MUL DUP4 ADD GT ISZERO PUSH2 0x3CB4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0x3CCC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x3CDA PUSH2 0x3B1C DUP3 PUSH2 0x4D95 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP4 ADD DUP6 DUP4 DUP4 ADD GT ISZERO PUSH2 0x3CF6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3D01 DUP4 DUP3 DUP5 PUSH2 0x4E36 JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x180 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3D1D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3D28 PUSH2 0x180 PUSH2 0x4D4D JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3D36 DUP5 DUP5 PUSH2 0x3AF1 JUMP JUMPDEST DUP3 MSTORE POP PUSH1 0x20 PUSH2 0x3D47 DUP5 DUP5 DUP4 ADD PUSH2 0x3AF1 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP PUSH1 0x40 PUSH2 0x3D5B DUP5 DUP3 DUP6 ADD PUSH2 0x3AF1 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 PUSH2 0x3D6F DUP5 DUP3 DUP6 ADD PUSH2 0x3AF1 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE POP PUSH1 0x80 PUSH2 0x3D83 DUP5 DUP3 DUP6 ADD PUSH2 0x3C4E JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE POP PUSH1 0xA0 PUSH2 0x3D97 DUP5 DUP3 DUP6 ADD PUSH2 0x3C4E JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE POP PUSH1 0xC0 PUSH2 0x3DAB DUP5 DUP3 DUP6 ADD PUSH2 0x3C4E JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE POP PUSH1 0xE0 PUSH2 0x3DBF DUP5 DUP3 DUP6 ADD PUSH2 0x3C4E JUMP JUMPDEST PUSH1 0xE0 DUP4 ADD MSTORE POP PUSH2 0x100 PUSH2 0x3DD4 DUP5 DUP3 DUP6 ADD PUSH2 0x3C4E JUMP JUMPDEST PUSH2 0x100 DUP4 ADD MSTORE POP PUSH2 0x120 PUSH2 0x3DEA DUP5 DUP3 DUP6 ADD PUSH2 0x3C4E JUMP JUMPDEST PUSH2 0x120 DUP4 ADD MSTORE POP PUSH2 0x140 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3E0C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3E18 DUP5 DUP3 DUP6 ADD PUSH2 0x3CBB JUMP JUMPDEST PUSH2 0x140 DUP4 ADD MSTORE POP PUSH2 0x160 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3E3A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3E46 DUP5 DUP3 DUP6 ADD PUSH2 0x3CBB JUMP JUMPDEST PUSH2 0x160 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3E65 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2C69 DUP5 DUP5 PUSH2 0x3AF1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3E84 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x3E90 DUP6 DUP6 PUSH2 0x3AF1 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x3EA1 DUP6 DUP3 DUP7 ADD PUSH2 0x3AF1 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3EBE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x3ECA DUP6 DUP6 PUSH2 0x3AF1 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x3EA1 DUP6 DUP3 DUP7 ADD PUSH2 0x3C36 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3EED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3F04 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2C69 DUP5 DUP3 DUP6 ADD PUSH2 0x3B69 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3F25 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3F3C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3F48 DUP7 DUP3 DUP8 ADD PUSH2 0x3B69 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3F65 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3F71 DUP7 DUP3 DUP8 ADD PUSH2 0x3BC6 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3F8E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3F9A DUP7 DUP3 DUP8 ADD PUSH2 0x3AFD JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3FB9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3FD0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3FDC DUP7 DUP3 DUP8 ADD PUSH2 0x3B69 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x3F71 DUP7 DUP3 DUP8 ADD PUSH2 0x3C4E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3FFF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2C69 DUP5 DUP5 PUSH2 0x3C42 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x401D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2C69 DUP5 DUP5 PUSH2 0x3C4E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x403C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x3E90 DUP6 DUP6 PUSH2 0x3C4E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x405E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x406A DUP8 DUP8 PUSH2 0x3C4E JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x407B DUP8 DUP3 DUP9 ADD PUSH2 0x3AF1 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4098 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x40A4 DUP8 DUP3 DUP9 ADD PUSH2 0x3C72 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x40C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x40D1 DUP7 DUP7 PUSH2 0x3C4E JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x40E2 DUP7 DUP3 DUP8 ADD PUSH2 0x3AF1 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x40FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3F9A DUP7 DUP3 DUP8 ADD PUSH2 0x3CBB JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x411D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2C69 DUP5 DUP5 PUSH2 0x3C5A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x413B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2C69 DUP5 DUP5 PUSH2 0x3C66 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4159 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4170 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2C69 DUP5 DUP3 DUP6 ADD PUSH2 0x3D0A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x4192 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x41A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x41B5 DUP8 DUP3 DUP9 ADD PUSH2 0x3D0A JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x41D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x41DE DUP8 DUP3 DUP9 ADD PUSH2 0x3D0A JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x41FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4207 DUP8 DUP3 DUP9 ADD PUSH2 0x3CBB JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4224 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4230 DUP8 DUP3 DUP9 ADD PUSH2 0x3CBB JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x4251 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4268 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4274 DUP7 DUP3 DUP8 ADD PUSH2 0x3D0A JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x40E2 DUP7 DUP3 DUP8 ADD PUSH2 0x3C4E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x429E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x42AA DUP10 DUP10 PUSH2 0x3C4E JUMP JUMPDEST SWAP7 POP POP PUSH1 0x20 PUSH2 0x42BB DUP10 DUP3 DUP11 ADD PUSH2 0x3AF1 JUMP JUMPDEST SWAP6 POP POP PUSH1 0x40 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x42D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x42E4 DUP10 DUP3 DUP11 ADD PUSH2 0x3C72 JUMP JUMPDEST SWAP5 POP SWAP5 POP POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4303 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x430F DUP10 DUP3 DUP11 ADD PUSH2 0x3C72 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH2 0x4327 DUP2 PUSH2 0x4DDF JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x4327 DUP2 PUSH2 0x4DF8 JUMP JUMPDEST PUSH2 0x4327 DUP2 PUSH2 0x4DFD JUMP JUMPDEST PUSH2 0x4327 DUP2 PUSH2 0x4E00 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4353 DUP3 PUSH2 0x4DDB JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH2 0x4367 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x4E42 JUMP JUMPDEST PUSH2 0x4370 DUP2 PUSH2 0x4E6E JUMP JUMPDEST SWAP1 SWAP4 ADD PUSH1 0x20 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x4327 DUP2 PUSH2 0x4E2B JUMP JUMPDEST PUSH1 0x12 DUP2 MSTORE PUSH32 0x4C454E4754485F36355F52455155495245440000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0xD DUP2 MSTORE PUSH32 0x494E56414C49445F54414B455200000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1A DUP2 MSTORE PUSH32 0x41535345545F50524F58595F414C52454144595F455849535453000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F33325F4C454E4754485F5245 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x15 DUP2 MSTORE PUSH32 0x5349474E41545552455F554E535550504F525445440000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x17 DUP2 MSTORE PUSH32 0x494E56414C49445F4F524445525F5349474E4154555245000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0xD DUP2 MSTORE PUSH32 0x494E56414C49445F4D414B455200000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0xF DUP2 MSTORE PUSH32 0x494E56414C49445F54585F484153480000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x11 DUP2 MSTORE PUSH32 0x494E56414C49445F5349474E4154555245000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0xE DUP2 MSTORE PUSH32 0x524F554E44494E475F4552524F52000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x10 DUP2 MSTORE PUSH32 0x4641494C45445F455845435554494F4E00000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x14 DUP2 MSTORE PUSH32 0x494E56414C49445F54414B45525F414D4F554E54000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1A DUP2 MSTORE PUSH32 0x41535345545F50524F58595F444F45535F4E4F545F4558495354000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x21 DUP2 MSTORE PUSH32 0x475245415445525F5448414E5F5A45524F5F4C454E4754485F52455155495245 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x4400000000000000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x11 DUP2 MSTORE PUSH32 0x5349474E41545552455F494C4C4547414C000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1E DUP2 MSTORE PUSH32 0x4C454E4754485F475245415445525F5448414E5F305F52455155495245440000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x17 DUP2 MSTORE PUSH32 0x494E56414C49445F4E45575F4F524445525F45504F4348000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1E DUP2 MSTORE PUSH32 0x4C454E4754485F475245415445525F5448414E5F335F52455155495245440000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x14 DUP2 MSTORE PUSH32 0x434F4D504C4554455F46494C4C5F4641494C4544000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x12 DUP2 MSTORE PUSH32 0x5245454E5452414E43595F494C4C4547414C0000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x13 DUP2 MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F32305F4C454E4754485F5245 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x10 DUP2 MSTORE PUSH32 0x4F524445525F554E46494C4C41424C4500000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0xE DUP2 MSTORE PUSH32 0x494E56414C49445F53454E444552000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x18 DUP2 MSTORE PUSH32 0x4E454741544956455F5350524541445F52455155495245440000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x14 DUP2 MSTORE PUSH32 0x494E56414C49445F54585F5349474E4154555245000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x11 DUP2 MSTORE PUSH32 0x4C454E4754485F305F5245515549524544000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x80 DUP4 ADD SWAP1 PUSH2 0x4919 DUP5 DUP3 PUSH2 0x4336 JUMP JUMPDEST POP PUSH1 0x20 DUP3 ADD MLOAD PUSH2 0x492C PUSH1 0x20 DUP6 ADD DUP3 PUSH2 0x4336 JUMP JUMPDEST POP PUSH1 0x40 DUP3 ADD MLOAD PUSH2 0x493F PUSH1 0x40 DUP6 ADD DUP3 PUSH2 0x4336 JUMP JUMPDEST POP PUSH1 0x60 DUP3 ADD MLOAD PUSH2 0x2E00 PUSH1 0x60 DUP6 ADD DUP3 PUSH2 0x4336 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x120 DUP4 ADD SWAP1 PUSH2 0x4964 DUP5 DUP3 PUSH2 0x4908 JUMP JUMPDEST POP PUSH1 0x20 DUP3 ADD MLOAD PUSH2 0x4977 PUSH1 0x80 DUP6 ADD DUP3 PUSH2 0x4908 JUMP JUMPDEST POP PUSH1 0x40 DUP3 ADD MLOAD PUSH2 0x2E00 PUSH2 0x100 DUP6 ADD DUP3 PUSH2 0x4336 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x60 DUP4 ADD SWAP1 PUSH2 0x499C DUP5 DUP3 PUSH2 0x49C2 JUMP JUMPDEST POP PUSH1 0x20 DUP3 ADD MLOAD PUSH2 0x49AF PUSH1 0x20 DUP6 ADD DUP3 PUSH2 0x4336 JUMP JUMPDEST POP PUSH1 0x40 DUP3 ADD MLOAD PUSH2 0x2E00 PUSH1 0x40 DUP6 ADD DUP3 PUSH2 0x4336 JUMP JUMPDEST PUSH2 0x4327 DUP2 PUSH2 0x4E25 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x24EB DUP3 DUP5 PUSH2 0x431E JUMP JUMPDEST PUSH2 0x100 DUP2 ADD PUSH2 0x49E8 DUP3 DUP12 PUSH2 0x431E JUMP JUMPDEST PUSH2 0x49F5 PUSH1 0x20 DUP4 ADD DUP11 PUSH2 0x431E JUMP JUMPDEST PUSH2 0x4A02 PUSH1 0x40 DUP4 ADD DUP10 PUSH2 0x4336 JUMP JUMPDEST PUSH2 0x4A0F PUSH1 0x60 DUP4 ADD DUP9 PUSH2 0x4336 JUMP JUMPDEST PUSH2 0x4A1C PUSH1 0x80 DUP4 ADD DUP8 PUSH2 0x4336 JUMP JUMPDEST PUSH2 0x4A29 PUSH1 0xA0 DUP4 ADD DUP7 PUSH2 0x4336 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0xC0 DUP4 ADD MSTORE PUSH2 0x4A3B DUP2 DUP6 PUSH2 0x4348 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x4A4F DUP2 DUP5 PUSH2 0x4348 JUMP JUMPDEST SWAP11 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x4A6B DUP3 DUP7 PUSH2 0x431E JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x4A7D DUP2 DUP6 PUSH2 0x4348 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x4A91 DUP2 DUP5 PUSH2 0x4348 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x24EB DUP3 DUP5 PUSH2 0x432D JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x24EB DUP3 DUP5 PUSH2 0x4336 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x4AC4 DUP3 DUP7 PUSH2 0x4336 JUMP JUMPDEST PUSH2 0x4AD1 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x431E JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x4A91 DUP2 DUP5 PUSH2 0x4348 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x4AF1 DUP3 DUP6 PUSH2 0x4336 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x2C69 DUP2 DUP5 PUSH2 0x4348 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x4B11 DUP3 DUP8 PUSH2 0x4336 JUMP JUMPDEST PUSH2 0x4B1E PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x49C2 JUMP JUMPDEST PUSH2 0x4B2B PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x4336 JUMP JUMPDEST PUSH2 0x4A91 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x4336 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x4B46 DUP3 DUP6 PUSH2 0x433F JUMP JUMPDEST PUSH2 0xF74 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x431E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xF74 DUP2 DUP5 PUSH2 0x4348 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x24EB DUP3 DUP5 PUSH2 0x437D JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x24EB DUP2 PUSH2 0x4386 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x24EB DUP2 PUSH2 0x43B6 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x24EB DUP2 PUSH2 0x43E6 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x24EB DUP2 PUSH2 0x4416 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x24EB DUP2 PUSH2 0x446C JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x24EB DUP2 PUSH2 0x449C JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x24EB DUP2 PUSH2 0x44CC JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x24EB DUP2 PUSH2 0x44FC JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x24EB DUP2 PUSH2 0x452C JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x24EB DUP2 PUSH2 0x455C JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x24EB DUP2 PUSH2 0x458C JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x24EB DUP2 PUSH2 0x45BC JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x24EB DUP2 PUSH2 0x45EC JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x24EB DUP2 PUSH2 0x461C JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x24EB DUP2 PUSH2 0x4672 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x24EB DUP2 PUSH2 0x46A2 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x24EB DUP2 PUSH2 0x46D2 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x24EB DUP2 PUSH2 0x4702 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x24EB DUP2 PUSH2 0x4732 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x24EB DUP2 PUSH2 0x4762 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x24EB DUP2 PUSH2 0x4792 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x24EB DUP2 PUSH2 0x47C2 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x24EB DUP2 PUSH2 0x4818 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x24EB DUP2 PUSH2 0x4848 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x24EB DUP2 PUSH2 0x4878 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x24EB DUP2 PUSH2 0x48A8 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x24EB DUP2 PUSH2 0x48D8 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x24EB DUP3 DUP5 PUSH2 0x4908 JUMP JUMPDEST PUSH2 0x120 DUP2 ADD PUSH2 0x24EB DUP3 DUP5 PUSH2 0x4952 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x24EB DUP3 DUP5 PUSH2 0x498B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x4D6C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x4D8B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 SWAP1 DUP2 MUL ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x4DAC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x1F SWAP2 SWAP1 SWAP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND SWAP1 JUMP JUMPDEST PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x24EB DUP3 PUSH2 0x4DDF JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4E5D JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x4E45 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x2E00 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP1 JUMP STOP LOG2 PUSH6 0x627A7A723058 KECCAK256 SIGNEXTEND 0xd2 0xea 0xba 0x4f RETURN SWAP11 JUMPI 0xe CODECOPY CALL 0xd5 SWAP13 POP 0x28 0xc5 0x27 PUSH6 0x6C4CA9F2056 PUSH13 0xD5328A8887D16A6C6578706572 PUSH10 0x6D656E74616CF5003700 ",
- "sourceMap": "896:616:2:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;943:221:17;;8:9:-1;5:2;;;30:1;27;20:12;5:2;943:221:17;;;;;;;;;;;;;;;;;;;;1198:42:4;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1198:42:4;;;;;;;;;13371:572:8;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;13371:572:8;;;;;;;;;;;;;;;;;1288:42:4;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1288:42:4;;;;;;;;;;;;;;;;;1493:360:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1493:360:6;;;;;;;;;;;1895:2557:5;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1895:2557:5;;;;;;;;;;;;;;;;;2081:10811:8;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2081:10811:8;;;;;;;;;976:51:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;976:51:3;;;;;;;;;;;;;;;;;24537:185:8;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;24537:185:8;;;;;;;;;14423:584;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;14423:584:8;;;;;;;;;1985:1012:4;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1985:1012:4;;;;;;;;;15566:586:8;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;15566:586:8;;;;;;;;;2092:154:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2092:154:3;;;;;;;;;;;;;;;;;968:45:7;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;968:45:7;;;;;;;;;1160:495:8;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1160:495:8;;;;;;;;;2090:391:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2090:391:6;;;;;;;;;1087:71;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1087:71:6;;;;;;;;;16540:1432:8;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;16540:1432:8;;;;;;;;;967:63:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;967:63:6;;;;;;;;;292:20:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;292:20:29;;;;2853:6765:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2853:6765:6;;;;;;;;;22554:1848:8;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;22554:1848:8;;;;;;;;;3314:1327:4;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3314:1327:4;;;;;;;;;2887:1449:7;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2887:1449:7;;;;;;;;;1236:666:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1236:666:3;;;;;;;;;5468:2199:4;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5468:2199:4;;;;;;;;;;;;;;;;;4872:322;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4872:322:4;;;;;;;;;1551:67;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1551:67:4;;;;;;;;;805:27:16;;8:9:-1;5:2;;;30:1;27;20:12;5:2;805:27:16;;;;;;;;;;;;18429:1442:8;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;18429:1442:8;;;;;;;;;1219:33:17;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1219:33:17;;;;20259:1834:8;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;20259:1834:8;;;;;;;;;1065:36:7;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1065:36:7;;;;534:167:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;534:167:29;;;;;;;;;1078:46:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1078:46:2;;;;943:221:17;1015:148;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;1015:148:17;;;;;;;;1005:159;;1015:148;;;;;1005:159;;;;1015:148;1005:159;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1005:159:17;;;;;;;;;;;;;;;;943:221;:::o;1198:42:4:-;;;;;;;;;;;;;:::o;13371:572:8:-;13557:35;;:::i;:::-;13613:9;13666:36;;:::i;:::-;13625:1;13613:13;;13608:296;13632:6;:13;13628:1;:17;13608:296;;;13705:123;13732:6;13739:1;13732:9;;;;;;;;;;;;;;;;;;13759:21;13781:1;13759:24;;;;;;;;;;;;;;;;;;13801:10;13812:1;13801:13;;;;;;;;;;;;;;;;;;13705:9;:123::i;:::-;13666:162;;13842:51;13857:16;13875:17;13842:14;:51::i;:::-;13647:3;;;;;13608:296;;;13371:572;;;;;;;:::o;1288:42:4:-;;;;;;;;;;;;;;;:::o;1493:360:6:-;1646:110;1680:4;1702:13;1733:9;;1646:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1646:16:6;;-1:-1:-1;;;;;1646:110:6:i;:::-;1625:174;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1809:15:6;;;;:9;:15;;;;;;;;:30;;;;;;;;;;;:37;;;;1842:4;1809:37;;;1493:360::o;1895:2557:5:-;2110:59;;:::i;:::-;2575:39;;:::i;:::-;2650:40;;:::i;:::-;2439:24;;;;;2411:25;;;;:52;;;;2501:24;;;2473:25;;;:52;2759:20;2617:23;2439:9;2617:12;:23::i;:::-;2575:65;;2693:24;2706:10;2693:12;:24::i;:::-;2650:67;;2782:26;:24;:26::i;:::-;2759:49;;2871:39;2888:9;2899:10;2871:16;:39::i;:::-;2987:195;3028:9;3051:10;3075:13;:41;;;3130:14;:42;;;2987:27;:195::i;:::-;3332:23;;:46;;;2966:216;;-1:-1:-1;3227:248:5;;3256:9;;3279:13;;3306:12;;3332:46;3452:13;3227:15;:248::i;:::-;3592:24;;;;;:47;;3485:253;;3514:10;;3538:14;;3566:12;;3592:47;3714:14;3485:15;:253::i;:::-;3782:205;3813:9;3836:12;3862:13;:23;;;3899:13;:41;;;3954:18;:23;;;3782:17;:205::i;:::-;3997:209;4028:10;4052:12;4078:14;:24;;;4116:14;:42;;;4172:18;:24;;;3997:17;:209::i;:::-;4275:134;4308:9;4331:10;4355:12;4381:18;4275:19;:134::i;:::-;1895:2557;;;;;;;;;:::o;2081:10811:8:-;2252:30;;:::i;:::-;6147:4;6141:11;;5368:23;6165:42;;;6573:4;6262:3;6241:25;;7260:59;;;7586:19;;6552:26;;;7566:40;;;7374:4;7699:23;;;7693:30;7669:22;;;7662:62;7795:23;;;7789:30;7765:22;;;7758:62;7898:23;;;7892:30;7868:22;;;7861:62;8013:4;7995:23;;7989:30;7965:22;;;7958:62;8113:4;8095:23;;8089:30;8065:22;;;8058:62;8213:4;8195:23;;8189:30;8165:22;;;8158:62;8311:4;8293:23;;8287:30;8263:22;;;8256:62;8410:5;8392:24;;8386:31;8361:23;;;8354:64;8515:5;8497:24;;8491:31;8466:23;;;8459:64;8603:5;8585:24;;8579:31;;8554:23;;;8547:64;;;8711:5;8693:24;;8687:31;8662:23;;;8655:64;8795:5;8922:74;;9084:24;9156:19;;8778:23;;;9360:34;;;5368:23;;6241:25;;;;6552:26;7352:27;;;;6552:26;;9422:22;;;;9204:23;;;;9280:4;9261:24;;9257:35;5341:24;9514:237;9537:13;9534:1;9531:20;9514:237;;;9607:19;;9587:40;;9676:4;9659:22;;;;9714:23;;;;9565:1;9558:9;9514:237;;;-1:-1:-1;;;;9861:31:8;;;9845:13;9826:33;;;9819:74;;;;9987:17;;9981:24;10053:19;;10257:34;;;9853:4;10319:22;;;;10101:23;;;;10177:4;10158:24;;10154:35;10426:1;10412:237;10435:13;10432:1;10429:20;10412:237;;;10505:19;;10485:40;;10574:4;10557:22;;;;10612:23;;;;10463:1;10456:9;10412:237;;;-1:-1:-1;;;10718:46:8;;;-1:-1:-1;10949:33:8;;;10819:4;10797:27;;;10924:59;;;11097:19;;11288:34;;;10797:27;;11350:22;;;;11145:23;;;;11097:19;11221:4;11202:24;;11198:35;-1:-1:-1;11429:237:8;11452:13;11449:1;11446:20;11429:237;;;11522:19;;11502:40;;11591:4;11574:22;;;;11629:23;;;;11480:1;11473:9;11429:237;;;11433:12;12197:3;12118:15;12064;12051:11;12047:33;11966:15;11881:7;11761:3;11731:543;12294:7;12314:205;;;;12537:1;12532:316;;;;12287:561;;12314:205;12359:1;12346:11;12339:22;12407:1;12402:2;12389:11;12385:20;12378:31;12455:1;12450:2;12437:11;12433:20;12426:31;12503:1;12498:2;12485:11;12481:20;12474:31;12314:205;;12532:316;12583:15;12577:22;12564:11;12557:43;12673:2;12656:15;12652:24;12646:31;12641:2;12628:11;12624:20;12617:61;12751:2;12734:15;12730:24;12724:31;12719:2;12706:11;12702:20;12695:61;12829:2;12812:15;12808:24;12802:31;12797:2;12784:11;12780:20;12773:61;12287:561;-1:-1:-1;;;;;;;;;;;;2081:10811:8;;;;;;:::o;976:51:3:-;;;;;;;;;;;;;;;:::o;24537:185:8:-;24630:9;24625:91;24649:6;:13;24645:1;:17;24625:91;;;24683:22;24695:6;24702:1;24695:9;;;;;;;;;;;;;;;;;;24683:11;:22::i;:::-;24664:3;;24625:91;;;24537:185;;:::o;14423:584::-;14615:35;;:::i;:::-;14671:9;14724:36;;:::i;:::-;14683:1;14671:13;;14666:302;14690:6;:13;14686:1;:17;14666:302;;;14763:129;14796:6;14803:1;14796:9;;;;;;;;;;;;;;;;;;14823:21;14845:1;14823:24;;;;;;;;;;;;;;;;;;14865:10;14876:1;14865:13;;;;;;;;;;;;;;;;;;14763:15;:129::i;:::-;14724:168;;14906:51;14921:16;14939:17;14906:14;:51::i;:::-;14705:3;;;;;14666:302;;1985:1012:4;2068:20;2375:21;2539;2595;2091:26;:24;:26::i;:::-;2068:49;-1:-1:-1;2399:26:4;;;2415:10;2399:26;:52;;2441:10;2399:52;;;2436:1;2399:52;2619:24;;;;;;;;:10;:24;;;;;;;;:39;;;;;;;;;;2375:76;;-1:-1:-1;2582:1:4;2563:20;;;-1:-1:-1;2619:39:4;-1:-1:-1;2747:29:4;;;2726:100;;;;;;;;;;;;;;2866:24;;;;;;;;:10;:24;;;;;;;;:39;;;;;;;;;;;;;;:55;;;2936:54;;;;;2908:13;;2936:54;;;;;;;;;;1985:1012;;;;;:::o;15566:586:8:-;15759:35;;:::i;:::-;15815:9;15868:36;;:::i;:::-;15827:1;15815:13;;15810:303;15834:6;:13;15830:1;:17;15810:303;;;15907:130;15941:6;15948:1;15941:9;;;;;;;;;;;;;;;;;;15968:21;15990:1;15968:24;;;;;;;;;;;;;;;;;;16010:10;16021:1;16010:13;;;;;;;;;;;;;;;;;;15907:16;:130::i;:::-;15868:169;;16051:51;16066:16;16084:17;16051:14;:51::i;:::-;15849:3;;;;;15810:303;;2092:154:3;2213:26;;;2183:7;2213:26;;;:12;:26;;;;;;;;2092:154;;;;:::o;968:45:7:-;;;;;;;;;;;;;;;:::o;1160:495:8:-;1330:30;;:::i;:::-;1390:95;1413:5;1432:20;1466:9;1390;:95::i;:::-;1516:34;;;;1376:109;;-1:-1:-1;1516:58:8;;1495:125;;;;;;;;;;;;;;1160:495;;;;;:::o;2090:391:6:-;2223:21;2247:26;:24;:26::i;:::-;2283:32;;;;;;;;:17;:32;;;;;;;;:50;;;;;;;;;;;;;;:61;;;;;;;;;;2359:115;2283:32;;-1:-1:-1;2283:50:6;;2359:115;;;;2283:61;;2359:115;;;;;;;;;;2090:391;;;:::o;1087:71::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;16540:1432:8:-;16717:35;;:::i;:::-;16768:27;16842:9;17228:37;17419:36;;:::i;:::-;16798:6;16805:1;16798:9;;;;;;;;;;;;;;;;;;:24;;;16768:54;;16854:1;16842:13;;16837:1096;16861:6;:13;16857:1;:17;16837:1096;;;17131:14;17104:6;17111:1;17104:9;;;;;;;;;;;;;;;;;;:24;;:41;;;;17268:70;17276:20;17298:16;:39;;;17268:7;:70::i;:::-;17228:110;;17458:128;17485:6;17492:1;17485:9;;;;;;;;;;;;;;;;;;17512:29;17559:10;17570:1;17559:13;;;;;;;;;17458:128;17419:167;;17671:51;17686:16;17704:17;17671:14;:51::i;:::-;17863:20;17820:16;:39;;;:63;17816:107;;;17903:5;;17816:107;16876:3;;;;;16837:1096;;;16540:1432;;;;;;;;;:::o;967:63:6:-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;292:20:29:-;;;;;;:::o;2853:6765:6:-;3015:12;3305:22;3558:27;3679:7;3696:9;3715;3734:17;7463:24;3196:1;3177:9;:16;:20;3156:97;;;;;;;;;;;;;;;;3336:23;:9;:21;:23::i;:::-;3330:30;;;;-1:-1:-1;3416:29:6;3391:55;;;;3370:123;;;;;;;;;;;;;;3602:16;3588:31;;;;;;;;;;3558:61;-1:-1:-1;4101:21:6;4084:13;:38;;;;;;;;;4080:5188;;;4138:27;;;;;;;;;;;4080:5188;4447:21;4430:13;:38;;;;;;;;;4426:4842;;;4509:16;;:21;4484:97;;;;;;;;;;;;;;4605:5;;-1:-1:-1;4624:14:6;;4426:4842;4711:20;4694:13;:37;;;;;;;;;4690:4578;;;4772:16;;4792:2;4772:22;4747:99;;;;;;;;;;;;;;4870:9;4880:1;4870:12;;;;;;;;;;;;;;;;;;;;;4864:19;;-1:-1:-1;4901:24:6;:9;4923:1;4901:24;:21;:24;:::i;:::-;4897:28;-1:-1:-1;4943:25:6;:9;4965:2;4943:25;:21;:25;:::i;:::-;4939:29;;4994:24;5004:4;5010:1;5013;5016;4994:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;4994:24:6;;;;;5042:26;;;;;;;;;-1:-1:-1;4994:24:6;-1:-1:-1;5082:14:6;;-1:-1:-1;5082:14:6;4690:4578;5173:21;5156:13;:38;;;;;;;;;5152:4116;;;5235:16;;5255:2;5235:22;5210:99;;;;;;;;;;;;;;5333:9;5343:1;5333:12;;;;;;;;;;;;;;;;;;;;;5327:19;;-1:-1:-1;5364:24:6;:9;5386:1;5364:24;:21;:24;:::i;:::-;5360:28;-1:-1:-1;5406:25:6;:9;5428:2;5406:25;:21;:25;:::i;:::-;5402:29;;5457:225;5588:4;5494:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;5494:116:6;;;5484:127;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;365:33;;5484:127:6;;;;;;;;;;;;-1:-1:-1;5457:225:6;;;;;;;;;;-1:-1:-1;5484:127:6;-1:-1:-1;5629:1:6;;5648;;-1:-1:-1;5667:1:6;;5457:225;;5152:4116;6350:20;6333:13;:37;;;;;;;;;6329:2939;;;6411:16;;:21;6386:97;;;;;;;;;;;;;;6507:27;;;6524:10;6507:27;;-1:-1:-1;6548:14:6;;6329:2939;6732:20;6715:13;:37;;;;;;;;;6711:2557;;;6778:56;;;;;:39;;;;;;:56;;6818:4;;6824:9;;6778:56;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6778:56:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6778:56:6;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;6778:56:6;;;;;;;;;6768:66;-1:-1:-1;6848:14:6;;6711:2557;7361:23;7344:13;:40;;;;;;;;;7340:1928;;;7490:26;:9;:24;:26::i;:::-;7601:32;;;;;;;;:17;:32;;;;;;;;:50;;;;;;;;;;7463:53;;-1:-1:-1;7601:50:6;;7600:51;7596:102;;;7678:5;7671:12;;;;7596:102;7721:139;;;;;:45;;;;;;:139;;7784:4;;7806:13;;7837:9;;7721:139;;;;7340:1928;7996:23;7979:13;:40;;;;;;;;;7975:1293;;;8045:15;;;;:9;:15;;;;;;;;:30;;;;;;;;;;;;;;-1:-1:-1;8089:14:6;;7975:1293;8669:20;8652:13;:37;;;;;;;;;8648:620;;;8730:16;;8750:2;8730:22;8705:99;;;;;;;;;;;;;;8828:9;8838:1;8828:12;;;;;;;;;;;;;;;;;;;;;8822:19;;-1:-1:-1;8859:24:6;:9;8881:1;8859:24;:21;:24;:::i;:::-;8855:28;-1:-1:-1;8901:25:6;:9;8923:2;8901:25;:21;:25;:::i;:::-;8897:29;;8952:227;9085:4;8989:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;8989:118:6;;;8979:129;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;8648:620:6;9580:31;;;;;;;;;;;2853:6765;;;;;;;;;;;;;:::o;22554:1848:8:-;22737:35;;:::i;:::-;22788:27;22858:9;23248:37;23554;23840:36;;:::i;:::-;22818:6;22825:1;22818:9;;;;;;;;;;;;;;;;;;:24;;;22788:54;;22870:1;22858:13;;22853:1510;22877:6;:13;22873:1;:17;22853:1510;;;23152:14;23125:6;23132:1;23125:9;;;;;;;;;;;;;;;;;;;:24;;:41;23318:39;;23288:70;;23296:20;;23288:7;:70::i;:::-;23248:110;;23594:165;23628:6;23635:1;23628:9;;;;;;;;;;;;;;;;;;:26;;;23672:6;23679:1;23672:9;;;;;;;;;;;;;;;;;;:26;;;23716:29;23594:16;:165::i;:::-;23554:205;;23879:135;23913:6;23920:1;23913:9;;;;;;;;;;;;;;;;;;23940:29;23987:10;23998:1;23987:13;;;;;;;;;23879:135;23840:174;;24099:51;24114:16;24132:17;24099:14;:51::i;:::-;24250:39;;:63;;24246:107;;;24333:5;;24246:107;22892:3;;;;;22853:1510;;;22554:1848;;;;;;;;;;:::o;3314:1327:4:-;3469:30;;:::i;:::-;3543:26;;:::i;:::-;3633:20;3737:33;3853:30;3572:19;3585:5;3572:12;:19::i;:::-;3543:48;;3656:26;:24;:26::i;:::-;3633:49;;3773:70;3781:5;:22;;;3805:9;:37;;;3773:7;:70::i;:::-;3737:106;;3886:55;3893:20;3915:25;3886:6;:55::i;:::-;3853:88;;3980:186;4009:5;4028:9;4051:12;4077:20;4111:22;4147:9;3980:15;:186::i;:::-;4236:51;4257:5;4264:22;4236:20;:51::i;:::-;4222:65;;4340:181;4371:5;4390:12;4416:9;:19;;;4449:9;:37;;;4500:11;4340:17;:181::i;:::-;4560:45;4572:5;4579:12;4593:11;4560;:45::i;2887:1449:7:-;3101:21;;3191:23;;3101:35;:21;:35;3080:100;;;;;;;;;;;;;;3217:113;3235:94;3270:4;3288:13;3315:4;;3235:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3235:21:7;;-1:-1:-1;;;;;3235:94:7:i;:::-;3217:17;:113::i;:::-;3417:29;;;;:12;:29;;;;;;3191:139;;-1:-1:-1;3417:29:7;;3416:30;3395:92;;;;;;;;;;;;;;3573:27;;;3590:10;3573:27;3569:410;;3675:137;3713:15;3750:13;3785:9;;3675:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3675:16:7;;-1:-1:-1;;;;;3675:137:7:i;:::-;3650:216;;;;;;;;;;;;;;;;3931:21;:37;;;;;;;;;;3569:410;4020:29;;;;:12;:29;;;;;;;:36;;;;4052:4;4020:36;;;4087:32;4095:4;;4114;;;;4087:32;4114:4;;;;4087:32;;;;;;;;;;;;;;;;;;;;;;;;4066:95;;;;;;;;;;;;;;;;-1:-1:-1;;4295:21:7;:34;;;;;;-1:-1:-1;;;;;2887:1449:7:o;1236:666:3:-;460:5:29;;1333:30:3;;;;;;460:5:29;;446:10;:19;425:85;;;;;;;;;;;;;;1378:10:3;1333:56;;1484:18;:29;;;:31;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1484:31:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1484:31:3;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;1484:31:3;;;;;;;;;1553:26;;;;;;;:12;:26;;;;;;1462:53;;-1:-1:-1;1553:26:3;;;-1:-1:-1;1610:31:3;;1589:104;;;;;;;;;;;;;;1753:26;;;;;;;:12;:26;;;;;;;:47;;;;;;;;;;1815:80;;;;;1753:26;;1875:10;;1815:80;;;;;;;;;;1236:666;;;;:::o;5468:2199:4:-;5555:26;;:::i;:::-;5653:19;5666:5;5653:12;:19::i;:::-;5631;;;:41;5974:22;;;;:27;5970:157;;;6047:38;6041:45;6017:69;;;;6100:16;;5970:157;6440:22;;;;:27;6436:157;;;6513:38;6507:45;;6436:157;6663:27;;;;6644:15;:46;6640:157;;6736:19;6730:26;;6640:157;6866:19;;;;;6856:30;;;;:9;:30;;;;;;;;;6852:143;;;6932:21;6926:28;;6852:143;7062:10;;;;7019:18;;7008:30;;;;;;;;:10;:30;;;;;;;;7039:19;;;;7008:51;;;;;;;;;;:64;7004:177;;;7118:21;7112:28;;7004:177;7301:19;;;;;7294:27;;;;:6;:27;;;;;;;;;7254:37;;;:67;;;7376:22;;;;-1:-1:-1;7331:179:4;;7444:24;7438:31;;7331:179;7613:20;7583:51;;;5468:2199;-1:-1:-1;5468:2199:4:o;4872:322::-;4980:26;;:::i;:::-;5009:19;5022:5;5009:12;:19::i;:::-;4980:48;;5067:35;5085:5;5092:9;5067:17;:35::i;:::-;5139:48;5160:5;5167:9;:19;;;5139:20;:48::i;1551:67::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;805:27:16:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;18429:1442:8:-;18613:35;;:::i;:::-;18664:27;18734:9;19120:37;19311:36;;:::i;:::-;18694:6;18701:1;18694:9;;;;;;;;;;;;;;;;;;:24;;;18664:54;;18746:1;18734:13;;18729:1103;18753:6;:13;18749:1;:17;18729:1103;;;19023:14;18996:6;19003:1;18996:9;;;;;;;;;;;;;;;;;;:24;;:41;;;;19160:70;19168:20;19190:16;:39;;;19160:7;:70::i;:::-;19120:110;;19350:135;19384:6;19391:1;19384:9;;;;;;;;;;;;;;;;;;19411:29;19458:10;19469:1;19458:13;;;;;;;;;19350:135;19311:174;;19570:51;19585:16;19603:17;19570:14;:51::i;:::-;19762:20;19719:16;:39;;;:63;19715:107;;;19802:5;;19715:107;18768:3;;;;;18729:1103;;1219:33:17;;;;:::o;20259:1834:8:-;20435:35;;:::i;:::-;20486:27;20556:9;20946:37;21252;21538:36;;:::i;:::-;20516:6;20523:1;20516:9;;;;;;;;;;;;;;;;;;:24;;;20486:54;;20568:1;20556:13;;20551:1503;20575:6;:13;20571:1;:17;20551:1503;;;20850:14;20823:6;20830:1;20823:9;;;;;;;;;;;;;;;;;;;:24;;:41;21016:39;;20986:70;;20994:20;;20986:7;:70::i;:::-;20946:110;;21292:165;21326:6;21333:1;21326:9;;;;;;;;;21292:165;21252:205;;21577:128;21604:6;21611:1;21604:9;;;;;;;;;;;;;;;;;;21631:29;21678:10;21689:1;21678:13;;;;;;;;;21577:128;21538:167;;21790:51;21805:16;21823:17;21790:14;:51::i;:::-;21941:39;;:63;;21937:107;;;22024:5;;21937:107;20590:3;;;;;20551:1503;;1065:36:7;;;;;;:::o;534:167:29:-;460:5;;;;446:10;:19;425:85;;;;;;;;;;;;;;630:22;;;;626:69;;668:5;:16;;;;;;;;;;626:69;534:167;:::o;1078:46:2:-;;;;;;;;;;;;;;;;;;;:::o;1772:648:19:-;1965:39;;2006:40;;1957:90;;1965:39;1957:7;:90::i;:::-;1915:132;;2107:39;;;;;2148:40;;;;2099:90;;2107:39;2099:7;:90::i;:::-;2057:39;;;:132;2239:29;;;;;2270:30;;;;2231:70;;2239:29;2231:7;:70::i;:::-;2199:29;;;:102;2351:29;;;;;2382:30;;;;2343:70;;2351:29;2343:7;:70::i;:::-;2311:29;;;;:102;;;;-1:-1:-1;1772:648:19:o;4780:241:7:-;4911:21;;4863:7;;;;4911:35;:21;:35;:72;;4962:21;;;;4911:72;;;4949:10;4911:72;4886:97;4780:241;-1:-1:-1;;4780:241:7:o;4622:1075:5:-;5576:64;5584:9;:26;;;5612:10;:27;;;5576:7;:64::i;:::-;5496;5504:9;:26;;;5532:10;:27;;;5496:7;:64::i;:::-;:144;;5475:215;;;;;;;;;;;;;6433:3469;6705:59;;:::i;:::-;7661:37;7779:38;7900:34;7944:35;7701:68;7709:9;:26;;;7737:31;7701:7;:68::i;:::-;7661:108;;7820:70;7828:10;:27;;;7857:32;7820:7;:70::i;:::-;7779:111;;8089:68;8097:30;8129:10;:27;;;8089:7;:68::i;:::-;8006:67;8014:29;8045:10;:27;;;8006:7;:67::i;:::-;:151;7989:1238;;8279:29;8250:58;;8518:164;8552:10;:27;;;8597:10;:27;;;8642:26;8518:16;:164::i;:::-;8488:194;;7989:1238;;;8813:30;8783:60;;9051:165;9085:10;:27;;;9130:10;:27;;;9175;9051:16;:165::i;:::-;9022:194;;7989:1238;9312:93;9346:9;9369:26;9312:20;:93::i;:::-;9286:119;;9493:95;9527:10;9551:27;9493:20;:95::i;:::-;9466:24;;;;:122;;;9711:23;;:46;9771:47;;;9690:138;;9711:46;9690:7;:138::i;:::-;9642:45;;;:186;6433:3469;;;;;;;;;;:::o;9978:1727:4:-;10344:21;;:52;;10375:20;10344:52;10323:115;;;;;;;;;;;;;;10514:25;;;10493:92;;;;;;;;;;;;;;10657:19;;;;:33;;;10653:170;;10731:19;;;;:33;;10754:10;10731:33;10706:106;;;;;;;;;;;;;;10893:18;;;;:32;;;10889:169;;10988:12;10966:34;;:5;:18;;;:34;;;10941:106;;;;;;;;;;;;;;;;11140:37;;;;:42;11136:301;;;11223:146;11261:9;:19;;;11302:5;:18;;;11342:9;11223:16;:146::i;:::-;11198:228;;;;;;;;;;;;;;;;11509:149;11542:22;11582:5;:22;;;11622:5;:22;;;11509:15;:149::i;:::-;11508:150;11487:211;;;;;;;;;;;;;;9978:1727;;;;;;:::o;7987:792::-;8265:72;8273:27;8302:11;:34;;;8265:7;:72::i;:::-;8245:17;;;;:6;:17;;;;;;;;;:92;;;;8424:25;;;;8392:18;;8513:34;;8561;;;;8609:24;;;;8647;;;;8708:20;;;;8742;;;;8374:398;;8245:17;;8374:398;;;;;;;;;;;;;;8463:12;;8489:10;;8513:34;;8561;;8609:24;;8742:20;8374:398;;;;;;;;;;7987:792;;;;;:::o;10348:2233:5:-;10623:14;10595:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:25;;:42;;10623:14;;10595:42;;10623:14;10595:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10681:202;10715:9;:24;;;10753:9;:22;;;10789:10;:23;;;10826:18;:24;;;:47;;;10681:20;:202::i;:::-;10927:25;;;;10966:23;;11003:22;;11039:23;;:46;;;10893:202;;10927:25;10966:23;11003:22;10893:20;:202::i;:::-;11105:189;11139:9;:24;;;11177:9;:22;;;11213:12;11239:18;:45;;;11105:20;:189::i;:::-;11327:185;11361:12;11387:9;:22;;;11423:9;:29;;;11466:18;:23;;;:36;;;11327:20;:185::i;:::-;11522:188;11556:12;11582:10;:23;;;11619:10;:30;;;11663:18;:24;;;:37;;;11522:20;:188::i;:::-;11780:10;:30;;;11747:63;;:9;:29;;;:63;;;11743:832;;;11826:301;11864:12;11894;11924:9;:29;;;11971:142;12000:18;:23;;;:36;;;12058:18;:24;;;:37;;;11971:7;:142::i;:::-;11826:20;:301::i;:::-;11743:832;;;12158:195;12196:12;12226;12256:9;:29;;;12303:18;:23;;;:36;;;12158:20;:195::i;:::-;12367:197;12405:12;12435;12465:10;:30;;;12513:18;:24;;;:37;;;12367:20;:197::i;:::-;10348:2233;;;;;:::o;418:146:30:-;498:7;528:6;;;;521:14;;;;-1:-1:-1;552:5:30;;;418:146::o;8118:448:27:-;8202:13;8263:1;8252;:8;:12;8231:92;;;;;;;;;;;;;;;;8373:8;;8371:1;;8373:12;;;;8371:15;;;;;;;;;;8485:8;;8481:16;;8510:17;;;-1:-1:-1;8371:15:27;;;;;;;8118:448::o;13049:490::-;13170:14;13233:5;13241:2;13233:10;13221:1;:8;:22;;13200:107;;;;;;;;;;;;;;;;-1:-1:-1;13486:13:27;13388:2;13486:13;13480:20;;13049:490::o;8761:482::-;8848:14;8911:2;8899:1;:8;:14;;8878:99;;;;;;;;;;;;;;;;9029:29;9041:1;9055:2;9044:1;:8;:13;9029:11;:29::i;:::-;9161:8;;9157:17;;9187;;;-1:-1:-1;9020:38:27;8761:482::o;937:326:20:-;1091:21;1144:82;1165:26;1173:9;1184:6;1165:7;:26::i;:::-;1205:11;1144:7;:82::i;:::-;1128:98;937:326;-1:-1:-1;;;;937:326:20:o;1161:135:30:-;1246:7;1280:1;1276;:5;:13;;1288:1;1276:13;;;-1:-1:-1;1284:1:30;;1269:20;-1:-1:-1;1161:135:30:o;12989:994:4:-;13140:30;;:::i;:::-;13345:34;;;:59;;;13529:22;;;;13565;;;;13451:146;;13382:22;;13451:16;:146::i;:::-;13414:183;;13664:34;;;;13712:22;;;;13748:14;;;;13634:138;;13664:34;13712:22;13634:16;:138::i;:::-;13607:24;;;:165;13839:34;;;;13887:22;;;;13923:14;;;;13809:138;;13839:34;13887:22;13809:16;:138::i;:::-;13782:24;;;:165;12989:994;;;;:::o;14293:932::-;14500:14;14472:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:25;;:42;;14500:14;;14472:42;;14500:14;14472:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14524:170;14558:5;:20;;;14592:5;:18;;;14624:12;14650:11;:34;;;14524:20;:170::i;:::-;14704;14738:5;:20;;;14772:12;14798:5;:18;;;14830:11;:34;;;14704:20;:170::i;:::-;14884:165;14918:12;14944:5;:18;;;14976:5;:25;;;15015:11;:24;;;14884:20;:165::i;:::-;15059:159;15093:12;15119;15145:5;:25;;;15184:11;:24;;;15059:20;:159::i;:::-;14293:932;;;;:::o;1669:893:7:-;1228:146;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;6:49;;1228:146:7;;;;;;;;1218:157;;1833:14;;;;;;1228:146;;;;1218:157;;;;1228:146;1218:157;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;365:33;;1218:157:7;;;;;;;;;;;1950:15;;1218:157;;-1:-1:-1;1950:15:7;;-1:-1:-1;1218:157:7;;-1:-1:-1;1218:157:7;;1950:15;;;-1:-1:-1;1950:15:7;1218:157;1950:15;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;365:33;;1950:15:7;;;;;;;;;;;;2263:26;;;2309:15;;2302:29;;;;-1:-1:-1;2387:42:7;2368:62;;;;2351:15;;;2344:87;;;;-1:-1:-1;;2463:2:7;2451:15;;2444:33;-1:-1:-1;;2518:3:7;2500:22;;;;1669:893;-1:-1:-1;1669:893:7:o;1737:205:17:-;1831:7;1888:13;;;;;;;;;;;;;;;;;;1903:18;;1923:10;1871:63;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;365:33;;1871:63:17;;;;;-1:-1:-1;1871:63:17;;;;;;;-1:-1:-1;1871:63:17;;;26:21:-1;;;22:32;;6:49;;1871:63:17;;;;;;;1861:74;;1871:63;;-1:-1:-1;1871:63:17;;;1861:74;;;;1871:63;1861:74;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;;;;365:33;;1861:74:17;;;;;;;;;;;;-1:-1:-1;;;;;1737:205:17:o;4126:202:21:-;4215:17;4260:35;4278:16;4288:5;4278:9;:16::i;11902:816:4:-;12166:21;;12558:20;;12166:52;;12197:20;12166:52;12145:115;;;;;;;;;;;;;;12334:19;;;;:33;;;12330:170;;12408:19;;;;:33;;12431:10;12408:33;12383:106;;;;;;;;;;;;;;12581:26;:24;:26::i;:::-;12638:18;;12558:49;;-1:-1:-1;12638:34:4;;;;;;;12617:94;;;;;;;;;;;;;;11902:816;;;:::o;9081:422::-;9229:20;;;;:9;:20;;;;;;;:27;;;;9252:4;9229:27;;;9346:25;;;;9314:18;;9432:20;;;;9466;;;;9294:202;;9239:9;;9294:202;;;;;;;;;;;;;;9385:10;;9466:20;9294:202;;;;;;;;;;9081:422;;:::o;570:166:30:-;650:7;682:5;;;704:6;;;;697:14;;;84:180;164:7;196:5;;;218:6;;;:20;;;237:1;232;228;:5;;;;;;;;:10;218:20;211:28;;;;;1502:555:20;1655:12;1683:17;1840:33;1729:11;1703:38;;;;;;;1718:9;1710:6;1703:38;1683:58;-1:-1:-1;1755:14:20;;1751:79;;;1792:5;1785:12;;;;1751:79;1876:98;1897:27;1905:9;1916:7;1897;:27::i;:::-;1938:26;1946:9;1957:6;1938:7;:26::i;:::-;1876:7;:98::i;:::-;2022:4;-1:-1:-1;1994:32:20;1502:555;-1:-1:-1;;;;;;1502:555:20:o;2561:5007:3:-;3031:19;3290:18;2797:1;2788:6;:10;2784:4778;;;2887:16;;2906:1;-1:-1:-1;2862:109:3;;;;;;;;;;;;;;-1:-1:-1;;3153:2:3;3138:18;;;3111:46;3179:66;3107:156;3311:26;;;;:12;:26;;;;;;;;;;3422:24;;;3397:109;;;;;;;;;;;;;;4923:2;4917:9;5239:15;5234:2;5222:9;5216:16;5212:25;5208:47;5392:14;5387:3;5383:24;5374:7;5370:38;5676:66;5667:7;5660:83;6160:3;6156:1;6147:7;6143:15;6136:28;6216:42;6210:4;6206:53;6201:2;6192:7;6188:16;6181:79;6310:42;6306:2;6302:51;6297:2;6288:7;6284:16;6277:77;6397:6;6391:3;6382:7;6378:17;6371:33;6563:3;6554:7;6550:17;6584:206;6604:5;6594:8;6591:19;6584:206;;;6653:16;;6636:34;;6717:2;6754:18;;;;6703:17;6584:206;;;7356:3;7285:7;7231;7224:5;7220:19;7147:7;7081:1;7006:10;6943:3;6917:512;7456:7;7449:15;7446:2;;;7503:16;7494:7;7487:33;7446:2;4724:2828;;;;;2561:5007;;;;;;:::o;10073:886:27:-;10194:14;10257:5;10265:2;10257:10;10245:1;:8;:22;;10224:135;;;;;;;;;;;;;;;;-1:-1:-1;10861:13:27;10606:2;10861:13;10855:20;10877:42;10851:69;;10073:886::o;270:142:30:-;350:7;373:6;386:1;382;:5;;;;;;;;;270:142;-1:-1:-1;;;;270:142:30:o;4468:1528:21:-;769:457;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;769:457:21;;;;;;;;759:468;;4554:14;;;;;;;;769:457;;;;;759:468;;;;769:457;759:468;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;365:33;;759:468:21;;;;;;;;;;;4678:20;;;;4668:31;;759:468;;-1:-1:-1;4678:20:21;-1:-1:-1;759:468:21;;-1:-1:-1;759:468:21;;4668:31;;;-1:-1:-1;4668:31:21;759:468;4668:31;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;365:33;;4668:31:21;;;;;;;;;;;4748:20;;;;4738:31;;4668;;-1:-1:-1;4748:20:21;-1:-1:-1;4668:31:21;;-1:-1:-1;4668:31:21;;4738;;;-1:-1:-1;4738:31:21;4668;4738;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;;;;365:33;;4738:31:21;;;;;;;;;;5425:15;;;5419:22;;5484:3;5473:15;;5467:22;;5532:3;5521:15;;;5515:22;;5592:35;;;5640:43;;;5696;;;5788:3;5762:30;;5841;;5884;;;-1:-1:-1;;;5927:30:21;;;-1:-1:-1;5762:30:21;;4468:1528;-1:-1:-1;4468:1528:21:o;896:616:2:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;-1:-1:-1;896:616:2;;;;;;;;;;;;;;;;;:::o;5:118:-1:-;;72:46;110:6;97:20;72:46;;146:693;;261:4;249:17;;245:27;-1:-1;235:2;;286:1;283;276:12;235:2;323:6;310:20;345:85;360:69;422:6;360:69;;;345:85;;;458:21;;;502:4;490:17;;;;336:94;;-1:-1;515:14;;490:17;610:1;595:238;620:6;617:1;614:13;595:238;;;703:3;690:17;682:6;678:30;727:42;765:3;753:10;727:42;;;715:55;;-1:-1;793:4;784:14;;;;812;;;;;642:1;635:9;595:238;;;599:14;228:611;;;;;;;;879:735;;1008:4;996:17;;992:27;-1:-1;982:2;;1033:1;1030;1023:12;982:2;1070:6;1057:20;1092:99;1107:83;1183:6;1107:83;;1092:99;1219:21;;;1263:4;1251:17;;;;1083:108;;-1:-1;1276:14;;1251:17;1371:1;1356:252;1381:6;1378:1;1375:13;1356:252;;;1464:3;1451:17;1443:6;1439:30;1488:56;1540:3;1528:10;1488:56;;;1476:69;;-1:-1;1568:4;1559:14;;;;1587;;;;;1403:1;1396:9;1356:252;;1640:707;;1750:4;1738:17;;1734:27;-1:-1;1724:2;;1775:1;1772;1765:12;1724:2;1812:6;1799:20;1834:80;1849:64;1906:6;1849:64;;1834:80;1825:89;;1931:5;1956:6;1949:5;1942:21;1986:4;1978:6;1974:17;1964:27;;2008:4;2003:3;1999:14;1992:21;;2061:6;2108:3;2100:4;2092:6;2088:17;2083:3;2079:27;2076:36;2073:2;;;2125:1;2122;2115:12;2073:2;2150:1;2135:206;2160:6;2157:1;2154:13;2135:206;;;2218:3;2240:37;2273:3;2261:10;2240:37;;;2228:50;;-1:-1;2301:4;2292:14;;;;2320;;;;;2182:1;2175:9;2135:206;;2355:112;;2419:43;2454:6;2441:20;2419:43;;2474:116;;2549:36;2577:6;2571:13;2549:36;;2597:118;;2664:46;2702:6;2689:20;2664:46;;2722:116;;2788:45;2825:6;2812:20;2788:45;;2845:120;;2922:38;2952:6;2946:13;2922:38;;2986:335;;;3093:4;3081:17;;3077:27;-1:-1;3067:2;;3118:1;3115;3108:12;3067:2;-1:-1;3138:20;;3178:18;3167:30;;3164:2;;;3210:1;3207;3200:12;3164:2;3244:4;3236:6;3232:17;3220:29;;3294:3;3287;3279:6;3275:16;3265:8;3261:31;3258:40;3255:2;;;3311:1;3308;3301:12;3255:2;3060:261;;;;;;3330:432;;3420:4;3408:17;;3404:27;-1:-1;3394:2;;3445:1;3442;3435:12;3394:2;3482:6;3469:20;3504:60;3519:44;3556:6;3519:44;;3504:60;3495:69;;3584:6;3577:5;3570:21;3620:4;3612:6;3608:17;3653:4;3646:5;3642:16;3688:3;3679:6;3674:3;3670:16;3667:25;3664:2;;;3705:1;3702;3695:12;3664:2;3715:41;3749:6;3744:3;3739;3715:41;;;3387:375;;;;;;;;4247:2205;;4355:5;4343:9;4338:3;4334:19;4330:31;4327:2;;;4374:1;4371;4364:12;4327:2;4392:21;4407:5;4392:21;;;4383:30;-1:-1;4471:1;4502:49;4547:3;4527:9;4502:49;;;4478:74;;-1:-1;4621:2;4654:49;4699:3;4675:22;;;4654:49;;;4647:4;4640:5;4636:16;4629:75;4573:142;4780:2;4813:49;4858:3;4849:6;4838:9;4834:22;4813:49;;;4806:4;4799:5;4795:16;4788:75;4725:149;4933:2;4966:49;5011:3;5002:6;4991:9;4987:22;4966:49;;;4959:4;4952:5;4948:16;4941:75;4884:143;5089:3;5123:49;5168:3;5159:6;5148:9;5144:22;5123:49;;;5116:4;5109:5;5105:16;5098:75;5037:147;5246:3;5280:49;5325:3;5316:6;5305:9;5301:22;5280:49;;;5273:4;5266:5;5262:16;5255:75;5194:147;5395:3;5429:49;5474:3;5465:6;5454:9;5450:22;5429:49;;;5422:4;5415:5;5411:16;5404:75;5351:139;5544:3;5578:49;5623:3;5614:6;5603:9;5599:22;5578:49;;;5571:4;5564:5;5560:16;5553:75;5500:139;5706:3;5741:49;5786:3;5777:6;5766:9;5762:22;5741:49;;;5733:5;5726;5722:17;5715:76;5649:153;5852:3;5887:49;5932:3;5923:6;5912:9;5908:22;5887:49;;;5879:5;5872;5868:17;5861:76;5812:136;6036:3;6025:9;6021:19;6008:33;6061:18;6053:6;6050:30;6047:2;;;6093:1;6090;6083:12;6047:2;6129:54;6179:3;6170:6;6159:9;6155:22;6129:54;;;6121:5;6114;6110:17;6103:81;5958:237;6283:3;6272:9;6268:19;6255:33;6308:18;6300:6;6297:30;6294:2;;;6340:1;6337;6330:12;6294:2;6376:54;6426:3;6417:6;6406:9;6402:22;6376:54;;;6368:5;6361;6357:17;6350:81;6205:237;4321:2131;;;;;8828:241;;8932:2;8920:9;8911:7;8907:23;8903:32;8900:2;;;8948:1;8945;8938:12;8900:2;8983:1;9000:53;9045:7;9025:9;9000:53;;9076:366;;;9197:2;9185:9;9176:7;9172:23;9168:32;9165:2;;;9213:1;9210;9203:12;9165:2;9248:1;9265:53;9310:7;9290:9;9265:53;;;9255:63;;9227:97;9355:2;9373:53;9418:7;9409:6;9398:9;9394:22;9373:53;;;9363:63;;9334:98;9159:283;;;;;;9449:360;;;9567:2;9555:9;9546:7;9542:23;9538:32;9535:2;;;9583:1;9580;9573:12;9535:2;9618:1;9635:53;9680:7;9660:9;9635:53;;;9625:63;;9597:97;9725:2;9743:50;9785:7;9776:6;9765:9;9761:22;9743:50;;9816:415;;9964:2;9952:9;9943:7;9939:23;9935:32;9932:2;;;9980:1;9977;9970:12;9932:2;10015:31;;10066:18;10055:30;;10052:2;;;10098:1;10095;10088:12;10052:2;10118:97;10207:7;10198:6;10187:9;10183:22;10118:97;;10238:947;;;;10475:2;10463:9;10454:7;10450:23;10446:32;10443:2;;;10491:1;10488;10481:12;10443:2;10526:31;;10577:18;10566:30;;10563:2;;;10609:1;10606;10599:12;10563:2;10629:97;10718:7;10709:6;10698:9;10694:22;10629:97;;;10619:107;;10505:227;10791:2;10780:9;10776:18;10763:32;10815:18;10807:6;10804:30;10801:2;;;10847:1;10844;10837:12;10801:2;10867:78;10937:7;10928:6;10917:9;10913:22;10867:78;;;10857:88;;10742:209;11010:2;10999:9;10995:18;10982:32;11034:18;11026:6;11023:30;11020:2;;;11066:1;11063;11056:12;11020:2;11086:83;11161:7;11152:6;11141:9;11137:22;11086:83;;;11076:93;;10961:214;10437:748;;;;;;11192:811;;;;11404:2;11392:9;11383:7;11379:23;11375:32;11372:2;;;11420:1;11417;11410:12;11372:2;11455:31;;11506:18;11495:30;;11492:2;;;11538:1;11535;11528:12;11492:2;11558:97;11647:7;11638:6;11627:9;11623:22;11558:97;;;11548:107;;11434:227;11692:2;11710:53;11755:7;11746:6;11735:9;11731:22;11710:53;;12010:257;;12122:2;12110:9;12101:7;12097:23;12093:32;12090:2;;;12138:1;12135;12128:12;12090:2;12173:1;12190:61;12243:7;12223:9;12190:61;;12274:241;;12378:2;12366:9;12357:7;12353:23;12349:32;12346:2;;;12394:1;12391;12384:12;12346:2;12429:1;12446:53;12491:7;12471:9;12446:53;;12522:366;;;12643:2;12631:9;12622:7;12618:23;12614:32;12611:2;;;12659:1;12656;12649:12;12611:2;12694:1;12711:53;12756:7;12736:9;12711:53;;12895:615;;;;;13052:2;13040:9;13031:7;13027:23;13023:32;13020:2;;;13068:1;13065;13058:12;13020:2;13103:1;13120:53;13165:7;13145:9;13120:53;;;13110:63;;13082:97;13210:2;13228:53;13273:7;13264:6;13253:9;13249:22;13228:53;;;13218:63;;13189:98;13346:2;13335:9;13331:18;13318:32;13370:18;13362:6;13359:30;13356:2;;;13402:1;13399;13392:12;13356:2;13430:64;13486:7;13477:6;13466:9;13462:22;13430:64;;;13014:496;;;;-1:-1;13412:82;-1:-1;;;;13014:496;13517:595;;;;13664:2;13652:9;13643:7;13639:23;13635:32;13632:2;;;13680:1;13677;13670:12;13632:2;13715:1;13732:53;13777:7;13757:9;13732:53;;;13722:63;;13694:97;13822:2;13840:53;13885:7;13876:6;13865:9;13861:22;13840:53;;;13830:63;;13801:98;13958:2;13947:9;13943:18;13930:32;13982:18;13974:6;13971:30;13968:2;;;14014:1;14011;14004:12;13968:2;14034:62;14088:7;14079:6;14068:9;14064:22;14034:62;;14119:239;;14222:2;14210:9;14201:7;14197:23;14193:32;14190:2;;;14238:1;14235;14228:12;14190:2;14273:1;14290:52;14334:7;14314:9;14290:52;;14365:261;;14479:2;14467:9;14458:7;14454:23;14450:32;14447:2;;;14495:1;14492;14485:12;14447:2;14530:1;14547:63;14602:7;14582:9;14547:63;;14633:373;;14760:2;14748:9;14739:7;14735:23;14731:32;14728:2;;;14776:1;14773;14766:12;14728:2;14811:31;;14862:18;14851:30;;14848:2;;;14894:1;14891;14884:12;14848:2;14914:76;14982:7;14973:6;14962:9;14958:22;14914:76;;15013:1089;;;;;15232:3;15220:9;15211:7;15207:23;15203:33;15200:2;;;15249:1;15246;15239:12;15200:2;15284:31;;15335:18;15324:30;;15321:2;;;15367:1;15364;15357:12;15321:2;15387:76;15455:7;15446:6;15435:9;15431:22;15387:76;;;15377:86;;15263:206;15528:2;15517:9;15513:18;15500:32;15552:18;15544:6;15541:30;15538:2;;;15584:1;15581;15574:12;15538:2;15604:76;15672:7;15663:6;15652:9;15648:22;15604:76;;;15594:86;;15479:207;15745:2;15734:9;15730:18;15717:32;15769:18;15761:6;15758:30;15755:2;;;15801:1;15798;15791:12;15755:2;15821:62;15875:7;15866:6;15855:9;15851:22;15821:62;;;15811:72;;15696:193;15948:2;15937:9;15933:18;15920:32;15972:18;15964:6;15961:30;15958:2;;;16004:1;16001;15994:12;15958:2;16024:62;16078:7;16069:6;16058:9;16054:22;16024:62;;;16014:72;;15899:193;15194:908;;;;;;;;16109:727;;;;16279:2;16267:9;16258:7;16254:23;16250:32;16247:2;;;16295:1;16292;16285:12;16247:2;16330:31;;16381:18;16370:30;;16367:2;;;16413:1;16410;16403:12;16367:2;16433:76;16501:7;16492:6;16481:9;16477:22;16433:76;;;16423:86;;16309:206;16546:2;16564:53;16609:7;16600:6;16589:9;16585:22;16564:53;;17091:865;;;;;;;17284:3;17272:9;17263:7;17259:23;17255:33;17252:2;;;17301:1;17298;17291:12;17252:2;17336:1;17353:53;17398:7;17378:9;17353:53;;;17343:63;;17315:97;17443:2;17461:53;17506:7;17497:6;17486:9;17482:22;17461:53;;;17451:63;;17422:98;17579:2;17568:9;17564:18;17551:32;17603:18;17595:6;17592:30;17589:2;;;17635:1;17632;17625:12;17589:2;17663:64;17719:7;17710:6;17699:9;17695:22;17663:64;;;17645:82;;;;17530:203;17792:2;17781:9;17777:18;17764:32;17816:18;17808:6;17805:30;17802:2;;;17848:1;17845;17838:12;17802:2;17876:64;17932:7;17923:6;17912:9;17908:22;17876:64;;;17858:82;;;;17743:203;17246:710;;;;;;;;;17963:110;18036:31;18061:5;18036:31;;;18031:3;18024:44;18018:55;;;18080:101;18147:28;18169:5;18147:28;;18188:110;18261:31;18286:5;18261:31;;18305:107;18376:30;18400:5;18376:30;;18419:297;;18519:38;18551:5;18519:38;;;18574:6;18569:3;18562:19;18586:63;18642:6;18635:4;18630:3;18626:14;18619:4;18612:5;18608:16;18586:63;;;18681:29;18703:6;18681:29;;;18661:50;;;18674:4;18661:50;;18499:217;-1:-1;;;18499:217;19019:156;19112:57;19163:5;19112:57;;19482:296;19637:2;19625:15;;19674:66;19669:2;19660:12;;19653:88;19769:2;19760:12;;19618:160;19787:296;19942:2;19930:15;;19979:66;19974:2;19965:12;;19958:88;20074:2;20065:12;;19923:160;20092:296;20247:2;20235:15;;20284:66;20279:2;20270:12;;20263:88;20379:2;20370:12;;20228:160;20397:397;20552:2;20540:15;;20589:66;20584:2;20575:12;;20568:88;20690:66;20685:2;20676:12;;20669:88;20785:2;20776:12;;20533:261;20803:296;20958:2;20946:15;;20995:66;20990:2;20981:12;;20974:88;21090:2;21081:12;;20939:160;21108:296;21263:2;21251:15;;21300:66;21295:2;21286:12;;21279:88;21395:2;21386:12;;21244:160;21413:296;21568:2;21556:15;;21605:66;21600:2;21591:12;;21584:88;21700:2;21691:12;;21549:160;21718:296;21873:2;21861:15;;21910:66;21905:2;21896:12;;21889:88;22005:2;21996:12;;21854:160;22023:296;22178:2;22166:15;;22215:66;22210:2;22201:12;;22194:88;22310:2;22301:12;;22159:160;22328:296;22483:2;22471:15;;22520:66;22515:2;22506:12;;22499:88;22615:2;22606:12;;22464:160;22633:296;22788:2;22776:15;;22825:66;22820:2;22811:12;;22804:88;22920:2;22911:12;;22769:160;22938:296;23093:2;23081:15;;23130:66;23125:2;23116:12;;23109:88;23225:2;23216:12;;23074:160;23243:296;23398:2;23386:15;;23435:66;23430:2;23421:12;;23414:88;23530:2;23521:12;;23379:160;23548:397;23703:2;23691:15;;23740:66;23735:2;23726:12;;23719:88;23841:66;23836:2;23827:12;;23820:88;23936:2;23927:12;;23684:261;23954:296;24109:2;24097:15;;24146:66;24141:2;24132:12;;24125:88;24241:2;24232:12;;24090:160;24259:296;24414:2;24402:15;;24451:66;24446:2;24437:12;;24430:88;24546:2;24537:12;;24395:160;24564:296;24719:2;24707:15;;24756:66;24751:2;24742:12;;24735:88;24851:2;24842:12;;24700:160;24869:296;25024:2;25012:15;;25061:66;25056:2;25047:12;;25040:88;25156:2;25147:12;;25005:160;25174:296;25329:2;25317:15;;25366:66;25361:2;25352:12;;25345:88;25461:2;25452:12;;25310:160;25479:296;25634:2;25622:15;;25671:66;25666:2;25657:12;;25650:88;25766:2;25757:12;;25615:160;25784:296;25939:2;25927:15;;25976:66;25971:2;25962:12;;25955:88;26071:2;26062:12;;25920:160;26089:397;26244:2;26232:15;;26281:66;26276:2;26267:12;;26260:88;26382:66;26377:2;26368:12;;26361:88;26477:2;26468:12;;26225:261;26495:296;26650:2;26638:15;;26687:66;26682:2;26673:12;;26666:88;26782:2;26773:12;;26631:160;26800:296;26955:2;26943:15;;26992:66;26987:2;26978:12;;26971:88;27087:2;27078:12;;26936:160;27105:296;27260:2;27248:15;;27297:66;27292:2;27283:12;;27276:88;27392:2;27383:12;;27241:160;27410:296;27565:2;27553:15;;27602:66;27597:2;27588:12;;27581:88;27697:2;27688:12;;27546:160;27715:296;27870:2;27858:15;;27907:66;27902:2;27893:12;;27886:88;28002:2;27993:12;;27851:160;28096:888;28324:22;;28237:4;28228:14;;;28358:61;28232:3;28324:22;28358:61;;;28257:174;28525:4;28518:5;28514:16;28508:23;28543:62;28599:4;28594:3;28590:14;28577:11;28543:62;;;28441:176;28701:4;28694:5;28690:16;28684:23;28719:62;28775:4;28770:3;28766:14;28753:11;28719:62;;;28627:166;28877:4;28870:5;28866:16;28860:23;28895:62;28951:4;28946:3;28942:14;28929:11;28895:62;;30050:815;30275:22;;30205:5;30196:15;;;30309:115;30200:3;30275:22;30309:115;;;30226:210;30513:4;30506:5;30502:16;30496:23;30531:116;30641:4;30636:3;30632:14;30619:11;30531:116;;;30446:213;30757:4;30750:5;30746:16;30740:23;30775:63;30831:5;30826:3;30822:15;30809:11;30775:63;;30933:695;31146:22;;31070:4;31061:14;;;31180:57;31065:3;31146:22;31180:57;;;31090:159;31330:4;31323:5;31319:16;31313:23;31348:62;31404:4;31399:3;31395:14;31382:11;31348:62;;;31259:163;31521:4;31514:5;31510:16;31504:23;31539:62;31595:4;31590:3;31586:14;31573:11;31539:62;;31752:104;31821:29;31844:5;31821:29;;31863:193;31971:2;31956:18;;31985:61;31960:9;32019:6;31985:61;;32063:1057;32395:3;32380:19;;32410:61;32384:9;32444:6;32410:61;;;32482:62;32540:2;32529:9;32525:18;32516:6;32482:62;;;32555;32613:2;32602:9;32598:18;32589:6;32555:62;;;32628;32686:2;32675:9;32671:18;32662:6;32628:62;;;32701:63;32759:3;32748:9;32744:19;32735:6;32701:63;;;32775;32833:3;32822:9;32818:19;32809:6;32775:63;;;32887:9;32881:4;32877:20;32871:3;32860:9;32856:19;32849:49;32912:62;32969:4;32960:6;32912:62;;;32904:70;;33023:9;33017:4;33013:20;33007:3;32996:9;32992:19;32985:49;33048:62;33105:4;33096:6;33048:62;;;33040:70;32366:754;-1:-1;;;;;;;;;;32366:754;33127:547;33319:2;33304:18;;33333:61;33308:9;33367:6;33333:61;;;33442:9;33436:4;33432:20;33427:2;33416:9;33412:18;33405:48;33467:62;33524:4;33515:6;33467:62;;;33459:70;;33577:9;33571:4;33567:20;33562:2;33551:9;33547:18;33540:48;33602:62;33659:4;33650:6;33602:62;;;33594:70;33290:384;-1:-1;;;;;33290:384;33681:181;33783:2;33768:18;;33797:55;33772:9;33825:6;33797:55;;33869:193;33977:2;33962:18;;33991:61;33966:9;34025:6;33991:61;;34069:479;34251:2;34236:18;;34265:61;34240:9;34299:6;34265:61;;;34337:62;34395:2;34384:9;34380:18;34371:6;34337:62;;;34447:9;34441:4;34437:20;34432:2;34421:9;34417:18;34410:48;34472:66;34533:4;34524:6;34472:66;;34555:378;34709:2;34694:18;;34723:61;34698:9;34757:6;34723:61;;;34832:9;34826:4;34822:20;34817:2;34806:9;34802:18;34795:48;34857:66;34918:4;34909:6;34857:66;;34940:489;35128:3;35113:19;;35143:61;35117:9;35177:6;35143:61;;;35215:58;35269:2;35258:9;35254:18;35245:6;35215:58;;;35284:62;35342:2;35331:9;35327:18;35318:6;35284:62;;;35357;35415:2;35404:9;35400:18;35391:6;35357:62;;35436:290;35570:2;35555:18;;35584:59;35559:9;35616:6;35584:59;;;35654:62;35712:2;35701:9;35697:18;35688:6;35654:62;;35733:269;35855:2;35869:47;;;35840:18;;35930:62;35840:18;35978:6;35930:62;;36009:233;36137:2;36122:18;;36151:81;36126:9;36205:6;36151:81;;36529:387;36710:2;36724:47;;;36695:18;;36785:121;36695:18;36785:121;;36923:387;37104:2;37118:47;;;37089:18;;37179:121;37089:18;37179:121;;37317:387;37498:2;37512:47;;;37483:18;;37573:121;37483:18;37573:121;;37711:387;37892:2;37906:47;;;37877:18;;37967:121;37877:18;37967:121;;38105:387;38286:2;38300:47;;;38271:18;;38361:121;38271:18;38361:121;;38499:387;38680:2;38694:47;;;38665:18;;38755:121;38665:18;38755:121;;38893:387;39074:2;39088:47;;;39059:18;;39149:121;39059:18;39149:121;;39287:387;39468:2;39482:47;;;39453:18;;39543:121;39453:18;39543:121;;39681:387;39862:2;39876:47;;;39847:18;;39937:121;39847:18;39937:121;;40075:387;40256:2;40270:47;;;40241:18;;40331:121;40241:18;40331:121;;40469:387;40650:2;40664:47;;;40635:18;;40725:121;40635:18;40725:121;;40863:387;41044:2;41058:47;;;41029:18;;41119:121;41029:18;41119:121;;41257:387;41438:2;41452:47;;;41423:18;;41513:121;41423:18;41513:121;;41651:387;41832:2;41846:47;;;41817:18;;41907:121;41817:18;41907:121;;42045:387;42226:2;42240:47;;;42211:18;;42301:121;42211:18;42301:121;;42439:387;42620:2;42634:47;;;42605:18;;42695:121;42605:18;42695:121;;42833:387;43014:2;43028:47;;;42999:18;;43089:121;42999:18;43089:121;;43227:387;43408:2;43422:47;;;43393:18;;43483:121;43393:18;43483:121;;43621:387;43802:2;43816:47;;;43787:18;;43877:121;43787:18;43877:121;;44015:387;44196:2;44210:47;;;44181:18;;44271:121;44181:18;44271:121;;44409:387;44590:2;44604:47;;;44575:18;;44665:121;44575:18;44665:121;;44803:387;44984:2;44998:47;;;44969:18;;45059:121;44969:18;45059:121;;45197:387;45378:2;45392:47;;;45363:18;;45453:121;45363:18;45453:121;;45591:387;45772:2;45786:47;;;45757:18;;45847:121;45757:18;45847:121;;45985:387;46166:2;46180:47;;;46151:18;;46241:121;46151:18;46241:121;;46379:387;46560:2;46574:47;;;46545:18;;46635:121;46545:18;46635:121;;46773:387;46954:2;46968:47;;;46939:18;;47029:121;46939:18;47029:121;;47167:310;47333:3;47318:19;;47348:119;47322:9;47440:6;47348:119;;47484:338;47664:3;47649:19;;47679:133;47653:9;47785:6;47679:133;;47829:301;47991:2;47976:18;;48005:115;47980:9;48093:6;48005:115;;48337:256;48399:2;48393:9;48425:17;;;48500:18;48485:34;;48521:22;;;48482:62;48479:2;;;48557:1;48554;48547:12;48479:2;48573;48566:22;48377:216;;-1:-1;48377:216;48600:263;;48764:18;48756:6;48753:30;48750:2;;;48796:1;48793;48786:12;48750:2;-1:-1;48825:4;48813:17;;;48843:15;;48687:176;49419:254;;49558:18;49550:6;49547:30;49544:2;;;49590:1;49587;49580:12;49544:2;-1:-1;49663:4;49634;49611:17;;;;49630:9;49607:33;49653:15;;49481:192;49945:87;50015:12;;49999:33;50232:128;50312:42;50301:54;;50284:76;50367:92;50440:13;50433:21;;50416:43;50466:79;50535:5;50518:27;50552:151;50631:66;50620:78;;50603:100;50796:88;50874:4;50863:16;;50846:38;51455:135;;51554:31;51579:5;51554:31;;51598:145;51679:6;51674:3;51669;51656:30;-1:-1;51735:1;51717:16;;51710:27;51649:94;51752:268;51817:1;51824:101;51838:6;51835:1;51832:13;51824:101;;;51905:11;;;51899:18;51886:11;;;51879:39;51860:2;51853:10;51824:101;;;51940:6;51937:1;51934:13;51931:2;;;-1:-1;;52005:1;51987:16;;51980:27;51801:219;52028:97;52116:2;52096:14;52112:7;52092:28;;52076:49"
+ "object": "0x6080604052600436106101c15763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416632624b2d981146101c6578063288cdc91146101f1578063297bb70b146102115780632ac126221461023e5780633683ef8e1461026b5780633c28d8611461028d5780633e228bae146102ba5780633fd3c997146102da5780634ac14782146103075780634d0ae546146103275780634f9559b11461034757806350dde190146103675780636070410814610387578063642f2eaf146103b457806364a3bc15146103d457806377fcce68146103f45780637b8e3514146104145780637e1d9808146104345780637e9d74dc1461045457806382c174d0146104815780638da5cb5b146104a157806393634702146104b6578063a3e20380146104d6578063b4be83d5146104f6578063bfc8bfce14610516578063c585bb9314610536578063c75e0a8114610556578063d46b02c314610583578063d9bfa73e146105a3578063db123b1a146105c3578063dd1c7d18146105e5578063e306f77914610605578063e5fa431b1461061a578063eea086ba1461063a578063f2fde38b1461064f578063ffa1ad741461066f575b600080fd5b3480156101d257600080fd5b506101db610684565b6040516101e89190614ccb565b60405180910390f35b3480156101fd57600080fd5b506101db61020c366004614196565b6107d8565b34801561021d57600080fd5b5061023161022c36600461409b565b6107ea565b6040516101e89190614f55565b34801561024a57600080fd5b5061025e610259366004614196565b61087a565b6040516101e89190614cbd565b34801561027757600080fd5b5061028b6102863660046141d3565b61088f565b005b34801561029957600080fd5b506102ad6102a8366004614307565b610968565b6040516101e89190614f63565b3480156102c657600080fd5b506102316102d53660046143c7565b610a54565b3480156102e657600080fd5b506102fa6102f5366004614296565b610c64565b6040516101e89190614d87565b34801561031357600080fd5b5061028b610322366004614066565b610c8c565b34801561033357600080fd5b5061023161034236600461409b565b610cc4565b34801561035357600080fd5b5061028b610362366004614196565b610d4b565b34801561037357600080fd5b5061023161038236600461409b565b610e6f565b34801561039357600080fd5b506103a76103a2366004614296565b610ef6565b6040516101e89190614bdd565b3480156103c057600080fd5b5061025e6103cf366004614196565b610f44565b3480156103e057600080fd5b506102316103ef3660046143c7565b610f59565b34801561040057600080fd5b5061028b61040f366004614036565b610fb3565b34801561042057600080fd5b5061025e61042f366004613ffc565b61105e565b34801561044057600080fd5b5061023161044f36600461412f565b61107e565b34801561046057600080fd5b5061047461046f366004614066565b61114f565b6040516101e89190614cac565b34801561048d57600080fd5b5061025e61049c3660046141b4565b6111ed565b3480156104ad57600080fd5b506103a761120d565b3480156104c257600080fd5b5061025e6104d136600461423b565b611229565b3480156104e257600080fd5b506102316104f136600461412f565b611a4f565b34801561050257600080fd5b506102316105113660046143c7565b611b5f565b34801561052257600080fd5b5061028b610531366004614410565b611be3565b34801561054257600080fd5b5061028b610551366004613fde565b611e7c565b34801561056257600080fd5b506105766105713660046142d2565b6120a7565b6040516101e89190614f72565b34801561058f57600080fd5b5061028b61059e3660046142d2565b6121a1565b3480156105af57600080fd5b506101db6105be366004613ffc565b6121cc565b3480156105cf57600080fd5b506105d86121e9565b6040516101e89190614d76565b3480156105f157600080fd5b5061023161060036600461412f565b612295565b34801561061157600080fd5b506101db61235b565b34801561062657600080fd5b5061023161063536600461412f565b612361565b34801561064657600080fd5b506103a7612435565b34801561065b57600080fd5b5061028b61066a366004613fde565b612451565b34801561067b57600080fd5b506105d8612502565b604080517f454950373132446f6d61696e28000000000000000000000000000000000000006020808301919091527f737472696e67206e616d652c0000000000000000000000000000000000000000602d8301527f737472696e672076657273696f6e2c000000000000000000000000000000000060398301527f6164647265737320766572696679696e67436f6e74726163740000000000000060488301527f2900000000000000000000000000000000000000000000000000000000000000606183015282516042818403018152606290920192839052815191929182918401908083835b602083106107a857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161076b565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902081565b60036020526000908152604090205481565b6107f2613c04565b60006107fc613c04565b600091505b85518210156108715761085a868381518110151561081b57fe5b90602001906020020151868481518110151561083357fe5b90602001906020020151868581518110151561084b57fe5b90602001906020020151611b5f565b90506108668382612539565b600190910190610801565b50509392505050565b60046020526000908152604090205460ff1681565b6108ca848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843750611229945050505050565b151561090b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614e25565b60405180910390fd5b5050600091825260066020908152604080842073ffffffffffffffffffffffffffffffffffffffff9093168452919052902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b610970613c2d565b610978613c5c565b610980613c5c565b61016080880151610140808901919091528801519087015260006109a3886120a7565b92506109ae876120a7565b91506109b861259b565b90506109c488886125e4565b6109d8888885604001518560400151612640565b8051602001519094506109f290899085908490808b612704565b6020808501510151610a0b90889084908490808a612704565b610a248882856020015186604001518860000151612921565b610a3d8782846020015185604001518860200151612921565b610a49888883876129cd565b505050949350505050565b610a5c613c04565b604080517fb4be83d5000000000000000000000000000000000000000000000000000000008082526060600483018181528851606485019081526020808b01516084870152958a015160a48601529189015160c4850152608089015160e485015260a089015161010485015260c089015161012485015260e0890151610144850152610100890151610164850152610120890151610184850152610140890180516101a486019081526101608b01516101c487015261018090525180516101e48601819052939591938493926024870192849261020489019291820191601f82010460005b81811015610b5f578351855260209485019490930192600101610b41565b50505050818103610160808401919091528c0151805180835260209283019291820191601f82010460005b81811015610ba8578351855260209485019490930192600101610b8a565b5050508b84525084810360209384019081528a518083529093918201918b81019190601f82010460005b81811015610bf0578351855260209485019490930192600101610bd2565b5060808a8b86038c305af4808015610c0f5760018114610c2d57610c50565b60008e52600060208f0152600060408f0152600060608f0152610c50565b8b518e5260208c015160208f015260408c015160408f015260608c015160608f01525b505050505050505050505050509392505050565b600a6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60005b8151811015610cc057610cb88282815181101515610ca957fe5b906020019060200201516121a1565b600101610c8f565b5050565b610ccc613c04565b6000610cd6613c04565b600091505b855182101561087157610d348683815181101515610cf557fe5b906020019060200201518684815181101515610d0d57fe5b906020019060200201518685815181101515610d2557fe5b90602001906020020151610f59565b9050610d408382612539565b600190910190610cdb565b600080600080610d5961259b565b935073ffffffffffffffffffffffffffffffffffffffff84163314610d7e5733610d81565b60005b73ffffffffffffffffffffffffffffffffffffffff8086166000908152600560209081526040808320938516835292905220549093506001860192509050808211610df8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614ea5565b73ffffffffffffffffffffffffffffffffffffffff80851660008181526005602090815260408083209488168084529490915290819020859055517f82af639571738f4ebd4268fb0363d8957ebe1bbb9e78dba5ebd69eed39b154f090610e60908690614ccb565b60405180910390a35050505050565b610e77613c04565b6000610e81613c04565b600091505b855182101561087157610edf8683815181101515610ea057fe5b906020019060200201518684815181101515610eb857fe5b906020019060200201518685815181101515610ed057fe5b90602001906020020151610a54565b9050610eeb8382612539565b600190910190610e86565b7fffffffff0000000000000000000000000000000000000000000000000000000081166000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff165b919050565b60086020526000908152604090205460ff1681565b610f61613c04565b610f6c848484611b5f565b60208101519091508314610fac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614ec5565b9392505050565b6000610fbd61259b565b73ffffffffffffffffffffffffffffffffffffffff8181166000818152600760209081526040808320948916808452949091529081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168715151790555192935090917fa8656e308026eeabce8f0bc18048433252318ab80ac79da0b3d3d8697dfba89190611051908690614cbd565b60405180910390a3505050565b600760209081526000928352604080842090915290825290205460ff1681565b611086613c04565b6060600080611093613c04565b8760008151811015156110a257fe5b9060200190602002015161016001519350600092505b8751831015611144578388848151811015156110d057fe5b9060200190602002015161016001819052506110f0878660200151612bad565b915061111c888481518110151561110357fe5b9060200190602002015183888681518110151561084b57fe5b90506111288582612539565b868560200151141561113957611144565b6001909201916110b8565b505050509392505050565b6060600060606000845192508260405190808252806020026020018201604052801561119557816020015b611182613c5c565b81526020019060019003908161117a5790505b509150600090505b828110156111e5576111c585828151811015156111b657fe5b906020019060200201516120a7565b82828151811015156111d357fe5b6020908102909101015260010161119d565b509392505050565b600660209081526000928352604080842090915290825290205460ff1681565b60025473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008060008060008060008951111515611272576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614e95565b61127b89612bef565b7f010000000000000000000000000000000000000000000000000000000000000090049650600960ff8816106112dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614dd5565b8660ff1660098111156112ec57fe5b955060008660098111156112fc57fe5b1415611334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614e85565b600186600981111561134257fe5b141561138a57885115611381576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614f45565b60009750611a41565b600286600981111561139857fe5b14156114d35788516041146113d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614d95565b8860008151811015156113e857fe5b01602001517f010000000000000000000000000000000000000000000000000000000000000090819004810204945061142889600163ffffffff612cb316565b935061143b89602163ffffffff612cb316565b925060018b868686604051600081526020016040526040516114609493929190614d26565b60206040516020810390808403906000865af1158015611484573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015173ffffffffffffffffffffffffffffffffffffffff8c81169082161499509250611a419050565b60038660098111156114e157fe5b1415611687578851604114611522576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614d95565b88600081518110151561153157fe5b01602001517f010000000000000000000000000000000000000000000000000000000000000090819004810204945061157189600163ffffffff612cb316565b935061158489602163ffffffff612cb316565b925060018b60405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c0182600019166000191681526020019150506040516020818303038152906040526040518082805190602001908083835b6020831061162557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016115e8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260408051929094018290038220600083529101928390526114609450925089918991508890614d26565b600486600981111561169557fe5b14156116f4578851156116d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614f45565b73ffffffffffffffffffffffffffffffffffffffff8a1633149750611a41565b600586600981111561170257fe5b14156117b5576040517f1626ba7e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b1690631626ba7e9061175c908e908d90600401614d06565b602060405180830381600087803b15801561177657600080fd5b505af115801561178a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506117ae9190810190614178565b9750611a41565b60068660098111156117c357fe5b1415611870576117d289612cfe565b73ffffffffffffffffffffffffffffffffffffffff808c1660009081526007602090815260408083209385168352929052205490915060ff16151561181a5760009750611a41565b6040517f9363470200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063936347029061175c908e908e908e90600401614cd9565b600786600981111561187e57fe5b14156118be5760008b815260066020908152604080832073ffffffffffffffffffffffffffffffffffffffff8e16845290915290205460ff169750611a41565b60088660098111156118cc57fe5b1415611a0f57885160411461190d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614d95565b88600081518110151561191c57fe5b01602001517f010000000000000000000000000000000000000000000000000000000000000090819004810204945061195c89600163ffffffff612cb316565b935061196f89602163ffffffff612cb316565b925060018b60405160200180807f19457468657265756d205369676e6564204d6573736167653a0a200000000000815250601b0182600019166000191681526020019150506040516020818303038152906040526040518082805190602001908083836020831061162557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016115e8565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614dd5565b505050505050509392505050565b611a57613c04565b60606000806000611a66613c04565b886000815181101515611a7557fe5b9060200190602002015161014001519450600093505b8851841015611b5357848985815181101515611aa357fe5b6020908102909101015161014001528551611abf908990612bad565b9250611b028985815181101515611ad257fe5b9060200190602002015160a001518a86815181101515611aee57fe5b906020019060200201516080015185612d77565b9150611b2e8985815181101515611b1557fe5b90602001906020020151838987815181101515610ed057fe5b9050611b3a8682612539565b8551881415611b4857611b53565b600190930192611a8b565b50505050509392505050565b611b67613c04565b611b6f613c5c565b6000806000611b7d886120a7565b9350611b8761259b565b9250611b9b8860a001518560400151612bad565b9150611ba78783612d94565b9050611bb78885858a858b612704565b611bc18882612daa565b9450611bd888848660200151876040015189612921565b611144888487612e0a565b60095460009073ffffffffffffffffffffffffffffffffffffffff1615611c36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614ed5565b611c79611c74888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843750612f1f945050505050565b613160565b60008181526008602052604090205490915060ff1615611cc5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614e15565b73ffffffffffffffffffffffffffffffffffffffff86163314611d9657611d1d818785858080601f01602080910402602001604051908101604052809392919081815260200183838082843750611229945050505050565b1515611d55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614f35565b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff88161790555b6000818152600860205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555130908690869080838380828437820191505092505050600060405180830381855af49150501515611e2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614e45565b73ffffffffffffffffffffffffffffffffffffffff86163314611e7357600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555b50505050505050565b6002546000908190819073ffffffffffffffffffffffffffffffffffffffff163314611ed4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614ee5565b8392508273ffffffffffffffffffffffffffffffffffffffff1663ae25532e6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015611f3b57600080fd5b505af1158015611f4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611f7391908101906142b4565b7fffffffff0000000000000000000000000000000000000000000000000000000081166000908152600a602052604090205490925073ffffffffffffffffffffffffffffffffffffffff1690508015611ff8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614db5565b7fffffffff0000000000000000000000000000000000000000000000000000000082166000908152600a60205260409081902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8616179055517fd2c6b762299c609bdb96520b58a49bfb80186934d4f71a86a367571a15c03194906120999084908790614d5b565b60405180910390a150505050565b6120af613c5c565b6120b8826132e0565b60208083018290526000918252600390526040908190205490820152608082015115156120ec5760015b60ff168152610f3f565b60a082015115156120fe5760026120e2565b60a08201516040820151106121145760056120e2565b61010082015142106121275760046120e2565b60208082015160009081526004909152604090205460ff161561214b5760066120e2565b610120820151825173ffffffffffffffffffffffffffffffffffffffff908116600090815260056020908152604080832060608801519094168352929052205411156121985760066120e2565b60038152919050565b6121a9613c5c565b6121b2826120a7565b90506121be82826132ee565b610cc0828260200151613405565b600560209081526000928352604080842090915290825290205481565b6000805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f8101849004840282018401909252818152929183018282801561228d5780601f106122625761010080835404028352916020019161228d565b820191906000526020600020905b81548152906001019060200180831161227057829003601f168201915b505050505081565b61229d613c04565b60606000806122aa613c04565b8760008151811015156122b957fe5b9060200190602002015161016001519350600092505b8751831015611144578388848151811015156122e757fe5b906020019060200201516101600181905250612307878660200151612bad565b9150612333888481518110151561231a57fe5b90602001906020020151838886815181101515610ed057fe5b905061233f8582612539565b868560200151141561235057611144565b6001909201916122cf565b60015481565b612369613c04565b60606000806000612378613c04565b88600081518110151561238757fe5b9060200190602002015161014001519450600093505b8851841015611b53578489858151811015156123b557fe5b60209081029091010151610140015285516123d1908990612bad565b92506123e48985815181101515611ad257fe5b915061241089858151811015156123f757fe5b9060200190602002015183898781518110151561084b57fe5b905061241c8682612539565b855188141561242a57611b53565b60019093019261239d565b60095473ffffffffffffffffffffffffffffffffffffffff1681565b60025473ffffffffffffffffffffffffffffffffffffffff1633146124a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614ee5565b73ffffffffffffffffffffffffffffffffffffffff8116156124ff57600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b60408051808201909152600b81527f322e302e312d616c706861000000000000000000000000000000000000000000602082015281565b8151815161254791906134ac565b82526020808301519082015161255d91906134ac565b60208301526040808301519082015161257691906134ac565b60408301526060808301519082015161258f91906134ac565b60609092019190915250565b600954600090819073ffffffffffffffffffffffffffffffffffffffff16156125dc5760095473ffffffffffffffffffffffffffffffffffffffff166125de565b335b92915050565b6125f68260a001518260a001516134f6565b612608836080015183608001516134f6565b1015610cc0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614f25565b612648613c2d565b60008060008061265c8960a0015188612bad565b935061266c8860a0015187612bad565b925061267c8389608001516134f6565b61268a858a60a001516134f6565b116126ac578391506126a58860a00151896080015184612d77565b90506126c5565b8290506126c288608001518960a0015183612d77565b91505b6126cf8983612daa565b85526126db8882612daa565b60208087018290528651519101516126f39190612bad565b604086015250505050949350505050565b845160ff16600314612742576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614f05565b82151561277b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614e55565b606086015173ffffffffffffffffffffffffffffffffffffffff16156127ee57606086015173ffffffffffffffffffffffffffffffffffffffff1633146127ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614f15565b602086015173ffffffffffffffffffffffffffffffffffffffff1615612879578373ffffffffffffffffffffffffffffffffffffffff16866020015173ffffffffffffffffffffffffffffffffffffffff16141515612879576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614da5565b604085015115156128cf576128978560200151876000015183611229565b15156128cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614de5565b6128e2828760a001518860800151613551565b15612919576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614e35565b505050505050565b61292f8282602001516134ac565b600084815260036020908152604091829020929092558681015187518451938501518584015160608701516101408c01516101608d015196518b9873ffffffffffffffffffffffffffffffffffffffff9788169897909616967f0bcc4c97732e47d9946f229edb95f5b6323f601300e4690de719993f3c371129966129be968f96339692959194909390614beb565b60405180910390a45050505050565b60008054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015612a775780601f10612a4c57610100808354040283529160200191612a77565b820191906000526020600020905b815481529060010190602001808311612a5a57829003601f168201915b50505050509050612a9f856101400151866000015186600001518560200151602001516135a2565b61014084015184518651845160200151612abb939291906135a2565b612ad485610140015186600001518585604001516135a2565b612af081866000015187604001518560000151604001516135a2565b612b0c81856000015186604001518560200151604001516135a2565b836040015173ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff161415612b7657612b7181848760400151612b6c8660000151606001518760200151606001516134ac565b6135a2565b612ba6565b612b8e818487604001518560000151606001516135a2565b612ba6818486604001518560200151606001516135a2565b5050505050565b600082821115612be9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614e05565b50900390565b6000808251111515612c2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614e75565b815182907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908110612c5d57fe5b016020015182517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01909252507f0100000000000000000000000000000000000000000000000000000000000000908190040290565b600081602001835110151515612cf5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614dc5565b50016020015190565b60006014825110151515612d3e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614ef5565b612d4c826014845103613733565b82517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec019092525090565b6000612d8c612d8685846134f6565b84613794565b949350505050565b6000818310612da35781610fac565b5090919050565b612db2613c04565b6020810182905260a08301516080840151612dce918491612d77565b815260a083015160c0840151612de5918491612d77565b604082015260a083015160e0840151612dff918491612d77565b606082015292915050565b60008054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015612eb45780601f10612e8957610100808354040283529160200191612eb4565b820191906000526020600020905b815481529060010190602001808311612e9757829003601f168201915b50505050509050612ed484610140015185600001518585600001516135a2565b612eed84610160015184866000015185602001516135a2565b612f05818560000151866040015185604001516135a2565b612f198184866040015185606001516135a2565b50505050565b604080517f5a65726f45785472616e73616374696f6e2800000000000000000000000000006020808301919091527f75696e743235362073616c742c0000000000000000000000000000000000000060328301527f61646472657373207369676e6572416464726573732c00000000000000000000603f8301527f627974657320646174610000000000000000000000000000000000000000000060558301527f2900000000000000000000000000000000000000000000000000000000000000605f830152825180830384018152606090920192839052815160009384938493909282918401908083835b6020831061304857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161300b565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260405191909301819003812089519097508995509093508392850191508083835b602083106130de57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016130a1565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040805192909401829003822097825281019a909a525073ffffffffffffffffffffffffffffffffffffffff97909716968801969096525050606085015250506080909120919050565b60006040805190810160405280600281526020017f1901000000000000000000000000000000000000000000000000000000000000815250600154836040516020018084805190602001908083835b602083106131ec57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016131af565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199092169116179052920194855250838101929092525060408051808403830181529281019081905282519293509182918401908083835b6020831061329057805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613253565b5181516020939093036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199091169216919091179052604051920182900390912095945050505050565b60006125de611c74836137ab565b805160009060ff1660031461332f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614f05565b606083015173ffffffffffffffffffffffffffffffffffffffff16156133a257606083015173ffffffffffffffffffffffffffffffffffffffff1633146133a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614f15565b6133aa61259b565b835190915073ffffffffffffffffffffffffffffffffffffffff808316911614613400576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614df5565b505050565b6000818152600460205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558281015183516101408501516101608601519351859473ffffffffffffffffffffffffffffffffffffffff9485169493909316927fdc47b3613d9fe400085f6dbdc99453462279057e6207385042827ed6b1a62cf7926134a092339290614c6f565b60405180910390a45050565b6000828201838110156134eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614e05565b8091505b5092915050565b60008083151561350957600091506134ef565b5082820282848281151561351957fe5b04146134eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614e05565b60008060008480151561356057fe5b86850991508115156135755760009250610871565b61359461358583620f42406134f6565b61358f88876134f6565b613794565b6103e8109695505050505050565b60008060008311156129195785516003106135e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614eb5565b50506020848101517fffffffff00000000000000000000000000000000000000000000000000000000166000818152600a90925260409091205473ffffffffffffffffffffffffffffffffffffffff16801515613672576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614e65565b604051660fffffffffffe0603f885101168060840182017fa85e59e40000000000000000000000000000000000000000000000000000000083526080600484015273ffffffffffffffffffffffffffffffffffffffff8816602484015273ffffffffffffffffffffffffffffffffffffffff87166044840152856064840152608483015b8181101561370e57895181526020998a0199016136f6565b61020084858403866000895af1801515613726573d85fd5b5050505050505050505050565b600081601401835110151515613775576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290614ef5565b50016014015173ffffffffffffffffffffffffffffffffffffffff1690565b60008082848115156137a257fe5b04949350505050565b604080517f4f726465722800000000000000000000000000000000000000000000000000006020808301919091527f61646472657373206d616b6572416464726573732c000000000000000000000060268301527f616464726573732074616b6572416464726573732c0000000000000000000000603b8301527f6164647265737320666565526563697069656e74416464726573732c0000000060508301527f616464726573732073656e646572416464726573732c00000000000000000000606c8301527f75696e74323536206d616b65724173736574416d6f756e742c0000000000000060828301527f75696e743235362074616b65724173736574416d6f756e742c00000000000000609b8301527f75696e74323536206d616b65724665652c00000000000000000000000000000060b48301527f75696e743235362074616b65724665652c00000000000000000000000000000060c58301527f75696e743235362065787069726174696f6e54696d655365636f6e64732c000060d68301527f75696e743235362073616c742c0000000000000000000000000000000000000060f48301527f6279746573206d616b65724173736574446174612c00000000000000000000006101018301527f62797465732074616b65724173736574446174610000000000000000000000006101168301527f290000000000000000000000000000000000000000000000000000000000000061012a830152825161010b81840301815261012b90920192839052815160009384938493849391929182918401908083835b60208310613a3357805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016139f6565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930181900381206101408b0151805191995095509093508392850191508083835b60208310613ace57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613a91565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930181900381206101608b0151805191985095509093508392850191508083835b60208310613b6957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613b2c565b5181516020939093036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909116921691909117905260405192018290039091207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0890180516101408b018051610160909c0180519a84529881529288526101a0822091529890525050509190525090919050565b608060405190810160405280600081526020016000815260200160008152602001600081525090565b61012060405190810160405280613c42613c04565b8152602001613c4f613c04565b8152602001600081525090565b604080516060810182526000808252602082018190529181019190915290565b6000610fac8235615018565b6000601f82018313613c9957600080fd5b8135613cac613ca782614fa7565b614f80565b81815260209384019390925082018360005b83811015613cea5781358601613cd48882613e46565b8452506020928301929190910190600101613cbe565b5050505092915050565b6000601f82018313613d0557600080fd5b8135613d13613ca782614fa7565b81815260209384019390925082018360005b83811015613cea5781358601613d3b8882613e95565b8452506020928301929190910190600101613d25565b6000601f82018313613d6257600080fd5b8135613d70613ca782614fa7565b91508181835260208401935060208101905083856020840282011115613d9557600080fd5b60005b83811015613cea5781613dab8882613dd9565b8452506020928301929190910190600101613d98565b6000610fac8235615031565b6000610fac8251615031565b6000610fac8235615036565b6000610fac8235615039565b6000610fac8251615039565b600080601f83018413613e0f57600080fd5b50813567ffffffffffffffff811115613e2757600080fd5b602083019150836001820283011115613e3f57600080fd5b9250929050565b6000601f82018313613e5757600080fd5b8135613e65613ca782614fc8565b91508082526020830160208301858383011115613e8157600080fd5b613e8c83828461506f565b50505092915050565b60006101808284031215613ea857600080fd5b613eb3610180614f80565b90506000613ec18484613c7c565b8252506020613ed284848301613c7c565b6020830152506040613ee684828501613c7c565b6040830152506060613efa84828501613c7c565b6060830152506080613f0e84828501613dd9565b60808301525060a0613f2284828501613dd9565b60a08301525060c0613f3684828501613dd9565b60c08301525060e0613f4a84828501613dd9565b60e083015250610100613f5f84828501613dd9565b61010083015250610120613f7584828501613dd9565b6101208301525061014082013567ffffffffffffffff811115613f9757600080fd5b613fa384828501613e46565b6101408301525061016082013567ffffffffffffffff811115613fc557600080fd5b613fd184828501613e46565b6101608301525092915050565b600060208284031215613ff057600080fd5b6000612d8c8484613c7c565b6000806040838503121561400f57600080fd5b600061401b8585613c7c565b925050602061402c85828601613c7c565b9150509250929050565b6000806040838503121561404957600080fd5b60006140558585613c7c565b925050602061402c85828601613dc1565b60006020828403121561407857600080fd5b813567ffffffffffffffff81111561408f57600080fd5b612d8c84828501613cf4565b6000806000606084860312156140b057600080fd5b833567ffffffffffffffff8111156140c757600080fd5b6140d386828701613cf4565b935050602084013567ffffffffffffffff8111156140f057600080fd5b6140fc86828701613d51565b925050604084013567ffffffffffffffff81111561411957600080fd5b61412586828701613c88565b9150509250925092565b60008060006060848603121561414457600080fd5b833567ffffffffffffffff81111561415b57600080fd5b61416786828701613cf4565b93505060206140fc86828701613dd9565b60006020828403121561418a57600080fd5b6000612d8c8484613dcd565b6000602082840312156141a857600080fd5b6000612d8c8484613dd9565b600080604083850312156141c757600080fd5b600061401b8585613dd9565b600080600080606085870312156141e957600080fd5b60006141f58787613dd9565b945050602061420687828801613c7c565b935050604085013567ffffffffffffffff81111561422357600080fd5b61422f87828801613dfd565b95989497509550505050565b60008060006060848603121561425057600080fd5b600061425c8686613dd9565b935050602061426d86828701613c7c565b925050604084013567ffffffffffffffff81111561428a57600080fd5b61412586828701613e46565b6000602082840312156142a857600080fd5b6000612d8c8484613de5565b6000602082840312156142c657600080fd5b6000612d8c8484613df1565b6000602082840312156142e457600080fd5b813567ffffffffffffffff8111156142fb57600080fd5b612d8c84828501613e95565b6000806000806080858703121561431d57600080fd5b843567ffffffffffffffff81111561433457600080fd5b61434087828801613e95565b945050602085013567ffffffffffffffff81111561435d57600080fd5b61436987828801613e95565b935050604085013567ffffffffffffffff81111561438657600080fd5b61439287828801613e46565b925050606085013567ffffffffffffffff8111156143af57600080fd5b6143bb87828801613e46565b91505092959194509250565b6000806000606084860312156143dc57600080fd5b833567ffffffffffffffff8111156143f357600080fd5b6143ff86828701613e95565b935050602061426d86828701613dd9565b6000806000806000806080878903121561442957600080fd5b60006144358989613dd9565b965050602061444689828a01613c7c565b955050604087013567ffffffffffffffff81111561446357600080fd5b61446f89828a01613dfd565b9450945050606087013567ffffffffffffffff81111561448e57600080fd5b61449a89828a01613dfd565b92509250509295509295509295565b6144b281615018565b82525050565b60006144c382615014565b8084526020840193506144d58361500e565b60005b82811015614505576144eb868351614b9d565b6144f48261500e565b6060969096019591506001016144d8565b5093949350505050565b6144b281615031565b6144b281615036565b6144b281615039565b600061453582615014565b80845261454981602086016020860161507b565b614552816150a7565b9093016020019392505050565b6144b281615064565b601281527f4c454e4754485f36355f52455155495245440000000000000000000000000000602082015260400190565b600d81527f494e56414c49445f54414b455200000000000000000000000000000000000000602082015260400190565b601a81527f41535345545f50524f58595f414c52454144595f455849535453000000000000602082015260400190565b602681527f475245415445525f4f525f455155414c5f544f5f33325f4c454e4754485f524560208201527f5155495245440000000000000000000000000000000000000000000000000000604082015260600190565b601581527f5349474e41545552455f554e535550504f525445440000000000000000000000602082015260400190565b601781527f494e56414c49445f4f524445525f5349474e4154555245000000000000000000602082015260400190565b600d81527f494e56414c49445f4d414b455200000000000000000000000000000000000000602082015260400190565b601081527f55494e543235365f4f564552464c4f5700000000000000000000000000000000602082015260400190565b600f81527f494e56414c49445f54585f484153480000000000000000000000000000000000602082015260400190565b601181527f494e56414c49445f5349474e4154555245000000000000000000000000000000602082015260400190565b600e81527f524f554e44494e475f4552524f52000000000000000000000000000000000000602082015260400190565b601081527f4641494c45445f455845435554494f4e00000000000000000000000000000000602082015260400190565b601481527f494e56414c49445f54414b45525f414d4f554e54000000000000000000000000602082015260400190565b601a81527f41535345545f50524f58595f444f45535f4e4f545f4558495354000000000000602082015260400190565b602181527f475245415445525f5448414e5f5a45524f5f4c454e4754485f5245515549524560208201527f4400000000000000000000000000000000000000000000000000000000000000604082015260600190565b601181527f5349474e41545552455f494c4c4547414c000000000000000000000000000000602082015260400190565b601e81527f4c454e4754485f475245415445525f5448414e5f305f52455155495245440000602082015260400190565b601781527f494e56414c49445f4e45575f4f524445525f45504f4348000000000000000000602082015260400190565b601e81527f4c454e4754485f475245415445525f5448414e5f335f52455155495245440000602082015260400190565b601481527f434f4d504c4554455f46494c4c5f4641494c4544000000000000000000000000602082015260400190565b601281527f5245454e5452414e43595f494c4c4547414c0000000000000000000000000000602082015260400190565b601381527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000602082015260400190565b602681527f475245415445525f4f525f455155414c5f544f5f32305f4c454e4754485f524560208201527f5155495245440000000000000000000000000000000000000000000000000000604082015260600190565b601081527f4f524445525f554e46494c4c41424c4500000000000000000000000000000000602082015260400190565b600e81527f494e56414c49445f53454e444552000000000000000000000000000000000000602082015260400190565b601881527f4e454741544956455f5350524541445f52455155495245440000000000000000602082015260400190565b601481527f494e56414c49445f54585f5349474e4154555245000000000000000000000000602082015260400190565b601181527f4c454e4754485f305f5245515549524544000000000000000000000000000000602082015260400190565b80516080830190614b2b8482614518565b506020820151614b3e6020850182614518565b506040820151614b516040850182614518565b506060820151612f196060850182614518565b8051610120830190614b768482614b1a565b506020820151614b896080850182614b1a565b506040820151612f19610100850182614518565b80516060830190614bae8482614bd4565b506020820151614bc16020850182614518565b506040820151612f196040850182614518565b6144b28161505e565b602081016125de82846144a9565b6101008101614bfa828b6144a9565b614c07602083018a6144a9565b614c146040830189614518565b614c216060830188614518565b614c2e6080830187614518565b614c3b60a0830186614518565b81810360c0830152614c4d818561452a565b905081810360e0830152614c61818461452a565b9a9950505050505050505050565b60608101614c7d82866144a9565b8181036020830152614c8f818561452a565b90508181036040830152614ca3818461452a565b95945050505050565b60208082528101610fac81846144b8565b602081016125de828461450f565b602081016125de8284614518565b60608101614ce78286614518565b614cf460208301856144a9565b8181036040830152614ca3818461452a565b60408101614d148285614518565b8181036020830152612d8c818461452a565b60808101614d348287614518565b614d416020830186614bd4565b614d4e6040830185614518565b614ca36060830184614518565b60408101614d698285614521565b610fac60208301846144a9565b60208082528101610fac818461452a565b602081016125de828461455f565b602080825281016125de81614568565b602080825281016125de81614598565b602080825281016125de816145c8565b602080825281016125de816145f8565b602080825281016125de8161464e565b602080825281016125de8161467e565b602080825281016125de816146ae565b602080825281016125de816146de565b602080825281016125de8161470e565b602080825281016125de8161473e565b602080825281016125de8161476e565b602080825281016125de8161479e565b602080825281016125de816147ce565b602080825281016125de816147fe565b602080825281016125de8161482e565b602080825281016125de81614884565b602080825281016125de816148b4565b602080825281016125de816148e4565b602080825281016125de81614914565b602080825281016125de81614944565b602080825281016125de81614974565b602080825281016125de816149a4565b602080825281016125de816149d4565b602080825281016125de81614a2a565b602080825281016125de81614a5a565b602080825281016125de81614a8a565b602080825281016125de81614aba565b602080825281016125de81614aea565b608081016125de8284614b1a565b61012081016125de8284614b64565b606081016125de8284614b9d565b60405181810167ffffffffffffffff81118282101715614f9f57600080fd5b604052919050565b600067ffffffffffffffff821115614fbe57600080fd5b5060209081020190565b600067ffffffffffffffff821115614fdf57600080fd5b506020601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160190565b60200190565b5190565b73ffffffffffffffffffffffffffffffffffffffff1690565b151590565b90565b7fffffffff000000000000000000000000000000000000000000000000000000001690565b60ff1690565b60006125de82615018565b82818337506000910152565b60005b8381101561509657818101518382015260200161507e565b83811115612f195750506000910152565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016905600a265627a7a723058207c5f5af88134aeeede952e9cdda7741efb0001f235c761ec650b76b231ab60266c6578706572696d656e74616cf50037",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1C1 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x2624B2D9 DUP2 EQ PUSH2 0x1C6 JUMPI DUP1 PUSH4 0x288CDC91 EQ PUSH2 0x1F1 JUMPI DUP1 PUSH4 0x297BB70B EQ PUSH2 0x211 JUMPI DUP1 PUSH4 0x2AC12622 EQ PUSH2 0x23E JUMPI DUP1 PUSH4 0x3683EF8E EQ PUSH2 0x26B JUMPI DUP1 PUSH4 0x3C28D861 EQ PUSH2 0x28D JUMPI DUP1 PUSH4 0x3E228BAE EQ PUSH2 0x2BA JUMPI DUP1 PUSH4 0x3FD3C997 EQ PUSH2 0x2DA JUMPI DUP1 PUSH4 0x4AC14782 EQ PUSH2 0x307 JUMPI DUP1 PUSH4 0x4D0AE546 EQ PUSH2 0x327 JUMPI DUP1 PUSH4 0x4F9559B1 EQ PUSH2 0x347 JUMPI DUP1 PUSH4 0x50DDE190 EQ PUSH2 0x367 JUMPI DUP1 PUSH4 0x60704108 EQ PUSH2 0x387 JUMPI DUP1 PUSH4 0x642F2EAF EQ PUSH2 0x3B4 JUMPI DUP1 PUSH4 0x64A3BC15 EQ PUSH2 0x3D4 JUMPI DUP1 PUSH4 0x77FCCE68 EQ PUSH2 0x3F4 JUMPI DUP1 PUSH4 0x7B8E3514 EQ PUSH2 0x414 JUMPI DUP1 PUSH4 0x7E1D9808 EQ PUSH2 0x434 JUMPI DUP1 PUSH4 0x7E9D74DC EQ PUSH2 0x454 JUMPI DUP1 PUSH4 0x82C174D0 EQ PUSH2 0x481 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x4A1 JUMPI DUP1 PUSH4 0x93634702 EQ PUSH2 0x4B6 JUMPI DUP1 PUSH4 0xA3E20380 EQ PUSH2 0x4D6 JUMPI DUP1 PUSH4 0xB4BE83D5 EQ PUSH2 0x4F6 JUMPI DUP1 PUSH4 0xBFC8BFCE EQ PUSH2 0x516 JUMPI DUP1 PUSH4 0xC585BB93 EQ PUSH2 0x536 JUMPI DUP1 PUSH4 0xC75E0A81 EQ PUSH2 0x556 JUMPI DUP1 PUSH4 0xD46B02C3 EQ PUSH2 0x583 JUMPI DUP1 PUSH4 0xD9BFA73E EQ PUSH2 0x5A3 JUMPI DUP1 PUSH4 0xDB123B1A EQ PUSH2 0x5C3 JUMPI DUP1 PUSH4 0xDD1C7D18 EQ PUSH2 0x5E5 JUMPI DUP1 PUSH4 0xE306F779 EQ PUSH2 0x605 JUMPI DUP1 PUSH4 0xE5FA431B EQ PUSH2 0x61A JUMPI DUP1 PUSH4 0xEEA086BA EQ PUSH2 0x63A JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x64F JUMPI DUP1 PUSH4 0xFFA1AD74 EQ PUSH2 0x66F JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1DB PUSH2 0x684 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E8 SWAP2 SWAP1 PUSH2 0x4CCB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1DB PUSH2 0x20C CALLDATASIZE PUSH1 0x4 PUSH2 0x4196 JUMP JUMPDEST PUSH2 0x7D8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x21D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x231 PUSH2 0x22C CALLDATASIZE PUSH1 0x4 PUSH2 0x409B JUMP JUMPDEST PUSH2 0x7EA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E8 SWAP2 SWAP1 PUSH2 0x4F55 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x24A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25E PUSH2 0x259 CALLDATASIZE PUSH1 0x4 PUSH2 0x4196 JUMP JUMPDEST PUSH2 0x87A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E8 SWAP2 SWAP1 PUSH2 0x4CBD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x277 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28B PUSH2 0x286 CALLDATASIZE PUSH1 0x4 PUSH2 0x41D3 JUMP JUMPDEST PUSH2 0x88F JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x299 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AD PUSH2 0x2A8 CALLDATASIZE PUSH1 0x4 PUSH2 0x4307 JUMP JUMPDEST PUSH2 0x968 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E8 SWAP2 SWAP1 PUSH2 0x4F63 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x231 PUSH2 0x2D5 CALLDATASIZE PUSH1 0x4 PUSH2 0x43C7 JUMP JUMPDEST PUSH2 0xA54 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2FA PUSH2 0x2F5 CALLDATASIZE PUSH1 0x4 PUSH2 0x4296 JUMP JUMPDEST PUSH2 0xC64 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E8 SWAP2 SWAP1 PUSH2 0x4D87 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x313 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28B PUSH2 0x322 CALLDATASIZE PUSH1 0x4 PUSH2 0x4066 JUMP JUMPDEST PUSH2 0xC8C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x333 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x231 PUSH2 0x342 CALLDATASIZE PUSH1 0x4 PUSH2 0x409B JUMP JUMPDEST PUSH2 0xCC4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x353 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28B PUSH2 0x362 CALLDATASIZE PUSH1 0x4 PUSH2 0x4196 JUMP JUMPDEST PUSH2 0xD4B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x373 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x231 PUSH2 0x382 CALLDATASIZE PUSH1 0x4 PUSH2 0x409B JUMP JUMPDEST PUSH2 0xE6F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x393 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3A7 PUSH2 0x3A2 CALLDATASIZE PUSH1 0x4 PUSH2 0x4296 JUMP JUMPDEST PUSH2 0xEF6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E8 SWAP2 SWAP1 PUSH2 0x4BDD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25E PUSH2 0x3CF CALLDATASIZE PUSH1 0x4 PUSH2 0x4196 JUMP JUMPDEST PUSH2 0xF44 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x231 PUSH2 0x3EF CALLDATASIZE PUSH1 0x4 PUSH2 0x43C7 JUMP JUMPDEST PUSH2 0xF59 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x400 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28B PUSH2 0x40F CALLDATASIZE PUSH1 0x4 PUSH2 0x4036 JUMP JUMPDEST PUSH2 0xFB3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x420 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25E PUSH2 0x42F CALLDATASIZE PUSH1 0x4 PUSH2 0x3FFC JUMP JUMPDEST PUSH2 0x105E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x440 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x231 PUSH2 0x44F CALLDATASIZE PUSH1 0x4 PUSH2 0x412F JUMP JUMPDEST PUSH2 0x107E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x460 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x474 PUSH2 0x46F CALLDATASIZE PUSH1 0x4 PUSH2 0x4066 JUMP JUMPDEST PUSH2 0x114F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E8 SWAP2 SWAP1 PUSH2 0x4CAC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x48D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25E PUSH2 0x49C CALLDATASIZE PUSH1 0x4 PUSH2 0x41B4 JUMP JUMPDEST PUSH2 0x11ED JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3A7 PUSH2 0x120D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25E PUSH2 0x4D1 CALLDATASIZE PUSH1 0x4 PUSH2 0x423B JUMP JUMPDEST PUSH2 0x1229 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x231 PUSH2 0x4F1 CALLDATASIZE PUSH1 0x4 PUSH2 0x412F JUMP JUMPDEST PUSH2 0x1A4F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x502 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x231 PUSH2 0x511 CALLDATASIZE PUSH1 0x4 PUSH2 0x43C7 JUMP JUMPDEST PUSH2 0x1B5F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x522 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28B PUSH2 0x531 CALLDATASIZE PUSH1 0x4 PUSH2 0x4410 JUMP JUMPDEST PUSH2 0x1BE3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x542 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28B PUSH2 0x551 CALLDATASIZE PUSH1 0x4 PUSH2 0x3FDE JUMP JUMPDEST PUSH2 0x1E7C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x562 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x576 PUSH2 0x571 CALLDATASIZE PUSH1 0x4 PUSH2 0x42D2 JUMP JUMPDEST PUSH2 0x20A7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E8 SWAP2 SWAP1 PUSH2 0x4F72 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x58F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28B PUSH2 0x59E CALLDATASIZE PUSH1 0x4 PUSH2 0x42D2 JUMP JUMPDEST PUSH2 0x21A1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1DB PUSH2 0x5BE CALLDATASIZE PUSH1 0x4 PUSH2 0x3FFC JUMP JUMPDEST PUSH2 0x21CC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5D8 PUSH2 0x21E9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E8 SWAP2 SWAP1 PUSH2 0x4D76 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x231 PUSH2 0x600 CALLDATASIZE PUSH1 0x4 PUSH2 0x412F JUMP JUMPDEST PUSH2 0x2295 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x611 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1DB PUSH2 0x235B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x626 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x231 PUSH2 0x635 CALLDATASIZE PUSH1 0x4 PUSH2 0x412F JUMP JUMPDEST PUSH2 0x2361 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x646 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3A7 PUSH2 0x2435 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x65B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28B PUSH2 0x66A CALLDATASIZE PUSH1 0x4 PUSH2 0x3FDE JUMP JUMPDEST PUSH2 0x2451 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x67B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5D8 PUSH2 0x2502 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x454950373132446F6D61696E2800000000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x737472696E67206E616D652C0000000000000000000000000000000000000000 PUSH1 0x2D DUP4 ADD MSTORE PUSH32 0x737472696E672076657273696F6E2C0000000000000000000000000000000000 PUSH1 0x39 DUP4 ADD MSTORE PUSH32 0x6164647265737320766572696679696E67436F6E747261637400000000000000 PUSH1 0x48 DUP4 ADD MSTORE PUSH32 0x2900000000000000000000000000000000000000000000000000000000000000 PUSH1 0x61 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x42 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x62 SWAP1 SWAP3 ADD SWAP3 DUP4 SWAP1 MSTORE DUP2 MLOAD SWAP2 SWAP3 SWAP2 DUP3 SWAP2 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x7A8 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x76B JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 DUP2 JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x7F2 PUSH2 0x3C04 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7FC PUSH2 0x3C04 JUMP JUMPDEST PUSH1 0x0 SWAP2 POP JUMPDEST DUP6 MLOAD DUP3 LT ISZERO PUSH2 0x871 JUMPI PUSH2 0x85A DUP7 DUP4 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x81B JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP7 DUP5 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x833 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP7 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x84B JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x1B5F JUMP JUMPDEST SWAP1 POP PUSH2 0x866 DUP4 DUP3 PUSH2 0x2539 JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x801 JUMP JUMPDEST POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x8CA DUP5 DUP5 DUP5 DUP5 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY POP PUSH2 0x1229 SWAP5 POP POP POP POP POP JUMP JUMPDEST ISZERO ISZERO PUSH2 0x90B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4E25 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND DUP5 MSTORE SWAP2 SWAP1 MSTORE SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x970 PUSH2 0x3C2D JUMP JUMPDEST PUSH2 0x978 PUSH2 0x3C5C JUMP JUMPDEST PUSH2 0x980 PUSH2 0x3C5C JUMP JUMPDEST PUSH2 0x160 DUP1 DUP9 ADD MLOAD PUSH2 0x140 DUP1 DUP10 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP9 ADD MLOAD SWAP1 DUP8 ADD MSTORE PUSH1 0x0 PUSH2 0x9A3 DUP9 PUSH2 0x20A7 JUMP JUMPDEST SWAP3 POP PUSH2 0x9AE DUP8 PUSH2 0x20A7 JUMP JUMPDEST SWAP2 POP PUSH2 0x9B8 PUSH2 0x259B JUMP JUMPDEST SWAP1 POP PUSH2 0x9C4 DUP9 DUP9 PUSH2 0x25E4 JUMP JUMPDEST PUSH2 0x9D8 DUP9 DUP9 DUP6 PUSH1 0x40 ADD MLOAD DUP6 PUSH1 0x40 ADD MLOAD PUSH2 0x2640 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 ADD MLOAD SWAP1 SWAP5 POP PUSH2 0x9F2 SWAP1 DUP10 SWAP1 DUP6 SWAP1 DUP5 SWAP1 DUP1 DUP12 PUSH2 0x2704 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP6 ADD MLOAD ADD MLOAD PUSH2 0xA0B SWAP1 DUP9 SWAP1 DUP5 SWAP1 DUP5 SWAP1 DUP1 DUP11 PUSH2 0x2704 JUMP JUMPDEST PUSH2 0xA24 DUP9 DUP3 DUP6 PUSH1 0x20 ADD MLOAD DUP7 PUSH1 0x40 ADD MLOAD DUP9 PUSH1 0x0 ADD MLOAD PUSH2 0x2921 JUMP JUMPDEST PUSH2 0xA3D DUP8 DUP3 DUP5 PUSH1 0x20 ADD MLOAD DUP6 PUSH1 0x40 ADD MLOAD DUP9 PUSH1 0x20 ADD MLOAD PUSH2 0x2921 JUMP JUMPDEST PUSH2 0xA49 DUP9 DUP9 DUP4 DUP8 PUSH2 0x29CD JUMP JUMPDEST POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0xA5C PUSH2 0x3C04 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xB4BE83D500000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH1 0x60 PUSH1 0x4 DUP4 ADD DUP2 DUP2 MSTORE DUP9 MLOAD PUSH1 0x64 DUP6 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 DUP1 DUP12 ADD MLOAD PUSH1 0x84 DUP8 ADD MSTORE SWAP6 DUP11 ADD MLOAD PUSH1 0xA4 DUP7 ADD MSTORE SWAP2 DUP10 ADD MLOAD PUSH1 0xC4 DUP6 ADD MSTORE PUSH1 0x80 DUP10 ADD MLOAD PUSH1 0xE4 DUP6 ADD MSTORE PUSH1 0xA0 DUP10 ADD MLOAD PUSH2 0x104 DUP6 ADD MSTORE PUSH1 0xC0 DUP10 ADD MLOAD PUSH2 0x124 DUP6 ADD MSTORE PUSH1 0xE0 DUP10 ADD MLOAD PUSH2 0x144 DUP6 ADD MSTORE PUSH2 0x100 DUP10 ADD MLOAD PUSH2 0x164 DUP6 ADD MSTORE PUSH2 0x120 DUP10 ADD MLOAD PUSH2 0x184 DUP6 ADD MSTORE PUSH2 0x140 DUP10 ADD DUP1 MLOAD PUSH2 0x1A4 DUP7 ADD SWAP1 DUP2 MSTORE PUSH2 0x160 DUP12 ADD MLOAD PUSH2 0x1C4 DUP8 ADD MSTORE PUSH2 0x180 SWAP1 MSTORE MLOAD DUP1 MLOAD PUSH2 0x1E4 DUP7 ADD DUP2 SWAP1 MSTORE SWAP4 SWAP6 SWAP2 SWAP4 DUP5 SWAP4 SWAP3 PUSH1 0x24 DUP8 ADD SWAP3 DUP5 SWAP3 PUSH2 0x204 DUP10 ADD SWAP3 SWAP2 DUP3 ADD SWAP2 PUSH1 0x1F DUP3 ADD DIV PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xB5F JUMPI DUP4 MLOAD DUP6 MSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 SWAP1 SWAP4 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0xB41 JUMP JUMPDEST POP POP POP POP DUP2 DUP2 SUB PUSH2 0x160 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP13 ADD MLOAD DUP1 MLOAD DUP1 DUP4 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 SWAP2 DUP3 ADD SWAP2 PUSH1 0x1F DUP3 ADD DIV PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xBA8 JUMPI DUP4 MLOAD DUP6 MSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 SWAP1 SWAP4 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0xB8A JUMP JUMPDEST POP POP POP DUP12 DUP5 MSTORE POP DUP5 DUP2 SUB PUSH1 0x20 SWAP4 DUP5 ADD SWAP1 DUP2 MSTORE DUP11 MLOAD DUP1 DUP4 MSTORE SWAP1 SWAP4 SWAP2 DUP3 ADD SWAP2 DUP12 DUP2 ADD SWAP2 SWAP1 PUSH1 0x1F DUP3 ADD DIV PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xBF0 JUMPI DUP4 MLOAD DUP6 MSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 SWAP1 SWAP4 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0xBD2 JUMP JUMPDEST POP PUSH1 0x80 DUP11 DUP12 DUP7 SUB DUP13 ADDRESS GAS DELEGATECALL DUP1 DUP1 ISZERO PUSH2 0xC0F JUMPI PUSH1 0x1 DUP2 EQ PUSH2 0xC2D JUMPI PUSH2 0xC50 JUMP JUMPDEST PUSH1 0x0 DUP15 MSTORE PUSH1 0x0 PUSH1 0x20 DUP16 ADD MSTORE PUSH1 0x0 PUSH1 0x40 DUP16 ADD MSTORE PUSH1 0x0 PUSH1 0x60 DUP16 ADD MSTORE PUSH2 0xC50 JUMP JUMPDEST DUP12 MLOAD DUP15 MSTORE PUSH1 0x20 DUP13 ADD MLOAD PUSH1 0x20 DUP16 ADD MSTORE PUSH1 0x40 DUP13 ADD MLOAD PUSH1 0x40 DUP16 ADD MSTORE PUSH1 0x60 DUP13 ADD MLOAD PUSH1 0x60 DUP16 ADD MSTORE JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0xCC0 JUMPI PUSH2 0xCB8 DUP3 DUP3 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xCA9 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x21A1 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0xC8F JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0xCCC PUSH2 0x3C04 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCD6 PUSH2 0x3C04 JUMP JUMPDEST PUSH1 0x0 SWAP2 POP JUMPDEST DUP6 MLOAD DUP3 LT ISZERO PUSH2 0x871 JUMPI PUSH2 0xD34 DUP7 DUP4 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xCF5 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP7 DUP5 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xD0D JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP7 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xD25 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0xF59 JUMP JUMPDEST SWAP1 POP PUSH2 0xD40 DUP4 DUP3 PUSH2 0x2539 JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH2 0xCDB JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0xD59 PUSH2 0x259B JUMP JUMPDEST SWAP4 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND CALLER EQ PUSH2 0xD7E JUMPI CALLER PUSH2 0xD81 JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP6 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD SWAP1 SWAP4 POP PUSH1 0x1 DUP7 ADD SWAP3 POP SWAP1 POP DUP1 DUP3 GT PUSH2 0xDF8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4EA5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP9 AND DUP1 DUP5 MSTORE SWAP5 SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE MLOAD PUSH32 0x82AF639571738F4EBD4268FB0363D8957EBE1BBB9E78DBA5EBD69EED39B154F0 SWAP1 PUSH2 0xE60 SWAP1 DUP7 SWAP1 PUSH2 0x4CCB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP JUMP JUMPDEST PUSH2 0xE77 PUSH2 0x3C04 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE81 PUSH2 0x3C04 JUMP JUMPDEST PUSH1 0x0 SWAP2 POP JUMPDEST DUP6 MLOAD DUP3 LT ISZERO PUSH2 0x871 JUMPI PUSH2 0xEDF DUP7 DUP4 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xEA0 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP7 DUP5 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xEB8 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP7 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xED0 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0xA54 JUMP JUMPDEST SWAP1 POP PUSH2 0xEEB DUP4 DUP3 PUSH2 0x2539 JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH2 0xE86 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0xF61 PUSH2 0x3C04 JUMP JUMPDEST PUSH2 0xF6C DUP5 DUP5 DUP5 PUSH2 0x1B5F JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD SWAP1 SWAP2 POP DUP4 EQ PUSH2 0xFAC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4EC5 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFBD PUSH2 0x259B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP10 AND DUP1 DUP5 MSTORE SWAP5 SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP8 ISZERO ISZERO OR SWAP1 SSTORE MLOAD SWAP3 SWAP4 POP SWAP1 SWAP2 PUSH32 0xA8656E308026EEABCE8F0BC18048433252318AB80AC79DA0B3D3D8697DFBA891 SWAP1 PUSH2 0x1051 SWAP1 DUP7 SWAP1 PUSH2 0x4CBD JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x1086 PUSH2 0x3C04 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 PUSH2 0x1093 PUSH2 0x3C04 JUMP JUMPDEST DUP8 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x10A2 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x160 ADD MLOAD SWAP4 POP PUSH1 0x0 SWAP3 POP JUMPDEST DUP8 MLOAD DUP4 LT ISZERO PUSH2 0x1144 JUMPI DUP4 DUP9 DUP5 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x10D0 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x160 ADD DUP2 SWAP1 MSTORE POP PUSH2 0x10F0 DUP8 DUP7 PUSH1 0x20 ADD MLOAD PUSH2 0x2BAD JUMP JUMPDEST SWAP2 POP PUSH2 0x111C DUP9 DUP5 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1103 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP4 DUP9 DUP7 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x84B JUMPI INVALID JUMPDEST SWAP1 POP PUSH2 0x1128 DUP6 DUP3 PUSH2 0x2539 JUMP JUMPDEST DUP7 DUP6 PUSH1 0x20 ADD MLOAD EQ ISZERO PUSH2 0x1139 JUMPI PUSH2 0x1144 JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 PUSH2 0x10B8 JUMP JUMPDEST POP POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP5 MLOAD SWAP3 POP DUP3 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1195 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH2 0x1182 PUSH2 0x3C5C JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x117A JUMPI SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 SWAP1 POP JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x11E5 JUMPI PUSH2 0x11C5 DUP6 DUP3 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x11B6 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x20A7 JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x11D3 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x119D JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP10 MLOAD GT ISZERO ISZERO PUSH2 0x1272 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4E95 JUMP JUMPDEST PUSH2 0x127B DUP10 PUSH2 0x2BEF JUMP JUMPDEST PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DIV SWAP7 POP PUSH1 0x9 PUSH1 0xFF DUP9 AND LT PUSH2 0x12DD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4DD5 JUMP JUMPDEST DUP7 PUSH1 0xFF AND PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x12EC JUMPI INVALID JUMPDEST SWAP6 POP PUSH1 0x0 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x12FC JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x1334 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4E85 JUMP JUMPDEST PUSH1 0x1 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x1342 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x138A JUMPI DUP9 MLOAD ISZERO PUSH2 0x1381 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4F45 JUMP JUMPDEST PUSH1 0x0 SWAP8 POP PUSH2 0x1A41 JUMP JUMPDEST PUSH1 0x2 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x1398 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x14D3 JUMPI DUP9 MLOAD PUSH1 0x41 EQ PUSH2 0x13D9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4D95 JUMP JUMPDEST DUP9 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x13E8 JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV DUP2 MUL DIV SWAP5 POP PUSH2 0x1428 DUP10 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x2CB3 AND JUMP JUMPDEST SWAP4 POP PUSH2 0x143B DUP10 PUSH1 0x21 PUSH4 0xFFFFFFFF PUSH2 0x2CB3 AND JUMP JUMPDEST SWAP3 POP PUSH1 0x1 DUP12 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH2 0x1460 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4D26 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 PUSH1 0x0 DUP7 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1484 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 DUP2 AND SWAP1 DUP3 AND EQ SWAP10 POP SWAP3 POP PUSH2 0x1A41 SWAP1 POP JUMP JUMPDEST PUSH1 0x3 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x14E1 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x1687 JUMPI DUP9 MLOAD PUSH1 0x41 EQ PUSH2 0x1522 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4D95 JUMP JUMPDEST DUP9 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1531 JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV DUP2 MUL DIV SWAP5 POP PUSH2 0x1571 DUP10 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x2CB3 AND JUMP JUMPDEST SWAP4 POP PUSH2 0x1584 DUP10 PUSH1 0x21 PUSH4 0xFFFFFFFF PUSH2 0x2CB3 AND JUMP JUMPDEST SWAP3 POP PUSH1 0x1 DUP12 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP1 PUSH32 0x19457468657265756D205369676E6564204D6573736167653A0A333200000000 DUP2 MSTORE POP PUSH1 0x1C ADD DUP3 PUSH1 0x0 NOT AND PUSH1 0x0 NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1625 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x15E8 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP5 ADD DUP3 SWAP1 SUB DUP3 KECCAK256 PUSH1 0x0 DUP4 MSTORE SWAP2 ADD SWAP3 DUP4 SWAP1 MSTORE PUSH2 0x1460 SWAP5 POP SWAP3 POP DUP10 SWAP2 DUP10 SWAP2 POP DUP9 SWAP1 PUSH2 0x4D26 JUMP JUMPDEST PUSH1 0x4 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x1695 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x16F4 JUMPI DUP9 MLOAD ISZERO PUSH2 0x16D4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4F45 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND CALLER EQ SWAP8 POP PUSH2 0x1A41 JUMP JUMPDEST PUSH1 0x5 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x1702 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x17B5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x1626BA7E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND SWAP1 PUSH4 0x1626BA7E SWAP1 PUSH2 0x175C SWAP1 DUP15 SWAP1 DUP14 SWAP1 PUSH1 0x4 ADD PUSH2 0x4D06 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1776 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x178A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0x17AE SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x4178 JUMP JUMPDEST SWAP8 POP PUSH2 0x1A41 JUMP JUMPDEST PUSH1 0x6 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x17C3 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x1870 JUMPI PUSH2 0x17D2 DUP10 PUSH2 0x2CFE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP13 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP6 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x181A JUMPI PUSH1 0x0 SWAP8 POP PUSH2 0x1A41 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x9363470200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x93634702 SWAP1 PUSH2 0x175C SWAP1 DUP15 SWAP1 DUP15 SWAP1 DUP15 SWAP1 PUSH1 0x4 ADD PUSH2 0x4CD9 JUMP JUMPDEST PUSH1 0x7 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x187E JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x18BE JUMPI PUSH1 0x0 DUP12 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP15 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP8 POP PUSH2 0x1A41 JUMP JUMPDEST PUSH1 0x8 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x18CC JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x1A0F JUMPI DUP9 MLOAD PUSH1 0x41 EQ PUSH2 0x190D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4D95 JUMP JUMPDEST DUP9 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x191C JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV DUP2 MUL DIV SWAP5 POP PUSH2 0x195C DUP10 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x2CB3 AND JUMP JUMPDEST SWAP4 POP PUSH2 0x196F DUP10 PUSH1 0x21 PUSH4 0xFFFFFFFF PUSH2 0x2CB3 AND JUMP JUMPDEST SWAP3 POP PUSH1 0x1 DUP12 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP1 PUSH32 0x19457468657265756D205369676E6564204D6573736167653A0A200000000000 DUP2 MSTORE POP PUSH1 0x1B ADD DUP3 PUSH1 0x0 NOT AND PUSH1 0x0 NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x20 DUP4 LT PUSH2 0x1625 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x15E8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4DD5 JUMP JUMPDEST POP POP POP POP POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x1A57 PUSH2 0x3C04 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1A66 PUSH2 0x3C04 JUMP JUMPDEST DUP9 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1A75 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x140 ADD MLOAD SWAP5 POP PUSH1 0x0 SWAP4 POP JUMPDEST DUP9 MLOAD DUP5 LT ISZERO PUSH2 0x1B53 JUMPI DUP5 DUP10 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1AA3 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MLOAD PUSH2 0x140 ADD MSTORE DUP6 MLOAD PUSH2 0x1ABF SWAP1 DUP10 SWAP1 PUSH2 0x2BAD JUMP JUMPDEST SWAP3 POP PUSH2 0x1B02 DUP10 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1AD2 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0xA0 ADD MLOAD DUP11 DUP7 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1AEE JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0x80 ADD MLOAD DUP6 PUSH2 0x2D77 JUMP JUMPDEST SWAP2 POP PUSH2 0x1B2E DUP10 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1B15 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP4 DUP10 DUP8 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xED0 JUMPI INVALID JUMPDEST SWAP1 POP PUSH2 0x1B3A DUP7 DUP3 PUSH2 0x2539 JUMP JUMPDEST DUP6 MLOAD DUP9 EQ ISZERO PUSH2 0x1B48 JUMPI PUSH2 0x1B53 JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP4 ADD SWAP3 PUSH2 0x1A8B JUMP JUMPDEST POP POP POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x1B67 PUSH2 0x3C04 JUMP JUMPDEST PUSH2 0x1B6F PUSH2 0x3C5C JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1B7D DUP9 PUSH2 0x20A7 JUMP JUMPDEST SWAP4 POP PUSH2 0x1B87 PUSH2 0x259B JUMP JUMPDEST SWAP3 POP PUSH2 0x1B9B DUP9 PUSH1 0xA0 ADD MLOAD DUP6 PUSH1 0x40 ADD MLOAD PUSH2 0x2BAD JUMP JUMPDEST SWAP2 POP PUSH2 0x1BA7 DUP8 DUP4 PUSH2 0x2D94 JUMP JUMPDEST SWAP1 POP PUSH2 0x1BB7 DUP9 DUP6 DUP6 DUP11 DUP6 DUP12 PUSH2 0x2704 JUMP JUMPDEST PUSH2 0x1BC1 DUP9 DUP3 PUSH2 0x2DAA JUMP JUMPDEST SWAP5 POP PUSH2 0x1BD8 DUP9 DUP5 DUP7 PUSH1 0x20 ADD MLOAD DUP8 PUSH1 0x40 ADD MLOAD DUP10 PUSH2 0x2921 JUMP JUMPDEST PUSH2 0x1144 DUP9 DUP5 DUP8 PUSH2 0x2E0A JUMP JUMPDEST PUSH1 0x9 SLOAD PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x1C36 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4ED5 JUMP JUMPDEST PUSH2 0x1C79 PUSH2 0x1C74 DUP9 DUP9 DUP9 DUP9 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY POP PUSH2 0x2F1F SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x3160 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF AND ISZERO PUSH2 0x1CC5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4E15 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND CALLER EQ PUSH2 0x1D96 JUMPI PUSH2 0x1D1D DUP2 DUP8 DUP6 DUP6 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY POP PUSH2 0x1229 SWAP5 POP POP POP POP POP JUMP JUMPDEST ISZERO ISZERO PUSH2 0x1D55 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4F35 JUMP JUMPDEST PUSH1 0x9 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND OR SWAP1 SSTORE JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD ADDRESS SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP1 DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY DUP3 ADD SWAP2 POP POP SWAP3 POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP ISZERO ISZERO PUSH2 0x1E2D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4E45 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND CALLER EQ PUSH2 0x1E73 JUMPI PUSH1 0x9 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x1ED4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4EE5 JUMP JUMPDEST DUP4 SWAP3 POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xAE25532E PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH29 0x100000000000000000000000000000000000000000000000000000000 MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1F3B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1F4F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0x1F73 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x42B4 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP3 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP1 ISZERO PUSH2 0x1FF8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4DB5 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND OR SWAP1 SSTORE MLOAD PUSH32 0xD2C6B762299C609BDB96520B58A49BFB80186934D4F71A86A367571A15C03194 SWAP1 PUSH2 0x2099 SWAP1 DUP5 SWAP1 DUP8 SWAP1 PUSH2 0x4D5B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP JUMP JUMPDEST PUSH2 0x20AF PUSH2 0x3C5C JUMP JUMPDEST PUSH2 0x20B8 DUP3 PUSH2 0x32E0 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x3 SWAP1 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x80 DUP3 ADD MLOAD ISZERO ISZERO PUSH2 0x20EC JUMPI PUSH1 0x1 JUMPDEST PUSH1 0xFF AND DUP2 MSTORE PUSH2 0xF3F JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MLOAD ISZERO ISZERO PUSH2 0x20FE JUMPI PUSH1 0x2 PUSH2 0x20E2 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MLOAD PUSH1 0x40 DUP3 ADD MLOAD LT PUSH2 0x2114 JUMPI PUSH1 0x5 PUSH2 0x20E2 JUMP JUMPDEST PUSH2 0x100 DUP3 ADD MLOAD TIMESTAMP LT PUSH2 0x2127 JUMPI PUSH1 0x4 PUSH2 0x20E2 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x214B JUMPI PUSH1 0x6 PUSH2 0x20E2 JUMP JUMPDEST PUSH2 0x120 DUP3 ADD MLOAD DUP3 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x60 DUP9 ADD MLOAD SWAP1 SWAP5 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD GT ISZERO PUSH2 0x2198 JUMPI PUSH1 0x6 PUSH2 0x20E2 JUMP JUMPDEST PUSH1 0x3 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x21A9 PUSH2 0x3C5C JUMP JUMPDEST PUSH2 0x21B2 DUP3 PUSH2 0x20A7 JUMP JUMPDEST SWAP1 POP PUSH2 0x21BE DUP3 DUP3 PUSH2 0x32EE JUMP JUMPDEST PUSH2 0xCC0 DUP3 DUP3 PUSH1 0x20 ADD MLOAD PUSH2 0x3405 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x228D JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2262 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x228D JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x2270 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST PUSH2 0x229D PUSH2 0x3C04 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 PUSH2 0x22AA PUSH2 0x3C04 JUMP JUMPDEST DUP8 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x22B9 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x160 ADD MLOAD SWAP4 POP PUSH1 0x0 SWAP3 POP JUMPDEST DUP8 MLOAD DUP4 LT ISZERO PUSH2 0x1144 JUMPI DUP4 DUP9 DUP5 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x22E7 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x160 ADD DUP2 SWAP1 MSTORE POP PUSH2 0x2307 DUP8 DUP7 PUSH1 0x20 ADD MLOAD PUSH2 0x2BAD JUMP JUMPDEST SWAP2 POP PUSH2 0x2333 DUP9 DUP5 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x231A JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP4 DUP9 DUP7 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xED0 JUMPI INVALID JUMPDEST SWAP1 POP PUSH2 0x233F DUP6 DUP3 PUSH2 0x2539 JUMP JUMPDEST DUP7 DUP6 PUSH1 0x20 ADD MLOAD EQ ISZERO PUSH2 0x2350 JUMPI PUSH2 0x1144 JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 PUSH2 0x22CF JUMP JUMPDEST PUSH1 0x1 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2369 PUSH2 0x3C04 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x2378 PUSH2 0x3C04 JUMP JUMPDEST DUP9 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x2387 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x140 ADD MLOAD SWAP5 POP PUSH1 0x0 SWAP4 POP JUMPDEST DUP9 MLOAD DUP5 LT ISZERO PUSH2 0x1B53 JUMPI DUP5 DUP10 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x23B5 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MLOAD PUSH2 0x140 ADD MSTORE DUP6 MLOAD PUSH2 0x23D1 SWAP1 DUP10 SWAP1 PUSH2 0x2BAD JUMP JUMPDEST SWAP3 POP PUSH2 0x23E4 DUP10 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1AD2 JUMPI INVALID JUMPDEST SWAP2 POP PUSH2 0x2410 DUP10 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x23F7 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP4 DUP10 DUP8 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x84B JUMPI INVALID JUMPDEST SWAP1 POP PUSH2 0x241C DUP7 DUP3 PUSH2 0x2539 JUMP JUMPDEST DUP6 MLOAD DUP9 EQ ISZERO PUSH2 0x242A JUMPI PUSH2 0x1B53 JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP4 ADD SWAP3 PUSH2 0x239D JUMP JUMPDEST PUSH1 0x9 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x24A2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4EE5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0x24FF JUMPI PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND OR SWAP1 SSTORE JUMPDEST POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0xB DUP2 MSTORE PUSH32 0x322E302E312D616C706861000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD PUSH2 0x2547 SWAP2 SWAP1 PUSH2 0x34AC JUMP JUMPDEST DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MLOAD PUSH2 0x255D SWAP2 SWAP1 PUSH2 0x34AC JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MLOAD PUSH2 0x2576 SWAP2 SWAP1 PUSH2 0x34AC JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MLOAD PUSH2 0x258F SWAP2 SWAP1 PUSH2 0x34AC JUMP JUMPDEST PUSH1 0x60 SWAP1 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x9 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x25DC JUMPI PUSH1 0x9 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x25DE JUMP JUMPDEST CALLER JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x25F6 DUP3 PUSH1 0xA0 ADD MLOAD DUP3 PUSH1 0xA0 ADD MLOAD PUSH2 0x34F6 JUMP JUMPDEST PUSH2 0x2608 DUP4 PUSH1 0x80 ADD MLOAD DUP4 PUSH1 0x80 ADD MLOAD PUSH2 0x34F6 JUMP JUMPDEST LT ISZERO PUSH2 0xCC0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4F25 JUMP JUMPDEST PUSH2 0x2648 PUSH2 0x3C2D JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x265C DUP10 PUSH1 0xA0 ADD MLOAD DUP9 PUSH2 0x2BAD JUMP JUMPDEST SWAP4 POP PUSH2 0x266C DUP9 PUSH1 0xA0 ADD MLOAD DUP8 PUSH2 0x2BAD JUMP JUMPDEST SWAP3 POP PUSH2 0x267C DUP4 DUP10 PUSH1 0x80 ADD MLOAD PUSH2 0x34F6 JUMP JUMPDEST PUSH2 0x268A DUP6 DUP11 PUSH1 0xA0 ADD MLOAD PUSH2 0x34F6 JUMP JUMPDEST GT PUSH2 0x26AC JUMPI DUP4 SWAP2 POP PUSH2 0x26A5 DUP9 PUSH1 0xA0 ADD MLOAD DUP10 PUSH1 0x80 ADD MLOAD DUP5 PUSH2 0x2D77 JUMP JUMPDEST SWAP1 POP PUSH2 0x26C5 JUMP JUMPDEST DUP3 SWAP1 POP PUSH2 0x26C2 DUP9 PUSH1 0x80 ADD MLOAD DUP10 PUSH1 0xA0 ADD MLOAD DUP4 PUSH2 0x2D77 JUMP JUMPDEST SWAP2 POP JUMPDEST PUSH2 0x26CF DUP10 DUP4 PUSH2 0x2DAA JUMP JUMPDEST DUP6 MSTORE PUSH2 0x26DB DUP9 DUP3 PUSH2 0x2DAA JUMP JUMPDEST PUSH1 0x20 DUP1 DUP8 ADD DUP3 SWAP1 MSTORE DUP7 MLOAD MLOAD SWAP2 ADD MLOAD PUSH2 0x26F3 SWAP2 SWAP1 PUSH2 0x2BAD JUMP JUMPDEST PUSH1 0x40 DUP7 ADD MSTORE POP POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP5 MLOAD PUSH1 0xFF AND PUSH1 0x3 EQ PUSH2 0x2742 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4F05 JUMP JUMPDEST DUP3 ISZERO ISZERO PUSH2 0x277B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4E55 JUMP JUMPDEST PUSH1 0x60 DUP7 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x27EE JUMPI PUSH1 0x60 DUP7 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x27EE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4F15 JUMP JUMPDEST PUSH1 0x20 DUP7 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x2879 JUMPI DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH1 0x20 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO ISZERO PUSH2 0x2879 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4DA5 JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MLOAD ISZERO ISZERO PUSH2 0x28CF JUMPI PUSH2 0x2897 DUP6 PUSH1 0x20 ADD MLOAD DUP8 PUSH1 0x0 ADD MLOAD DUP4 PUSH2 0x1229 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x28CF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4DE5 JUMP JUMPDEST PUSH2 0x28E2 DUP3 DUP8 PUSH1 0xA0 ADD MLOAD DUP9 PUSH1 0x80 ADD MLOAD PUSH2 0x3551 JUMP JUMPDEST ISZERO PUSH2 0x2919 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4E35 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x292F DUP3 DUP3 PUSH1 0x20 ADD MLOAD PUSH2 0x34AC JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP3 SWAP1 SWAP3 SSTORE DUP7 DUP2 ADD MLOAD DUP8 MLOAD DUP5 MLOAD SWAP4 DUP6 ADD MLOAD DUP6 DUP5 ADD MLOAD PUSH1 0x60 DUP8 ADD MLOAD PUSH2 0x140 DUP13 ADD MLOAD PUSH2 0x160 DUP14 ADD MLOAD SWAP7 MLOAD DUP12 SWAP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP8 DUP9 AND SWAP9 SWAP8 SWAP1 SWAP7 AND SWAP7 PUSH32 0xBCC4C97732E47D9946F229EDB95F5B6323F601300E4690DE719993F3C371129 SWAP7 PUSH2 0x29BE SWAP7 DUP16 SWAP7 CALLER SWAP7 SWAP3 SWAP6 SWAP2 SWAP5 SWAP1 SWAP4 SWAP1 PUSH2 0x4BEB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x2A77 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2A4C JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x2A77 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x2A5A JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP PUSH2 0x2A9F DUP6 PUSH2 0x140 ADD MLOAD DUP7 PUSH1 0x0 ADD MLOAD DUP7 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH1 0x20 ADD MLOAD PUSH2 0x35A2 JUMP JUMPDEST PUSH2 0x140 DUP5 ADD MLOAD DUP5 MLOAD DUP7 MLOAD DUP5 MLOAD PUSH1 0x20 ADD MLOAD PUSH2 0x2ABB SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x35A2 JUMP JUMPDEST PUSH2 0x2AD4 DUP6 PUSH2 0x140 ADD MLOAD DUP7 PUSH1 0x0 ADD MLOAD DUP6 DUP6 PUSH1 0x40 ADD MLOAD PUSH2 0x35A2 JUMP JUMPDEST PUSH2 0x2AF0 DUP2 DUP7 PUSH1 0x0 ADD MLOAD DUP8 PUSH1 0x40 ADD MLOAD DUP6 PUSH1 0x0 ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH2 0x35A2 JUMP JUMPDEST PUSH2 0x2B0C DUP2 DUP6 PUSH1 0x0 ADD MLOAD DUP7 PUSH1 0x40 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH2 0x35A2 JUMP JUMPDEST DUP4 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x2B76 JUMPI PUSH2 0x2B71 DUP2 DUP5 DUP8 PUSH1 0x40 ADD MLOAD PUSH2 0x2B6C DUP7 PUSH1 0x0 ADD MLOAD PUSH1 0x60 ADD MLOAD DUP8 PUSH1 0x20 ADD MLOAD PUSH1 0x60 ADD MLOAD PUSH2 0x34AC JUMP JUMPDEST PUSH2 0x35A2 JUMP JUMPDEST PUSH2 0x2BA6 JUMP JUMPDEST PUSH2 0x2B8E DUP2 DUP5 DUP8 PUSH1 0x40 ADD MLOAD DUP6 PUSH1 0x0 ADD MLOAD PUSH1 0x60 ADD MLOAD PUSH2 0x35A2 JUMP JUMPDEST PUSH2 0x2BA6 DUP2 DUP5 DUP7 PUSH1 0x40 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH1 0x60 ADD MLOAD PUSH2 0x35A2 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 GT ISZERO PUSH2 0x2BE9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4E05 JUMP JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 MLOAD GT ISZERO ISZERO PUSH2 0x2C2D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4E75 JUMP JUMPDEST DUP2 MLOAD DUP3 SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0x2C5D JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD DUP3 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP3 MSTORE POP PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x20 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x2CF5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4DC5 JUMP JUMPDEST POP ADD PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x14 DUP3 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x2D3E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4EF5 JUMP JUMPDEST PUSH2 0x2D4C DUP3 PUSH1 0x14 DUP5 MLOAD SUB PUSH2 0x3733 JUMP JUMPDEST DUP3 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC ADD SWAP1 SWAP3 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2D8C PUSH2 0x2D86 DUP6 DUP5 PUSH2 0x34F6 JUMP JUMPDEST DUP5 PUSH2 0x3794 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x2DA3 JUMPI DUP2 PUSH2 0xFAC JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x2DB2 PUSH2 0x3C04 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0x80 DUP5 ADD MLOAD PUSH2 0x2DCE SWAP2 DUP5 SWAP2 PUSH2 0x2D77 JUMP JUMPDEST DUP2 MSTORE PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0xC0 DUP5 ADD MLOAD PUSH2 0x2DE5 SWAP2 DUP5 SWAP2 PUSH2 0x2D77 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0xE0 DUP5 ADD MLOAD PUSH2 0x2DFF SWAP2 DUP5 SWAP2 PUSH2 0x2D77 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x2EB4 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2E89 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x2EB4 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x2E97 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP PUSH2 0x2ED4 DUP5 PUSH2 0x140 ADD MLOAD DUP6 PUSH1 0x0 ADD MLOAD DUP6 DUP6 PUSH1 0x0 ADD MLOAD PUSH2 0x35A2 JUMP JUMPDEST PUSH2 0x2EED DUP5 PUSH2 0x160 ADD MLOAD DUP5 DUP7 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x35A2 JUMP JUMPDEST PUSH2 0x2F05 DUP2 DUP6 PUSH1 0x0 ADD MLOAD DUP7 PUSH1 0x40 ADD MLOAD DUP6 PUSH1 0x40 ADD MLOAD PUSH2 0x35A2 JUMP JUMPDEST PUSH2 0x2F19 DUP2 DUP5 DUP7 PUSH1 0x40 ADD MLOAD DUP6 PUSH1 0x60 ADD MLOAD PUSH2 0x35A2 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x5A65726F45785472616E73616374696F6E280000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x75696E743235362073616C742C00000000000000000000000000000000000000 PUSH1 0x32 DUP4 ADD MSTORE PUSH32 0x61646472657373207369676E6572416464726573732C00000000000000000000 PUSH1 0x3F DUP4 ADD MSTORE PUSH32 0x6279746573206461746100000000000000000000000000000000000000000000 PUSH1 0x55 DUP4 ADD MSTORE PUSH32 0x2900000000000000000000000000000000000000000000000000000000000000 PUSH1 0x5F DUP4 ADD MSTORE DUP3 MLOAD DUP1 DUP4 SUB DUP5 ADD DUP2 MSTORE PUSH1 0x60 SWAP1 SWAP3 ADD SWAP3 DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH1 0x0 SWAP4 DUP5 SWAP4 DUP5 SWAP4 SWAP1 SWAP3 DUP3 SWAP2 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x3048 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x300B JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP4 ADD DUP2 SWAP1 SUB DUP2 KECCAK256 DUP10 MLOAD SWAP1 SWAP8 POP DUP10 SWAP6 POP SWAP1 SWAP4 POP DUP4 SWAP3 DUP6 ADD SWAP2 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x30DE JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x30A1 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP5 ADD DUP3 SWAP1 SUB DUP3 KECCAK256 SWAP8 DUP3 MSTORE DUP2 ADD SWAP11 SWAP1 SWAP11 MSTORE POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP8 SWAP1 SWAP8 AND SWAP7 DUP9 ADD SWAP7 SWAP1 SWAP7 MSTORE POP POP PUSH1 0x60 DUP6 ADD MSTORE POP POP PUSH1 0x80 SWAP1 SWAP2 KECCAK256 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x1 SLOAD DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP5 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x31EC JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x31AF JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP5 DUP6 MSTORE POP DUP4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP5 SUB DUP4 ADD DUP2 MSTORE SWAP3 DUP2 ADD SWAP1 DUP2 SWAP1 MSTORE DUP3 MLOAD SWAP3 SWAP4 POP SWAP2 DUP3 SWAP2 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x3290 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x3253 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 SWAP1 SWAP4 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP2 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP3 ADD DUP3 SWAP1 SUB SWAP1 SWAP2 KECCAK256 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x25DE PUSH2 0x1C74 DUP4 PUSH2 0x37AB JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND PUSH1 0x3 EQ PUSH2 0x332F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4F05 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x33A2 JUMPI PUSH1 0x60 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x33A2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4F15 JUMP JUMPDEST PUSH2 0x33AA PUSH2 0x259B JUMP JUMPDEST DUP4 MLOAD SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND SWAP2 AND EQ PUSH2 0x3400 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4DF5 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 OR SWAP1 SSTORE DUP3 DUP2 ADD MLOAD DUP4 MLOAD PUSH2 0x140 DUP6 ADD MLOAD PUSH2 0x160 DUP7 ADD MLOAD SWAP4 MLOAD DUP6 SWAP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND SWAP5 SWAP4 SWAP1 SWAP4 AND SWAP3 PUSH32 0xDC47B3613D9FE400085F6DBDC99453462279057E6207385042827ED6B1A62CF7 SWAP3 PUSH2 0x34A0 SWAP3 CALLER SWAP3 SWAP1 PUSH2 0x4C6F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x34EB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4E05 JUMP JUMPDEST DUP1 SWAP2 POP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 ISZERO ISZERO PUSH2 0x3509 JUMPI PUSH1 0x0 SWAP2 POP PUSH2 0x34EF JUMP JUMPDEST POP DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 ISZERO ISZERO PUSH2 0x3519 JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x34EB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4E05 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP5 DUP1 ISZERO ISZERO PUSH2 0x3560 JUMPI INVALID JUMPDEST DUP7 DUP6 MULMOD SWAP2 POP DUP2 ISZERO ISZERO PUSH2 0x3575 JUMPI PUSH1 0x0 SWAP3 POP PUSH2 0x871 JUMP JUMPDEST PUSH2 0x3594 PUSH2 0x3585 DUP4 PUSH3 0xF4240 PUSH2 0x34F6 JUMP JUMPDEST PUSH2 0x358F DUP9 DUP8 PUSH2 0x34F6 JUMP JUMPDEST PUSH2 0x3794 JUMP JUMPDEST PUSH2 0x3E8 LT SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 GT ISZERO PUSH2 0x2919 JUMPI DUP6 MLOAD PUSH1 0x3 LT PUSH2 0x35E9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4EB5 JUMP JUMPDEST POP POP PUSH1 0x20 DUP5 DUP2 ADD MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA SWAP1 SWAP3 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO ISZERO PUSH2 0x3672 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4E65 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH7 0xFFFFFFFFFFFE0 PUSH1 0x3F DUP9 MLOAD ADD AND DUP1 PUSH1 0x84 ADD DUP3 ADD PUSH32 0xA85E59E400000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x80 PUSH1 0x4 DUP5 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x24 DUP5 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x44 DUP5 ADD MSTORE DUP6 PUSH1 0x64 DUP5 ADD MSTORE PUSH1 0x84 DUP4 ADD JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x370E JUMPI DUP10 MLOAD DUP2 MSTORE PUSH1 0x20 SWAP10 DUP11 ADD SWAP10 ADD PUSH2 0x36F6 JUMP JUMPDEST PUSH2 0x200 DUP5 DUP6 DUP5 SUB DUP7 PUSH1 0x0 DUP10 GAS CALL DUP1 ISZERO ISZERO PUSH2 0x3726 JUMPI RETURNDATASIZE DUP6 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x14 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x3775 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x902 SWAP1 PUSH2 0x4EF5 JUMP JUMPDEST POP ADD PUSH1 0x14 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 DUP5 DUP2 ISZERO ISZERO PUSH2 0x37A2 JUMPI INVALID JUMPDEST DIV SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x4F72646572280000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x61646472657373206D616B6572416464726573732C0000000000000000000000 PUSH1 0x26 DUP4 ADD MSTORE PUSH32 0x616464726573732074616B6572416464726573732C0000000000000000000000 PUSH1 0x3B DUP4 ADD MSTORE PUSH32 0x6164647265737320666565526563697069656E74416464726573732C00000000 PUSH1 0x50 DUP4 ADD MSTORE PUSH32 0x616464726573732073656E646572416464726573732C00000000000000000000 PUSH1 0x6C DUP4 ADD MSTORE PUSH32 0x75696E74323536206D616B65724173736574416D6F756E742C00000000000000 PUSH1 0x82 DUP4 ADD MSTORE PUSH32 0x75696E743235362074616B65724173736574416D6F756E742C00000000000000 PUSH1 0x9B DUP4 ADD MSTORE PUSH32 0x75696E74323536206D616B65724665652C000000000000000000000000000000 PUSH1 0xB4 DUP4 ADD MSTORE PUSH32 0x75696E743235362074616B65724665652C000000000000000000000000000000 PUSH1 0xC5 DUP4 ADD MSTORE PUSH32 0x75696E743235362065787069726174696F6E54696D655365636F6E64732C0000 PUSH1 0xD6 DUP4 ADD MSTORE PUSH32 0x75696E743235362073616C742C00000000000000000000000000000000000000 PUSH1 0xF4 DUP4 ADD MSTORE PUSH32 0x6279746573206D616B65724173736574446174612C0000000000000000000000 PUSH2 0x101 DUP4 ADD MSTORE PUSH32 0x62797465732074616B6572417373657444617461000000000000000000000000 PUSH2 0x116 DUP4 ADD MSTORE PUSH32 0x2900000000000000000000000000000000000000000000000000000000000000 PUSH2 0x12A DUP4 ADD MSTORE DUP3 MLOAD PUSH2 0x10B DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH2 0x12B SWAP1 SWAP3 ADD SWAP3 DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH1 0x0 SWAP4 DUP5 SWAP4 DUP5 SWAP4 DUP5 SWAP4 SWAP2 SWAP3 SWAP2 DUP3 SWAP2 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x3A33 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x39F6 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP4 ADD DUP2 SWAP1 SUB DUP2 KECCAK256 PUSH2 0x140 DUP12 ADD MLOAD DUP1 MLOAD SWAP2 SWAP10 POP SWAP6 POP SWAP1 SWAP4 POP DUP4 SWAP3 DUP6 ADD SWAP2 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x3ACE JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x3A91 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP4 ADD DUP2 SWAP1 SUB DUP2 KECCAK256 PUSH2 0x160 DUP12 ADD MLOAD DUP1 MLOAD SWAP2 SWAP9 POP SWAP6 POP SWAP1 SWAP4 POP DUP4 SWAP3 DUP6 ADD SWAP2 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x3B69 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x3B2C JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 SWAP1 SWAP4 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP2 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP3 ADD DUP3 SWAP1 SUB SWAP1 SWAP2 KECCAK256 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP10 ADD DUP1 MLOAD PUSH2 0x140 DUP12 ADD DUP1 MLOAD PUSH2 0x160 SWAP1 SWAP13 ADD DUP1 MLOAD SWAP11 DUP5 MSTORE SWAP9 DUP2 MSTORE SWAP3 DUP9 MSTORE PUSH2 0x1A0 DUP3 KECCAK256 SWAP2 MSTORE SWAP9 SWAP1 MSTORE POP POP POP SWAP2 SWAP1 MSTORE POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x120 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x3C42 PUSH2 0x3C04 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3C4F PUSH2 0x3C04 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFAC DUP3 CALLDATALOAD PUSH2 0x5018 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0x3C99 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x3CAC PUSH2 0x3CA7 DUP3 PUSH2 0x4FA7 JUMP JUMPDEST PUSH2 0x4F80 JUMP JUMPDEST DUP2 DUP2 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP3 POP DUP3 ADD DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3CEA JUMPI DUP2 CALLDATALOAD DUP7 ADD PUSH2 0x3CD4 DUP9 DUP3 PUSH2 0x3E46 JUMP JUMPDEST DUP5 MSTORE POP PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x3CBE JUMP JUMPDEST POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0x3D05 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x3D13 PUSH2 0x3CA7 DUP3 PUSH2 0x4FA7 JUMP JUMPDEST DUP2 DUP2 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP3 POP DUP3 ADD DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3CEA JUMPI DUP2 CALLDATALOAD DUP7 ADD PUSH2 0x3D3B DUP9 DUP3 PUSH2 0x3E95 JUMP JUMPDEST DUP5 MSTORE POP PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x3D25 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0x3D62 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x3D70 PUSH2 0x3CA7 DUP3 PUSH2 0x4FA7 JUMP JUMPDEST SWAP2 POP DUP2 DUP2 DUP4 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH1 0x20 DUP2 ADD SWAP1 POP DUP4 DUP6 PUSH1 0x20 DUP5 MUL DUP3 ADD GT ISZERO PUSH2 0x3D95 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3CEA JUMPI DUP2 PUSH2 0x3DAB DUP9 DUP3 PUSH2 0x3DD9 JUMP JUMPDEST DUP5 MSTORE POP PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x3D98 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFAC DUP3 CALLDATALOAD PUSH2 0x5031 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFAC DUP3 MLOAD PUSH2 0x5031 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFAC DUP3 CALLDATALOAD PUSH2 0x5036 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFAC DUP3 CALLDATALOAD PUSH2 0x5039 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFAC DUP3 MLOAD PUSH2 0x5039 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x1F DUP4 ADD DUP5 SGT PUSH2 0x3E0F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3E27 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x1 DUP3 MUL DUP4 ADD GT ISZERO PUSH2 0x3E3F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0x3E57 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x3E65 PUSH2 0x3CA7 DUP3 PUSH2 0x4FC8 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP4 ADD DUP6 DUP4 DUP4 ADD GT ISZERO PUSH2 0x3E81 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3E8C DUP4 DUP3 DUP5 PUSH2 0x506F JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x180 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3EA8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3EB3 PUSH2 0x180 PUSH2 0x4F80 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3EC1 DUP5 DUP5 PUSH2 0x3C7C JUMP JUMPDEST DUP3 MSTORE POP PUSH1 0x20 PUSH2 0x3ED2 DUP5 DUP5 DUP4 ADD PUSH2 0x3C7C JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP PUSH1 0x40 PUSH2 0x3EE6 DUP5 DUP3 DUP6 ADD PUSH2 0x3C7C JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 PUSH2 0x3EFA DUP5 DUP3 DUP6 ADD PUSH2 0x3C7C JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE POP PUSH1 0x80 PUSH2 0x3F0E DUP5 DUP3 DUP6 ADD PUSH2 0x3DD9 JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE POP PUSH1 0xA0 PUSH2 0x3F22 DUP5 DUP3 DUP6 ADD PUSH2 0x3DD9 JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE POP PUSH1 0xC0 PUSH2 0x3F36 DUP5 DUP3 DUP6 ADD PUSH2 0x3DD9 JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE POP PUSH1 0xE0 PUSH2 0x3F4A DUP5 DUP3 DUP6 ADD PUSH2 0x3DD9 JUMP JUMPDEST PUSH1 0xE0 DUP4 ADD MSTORE POP PUSH2 0x100 PUSH2 0x3F5F DUP5 DUP3 DUP6 ADD PUSH2 0x3DD9 JUMP JUMPDEST PUSH2 0x100 DUP4 ADD MSTORE POP PUSH2 0x120 PUSH2 0x3F75 DUP5 DUP3 DUP6 ADD PUSH2 0x3DD9 JUMP JUMPDEST PUSH2 0x120 DUP4 ADD MSTORE POP PUSH2 0x140 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3F97 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3FA3 DUP5 DUP3 DUP6 ADD PUSH2 0x3E46 JUMP JUMPDEST PUSH2 0x140 DUP4 ADD MSTORE POP PUSH2 0x160 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3FC5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3FD1 DUP5 DUP3 DUP6 ADD PUSH2 0x3E46 JUMP JUMPDEST PUSH2 0x160 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3FF0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2D8C DUP5 DUP5 PUSH2 0x3C7C JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x400F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x401B DUP6 DUP6 PUSH2 0x3C7C JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x402C DUP6 DUP3 DUP7 ADD PUSH2 0x3C7C JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4049 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x4055 DUP6 DUP6 PUSH2 0x3C7C JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x402C DUP6 DUP3 DUP7 ADD PUSH2 0x3DC1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4078 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x408F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2D8C DUP5 DUP3 DUP6 ADD PUSH2 0x3CF4 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x40B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x40C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x40D3 DUP7 DUP3 DUP8 ADD PUSH2 0x3CF4 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x40F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x40FC DUP7 DUP3 DUP8 ADD PUSH2 0x3D51 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4119 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4125 DUP7 DUP3 DUP8 ADD PUSH2 0x3C88 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x4144 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x415B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4167 DUP7 DUP3 DUP8 ADD PUSH2 0x3CF4 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x40FC DUP7 DUP3 DUP8 ADD PUSH2 0x3DD9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x418A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2D8C DUP5 DUP5 PUSH2 0x3DCD JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x41A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2D8C DUP5 DUP5 PUSH2 0x3DD9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x41C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x401B DUP6 DUP6 PUSH2 0x3DD9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x41E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x41F5 DUP8 DUP8 PUSH2 0x3DD9 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x4206 DUP8 DUP3 DUP9 ADD PUSH2 0x3C7C JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4223 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x422F DUP8 DUP3 DUP9 ADD PUSH2 0x3DFD JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x4250 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x425C DUP7 DUP7 PUSH2 0x3DD9 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x426D DUP7 DUP3 DUP8 ADD PUSH2 0x3C7C JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x428A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4125 DUP7 DUP3 DUP8 ADD PUSH2 0x3E46 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x42A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2D8C DUP5 DUP5 PUSH2 0x3DE5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x42C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2D8C DUP5 DUP5 PUSH2 0x3DF1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x42E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x42FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2D8C DUP5 DUP3 DUP6 ADD PUSH2 0x3E95 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x431D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4334 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4340 DUP8 DUP3 DUP9 ADD PUSH2 0x3E95 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x435D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4369 DUP8 DUP3 DUP9 ADD PUSH2 0x3E95 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4386 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4392 DUP8 DUP3 DUP9 ADD PUSH2 0x3E46 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x43AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43BB DUP8 DUP3 DUP9 ADD PUSH2 0x3E46 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x43DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x43F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43FF DUP7 DUP3 DUP8 ADD PUSH2 0x3E95 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x426D DUP7 DUP3 DUP8 ADD PUSH2 0x3DD9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x4429 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x4435 DUP10 DUP10 PUSH2 0x3DD9 JUMP JUMPDEST SWAP7 POP POP PUSH1 0x20 PUSH2 0x4446 DUP10 DUP3 DUP11 ADD PUSH2 0x3C7C JUMP JUMPDEST SWAP6 POP POP PUSH1 0x40 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4463 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x446F DUP10 DUP3 DUP11 ADD PUSH2 0x3DFD JUMP JUMPDEST SWAP5 POP SWAP5 POP POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x448E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x449A DUP10 DUP3 DUP11 ADD PUSH2 0x3DFD JUMP JUMPDEST SWAP3 POP SWAP3 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH2 0x44B2 DUP2 PUSH2 0x5018 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x44C3 DUP3 PUSH2 0x5014 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH2 0x44D5 DUP4 PUSH2 0x500E JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x4505 JUMPI PUSH2 0x44EB DUP7 DUP4 MLOAD PUSH2 0x4B9D JUMP JUMPDEST PUSH2 0x44F4 DUP3 PUSH2 0x500E JUMP JUMPDEST PUSH1 0x60 SWAP7 SWAP1 SWAP7 ADD SWAP6 SWAP2 POP PUSH1 0x1 ADD PUSH2 0x44D8 JUMP JUMPDEST POP SWAP4 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x44B2 DUP2 PUSH2 0x5031 JUMP JUMPDEST PUSH2 0x44B2 DUP2 PUSH2 0x5036 JUMP JUMPDEST PUSH2 0x44B2 DUP2 PUSH2 0x5039 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4535 DUP3 PUSH2 0x5014 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH2 0x4549 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x507B JUMP JUMPDEST PUSH2 0x4552 DUP2 PUSH2 0x50A7 JUMP JUMPDEST SWAP1 SWAP4 ADD PUSH1 0x20 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x44B2 DUP2 PUSH2 0x5064 JUMP JUMPDEST PUSH1 0x12 DUP2 MSTORE PUSH32 0x4C454E4754485F36355F52455155495245440000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0xD DUP2 MSTORE PUSH32 0x494E56414C49445F54414B455200000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1A DUP2 MSTORE PUSH32 0x41535345545F50524F58595F414C52454144595F455849535453000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F33325F4C454E4754485F5245 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x15 DUP2 MSTORE PUSH32 0x5349474E41545552455F554E535550504F525445440000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x17 DUP2 MSTORE PUSH32 0x494E56414C49445F4F524445525F5349474E4154555245000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0xD DUP2 MSTORE PUSH32 0x494E56414C49445F4D414B455200000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x10 DUP2 MSTORE PUSH32 0x55494E543235365F4F564552464C4F5700000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0xF DUP2 MSTORE PUSH32 0x494E56414C49445F54585F484153480000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x11 DUP2 MSTORE PUSH32 0x494E56414C49445F5349474E4154555245000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0xE DUP2 MSTORE PUSH32 0x524F554E44494E475F4552524F52000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x10 DUP2 MSTORE PUSH32 0x4641494C45445F455845435554494F4E00000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x14 DUP2 MSTORE PUSH32 0x494E56414C49445F54414B45525F414D4F554E54000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1A DUP2 MSTORE PUSH32 0x41535345545F50524F58595F444F45535F4E4F545F4558495354000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x21 DUP2 MSTORE PUSH32 0x475245415445525F5448414E5F5A45524F5F4C454E4754485F52455155495245 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x4400000000000000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x11 DUP2 MSTORE PUSH32 0x5349474E41545552455F494C4C4547414C000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1E DUP2 MSTORE PUSH32 0x4C454E4754485F475245415445525F5448414E5F305F52455155495245440000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x17 DUP2 MSTORE PUSH32 0x494E56414C49445F4E45575F4F524445525F45504F4348000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1E DUP2 MSTORE PUSH32 0x4C454E4754485F475245415445525F5448414E5F335F52455155495245440000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x14 DUP2 MSTORE PUSH32 0x434F4D504C4554455F46494C4C5F4641494C4544000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x12 DUP2 MSTORE PUSH32 0x5245454E5452414E43595F494C4C4547414C0000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x13 DUP2 MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F32305F4C454E4754485F5245 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x10 DUP2 MSTORE PUSH32 0x4F524445525F554E46494C4C41424C4500000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0xE DUP2 MSTORE PUSH32 0x494E56414C49445F53454E444552000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x18 DUP2 MSTORE PUSH32 0x4E454741544956455F5350524541445F52455155495245440000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x14 DUP2 MSTORE PUSH32 0x494E56414C49445F54585F5349474E4154555245000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x11 DUP2 MSTORE PUSH32 0x4C454E4754485F305F5245515549524544000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x80 DUP4 ADD SWAP1 PUSH2 0x4B2B DUP5 DUP3 PUSH2 0x4518 JUMP JUMPDEST POP PUSH1 0x20 DUP3 ADD MLOAD PUSH2 0x4B3E PUSH1 0x20 DUP6 ADD DUP3 PUSH2 0x4518 JUMP JUMPDEST POP PUSH1 0x40 DUP3 ADD MLOAD PUSH2 0x4B51 PUSH1 0x40 DUP6 ADD DUP3 PUSH2 0x4518 JUMP JUMPDEST POP PUSH1 0x60 DUP3 ADD MLOAD PUSH2 0x2F19 PUSH1 0x60 DUP6 ADD DUP3 PUSH2 0x4518 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x120 DUP4 ADD SWAP1 PUSH2 0x4B76 DUP5 DUP3 PUSH2 0x4B1A JUMP JUMPDEST POP PUSH1 0x20 DUP3 ADD MLOAD PUSH2 0x4B89 PUSH1 0x80 DUP6 ADD DUP3 PUSH2 0x4B1A JUMP JUMPDEST POP PUSH1 0x40 DUP3 ADD MLOAD PUSH2 0x2F19 PUSH2 0x100 DUP6 ADD DUP3 PUSH2 0x4518 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x60 DUP4 ADD SWAP1 PUSH2 0x4BAE DUP5 DUP3 PUSH2 0x4BD4 JUMP JUMPDEST POP PUSH1 0x20 DUP3 ADD MLOAD PUSH2 0x4BC1 PUSH1 0x20 DUP6 ADD DUP3 PUSH2 0x4518 JUMP JUMPDEST POP PUSH1 0x40 DUP3 ADD MLOAD PUSH2 0x2F19 PUSH1 0x40 DUP6 ADD DUP3 PUSH2 0x4518 JUMP JUMPDEST PUSH2 0x44B2 DUP2 PUSH2 0x505E JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x25DE DUP3 DUP5 PUSH2 0x44A9 JUMP JUMPDEST PUSH2 0x100 DUP2 ADD PUSH2 0x4BFA DUP3 DUP12 PUSH2 0x44A9 JUMP JUMPDEST PUSH2 0x4C07 PUSH1 0x20 DUP4 ADD DUP11 PUSH2 0x44A9 JUMP JUMPDEST PUSH2 0x4C14 PUSH1 0x40 DUP4 ADD DUP10 PUSH2 0x4518 JUMP JUMPDEST PUSH2 0x4C21 PUSH1 0x60 DUP4 ADD DUP9 PUSH2 0x4518 JUMP JUMPDEST PUSH2 0x4C2E PUSH1 0x80 DUP4 ADD DUP8 PUSH2 0x4518 JUMP JUMPDEST PUSH2 0x4C3B PUSH1 0xA0 DUP4 ADD DUP7 PUSH2 0x4518 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0xC0 DUP4 ADD MSTORE PUSH2 0x4C4D DUP2 DUP6 PUSH2 0x452A JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x4C61 DUP2 DUP5 PUSH2 0x452A JUMP JUMPDEST SWAP11 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x4C7D DUP3 DUP7 PUSH2 0x44A9 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x4C8F DUP2 DUP6 PUSH2 0x452A JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x4CA3 DUP2 DUP5 PUSH2 0x452A JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xFAC DUP2 DUP5 PUSH2 0x44B8 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x25DE DUP3 DUP5 PUSH2 0x450F JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x25DE DUP3 DUP5 PUSH2 0x4518 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x4CE7 DUP3 DUP7 PUSH2 0x4518 JUMP JUMPDEST PUSH2 0x4CF4 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x44A9 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x4CA3 DUP2 DUP5 PUSH2 0x452A JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x4D14 DUP3 DUP6 PUSH2 0x4518 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x2D8C DUP2 DUP5 PUSH2 0x452A JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x4D34 DUP3 DUP8 PUSH2 0x4518 JUMP JUMPDEST PUSH2 0x4D41 PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x4BD4 JUMP JUMPDEST PUSH2 0x4D4E PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x4518 JUMP JUMPDEST PUSH2 0x4CA3 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x4518 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x4D69 DUP3 DUP6 PUSH2 0x4521 JUMP JUMPDEST PUSH2 0xFAC PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x44A9 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xFAC DUP2 DUP5 PUSH2 0x452A JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x25DE DUP3 DUP5 PUSH2 0x455F JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x4568 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x4598 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x45C8 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x45F8 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x464E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x467E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x46AE JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x46DE JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x470E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x473E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x476E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x479E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x47CE JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x47FE JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x482E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x4884 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x48B4 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x48E4 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x4914 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x4944 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x4974 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x49A4 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x49D4 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x4A2A JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x4A5A JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x4A8A JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x4ABA JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x25DE DUP2 PUSH2 0x4AEA JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x25DE DUP3 DUP5 PUSH2 0x4B1A JUMP JUMPDEST PUSH2 0x120 DUP2 ADD PUSH2 0x25DE DUP3 DUP5 PUSH2 0x4B64 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x25DE DUP3 DUP5 PUSH2 0x4B9D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x4F9F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x4FBE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 SWAP1 DUP2 MUL ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x4FDF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x1F SWAP2 SWAP1 SWAP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND SWAP1 JUMP JUMPDEST PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x25DE DUP3 PUSH2 0x5018 JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x5096 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x507E JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x2F19 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP1 JUMP STOP LOG2 PUSH6 0x627A7A723058 KECCAK256 PUSH29 0x5F5AF88134AEEEDE952E9CDDA7741EFB0001F235C761EC650B76B231AB PUSH1 0x26 PUSH13 0x6578706572696D656E74616CF5 STOP CALLDATACOPY ",
+ "sourceMap": "931:616:2:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;970:221:17;;8:9:-1;5:2;;;30:1;27;20:12;5:2;970:221:17;;;;;;;;;;;;;;;;;;;;1198:42:4;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1198:42:4;;;;;;;;;13371:572:8;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;13371:572:8;;;;;;;;;;;;;;;;;1288:42:4;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1288:42:4;;;;;;;;;;;;;;;;;1493:360:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1493:360:6;;;;;;;;;;;1791:2557:5;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1791:2557:5;;;;;;;;;;;;;;;;;2081:10811:8;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2081:10811:8;;;;;;;;;976:51:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;976:51:3;;;;;;;;;;;;;;;;;24537:185:8;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;24537:185:8;;;;;;;;;14423:584;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;14423:584:8;;;;;;;;;1942:1012:4;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1942:1012:4;;;;;;;;;15566:586:8;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;15566:586:8;;;;;;;;;2092:154:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2092:154:3;;;;;;;;;;;;;;;;;968:45:7;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;968:45:7;;;;;;;;;1160:495:8;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1160:495:8;;;;;;;;;2090:391:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2090:391:6;;;;;;;;;1087:71;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1087:71:6;;;;;;;;;16540:1432:8;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;16540:1432:8;;;;;;;;;24916:400;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;24916:400:8;;;;;;;;;;;;;;;;;967:63:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;967:63:6;;;;;;;;;258:20:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;258:20:29;;;;2853:6652:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2853:6652:6;;;;;;;;;22554:1848:8;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;22554:1848:8;;;;;;;;;3271:1327:4;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3271:1327:4;;;;;;;;;1710:1456:7;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1710:1456:7;;;;;;;;;1236:666:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1236:666:3;;;;;;;;;5425:2261:4;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5425:2261:4;;;;;;;;;;;;;;;;;4829:322;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4829:322:4;;;;;;;;;1551:67;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1551:67:4;;;;;;;;;857:27:16;;8:9:-1;5:2;;;30:1;27;20:12;5:2;857:27:16;;;;;;;;;;;;18429:1442:8;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;18429:1442:8;;;;;;;;;1298:33:17;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1298:33:17;;;;20259:1834:8;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;20259:1834:8;;;;;;;;;1065:36:7;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1065:36:7;;;;500:167:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;500:167:29;;;;;;;;;1113:46:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1113:46:2;;;;970:221:17;1042:148;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;1042:148:17;;;;;;;;1032:159;;1042:148;;;;;1032:159;;;;1042:148;1032:159;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1032:159:17;;;;;;;;;;;;;;;;970:221;:::o;1198:42:4:-;;;;;;;;;;;;;:::o;13371:572:8:-;13557:35;;:::i;:::-;13613:9;13666:36;;:::i;:::-;13625:1;13613:13;;13608:296;13632:6;:13;13628:1;:17;13608:296;;;13705:123;13732:6;13739:1;13732:9;;;;;;;;;;;;;;;;;;13759:21;13781:1;13759:24;;;;;;;;;;;;;;;;;;13801:10;13812:1;13801:13;;;;;;;;;;;;;;;;;;13705:9;:123::i;:::-;13666:162;;13842:51;13857:16;13875:17;13842:14;:51::i;:::-;13647:3;;;;;13608:296;;;13371:572;;;;;;;:::o;1288:42:4:-;;;;;;;;;;;;;;;:::o;1493:360:6:-;1646:110;1680:4;1702:13;1733:9;;1646:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1646:16:6;;-1:-1:-1;;;;;1646:110:6:i;:::-;1625:174;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1809:15:6;;;;:9;:15;;;;;;;;:30;;;;;;;;;;;:37;;;;1842:4;1809:37;;;1493:360::o;1791:2557:5:-;2006:59;;:::i;:::-;2471:39;;:::i;:::-;2546:40;;:::i;:::-;2335:24;;;;;2307:25;;;;:52;;;;2397:24;;;2369:25;;;:52;2655:20;2513:23;2335:9;2513:12;:23::i;:::-;2471:65;;2589:24;2602:10;2589:12;:24::i;:::-;2546:67;;2678:26;:24;:26::i;:::-;2655:49;;2767:39;2784:9;2795:10;2767:16;:39::i;:::-;2883:195;2924:9;2947:10;2971:13;:41;;;3026:14;:42;;;2883:27;:195::i;:::-;3228:23;;:46;;;2862:216;;-1:-1:-1;3123:248:5;;3152:9;;3175:13;;3202:12;;3228:46;3348:13;3123:15;:248::i;:::-;3488:24;;;;;:47;;3381:253;;3410:10;;3434:14;;3462:12;;3488:47;3610:14;3381:15;:253::i;:::-;3678:205;3709:9;3732:12;3758:13;:23;;;3795:13;:41;;;3850:18;:23;;;3678:17;:205::i;:::-;3893:209;3924:10;3948:12;3974:14;:24;;;4012:14;:42;;;4068:18;:24;;;3893:17;:209::i;:::-;4171:134;4204:9;4227:10;4251:12;4277:18;4171:19;:134::i;:::-;1791:2557;;;;;;;;;:::o;2081:10811:8:-;2252:30;;:::i;:::-;6147:4;6141:11;;5368:23;6165:42;;;6573:4;6262:3;6241:25;;7260:59;;;7586:19;;6552:26;;;7566:40;;;7374:4;7699:23;;;7693:30;7669:22;;;7662:62;7795:23;;;7789:30;7765:22;;;7758:62;7898:23;;;7892:30;7868:22;;;7861:62;8013:4;7995:23;;7989:30;7965:22;;;7958:62;8113:4;8095:23;;8089:30;8065:22;;;8058:62;8213:4;8195:23;;8189:30;8165:22;;;8158:62;8311:4;8293:23;;8287:30;8263:22;;;8256:62;8410:5;8392:24;;8386:31;8361:23;;;8354:64;8515:5;8497:24;;8491:31;8466:23;;;8459:64;8603:5;8585:24;;8579:31;;8554:23;;;8547:64;;;8711:5;8693:24;;8687:31;8662:23;;;8655:64;8795:5;8922:74;;9084:24;9156:19;;8778:23;;;9360:34;;;5368:23;;6241:25;;;;6552:26;7352:27;;;;6552:26;;9422:22;;;;9204:23;;;;9280:4;9261:24;;9257:35;5341:24;9514:237;9537:13;9534:1;9531:20;9514:237;;;9607:19;;9587:40;;9676:4;9659:22;;;;9714:23;;;;9565:1;9558:9;9514:237;;;-1:-1:-1;;;;9861:31:8;;;9845:13;9826:33;;;9819:74;;;;9987:17;;9981:24;10053:19;;10257:34;;;9853:4;10319:22;;;;10101:23;;;;10177:4;10158:24;;10154:35;10426:1;10412:237;10435:13;10432:1;10429:20;10412:237;;;10505:19;;10485:40;;10574:4;10557:22;;;;10612:23;;;;10463:1;10456:9;10412:237;;;-1:-1:-1;;;10718:46:8;;;-1:-1:-1;10949:33:8;;;10819:4;10797:27;;;10924:59;;;11097:19;;11288:34;;;10797:27;;11350:22;;;;11145:23;;;;11097:19;11221:4;11202:24;;11198:35;-1:-1:-1;11429:237:8;11452:13;11449:1;11446:20;11429:237;;;11522:19;;11502:40;;11591:4;11574:22;;;;11629:23;;;;11480:1;11473:9;11429:237;;;11433:12;12197:3;12118:15;12064;12051:11;12047:33;11966:15;11881:7;11761:3;11731:543;12294:7;12314:205;;;;12537:1;12532:316;;;;12287:561;;12314:205;12359:1;12346:11;12339:22;12407:1;12402:2;12389:11;12385:20;12378:31;12455:1;12450:2;12437:11;12433:20;12426:31;12503:1;12498:2;12485:11;12481:20;12474:31;12314:205;;12532:316;12583:15;12577:22;12564:11;12557:43;12673:2;12656:15;12652:24;12646:31;12641:2;12628:11;12624:20;12617:61;12751:2;12734:15;12730:24;12724:31;12719:2;12706:11;12702:20;12695:61;12829:2;12812:15;12808:24;12802:31;12797:2;12784:11;12780:20;12773:61;12287:561;-1:-1:-1;;;;;;;;;;;;2081:10811:8;;;;;;:::o;976:51:3:-;;;;;;;;;;;;;;;:::o;24537:185:8:-;24630:9;24625:91;24649:6;:13;24645:1;:17;24625:91;;;24683:22;24695:6;24702:1;24695:9;;;;;;;;;;;;;;;;;;24683:11;:22::i;:::-;24664:3;;24625:91;;;24537:185;;:::o;14423:584::-;14615:35;;:::i;:::-;14671:9;14724:36;;:::i;:::-;14683:1;14671:13;;14666:302;14690:6;:13;14686:1;:17;14666:302;;;14763:129;14796:6;14803:1;14796:9;;;;;;;;;;;;;;;;;;14823:21;14845:1;14823:24;;;;;;;;;;;;;;;;;;14865:10;14876:1;14865:13;;;;;;;;;;;;;;;;;;14763:15;:129::i;:::-;14724:168;;14906:51;14921:16;14939:17;14906:14;:51::i;:::-;14705:3;;;;;14666:302;;1942:1012:4;2025:20;2332:21;2496;2552;2048:26;:24;:26::i;:::-;2025:49;-1:-1:-1;2356:26:4;;;2372:10;2356:26;:52;;2398:10;2356:52;;;2393:1;2356:52;2576:24;;;;;;;;:10;:24;;;;;;;;:39;;;;;;;;;;2332:76;;-1:-1:-1;2539:1:4;2520:20;;;-1:-1:-1;2576:39:4;-1:-1:-1;2704:29:4;;;2683:100;;;;;;;;;;;;;;2823:24;;;;;;;;:10;:24;;;;;;;;:39;;;;;;;;;;;;;;:55;;;2893:54;;;;;2865:13;;2893:54;;;;;;;;;;1942:1012;;;;;:::o;15566:586:8:-;15759:35;;:::i;:::-;15815:9;15868:36;;:::i;:::-;15827:1;15815:13;;15810:303;15834:6;:13;15830:1;:17;15810:303;;;15907:130;15941:6;15948:1;15941:9;;;;;;;;;;;;;;;;;;15968:21;15990:1;15968:24;;;;;;;;;;;;;;;;;;16010:10;16021:1;16010:13;;;;;;;;;;;;;;;;;;15907:16;:130::i;:::-;15868:169;;16051:51;16066:16;16084:17;16051:14;:51::i;:::-;15849:3;;;;;15810:303;;2092:154:3;2213:26;;;2183:7;2213:26;;;:12;:26;;;;;;;;2092:154;;;;:::o;968:45:7:-;;;;;;;;;;;;;;;:::o;1160:495:8:-;1330:30;;:::i;:::-;1390:95;1413:5;1432:20;1466:9;1390;:95::i;:::-;1516:34;;;;1376:109;;-1:-1:-1;1516:58:8;;1495:125;;;;;;;;;;;;;;1160:495;;;;;:::o;2090:391:6:-;2223:21;2247:26;:24;:26::i;:::-;2283:32;;;;;;;;:17;:32;;;;;;;;:50;;;;;;;;;;;;;;:61;;;;;;;;;;2359:115;2283:32;;-1:-1:-1;2283:50:6;;2359:115;;;;2283:61;;2359:115;;;;;;;;;;2090:391;;;:::o;1087:71::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;16540:1432:8:-;16717:35;;:::i;:::-;16768:27;16842:9;17228:37;17419:36;;:::i;:::-;16798:6;16805:1;16798:9;;;;;;;;;;;;;;;;;;:24;;;16768:54;;16854:1;16842:13;;16837:1096;16861:6;:13;16857:1;:17;16837:1096;;;17131:14;17104:6;17111:1;17104:9;;;;;;;;;;;;;;;;;;:24;;:41;;;;17268:70;17276:20;17298:16;:39;;;17268:7;:70::i;:::-;17228:110;;17458:128;17485:6;17492:1;17485:9;;;;;;;;;;;;;;;;;;17512:29;17559:10;17570:1;17559:13;;;;;;;;;17458:128;17419:167;;17671:51;17686:16;17704:17;17671:14;:51::i;:::-;17863:20;17820:16;:39;;;:63;17816:107;;;17903:5;;17816:107;16876:3;;;;;16837:1096;;;16540:1432;;;;;;;;;:::o;24916:400::-;25016:20;25059:14;25099:38;25187:9;25076:6;:13;25059:30;;25165:6;25140:32;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;25099:73;;25199:1;25187:13;;25182:101;25206:6;25202:1;:10;25182:101;;;25249:23;25262:6;25269:1;25262:9;;;;;;;;;;;;;;;;;;25249:12;:23::i;:::-;25233:10;25244:1;25233:13;;;;;;;;;;;;;;;;;;:39;25214:3;;25182:101;;;-1:-1:-1;25299:10:8;24916:400;-1:-1:-1;;;24916:400:8:o;967:63:6:-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;258:20:29:-;;;;;;:::o;2853:6652:6:-;3015:12;3192:22;3445:27;3566:7;3583:9;3602;3621:17;7350:24;3083:1;3064:9;:16;:20;3043:97;;;;;;;;;;;;;;;;3223:23;:9;:21;:23::i;:::-;3217:30;;;;-1:-1:-1;3303:29:6;3278:55;;;;3257:123;;;;;;;;;;;;;;3489:16;3475:31;;;;;;;;;;3445:61;-1:-1:-1;3988:21:6;3971:13;:38;;;;;;;;;3967:5188;;;4025:27;;;;;;;;;;;3967:5188;4334:21;4317:13;:38;;;;;;;;;4313:4842;;;4396:16;;:21;4371:97;;;;;;;;;;;;;;4492:5;;-1:-1:-1;4511:14:6;;4313:4842;4598:20;4581:13;:37;;;;;;;;;4577:4578;;;4659:16;;4679:2;4659:22;4634:99;;;;;;;;;;;;;;4757:9;4767:1;4757:12;;;;;;;;;;;;;;;;;;;;;4751:19;;-1:-1:-1;4788:24:6;:9;4810:1;4788:24;:21;:24;:::i;:::-;4784:28;-1:-1:-1;4830:25:6;:9;4852:2;4830:25;:21;:25;:::i;:::-;4826:29;;4881:24;4891:4;4897:1;4900;4903;4881:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;4881:24:6;;;;;4929:26;;;;;;;;;-1:-1:-1;4881:24:6;-1:-1:-1;4969:14:6;;-1:-1:-1;4969:14:6;4577:4578;5060:21;5043:13;:38;;;;;;;;;5039:4116;;;5122:16;;5142:2;5122:22;5097:99;;;;;;;;;;;;;;5220:9;5230:1;5220:12;;;;;;;;;;;;;;;;;;;;;5214:19;;-1:-1:-1;5251:24:6;:9;5273:1;5251:24;:21;:24;:::i;:::-;5247:28;-1:-1:-1;5293:25:6;:9;5315:2;5293:25;:21;:25;:::i;:::-;5289:29;;5344:225;5475:4;5381:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;5381:116:6;;;5371:127;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;365:33;;5371:127:6;;;;;;;;;;;;-1:-1:-1;5344:225:6;;;;;;;;;;-1:-1:-1;5371:127:6;-1:-1:-1;5516:1:6;;5535;;-1:-1:-1;5554:1:6;;5344:225;;5039:4116;6237:20;6220:13;:37;;;;;;;;;6216:2939;;;6298:16;;:21;6273:97;;;;;;;;;;;;;;6394:27;;;6411:10;6394:27;;-1:-1:-1;6435:14:6;;6216:2939;6619:20;6602:13;:37;;;;;;;;;6598:2557;;;6665:56;;;;;:39;;;;;;:56;;6705:4;;6711:9;;6665:56;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6665:56:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6665:56:6;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;6665:56:6;;;;;;;;;6655:66;-1:-1:-1;6735:14:6;;6598:2557;7248:23;7231:13;:40;;;;;;;;;7227:1928;;;7377:26;:9;:24;:26::i;:::-;7488:32;;;;;;;;:17;:32;;;;;;;;:50;;;;;;;;;;7350:53;;-1:-1:-1;7488:50:6;;7487:51;7483:102;;;7565:5;7558:12;;;;7483:102;7608:139;;;;;:45;;;;;;:139;;7671:4;;7693:13;;7724:9;;7608:139;;;;7227:1928;7883:23;7866:13;:40;;;;;;;;;7862:1293;;;7932:15;;;;:9;:15;;;;;;;;:30;;;;;;;;;;;;;;-1:-1:-1;7976:14:6;;7862:1293;8556:20;8539:13;:37;;;;;;;;;8535:620;;;8617:16;;8637:2;8617:22;8592:99;;;;;;;;;;;;;;8715:9;8725:1;8715:12;;;;;;;;;;;;;;;;;;;;;8709:19;;-1:-1:-1;8746:24:6;:9;8768:1;8746:24;:21;:24;:::i;:::-;8742:28;-1:-1:-1;8788:25:6;:9;8810:2;8788:25;:21;:25;:::i;:::-;8784:29;;8839:227;8972:4;8876:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;8876:118:6;;;8866:129;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;8535:620:6;9467:31;;;;;;;;;;;2853:6652;;;;;;;;;;;;;:::o;22554:1848:8:-;22737:35;;:::i;:::-;22788:27;22858:9;23248:37;23554;23840:36;;:::i;:::-;22818:6;22825:1;22818:9;;;;;;;;;;;;;;;;;;:24;;;22788:54;;22870:1;22858:13;;22853:1510;22877:6;:13;22873:1;:17;22853:1510;;;23152:14;23125:6;23132:1;23125:9;;;;;;;;;;;;;;;;;;;:24;;:41;23318:39;;23288:70;;23296:20;;23288:7;:70::i;:::-;23248:110;;23594:165;23628:6;23635:1;23628:9;;;;;;;;;;;;;;;;;;:26;;;23672:6;23679:1;23672:9;;;;;;;;;;;;;;;;;;:26;;;23716:29;23594:16;:165::i;:::-;23554:205;;23879:135;23913:6;23920:1;23913:9;;;;;;;;;;;;;;;;;;23940:29;23987:10;23998:1;23987:13;;;;;;;;;23879:135;23840:174;;24099:51;24114:16;24132:17;24099:14;:51::i;:::-;24250:39;;:63;;24246:107;;;24333:5;;24246:107;22892:3;;;;;22853:1510;;;22554:1848;;;;;;;;;;:::o;3271:1327:4:-;3426:30;;:::i;:::-;3500:26;;:::i;:::-;3590:20;3694:33;3810:30;3529:19;3542:5;3529:12;:19::i;:::-;3500:48;;3613:26;:24;:26::i;:::-;3590:49;;3730:70;3738:5;:22;;;3762:9;:37;;;3730:7;:70::i;:::-;3694:106;;3843:55;3850:20;3872:25;3843:6;:55::i;:::-;3810:88;;3937:186;3966:5;3985:9;4008:12;4034:20;4068:22;4104:9;3937:15;:186::i;:::-;4193:51;4214:5;4221:22;4193:20;:51::i;:::-;4179:65;;4297:181;4328:5;4347:12;4373:9;:19;;;4406:9;:37;;;4457:11;4297:17;:181::i;:::-;4517:45;4529:5;4536:12;4550:11;4517;:45::i;1710:1456:7:-;1924:21;;2014:23;;1924:35;:21;:35;1903:100;;;;;;;;;;;;;;2040:113;2058:94;2093:4;2111:13;2138:4;;2058:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2058:21:7;;-1:-1:-1;;;;;2058:94:7:i;:::-;2040:17;:113::i;:::-;2240:29;;;;:12;:29;;;;;;2014:139;;-1:-1:-1;2240:29:7;;2239:30;2218:92;;;;;;;;;;;;;;2396:27;;;2413:10;2396:27;2392:410;;2498:137;2536:15;2573:13;2608:9;;2498:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2498:16:7;;-1:-1:-1;;;;;2498:137:7:i;:::-;2473:216;;;;;;;;;;;;;;;;2754:21;:37;;;;;;;;;;2392:410;2843:29;;;;:12;:29;;;;;;;:36;;;;2875:4;2843:36;;;2910:32;2918:4;;2937;;;;2910:32;2937:4;;;;2910:32;;;;;;;;;;;;;;;;;;;;;;;;2889:95;;;;;;;;;;;;;;;;3072:27;;;3089:10;3072:27;3068:92;;3115:21;:34;;;;;;3068:92;1710:1456;;;;;;;:::o;1236:666:3:-;426:5:29;;1333:30:3;;;;;;426:5:29;;412:10;:19;391:85;;;;;;;;;;;;;;1378:10:3;1333:56;;1484:18;:29;;;:31;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1484:31:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1484:31:3;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;1484:31:3;;;;;;;;;1553:26;;;;;;;:12;:26;;;;;;1462:53;;-1:-1:-1;1553:26:3;;;-1:-1:-1;1610:31:3;;1589:104;;;;;;;;;;;;;;1753:26;;;;;;;:12;:26;;;;;;;:47;;;;;;;;;;1815:80;;;;;1753:26;;1875:10;;1815:80;;;;;;;;;;1236:666;;;;:::o;5425:2261:4:-;5512:26;;:::i;:::-;5610:19;5623:5;5610:12;:19::i;:::-;5588;;;;:41;;;;5711:27;;;:6;:27;;;;;;;;5671:37;;;:67;6040:22;;;;:27;6036:157;;;6113:38;6107:45;6083:69;;;;6166:16;;6036:157;6506:22;;;;:27;6502:157;;;6579:38;6573:45;;6502:157;6753:22;;;;6712:37;;;;:63;6708:179;;6821:24;6815:31;;6708:179;7011:27;;;;6992:15;:46;6988:157;;7084:19;7078:26;;6988:157;7214:19;;;;;7204:30;;;;:9;:30;;;;;;;;;7200:143;;;7280:21;7274:28;;7200:143;7410:10;;;;7367:18;;7356:30;;;;;;;;:10;:30;;;;;;;;7387:19;;;;7356:51;;;;;;;;;;:64;7352:177;;;7466:21;7460:28;;7352:177;7632:20;7602:51;;;5425:2261;-1:-1:-1;5425:2261:4:o;4829:322::-;4937:26;;:::i;:::-;4966:19;4979:5;4966:12;:19::i;:::-;4937:48;;5024:35;5042:5;5049:9;5024:17;:35::i;:::-;5096:48;5117:5;5124:9;:19;;;5096:20;:48::i;1551:67::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;857:27:16:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;18429:1442:8:-;18613:35;;:::i;:::-;18664:27;18734:9;19120:37;19311:36;;:::i;:::-;18694:6;18701:1;18694:9;;;;;;;;;;;;;;;;;;:24;;;18664:54;;18746:1;18734:13;;18729:1103;18753:6;:13;18749:1;:17;18729:1103;;;19023:14;18996:6;19003:1;18996:9;;;;;;;;;;;;;;;;;;:24;;:41;;;;19160:70;19168:20;19190:16;:39;;;19160:7;:70::i;:::-;19120:110;;19350:135;19384:6;19391:1;19384:9;;;;;;;;;;;;;;;;;;19411:29;19458:10;19469:1;19458:13;;;;;;;;;19350:135;19311:174;;19570:51;19585:16;19603:17;19570:14;:51::i;:::-;19762:20;19719:16;:39;;;:63;19715:107;;;19802:5;;19715:107;18768:3;;;;;18729:1103;;1298:33:17;;;;:::o;20259:1834:8:-;20435:35;;:::i;:::-;20486:27;20556:9;20946:37;21252;21538:36;;:::i;:::-;20516:6;20523:1;20516:9;;;;;;;;;;;;;;;;;;:24;;;20486:54;;20568:1;20556:13;;20551:1503;20575:6;:13;20571:1;:17;20551:1503;;;20850:14;20823:6;20830:1;20823:9;;;;;;;;;;;;;;;;;;;:24;;:41;21016:39;;20986:70;;20994:20;;20986:7;:70::i;:::-;20946:110;;21292:165;21326:6;21333:1;21326:9;;;;;;;;;21292:165;21252:205;;21577:128;21604:6;21611:1;21604:9;;;;;;;;;;;;;;;;;;21631:29;21678:10;21689:1;21678:13;;;;;;;;;21577:128;21538:167;;21790:51;21805:16;21823:17;21790:14;:51::i;:::-;21941:39;;:63;;21937:107;;;22024:5;;21937:107;20590:3;;;;;20551:1503;;1065:36:7;;;;;;:::o;500:167:29:-;426:5;;;;412:10;:19;391:85;;;;;;;;;;;;;;596:22;;;;592:69;;634:5;:16;;;;;;;;;;592:69;500:167;:::o;1113:46:2:-;;;;;;;;;;;;;;;;;;;:::o;1772:648:19:-;1965:39;;2006:40;;1957:90;;1965:39;1957:7;:90::i;:::-;1915:132;;2107:39;;;;;2148:40;;;;2099:90;;2107:39;2099:7;:90::i;:::-;2057:39;;;:132;2239:29;;;;;2270:30;;;;2231:70;;2239:29;2231:7;:70::i;:::-;2199:29;;;:102;2351:29;;;;;2382:30;;;;2343:70;;2351:29;2343:7;:70::i;:::-;2311:29;;;;:102;;;;-1:-1:-1;1772:648:19:o;4805:241:7:-;4936:21;;4888:7;;;;4936:35;:21;:35;:72;;4987:21;;;;4936:72;;;4974:10;4936:72;4911:97;4805:241;-1:-1:-1;;4805:241:7:o;4518:1075:5:-;5472:64;5480:9;:26;;;5508:10;:27;;;5472:7;:64::i;:::-;5392;5400:9;:26;;;5428:10;:27;;;5392:7;:64::i;:::-;:144;;5371:215;;;;;;;;;;;;;6329:3311;6601:59;;:::i;:::-;7557:37;7675:38;7796:34;7840:35;7597:68;7605:9;:26;;;7633:31;7597:7;:68::i;:::-;7557:108;;7716:70;7724:10;:27;;;7753:32;7716:7;:70::i;:::-;7675:111;;7985:68;7993:30;8025:10;:27;;;7985:7;:68::i;:::-;7902:67;7910:29;7941:10;:27;;;7902:7;:67::i;:::-;:151;7885:1080;;8175:29;8146:58;;8335:164;8369:10;:27;;;8414:10;:27;;;8459:26;8335:16;:164::i;:::-;8305:194;;7885:1080;;;8630:30;8600:60;;8789:165;8823:10;:27;;;8868:10;:27;;;8913;8789:16;:165::i;:::-;8760:194;;7885:1080;9050:93;9084:9;9107:26;9050:20;:93::i;:::-;9024:119;;9231:95;9265:10;9289:27;9231:20;:95::i;:::-;9204:24;;;;:122;;;9449:23;;:46;9509:47;;;9428:138;;9449:46;9428:7;:138::i;:::-;9380:45;;;:186;6329:3311;;;;;;;;;;:::o;9997:1727:4:-;10363:21;;:52;;10394:20;10363:52;10342:115;;;;;;;;;;;;;;10533:25;;;10512:92;;;;;;;;;;;;;;10676:19;;;;:33;;;10672:170;;10750:19;;;;:33;;10773:10;10750:33;10725:106;;;;;;;;;;;;;;10912:18;;;;:32;;;10908:169;;11007:12;10985:34;;:5;:18;;;:34;;;10960:106;;;;;;;;;;;;;;;;11159:37;;;;:42;11155:301;;;11242:146;11280:9;:19;;;11321:5;:18;;;11361:9;11242:16;:146::i;:::-;11217:228;;;;;;;;;;;;;;;;11528:149;11561:22;11601:5;:22;;;11641:5;:22;;;11528:15;:149::i;:::-;11527:150;11506:211;;;;;;;;;;;;;;9997:1727;;;;;;:::o;8006:792::-;8284:72;8292:27;8321:11;:34;;;8284:7;:72::i;:::-;8264:17;;;;:6;:17;;;;;;;;;:92;;;;8443:25;;;;8411:18;;8532:34;;8580;;;;8628:24;;;;8666;;;;8727:20;;;;8761;;;;8393:398;;8264:17;;8393:398;;;;;;;;;;;;;;8482:12;;8508:10;;8532:34;;8580;;8628:24;;8761:20;8393:398;;;;;;;;;;8006:792;;;;;:::o;10086:2233:5:-;10361:14;10333:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:25;;:42;;10361:14;;10333:42;;10361:14;10333:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10419:202;10453:9;:24;;;10491:9;:22;;;10527:10;:23;;;10564:18;:24;;;:47;;;10419:20;:202::i;:::-;10665:25;;;;10704:23;;10741:22;;10777:23;;:46;;;10631:202;;10665:25;10704:23;10741:22;10631:20;:202::i;:::-;10843:189;10877:9;:24;;;10915:9;:22;;;10951:12;10977:18;:45;;;10843:20;:189::i;:::-;11065:185;11099:12;11125:9;:22;;;11161:9;:29;;;11204:18;:23;;;:36;;;11065:20;:185::i;:::-;11260:188;11294:12;11320:10;:23;;;11357:10;:30;;;11401:18;:24;;;:37;;;11260:20;:188::i;:::-;11518:10;:30;;;11485:63;;:9;:29;;;:63;;;11481:832;;;11564:301;11602:12;11632;11662:9;:29;;;11709:142;11738:18;:23;;;:36;;;11796:18;:24;;;:37;;;11709:7;:142::i;:::-;11564:20;:301::i;:::-;11481:832;;;11896:195;11934:12;11964;11994:9;:29;;;12041:18;:23;;;:36;;;11896:20;:195::i;:::-;12105:197;12143:12;12173;12203:10;:30;;;12251:18;:24;;;:37;;;12105:20;:197::i;:::-;10086:2233;;;;;:::o;501:207:30:-;587:7;631:6;;;;610:69;;;;;;;;;;;;;;-1:-1:-1;696:5:30;;;501:207::o;8304:448:27:-;8388:13;8449:1;8438;:8;:12;8417:92;;;;;;;;;;;;;;;;8559:8;;8557:1;;8559:12;;;;8557:15;;;;;;;;;;8671:8;;8667:16;;8696:17;;;-1:-1:-1;8557:15:27;;;;;;;8304:448::o;13281:490::-;13402:14;13465:5;13473:2;13465:10;13453:1;:8;:22;;13432:107;;;;;;;;;;;;;;;;-1:-1:-1;13718:13:27;13620:2;13718:13;13712:20;;13281:490::o;8947:482::-;9034:14;9097:2;9085:1;:8;:14;;9064:99;;;;;;;;;;;;;;;;9215:29;9227:1;9241:2;9230:1;:8;:13;9215:11;:29::i;:::-;9347:8;;9343:17;;9373;;;-1:-1:-1;9206:38:27;8947:482::o;937:326:20:-;1091:21;1144:82;1165:26;1173:9;1184:6;1165:7;:26::i;:::-;1205:11;1144:7;:82::i;:::-;1128:98;937:326;-1:-1:-1;;;;937:326:20:o;1369:135:30:-;1454:7;1488:1;1484;:5;:13;;1496:1;1484:13;;;-1:-1:-1;1492:1:30;;1477:20;-1:-1:-1;1369:135:30:o;13008:848:4:-;13159:30;;:::i;:::-;13254:34;;;:59;;;13426:22;;;;13462;;;;13360:134;;13291:22;;13360:16;:134::i;:::-;13323:171;;13597:22;;;;13633:14;;;;13531:126;;13561:22;;13531:16;:126::i;:::-;13504:24;;;:153;13760:22;;;;13796:14;;;;13694:126;;13724:22;;13694:16;:126::i;:::-;13667:24;;;:153;13008:848;;;;:::o;14166:932::-;14373:14;14345:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:25;;:42;;14373:14;;14345:42;;14373:14;14345:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14397:170;14431:5;:20;;;14465:5;:18;;;14497:12;14523:11;:34;;;14397:20;:170::i;:::-;14577;14611:5;:20;;;14645:12;14671:5;:18;;;14703:11;:34;;;14577:20;:170::i;:::-;14757:165;14791:12;14817:5;:18;;;14849:5;:25;;;14888:11;:24;;;14757:20;:165::i;:::-;14932:159;14966:12;14992;15018:5;:25;;;15057:11;:24;;;14932:20;:159::i;:::-;14166:932;;;;:::o;3459:902:7:-;1237:146;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;6:49;;1237:146:7;;;;;;;;1227:157;;3623:14;;;;;;1237:146;;;;1227:157;;;;1237:146;1227:157;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;365:33;;1227:157:7;;;;;;;;;;;3740:15;;1227:157;;-1:-1:-1;3740:15:7;;-1:-1:-1;1227:157:7;;-1:-1:-1;1227:157:7;;3740:15;;;-1:-1:-1;3740:15:7;1227:157;3740:15;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;365:33;;3740:15:7;;;;;;;;;;;;4062:26;;;4108:15;;4101:29;;;;-1:-1:-1;4186:42:7;4167:62;;;;4150:15;;;4143:87;;;;-1:-1:-1;;4262:2:7;4250:15;;4243:33;-1:-1:-1;;4317:3:7;4299:22;;;;3459:902;-1:-1:-1;3459:902:7:o;1816:205:17:-;1910:7;1967:13;;;;;;;;;;;;;;;;;;1982:18;;2002:10;1950:63;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;365:33;;1950:63:17;;;;;-1:-1:-1;1950:63:17;;;;;;;-1:-1:-1;1950:63:17;;;26:21:-1;;;22:32;;6:49;;1950:63:17;;;;;;;1940:74;;1950:63;;-1:-1:-1;1950:63:17;;;1940:74;;;;1950:63;1940:74;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;;;;365:33;;1940:74:17;;;;;;;;;;;;-1:-1:-1;;;;;1816:205:17:o;4212:202:21:-;4301:17;4346:35;4364:16;4374:5;4364:9;:16::i;11921:816:4:-;12185:21;;12577:20;;12185:52;;12216:20;12185:52;12164:115;;;;;;;;;;;;;;12353:19;;;;:33;;;12349:170;;12427:19;;;;:33;;12450:10;12427:33;12402:106;;;;;;;;;;;;;;12600:26;:24;:26::i;:::-;12657:18;;12577:49;;-1:-1:-1;12657:34:4;;;;;;;12636:94;;;;;;;;;;;;;;11921:816;;;:::o;9100:422::-;9248:20;;;;:9;:20;;;;;;;:27;;;;9271:4;9248:27;;;9365:25;;;;9333:18;;9451:20;;;;9485;;;;9313:202;;9258:9;;9313:202;;;;;;;;;;;;;;9404:10;;9485:20;9313:202;;;;;;;;;;9100:422;;:::o;714:230:30:-;800:7;835:5;;;871:6;;;;850:69;;;;;;;;;;;;;;936:1;929:8;;714:230;;;;;;:::o;50:288::-;136:7;;163:6;;159:45;;;192:1;185:8;;;;159:45;-1:-1:-1;225:5:30;;;229:1;225;:5;261;;;;;;;;:10;240:73;;;;;;;;;;;;;1502:555:20;1655:12;1683:17;1840:33;1729:11;1703:38;;;;;;;1718:9;1710:6;1703:38;1683:58;-1:-1:-1;1755:14:20;;1751:79;;;1792:5;1785:12;;;;1751:79;1876:98;1897:27;1905:9;1916:7;1897;:27::i;:::-;1938:26;1946:9;1957:6;1938:7;:26::i;:::-;1876:7;:98::i;:::-;2022:4;-1:-1:-1;1994:32:20;1502:555;-1:-1:-1;;;;;;1502:555:20:o;2561:5068:3:-;3031:19;3290:18;2797:1;2788:6;:10;2784:4839;;;2887:16;;2906:1;-1:-1:-1;2862:109:3;;;;;;;;;;;;;;-1:-1:-1;;3153:2:3;3138:18;;;3111:46;3179:66;3107:156;3311:26;;;;:12;:26;;;;;;;;;;3422:24;;;3397:109;;;;;;;;;;;;;;4923:2;4917:9;5239:15;5234:2;5222:9;5216:16;5212:25;5208:47;5392:14;5387:3;5383:24;5374:7;5370:38;5676:66;5667:7;5660:83;6160:3;6156:1;6147:7;6143:15;6136:28;6216:42;6210:4;6206:53;6201:2;6192:7;6188:16;6181:79;6310:42;6306:2;6302:51;6297:2;6288:7;6284:16;6277:77;6397:6;6391:3;6382:7;6378:17;6371:33;6563:3;6554:7;6550:17;6645:206;6665:5;6655:8;6652:19;6645:206;;;6714:16;;6697:34;;6778:2;6815:18;;;;6764:17;6645:206;;;7417:3;7346:7;7292;7285:5;7281:19;7208:7;7142:1;7067:10;7004:3;6978:512;7517:7;7510:15;7507:2;;;7564:16;7555:7;7548:33;7507:2;4724:2889;;;;;2561:5068;;;;;;:::o;10259:886:27:-;10380:14;10443:5;10451:2;10443:10;10431:1;:8;:22;;10410:135;;;;;;;;;;;;;;;;-1:-1:-1;11047:13:27;10792:2;11047:13;11041:20;11063:42;11037:69;;10259:886::o;344:151:30:-;430:7;453:9;469:1;465;:5;;;;;;;;;344:151;-1:-1:-1;;;;344:151:30:o;4554:1721:21:-;778:457;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;778:457:21;;;;;;;;768:468;;4640:14;;;;;;;;778:457;;;;;768:468;;;;778:457;768:468;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;365:33;;768:468:21;;;;;;;;;;;4764:20;;;;4754:31;;768:468;;-1:-1:-1;4764:20:21;-1:-1:-1;768:468:21;;-1:-1:-1;768:468:21;;4754:31;;;-1:-1:-1;4754:31:21;768:468;4754:31;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;365:33;;4754:31:21;;;;;;;;;;;4834:20;;;;4824:31;;4754;;-1:-1:-1;4834:20:21;-1:-1:-1;4754:31:21;;-1:-1:-1;4754:31:21;;4824;;;-1:-1:-1;4824:31:21;4754;4824;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;;;;365:33;;4824:31:21;;;;;;;;;;5586:15;;;5580:22;;5645:3;5634:15;;5628:22;;5693:3;5682:15;;;5676:22;;5812:35;;;5860:43;;;5916;;;6008:3;5982:30;;6120;;6163;;;-1:-1:-1;;;6206:30:21;;;-1:-1:-1;5982:30:21;;4554:1721;-1:-1:-1;4554:1721:21:o;931:616:2:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;-1:-1:-1;931:616:2;;;;;;;;;;;;;;;;;:::o;5:118:-1:-;;72:46;110:6;97:20;72:46;;146:693;;261:4;249:17;;245:27;-1:-1;235:2;;286:1;283;276:12;235:2;323:6;310:20;345:85;360:69;422:6;360:69;;;345:85;;;458:21;;;502:4;490:17;;;;336:94;;-1:-1;515:14;;490:17;610:1;595:238;620:6;617:1;614:13;595:238;;;703:3;690:17;682:6;678:30;727:42;765:3;753:10;727:42;;;715:55;;-1:-1;793:4;784:14;;;;812;;;;;642:1;635:9;595:238;;;599:14;228:611;;;;;;;;879:735;;1008:4;996:17;;992:27;-1:-1;982:2;;1033:1;1030;1023:12;982:2;1070:6;1057:20;1092:99;1107:83;1183:6;1107:83;;1092:99;1219:21;;;1263:4;1251:17;;;;1083:108;;-1:-1;1276:14;;1251:17;1371:1;1356:252;1381:6;1378:1;1375:13;1356:252;;;1464:3;1451:17;1443:6;1439:30;1488:56;1540:3;1528:10;1488:56;;;1476:69;;-1:-1;1568:4;1559:14;;;;1587;;;;;1403:1;1396:9;1356:252;;1640:707;;1750:4;1738:17;;1734:27;-1:-1;1724:2;;1775:1;1772;1765:12;1724:2;1812:6;1799:20;1834:80;1849:64;1906:6;1849:64;;1834:80;1825:89;;1931:5;1956:6;1949:5;1942:21;1986:4;1978:6;1974:17;1964:27;;2008:4;2003:3;1999:14;1992:21;;2061:6;2108:3;2100:4;2092:6;2088:17;2083:3;2079:27;2076:36;2073:2;;;2125:1;2122;2115:12;2073:2;2150:1;2135:206;2160:6;2157:1;2154:13;2135:206;;;2218:3;2240:37;2273:3;2261:10;2240:37;;;2228:50;;-1:-1;2301:4;2292:14;;;;2320;;;;;2182:1;2175:9;2135:206;;2355:112;;2419:43;2454:6;2441:20;2419:43;;2474:116;;2549:36;2577:6;2571:13;2549:36;;2597:118;;2664:46;2702:6;2689:20;2664:46;;2722:116;;2788:45;2825:6;2812:20;2788:45;;2845:120;;2922:38;2952:6;2946:13;2922:38;;2986:335;;;3093:4;3081:17;;3077:27;-1:-1;3067:2;;3118:1;3115;3108:12;3067:2;-1:-1;3138:20;;3178:18;3167:30;;3164:2;;;3210:1;3207;3200:12;3164:2;3244:4;3236:6;3232:17;3220:29;;3294:3;3287;3279:6;3275:16;3265:8;3261:31;3258:40;3255:2;;;3311:1;3308;3301:12;3255:2;3060:261;;;;;;3330:432;;3420:4;3408:17;;3404:27;-1:-1;3394:2;;3445:1;3442;3435:12;3394:2;3482:6;3469:20;3504:60;3519:44;3556:6;3519:44;;3504:60;3495:69;;3584:6;3577:5;3570:21;3620:4;3612:6;3608:17;3653:4;3646:5;3642:16;3688:3;3679:6;3674:3;3670:16;3667:25;3664:2;;;3705:1;3702;3695:12;3664:2;3715:41;3749:6;3744:3;3739;3715:41;;;3387:375;;;;;;;;4247:2205;;4355:5;4343:9;4338:3;4334:19;4330:31;4327:2;;;4374:1;4371;4364:12;4327:2;4392:21;4407:5;4392:21;;;4383:30;-1:-1;4471:1;4502:49;4547:3;4527:9;4502:49;;;4478:74;;-1:-1;4621:2;4654:49;4699:3;4675:22;;;4654:49;;;4647:4;4640:5;4636:16;4629:75;4573:142;4780:2;4813:49;4858:3;4849:6;4838:9;4834:22;4813:49;;;4806:4;4799:5;4795:16;4788:75;4725:149;4933:2;4966:49;5011:3;5002:6;4991:9;4987:22;4966:49;;;4959:4;4952:5;4948:16;4941:75;4884:143;5089:3;5123:49;5168:3;5159:6;5148:9;5144:22;5123:49;;;5116:4;5109:5;5105:16;5098:75;5037:147;5246:3;5280:49;5325:3;5316:6;5305:9;5301:22;5280:49;;;5273:4;5266:5;5262:16;5255:75;5194:147;5395:3;5429:49;5474:3;5465:6;5454:9;5450:22;5429:49;;;5422:4;5415:5;5411:16;5404:75;5351:139;5544:3;5578:49;5623:3;5614:6;5603:9;5599:22;5578:49;;;5571:4;5564:5;5560:16;5553:75;5500:139;5706:3;5741:49;5786:3;5777:6;5766:9;5762:22;5741:49;;;5733:5;5726;5722:17;5715:76;5649:153;5852:3;5887:49;5932:3;5923:6;5912:9;5908:22;5887:49;;;5879:5;5872;5868:17;5861:76;5812:136;6036:3;6025:9;6021:19;6008:33;6061:18;6053:6;6050:30;6047:2;;;6093:1;6090;6083:12;6047:2;6129:54;6179:3;6170:6;6159:9;6155:22;6129:54;;;6121:5;6114;6110:17;6103:81;5958:237;6283:3;6272:9;6268:19;6255:33;6308:18;6300:6;6297:30;6294:2;;;6340:1;6337;6330:12;6294:2;6376:54;6426:3;6417:6;6406:9;6402:22;6376:54;;;6368:5;6361;6357:17;6350:81;6205:237;4321:2131;;;;;8828:241;;8932:2;8920:9;8911:7;8907:23;8903:32;8900:2;;;8948:1;8945;8938:12;8900:2;8983:1;9000:53;9045:7;9025:9;9000:53;;9076:366;;;9197:2;9185:9;9176:7;9172:23;9168:32;9165:2;;;9213:1;9210;9203:12;9165:2;9248:1;9265:53;9310:7;9290:9;9265:53;;;9255:63;;9227:97;9355:2;9373:53;9418:7;9409:6;9398:9;9394:22;9373:53;;;9363:63;;9334:98;9159:283;;;;;;9449:360;;;9567:2;9555:9;9546:7;9542:23;9538:32;9535:2;;;9583:1;9580;9573:12;9535:2;9618:1;9635:53;9680:7;9660:9;9635:53;;;9625:63;;9597:97;9725:2;9743:50;9785:7;9776:6;9765:9;9761:22;9743:50;;9816:415;;9964:2;9952:9;9943:7;9939:23;9935:32;9932:2;;;9980:1;9977;9970:12;9932:2;10015:31;;10066:18;10055:30;;10052:2;;;10098:1;10095;10088:12;10052:2;10118:97;10207:7;10198:6;10187:9;10183:22;10118:97;;10238:947;;;;10475:2;10463:9;10454:7;10450:23;10446:32;10443:2;;;10491:1;10488;10481:12;10443:2;10526:31;;10577:18;10566:30;;10563:2;;;10609:1;10606;10599:12;10563:2;10629:97;10718:7;10709:6;10698:9;10694:22;10629:97;;;10619:107;;10505:227;10791:2;10780:9;10776:18;10763:32;10815:18;10807:6;10804:30;10801:2;;;10847:1;10844;10837:12;10801:2;10867:78;10937:7;10928:6;10917:9;10913:22;10867:78;;;10857:88;;10742:209;11010:2;10999:9;10995:18;10982:32;11034:18;11026:6;11023:30;11020:2;;;11066:1;11063;11056:12;11020:2;11086:83;11161:7;11152:6;11141:9;11137:22;11086:83;;;11076:93;;10961:214;10437:748;;;;;;11192:811;;;;11404:2;11392:9;11383:7;11379:23;11375:32;11372:2;;;11420:1;11417;11410:12;11372:2;11455:31;;11506:18;11495:30;;11492:2;;;11538:1;11535;11528:12;11492:2;11558:97;11647:7;11638:6;11627:9;11623:22;11558:97;;;11548:107;;11434:227;11692:2;11710:53;11755:7;11746:6;11735:9;11731:22;11710:53;;12010:257;;12122:2;12110:9;12101:7;12097:23;12093:32;12090:2;;;12138:1;12135;12128:12;12090:2;12173:1;12190:61;12243:7;12223:9;12190:61;;12274:241;;12378:2;12366:9;12357:7;12353:23;12349:32;12346:2;;;12394:1;12391;12384:12;12346:2;12429:1;12446:53;12491:7;12471:9;12446:53;;12522:366;;;12643:2;12631:9;12622:7;12618:23;12614:32;12611:2;;;12659:1;12656;12649:12;12611:2;12694:1;12711:53;12756:7;12736:9;12711:53;;12895:615;;;;;13052:2;13040:9;13031:7;13027:23;13023:32;13020:2;;;13068:1;13065;13058:12;13020:2;13103:1;13120:53;13165:7;13145:9;13120:53;;;13110:63;;13082:97;13210:2;13228:53;13273:7;13264:6;13253:9;13249:22;13228:53;;;13218:63;;13189:98;13346:2;13335:9;13331:18;13318:32;13370:18;13362:6;13359:30;13356:2;;;13402:1;13399;13392:12;13356:2;13430:64;13486:7;13477:6;13466:9;13462:22;13430:64;;;13014:496;;;;-1:-1;13412:82;-1:-1;;;;13014:496;13517:595;;;;13664:2;13652:9;13643:7;13639:23;13635:32;13632:2;;;13680:1;13677;13670:12;13632:2;13715:1;13732:53;13777:7;13757:9;13732:53;;;13722:63;;13694:97;13822:2;13840:53;13885:7;13876:6;13865:9;13861:22;13840:53;;;13830:63;;13801:98;13958:2;13947:9;13943:18;13930:32;13982:18;13974:6;13971:30;13968:2;;;14014:1;14011;14004:12;13968:2;14034:62;14088:7;14079:6;14068:9;14064:22;14034:62;;14119:239;;14222:2;14210:9;14201:7;14197:23;14193:32;14190:2;;;14238:1;14235;14228:12;14190:2;14273:1;14290:52;14334:7;14314:9;14290:52;;14365:261;;14479:2;14467:9;14458:7;14454:23;14450:32;14447:2;;;14495:1;14492;14485:12;14447:2;14530:1;14547:63;14602:7;14582:9;14547:63;;14633:373;;14760:2;14748:9;14739:7;14735:23;14731:32;14728:2;;;14776:1;14773;14766:12;14728:2;14811:31;;14862:18;14851:30;;14848:2;;;14894:1;14891;14884:12;14848:2;14914:76;14982:7;14973:6;14962:9;14958:22;14914:76;;15013:1089;;;;;15232:3;15220:9;15211:7;15207:23;15203:33;15200:2;;;15249:1;15246;15239:12;15200:2;15284:31;;15335:18;15324:30;;15321:2;;;15367:1;15364;15357:12;15321:2;15387:76;15455:7;15446:6;15435:9;15431:22;15387:76;;;15377:86;;15263:206;15528:2;15517:9;15513:18;15500:32;15552:18;15544:6;15541:30;15538:2;;;15584:1;15581;15574:12;15538:2;15604:76;15672:7;15663:6;15652:9;15648:22;15604:76;;;15594:86;;15479:207;15745:2;15734:9;15730:18;15717:32;15769:18;15761:6;15758:30;15755:2;;;15801:1;15798;15791:12;15755:2;15821:62;15875:7;15866:6;15855:9;15851:22;15821:62;;;15811:72;;15696:193;15948:2;15937:9;15933:18;15920:32;15972:18;15964:6;15961:30;15958:2;;;16004:1;16001;15994:12;15958:2;16024:62;16078:7;16069:6;16058:9;16054:22;16024:62;;;16014:72;;15899:193;15194:908;;;;;;;;16109:727;;;;16279:2;16267:9;16258:7;16254:23;16250:32;16247:2;;;16295:1;16292;16285:12;16247:2;16330:31;;16381:18;16370:30;;16367:2;;;16413:1;16410;16403:12;16367:2;16433:76;16501:7;16492:6;16481:9;16477:22;16433:76;;;16423:86;;16309:206;16546:2;16564:53;16609:7;16600:6;16589:9;16585:22;16564:53;;17091:865;;;;;;;17284:3;17272:9;17263:7;17259:23;17255:33;17252:2;;;17301:1;17298;17291:12;17252:2;17336:1;17353:53;17398:7;17378:9;17353:53;;;17343:63;;17315:97;17443:2;17461:53;17506:7;17497:6;17486:9;17482:22;17461:53;;;17451:63;;17422:98;17579:2;17568:9;17564:18;17551:32;17603:18;17595:6;17592:30;17589:2;;;17635:1;17632;17625:12;17589:2;17663:64;17719:7;17710:6;17699:9;17695:22;17663:64;;;17645:82;;;;17530:203;17792:2;17781:9;17777:18;17764:32;17816:18;17808:6;17805:30;17802:2;;;17848:1;17845;17838:12;17802:2;17876:64;17932:7;17923:6;17912:9;17908:22;17876:64;;;17858:82;;;;17743:203;17246:710;;;;;;;;;17963:110;18036:31;18061:5;18036:31;;;18031:3;18024:44;18018:55;;;18147:755;;18328:77;18399:5;18328:77;;;18423:6;18418:3;18411:19;18447:4;18442:3;18438:14;18431:21;;18492:79;18565:5;18492:79;;;18592:1;18577:303;18602:6;18599:1;18596:13;18577:303;;;18642:103;18741:3;18732:6;18726:13;18642:103;;;18762:83;18838:6;18762:83;;;18868:4;18859:14;;;;;18752:93;-1:-1;18624:1;18617:9;18577:303;;;-1:-1;18893:3;;18307:595;-1:-1;;;;18307:595;18910:101;18977:28;18999:5;18977:28;;19018:110;19091:31;19116:5;19091:31;;19135:107;19206:30;19230:5;19206:30;;19249:297;;19349:38;19381:5;19349:38;;;19404:6;19399:3;19392:19;19416:63;19472:6;19465:4;19460:3;19456:14;19449:4;19442:5;19438:16;19416:63;;;19511:29;19533:6;19511:29;;;19491:50;;;19504:4;19491:50;;19329:217;-1:-1;;;19329:217;19849:156;19942:57;19993:5;19942:57;;20312:296;20467:2;20455:15;;20504:66;20499:2;20490:12;;20483:88;20599:2;20590:12;;20448:160;20617:296;20772:2;20760:15;;20809:66;20804:2;20795:12;;20788:88;20904:2;20895:12;;20753:160;20922:296;21077:2;21065:15;;21114:66;21109:2;21100:12;;21093:88;21209:2;21200:12;;21058:160;21227:397;21382:2;21370:15;;21419:66;21414:2;21405:12;;21398:88;21520:66;21515:2;21506:12;;21499:88;21615:2;21606:12;;21363:261;21633:296;21788:2;21776:15;;21825:66;21820:2;21811:12;;21804:88;21920:2;21911:12;;21769:160;21938:296;22093:2;22081:15;;22130:66;22125:2;22116:12;;22109:88;22225:2;22216:12;;22074:160;22243:296;22398:2;22386:15;;22435:66;22430:2;22421:12;;22414:88;22530:2;22521:12;;22379:160;22548:296;22703:2;22691:15;;22740:66;22735:2;22726:12;;22719:88;22835:2;22826:12;;22684:160;22853:296;23008:2;22996:15;;23045:66;23040:2;23031:12;;23024:88;23140:2;23131:12;;22989:160;23158:296;23313:2;23301:15;;23350:66;23345:2;23336:12;;23329:88;23445:2;23436:12;;23294:160;23463:296;23618:2;23606:15;;23655:66;23650:2;23641:12;;23634:88;23750:2;23741:12;;23599:160;23768:296;23923:2;23911:15;;23960:66;23955:2;23946:12;;23939:88;24055:2;24046:12;;23904:160;24073:296;24228:2;24216:15;;24265:66;24260:2;24251:12;;24244:88;24360:2;24351:12;;24209:160;24378:296;24533:2;24521:15;;24570:66;24565:2;24556:12;;24549:88;24665:2;24656:12;;24514:160;24683:397;24838:2;24826:15;;24875:66;24870:2;24861:12;;24854:88;24976:66;24971:2;24962:12;;24955:88;25071:2;25062:12;;24819:261;25089:296;25244:2;25232:15;;25281:66;25276:2;25267:12;;25260:88;25376:2;25367:12;;25225:160;25394:296;25549:2;25537:15;;25586:66;25581:2;25572:12;;25565:88;25681:2;25672:12;;25530:160;25699:296;25854:2;25842:15;;25891:66;25886:2;25877:12;;25870:88;25986:2;25977:12;;25835:160;26004:296;26159:2;26147:15;;26196:66;26191:2;26182:12;;26175:88;26291:2;26282:12;;26140:160;26309:296;26464:2;26452:15;;26501:66;26496:2;26487:12;;26480:88;26596:2;26587:12;;26445:160;26614:296;26769:2;26757:15;;26806:66;26801:2;26792:12;;26785:88;26901:2;26892:12;;26750:160;26919:296;27074:2;27062:15;;27111:66;27106:2;27097:12;;27090:88;27206:2;27197:12;;27055:160;27224:397;27379:2;27367:15;;27416:66;27411:2;27402:12;;27395:88;27517:66;27512:2;27503:12;;27496:88;27612:2;27603:12;;27360:261;27630:296;27785:2;27773:15;;27822:66;27817:2;27808:12;;27801:88;27917:2;27908:12;;27766:160;27935:296;28090:2;28078:15;;28127:66;28122:2;28113:12;;28106:88;28222:2;28213:12;;28071:160;28240:296;28395:2;28383:15;;28432:66;28427:2;28418:12;;28411:88;28527:2;28518:12;;28376:160;28545:296;28700:2;28688:15;;28737:66;28732:2;28723:12;;28716:88;28832:2;28823:12;;28681:160;28850:296;29005:2;28993:15;;29042:66;29037:2;29028:12;;29021:88;29137:2;29128:12;;28986:160;29231:888;29459:22;;29372:4;29363:14;;;29493:61;29367:3;29459:22;29493:61;;;29392:174;29660:4;29653:5;29649:16;29643:23;29678:62;29734:4;29729:3;29725:14;29712:11;29678:62;;;29576:176;29836:4;29829:5;29825:16;29819:23;29854:62;29910:4;29905:3;29901:14;29888:11;29854:62;;;29762:166;30012:4;30005:5;30001:16;29995:23;30030:62;30086:4;30081:3;30077:14;30064:11;30030:62;;31185:815;31410:22;;31340:5;31331:15;;;31444:115;31335:3;31410:22;31444:115;;;31361:210;31648:4;31641:5;31637:16;31631:23;31666:116;31776:4;31771:3;31767:14;31754:11;31666:116;;;31581:213;31892:4;31885:5;31881:16;31875:23;31910:63;31966:5;31961:3;31957:15;31944:11;31910:63;;32068:695;32281:22;;32205:4;32196:14;;;32315:57;32200:3;32281:22;32315:57;;;32225:159;32465:4;32458:5;32454:16;32448:23;32483:62;32539:4;32534:3;32530:14;32517:11;32483:62;;;32394:163;32656:4;32649:5;32645:16;32639:23;32674:62;32730:4;32725:3;32721:14;32708:11;32674:62;;33646:104;33715:29;33738:5;33715:29;;33757:193;33865:2;33850:18;;33879:61;33854:9;33913:6;33879:61;;33957:1057;34289:3;34274:19;;34304:61;34278:9;34338:6;34304:61;;;34376:62;34434:2;34423:9;34419:18;34410:6;34376:62;;;34449;34507:2;34496:9;34492:18;34483:6;34449:62;;;34522;34580:2;34569:9;34565:18;34556:6;34522:62;;;34595:63;34653:3;34642:9;34638:19;34629:6;34595:63;;;34669;34727:3;34716:9;34712:19;34703:6;34669:63;;;34781:9;34775:4;34771:20;34765:3;34754:9;34750:19;34743:49;34806:62;34863:4;34854:6;34806:62;;;34798:70;;34917:9;34911:4;34907:20;34901:3;34890:9;34886:19;34879:49;34942:62;34999:4;34990:6;34942:62;;;34934:70;34260:754;-1:-1;;;;;;;;;;34260:754;35021:547;35213:2;35198:18;;35227:61;35202:9;35261:6;35227:61;;;35336:9;35330:4;35326:20;35321:2;35310:9;35306:18;35299:48;35361:62;35418:4;35409:6;35361:62;;;35353:70;;35471:9;35465:4;35461:20;35456:2;35445:9;35441:18;35434:48;35496:62;35553:4;35544:6;35496:62;;;35488:70;35184:384;-1:-1;;;;;35184:384;35575:433;35779:2;35793:47;;;35764:18;;35854:144;35764:18;35984:6;35854:144;;36015:181;36117:2;36102:18;;36131:55;36106:9;36159:6;36131:55;;36203:193;36311:2;36296:18;;36325:61;36300:9;36359:6;36325:61;;36403:479;36585:2;36570:18;;36599:61;36574:9;36633:6;36599:61;;;36671:62;36729:2;36718:9;36714:18;36705:6;36671:62;;;36781:9;36775:4;36771:20;36766:2;36755:9;36751:18;36744:48;36806:66;36867:4;36858:6;36806:66;;36889:378;37043:2;37028:18;;37057:61;37032:9;37091:6;37057:61;;;37166:9;37160:4;37156:20;37151:2;37140:9;37136:18;37129:48;37191:66;37252:4;37243:6;37191:66;;37274:489;37462:3;37447:19;;37477:61;37451:9;37511:6;37477:61;;;37549:58;37603:2;37592:9;37588:18;37579:6;37549:58;;;37618:62;37676:2;37665:9;37661:18;37652:6;37618:62;;;37691;37749:2;37738:9;37734:18;37725:6;37691:62;;37770:290;37904:2;37889:18;;37918:59;37893:9;37950:6;37918:59;;;37988:62;38046:2;38035:9;38031:18;38022:6;37988:62;;38067:269;38189:2;38203:47;;;38174:18;;38264:62;38174:18;38312:6;38264:62;;38343:233;38471:2;38456:18;;38485:81;38460:9;38539:6;38485:81;;38863:387;39044:2;39058:47;;;39029:18;;39119:121;39029:18;39119:121;;39257:387;39438:2;39452:47;;;39423:18;;39513:121;39423:18;39513:121;;39651:387;39832:2;39846:47;;;39817:18;;39907:121;39817:18;39907:121;;40045:387;40226:2;40240:47;;;40211:18;;40301:121;40211:18;40301:121;;40439:387;40620:2;40634:47;;;40605:18;;40695:121;40605:18;40695:121;;40833:387;41014:2;41028:47;;;40999:18;;41089:121;40999:18;41089:121;;41227:387;41408:2;41422:47;;;41393:18;;41483:121;41393:18;41483:121;;41621:387;41802:2;41816:47;;;41787:18;;41877:121;41787:18;41877:121;;42015:387;42196:2;42210:47;;;42181:18;;42271:121;42181:18;42271:121;;42409:387;42590:2;42604:47;;;42575:18;;42665:121;42575:18;42665:121;;42803:387;42984:2;42998:47;;;42969:18;;43059:121;42969:18;43059:121;;43197:387;43378:2;43392:47;;;43363:18;;43453:121;43363:18;43453:121;;43591:387;43772:2;43786:47;;;43757:18;;43847:121;43757:18;43847:121;;43985:387;44166:2;44180:47;;;44151:18;;44241:121;44151:18;44241:121;;44379:387;44560:2;44574:47;;;44545:18;;44635:121;44545:18;44635:121;;44773:387;44954:2;44968:47;;;44939:18;;45029:121;44939:18;45029:121;;45167:387;45348:2;45362:47;;;45333:18;;45423:121;45333:18;45423:121;;45561:387;45742:2;45756:47;;;45727:18;;45817:121;45727:18;45817:121;;45955:387;46136:2;46150:47;;;46121:18;;46211:121;46121:18;46211:121;;46349:387;46530:2;46544:47;;;46515:18;;46605:121;46515:18;46605:121;;46743:387;46924:2;46938:47;;;46909:18;;46999:121;46909:18;46999:121;;47137:387;47318:2;47332:47;;;47303:18;;47393:121;47303:18;47393:121;;47531:387;47712:2;47726:47;;;47697:18;;47787:121;47697:18;47787:121;;47925:387;48106:2;48120:47;;;48091:18;;48181:121;48091:18;48181:121;;48319:387;48500:2;48514:47;;;48485:18;;48575:121;48485:18;48575:121;;48713:387;48894:2;48908:47;;;48879:18;;48969:121;48879:18;48969:121;;49107:387;49288:2;49302:47;;;49273:18;;49363:121;49273:18;49363:121;;49501:387;49682:2;49696:47;;;49667:18;;49757:121;49667:18;49757:121;;49895:310;50061:3;50046:19;;50076:119;50050:9;50168:6;50076:119;;50212:338;50392:3;50377:19;;50407:133;50381:9;50513:6;50407:133;;50557:301;50719:2;50704:18;;50733:115;50708:9;50821:6;50733:115;;51065:256;51127:2;51121:9;51153:17;;;51228:18;51213:34;;51249:22;;;51210:62;51207:2;;;51285:1;51282;51275:12;51207:2;51301;51294:22;51105:216;;-1:-1;51105:216;51328:263;;51492:18;51484:6;51481:30;51478:2;;;51524:1;51521;51514:12;51478:2;-1:-1;51553:4;51541:17;;;51571:15;;51415:176;52147:254;;52286:18;52278:6;52275:30;52272:2;;;52318:1;52315;52308:12;52272:2;-1:-1;52391:4;52362;52339:17;;;;52358:9;52335:33;52381:15;;52209:192;52675:144;52807:4;52795:17;;52776:43;52828:130;52941:12;;52925:33;53406:128;53486:42;53475:54;;53458:76;53541:92;53614:13;53607:21;;53590:43;53640:79;53709:5;53692:27;53726:151;53805:66;53794:78;;53777:100;53970:88;54048:4;54037:16;;54020:38;54629:135;;54728:31;54753:5;54728:31;;54772:145;54853:6;54848:3;54843;54830:30;-1:-1;54909:1;54891:16;;54884:27;54823:94;54926:268;54991:1;54998:101;55012:6;55009:1;55006:13;54998:101;;;55079:11;;;55073:18;55060:11;;;55053:39;55034:2;55027:10;54998:101;;;55114:6;55111:1;55108:13;55105:2;;;-1:-1;;55179:1;55161:16;;55154:27;54975:219;55202:97;55290:2;55270:14;55286:7;55266:28;;55250:49"
}
}
},
@@ -2011,39 +2094,39 @@
}
},
"sourceCodes": {
- "2.0.0/protocol/AssetProxy/interfaces/IAssetProxy.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"./IAuthorizable.sol\";\n\ncontract IAssetProxy is\n IAuthorizable\n{\n\n /// @dev Transfers assets. Either succeeds or throws.\n /// @param assetData Byte array encoded for the respective asset proxy.\n /// @param from Address to transfer asset from.\n /// @param to Address to transfer asset to.\n /// @param amount Amount of asset to transfer.\n function transferFrom(\n bytes assetData,\n address from,\n address to,\n uint256 amount\n )\n external;\n \n /// @dev Gets the proxy id associated with the proxy address.\n /// @return Proxy id.\n function getProxyId()\n external\n pure\n returns (bytes4);\n}\n",
- "2.0.0/protocol/AssetProxy/interfaces/IAuthorizable.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../../../utils/Ownable/IOwnable.sol\";\n\ncontract IAuthorizable is\n IOwnable\n{\n\n /// @dev Gets all authorized addresses.\n /// @return Array of authorized addresses.\n function getAuthorizedAddresses()\n external\n view\n returns (address[]);\n\n /// @dev Authorizes an address.\n /// @param target Address to authorize.\n function addAuthorizedAddress(address target)\n external;\n\n /// @dev Removes authorizion of an address.\n /// @param target Address to remove authorization from.\n function removeAuthorizedAddress(address target)\n external;\n\n /// @dev Removes authorizion of an address.\n /// @param target Address to remove authorization from.\n /// @param index Index of target in authorities array.\n function removeAuthorizedAddressAtIndex(\n address target,\n uint256 index\n )\n external;\n}\n",
- "2.0.0/protocol/Exchange/Exchange.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"./libs/LibConstants.sol\";\nimport \"./MixinExchangeCore.sol\";\nimport \"./MixinSignatureValidator.sol\";\nimport \"./MixinWrapperFunctions.sol\";\nimport \"./MixinAssetProxyDispatcher.sol\";\nimport \"./MixinTransactions.sol\";\nimport \"./MixinMatchOrders.sol\";\n\ncontract Exchange is\n MixinExchangeCore,\n MixinMatchOrders,\n MixinSignatureValidator,\n MixinTransactions,\n MixinAssetProxyDispatcher,\n MixinWrapperFunctions\n{\n\n string constant public VERSION = \"2.0.1-alpha\";\n\n // Mixins are instantiated in the order they are inherited\n constructor (bytes memory _zrxAssetData)\n public\n LibConstants(_zrxAssetData) // @TODO: Remove when we deploy.\n MixinExchangeCore()\n MixinMatchOrders()\n MixinSignatureValidator()\n MixinTransactions()\n MixinAssetProxyDispatcher()\n MixinWrapperFunctions()\n {}\n}\n",
- "2.0.0/protocol/Exchange/MixinAssetProxyDispatcher.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.24;\n\nimport \"../../utils/Ownable/Ownable.sol\";\nimport \"../../utils/LibBytes/LibBytes.sol\";\nimport \"./mixins/MAssetProxyDispatcher.sol\";\nimport \"../AssetProxy/interfaces/IAssetProxy.sol\";\n\ncontract MixinAssetProxyDispatcher is\n Ownable,\n MAssetProxyDispatcher\n{\n using LibBytes for bytes;\n \n // Mapping from Asset Proxy Id's to their respective Asset Proxy\n mapping (bytes4 => IAssetProxy) public assetProxies;\n\n /// @dev Registers an asset proxy to its asset proxy id.\n /// Once an asset proxy is registered, it cannot be unregistered.\n /// @param assetProxy Address of new asset proxy to register.\n function registerAssetProxy(address assetProxy)\n external\n onlyOwner\n {\n IAssetProxy assetProxyContract = IAssetProxy(assetProxy);\n\n // Ensure that no asset proxy exists with current id.\n bytes4 assetProxyId = assetProxyContract.getProxyId();\n address currentAssetProxy = assetProxies[assetProxyId];\n require(\n currentAssetProxy == address(0),\n \"ASSET_PROXY_ALREADY_EXISTS\"\n );\n\n // Add asset proxy and log registration.\n assetProxies[assetProxyId] = assetProxyContract;\n emit AssetProxyRegistered(\n assetProxyId,\n assetProxy\n );\n }\n\n /// @dev Gets an asset proxy.\n /// @param assetProxyId Id of the asset proxy.\n /// @return The asset proxy registered to assetProxyId. Returns 0x0 if no proxy is registered.\n function getAssetProxy(bytes4 assetProxyId)\n external\n view\n returns (address)\n {\n return assetProxies[assetProxyId];\n }\n\n /// @dev Forwards arguments to assetProxy and calls `transferFrom`. Either succeeds or throws.\n /// @param assetData Byte array encoded for the asset.\n /// @param from Address to transfer token from.\n /// @param to Address to transfer token to.\n /// @param amount Amount of token to transfer.\n function dispatchTransferFrom(\n bytes memory assetData,\n address from,\n address to,\n uint256 amount\n )\n internal\n {\n // Do nothing if no amount should be transferred.\n if (amount > 0) {\n // Ensure assetData length is valid\n require(\n assetData.length > 3,\n \"LENGTH_GREATER_THAN_3_REQUIRED\"\n );\n \n // Lookup assetProxy\n bytes4 assetProxyId;\n assembly {\n assetProxyId := and(mload(\n add(assetData, 32)),\n 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000\n )\n }\n address assetProxy = assetProxies[assetProxyId];\n\n // Ensure that assetProxy exists\n require(\n assetProxy != address(0),\n \"ASSET_PROXY_DOES_NOT_EXIST\"\n );\n \n // We construct calldata for the `assetProxy.transferFrom` ABI.\n // The layout of this calldata is in the table below.\n // \n // | Area | Offset | Length | Contents |\n // | -------- |--------|---------|-------------------------------------------- |\n // | Header | 0 | 4 | function selector |\n // | Params | | 4 * 32 | function parameters: |\n // | | 4 | | 1. offset to assetData (*) |\n // | | 36 | | 2. from |\n // | | 68 | | 3. to |\n // | | 100 | | 4. amount |\n // | Data | | | assetData: |\n // | | 132 | 32 | assetData Length |\n // | | 164 | ** | assetData Contents |\n\n assembly {\n /////// Setup State ///////\n // `cdStart` is the start of the calldata for `assetProxy.transferFrom` (equal to free memory ptr).\n let cdStart := mload(64)\n // `dataAreaLength` is the total number of words needed to store `assetData`\n // As-per the ABI spec, this value is padded up to the nearest multiple of 32,\n // and includes 32-bytes for length.\n let dataAreaLength := and(add(mload(assetData), 63), 0xFFFFFFFFFFFE0)\n // `cdEnd` is the end of the calldata for `assetProxy.transferFrom`.\n let cdEnd := add(cdStart, add(132, dataAreaLength))\n\n \n /////// Setup Header Area ///////\n // This area holds the 4-byte `transferFromSelector`.\n // bytes4(keccak256(\"transferFrom(bytes,address,address,uint256)\")) = 0xa85e59e4\n mstore(cdStart, 0xa85e59e400000000000000000000000000000000000000000000000000000000)\n \n /////// Setup Params Area ///////\n // Each parameter is padded to 32-bytes. The entire Params Area is 128 bytes.\n // Notes:\n // 1. The offset to `assetData` is the length of the Params Area (128 bytes).\n // 2. A 20-byte mask is applied to addresses to zero-out the unused bytes.\n mstore(add(cdStart, 4), 128)\n mstore(add(cdStart, 36), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\n mstore(add(cdStart, 68), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\n mstore(add(cdStart, 100), amount)\n \n /////// Setup Data Area ///////\n // This area holds `assetData`.\n let dataArea := add(cdStart, 132)\n for {} lt(dataArea, cdEnd) {} {\n mstore(dataArea, mload(assetData))\n dataArea := add(dataArea, 32)\n assetData := add(assetData, 32)\n }\n\n /////// Call `assetProxy.transferFrom` using the constructed calldata ///////\n let success := call(\n gas, // forward all gas\n assetProxy, // call address of asset proxy\n 0, // don't send any ETH\n cdStart, // pointer to start of input\n sub(cdEnd, cdStart), // length of input \n cdStart, // write output over input\n 512 // reserve 512 bytes for output\n )\n if iszero(success) {\n revert(cdStart, returndatasize())\n }\n }\n }\n }\n}\n",
- "2.0.0/protocol/Exchange/MixinExchangeCore.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"./libs/LibConstants.sol\";\nimport \"./libs/LibFillResults.sol\";\nimport \"./libs/LibOrder.sol\";\nimport \"./libs/LibMath.sol\";\nimport \"./mixins/MExchangeCore.sol\";\nimport \"./mixins/MSignatureValidator.sol\";\nimport \"./mixins/MTransactions.sol\";\nimport \"./mixins/MAssetProxyDispatcher.sol\";\n\ncontract MixinExchangeCore is\n LibConstants,\n LibMath,\n LibOrder,\n LibFillResults,\n MAssetProxyDispatcher,\n MExchangeCore,\n MSignatureValidator,\n MTransactions\n{\n // Mapping of orderHash => amount of takerAsset already bought by maker\n mapping (bytes32 => uint256) public filled;\n\n // Mapping of orderHash => cancelled\n mapping (bytes32 => bool) public cancelled;\n\n // Mapping of makerAddress => senderAddress => lowest salt an order can have in order to be fillable\n // Orders with specified senderAddress and with a salt less than their epoch to are considered cancelled\n mapping (address => mapping (address => uint256)) public orderEpoch;\n\n ////// Core exchange functions //////\n\n /// @dev Cancels all orders created by makerAddress with a salt less than or equal to the targetOrderEpoch\n /// and senderAddress equal to msg.sender (or null address if msg.sender == makerAddress).\n /// @param targetOrderEpoch Orders created with a salt less or equal to this value will be cancelled.\n function cancelOrdersUpTo(uint256 targetOrderEpoch)\n external\n {\n address makerAddress = getCurrentContextAddress();\n // If this function is called via `executeTransaction`, we only update the orderEpoch for the makerAddress/msg.sender combination.\n // This allows external filter contracts to add rules to how orders are cancelled via this function.\n address senderAddress = makerAddress == msg.sender ? address(0) : msg.sender;\n\n // orderEpoch is initialized to 0, so to cancelUpTo we need salt + 1\n uint256 newOrderEpoch = targetOrderEpoch + 1; \n uint256 oldOrderEpoch = orderEpoch[makerAddress][senderAddress];\n\n // Ensure orderEpoch is monotonically increasing\n require(\n newOrderEpoch > oldOrderEpoch, \n \"INVALID_NEW_ORDER_EPOCH\"\n );\n\n // Update orderEpoch\n orderEpoch[makerAddress][senderAddress] = newOrderEpoch;\n emit CancelUpTo(makerAddress, senderAddress, newOrderEpoch);\n }\n\n /// @dev Fills the input order.\n /// @param order Order struct containing order specifications.\n /// @param takerAssetFillAmount Desired amount of takerAsset to sell.\n /// @param signature Proof that order has been created by maker.\n /// @return Amounts filled and fees paid by maker and taker.\n function fillOrder(\n Order memory order,\n uint256 takerAssetFillAmount,\n bytes memory signature\n )\n public\n returns (FillResults memory fillResults)\n {\n // Fetch order info\n OrderInfo memory orderInfo = getOrderInfo(order);\n\n // Fetch taker address\n address takerAddress = getCurrentContextAddress();\n\n // Get amount of takerAsset to fill\n uint256 remainingTakerAssetAmount = safeSub(order.takerAssetAmount, orderInfo.orderTakerAssetFilledAmount);\n uint256 takerAssetFilledAmount = min256(takerAssetFillAmount, remainingTakerAssetAmount);\n\n // Validate context\n assertValidFill(\n order,\n orderInfo,\n takerAddress,\n takerAssetFillAmount,\n takerAssetFilledAmount,\n signature\n );\n\n // Compute proportional fill amounts\n fillResults = calculateFillResults(order, takerAssetFilledAmount);\n\n // Update exchange internal state\n updateFilledState(\n order,\n takerAddress,\n orderInfo.orderHash,\n orderInfo.orderTakerAssetFilledAmount,\n fillResults\n );\n \n // Settle order\n settleOrder(order, takerAddress, fillResults);\n\n return fillResults;\n }\n\n /// @dev After calling, the order can not be filled anymore.\n /// Throws if order is invalid or sender does not have permission to cancel.\n /// @param order Order to cancel. Order must be OrderStatus.FILLABLE.\n function cancelOrder(Order memory order)\n public\n {\n // Fetch current order status\n OrderInfo memory orderInfo = getOrderInfo(order);\n\n // Validate context\n assertValidCancel(order, orderInfo);\n\n // Perform cancel\n updateCancelledState(order, orderInfo.orderHash);\n }\n\n /// @dev Gets information about an order: status, hash, and amount filled.\n /// @param order Order to gather information on.\n /// @return OrderInfo Information about the order and its state.\n /// See LibOrder.OrderInfo for a complete description.\n function getOrderInfo(Order memory order)\n public\n view\n returns (OrderInfo memory orderInfo)\n {\n // Compute the order hash\n orderInfo.orderHash = getOrderHash(order);\n\n // If order.makerAssetAmount is zero, we also reject the order.\n // While the Exchange contract handles them correctly, they create\n // edge cases in the supporting infrastructure because they have\n // an 'infinite' price when computed by a simple division.\n if (order.makerAssetAmount == 0) {\n orderInfo.orderStatus = uint8(OrderStatus.INVALID_MAKER_ASSET_AMOUNT);\n return orderInfo;\n }\n\n // If order.takerAssetAmount is zero, then the order will always\n // be considered filled because 0 == takerAssetAmount == orderTakerAssetFilledAmount\n // Instead of distinguishing between unfilled and filled zero taker\n // amount orders, we choose not to support them.\n if (order.takerAssetAmount == 0) {\n orderInfo.orderStatus = uint8(OrderStatus.INVALID_TAKER_ASSET_AMOUNT);\n return orderInfo;\n }\n\n // Validate order expiration\n if (block.timestamp >= order.expirationTimeSeconds) {\n orderInfo.orderStatus = uint8(OrderStatus.EXPIRED);\n return orderInfo;\n }\n\n // Check if order has been cancelled\n if (cancelled[orderInfo.orderHash]) {\n orderInfo.orderStatus = uint8(OrderStatus.CANCELLED);\n return orderInfo;\n }\n if (orderEpoch[order.makerAddress][order.senderAddress] > order.salt) {\n orderInfo.orderStatus = uint8(OrderStatus.CANCELLED);\n return orderInfo;\n }\n\n // Fetch filled amount and validate order availability\n orderInfo.orderTakerAssetFilledAmount = filled[orderInfo.orderHash];\n if (orderInfo.orderTakerAssetFilledAmount >= order.takerAssetAmount) {\n orderInfo.orderStatus = uint8(OrderStatus.FULLY_FILLED);\n return orderInfo;\n }\n\n // All other statuses are ruled out: order is Fillable\n orderInfo.orderStatus = uint8(OrderStatus.FILLABLE);\n return orderInfo;\n }\n\n /// @dev Updates state with results of a fill order.\n /// @param order that was filled.\n /// @param takerAddress Address of taker who filled the order.\n /// @param orderTakerAssetFilledAmount Amount of order already filled.\n /// @return fillResults Amounts filled and fees paid by maker and taker.\n function updateFilledState(\n Order memory order,\n address takerAddress,\n bytes32 orderHash,\n uint256 orderTakerAssetFilledAmount,\n FillResults memory fillResults\n )\n internal\n {\n // Update state\n filled[orderHash] = safeAdd(orderTakerAssetFilledAmount, fillResults.takerAssetFilledAmount);\n\n // Log order\n emit Fill(\n order.makerAddress,\n order.feeRecipientAddress,\n takerAddress,\n msg.sender,\n fillResults.makerAssetFilledAmount,\n fillResults.takerAssetFilledAmount,\n fillResults.makerFeePaid,\n fillResults.takerFeePaid,\n orderHash,\n order.makerAssetData,\n order.takerAssetData\n );\n }\n\n /// @dev Updates state with results of cancelling an order.\n /// State is only updated if the order is currently fillable.\n /// Otherwise, updating state would have no effect.\n /// @param order that was cancelled.\n /// @param orderHash Hash of order that was cancelled.\n function updateCancelledState(\n Order memory order,\n bytes32 orderHash\n )\n internal\n {\n // Perform cancel\n cancelled[orderHash] = true;\n\n // Log cancel\n emit Cancel(\n order.makerAddress,\n order.feeRecipientAddress,\n msg.sender,\n orderHash,\n order.makerAssetData,\n order.takerAssetData\n );\n }\n\n /// @dev Validates context for fillOrder. Succeeds or throws.\n /// @param order to be filled.\n /// @param orderInfo OrderStatus, orderHash, and amount already filled of order.\n /// @param takerAddress Address of order taker.\n /// @param takerAssetFillAmount Desired amount of order to fill by taker.\n /// @param takerAssetFilledAmount Amount of takerAsset that will be filled.\n /// @param signature Proof that the orders was created by its maker.\n function assertValidFill(\n Order memory order,\n OrderInfo memory orderInfo,\n address takerAddress,\n uint256 takerAssetFillAmount,\n uint256 takerAssetFilledAmount,\n bytes memory signature\n )\n internal\n view\n {\n // An order can only be filled if its status is FILLABLE.\n require(\n orderInfo.orderStatus == uint8(OrderStatus.FILLABLE),\n \"ORDER_UNFILLABLE\"\n );\n\n // Revert if fill amount is invalid\n require(\n takerAssetFillAmount != 0,\n \"INVALID_TAKER_AMOUNT\"\n );\n\n // Validate sender is allowed to fill this order\n if (order.senderAddress != address(0)) {\n require(\n order.senderAddress == msg.sender,\n \"INVALID_SENDER\"\n );\n }\n\n // Validate taker is allowed to fill this order\n if (order.takerAddress != address(0)) {\n require(\n order.takerAddress == takerAddress,\n \"INVALID_TAKER\"\n );\n }\n\n // Validate Maker signature (check only if first time seen)\n if (orderInfo.orderTakerAssetFilledAmount == 0) {\n require(\n isValidSignature(\n orderInfo.orderHash,\n order.makerAddress,\n signature\n ),\n \"INVALID_ORDER_SIGNATURE\"\n );\n }\n\n // Validate fill order rounding\n require(\n !isRoundingError(\n takerAssetFilledAmount,\n order.takerAssetAmount,\n order.makerAssetAmount\n ),\n \"ROUNDING_ERROR\"\n );\n }\n\n /// @dev Validates context for cancelOrder. Succeeds or throws.\n /// @param order to be cancelled.\n /// @param orderInfo OrderStatus, orderHash, and amount already filled of order.\n function assertValidCancel(\n Order memory order,\n OrderInfo memory orderInfo\n )\n internal\n view\n {\n // Ensure order is valid\n // An order can only be cancelled if its status is FILLABLE.\n require(\n orderInfo.orderStatus == uint8(OrderStatus.FILLABLE),\n \"ORDER_UNFILLABLE\"\n );\n\n // Validate sender is allowed to cancel this order\n if (order.senderAddress != address(0)) {\n require(\n order.senderAddress == msg.sender,\n \"INVALID_SENDER\"\n );\n }\n\n // Validate transaction signed by maker\n address makerAddress = getCurrentContextAddress();\n require(\n order.makerAddress == makerAddress,\n \"INVALID_MAKER\"\n );\n }\n\n /// @dev Calculates amounts filled and fees paid by maker and taker.\n /// @param order to be filled.\n /// @param takerAssetFilledAmount Amount of takerAsset that will be filled.\n /// @return fillResults Amounts filled and fees paid by maker and taker.\n function calculateFillResults(\n Order memory order,\n uint256 takerAssetFilledAmount\n )\n internal\n pure\n returns (FillResults memory fillResults)\n {\n // Compute proportional transfer amounts\n // TODO: All three are multiplied by the same fraction. This can\n // potentially be optimized.\n fillResults.takerAssetFilledAmount = takerAssetFilledAmount;\n fillResults.makerAssetFilledAmount = getPartialAmount(\n fillResults.takerAssetFilledAmount,\n order.takerAssetAmount,\n order.makerAssetAmount\n );\n fillResults.makerFeePaid = getPartialAmount(\n fillResults.takerAssetFilledAmount,\n order.takerAssetAmount,\n order.makerFee\n );\n fillResults.takerFeePaid = getPartialAmount(\n fillResults.takerAssetFilledAmount,\n order.takerAssetAmount,\n order.takerFee\n );\n\n return fillResults;\n }\n\n /// @dev Settles an order by transferring assets between counterparties.\n /// @param order Order struct containing order specifications.\n /// @param takerAddress Address selling takerAsset and buying makerAsset.\n /// @param fillResults Amounts to be filled and fees paid by maker and taker.\n function settleOrder(\n LibOrder.Order memory order,\n address takerAddress,\n LibFillResults.FillResults memory fillResults\n )\n private\n {\n bytes memory zrxAssetData = ZRX_ASSET_DATA;\n dispatchTransferFrom(\n order.makerAssetData,\n order.makerAddress,\n takerAddress,\n fillResults.makerAssetFilledAmount\n );\n dispatchTransferFrom(\n order.takerAssetData,\n takerAddress,\n order.makerAddress,\n fillResults.takerAssetFilledAmount\n );\n dispatchTransferFrom(\n zrxAssetData,\n order.makerAddress,\n order.feeRecipientAddress,\n fillResults.makerFeePaid\n );\n dispatchTransferFrom(\n zrxAssetData,\n takerAddress,\n order.feeRecipientAddress,\n fillResults.takerFeePaid\n );\n }\n}\n",
- "2.0.0/protocol/Exchange/MixinMatchOrders.sol": "/*\n Copyright 2018 ZeroEx Intl.\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 http://www.apache.org/licenses/LICENSE-2.0\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\npragma solidity ^0.4.24;\npragma experimental ABIEncoderV2;\n\nimport \"./libs/LibConstants.sol\";\nimport \"./libs/LibMath.sol\";\nimport \"./libs/LibOrder.sol\";\nimport \"./libs/LibFillResults.sol\";\nimport \"./mixins/MExchangeCore.sol\";\nimport \"./mixins/MMatchOrders.sol\";\nimport \"./mixins/MTransactions.sol\";\nimport \"./mixins/MAssetProxyDispatcher.sol\";\n\ncontract MixinMatchOrders is\n LibConstants,\n LibMath,\n MAssetProxyDispatcher,\n MExchangeCore,\n MMatchOrders,\n MTransactions\n{\n /// @dev Match two complementary orders that have a profitable spread.\n /// Each order is filled at their respective price point. However, the calculations are\n /// carried out as though the orders are both being filled at the right order's price point.\n /// The profit made by the left order goes to the taker (who matched the two orders).\n /// @param leftOrder First order to match.\n /// @param rightOrder Second order to match.\n /// @param leftSignature Proof that order was created by the left maker.\n /// @param rightSignature Proof that order was created by the right maker.\n /// @return matchedFillResults Amounts filled and fees paid by maker and taker of matched orders.\n /// TODO: Make this function external once supported by Solidity (See Solidity Issues #3199, #1603)\n function matchOrders(\n LibOrder.Order memory leftOrder,\n LibOrder.Order memory rightOrder,\n bytes memory leftSignature,\n bytes memory rightSignature\n )\n public\n returns (LibFillResults.MatchedFillResults memory matchedFillResults)\n {\n // We assume that rightOrder.takerAssetData == leftOrder.makerAssetData and rightOrder.makerAssetData == leftOrder.takerAssetData.\n // If this assumption isn't true, the match will fail at signature validation.\n rightOrder.makerAssetData = leftOrder.takerAssetData;\n rightOrder.takerAssetData = leftOrder.makerAssetData;\n\n // Get left & right order info\n LibOrder.OrderInfo memory leftOrderInfo = getOrderInfo(leftOrder);\n LibOrder.OrderInfo memory rightOrderInfo = getOrderInfo(rightOrder);\n\n // Fetch taker address\n address takerAddress = getCurrentContextAddress();\n\n // Either our context is valid or we revert\n assertValidMatch(leftOrder, rightOrder);\n\n // Compute proportional fill amounts\n matchedFillResults = calculateMatchedFillResults(\n leftOrder,\n rightOrder,\n leftOrderInfo.orderTakerAssetFilledAmount,\n rightOrderInfo.orderTakerAssetFilledAmount\n );\n\n // Validate fill contexts\n assertValidFill(\n leftOrder,\n leftOrderInfo,\n takerAddress,\n matchedFillResults.left.takerAssetFilledAmount,\n matchedFillResults.left.takerAssetFilledAmount,\n leftSignature\n );\n assertValidFill(\n rightOrder,\n rightOrderInfo,\n takerAddress,\n matchedFillResults.right.takerAssetFilledAmount,\n matchedFillResults.right.takerAssetFilledAmount,\n rightSignature\n );\n\n // Update exchange state\n updateFilledState(\n leftOrder,\n takerAddress,\n leftOrderInfo.orderHash,\n leftOrderInfo.orderTakerAssetFilledAmount,\n matchedFillResults.left\n );\n updateFilledState(\n rightOrder,\n takerAddress,\n rightOrderInfo.orderHash,\n rightOrderInfo.orderTakerAssetFilledAmount,\n matchedFillResults.right\n );\n \n // Settle matched orders. Succeeds or throws.\n settleMatchedOrders(\n leftOrder,\n rightOrder,\n takerAddress,\n matchedFillResults\n );\n\n return matchedFillResults;\n }\n\n /// @dev Validates context for matchOrders. Succeeds or throws.\n /// @param leftOrder First order to match.\n /// @param rightOrder Second order to match.\n function assertValidMatch(\n LibOrder.Order memory leftOrder,\n LibOrder.Order memory rightOrder\n )\n internal\n pure\n {\n // Make sure there is a profitable spread.\n // There is a profitable spread iff the cost per unit bought (OrderA.MakerAmount/OrderA.TakerAmount) for each order is greater\n // than the profit per unit sold of the matched order (OrderB.TakerAmount/OrderB.MakerAmount).\n // This is satisfied by the equations below:\n // <leftOrder.makerAssetAmount> / <leftOrder.takerAssetAmount> >= <rightOrder.takerAssetAmount> / <rightOrder.makerAssetAmount>\n // AND\n // <rightOrder.makerAssetAmount> / <rightOrder.takerAssetAmount> >= <leftOrder.takerAssetAmount> / <leftOrder.makerAssetAmount>\n // These equations can be combined to get the following:\n require(\n safeMul(leftOrder.makerAssetAmount, rightOrder.makerAssetAmount) >=\n safeMul(leftOrder.takerAssetAmount, rightOrder.takerAssetAmount),\n \"NEGATIVE_SPREAD_REQUIRED\"\n );\n }\n\n /// @dev Calculates fill amounts for the matched orders.\n /// Each order is filled at their respective price point. However, the calculations are\n /// carried out as though the orders are both being filled at the right order's price point.\n /// The profit made by the leftOrder order goes to the taker (who matched the two orders).\n /// @param leftOrder First order to match.\n /// @param rightOrder Second order to match.\n /// @param leftOrderTakerAssetFilledAmount Amount of left order already filled.\n /// @param rightOrderTakerAssetFilledAmount Amount of right order already filled.\n /// @param matchedFillResults Amounts to fill and fees to pay by maker and taker of matched orders.\n function calculateMatchedFillResults(\n LibOrder.Order memory leftOrder,\n LibOrder.Order memory rightOrder,\n uint256 leftOrderTakerAssetFilledAmount,\n uint256 rightOrderTakerAssetFilledAmount\n )\n internal\n pure\n returns (LibFillResults.MatchedFillResults memory matchedFillResults)\n {\n // We settle orders at the exchange rate of the right order.\n // The amount saved by the left maker goes to the taker.\n // Either the left or right order will be fully filled; possibly both.\n // The left order is fully filled iff the right order can sell more than left can buy.\n // That is: the amount required to fill the left order is less than or equal to\n // the amount we can spend from the right order:\n // <leftTakerAssetAmountRemaining> <= <rightTakerAssetAmountRemaining> * <rightMakerToTakerRatio>\n // <leftTakerAssetAmountRemaining> <= <rightTakerAssetAmountRemaining> * <rightOrder.makerAssetAmount> / <rightOrder.takerAssetAmount>\n // <leftTakerAssetAmountRemaining> * <rightOrder.takerAssetAmount> <= <rightTakerAssetAmountRemaining> * <rightOrder.makerAssetAmount>\n uint256 leftTakerAssetAmountRemaining = safeSub(leftOrder.takerAssetAmount, leftOrderTakerAssetFilledAmount);\n uint256 rightTakerAssetAmountRemaining = safeSub(rightOrder.takerAssetAmount, rightOrderTakerAssetFilledAmount);\n uint256 leftTakerAssetFilledAmount;\n uint256 rightTakerAssetFilledAmount;\n if (\n safeMul(leftTakerAssetAmountRemaining, rightOrder.takerAssetAmount) <=\n safeMul(rightTakerAssetAmountRemaining, rightOrder.makerAssetAmount)\n ) {\n // Left order will be fully filled: maximally fill left\n leftTakerAssetFilledAmount = leftTakerAssetAmountRemaining;\n\n // The right order receives an amount proportional to how much was spent.\n // TODO: Can we ensure rounding error is in the correct direction?\n rightTakerAssetFilledAmount = getPartialAmount(\n rightOrder.takerAssetAmount,\n rightOrder.makerAssetAmount,\n leftTakerAssetFilledAmount\n );\n } else {\n // Right order will be fully filled: maximally fill right\n rightTakerAssetFilledAmount = rightTakerAssetAmountRemaining;\n\n // The left order receives an amount proportional to how much was spent.\n // TODO: Can we ensure rounding error is in the correct direction?\n leftTakerAssetFilledAmount = getPartialAmount(\n rightOrder.makerAssetAmount,\n rightOrder.takerAssetAmount,\n rightTakerAssetFilledAmount\n );\n }\n\n // Calculate fill results for left order\n matchedFillResults.left = calculateFillResults(\n leftOrder,\n leftTakerAssetFilledAmount\n );\n\n // Calculate fill results for right order\n matchedFillResults.right = calculateFillResults(\n rightOrder,\n rightTakerAssetFilledAmount\n );\n\n // Calculate amount given to taker\n matchedFillResults.leftMakerAssetSpreadAmount = safeSub(\n matchedFillResults.left.makerAssetFilledAmount,\n matchedFillResults.right.takerAssetFilledAmount\n );\n\n // Return fill results\n return matchedFillResults;\n }\n\n /// @dev Settles matched order by transferring appropriate funds between order makers, taker, and fee recipient.\n /// @param leftOrder First matched order.\n /// @param rightOrder Second matched order.\n /// @param takerAddress Address that matched the orders. The taker receives the spread between orders as profit.\n /// @param matchedFillResults Struct holding amounts to transfer between makers, taker, and fee recipients.\n function settleMatchedOrders(\n LibOrder.Order memory leftOrder,\n LibOrder.Order memory rightOrder,\n address takerAddress,\n LibFillResults.MatchedFillResults memory matchedFillResults\n )\n private\n {\n bytes memory zrxAssetData = ZRX_ASSET_DATA;\n // Order makers and taker\n dispatchTransferFrom(\n leftOrder.makerAssetData,\n leftOrder.makerAddress,\n rightOrder.makerAddress,\n matchedFillResults.right.takerAssetFilledAmount\n );\n dispatchTransferFrom(\n rightOrder.makerAssetData,\n rightOrder.makerAddress,\n leftOrder.makerAddress,\n matchedFillResults.left.takerAssetFilledAmount\n );\n dispatchTransferFrom(\n leftOrder.makerAssetData,\n leftOrder.makerAddress,\n takerAddress,\n matchedFillResults.leftMakerAssetSpreadAmount\n );\n\n // Maker fees\n dispatchTransferFrom(\n zrxAssetData,\n leftOrder.makerAddress,\n leftOrder.feeRecipientAddress,\n matchedFillResults.left.makerFeePaid\n );\n dispatchTransferFrom(\n zrxAssetData,\n rightOrder.makerAddress,\n rightOrder.feeRecipientAddress,\n matchedFillResults.right.makerFeePaid\n );\n\n // Taker fees\n if (leftOrder.feeRecipientAddress == rightOrder.feeRecipientAddress) {\n dispatchTransferFrom(\n zrxAssetData,\n takerAddress,\n leftOrder.feeRecipientAddress,\n safeAdd(\n matchedFillResults.left.takerFeePaid,\n matchedFillResults.right.takerFeePaid\n )\n );\n } else {\n dispatchTransferFrom(\n zrxAssetData,\n takerAddress,\n leftOrder.feeRecipientAddress,\n matchedFillResults.left.takerFeePaid\n );\n dispatchTransferFrom(\n zrxAssetData,\n takerAddress,\n rightOrder.feeRecipientAddress,\n matchedFillResults.right.takerFeePaid\n );\n }\n }\n}\n",
- "2.0.0/protocol/Exchange/MixinSignatureValidator.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.24;\n\nimport \"../../utils/LibBytes/LibBytes.sol\";\nimport \"./mixins/MSignatureValidator.sol\";\nimport \"./mixins/MTransactions.sol\";\nimport \"./interfaces/IWallet.sol\";\nimport \"./interfaces/IValidator.sol\";\n\ncontract MixinSignatureValidator is\n MSignatureValidator,\n MTransactions\n{\n using LibBytes for bytes;\n \n // Mapping of hash => signer => signed\n mapping (bytes32 => mapping (address => bool)) public preSigned;\n\n // Mapping of signer => validator => approved\n mapping (address => mapping (address => bool)) public allowedValidators;\n\n /// @dev Approves a hash on-chain using any valid signature type.\n /// After presigning a hash, the preSign signature type will become valid for that hash and signer.\n /// @param signerAddress Address that should have signed the given hash.\n /// @param signature Proof that the hash has been signed by signer.\n function preSign(\n bytes32 hash,\n address signerAddress,\n bytes signature\n )\n external\n {\n require(\n isValidSignature(\n hash,\n signerAddress,\n signature\n ),\n \"INVALID_SIGNATURE\"\n );\n preSigned[hash][signerAddress] = true;\n }\n\n /// @dev Approves/unnapproves a Validator contract to verify signatures on signer's behalf.\n /// @param validatorAddress Address of Validator contract.\n /// @param approval Approval or disapproval of Validator contract.\n function setSignatureValidatorApproval(\n address validatorAddress,\n bool approval\n )\n external\n {\n address signerAddress = getCurrentContextAddress();\n allowedValidators[signerAddress][validatorAddress] = approval;\n emit SignatureValidatorApproval(\n signerAddress,\n validatorAddress,\n approval\n );\n }\n\n /// @dev Verifies that a hash has been signed by the given signer.\n /// @param hash Any 32 byte hash.\n /// @param signerAddress Address that should have signed the given hash.\n /// @param signature Proof that the hash has been signed by signer.\n /// @return True if the address recovered from the provided signature matches the input signer address.\n function isValidSignature(\n bytes32 hash,\n address signerAddress,\n bytes memory signature\n )\n public\n view\n returns (bool isValid)\n {\n // TODO: Domain separation: make hash depend on role. (Taker sig should not be valid as maker sig, etc.)\n require(\n signature.length > 0,\n \"LENGTH_GREATER_THAN_0_REQUIRED\"\n );\n\n // Ensure signature is supported\n uint8 signatureTypeRaw = uint8(signature.popLastByte());\n require(\n signatureTypeRaw < uint8(SignatureType.NSignatureTypes),\n \"SIGNATURE_UNSUPPORTED\"\n );\n\n // Pop last byte off of signature byte array.\n SignatureType signatureType = SignatureType(signatureTypeRaw);\n\n // Variables are not scoped in Solidity.\n uint8 v;\n bytes32 r;\n bytes32 s;\n address recovered;\n\n // Always illegal signature.\n // This is always an implicit option since a signer can create a\n // signature array with invalid type or length. We may as well make\n // it an explicit option. This aids testing and analysis. It is\n // also the initialization value for the enum type.\n if (signatureType == SignatureType.Illegal) {\n revert(\"SIGNATURE_ILLEGAL\");\n\n // Always invalid signature.\n // Like Illegal, this is always implicitly available and therefore\n // offered explicitly. It can be implicitly created by providing\n // a correctly formatted but incorrect signature.\n } else if (signatureType == SignatureType.Invalid) {\n require(\n signature.length == 0,\n \"LENGTH_0_REQUIRED\"\n );\n isValid = false;\n return isValid;\n\n // Signature using EIP712\n } else if (signatureType == SignatureType.EIP712) {\n require(\n signature.length == 65,\n \"LENGTH_65_REQUIRED\"\n );\n v = uint8(signature[0]);\n r = signature.readBytes32(1);\n s = signature.readBytes32(33);\n recovered = ecrecover(hash, v, r, s);\n isValid = signerAddress == recovered;\n return isValid;\n\n // Signed using web3.eth_sign\n } else if (signatureType == SignatureType.EthSign) {\n require(\n signature.length == 65,\n \"LENGTH_65_REQUIRED\"\n );\n v = uint8(signature[0]);\n r = signature.readBytes32(1);\n s = signature.readBytes32(33);\n recovered = ecrecover(\n keccak256(abi.encodePacked(\n \"\\x19Ethereum Signed Message:\\n32\",\n hash\n )),\n v,\n r,\n s\n );\n isValid = signerAddress == recovered;\n return isValid;\n\n // Implicitly signed by caller.\n // The signer has initiated the call. In the case of non-contract\n // accounts it means the transaction itself was signed.\n // Example: let's say for a particular operation three signatures\n // A, B and C are required. To submit the transaction, A and B can\n // give a signature to C, who can then submit the transaction using\n // `Caller` for his own signature. Or A and C can sign and B can\n // submit using `Caller`. Having `Caller` allows this flexibility.\n } else if (signatureType == SignatureType.Caller) {\n require(\n signature.length == 0,\n \"LENGTH_0_REQUIRED\"\n );\n isValid = signerAddress == msg.sender;\n return isValid;\n\n // Signature verified by wallet contract.\n // If used with an order, the maker of the order is the wallet contract.\n } else if (signatureType == SignatureType.Wallet) {\n isValid = IWallet(signerAddress).isValidSignature(hash, signature);\n return isValid;\n\n // Signature verified by validator contract.\n // If used with an order, the maker of the order can still be an EOA.\n // A signature using this type should be encoded as:\n // | Offset | Length | Contents |\n // | 0x00 | x | Signature to validate |\n // | 0x00 + x | 20 | Address of validator contract |\n // | 0x14 + x | 1 | Signature type is always \"\\x06\" |\n } else if (signatureType == SignatureType.Validator) {\n // Pop last 20 bytes off of signature byte array.\n\n address validatorAddress = signature.popLast20Bytes();\n \n // Ensure signer has approved validator.\n if (!allowedValidators[signerAddress][validatorAddress]) {\n return false;\n }\n isValid = IValidator(validatorAddress).isValidSignature(\n hash,\n signerAddress,\n signature\n );\n return isValid;\n\n // Signer signed hash previously using the preSign function.\n } else if (signatureType == SignatureType.PreSigned) {\n isValid = preSigned[hash][signerAddress];\n return isValid;\n\n // Signature from Trezor hardware wallet.\n // It differs from web3.eth_sign in the encoding of message length\n // (Bitcoin varint encoding vs ascii-decimal, the latter is not\n // self-terminating which leads to ambiguities).\n // See also:\n // https://en.bitcoin.it/wiki/Protocol_documentation#Variable_length_integer\n // https://github.com/trezor/trezor-mcu/blob/master/firmware/ethereum.c#L602\n // https://github.com/trezor/trezor-mcu/blob/master/firmware/crypto.c#L36\n } else if (signatureType == SignatureType.Trezor) {\n require(\n signature.length == 65,\n \"LENGTH_65_REQUIRED\"\n );\n v = uint8(signature[0]);\n r = signature.readBytes32(1);\n s = signature.readBytes32(33);\n recovered = ecrecover(\n keccak256(abi.encodePacked(\n \"\\x19Ethereum Signed Message:\\n\\x20\",\n hash\n )),\n v,\n r,\n s\n );\n isValid = signerAddress == recovered;\n return isValid;\n }\n\n // Anything else is illegal (We do not return false because\n // the signature may actually be valid, just not in a format\n // that we currently support. In this case returning false\n // may lead the caller to incorrectly believe that the\n // signature was invalid.)\n revert(\"SIGNATURE_UNSUPPORTED\");\n }\n}\n",
- "2.0.0/protocol/Exchange/MixinTransactions.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*/\npragma solidity ^0.4.24;\n\nimport \"./libs/LibExchangeErrors.sol\";\nimport \"./mixins/MSignatureValidator.sol\";\nimport \"./mixins/MTransactions.sol\";\nimport \"./libs/LibEIP712.sol\";\n\ncontract MixinTransactions is\n LibEIP712,\n MSignatureValidator,\n MTransactions\n{\n\n // Mapping of transaction hash => executed\n // This prevents transactions from being executed more than once.\n mapping (bytes32 => bool) public transactions;\n\n // Address of current transaction signer\n address public currentContextAddress;\n\n // Hash for the EIP712 ZeroEx Transaction Schema\n bytes32 constant EIP712_ZEROEX_TRANSACTION_SCHEMA_HASH = keccak256(abi.encodePacked(\n \"ZeroExTransaction(\",\n \"uint256 salt,\",\n \"address signerAddress,\",\n \"bytes data\",\n \")\"\n ));\n\n /// @dev Calculates EIP712 hash of the Transaction.\n /// @param salt Arbitrary number to ensure uniqueness of transaction hash.\n /// @param signerAddress Address of transaction signer.\n /// @param data AbiV2 encoded calldata.\n /// @return EIP712 hash of the Transaction.\n function hashZeroExTransaction(\n uint256 salt,\n address signerAddress,\n bytes memory data\n )\n internal\n pure\n returns (bytes32 result)\n {\n bytes32 schemaHash = EIP712_ZEROEX_TRANSACTION_SCHEMA_HASH;\n bytes32 dataHash = keccak256(data);\n // Assembly for more efficiently computing:\n // keccak256(abi.encode(\n // EIP712_ZEROEX_TRANSACTION_SCHEMA_HASH,\n // salt,\n // signerAddress,\n // keccak256(data)\n // ));\n assembly {\n let memPtr := mload(64)\n mstore(memPtr, schemaHash)\n mstore(add(memPtr, 32), salt)\n mstore(add(memPtr, 64), and(signerAddress, 0xffffffffffffffffffffffffffffffffffffffff))\n mstore(add(memPtr, 96), dataHash)\n result := keccak256(memPtr, 128)\n }\n\n return result;\n }\n\n /// @dev Executes an exchange method call in the context of signer.\n /// @param salt Arbitrary number to ensure uniqueness of transaction hash.\n /// @param signerAddress Address of transaction signer.\n /// @param data AbiV2 encoded calldata.\n /// @param signature Proof of signer transaction by signer.\n function executeTransaction(\n uint256 salt,\n address signerAddress,\n bytes data,\n bytes signature\n )\n external\n {\n // Prevent reentrancy\n require(\n currentContextAddress == address(0),\n \"REENTRANCY_ILLEGAL\"\n );\n\n bytes32 transactionHash = hashEIP712Message(hashZeroExTransaction(\n salt,\n signerAddress,\n data\n ));\n\n // Validate transaction has not been executed\n require(\n !transactions[transactionHash],\n \"INVALID_TX_HASH\"\n );\n\n // Transaction always valid if signer is sender of transaction\n if (signerAddress != msg.sender) {\n // Validate signature\n require(\n isValidSignature(\n transactionHash,\n signerAddress,\n signature\n ),\n \"INVALID_TX_SIGNATURE\"\n );\n\n // Set the current transaction signer\n currentContextAddress = signerAddress;\n }\n\n // Execute transaction\n transactions[transactionHash] = true;\n require(\n address(this).delegatecall(data),\n \"FAILED_EXECUTION\"\n );\n\n // Reset current transaction signer\n // TODO: Check if gas is paid when currentContextAddress is already 0.\n currentContextAddress = address(0);\n }\n\n /// @dev The current function will be called in the context of this address (either 0x transaction signer or `msg.sender`).\n /// If calling a fill function, this address will represent the taker.\n /// If calling a cancel function, this address will represent the maker.\n /// @return Signer of 0x transaction if entry point is `executeTransaction`.\n /// `msg.sender` if entry point is any other function.\n function getCurrentContextAddress()\n internal\n view\n returns (address)\n {\n address contextAddress = currentContextAddress == address(0) ? msg.sender : currentContextAddress;\n return contextAddress;\n }\n}\n",
- "2.0.0/protocol/Exchange/MixinWrapperFunctions.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"./libs/LibMath.sol\";\nimport \"./libs/LibOrder.sol\";\nimport \"./libs/LibFillResults.sol\";\nimport \"./mixins/MExchangeCore.sol\";\n\ncontract MixinWrapperFunctions is\n LibMath,\n LibFillResults,\n MExchangeCore\n{\n /// @dev Fills the input order. Reverts if exact takerAssetFillAmount not filled.\n /// @param order Order struct containing order specifications.\n /// @param takerAssetFillAmount Desired amount of takerAsset to sell.\n /// @param signature Proof that order has been created by maker.\n function fillOrKillOrder(\n LibOrder.Order memory order,\n uint256 takerAssetFillAmount,\n bytes memory signature\n )\n public\n returns (FillResults memory fillResults)\n {\n fillResults = fillOrder(\n order,\n takerAssetFillAmount,\n signature\n );\n require(\n fillResults.takerAssetFilledAmount == takerAssetFillAmount,\n \"COMPLETE_FILL_FAILED\"\n );\n return fillResults;\n }\n\n /// @dev Fills an order with specified parameters and ECDSA signature.\n /// Returns false if the transaction would otherwise revert.\n /// @param order Order struct containing order specifications.\n /// @param takerAssetFillAmount Desired amount of takerAsset to sell.\n /// @param signature Proof that order has been created by maker.\n /// @return Amounts filled and fees paid by maker and taker.\n function fillOrderNoThrow(\n LibOrder.Order memory order,\n uint256 takerAssetFillAmount,\n bytes memory signature\n )\n public\n returns (FillResults memory fillResults)\n {\n // We need to call MExchangeCore.fillOrder using a delegatecall in\n // assembly so that we can intercept a call that throws. For this, we\n // need the input encoded in memory in the Ethereum ABIv2 format [1].\n\n // | Area | Offset | Length | Contents |\n // | -------- |--------|---------|-------------------------------------------- |\n // | Header | 0x00 | 4 | function selector |\n // | Params | | 3 * 32 | function parameters: |\n // | | 0x00 | | 1. offset to order (*) |\n // | | 0x20 | | 2. takerAssetFillAmount |\n // | | 0x40 | | 3. offset to signature (*) |\n // | Data | | 12 * 32 | order: |\n // | | 0x000 | | 1. senderAddress |\n // | | 0x020 | | 2. makerAddress |\n // | | 0x040 | | 3. takerAddress |\n // | | 0x060 | | 4. feeRecipientAddress |\n // | | 0x080 | | 5. makerAssetAmount |\n // | | 0x0A0 | | 6. takerAssetAmount |\n // | | 0x0C0 | | 7. makerFeeAmount |\n // | | 0x0E0 | | 8. takerFeeAmount |\n // | | 0x100 | | 9. expirationTimeSeconds |\n // | | 0x120 | | 10. salt |\n // | | 0x140 | | 11. Offset to makerAssetData (*) |\n // | | 0x160 | | 12. Offset to takerAssetData (*) |\n // | | 0x180 | 32 | makerAssetData Length |\n // | | 0x1A0 | ** | makerAssetData Contents |\n // | | 0x1C0 | 32 | takerAssetData Length |\n // | | 0x1E0 | ** | takerAssetData Contents |\n // | | 0x200 | 32 | signature Length |\n // | | 0x220 | ** | signature Contents |\n\n // * Offsets are calculated from the beginning of the current area: Header, Params, Data:\n // An offset stored in the Params area is calculated from the beginning of the Params section.\n // An offset stored in the Data area is calculated from the beginning of the Data section.\n\n // ** The length of dynamic array contents are stored in the field immediately preceeding the contents.\n\n // [1]: https://solidity.readthedocs.io/en/develop/abi-spec.html\n\n bytes4 fillOrderSelector = this.fillOrder.selector;\n\n assembly {\n\n // Areas below may use the following variables:\n // 1. <area>Start -- Start of this area in memory\n // 2. <area>End -- End of this area in memory. This value may\n // be precomputed (before writing contents),\n // or it may be computed as contents are written.\n // 3. <area>Offset -- Current offset into area. If an area's End\n // is precomputed, this variable tracks the\n // offsets of contents as they are written.\n\n /////// Setup Header Area ///////\n // Load free memory pointer\n let headerAreaStart := mload(0x40)\n mstore(headerAreaStart, fillOrderSelector)\n let headerAreaEnd := add(headerAreaStart, 0x4)\n\n /////// Setup Params Area ///////\n // This area is preallocated and written to later.\n // This is because we need to fill in offsets that have not yet been calculated.\n let paramsAreaStart := headerAreaEnd\n let paramsAreaEnd := add(paramsAreaStart, 0x60)\n let paramsAreaOffset := paramsAreaStart\n\n /////// Setup Data Area ///////\n let dataAreaStart := paramsAreaEnd\n let dataAreaEnd := dataAreaStart\n\n // Offset from the source data we're reading from\n let sourceOffset := order\n // arrayLenBytes and arrayLenWords track the length of a dynamically-allocated bytes array.\n let arrayLenBytes := 0\n let arrayLenWords := 0\n\n /////// Write order Struct ///////\n // Write memory location of Order, relative to the start of the\n // parameter list, then increment the paramsAreaOffset respectively.\n mstore(paramsAreaOffset, sub(dataAreaEnd, paramsAreaStart))\n paramsAreaOffset := add(paramsAreaOffset, 0x20)\n\n // Write values for each field in the order\n // It would be nice to use a loop, but we save on gas by writing\n // the stores sequentially.\n mstore(dataAreaEnd, mload(sourceOffset)) // makerAddress\n mstore(add(dataAreaEnd, 0x20), mload(add(sourceOffset, 0x20))) // takerAddress\n mstore(add(dataAreaEnd, 0x40), mload(add(sourceOffset, 0x40))) // feeRecipientAddress\n mstore(add(dataAreaEnd, 0x60), mload(add(sourceOffset, 0x60))) // senderAddress\n mstore(add(dataAreaEnd, 0x80), mload(add(sourceOffset, 0x80))) // makerAssetAmount\n mstore(add(dataAreaEnd, 0xA0), mload(add(sourceOffset, 0xA0))) // takerAssetAmount\n mstore(add(dataAreaEnd, 0xC0), mload(add(sourceOffset, 0xC0))) // makerFeeAmount\n mstore(add(dataAreaEnd, 0xE0), mload(add(sourceOffset, 0xE0))) // takerFeeAmount\n mstore(add(dataAreaEnd, 0x100), mload(add(sourceOffset, 0x100))) // expirationTimeSeconds\n mstore(add(dataAreaEnd, 0x120), mload(add(sourceOffset, 0x120))) // salt\n mstore(add(dataAreaEnd, 0x140), mload(add(sourceOffset, 0x140))) // Offset to makerAssetData\n mstore(add(dataAreaEnd, 0x160), mload(add(sourceOffset, 0x160))) // Offset to takerAssetData\n dataAreaEnd := add(dataAreaEnd, 0x180)\n sourceOffset := add(sourceOffset, 0x180)\n\n // Write offset to <order.makerAssetData>\n mstore(add(dataAreaStart, mul(10, 0x20)), sub(dataAreaEnd, dataAreaStart))\n\n // Calculate length of <order.makerAssetData>\n sourceOffset := mload(add(order, 0x140)) // makerAssetData\n arrayLenBytes := mload(sourceOffset)\n sourceOffset := add(sourceOffset, 0x20)\n arrayLenWords := div(add(arrayLenBytes, 0x1F), 0x20)\n\n // Write length of <order.makerAssetData>\n mstore(dataAreaEnd, arrayLenBytes)\n dataAreaEnd := add(dataAreaEnd, 0x20)\n\n // Write contents of <order.makerAssetData>\n for {let i := 0} lt(i, arrayLenWords) {i := add(i, 1)} {\n mstore(dataAreaEnd, mload(sourceOffset))\n dataAreaEnd := add(dataAreaEnd, 0x20)\n sourceOffset := add(sourceOffset, 0x20)\n }\n\n // Write offset to <order.takerAssetData>\n mstore(add(dataAreaStart, mul(11, 0x20)), sub(dataAreaEnd, dataAreaStart))\n\n // Calculate length of <order.takerAssetData>\n sourceOffset := mload(add(order, 0x160)) // takerAssetData\n arrayLenBytes := mload(sourceOffset)\n sourceOffset := add(sourceOffset, 0x20)\n arrayLenWords := div(add(arrayLenBytes, 0x1F), 0x20)\n\n // Write length of <order.takerAssetData>\n mstore(dataAreaEnd, arrayLenBytes)\n dataAreaEnd := add(dataAreaEnd, 0x20)\n\n // Write contents of <order.takerAssetData>\n for {let i := 0} lt(i, arrayLenWords) {i := add(i, 1)} {\n mstore(dataAreaEnd, mload(sourceOffset))\n dataAreaEnd := add(dataAreaEnd, 0x20)\n sourceOffset := add(sourceOffset, 0x20)\n }\n\n /////// Write takerAssetFillAmount ///////\n mstore(paramsAreaOffset, takerAssetFillAmount)\n paramsAreaOffset := add(paramsAreaOffset, 0x20)\n\n /////// Write signature ///////\n // Write offset to paramsArea\n mstore(paramsAreaOffset, sub(dataAreaEnd, paramsAreaStart))\n\n // Calculate length of signature\n sourceOffset := signature\n arrayLenBytes := mload(sourceOffset)\n sourceOffset := add(sourceOffset, 0x20)\n arrayLenWords := div(add(arrayLenBytes, 0x1F), 0x20)\n\n // Write length of signature\n mstore(dataAreaEnd, arrayLenBytes)\n dataAreaEnd := add(dataAreaEnd, 0x20)\n\n // Write contents of signature\n for {let i := 0} lt(i, arrayLenWords) {i := add(i, 1)} {\n mstore(dataAreaEnd, mload(sourceOffset))\n dataAreaEnd := add(dataAreaEnd, 0x20)\n sourceOffset := add(sourceOffset, 0x20)\n }\n\n // Execute delegatecall\n let success := delegatecall(\n gas, // forward all gas, TODO: look into gas consumption of assert/throw\n address, // call address of this contract\n headerAreaStart, // pointer to start of input\n sub(dataAreaEnd, headerAreaStart), // length of input\n headerAreaStart, // write output over input\n 128 // output size is 128 bytes\n )\n switch success\n case 0 {\n mstore(fillResults, 0)\n mstore(add(fillResults, 32), 0)\n mstore(add(fillResults, 64), 0)\n mstore(add(fillResults, 96), 0)\n }\n case 1 {\n mstore(fillResults, mload(headerAreaStart))\n mstore(add(fillResults, 32), mload(add(headerAreaStart, 32)))\n mstore(add(fillResults, 64), mload(add(headerAreaStart, 64)))\n mstore(add(fillResults, 96), mload(add(headerAreaStart, 96)))\n }\n }\n return fillResults;\n }\n\n /// @dev Synchronously executes multiple calls of fillOrder.\n /// @param orders Array of order specifications.\n /// @param takerAssetFillAmounts Array of desired amounts of takerAsset to sell in orders.\n /// @param signatures Proofs that orders have been created by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n /// NOTE: makerAssetFilledAmount and takerAssetFilledAmount may include amounts filled of different assets.\n function batchFillOrders(\n LibOrder.Order[] memory orders,\n uint256[] memory takerAssetFillAmounts,\n bytes[] memory signatures\n )\n public\n returns (FillResults memory totalFillResults)\n {\n for (uint256 i = 0; i < orders.length; i++) {\n FillResults memory singleFillResults = fillOrder(\n orders[i],\n takerAssetFillAmounts[i],\n signatures[i]\n );\n addFillResults(totalFillResults, singleFillResults);\n }\n return totalFillResults;\n }\n\n /// @dev Synchronously executes multiple calls of fillOrKill.\n /// @param orders Array of order specifications.\n /// @param takerAssetFillAmounts Array of desired amounts of takerAsset to sell in orders.\n /// @param signatures Proofs that orders have been created by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n /// NOTE: makerAssetFilledAmount and takerAssetFilledAmount may include amounts filled of different assets.\n function batchFillOrKillOrders(\n LibOrder.Order[] memory orders,\n uint256[] memory takerAssetFillAmounts,\n bytes[] memory signatures\n )\n public\n returns (FillResults memory totalFillResults)\n {\n for (uint256 i = 0; i < orders.length; i++) {\n FillResults memory singleFillResults = fillOrKillOrder(\n orders[i],\n takerAssetFillAmounts[i],\n signatures[i]\n );\n addFillResults(totalFillResults, singleFillResults);\n }\n return totalFillResults;\n }\n\n /// @dev Fills an order with specified parameters and ECDSA signature.\n /// Returns false if the transaction would otherwise revert.\n /// @param orders Array of order specifications.\n /// @param takerAssetFillAmounts Array of desired amounts of takerAsset to sell in orders.\n /// @param signatures Proofs that orders have been created by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n /// NOTE: makerAssetFilledAmount and takerAssetFilledAmount may include amounts filled of different assets.\n function batchFillOrdersNoThrow(\n LibOrder.Order[] memory orders,\n uint256[] memory takerAssetFillAmounts,\n bytes[] memory signatures\n )\n public\n returns (FillResults memory totalFillResults)\n {\n for (uint256 i = 0; i < orders.length; i++) {\n FillResults memory singleFillResults = fillOrderNoThrow(\n orders[i],\n takerAssetFillAmounts[i],\n signatures[i]\n );\n addFillResults(totalFillResults, singleFillResults);\n }\n return totalFillResults;\n }\n\n /// @dev Synchronously executes multiple calls of fillOrder until total amount of takerAsset is sold by taker.\n /// @param orders Array of order specifications.\n /// @param takerAssetFillAmount Desired amount of takerAsset to sell.\n /// @param signatures Proofs that orders have been created by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n function marketSellOrders(\n LibOrder.Order[] memory orders,\n uint256 takerAssetFillAmount,\n bytes[] memory signatures\n )\n public\n returns (FillResults memory totalFillResults)\n {\n bytes memory takerAssetData = orders[0].takerAssetData;\n \n for (uint256 i = 0; i < orders.length; i++) {\n\n // We assume that asset being sold by taker is the same for each order.\n // Rather than passing this in as calldata, we use the takerAssetData from the first order in all later orders.\n orders[i].takerAssetData = takerAssetData;\n\n // Calculate the remaining amount of takerAsset to sell\n uint256 remainingTakerAssetFillAmount = safeSub(takerAssetFillAmount, totalFillResults.takerAssetFilledAmount);\n\n // Attempt to sell the remaining amount of takerAsset\n FillResults memory singleFillResults = fillOrder(\n orders[i],\n remainingTakerAssetFillAmount,\n signatures[i]\n );\n\n // Update amounts filled and fees paid by maker and taker\n addFillResults(totalFillResults, singleFillResults);\n\n // Stop execution if the entire amount of takerAsset has been sold\n if (totalFillResults.takerAssetFilledAmount == takerAssetFillAmount) {\n break;\n }\n }\n return totalFillResults;\n }\n\n /// @dev Synchronously executes multiple calls of fillOrder until total amount of takerAsset is sold by taker.\n /// Returns false if the transaction would otherwise revert.\n /// @param orders Array of order specifications.\n /// @param takerAssetFillAmount Desired amount of takerAsset to sell.\n /// @param signatures Proofs that orders have been signed by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n function marketSellOrdersNoThrow(\n LibOrder.Order[] memory orders,\n uint256 takerAssetFillAmount,\n bytes[] memory signatures\n )\n public\n returns (FillResults memory totalFillResults)\n {\n bytes memory takerAssetData = orders[0].takerAssetData;\n\n for (uint256 i = 0; i < orders.length; i++) {\n\n // We assume that asset being sold by taker is the same for each order.\n // Rather than passing this in as calldata, we use the takerAssetData from the first order in all later orders.\n orders[i].takerAssetData = takerAssetData;\n\n // Calculate the remaining amount of takerAsset to sell\n uint256 remainingTakerAssetFillAmount = safeSub(takerAssetFillAmount, totalFillResults.takerAssetFilledAmount);\n\n // Attempt to sell the remaining amount of takerAsset\n FillResults memory singleFillResults = fillOrderNoThrow(\n orders[i],\n remainingTakerAssetFillAmount,\n signatures[i]\n );\n\n // Update amounts filled and fees paid by maker and taker\n addFillResults(totalFillResults, singleFillResults);\n\n // Stop execution if the entire amount of takerAsset has been sold\n if (totalFillResults.takerAssetFilledAmount == takerAssetFillAmount) {\n break;\n }\n }\n return totalFillResults;\n }\n\n /// @dev Synchronously executes multiple calls of fillOrder until total amount of makerAsset is bought by taker.\n /// @param orders Array of order specifications.\n /// @param makerAssetFillAmount Desired amount of makerAsset to buy.\n /// @param signatures Proofs that orders have been signed by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n function marketBuyOrders(\n LibOrder.Order[] memory orders,\n uint256 makerAssetFillAmount,\n bytes[] memory signatures\n )\n public\n returns (FillResults memory totalFillResults)\n {\n bytes memory makerAssetData = orders[0].makerAssetData;\n\n for (uint256 i = 0; i < orders.length; i++) {\n\n // We assume that asset being bought by taker is the same for each order.\n // Rather than passing this in as calldata, we copy the makerAssetData from the first order onto all later orders.\n orders[i].makerAssetData = makerAssetData;\n\n // Calculate the remaining amount of makerAsset to buy\n uint256 remainingMakerAssetFillAmount = safeSub(makerAssetFillAmount, totalFillResults.makerAssetFilledAmount);\n\n // Convert the remaining amount of makerAsset to buy into remaining amount\n // of takerAsset to sell, assuming entire amount can be sold in the current order\n uint256 remainingTakerAssetFillAmount = getPartialAmount(\n orders[i].takerAssetAmount,\n orders[i].makerAssetAmount,\n remainingMakerAssetFillAmount\n );\n\n // Attempt to sell the remaining amount of takerAsset\n FillResults memory singleFillResults = fillOrder(\n orders[i],\n remainingTakerAssetFillAmount,\n signatures[i]\n );\n\n // Update amounts filled and fees paid by maker and taker\n addFillResults(totalFillResults, singleFillResults);\n\n // Stop execution if the entire amount of makerAsset has been bought\n if (totalFillResults.makerAssetFilledAmount == makerAssetFillAmount) {\n break;\n }\n }\n return totalFillResults;\n }\n\n /// @dev Synchronously executes multiple fill orders in a single transaction until total amount is bought by taker.\n /// Returns false if the transaction would otherwise revert.\n /// @param orders Array of order specifications.\n /// @param makerAssetFillAmount Desired amount of makerAsset to buy.\n /// @param signatures Proofs that orders have been signed by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n function marketBuyOrdersNoThrow(\n LibOrder.Order[] memory orders,\n uint256 makerAssetFillAmount,\n bytes[] memory signatures\n )\n public\n returns (FillResults memory totalFillResults)\n {\n bytes memory makerAssetData = orders[0].makerAssetData;\n\n for (uint256 i = 0; i < orders.length; i++) {\n\n // We assume that asset being bought by taker is the same for each order.\n // Rather than passing this in as calldata, we copy the makerAssetData from the first order onto all later orders.\n orders[i].makerAssetData = makerAssetData;\n\n // Calculate the remaining amount of makerAsset to buy\n uint256 remainingMakerAssetFillAmount = safeSub(makerAssetFillAmount, totalFillResults.makerAssetFilledAmount);\n\n // Convert the remaining amount of makerAsset to buy into remaining amount\n // of takerAsset to sell, assuming entire amount can be sold in the current order\n uint256 remainingTakerAssetFillAmount = getPartialAmount(\n orders[i].takerAssetAmount,\n orders[i].makerAssetAmount,\n remainingMakerAssetFillAmount\n );\n\n // Attempt to sell the remaining amount of takerAsset\n FillResults memory singleFillResults = fillOrderNoThrow(\n orders[i],\n remainingTakerAssetFillAmount,\n signatures[i]\n );\n\n // Update amounts filled and fees paid by maker and taker\n addFillResults(totalFillResults, singleFillResults);\n\n // Stop execution if the entire amount of makerAsset has been bought\n if (totalFillResults.makerAssetFilledAmount == makerAssetFillAmount) {\n break;\n }\n }\n return totalFillResults;\n }\n\n /// @dev Synchronously cancels multiple orders in a single transaction.\n /// @param orders Array of order specifications.\n function batchCancelOrders(LibOrder.Order[] memory orders)\n public\n {\n for (uint256 i = 0; i < orders.length; i++) {\n cancelOrder(orders[i]);\n }\n }\n}\n",
- "2.0.0/protocol/Exchange/interfaces/IAssetProxyDispatcher.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.24;\n\ncontract IAssetProxyDispatcher {\n\n /// @dev Registers an asset proxy to its asset proxy id.\n /// Once an asset proxy is registered, it cannot be unregistered.\n /// @param assetProxy Address of new asset proxy to register.\n function registerAssetProxy(address assetProxy)\n external;\n\n /// @dev Gets an asset proxy.\n /// @param assetProxyId Id of the asset proxy.\n /// @return The asset proxy registered to assetProxyId. Returns 0x0 if no proxy is registered.\n function getAssetProxy(bytes4 assetProxyId)\n external\n view\n returns (address);\n}\n",
- "2.0.0/protocol/Exchange/interfaces/IExchangeCore.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../libs/LibOrder.sol\";\nimport \"../libs/LibFillResults.sol\";\n\ncontract IExchangeCore {\n\n /// @dev Cancels all orders created by makerAddress with a salt less than or equal to the targetOrderEpoch\n /// and senderAddress equal to msg.sender (or null address if msg.sender == makerAddress).\n /// @param targetOrderEpoch Orders created with a salt less or equal to this value will be cancelled.\n function cancelOrdersUpTo(uint256 targetOrderEpoch)\n external;\n\n /// @dev Fills the input order.\n /// @param order Order struct containing order specifications.\n /// @param takerAssetFillAmount Desired amount of takerAsset to sell.\n /// @param signature Proof that order has been created by maker.\n /// @return Amounts filled and fees paid by maker and taker.\n function fillOrder(\n LibOrder.Order memory order,\n uint256 takerAssetFillAmount,\n bytes memory signature\n )\n public\n returns (LibFillResults.FillResults memory fillResults);\n\n /// @dev After calling, the order can not be filled anymore.\n /// @param order Order struct containing order specifications.\n function cancelOrder(LibOrder.Order memory order)\n public;\n\n /// @dev Gets information about an order: status, hash, and amount filled.\n /// @param order Order to gather information on.\n /// @return OrderInfo Information about the order and its state.\n /// See LibOrder.OrderInfo for a complete description.\n function getOrderInfo(LibOrder.Order memory order)\n public\n view\n returns (LibOrder.OrderInfo memory orderInfo);\n}\n",
- "2.0.0/protocol/Exchange/interfaces/IMatchOrders.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*/\npragma solidity ^0.4.24;\npragma experimental ABIEncoderV2;\n\nimport \"../libs/LibOrder.sol\";\nimport \"../libs/LibFillResults.sol\";\n\ncontract IMatchOrders {\n\n /// @dev Match two complementary orders that have a profitable spread.\n /// Each order is filled at their respective price point. However, the calculations are\n /// carried out as though the orders are both being filled at the right order's price point.\n /// The profit made by the left order goes to the taker (who matched the two orders).\n /// @param leftOrder First order to match.\n /// @param rightOrder Second order to match.\n /// @param leftSignature Proof that order was created by the left maker.\n /// @param rightSignature Proof that order was created by the right maker.\n /// @return matchedFillResults Amounts filled and fees paid by maker and taker of matched orders.\n /// TODO: Make this function external once supported by Solidity (See Solidity Issues #3199, #1603)\n function matchOrders(\n LibOrder.Order memory leftOrder,\n LibOrder.Order memory rightOrder,\n bytes memory leftSignature,\n bytes memory rightSignature\n )\n public\n returns (LibFillResults.MatchedFillResults memory matchedFillResults);\n}\n",
- "2.0.0/protocol/Exchange/interfaces/ISignatureValidator.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.24;\n\ncontract ISignatureValidator {\n\n /// @dev Approves a hash on-chain using any valid signature type.\n /// After presigning a hash, the preSign signature type will become valid for that hash and signer.\n /// @param signerAddress Address that should have signed the given hash.\n /// @param signature Proof that the hash has been signed by signer.\n function preSign(\n bytes32 hash,\n address signerAddress,\n bytes signature\n )\n external;\n \n /// @dev Approves/unnapproves a Validator contract to verify signatures on signer's behalf.\n /// @param validatorAddress Address of Validator contract.\n /// @param approval Approval or disapproval of Validator contract.\n function setSignatureValidatorApproval(\n address validatorAddress,\n bool approval\n )\n external;\n\n /// @dev Verifies that a signature is valid.\n /// @param hash Message hash that is signed.\n /// @param signerAddress Address of signer.\n /// @param signature Proof of signing.\n /// @return Validity of order signature.\n function isValidSignature(\n bytes32 hash,\n address signerAddress,\n bytes memory signature\n )\n public\n view\n returns (bool isValid);\n}\n",
- "2.0.0/protocol/Exchange/interfaces/ITransactions.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*/\npragma solidity ^0.4.24;\n\ncontract ITransactions {\n\n /// @dev Executes an exchange method call in the context of signer.\n /// @param salt Arbitrary number to ensure uniqueness of transaction hash.\n /// @param signerAddress Address of transaction signer.\n /// @param data AbiV2 encoded calldata.\n /// @param signature Proof of signer transaction by signer.\n function executeTransaction(\n uint256 salt,\n address signerAddress,\n bytes data,\n bytes signature\n )\n external;\n}\n",
- "2.0.0/protocol/Exchange/interfaces/IValidator.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.23;\n\ncontract IValidator {\n\n /// @dev Verifies that a signature is valid.\n /// @param hash Message hash that is signed.\n /// @param signerAddress Address that should have signed the given hash.\n /// @param signature Proof of signing.\n /// @return Validity of order signature.\n function isValidSignature(\n bytes32 hash,\n address signerAddress,\n bytes signature\n )\n external\n view\n returns (bool isValid);\n}\n",
- "2.0.0/protocol/Exchange/interfaces/IWallet.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.24;\n\ncontract IWallet {\n\n /// @dev Verifies that a signature is valid.\n /// @param hash Message hash that is signed.\n /// @param signature Proof of signing.\n /// @return Validity of order signature.\n function isValidSignature(\n bytes32 hash,\n bytes signature\n )\n external\n view\n returns (bool isValid);\n}\n",
- "2.0.0/protocol/Exchange/libs/LibConstants.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.24;\n\ncontract LibConstants {\n \n // Asset data for ZRX token. Used for fee transfers.\n // @TODO: Hardcode constant when we deploy. Currently \n // not constant to make testing easier.\n bytes public ZRX_ASSET_DATA;\n\n // @TODO: Remove when we deploy.\n constructor (bytes memory zrxAssetData)\n public\n {\n ZRX_ASSET_DATA = zrxAssetData;\n }\n}\n",
- "2.0.0/protocol/Exchange/libs/LibEIP712.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.24;\n\ncontract LibEIP712 {\n // EIP191 header for EIP712 prefix\n string constant EIP191_HEADER = \"\\x19\\x01\";\n\n // EIP712 Domain Name value\n string constant EIP712_DOMAIN_NAME = \"0x Protocol\";\n\n // EIP712 Domain Version value\n string constant EIP712_DOMAIN_VERSION = \"2\";\n\n // Hash of the EIP712 Domain Separator Schema\n bytes32 public constant EIP712_DOMAIN_SEPARATOR_SCHEMA_HASH = keccak256(abi.encodePacked(\n \"EIP712Domain(\",\n \"string name,\",\n \"string version,\",\n \"address verifyingContract\",\n \")\"\n ));\n\n // Hash of the EIP712 Domain Separator data\n bytes32 public EIP712_DOMAIN_HASH;\n\n constructor ()\n public\n {\n EIP712_DOMAIN_HASH = keccak256(abi.encode(\n EIP712_DOMAIN_SEPARATOR_SCHEMA_HASH,\n keccak256(bytes(EIP712_DOMAIN_NAME)),\n keccak256(bytes(EIP712_DOMAIN_VERSION)),\n address(this)\n ));\n }\n\n /// @dev Calculates EIP712 encoding for a hash struct in this EIP712 Domain.\n /// @param hashStruct The EIP712 hash struct.\n /// @return EIP712 hash applied to this EIP712 Domain.\n function hashEIP712Message(bytes32 hashStruct)\n internal\n view\n returns (bytes32)\n {\n return keccak256(abi.encodePacked(EIP191_HEADER, EIP712_DOMAIN_HASH, hashStruct));\n }\n}\n",
- "2.0.0/protocol/Exchange/libs/LibExchangeErrors.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.24;\n\n/// @dev This contract documents the revert reasons used in the Exchange contract.\n/// This contract is intended to serve as a reference, but is not actually used for efficiency reasons.\ncontract LibExchangeErrors {\n\n /// Order validation errors ///\n string constant ORDER_UNFILLABLE = \"ORDER_UNFILLABLE\"; // Order cannot be filled.\n string constant INVALID_MAKER = \"INVALID_MAKER\"; // Invalid makerAddress.\n string constant INVALID_TAKER = \"INVALID_TAKER\"; // Invalid takerAddress.\n string constant INVALID_SENDER = \"INVALID_SENDER\"; // Invalid `msg.sender`.\n string constant INVALID_ORDER_SIGNATURE = \"INVALID_ORDER_SIGNATURE\"; // Signature validation failed. \n \n /// fillOrder validation errors ///\n string constant INVALID_TAKER_AMOUNT = \"INVALID_TAKER_AMOUNT\"; // takerAssetFillAmount cannot equal 0.\n string constant ROUNDING_ERROR = \"ROUNDING_ERROR\"; // Rounding error greater than 0.1% of takerAssetFillAmount. \n \n /// Signature validation errors ///\n string constant INVALID_SIGNATURE = \"INVALID_SIGNATURE\"; // Signature validation failed. \n string constant SIGNATURE_ILLEGAL = \"SIGNATURE_ILLEGAL\"; // Signature type is illegal.\n string constant SIGNATURE_UNSUPPORTED = \"SIGNATURE_UNSUPPORTED\"; // Signature type unsupported.\n \n /// cancelOrdersUptTo errors ///\n string constant INVALID_NEW_ORDER_EPOCH = \"INVALID_NEW_ORDER_EPOCH\"; // Specified salt must be greater than or equal to existing orderEpoch.\n\n /// fillOrKillOrder errors ///\n string constant COMPLETE_FILL_FAILED = \"COMPLETE_FILL_FAILED\"; // Desired takerAssetFillAmount could not be completely filled. \n\n /// matchOrders errors ///\n string constant NEGATIVE_SPREAD_REQUIRED = \"NEGATIVE_SPREAD_REQUIRED\"; // Matched orders must have a negative spread.\n\n /// Transaction errors ///\n string constant REENTRANCY_ILLEGAL = \"REENTRANCY_ILLEGAL\"; // Recursive reentrancy is not allowed. \n string constant INVALID_TX_HASH = \"INVALID_TX_HASH\"; // Transaction has already been executed. \n string constant INVALID_TX_SIGNATURE = \"INVALID_TX_SIGNATURE\"; // Signature validation failed. \n string constant FAILED_EXECUTION = \"FAILED_EXECUTION\"; // Transaction execution failed. \n \n /// registerAssetProxy errors ///\n string constant ASSET_PROXY_ALREADY_EXISTS = \"ASSET_PROXY_ALREADY_EXISTS\"; // AssetProxy with same id already exists.\n\n /// dispatchTransferFrom errors ///\n string constant ASSET_PROXY_DOES_NOT_EXIST = \"ASSET_PROXY_DOES_NOT_EXIST\"; // No assetProxy registered at given id.\n string constant TRANSFER_FAILED = \"TRANSFER_FAILED\"; // Asset transfer unsuccesful.\n\n /// Length validation errors ///\n string constant LENGTH_GREATER_THAN_0_REQUIRED = \"LENGTH_GREATER_THAN_0_REQUIRED\"; // Byte array must have a length greater than 0.\n string constant LENGTH_GREATER_THAN_3_REQUIRED = \"LENGTH_GREATER_THAN_3_REQUIRED\"; // Byte array must have a length greater than 3.\n string constant LENGTH_0_REQUIRED = \"LENGTH_0_REQUIRED\"; // Byte array must have a length of 0.\n string constant LENGTH_65_REQUIRED = \"LENGTH_65_REQUIRED\"; // Byte array must have a length of 65.\n}\n",
- "2.0.0/protocol/Exchange/libs/LibFillResults.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.24;\n\nimport \"../../../utils/SafeMath/SafeMath.sol\";\n\ncontract LibFillResults is\n SafeMath\n{\n\n struct FillResults {\n uint256 makerAssetFilledAmount; // Total amount of makerAsset(s) filled.\n uint256 takerAssetFilledAmount; // Total amount of takerAsset(s) filled.\n uint256 makerFeePaid; // Total amount of ZRX paid by maker(s) to feeRecipient(s).\n uint256 takerFeePaid; // Total amount of ZRX paid by taker to feeRecipients(s).\n }\n\n struct MatchedFillResults {\n FillResults left; // Amounts filled and fees paid of left order.\n FillResults right; // Amounts filled and fees paid of right order.\n uint256 leftMakerAssetSpreadAmount; // Spread between price of left and right order, denominated in the left order's makerAsset, paid to taker.\n }\n\n /// @dev Adds properties of both FillResults instances.\n /// Modifies the first FillResults instance specified.\n /// @param totalFillResults Fill results instance that will be added onto.\n /// @param singleFillResults Fill results instance that will be added to totalFillResults.\n function addFillResults(FillResults memory totalFillResults, FillResults memory singleFillResults)\n internal\n pure\n {\n totalFillResults.makerAssetFilledAmount = safeAdd(totalFillResults.makerAssetFilledAmount, singleFillResults.makerAssetFilledAmount);\n totalFillResults.takerAssetFilledAmount = safeAdd(totalFillResults.takerAssetFilledAmount, singleFillResults.takerAssetFilledAmount);\n totalFillResults.makerFeePaid = safeAdd(totalFillResults.makerFeePaid, singleFillResults.makerFeePaid);\n totalFillResults.takerFeePaid = safeAdd(totalFillResults.takerFeePaid, singleFillResults.takerFeePaid);\n }\n}\n",
- "2.0.0/protocol/Exchange/libs/LibMath.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.24;\n\nimport \"../../../utils/SafeMath/SafeMath.sol\";\n\ncontract LibMath is\n SafeMath\n{\n\n /// @dev Calculates partial value given a numerator and denominator.\n /// @param numerator Numerator.\n /// @param denominator Denominator.\n /// @param target Value to calculate partial of.\n /// @return Partial value of target.\n function getPartialAmount(\n uint256 numerator,\n uint256 denominator,\n uint256 target)\n internal\n pure\n returns (uint256 partialAmount)\n {\n partialAmount = safeDiv(\n safeMul(numerator, target),\n denominator\n );\n return partialAmount;\n }\n\n /// @dev Checks if rounding error > 0.1%.\n /// @param numerator Numerator.\n /// @param denominator Denominator.\n /// @param target Value to multiply with numerator/denominator.\n /// @return Rounding error is present.\n function isRoundingError(\n uint256 numerator,\n uint256 denominator,\n uint256 target)\n internal\n pure\n returns (bool isError)\n {\n uint256 remainder = mulmod(target, numerator, denominator);\n if (remainder == 0) {\n return false; // No rounding error.\n }\n\n uint256 errPercentageTimes1000000 = safeDiv(\n safeMul(remainder, 1000000),\n safeMul(numerator, target)\n );\n isError = errPercentageTimes1000000 > 1000;\n return isError;\n }\n}\n",
- "2.0.0/protocol/Exchange/libs/LibOrder.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.24;\n\nimport \"./LibEIP712.sol\";\n\ncontract LibOrder is\n LibEIP712\n{\n\n // Hash for the EIP712 Order Schema\n bytes32 constant EIP712_ORDER_SCHEMA_HASH = keccak256(abi.encodePacked(\n \"Order(\",\n \"address makerAddress,\",\n \"address takerAddress,\",\n \"address feeRecipientAddress,\",\n \"address senderAddress,\",\n \"uint256 makerAssetAmount,\",\n \"uint256 takerAssetAmount,\",\n \"uint256 makerFee,\",\n \"uint256 takerFee,\",\n \"uint256 expirationTimeSeconds,\",\n \"uint256 salt,\",\n \"bytes makerAssetData,\",\n \"bytes takerAssetData\",\n \")\"\n ));\n\n // A valid order remains fillable until it is expired, fully filled, or cancelled.\n // An order's state is unaffected by external factors, like account balances.\n enum OrderStatus {\n INVALID, // Default value\n INVALID_MAKER_ASSET_AMOUNT, // Order does not have a valid maker asset amount\n INVALID_TAKER_ASSET_AMOUNT, // Order does not have a valid taker asset amount\n FILLABLE, // Order is fillable\n EXPIRED, // Order has already expired\n FULLY_FILLED, // Order is fully filled\n CANCELLED // Order has been cancelled\n }\n\n struct Order {\n address makerAddress; // Address that created the order. \n address takerAddress; // Address that is allowed to fill the order. If set to 0, any address is allowed to fill the order. \n address feeRecipientAddress; // Address that will recieve fees when order is filled. \n address senderAddress; // Address that is allowed to call Exchange contract methods that affect this order. If set to 0, any address is allowed to call these methods.\n uint256 makerAssetAmount; // Amount of makerAsset being offered by maker. Must be greater than 0. \n uint256 takerAssetAmount; // Amount of takerAsset being bid on by maker. Must be greater than 0. \n uint256 makerFee; // Amount of ZRX paid to feeRecipient by maker when order is filled. If set to 0, no transfer of ZRX from maker to feeRecipient will be attempted.\n uint256 takerFee; // Amount of ZRX paid to feeRecipient by taker when order is filled. If set to 0, no transfer of ZRX from taker to feeRecipient will be attempted.\n uint256 expirationTimeSeconds; // Timestamp in seconds at which order expires. \n uint256 salt; // Arbitrary number to facilitate uniqueness of the order's hash. \n bytes makerAssetData; // Encoded data that can be decoded by a specified proxy contract when transferring makerAsset. The last byte references the id of this proxy.\n bytes takerAssetData; // Encoded data that can be decoded by a specified proxy contract when transferring takerAsset. The last byte references the id of this proxy.\n }\n\n struct OrderInfo {\n uint8 orderStatus; // Status that describes order's validity and fillability.\n bytes32 orderHash; // EIP712 hash of the order (see LibOrder.getOrderHash).\n uint256 orderTakerAssetFilledAmount; // Amount of order that has already been filled.\n }\n\n /// @dev Calculates Keccak-256 hash of the order.\n /// @param order The order structure.\n /// @return Keccak-256 EIP712 hash of the order.\n function getOrderHash(Order memory order)\n internal\n view\n returns (bytes32 orderHash)\n {\n orderHash = hashEIP712Message(hashOrder(order));\n return orderHash;\n }\n\n /// @dev Calculates EIP712 hash of the order.\n /// @param order The order structure.\n /// @return EIP712 hash of the order.\n function hashOrder(Order memory order)\n internal\n pure\n returns (bytes32 result)\n {\n bytes32 schemaHash = EIP712_ORDER_SCHEMA_HASH;\n bytes32 makerAssetDataHash = keccak256(order.makerAssetData);\n bytes32 takerAssetDataHash = keccak256(order.takerAssetData);\n // Assembly for more efficiently computing:\n // keccak256(abi.encode(\n // order.makerAddress,\n // order.takerAddress,\n // order.feeRecipientAddress,\n // order.senderAddress,\n // order.makerAssetAmount,\n // order.takerAssetAmount,\n // order.makerFee,\n // order.takerFee,\n // order.expirationTimeSeconds,\n // order.salt,\n // keccak256(order.makerAssetData),\n // keccak256(order.takerAssetData)\n // ));\n assembly {\n // Backup\n let temp1 := mload(sub(order, 32))\n let temp2 := mload(add(order, 320))\n let temp3 := mload(add(order, 352))\n \n // Hash in place\n mstore(sub(order, 32), schemaHash)\n mstore(add(order, 320), makerAssetDataHash)\n mstore(add(order, 352), takerAssetDataHash)\n result := keccak256(sub(order, 32), 416)\n \n // Restore\n mstore(sub(order, 32), temp1)\n mstore(add(order, 320), temp2)\n mstore(add(order, 352), temp3)\n }\n return result;\n }\n}\n",
- "2.0.0/protocol/Exchange/mixins/MAssetProxyDispatcher.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../interfaces/IAssetProxyDispatcher.sol\";\n\ncontract MAssetProxyDispatcher is\n IAssetProxyDispatcher\n{\n\n // Logs registration of new asset proxy\n event AssetProxyRegistered(\n bytes4 id, // Id of new registered AssetProxy.\n address assetProxy // Address of new registered AssetProxy.\n );\n\n /// @dev Forwards arguments to assetProxy and calls `transferFrom`. Either succeeds or throws.\n /// @param assetData Byte array encoded for the asset.\n /// @param from Address to transfer token from.\n /// @param to Address to transfer token to.\n /// @param amount Amount of token to transfer.\n function dispatchTransferFrom(\n bytes memory assetData,\n address from,\n address to,\n uint256 amount\n )\n internal;\n}\n",
- "2.0.0/protocol/Exchange/mixins/MExchangeCore.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../libs/LibOrder.sol\";\nimport \"../libs/LibFillResults.sol\";\nimport \"../interfaces/IExchangeCore.sol\";\n\ncontract MExchangeCore is\n IExchangeCore\n{\n // Fill event is emitted whenever an order is filled.\n event Fill(\n address indexed makerAddress, // Address that created the order. \n address indexed feeRecipientAddress, // Address that received fees.\n address takerAddress, // Address that filled the order.\n address senderAddress, // Address that called the Exchange contract (msg.sender).\n uint256 makerAssetFilledAmount, // Amount of makerAsset sold by maker and bought by taker. \n uint256 takerAssetFilledAmount, // Amount of takerAsset sold by taker and bought by maker.\n uint256 makerFeePaid, // Amount of ZRX paid to feeRecipient by maker.\n uint256 takerFeePaid, // Amount of ZRX paid to feeRecipient by taker.\n bytes32 indexed orderHash, // EIP712 hash of order (see LibOrder.getOrderHash).\n bytes makerAssetData, // Encoded data specific to makerAsset. \n bytes takerAssetData // Encoded data specific to takerAsset.\n );\n\n // Cancel event is emitted whenever an individual order is cancelled.\n event Cancel(\n address indexed makerAddress, // Address that created the order. \n address indexed feeRecipientAddress, // Address that would have recieved fees if order was filled. \n address senderAddress, // Address that called the Exchange contract (msg.sender).\n bytes32 indexed orderHash, // EIP712 hash of order (see LibOrder.getOrderHash).\n bytes makerAssetData, // Encoded data specific to makerAsset. \n bytes takerAssetData // Encoded data specific to takerAsset.\n );\n\n // CancelUpTo event is emitted whenever `cancelOrdersUpTo` is executed succesfully.\n event CancelUpTo(\n address indexed makerAddress, // Orders cancelled must have been created by this address.\n address indexed senderAddress, // Orders cancelled must have a `senderAddress` equal to this address.\n uint256 orderEpoch // Orders specified makerAddress and senderAddress with a salt <= this value are considered cancelled.\n );\n\n /// @dev Updates state with results of a fill order.\n /// @param order that was filled.\n /// @param takerAddress Address of taker who filled the order.\n /// @param orderTakerAssetFilledAmount Amount of order already filled.\n /// @return fillResults Amounts filled and fees paid by maker and taker.\n function updateFilledState(\n LibOrder.Order memory order,\n address takerAddress,\n bytes32 orderHash,\n uint256 orderTakerAssetFilledAmount,\n LibFillResults.FillResults memory fillResults\n )\n internal;\n\n /// @dev Updates state with results of cancelling an order.\n /// State is only updated if the order is currently fillable.\n /// Otherwise, updating state would have no effect.\n /// @param order that was cancelled.\n /// @param orderHash Hash of order that was cancelled.\n function updateCancelledState(\n LibOrder.Order memory order,\n bytes32 orderHash\n )\n internal;\n\n /// @dev Validates context for fillOrder. Succeeds or throws.\n /// @param order to be filled.\n /// @param orderInfo Status, orderHash, and amount already filled of order.\n /// @param takerAddress Address of order taker.\n /// @param takerAssetFillAmount Desired amount of order to fill by taker.\n /// @param takerAssetFilledAmount Amount of takerAsset that will be filled.\n /// @param signature Proof that the orders was created by its maker.\n function assertValidFill(\n LibOrder.Order memory order,\n LibOrder.OrderInfo memory orderInfo,\n address takerAddress,\n uint256 takerAssetFillAmount,\n uint256 takerAssetFilledAmount,\n bytes memory signature\n )\n internal\n view;\n\n\n /// @dev Validates context for cancelOrder. Succeeds or throws.\n /// @param order to be cancelled.\n /// @param orderInfo OrderStatus, orderHash, and amount already filled of order.\n function assertValidCancel(\n LibOrder.Order memory order,\n LibOrder.OrderInfo memory orderInfo\n )\n internal\n view;\n\n /// @dev Calculates amounts filled and fees paid by maker and taker.\n /// @param order to be filled.\n /// @param takerAssetFilledAmount Amount of takerAsset that will be filled.\n /// @return fillResults Amounts filled and fees paid by maker and taker.\n function calculateFillResults(\n LibOrder.Order memory order,\n uint256 takerAssetFilledAmount\n )\n internal\n pure\n returns (LibFillResults.FillResults memory fillResults);\n\n}\n",
- "2.0.0/protocol/Exchange/mixins/MMatchOrders.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*/\npragma solidity ^0.4.24;\npragma experimental ABIEncoderV2;\n\nimport \"../libs/LibOrder.sol\";\nimport \"../libs/LibFillResults.sol\";\nimport \"../interfaces/IMatchOrders.sol\";\n\ncontract MMatchOrders is\n IMatchOrders\n{\n\n /// @dev Validates context for matchOrders. Succeeds or throws.\n /// @param leftOrder First order to match.\n /// @param rightOrder Second order to match.\n function assertValidMatch(\n LibOrder.Order memory leftOrder,\n LibOrder.Order memory rightOrder\n )\n internal\n pure;\n\n /// @dev Calculates fill amounts for the matched orders.\n /// Each order is filled at their respective price point. However, the calculations are\n /// carried out as though the orders are both being filled at the right order's price point.\n /// The profit made by the leftOrder order goes to the taker (who matched the two orders).\n /// @param leftOrder First order to match.\n /// @param rightOrder Second order to match.\n /// @param leftOrderTakerAssetFilledAmount Amount of left order already filled.\n /// @param rightOrderTakerAssetFilledAmount Amount of right order already filled.\n /// @param matchedFillResults Amounts to fill and fees to pay by maker and taker of matched orders.\n function calculateMatchedFillResults(\n LibOrder.Order memory leftOrder,\n LibOrder.Order memory rightOrder,\n uint256 leftOrderTakerAssetFilledAmount,\n uint256 rightOrderTakerAssetFilledAmount\n )\n internal\n pure\n returns (LibFillResults.MatchedFillResults memory matchedFillResults);\n\n}\n",
- "2.0.0/protocol/Exchange/mixins/MSignatureValidator.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.24;\n\nimport \"../interfaces/ISignatureValidator.sol\";\n\ncontract MSignatureValidator is\n ISignatureValidator\n{\n event SignatureValidatorApproval(\n address indexed signerAddress, // Address that approves or disapproves a contract to verify signatures.\n address indexed validatorAddress, // Address of signature validator contract.\n bool approved // Approval or disapproval of validator contract.\n );\n\n // Allowed signature types.\n enum SignatureType {\n Illegal, // 0x00, default value\n Invalid, // 0x01\n EIP712, // 0x02\n EthSign, // 0x03\n Caller, // 0x04\n Wallet, // 0x05\n Validator, // 0x06\n PreSigned, // 0x07\n Trezor, // 0x08\n NSignatureTypes // 0x09, number of signature types. Always leave at end.\n }\n}\n",
- "2.0.0/protocol/Exchange/mixins/MTransactions.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*/\npragma solidity ^0.4.24;\n\nimport \"../interfaces/ITransactions.sol\";\n\ncontract MTransactions is\n ITransactions\n{\n\n /// @dev The current function will be called in the context of this address (either 0x transaction signer or `msg.sender`).\n /// If calling a fill function, this address will represent the taker.\n /// If calling a cancel function, this address will represent the maker.\n /// @return Signer of 0x transaction if entry point is `executeTransaction`.\n /// `msg.sender` if entry point is any other function.\n function getCurrentContextAddress()\n internal\n view\n returns (address);\n}\n",
- "2.0.0/utils/LibBytes/LibBytes.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.24;\n\nlibrary LibBytes {\n\n using LibBytes for bytes;\n\n /// @dev Gets the memory address for a byte array.\n /// @param input Byte array to lookup.\n /// @return memoryAddress Memory address of byte array. This\n /// points to the header of the byte array which contains\n /// the length.\n function rawAddress(bytes memory input)\n internal\n pure\n returns (uint256 memoryAddress)\n {\n assembly {\n memoryAddress := input\n }\n return memoryAddress;\n }\n \n /// @dev Gets the memory address for the contents of a byte array.\n /// @param input Byte array to lookup.\n /// @return memoryAddress Memory address of the contents of the byte array.\n function contentAddress(bytes memory input)\n internal\n pure\n returns (uint256 memoryAddress)\n {\n assembly {\n memoryAddress := add(input, 32)\n }\n return memoryAddress;\n }\n\n /// @dev Copies `length` bytes from memory location `source` to `dest`.\n /// @param dest memory address to copy bytes to.\n /// @param source memory address to copy bytes from.\n /// @param length number of bytes to copy.\n function memCopy(\n uint256 dest,\n uint256 source,\n uint256 length\n )\n internal\n pure\n {\n if (length < 32) {\n // Handle a partial word by reading destination and masking\n // off the bits we are interested in.\n // This correctly handles overlap, zero lengths and source == dest\n assembly {\n let mask := sub(exp(256, sub(32, length)), 1)\n let s := and(mload(source), not(mask))\n let d := and(mload(dest), mask)\n mstore(dest, or(s, d))\n }\n } else {\n // Skip the O(length) loop when source == dest.\n if (source == dest) {\n return;\n }\n\n // For large copies we copy whole words at a time. The final\n // word is aligned to the end of the range (instead of after the\n // previous) to handle partial words. So a copy will look like this:\n //\n // ####\n // ####\n // ####\n // ####\n //\n // We handle overlap in the source and destination range by\n // changing the copying direction. This prevents us from\n // overwriting parts of source that we still need to copy.\n //\n // This correctly handles source == dest\n //\n if (source > dest) {\n assembly {\n // We subtract 32 from `sEnd` and `dEnd` because it\n // is easier to compare with in the loop, and these\n // are also the addresses we need for copying the\n // last bytes.\n length := sub(length, 32)\n let sEnd := add(source, length)\n let dEnd := add(dest, length)\n\n // Remember the last 32 bytes of source\n // This needs to be done here and not after the loop\n // because we may have overwritten the last bytes in\n // source already due to overlap.\n let last := mload(sEnd)\n\n // Copy whole words front to back\n // Note: the first check is always true,\n // this could have been a do-while loop.\n for {} lt(source, sEnd) {} {\n mstore(dest, mload(source))\n source := add(source, 32)\n dest := add(dest, 32)\n }\n \n // Write the last 32 bytes\n mstore(dEnd, last)\n }\n } else {\n assembly {\n // We subtract 32 from `sEnd` and `dEnd` because those\n // are the starting points when copying a word at the end.\n length := sub(length, 32)\n let sEnd := add(source, length)\n let dEnd := add(dest, length)\n\n // Remember the first 32 bytes of source\n // This needs to be done here and not after the loop\n // because we may have overwritten the first bytes in\n // source already due to overlap.\n let first := mload(source)\n\n // Copy whole words back to front\n // We use a signed comparisson here to allow dEnd to become\n // negative (happens when source and dest < 32). Valid\n // addresses in local memory will never be larger than\n // 2**255, so they can be safely re-interpreted as signed.\n // Note: the first check is always true,\n // this could have been a do-while loop.\n for {} slt(dest, dEnd) {} {\n mstore(dEnd, mload(sEnd))\n sEnd := sub(sEnd, 32)\n dEnd := sub(dEnd, 32)\n }\n \n // Write the first 32 bytes\n mstore(dest, first)\n }\n }\n }\n }\n \n /// @dev Returns a slices from a byte array.\n /// @param b The byte array to take a slice from.\n /// @param from The starting index for the slice (inclusive).\n /// @param to The final index for the slice (exclusive).\n /// @return result The slice containing bytes at indices [from, to)\n function slice(bytes memory b, uint256 from, uint256 to)\n internal\n pure\n returns (bytes memory result)\n {\n require(\n from <= to,\n \"FROM_LESS_THAN_TO_REQUIRED\"\n );\n require(\n to < b.length,\n \"TO_LESS_THAN_LENGTH_REQUIRED\"\n );\n \n // Create a new bytes structure and copy contents\n result = new bytes(to - from);\n memCopy(\n result.contentAddress(),\n b.contentAddress() + from,\n result.length);\n return result;\n }\n \n /// @dev Returns a slice from a byte array without preserving the input.\n /// @param b The byte array to take a slice from. Will be destroyed in the process.\n /// @param from The starting index for the slice (inclusive).\n /// @param to The final index for the slice (exclusive).\n /// @return result The slice containing bytes at indices [from, to)\n /// @dev When `from == 0`, the original array will match the slice. In other cases its state will be corrupted.\n function sliceDestructive(bytes memory b, uint256 from, uint256 to)\n internal\n pure\n returns (bytes memory result)\n {\n require(\n from <= to,\n \"FROM_LESS_THAN_TO_REQUIRED\"\n );\n require(\n to < b.length,\n \"TO_LESS_THAN_LENGTH_REQUIRED\"\n );\n \n // Create a new bytes structure around [from, to) in-place.\n assembly {\n result := add(b, from)\n mstore(result, sub(to, from))\n }\n return result;\n }\n\n /// @dev Pops the last byte off of a byte array by modifying its length.\n /// @param b Byte array that will be modified.\n /// @return The byte that was popped off.\n function popLastByte(bytes memory b)\n internal\n pure\n returns (bytes1 result)\n {\n require(\n b.length > 0,\n \"GREATER_THAN_ZERO_LENGTH_REQUIRED\"\n );\n\n // Store last byte.\n result = b[b.length - 1];\n\n assembly {\n // Decrement length of byte array.\n let newLen := sub(mload(b), 1)\n mstore(b, newLen)\n }\n return result;\n }\n\n /// @dev Pops the last 20 bytes off of a byte array by modifying its length.\n /// @param b Byte array that will be modified.\n /// @return The 20 byte address that was popped off.\n function popLast20Bytes(bytes memory b)\n internal\n pure\n returns (address result)\n {\n require(\n b.length >= 20,\n \"GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\"\n );\n\n // Store last 20 bytes.\n result = readAddress(b, b.length - 20);\n\n assembly {\n // Subtract 20 from byte array length.\n let newLen := sub(mload(b), 20)\n mstore(b, newLen)\n }\n return result;\n }\n\n /// @dev Tests equality of two byte arrays.\n /// @param lhs First byte array to compare.\n /// @param rhs Second byte array to compare.\n /// @return True if arrays are the same. False otherwise.\n function equals(\n bytes memory lhs,\n bytes memory rhs\n )\n internal\n pure\n returns (bool equal)\n {\n // Keccak gas cost is 30 + numWords * 6. This is a cheap way to compare.\n // We early exit on unequal lengths, but keccak would also correctly\n // handle this.\n return lhs.length == rhs.length && keccak256(lhs) == keccak256(rhs);\n }\n\n /// @dev Reads an address from a position in a byte array.\n /// @param b Byte array containing an address.\n /// @param index Index in byte array of address.\n /// @return address from byte array.\n function readAddress(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (address result)\n {\n require(\n b.length >= index + 20, // 20 is length of address\n \"GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\"\n );\n\n // Add offset to index:\n // 1. Arrays are prefixed by 32-byte length parameter (add 32 to index)\n // 2. Account for size difference between address length and 32-byte storage word (subtract 12 from index)\n index += 20;\n\n // Read address from array memory\n assembly {\n // 1. Add index to address of bytes array\n // 2. Load 32-byte word from memory\n // 3. Apply 20-byte mask to obtain address\n result := and(mload(add(b, index)), 0xffffffffffffffffffffffffffffffffffffffff)\n }\n return result;\n }\n\n /// @dev Writes an address into a specific position in a byte array.\n /// @param b Byte array to insert address into.\n /// @param index Index in byte array of address.\n /// @param input Address to put into byte array.\n function writeAddress(\n bytes memory b,\n uint256 index,\n address input\n )\n internal\n pure\n {\n require(\n b.length >= index + 20, // 20 is length of address\n \"GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\"\n );\n\n // Add offset to index:\n // 1. Arrays are prefixed by 32-byte length parameter (add 32 to index)\n // 2. Account for size difference between address length and 32-byte storage word (subtract 12 from index)\n index += 20;\n\n // Store address into array memory\n assembly {\n // The address occupies 20 bytes and mstore stores 32 bytes.\n // First fetch the 32-byte word where we'll be storing the address, then\n // apply a mask so we have only the bytes in the word that the address will not occupy.\n // Then combine these bytes with the address and store the 32 bytes back to memory with mstore.\n\n // 1. Add index to address of bytes array\n // 2. Load 32-byte word from memory\n // 3. Apply 12-byte mask to obtain extra bytes occupying word of memory where we'll store the address\n let neighbors := and(mload(add(b, index)), 0xffffffffffffffffffffffff0000000000000000000000000000000000000000)\n \n // Make sure input address is clean.\n // (Solidity does not guarantee this)\n input := and(input, 0xffffffffffffffffffffffffffffffffffffffff)\n\n // Store the neighbors and address into memory\n mstore(add(b, index), xor(input, neighbors))\n }\n }\n\n /// @dev Reads a bytes32 value from a position in a byte array.\n /// @param b Byte array containing a bytes32 value.\n /// @param index Index in byte array of bytes32 value.\n /// @return bytes32 value from byte array.\n function readBytes32(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (bytes32 result)\n {\n require(\n b.length >= index + 32,\n \"GREATER_OR_EQUAL_TO_32_LENGTH_REQUIRED\"\n );\n\n // Arrays are prefixed by a 256 bit length parameter\n index += 32;\n\n // Read the bytes32 from array memory\n assembly {\n result := mload(add(b, index))\n }\n return result;\n }\n\n /// @dev Writes a bytes32 into a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input bytes32 to put into byte array.\n function writeBytes32(\n bytes memory b,\n uint256 index,\n bytes32 input\n )\n internal\n pure\n {\n require(\n b.length >= index + 32,\n \"GREATER_OR_EQUAL_TO_32_LENGTH_REQUIRED\"\n );\n\n // Arrays are prefixed by a 256 bit length parameter\n index += 32;\n\n // Read the bytes32 from array memory\n assembly {\n mstore(add(b, index), input)\n }\n }\n\n /// @dev Reads a uint256 value from a position in a byte array.\n /// @param b Byte array containing a uint256 value.\n /// @param index Index in byte array of uint256 value.\n /// @return uint256 value from byte array.\n function readUint256(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (uint256 result)\n {\n return uint256(readBytes32(b, index));\n }\n\n /// @dev Writes a uint256 into a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input uint256 to put into byte array.\n function writeUint256(\n bytes memory b,\n uint256 index,\n uint256 input\n )\n internal\n pure\n {\n writeBytes32(b, index, bytes32(input));\n }\n\n /// @dev Reads an unpadded bytes4 value from a position in a byte array.\n /// @param b Byte array containing a bytes4 value.\n /// @param index Index in byte array of bytes4 value.\n /// @return bytes4 value from byte array.\n function readBytes4(\n bytes memory b,\n uint256 index)\n internal\n pure\n returns (bytes4 result)\n {\n require(\n b.length >= index + 4,\n \"GREATER_OR_EQUAL_TO_4_LENGTH_REQUIRED\"\n );\n assembly {\n result := mload(add(b, 32))\n // Solidity does not require us to clean the trailing bytes.\n // We do it anyway\n result := and(result, 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000)\n }\n return result;\n }\n\n /// @dev Reads nested bytes from a specific position.\n /// @dev NOTE: the returned value overlaps with the input value.\n /// Both should be treated as immutable.\n /// @param b Byte array containing nested bytes.\n /// @param index Index of nested bytes.\n /// @return result Nested bytes.\n function readBytesWithLength(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (bytes memory result)\n {\n // Read length of nested bytes\n uint256 nestedBytesLength = readUint256(b, index);\n index += 32;\n\n // Assert length of <b> is valid, given\n // length of nested bytes\n require(\n b.length >= index + nestedBytesLength,\n \"GREATER_OR_EQUAL_TO_NESTED_BYTES_LENGTH_REQUIRED\"\n );\n \n // Return a pointer to the byte array as it exists inside `b`\n assembly {\n result := add(b, index)\n }\n return result;\n }\n\n /// @dev Inserts bytes at a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input bytes to insert.\n function writeBytesWithLength(\n bytes memory b,\n uint256 index,\n bytes memory input\n )\n internal\n pure\n {\n // Assert length of <b> is valid, given\n // length of input\n require(\n b.length >= index + 32 /* 32 bytes to store length */ + input.length,\n \"GREATER_OR_EQUAL_TO_NESTED_BYTES_LENGTH_REQUIRED\"\n );\n\n // Copy <input> into <b>\n memCopy(\n b.contentAddress() + index,\n input.rawAddress(), // includes length of <input>\n input.length + 32 // +32 bytes to store <input> length\n );\n }\n\n /// @dev Performs a deep copy of a byte array onto another byte array of greater than or equal length.\n /// @param dest Byte array that will be overwritten with source bytes.\n /// @param source Byte array to copy onto dest bytes.\n function deepCopyBytes(\n bytes memory dest,\n bytes memory source\n )\n internal\n pure\n {\n uint256 sourceLen = source.length;\n // Dest length must be >= source length, or some bytes would not be copied.\n require(\n dest.length >= sourceLen,\n \"GREATER_OR_EQUAL_TO_SOURCE_BYTES_LENGTH_REQUIRED\"\n );\n memCopy(\n dest.contentAddress(),\n source.contentAddress(),\n sourceLen\n );\n }\n}\n",
- "2.0.0/utils/Ownable/IOwnable.sol": "pragma solidity ^0.4.24;\npragma experimental ABIEncoderV2;\n\n/*\n * Ownable\n *\n * Base contract with an owner.\n * Provides onlyOwner modifier, which prevents function from running if it is called by anyone other than the owner.\n */\n\ncontract IOwnable {\n function transferOwnership(address newOwner)\n public;\n}\n",
- "2.0.0/utils/Ownable/Ownable.sol": "pragma solidity ^0.4.24;\npragma experimental ABIEncoderV2;\n\n/*\n * Ownable\n *\n * Base contract with an owner.\n * Provides onlyOwner modifier, which prevents function from running if it is called by anyone other than the owner.\n */\n\nimport \"./IOwnable.sol\";\n\ncontract Ownable is IOwnable {\n address public owner;\n\n constructor ()\n public\n {\n owner = msg.sender;\n }\n\n modifier onlyOwner() {\n require(\n msg.sender == owner,\n \"ONLY_CONTRACT_OWNER\"\n );\n _;\n }\n\n function transferOwnership(address newOwner)\n public\n onlyOwner\n {\n if (newOwner != address(0)) {\n owner = newOwner;\n }\n }\n}\n",
- "2.0.0/utils/SafeMath/SafeMath.sol": "pragma solidity ^0.4.24;\npragma experimental ABIEncoderV2;\n\ncontract SafeMath {\n function safeMul(uint a, uint b)\n internal\n pure\n returns (uint256)\n {\n uint c = a * b;\n assert(a == 0 || c / a == b);\n return c;\n }\n\n function safeDiv(uint a, uint b)\n internal\n pure\n returns (uint256)\n {\n uint c = a / b;\n return c;\n }\n\n function safeSub(uint a, uint b)\n internal\n pure\n returns (uint256)\n {\n assert(b <= a);\n return a - b;\n }\n\n function safeAdd(uint a, uint b)\n internal\n pure\n returns (uint256)\n {\n uint c = a + b;\n assert(c >= a);\n return c;\n }\n\n function max64(uint64 a, uint64 b)\n internal\n pure\n returns (uint256)\n {\n return a >= b ? a : b;\n }\n\n function min64(uint64 a, uint64 b)\n internal\n pure\n returns (uint256)\n {\n return a < b ? a : b;\n }\n\n function max256(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n return a >= b ? a : b;\n }\n\n function min256(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n return a < b ? a : b;\n }\n}\n"
+ "2.0.0/protocol/AssetProxy/interfaces/IAssetProxy.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.24;\n\nimport \"./IAuthorizable.sol\";\n\n\ncontract IAssetProxy is\n IAuthorizable\n{\n\n /// @dev Transfers assets. Either succeeds or throws.\n /// @param assetData Byte array encoded for the respective asset proxy.\n /// @param from Address to transfer asset from.\n /// @param to Address to transfer asset to.\n /// @param amount Amount of asset to transfer.\n function transferFrom(\n bytes assetData,\n address from,\n address to,\n uint256 amount\n )\n external;\n \n /// @dev Gets the proxy id associated with the proxy address.\n /// @return Proxy id.\n function getProxyId()\n external\n pure\n returns (bytes4);\n}\n",
+ "2.0.0/protocol/AssetProxy/interfaces/IAuthorizable.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.24;\n\nimport \"../../../utils/Ownable/IOwnable.sol\";\n\n\ncontract IAuthorizable is\n IOwnable\n{\n\n /// @dev Authorizes an address.\n /// @param target Address to authorize.\n function addAuthorizedAddress(address target)\n external;\n\n /// @dev Removes authorizion of an address.\n /// @param target Address to remove authorization from.\n function removeAuthorizedAddress(address target)\n external;\n\n /// @dev Removes authorizion of an address.\n /// @param target Address to remove authorization from.\n /// @param index Index of target in authorities array.\n function removeAuthorizedAddressAtIndex(\n address target,\n uint256 index\n )\n external;\n \n /// @dev Gets all authorized addresses.\n /// @return Array of authorized addresses.\n function getAuthorizedAddresses()\n external\n view\n returns (address[] memory);\n}\n",
+ "2.0.0/protocol/Exchange/Exchange.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"./libs/LibConstants.sol\";\nimport \"./MixinExchangeCore.sol\";\nimport \"./MixinSignatureValidator.sol\";\nimport \"./MixinWrapperFunctions.sol\";\nimport \"./MixinAssetProxyDispatcher.sol\";\nimport \"./MixinTransactions.sol\";\nimport \"./MixinMatchOrders.sol\";\n\n\n// solhint-disable no-empty-blocks\ncontract Exchange is\n MixinExchangeCore,\n MixinMatchOrders,\n MixinSignatureValidator,\n MixinTransactions,\n MixinAssetProxyDispatcher,\n MixinWrapperFunctions\n{\n\n string constant public VERSION = \"2.0.1-alpha\";\n\n // Mixins are instantiated in the order they are inherited\n constructor (bytes memory _zrxAssetData)\n public\n LibConstants(_zrxAssetData) // @TODO: Remove when we deploy.\n MixinExchangeCore()\n MixinMatchOrders()\n MixinSignatureValidator()\n MixinTransactions()\n MixinAssetProxyDispatcher()\n MixinWrapperFunctions()\n {}\n}\n",
+ "2.0.0/protocol/Exchange/MixinAssetProxyDispatcher.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.24;\n\nimport \"../../utils/Ownable/Ownable.sol\";\nimport \"../../utils/LibBytes/LibBytes.sol\";\nimport \"./mixins/MAssetProxyDispatcher.sol\";\nimport \"../AssetProxy/interfaces/IAssetProxy.sol\";\n\n\ncontract MixinAssetProxyDispatcher is\n Ownable,\n MAssetProxyDispatcher\n{\n using LibBytes for bytes;\n \n // Mapping from Asset Proxy Id's to their respective Asset Proxy\n mapping (bytes4 => IAssetProxy) public assetProxies;\n\n /// @dev Registers an asset proxy to its asset proxy id.\n /// Once an asset proxy is registered, it cannot be unregistered.\n /// @param assetProxy Address of new asset proxy to register.\n function registerAssetProxy(address assetProxy)\n external\n onlyOwner\n {\n IAssetProxy assetProxyContract = IAssetProxy(assetProxy);\n\n // Ensure that no asset proxy exists with current id.\n bytes4 assetProxyId = assetProxyContract.getProxyId();\n address currentAssetProxy = assetProxies[assetProxyId];\n require(\n currentAssetProxy == address(0),\n \"ASSET_PROXY_ALREADY_EXISTS\"\n );\n\n // Add asset proxy and log registration.\n assetProxies[assetProxyId] = assetProxyContract;\n emit AssetProxyRegistered(\n assetProxyId,\n assetProxy\n );\n }\n\n /// @dev Gets an asset proxy.\n /// @param assetProxyId Id of the asset proxy.\n /// @return The asset proxy registered to assetProxyId. Returns 0x0 if no proxy is registered.\n function getAssetProxy(bytes4 assetProxyId)\n external\n view\n returns (address)\n {\n return assetProxies[assetProxyId];\n }\n\n /// @dev Forwards arguments to assetProxy and calls `transferFrom`. Either succeeds or throws.\n /// @param assetData Byte array encoded for the asset.\n /// @param from Address to transfer token from.\n /// @param to Address to transfer token to.\n /// @param amount Amount of token to transfer.\n function dispatchTransferFrom(\n bytes memory assetData,\n address from,\n address to,\n uint256 amount\n )\n internal\n {\n // Do nothing if no amount should be transferred.\n if (amount > 0) {\n // Ensure assetData length is valid\n require(\n assetData.length > 3,\n \"LENGTH_GREATER_THAN_3_REQUIRED\"\n );\n \n // Lookup assetProxy\n bytes4 assetProxyId;\n assembly {\n assetProxyId := and(mload(\n add(assetData, 32)),\n 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000\n )\n }\n address assetProxy = assetProxies[assetProxyId];\n\n // Ensure that assetProxy exists\n require(\n assetProxy != address(0),\n \"ASSET_PROXY_DOES_NOT_EXIST\"\n );\n \n // We construct calldata for the `assetProxy.transferFrom` ABI.\n // The layout of this calldata is in the table below.\n // \n // | Area | Offset | Length | Contents |\n // | -------- |--------|---------|-------------------------------------------- |\n // | Header | 0 | 4 | function selector |\n // | Params | | 4 * 32 | function parameters: |\n // | | 4 | | 1. offset to assetData (*) |\n // | | 36 | | 2. from |\n // | | 68 | | 3. to |\n // | | 100 | | 4. amount |\n // | Data | | | assetData: |\n // | | 132 | 32 | assetData Length |\n // | | 164 | ** | assetData Contents |\n\n assembly {\n /////// Setup State ///////\n // `cdStart` is the start of the calldata for `assetProxy.transferFrom` (equal to free memory ptr).\n let cdStart := mload(64)\n // `dataAreaLength` is the total number of words needed to store `assetData`\n // As-per the ABI spec, this value is padded up to the nearest multiple of 32,\n // and includes 32-bytes for length.\n let dataAreaLength := and(add(mload(assetData), 63), 0xFFFFFFFFFFFE0)\n // `cdEnd` is the end of the calldata for `assetProxy.transferFrom`.\n let cdEnd := add(cdStart, add(132, dataAreaLength))\n\n \n /////// Setup Header Area ///////\n // This area holds the 4-byte `transferFromSelector`.\n // bytes4(keccak256(\"transferFrom(bytes,address,address,uint256)\")) = 0xa85e59e4\n mstore(cdStart, 0xa85e59e400000000000000000000000000000000000000000000000000000000)\n \n /////// Setup Params Area ///////\n // Each parameter is padded to 32-bytes. The entire Params Area is 128 bytes.\n // Notes:\n // 1. The offset to `assetData` is the length of the Params Area (128 bytes).\n // 2. A 20-byte mask is applied to addresses to zero-out the unused bytes.\n mstore(add(cdStart, 4), 128)\n mstore(add(cdStart, 36), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\n mstore(add(cdStart, 68), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\n mstore(add(cdStart, 100), amount)\n \n /////// Setup Data Area ///////\n // This area holds `assetData`.\n let dataArea := add(cdStart, 132)\n // solhint-disable-next-line no-empty-blocks\n for {} lt(dataArea, cdEnd) {} {\n mstore(dataArea, mload(assetData))\n dataArea := add(dataArea, 32)\n assetData := add(assetData, 32)\n }\n\n /////// Call `assetProxy.transferFrom` using the constructed calldata ///////\n let success := call(\n gas, // forward all gas\n assetProxy, // call address of asset proxy\n 0, // don't send any ETH\n cdStart, // pointer to start of input\n sub(cdEnd, cdStart), // length of input \n cdStart, // write output over input\n 512 // reserve 512 bytes for output\n )\n if iszero(success) {\n revert(cdStart, returndatasize())\n }\n }\n }\n }\n}\n",
+ "2.0.0/protocol/Exchange/MixinExchangeCore.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"./libs/LibConstants.sol\";\nimport \"./libs/LibFillResults.sol\";\nimport \"./libs/LibOrder.sol\";\nimport \"./libs/LibMath.sol\";\nimport \"./mixins/MExchangeCore.sol\";\nimport \"./mixins/MSignatureValidator.sol\";\nimport \"./mixins/MTransactions.sol\";\nimport \"./mixins/MAssetProxyDispatcher.sol\";\n\n\ncontract MixinExchangeCore is\n LibConstants,\n LibMath,\n LibOrder,\n LibFillResults,\n MAssetProxyDispatcher,\n MExchangeCore,\n MSignatureValidator,\n MTransactions\n{\n // Mapping of orderHash => amount of takerAsset already bought by maker\n mapping (bytes32 => uint256) public filled;\n\n // Mapping of orderHash => cancelled\n mapping (bytes32 => bool) public cancelled;\n\n // Mapping of makerAddress => senderAddress => lowest salt an order can have in order to be fillable\n // Orders with specified senderAddress and with a salt less than their epoch to are considered cancelled\n mapping (address => mapping (address => uint256)) public orderEpoch;\n\n /// @dev Cancels all orders created by makerAddress with a salt less than or equal to the targetOrderEpoch\n /// and senderAddress equal to msg.sender (or null address if msg.sender == makerAddress).\n /// @param targetOrderEpoch Orders created with a salt less or equal to this value will be cancelled.\n function cancelOrdersUpTo(uint256 targetOrderEpoch)\n external\n {\n address makerAddress = getCurrentContextAddress();\n // If this function is called via `executeTransaction`, we only update the orderEpoch for the makerAddress/msg.sender combination.\n // This allows external filter contracts to add rules to how orders are cancelled via this function.\n address senderAddress = makerAddress == msg.sender ? address(0) : msg.sender;\n\n // orderEpoch is initialized to 0, so to cancelUpTo we need salt + 1\n uint256 newOrderEpoch = targetOrderEpoch + 1; \n uint256 oldOrderEpoch = orderEpoch[makerAddress][senderAddress];\n\n // Ensure orderEpoch is monotonically increasing\n require(\n newOrderEpoch > oldOrderEpoch, \n \"INVALID_NEW_ORDER_EPOCH\"\n );\n\n // Update orderEpoch\n orderEpoch[makerAddress][senderAddress] = newOrderEpoch;\n emit CancelUpTo(makerAddress, senderAddress, newOrderEpoch);\n }\n\n /// @dev Fills the input order.\n /// @param order Order struct containing order specifications.\n /// @param takerAssetFillAmount Desired amount of takerAsset to sell.\n /// @param signature Proof that order has been created by maker.\n /// @return Amounts filled and fees paid by maker and taker.\n function fillOrder(\n Order memory order,\n uint256 takerAssetFillAmount,\n bytes memory signature\n )\n public\n returns (FillResults memory fillResults)\n {\n // Fetch order info\n OrderInfo memory orderInfo = getOrderInfo(order);\n\n // Fetch taker address\n address takerAddress = getCurrentContextAddress();\n\n // Get amount of takerAsset to fill\n uint256 remainingTakerAssetAmount = safeSub(order.takerAssetAmount, orderInfo.orderTakerAssetFilledAmount);\n uint256 takerAssetFilledAmount = min256(takerAssetFillAmount, remainingTakerAssetAmount);\n\n // Validate context\n assertValidFill(\n order,\n orderInfo,\n takerAddress,\n takerAssetFillAmount,\n takerAssetFilledAmount,\n signature\n );\n\n // Compute proportional fill amounts\n fillResults = calculateFillResults(order, takerAssetFilledAmount);\n\n // Update exchange internal state\n updateFilledState(\n order,\n takerAddress,\n orderInfo.orderHash,\n orderInfo.orderTakerAssetFilledAmount,\n fillResults\n );\n \n // Settle order\n settleOrder(order, takerAddress, fillResults);\n\n return fillResults;\n }\n\n /// @dev After calling, the order can not be filled anymore.\n /// Throws if order is invalid or sender does not have permission to cancel.\n /// @param order Order to cancel. Order must be OrderStatus.FILLABLE.\n function cancelOrder(Order memory order)\n public\n {\n // Fetch current order status\n OrderInfo memory orderInfo = getOrderInfo(order);\n\n // Validate context\n assertValidCancel(order, orderInfo);\n\n // Perform cancel\n updateCancelledState(order, orderInfo.orderHash);\n }\n\n /// @dev Gets information about an order: status, hash, and amount filled.\n /// @param order Order to gather information on.\n /// @return OrderInfo Information about the order and its state.\n /// See LibOrder.OrderInfo for a complete description.\n function getOrderInfo(Order memory order)\n public\n view\n returns (OrderInfo memory orderInfo)\n {\n // Compute the order hash\n orderInfo.orderHash = getOrderHash(order);\n\n // Fetch filled amount\n orderInfo.orderTakerAssetFilledAmount = filled[orderInfo.orderHash];\n\n // If order.makerAssetAmount is zero, we also reject the order.\n // While the Exchange contract handles them correctly, they create\n // edge cases in the supporting infrastructure because they have\n // an 'infinite' price when computed by a simple division.\n if (order.makerAssetAmount == 0) {\n orderInfo.orderStatus = uint8(OrderStatus.INVALID_MAKER_ASSET_AMOUNT);\n return orderInfo;\n }\n\n // If order.takerAssetAmount is zero, then the order will always\n // be considered filled because 0 == takerAssetAmount == orderTakerAssetFilledAmount\n // Instead of distinguishing between unfilled and filled zero taker\n // amount orders, we choose not to support them.\n if (order.takerAssetAmount == 0) {\n orderInfo.orderStatus = uint8(OrderStatus.INVALID_TAKER_ASSET_AMOUNT);\n return orderInfo;\n }\n\n // Validate order availability\n if (orderInfo.orderTakerAssetFilledAmount >= order.takerAssetAmount) {\n orderInfo.orderStatus = uint8(OrderStatus.FULLY_FILLED);\n return orderInfo;\n }\n\n // Validate order expiration\n // solhint-disable-next-line not-rely-on-time\n if (block.timestamp >= order.expirationTimeSeconds) {\n orderInfo.orderStatus = uint8(OrderStatus.EXPIRED);\n return orderInfo;\n }\n\n // Check if order has been cancelled\n if (cancelled[orderInfo.orderHash]) {\n orderInfo.orderStatus = uint8(OrderStatus.CANCELLED);\n return orderInfo;\n }\n if (orderEpoch[order.makerAddress][order.senderAddress] > order.salt) {\n orderInfo.orderStatus = uint8(OrderStatus.CANCELLED);\n return orderInfo;\n }\n\n // All other statuses are ruled out: order is Fillable\n orderInfo.orderStatus = uint8(OrderStatus.FILLABLE);\n return orderInfo;\n }\n\n /// @dev Updates state with results of a fill order.\n /// @param order that was filled.\n /// @param takerAddress Address of taker who filled the order.\n /// @param orderTakerAssetFilledAmount Amount of order already filled.\n /// @return fillResults Amounts filled and fees paid by maker and taker.\n function updateFilledState(\n Order memory order,\n address takerAddress,\n bytes32 orderHash,\n uint256 orderTakerAssetFilledAmount,\n FillResults memory fillResults\n )\n internal\n {\n // Update state\n filled[orderHash] = safeAdd(orderTakerAssetFilledAmount, fillResults.takerAssetFilledAmount);\n\n // Log order\n emit Fill(\n order.makerAddress,\n order.feeRecipientAddress,\n takerAddress,\n msg.sender,\n fillResults.makerAssetFilledAmount,\n fillResults.takerAssetFilledAmount,\n fillResults.makerFeePaid,\n fillResults.takerFeePaid,\n orderHash,\n order.makerAssetData,\n order.takerAssetData\n );\n }\n\n /// @dev Updates state with results of cancelling an order.\n /// State is only updated if the order is currently fillable.\n /// Otherwise, updating state would have no effect.\n /// @param order that was cancelled.\n /// @param orderHash Hash of order that was cancelled.\n function updateCancelledState(\n Order memory order,\n bytes32 orderHash\n )\n internal\n {\n // Perform cancel\n cancelled[orderHash] = true;\n\n // Log cancel\n emit Cancel(\n order.makerAddress,\n order.feeRecipientAddress,\n msg.sender,\n orderHash,\n order.makerAssetData,\n order.takerAssetData\n );\n }\n\n /// @dev Validates context for fillOrder. Succeeds or throws.\n /// @param order to be filled.\n /// @param orderInfo OrderStatus, orderHash, and amount already filled of order.\n /// @param takerAddress Address of order taker.\n /// @param takerAssetFillAmount Desired amount of order to fill by taker.\n /// @param takerAssetFilledAmount Amount of takerAsset that will be filled.\n /// @param signature Proof that the orders was created by its maker.\n function assertValidFill(\n Order memory order,\n OrderInfo memory orderInfo,\n address takerAddress,\n uint256 takerAssetFillAmount,\n uint256 takerAssetFilledAmount,\n bytes memory signature\n )\n internal\n view\n {\n // An order can only be filled if its status is FILLABLE.\n require(\n orderInfo.orderStatus == uint8(OrderStatus.FILLABLE),\n \"ORDER_UNFILLABLE\"\n );\n\n // Revert if fill amount is invalid\n require(\n takerAssetFillAmount != 0,\n \"INVALID_TAKER_AMOUNT\"\n );\n\n // Validate sender is allowed to fill this order\n if (order.senderAddress != address(0)) {\n require(\n order.senderAddress == msg.sender,\n \"INVALID_SENDER\"\n );\n }\n\n // Validate taker is allowed to fill this order\n if (order.takerAddress != address(0)) {\n require(\n order.takerAddress == takerAddress,\n \"INVALID_TAKER\"\n );\n }\n\n // Validate Maker signature (check only if first time seen)\n if (orderInfo.orderTakerAssetFilledAmount == 0) {\n require(\n isValidSignature(\n orderInfo.orderHash,\n order.makerAddress,\n signature\n ),\n \"INVALID_ORDER_SIGNATURE\"\n );\n }\n\n // Validate fill order rounding\n require(\n !isRoundingError(\n takerAssetFilledAmount,\n order.takerAssetAmount,\n order.makerAssetAmount\n ),\n \"ROUNDING_ERROR\"\n );\n }\n\n /// @dev Validates context for cancelOrder. Succeeds or throws.\n /// @param order to be cancelled.\n /// @param orderInfo OrderStatus, orderHash, and amount already filled of order.\n function assertValidCancel(\n Order memory order,\n OrderInfo memory orderInfo\n )\n internal\n view\n {\n // Ensure order is valid\n // An order can only be cancelled if its status is FILLABLE.\n require(\n orderInfo.orderStatus == uint8(OrderStatus.FILLABLE),\n \"ORDER_UNFILLABLE\"\n );\n\n // Validate sender is allowed to cancel this order\n if (order.senderAddress != address(0)) {\n require(\n order.senderAddress == msg.sender,\n \"INVALID_SENDER\"\n );\n }\n\n // Validate transaction signed by maker\n address makerAddress = getCurrentContextAddress();\n require(\n order.makerAddress == makerAddress,\n \"INVALID_MAKER\"\n );\n }\n\n /// @dev Calculates amounts filled and fees paid by maker and taker.\n /// @param order to be filled.\n /// @param takerAssetFilledAmount Amount of takerAsset that will be filled.\n /// @return fillResults Amounts filled and fees paid by maker and taker.\n function calculateFillResults(\n Order memory order,\n uint256 takerAssetFilledAmount\n )\n internal\n pure\n returns (FillResults memory fillResults)\n {\n // Compute proportional transfer amounts\n fillResults.takerAssetFilledAmount = takerAssetFilledAmount;\n fillResults.makerAssetFilledAmount = getPartialAmount(\n takerAssetFilledAmount,\n order.takerAssetAmount,\n order.makerAssetAmount\n );\n fillResults.makerFeePaid = getPartialAmount(\n takerAssetFilledAmount,\n order.takerAssetAmount,\n order.makerFee\n );\n fillResults.takerFeePaid = getPartialAmount(\n takerAssetFilledAmount,\n order.takerAssetAmount,\n order.takerFee\n );\n\n return fillResults;\n }\n\n /// @dev Settles an order by transferring assets between counterparties.\n /// @param order Order struct containing order specifications.\n /// @param takerAddress Address selling takerAsset and buying makerAsset.\n /// @param fillResults Amounts to be filled and fees paid by maker and taker.\n function settleOrder(\n LibOrder.Order memory order,\n address takerAddress,\n LibFillResults.FillResults memory fillResults\n )\n private\n {\n bytes memory zrxAssetData = ZRX_ASSET_DATA;\n dispatchTransferFrom(\n order.makerAssetData,\n order.makerAddress,\n takerAddress,\n fillResults.makerAssetFilledAmount\n );\n dispatchTransferFrom(\n order.takerAssetData,\n takerAddress,\n order.makerAddress,\n fillResults.takerAssetFilledAmount\n );\n dispatchTransferFrom(\n zrxAssetData,\n order.makerAddress,\n order.feeRecipientAddress,\n fillResults.makerFeePaid\n );\n dispatchTransferFrom(\n zrxAssetData,\n takerAddress,\n order.feeRecipientAddress,\n fillResults.takerFeePaid\n );\n }\n}\n",
+ "2.0.0/protocol/Exchange/MixinMatchOrders.sol": "/*\n Copyright 2018 ZeroEx Intl.\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 http://www.apache.org/licenses/LICENSE-2.0\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\npragma solidity 0.4.24;\npragma experimental ABIEncoderV2;\n\nimport \"./libs/LibConstants.sol\";\nimport \"./libs/LibMath.sol\";\nimport \"./libs/LibOrder.sol\";\nimport \"./libs/LibFillResults.sol\";\nimport \"./mixins/MExchangeCore.sol\";\nimport \"./mixins/MMatchOrders.sol\";\nimport \"./mixins/MTransactions.sol\";\nimport \"./mixins/MAssetProxyDispatcher.sol\";\n\n\ncontract MixinMatchOrders is\n LibConstants,\n LibMath,\n MAssetProxyDispatcher,\n MExchangeCore,\n MMatchOrders,\n MTransactions\n{\n /// @dev Match two complementary orders that have a profitable spread.\n /// Each order is filled at their respective price point. However, the calculations are\n /// carried out as though the orders are both being filled at the right order's price point.\n /// The profit made by the left order goes to the taker (who matched the two orders).\n /// @param leftOrder First order to match.\n /// @param rightOrder Second order to match.\n /// @param leftSignature Proof that order was created by the left maker.\n /// @param rightSignature Proof that order was created by the right maker.\n /// @return matchedFillResults Amounts filled and fees paid by maker and taker of matched orders.\n function matchOrders(\n LibOrder.Order memory leftOrder,\n LibOrder.Order memory rightOrder,\n bytes memory leftSignature,\n bytes memory rightSignature\n )\n public\n returns (LibFillResults.MatchedFillResults memory matchedFillResults)\n {\n // We assume that rightOrder.takerAssetData == leftOrder.makerAssetData and rightOrder.makerAssetData == leftOrder.takerAssetData.\n // If this assumption isn't true, the match will fail at signature validation.\n rightOrder.makerAssetData = leftOrder.takerAssetData;\n rightOrder.takerAssetData = leftOrder.makerAssetData;\n\n // Get left & right order info\n LibOrder.OrderInfo memory leftOrderInfo = getOrderInfo(leftOrder);\n LibOrder.OrderInfo memory rightOrderInfo = getOrderInfo(rightOrder);\n\n // Fetch taker address\n address takerAddress = getCurrentContextAddress();\n\n // Either our context is valid or we revert\n assertValidMatch(leftOrder, rightOrder);\n\n // Compute proportional fill amounts\n matchedFillResults = calculateMatchedFillResults(\n leftOrder,\n rightOrder,\n leftOrderInfo.orderTakerAssetFilledAmount,\n rightOrderInfo.orderTakerAssetFilledAmount\n );\n\n // Validate fill contexts\n assertValidFill(\n leftOrder,\n leftOrderInfo,\n takerAddress,\n matchedFillResults.left.takerAssetFilledAmount,\n matchedFillResults.left.takerAssetFilledAmount,\n leftSignature\n );\n assertValidFill(\n rightOrder,\n rightOrderInfo,\n takerAddress,\n matchedFillResults.right.takerAssetFilledAmount,\n matchedFillResults.right.takerAssetFilledAmount,\n rightSignature\n );\n\n // Update exchange state\n updateFilledState(\n leftOrder,\n takerAddress,\n leftOrderInfo.orderHash,\n leftOrderInfo.orderTakerAssetFilledAmount,\n matchedFillResults.left\n );\n updateFilledState(\n rightOrder,\n takerAddress,\n rightOrderInfo.orderHash,\n rightOrderInfo.orderTakerAssetFilledAmount,\n matchedFillResults.right\n );\n \n // Settle matched orders. Succeeds or throws.\n settleMatchedOrders(\n leftOrder,\n rightOrder,\n takerAddress,\n matchedFillResults\n );\n\n return matchedFillResults;\n }\n\n /// @dev Validates context for matchOrders. Succeeds or throws.\n /// @param leftOrder First order to match.\n /// @param rightOrder Second order to match.\n function assertValidMatch(\n LibOrder.Order memory leftOrder,\n LibOrder.Order memory rightOrder\n )\n internal\n pure\n {\n // Make sure there is a profitable spread.\n // There is a profitable spread iff the cost per unit bought (OrderA.MakerAmount/OrderA.TakerAmount) for each order is greater\n // than the profit per unit sold of the matched order (OrderB.TakerAmount/OrderB.MakerAmount).\n // This is satisfied by the equations below:\n // <leftOrder.makerAssetAmount> / <leftOrder.takerAssetAmount> >= <rightOrder.takerAssetAmount> / <rightOrder.makerAssetAmount>\n // AND\n // <rightOrder.makerAssetAmount> / <rightOrder.takerAssetAmount> >= <leftOrder.takerAssetAmount> / <leftOrder.makerAssetAmount>\n // These equations can be combined to get the following:\n require(\n safeMul(leftOrder.makerAssetAmount, rightOrder.makerAssetAmount) >=\n safeMul(leftOrder.takerAssetAmount, rightOrder.takerAssetAmount),\n \"NEGATIVE_SPREAD_REQUIRED\"\n );\n }\n\n /// @dev Calculates fill amounts for the matched orders.\n /// Each order is filled at their respective price point. However, the calculations are\n /// carried out as though the orders are both being filled at the right order's price point.\n /// The profit made by the leftOrder order goes to the taker (who matched the two orders).\n /// @param leftOrder First order to match.\n /// @param rightOrder Second order to match.\n /// @param leftOrderTakerAssetFilledAmount Amount of left order already filled.\n /// @param rightOrderTakerAssetFilledAmount Amount of right order already filled.\n /// @param matchedFillResults Amounts to fill and fees to pay by maker and taker of matched orders.\n function calculateMatchedFillResults(\n LibOrder.Order memory leftOrder,\n LibOrder.Order memory rightOrder,\n uint256 leftOrderTakerAssetFilledAmount,\n uint256 rightOrderTakerAssetFilledAmount\n )\n internal\n pure\n returns (LibFillResults.MatchedFillResults memory matchedFillResults)\n {\n // We settle orders at the exchange rate of the right order.\n // The amount saved by the left maker goes to the taker.\n // Either the left or right order will be fully filled; possibly both.\n // The left order is fully filled iff the right order can sell more than left can buy.\n // That is: the amount required to fill the left order is less than or equal to\n // the amount we can spend from the right order:\n // <leftTakerAssetAmountRemaining> <= <rightTakerAssetAmountRemaining> * <rightMakerToTakerRatio>\n // <leftTakerAssetAmountRemaining> <= <rightTakerAssetAmountRemaining> * <rightOrder.makerAssetAmount> / <rightOrder.takerAssetAmount>\n // <leftTakerAssetAmountRemaining> * <rightOrder.takerAssetAmount> <= <rightTakerAssetAmountRemaining> * <rightOrder.makerAssetAmount>\n uint256 leftTakerAssetAmountRemaining = safeSub(leftOrder.takerAssetAmount, leftOrderTakerAssetFilledAmount);\n uint256 rightTakerAssetAmountRemaining = safeSub(rightOrder.takerAssetAmount, rightOrderTakerAssetFilledAmount);\n uint256 leftTakerAssetFilledAmount;\n uint256 rightTakerAssetFilledAmount;\n if (\n safeMul(leftTakerAssetAmountRemaining, rightOrder.takerAssetAmount) <=\n safeMul(rightTakerAssetAmountRemaining, rightOrder.makerAssetAmount)\n ) {\n // Left order will be fully filled: maximally fill left\n leftTakerAssetFilledAmount = leftTakerAssetAmountRemaining;\n\n // The right order receives an amount proportional to how much was spent.\n rightTakerAssetFilledAmount = getPartialAmount(\n rightOrder.takerAssetAmount,\n rightOrder.makerAssetAmount,\n leftTakerAssetFilledAmount\n );\n } else {\n // Right order will be fully filled: maximally fill right\n rightTakerAssetFilledAmount = rightTakerAssetAmountRemaining;\n\n // The left order receives an amount proportional to how much was spent.\n leftTakerAssetFilledAmount = getPartialAmount(\n rightOrder.makerAssetAmount,\n rightOrder.takerAssetAmount,\n rightTakerAssetFilledAmount\n );\n }\n\n // Calculate fill results for left order\n matchedFillResults.left = calculateFillResults(\n leftOrder,\n leftTakerAssetFilledAmount\n );\n\n // Calculate fill results for right order\n matchedFillResults.right = calculateFillResults(\n rightOrder,\n rightTakerAssetFilledAmount\n );\n\n // Calculate amount given to taker\n matchedFillResults.leftMakerAssetSpreadAmount = safeSub(\n matchedFillResults.left.makerAssetFilledAmount,\n matchedFillResults.right.takerAssetFilledAmount\n );\n\n // Return fill results\n return matchedFillResults;\n }\n\n /// @dev Settles matched order by transferring appropriate funds between order makers, taker, and fee recipient.\n /// @param leftOrder First matched order.\n /// @param rightOrder Second matched order.\n /// @param takerAddress Address that matched the orders. The taker receives the spread between orders as profit.\n /// @param matchedFillResults Struct holding amounts to transfer between makers, taker, and fee recipients.\n function settleMatchedOrders(\n LibOrder.Order memory leftOrder,\n LibOrder.Order memory rightOrder,\n address takerAddress,\n LibFillResults.MatchedFillResults memory matchedFillResults\n )\n private\n {\n bytes memory zrxAssetData = ZRX_ASSET_DATA;\n // Order makers and taker\n dispatchTransferFrom(\n leftOrder.makerAssetData,\n leftOrder.makerAddress,\n rightOrder.makerAddress,\n matchedFillResults.right.takerAssetFilledAmount\n );\n dispatchTransferFrom(\n rightOrder.makerAssetData,\n rightOrder.makerAddress,\n leftOrder.makerAddress,\n matchedFillResults.left.takerAssetFilledAmount\n );\n dispatchTransferFrom(\n leftOrder.makerAssetData,\n leftOrder.makerAddress,\n takerAddress,\n matchedFillResults.leftMakerAssetSpreadAmount\n );\n\n // Maker fees\n dispatchTransferFrom(\n zrxAssetData,\n leftOrder.makerAddress,\n leftOrder.feeRecipientAddress,\n matchedFillResults.left.makerFeePaid\n );\n dispatchTransferFrom(\n zrxAssetData,\n rightOrder.makerAddress,\n rightOrder.feeRecipientAddress,\n matchedFillResults.right.makerFeePaid\n );\n\n // Taker fees\n if (leftOrder.feeRecipientAddress == rightOrder.feeRecipientAddress) {\n dispatchTransferFrom(\n zrxAssetData,\n takerAddress,\n leftOrder.feeRecipientAddress,\n safeAdd(\n matchedFillResults.left.takerFeePaid,\n matchedFillResults.right.takerFeePaid\n )\n );\n } else {\n dispatchTransferFrom(\n zrxAssetData,\n takerAddress,\n leftOrder.feeRecipientAddress,\n matchedFillResults.left.takerFeePaid\n );\n dispatchTransferFrom(\n zrxAssetData,\n takerAddress,\n rightOrder.feeRecipientAddress,\n matchedFillResults.right.takerFeePaid\n );\n }\n }\n}\n",
+ "2.0.0/protocol/Exchange/MixinSignatureValidator.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.24;\n\nimport \"../../utils/LibBytes/LibBytes.sol\";\nimport \"./mixins/MSignatureValidator.sol\";\nimport \"./mixins/MTransactions.sol\";\nimport \"./interfaces/IWallet.sol\";\nimport \"./interfaces/IValidator.sol\";\n\n\ncontract MixinSignatureValidator is\n MSignatureValidator,\n MTransactions\n{\n using LibBytes for bytes;\n \n // Mapping of hash => signer => signed\n mapping (bytes32 => mapping (address => bool)) public preSigned;\n\n // Mapping of signer => validator => approved\n mapping (address => mapping (address => bool)) public allowedValidators;\n\n /// @dev Approves a hash on-chain using any valid signature type.\n /// After presigning a hash, the preSign signature type will become valid for that hash and signer.\n /// @param signerAddress Address that should have signed the given hash.\n /// @param signature Proof that the hash has been signed by signer.\n function preSign(\n bytes32 hash,\n address signerAddress,\n bytes signature\n )\n external\n {\n require(\n isValidSignature(\n hash,\n signerAddress,\n signature\n ),\n \"INVALID_SIGNATURE\"\n );\n preSigned[hash][signerAddress] = true;\n }\n\n /// @dev Approves/unnapproves a Validator contract to verify signatures on signer's behalf.\n /// @param validatorAddress Address of Validator contract.\n /// @param approval Approval or disapproval of Validator contract.\n function setSignatureValidatorApproval(\n address validatorAddress,\n bool approval\n )\n external\n {\n address signerAddress = getCurrentContextAddress();\n allowedValidators[signerAddress][validatorAddress] = approval;\n emit SignatureValidatorApproval(\n signerAddress,\n validatorAddress,\n approval\n );\n }\n\n /// @dev Verifies that a hash has been signed by the given signer.\n /// @param hash Any 32 byte hash.\n /// @param signerAddress Address that should have signed the given hash.\n /// @param signature Proof that the hash has been signed by signer.\n /// @return True if the address recovered from the provided signature matches the input signer address.\n function isValidSignature(\n bytes32 hash,\n address signerAddress,\n bytes memory signature\n )\n public\n view\n returns (bool isValid)\n {\n require(\n signature.length > 0,\n \"LENGTH_GREATER_THAN_0_REQUIRED\"\n );\n\n // Ensure signature is supported\n uint8 signatureTypeRaw = uint8(signature.popLastByte());\n require(\n signatureTypeRaw < uint8(SignatureType.NSignatureTypes),\n \"SIGNATURE_UNSUPPORTED\"\n );\n\n // Pop last byte off of signature byte array.\n SignatureType signatureType = SignatureType(signatureTypeRaw);\n\n // Variables are not scoped in Solidity.\n uint8 v;\n bytes32 r;\n bytes32 s;\n address recovered;\n\n // Always illegal signature.\n // This is always an implicit option since a signer can create a\n // signature array with invalid type or length. We may as well make\n // it an explicit option. This aids testing and analysis. It is\n // also the initialization value for the enum type.\n if (signatureType == SignatureType.Illegal) {\n revert(\"SIGNATURE_ILLEGAL\");\n\n // Always invalid signature.\n // Like Illegal, this is always implicitly available and therefore\n // offered explicitly. It can be implicitly created by providing\n // a correctly formatted but incorrect signature.\n } else if (signatureType == SignatureType.Invalid) {\n require(\n signature.length == 0,\n \"LENGTH_0_REQUIRED\"\n );\n isValid = false;\n return isValid;\n\n // Signature using EIP712\n } else if (signatureType == SignatureType.EIP712) {\n require(\n signature.length == 65,\n \"LENGTH_65_REQUIRED\"\n );\n v = uint8(signature[0]);\n r = signature.readBytes32(1);\n s = signature.readBytes32(33);\n recovered = ecrecover(hash, v, r, s);\n isValid = signerAddress == recovered;\n return isValid;\n\n // Signed using web3.eth_sign\n } else if (signatureType == SignatureType.EthSign) {\n require(\n signature.length == 65,\n \"LENGTH_65_REQUIRED\"\n );\n v = uint8(signature[0]);\n r = signature.readBytes32(1);\n s = signature.readBytes32(33);\n recovered = ecrecover(\n keccak256(abi.encodePacked(\n \"\\x19Ethereum Signed Message:\\n32\",\n hash\n )),\n v,\n r,\n s\n );\n isValid = signerAddress == recovered;\n return isValid;\n\n // Implicitly signed by caller.\n // The signer has initiated the call. In the case of non-contract\n // accounts it means the transaction itself was signed.\n // Example: let's say for a particular operation three signatures\n // A, B and C are required. To submit the transaction, A and B can\n // give a signature to C, who can then submit the transaction using\n // `Caller` for his own signature. Or A and C can sign and B can\n // submit using `Caller`. Having `Caller` allows this flexibility.\n } else if (signatureType == SignatureType.Caller) {\n require(\n signature.length == 0,\n \"LENGTH_0_REQUIRED\"\n );\n isValid = signerAddress == msg.sender;\n return isValid;\n\n // Signature verified by wallet contract.\n // If used with an order, the maker of the order is the wallet contract.\n } else if (signatureType == SignatureType.Wallet) {\n isValid = IWallet(signerAddress).isValidSignature(hash, signature);\n return isValid;\n\n // Signature verified by validator contract.\n // If used with an order, the maker of the order can still be an EOA.\n // A signature using this type should be encoded as:\n // | Offset | Length | Contents |\n // | 0x00 | x | Signature to validate |\n // | 0x00 + x | 20 | Address of validator contract |\n // | 0x14 + x | 1 | Signature type is always \"\\x06\" |\n } else if (signatureType == SignatureType.Validator) {\n // Pop last 20 bytes off of signature byte array.\n\n address validatorAddress = signature.popLast20Bytes();\n \n // Ensure signer has approved validator.\n if (!allowedValidators[signerAddress][validatorAddress]) {\n return false;\n }\n isValid = IValidator(validatorAddress).isValidSignature(\n hash,\n signerAddress,\n signature\n );\n return isValid;\n\n // Signer signed hash previously using the preSign function.\n } else if (signatureType == SignatureType.PreSigned) {\n isValid = preSigned[hash][signerAddress];\n return isValid;\n\n // Signature from Trezor hardware wallet.\n // It differs from web3.eth_sign in the encoding of message length\n // (Bitcoin varint encoding vs ascii-decimal, the latter is not\n // self-terminating which leads to ambiguities).\n // See also:\n // https://en.bitcoin.it/wiki/Protocol_documentation#Variable_length_integer\n // https://github.com/trezor/trezor-mcu/blob/master/firmware/ethereum.c#L602\n // https://github.com/trezor/trezor-mcu/blob/master/firmware/crypto.c#L36\n } else if (signatureType == SignatureType.Trezor) {\n require(\n signature.length == 65,\n \"LENGTH_65_REQUIRED\"\n );\n v = uint8(signature[0]);\n r = signature.readBytes32(1);\n s = signature.readBytes32(33);\n recovered = ecrecover(\n keccak256(abi.encodePacked(\n \"\\x19Ethereum Signed Message:\\n\\x20\",\n hash\n )),\n v,\n r,\n s\n );\n isValid = signerAddress == recovered;\n return isValid;\n }\n\n // Anything else is illegal (We do not return false because\n // the signature may actually be valid, just not in a format\n // that we currently support. In this case returning false\n // may lead the caller to incorrectly believe that the\n // signature was invalid.)\n revert(\"SIGNATURE_UNSUPPORTED\");\n }\n}\n",
+ "2.0.0/protocol/Exchange/MixinTransactions.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*/\npragma solidity 0.4.24;\n\nimport \"./libs/LibExchangeErrors.sol\";\nimport \"./mixins/MSignatureValidator.sol\";\nimport \"./mixins/MTransactions.sol\";\nimport \"./libs/LibEIP712.sol\";\n\n\ncontract MixinTransactions is\n LibEIP712,\n MSignatureValidator,\n MTransactions\n{\n\n // Mapping of transaction hash => executed\n // This prevents transactions from being executed more than once.\n mapping (bytes32 => bool) public transactions;\n\n // Address of current transaction signer\n address public currentContextAddress;\n\n // Hash for the EIP712 ZeroEx Transaction Schema\n bytes32 constant internal EIP712_ZEROEX_TRANSACTION_SCHEMA_HASH = keccak256(abi.encodePacked(\n \"ZeroExTransaction(\",\n \"uint256 salt,\",\n \"address signerAddress,\",\n \"bytes data\",\n \")\"\n ));\n\n /// @dev Executes an exchange method call in the context of signer.\n /// @param salt Arbitrary number to ensure uniqueness of transaction hash.\n /// @param signerAddress Address of transaction signer.\n /// @param data AbiV2 encoded calldata.\n /// @param signature Proof of signer transaction by signer.\n function executeTransaction(\n uint256 salt,\n address signerAddress,\n bytes data,\n bytes signature\n )\n external\n {\n // Prevent reentrancy\n require(\n currentContextAddress == address(0),\n \"REENTRANCY_ILLEGAL\"\n );\n\n bytes32 transactionHash = hashEIP712Message(hashZeroExTransaction(\n salt,\n signerAddress,\n data\n ));\n\n // Validate transaction has not been executed\n require(\n !transactions[transactionHash],\n \"INVALID_TX_HASH\"\n );\n\n // Transaction always valid if signer is sender of transaction\n if (signerAddress != msg.sender) {\n // Validate signature\n require(\n isValidSignature(\n transactionHash,\n signerAddress,\n signature\n ),\n \"INVALID_TX_SIGNATURE\"\n );\n\n // Set the current transaction signer\n currentContextAddress = signerAddress;\n }\n\n // Execute transaction\n transactions[transactionHash] = true;\n require(\n address(this).delegatecall(data),\n \"FAILED_EXECUTION\"\n );\n\n // Reset current transaction signer if it was previously updated\n if (signerAddress != msg.sender) {\n currentContextAddress = address(0);\n }\n }\n\n /// @dev Calculates EIP712 hash of the Transaction.\n /// @param salt Arbitrary number to ensure uniqueness of transaction hash.\n /// @param signerAddress Address of transaction signer.\n /// @param data AbiV2 encoded calldata.\n /// @return EIP712 hash of the Transaction.\n function hashZeroExTransaction(\n uint256 salt,\n address signerAddress,\n bytes memory data\n )\n internal\n pure\n returns (bytes32 result)\n {\n bytes32 schemaHash = EIP712_ZEROEX_TRANSACTION_SCHEMA_HASH;\n bytes32 dataHash = keccak256(data);\n\n // Assembly for more efficiently computing:\n // keccak256(abi.encode(\n // EIP712_ZEROEX_TRANSACTION_SCHEMA_HASH,\n // salt,\n // signerAddress,\n // keccak256(data)\n // ));\n\n assembly {\n let memPtr := mload(64)\n mstore(memPtr, schemaHash)\n mstore(add(memPtr, 32), salt)\n mstore(add(memPtr, 64), and(signerAddress, 0xffffffffffffffffffffffffffffffffffffffff))\n mstore(add(memPtr, 96), dataHash)\n result := keccak256(memPtr, 128)\n }\n\n return result;\n }\n\n /// @dev The current function will be called in the context of this address (either 0x transaction signer or `msg.sender`).\n /// If calling a fill function, this address will represent the taker.\n /// If calling a cancel function, this address will represent the maker.\n /// @return Signer of 0x transaction if entry point is `executeTransaction`.\n /// `msg.sender` if entry point is any other function.\n function getCurrentContextAddress()\n internal\n view\n returns (address)\n {\n address contextAddress = currentContextAddress == address(0) ? msg.sender : currentContextAddress;\n return contextAddress;\n }\n}\n",
+ "2.0.0/protocol/Exchange/MixinWrapperFunctions.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"./libs/LibMath.sol\";\nimport \"./libs/LibOrder.sol\";\nimport \"./libs/LibFillResults.sol\";\nimport \"./mixins/MExchangeCore.sol\";\n\n\ncontract MixinWrapperFunctions is\n LibMath,\n LibFillResults,\n MExchangeCore\n{\n /// @dev Fills the input order. Reverts if exact takerAssetFillAmount not filled.\n /// @param order Order struct containing order specifications.\n /// @param takerAssetFillAmount Desired amount of takerAsset to sell.\n /// @param signature Proof that order has been created by maker.\n function fillOrKillOrder(\n LibOrder.Order memory order,\n uint256 takerAssetFillAmount,\n bytes memory signature\n )\n public\n returns (FillResults memory fillResults)\n {\n fillResults = fillOrder(\n order,\n takerAssetFillAmount,\n signature\n );\n require(\n fillResults.takerAssetFilledAmount == takerAssetFillAmount,\n \"COMPLETE_FILL_FAILED\"\n );\n return fillResults;\n }\n\n /// @dev Fills an order with specified parameters and ECDSA signature.\n /// Returns false if the transaction would otherwise revert.\n /// @param order Order struct containing order specifications.\n /// @param takerAssetFillAmount Desired amount of takerAsset to sell.\n /// @param signature Proof that order has been created by maker.\n /// @return Amounts filled and fees paid by maker and taker.\n function fillOrderNoThrow(\n LibOrder.Order memory order,\n uint256 takerAssetFillAmount,\n bytes memory signature\n )\n public\n returns (FillResults memory fillResults)\n {\n // We need to call MExchangeCore.fillOrder using a delegatecall in\n // assembly so that we can intercept a call that throws. For this, we\n // need the input encoded in memory in the Ethereum ABIv2 format [1].\n\n // | Area | Offset | Length | Contents |\n // | -------- |--------|---------|-------------------------------------------- |\n // | Header | 0x00 | 4 | function selector |\n // | Params | | 3 * 32 | function parameters: |\n // | | 0x00 | | 1. offset to order (*) |\n // | | 0x20 | | 2. takerAssetFillAmount |\n // | | 0x40 | | 3. offset to signature (*) |\n // | Data | | 12 * 32 | order: |\n // | | 0x000 | | 1. senderAddress |\n // | | 0x020 | | 2. makerAddress |\n // | | 0x040 | | 3. takerAddress |\n // | | 0x060 | | 4. feeRecipientAddress |\n // | | 0x080 | | 5. makerAssetAmount |\n // | | 0x0A0 | | 6. takerAssetAmount |\n // | | 0x0C0 | | 7. makerFeeAmount |\n // | | 0x0E0 | | 8. takerFeeAmount |\n // | | 0x100 | | 9. expirationTimeSeconds |\n // | | 0x120 | | 10. salt |\n // | | 0x140 | | 11. Offset to makerAssetData (*) |\n // | | 0x160 | | 12. Offset to takerAssetData (*) |\n // | | 0x180 | 32 | makerAssetData Length |\n // | | 0x1A0 | ** | makerAssetData Contents |\n // | | 0x1C0 | 32 | takerAssetData Length |\n // | | 0x1E0 | ** | takerAssetData Contents |\n // | | 0x200 | 32 | signature Length |\n // | | 0x220 | ** | signature Contents |\n\n // * Offsets are calculated from the beginning of the current area: Header, Params, Data:\n // An offset stored in the Params area is calculated from the beginning of the Params section.\n // An offset stored in the Data area is calculated from the beginning of the Data section.\n\n // ** The length of dynamic array contents are stored in the field immediately preceeding the contents.\n\n // [1]: https://solidity.readthedocs.io/en/develop/abi-spec.html\n\n bytes4 fillOrderSelector = this.fillOrder.selector;\n\n assembly {\n\n // Areas below may use the following variables:\n // 1. <area>Start -- Start of this area in memory\n // 2. <area>End -- End of this area in memory. This value may\n // be precomputed (before writing contents),\n // or it may be computed as contents are written.\n // 3. <area>Offset -- Current offset into area. If an area's End\n // is precomputed, this variable tracks the\n // offsets of contents as they are written.\n\n /////// Setup Header Area ///////\n // Load free memory pointer\n let headerAreaStart := mload(0x40)\n mstore(headerAreaStart, fillOrderSelector)\n let headerAreaEnd := add(headerAreaStart, 0x4)\n\n /////// Setup Params Area ///////\n // This area is preallocated and written to later.\n // This is because we need to fill in offsets that have not yet been calculated.\n let paramsAreaStart := headerAreaEnd\n let paramsAreaEnd := add(paramsAreaStart, 0x60)\n let paramsAreaOffset := paramsAreaStart\n\n /////// Setup Data Area ///////\n let dataAreaStart := paramsAreaEnd\n let dataAreaEnd := dataAreaStart\n\n // Offset from the source data we're reading from\n let sourceOffset := order\n // arrayLenBytes and arrayLenWords track the length of a dynamically-allocated bytes array.\n let arrayLenBytes := 0\n let arrayLenWords := 0\n\n /////// Write order Struct ///////\n // Write memory location of Order, relative to the start of the\n // parameter list, then increment the paramsAreaOffset respectively.\n mstore(paramsAreaOffset, sub(dataAreaEnd, paramsAreaStart))\n paramsAreaOffset := add(paramsAreaOffset, 0x20)\n\n // Write values for each field in the order\n // It would be nice to use a loop, but we save on gas by writing\n // the stores sequentially.\n mstore(dataAreaEnd, mload(sourceOffset)) // makerAddress\n mstore(add(dataAreaEnd, 0x20), mload(add(sourceOffset, 0x20))) // takerAddress\n mstore(add(dataAreaEnd, 0x40), mload(add(sourceOffset, 0x40))) // feeRecipientAddress\n mstore(add(dataAreaEnd, 0x60), mload(add(sourceOffset, 0x60))) // senderAddress\n mstore(add(dataAreaEnd, 0x80), mload(add(sourceOffset, 0x80))) // makerAssetAmount\n mstore(add(dataAreaEnd, 0xA0), mload(add(sourceOffset, 0xA0))) // takerAssetAmount\n mstore(add(dataAreaEnd, 0xC0), mload(add(sourceOffset, 0xC0))) // makerFeeAmount\n mstore(add(dataAreaEnd, 0xE0), mload(add(sourceOffset, 0xE0))) // takerFeeAmount\n mstore(add(dataAreaEnd, 0x100), mload(add(sourceOffset, 0x100))) // expirationTimeSeconds\n mstore(add(dataAreaEnd, 0x120), mload(add(sourceOffset, 0x120))) // salt\n mstore(add(dataAreaEnd, 0x140), mload(add(sourceOffset, 0x140))) // Offset to makerAssetData\n mstore(add(dataAreaEnd, 0x160), mload(add(sourceOffset, 0x160))) // Offset to takerAssetData\n dataAreaEnd := add(dataAreaEnd, 0x180)\n sourceOffset := add(sourceOffset, 0x180)\n\n // Write offset to <order.makerAssetData>\n mstore(add(dataAreaStart, mul(10, 0x20)), sub(dataAreaEnd, dataAreaStart))\n\n // Calculate length of <order.makerAssetData>\n sourceOffset := mload(add(order, 0x140)) // makerAssetData\n arrayLenBytes := mload(sourceOffset)\n sourceOffset := add(sourceOffset, 0x20)\n arrayLenWords := div(add(arrayLenBytes, 0x1F), 0x20)\n\n // Write length of <order.makerAssetData>\n mstore(dataAreaEnd, arrayLenBytes)\n dataAreaEnd := add(dataAreaEnd, 0x20)\n\n // Write contents of <order.makerAssetData>\n for {let i := 0} lt(i, arrayLenWords) {i := add(i, 1)} {\n mstore(dataAreaEnd, mload(sourceOffset))\n dataAreaEnd := add(dataAreaEnd, 0x20)\n sourceOffset := add(sourceOffset, 0x20)\n }\n\n // Write offset to <order.takerAssetData>\n mstore(add(dataAreaStart, mul(11, 0x20)), sub(dataAreaEnd, dataAreaStart))\n\n // Calculate length of <order.takerAssetData>\n sourceOffset := mload(add(order, 0x160)) // takerAssetData\n arrayLenBytes := mload(sourceOffset)\n sourceOffset := add(sourceOffset, 0x20)\n arrayLenWords := div(add(arrayLenBytes, 0x1F), 0x20)\n\n // Write length of <order.takerAssetData>\n mstore(dataAreaEnd, arrayLenBytes)\n dataAreaEnd := add(dataAreaEnd, 0x20)\n\n // Write contents of <order.takerAssetData>\n for {let i := 0} lt(i, arrayLenWords) {i := add(i, 1)} {\n mstore(dataAreaEnd, mload(sourceOffset))\n dataAreaEnd := add(dataAreaEnd, 0x20)\n sourceOffset := add(sourceOffset, 0x20)\n }\n\n /////// Write takerAssetFillAmount ///////\n mstore(paramsAreaOffset, takerAssetFillAmount)\n paramsAreaOffset := add(paramsAreaOffset, 0x20)\n\n /////// Write signature ///////\n // Write offset to paramsArea\n mstore(paramsAreaOffset, sub(dataAreaEnd, paramsAreaStart))\n\n // Calculate length of signature\n sourceOffset := signature\n arrayLenBytes := mload(sourceOffset)\n sourceOffset := add(sourceOffset, 0x20)\n arrayLenWords := div(add(arrayLenBytes, 0x1F), 0x20)\n\n // Write length of signature\n mstore(dataAreaEnd, arrayLenBytes)\n dataAreaEnd := add(dataAreaEnd, 0x20)\n\n // Write contents of signature\n for {let i := 0} lt(i, arrayLenWords) {i := add(i, 1)} {\n mstore(dataAreaEnd, mload(sourceOffset))\n dataAreaEnd := add(dataAreaEnd, 0x20)\n sourceOffset := add(sourceOffset, 0x20)\n }\n\n // Execute delegatecall\n let success := delegatecall(\n gas, // forward all gas, TODO: look into gas consumption of assert/throw\n address, // call address of this contract\n headerAreaStart, // pointer to start of input\n sub(dataAreaEnd, headerAreaStart), // length of input\n headerAreaStart, // write output over input\n 128 // output size is 128 bytes\n )\n switch success\n case 0 {\n mstore(fillResults, 0)\n mstore(add(fillResults, 32), 0)\n mstore(add(fillResults, 64), 0)\n mstore(add(fillResults, 96), 0)\n }\n case 1 {\n mstore(fillResults, mload(headerAreaStart))\n mstore(add(fillResults, 32), mload(add(headerAreaStart, 32)))\n mstore(add(fillResults, 64), mload(add(headerAreaStart, 64)))\n mstore(add(fillResults, 96), mload(add(headerAreaStart, 96)))\n }\n }\n return fillResults;\n }\n\n /// @dev Synchronously executes multiple calls of fillOrder.\n /// @param orders Array of order specifications.\n /// @param takerAssetFillAmounts Array of desired amounts of takerAsset to sell in orders.\n /// @param signatures Proofs that orders have been created by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n /// NOTE: makerAssetFilledAmount and takerAssetFilledAmount may include amounts filled of different assets.\n function batchFillOrders(\n LibOrder.Order[] memory orders,\n uint256[] memory takerAssetFillAmounts,\n bytes[] memory signatures\n )\n public\n returns (FillResults memory totalFillResults)\n {\n for (uint256 i = 0; i < orders.length; i++) {\n FillResults memory singleFillResults = fillOrder(\n orders[i],\n takerAssetFillAmounts[i],\n signatures[i]\n );\n addFillResults(totalFillResults, singleFillResults);\n }\n return totalFillResults;\n }\n\n /// @dev Synchronously executes multiple calls of fillOrKill.\n /// @param orders Array of order specifications.\n /// @param takerAssetFillAmounts Array of desired amounts of takerAsset to sell in orders.\n /// @param signatures Proofs that orders have been created by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n /// NOTE: makerAssetFilledAmount and takerAssetFilledAmount may include amounts filled of different assets.\n function batchFillOrKillOrders(\n LibOrder.Order[] memory orders,\n uint256[] memory takerAssetFillAmounts,\n bytes[] memory signatures\n )\n public\n returns (FillResults memory totalFillResults)\n {\n for (uint256 i = 0; i < orders.length; i++) {\n FillResults memory singleFillResults = fillOrKillOrder(\n orders[i],\n takerAssetFillAmounts[i],\n signatures[i]\n );\n addFillResults(totalFillResults, singleFillResults);\n }\n return totalFillResults;\n }\n\n /// @dev Fills an order with specified parameters and ECDSA signature.\n /// Returns false if the transaction would otherwise revert.\n /// @param orders Array of order specifications.\n /// @param takerAssetFillAmounts Array of desired amounts of takerAsset to sell in orders.\n /// @param signatures Proofs that orders have been created by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n /// NOTE: makerAssetFilledAmount and takerAssetFilledAmount may include amounts filled of different assets.\n function batchFillOrdersNoThrow(\n LibOrder.Order[] memory orders,\n uint256[] memory takerAssetFillAmounts,\n bytes[] memory signatures\n )\n public\n returns (FillResults memory totalFillResults)\n {\n for (uint256 i = 0; i < orders.length; i++) {\n FillResults memory singleFillResults = fillOrderNoThrow(\n orders[i],\n takerAssetFillAmounts[i],\n signatures[i]\n );\n addFillResults(totalFillResults, singleFillResults);\n }\n return totalFillResults;\n }\n\n /// @dev Synchronously executes multiple calls of fillOrder until total amount of takerAsset is sold by taker.\n /// @param orders Array of order specifications.\n /// @param takerAssetFillAmount Desired amount of takerAsset to sell.\n /// @param signatures Proofs that orders have been created by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n function marketSellOrders(\n LibOrder.Order[] memory orders,\n uint256 takerAssetFillAmount,\n bytes[] memory signatures\n )\n public\n returns (FillResults memory totalFillResults)\n {\n bytes memory takerAssetData = orders[0].takerAssetData;\n \n for (uint256 i = 0; i < orders.length; i++) {\n\n // We assume that asset being sold by taker is the same for each order.\n // Rather than passing this in as calldata, we use the takerAssetData from the first order in all later orders.\n orders[i].takerAssetData = takerAssetData;\n\n // Calculate the remaining amount of takerAsset to sell\n uint256 remainingTakerAssetFillAmount = safeSub(takerAssetFillAmount, totalFillResults.takerAssetFilledAmount);\n\n // Attempt to sell the remaining amount of takerAsset\n FillResults memory singleFillResults = fillOrder(\n orders[i],\n remainingTakerAssetFillAmount,\n signatures[i]\n );\n\n // Update amounts filled and fees paid by maker and taker\n addFillResults(totalFillResults, singleFillResults);\n\n // Stop execution if the entire amount of takerAsset has been sold\n if (totalFillResults.takerAssetFilledAmount == takerAssetFillAmount) {\n break;\n }\n }\n return totalFillResults;\n }\n\n /// @dev Synchronously executes multiple calls of fillOrder until total amount of takerAsset is sold by taker.\n /// Returns false if the transaction would otherwise revert.\n /// @param orders Array of order specifications.\n /// @param takerAssetFillAmount Desired amount of takerAsset to sell.\n /// @param signatures Proofs that orders have been signed by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n function marketSellOrdersNoThrow(\n LibOrder.Order[] memory orders,\n uint256 takerAssetFillAmount,\n bytes[] memory signatures\n )\n public\n returns (FillResults memory totalFillResults)\n {\n bytes memory takerAssetData = orders[0].takerAssetData;\n\n for (uint256 i = 0; i < orders.length; i++) {\n\n // We assume that asset being sold by taker is the same for each order.\n // Rather than passing this in as calldata, we use the takerAssetData from the first order in all later orders.\n orders[i].takerAssetData = takerAssetData;\n\n // Calculate the remaining amount of takerAsset to sell\n uint256 remainingTakerAssetFillAmount = safeSub(takerAssetFillAmount, totalFillResults.takerAssetFilledAmount);\n\n // Attempt to sell the remaining amount of takerAsset\n FillResults memory singleFillResults = fillOrderNoThrow(\n orders[i],\n remainingTakerAssetFillAmount,\n signatures[i]\n );\n\n // Update amounts filled and fees paid by maker and taker\n addFillResults(totalFillResults, singleFillResults);\n\n // Stop execution if the entire amount of takerAsset has been sold\n if (totalFillResults.takerAssetFilledAmount == takerAssetFillAmount) {\n break;\n }\n }\n return totalFillResults;\n }\n\n /// @dev Synchronously executes multiple calls of fillOrder until total amount of makerAsset is bought by taker.\n /// @param orders Array of order specifications.\n /// @param makerAssetFillAmount Desired amount of makerAsset to buy.\n /// @param signatures Proofs that orders have been signed by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n function marketBuyOrders(\n LibOrder.Order[] memory orders,\n uint256 makerAssetFillAmount,\n bytes[] memory signatures\n )\n public\n returns (FillResults memory totalFillResults)\n {\n bytes memory makerAssetData = orders[0].makerAssetData;\n\n for (uint256 i = 0; i < orders.length; i++) {\n\n // We assume that asset being bought by taker is the same for each order.\n // Rather than passing this in as calldata, we copy the makerAssetData from the first order onto all later orders.\n orders[i].makerAssetData = makerAssetData;\n\n // Calculate the remaining amount of makerAsset to buy\n uint256 remainingMakerAssetFillAmount = safeSub(makerAssetFillAmount, totalFillResults.makerAssetFilledAmount);\n\n // Convert the remaining amount of makerAsset to buy into remaining amount\n // of takerAsset to sell, assuming entire amount can be sold in the current order\n uint256 remainingTakerAssetFillAmount = getPartialAmount(\n orders[i].takerAssetAmount,\n orders[i].makerAssetAmount,\n remainingMakerAssetFillAmount\n );\n\n // Attempt to sell the remaining amount of takerAsset\n FillResults memory singleFillResults = fillOrder(\n orders[i],\n remainingTakerAssetFillAmount,\n signatures[i]\n );\n\n // Update amounts filled and fees paid by maker and taker\n addFillResults(totalFillResults, singleFillResults);\n\n // Stop execution if the entire amount of makerAsset has been bought\n if (totalFillResults.makerAssetFilledAmount == makerAssetFillAmount) {\n break;\n }\n }\n return totalFillResults;\n }\n\n /// @dev Synchronously executes multiple fill orders in a single transaction until total amount is bought by taker.\n /// Returns false if the transaction would otherwise revert.\n /// @param orders Array of order specifications.\n /// @param makerAssetFillAmount Desired amount of makerAsset to buy.\n /// @param signatures Proofs that orders have been signed by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n function marketBuyOrdersNoThrow(\n LibOrder.Order[] memory orders,\n uint256 makerAssetFillAmount,\n bytes[] memory signatures\n )\n public\n returns (FillResults memory totalFillResults)\n {\n bytes memory makerAssetData = orders[0].makerAssetData;\n\n for (uint256 i = 0; i < orders.length; i++) {\n\n // We assume that asset being bought by taker is the same for each order.\n // Rather than passing this in as calldata, we copy the makerAssetData from the first order onto all later orders.\n orders[i].makerAssetData = makerAssetData;\n\n // Calculate the remaining amount of makerAsset to buy\n uint256 remainingMakerAssetFillAmount = safeSub(makerAssetFillAmount, totalFillResults.makerAssetFilledAmount);\n\n // Convert the remaining amount of makerAsset to buy into remaining amount\n // of takerAsset to sell, assuming entire amount can be sold in the current order\n uint256 remainingTakerAssetFillAmount = getPartialAmount(\n orders[i].takerAssetAmount,\n orders[i].makerAssetAmount,\n remainingMakerAssetFillAmount\n );\n\n // Attempt to sell the remaining amount of takerAsset\n FillResults memory singleFillResults = fillOrderNoThrow(\n orders[i],\n remainingTakerAssetFillAmount,\n signatures[i]\n );\n\n // Update amounts filled and fees paid by maker and taker\n addFillResults(totalFillResults, singleFillResults);\n\n // Stop execution if the entire amount of makerAsset has been bought\n if (totalFillResults.makerAssetFilledAmount == makerAssetFillAmount) {\n break;\n }\n }\n return totalFillResults;\n }\n\n /// @dev Synchronously cancels multiple orders in a single transaction.\n /// @param orders Array of order specifications.\n function batchCancelOrders(LibOrder.Order[] memory orders)\n public\n {\n for (uint256 i = 0; i < orders.length; i++) {\n cancelOrder(orders[i]);\n }\n }\n\n /// @dev Fetches information for all passed in orders.\n /// @param orders Array of order specifications.\n /// @return Array of OrderInfo instances that correspond to each order.\n function getOrdersInfo(LibOrder.Order[] memory orders)\n public\n view\n returns (LibOrder.OrderInfo[] memory)\n {\n uint256 length = orders.length;\n LibOrder.OrderInfo[] memory ordersInfo = new LibOrder.OrderInfo[](length);\n for (uint256 i = 0; i < length; i++) {\n ordersInfo[i] = getOrderInfo(orders[i]);\n }\n return ordersInfo;\n }\n}\n",
+ "2.0.0/protocol/Exchange/interfaces/IAssetProxyDispatcher.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.24;\n\n\ncontract IAssetProxyDispatcher {\n\n /// @dev Registers an asset proxy to its asset proxy id.\n /// Once an asset proxy is registered, it cannot be unregistered.\n /// @param assetProxy Address of new asset proxy to register.\n function registerAssetProxy(address assetProxy)\n external;\n\n /// @dev Gets an asset proxy.\n /// @param assetProxyId Id of the asset proxy.\n /// @return The asset proxy registered to assetProxyId. Returns 0x0 if no proxy is registered.\n function getAssetProxy(bytes4 assetProxyId)\n external\n view\n returns (address);\n}\n",
+ "2.0.0/protocol/Exchange/interfaces/IExchangeCore.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../libs/LibOrder.sol\";\nimport \"../libs/LibFillResults.sol\";\n\n\ncontract IExchangeCore {\n\n /// @dev Cancels all orders created by makerAddress with a salt less than or equal to the targetOrderEpoch\n /// and senderAddress equal to msg.sender (or null address if msg.sender == makerAddress).\n /// @param targetOrderEpoch Orders created with a salt less or equal to this value will be cancelled.\n function cancelOrdersUpTo(uint256 targetOrderEpoch)\n external;\n\n /// @dev Fills the input order.\n /// @param order Order struct containing order specifications.\n /// @param takerAssetFillAmount Desired amount of takerAsset to sell.\n /// @param signature Proof that order has been created by maker.\n /// @return Amounts filled and fees paid by maker and taker.\n function fillOrder(\n LibOrder.Order memory order,\n uint256 takerAssetFillAmount,\n bytes memory signature\n )\n public\n returns (LibFillResults.FillResults memory fillResults);\n\n /// @dev After calling, the order can not be filled anymore.\n /// @param order Order struct containing order specifications.\n function cancelOrder(LibOrder.Order memory order)\n public;\n\n /// @dev Gets information about an order: status, hash, and amount filled.\n /// @param order Order to gather information on.\n /// @return OrderInfo Information about the order and its state.\n /// See LibOrder.OrderInfo for a complete description.\n function getOrderInfo(LibOrder.Order memory order)\n public\n view\n returns (LibOrder.OrderInfo memory orderInfo);\n}\n",
+ "2.0.0/protocol/Exchange/interfaces/IMatchOrders.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*/\npragma solidity 0.4.24;\npragma experimental ABIEncoderV2;\n\nimport \"../libs/LibOrder.sol\";\nimport \"../libs/LibFillResults.sol\";\n\n\ncontract IMatchOrders {\n\n /// @dev Match two complementary orders that have a profitable spread.\n /// Each order is filled at their respective price point. However, the calculations are\n /// carried out as though the orders are both being filled at the right order's price point.\n /// The profit made by the left order goes to the taker (who matched the two orders).\n /// @param leftOrder First order to match.\n /// @param rightOrder Second order to match.\n /// @param leftSignature Proof that order was created by the left maker.\n /// @param rightSignature Proof that order was created by the right maker.\n /// @return matchedFillResults Amounts filled and fees paid by maker and taker of matched orders.\n function matchOrders(\n LibOrder.Order memory leftOrder,\n LibOrder.Order memory rightOrder,\n bytes memory leftSignature,\n bytes memory rightSignature\n )\n public\n returns (LibFillResults.MatchedFillResults memory matchedFillResults);\n}\n",
+ "2.0.0/protocol/Exchange/interfaces/ISignatureValidator.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.24;\n\n\ncontract ISignatureValidator {\n\n /// @dev Approves a hash on-chain using any valid signature type.\n /// After presigning a hash, the preSign signature type will become valid for that hash and signer.\n /// @param signerAddress Address that should have signed the given hash.\n /// @param signature Proof that the hash has been signed by signer.\n function preSign(\n bytes32 hash,\n address signerAddress,\n bytes signature\n )\n external;\n \n /// @dev Approves/unnapproves a Validator contract to verify signatures on signer's behalf.\n /// @param validatorAddress Address of Validator contract.\n /// @param approval Approval or disapproval of Validator contract.\n function setSignatureValidatorApproval(\n address validatorAddress,\n bool approval\n )\n external;\n\n /// @dev Verifies that a signature is valid.\n /// @param hash Message hash that is signed.\n /// @param signerAddress Address of signer.\n /// @param signature Proof of signing.\n /// @return Validity of order signature.\n function isValidSignature(\n bytes32 hash,\n address signerAddress,\n bytes memory signature\n )\n public\n view\n returns (bool isValid);\n}\n",
+ "2.0.0/protocol/Exchange/interfaces/ITransactions.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*/\npragma solidity 0.4.24;\n\n\ncontract ITransactions {\n\n /// @dev Executes an exchange method call in the context of signer.\n /// @param salt Arbitrary number to ensure uniqueness of transaction hash.\n /// @param signerAddress Address of transaction signer.\n /// @param data AbiV2 encoded calldata.\n /// @param signature Proof of signer transaction by signer.\n function executeTransaction(\n uint256 salt,\n address signerAddress,\n bytes data,\n bytes signature\n )\n external;\n}\n",
+ "2.0.0/protocol/Exchange/interfaces/IValidator.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.24;\n\n\ncontract IValidator {\n\n /// @dev Verifies that a signature is valid.\n /// @param hash Message hash that is signed.\n /// @param signerAddress Address that should have signed the given hash.\n /// @param signature Proof of signing.\n /// @return Validity of order signature.\n function isValidSignature(\n bytes32 hash,\n address signerAddress,\n bytes signature\n )\n external\n view\n returns (bool isValid);\n}\n",
+ "2.0.0/protocol/Exchange/interfaces/IWallet.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.24;\n\n\ncontract IWallet {\n\n /// @dev Verifies that a signature is valid.\n /// @param hash Message hash that is signed.\n /// @param signature Proof of signing.\n /// @return Validity of order signature.\n function isValidSignature(\n bytes32 hash,\n bytes signature\n )\n external\n view\n returns (bool isValid);\n}\n",
+ "2.0.0/protocol/Exchange/libs/LibConstants.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.24;\n\n\ncontract LibConstants {\n \n // Asset data for ZRX token. Used for fee transfers.\n // @TODO: Hardcode constant when we deploy. Currently \n // not constant to make testing easier.\n // solhint-disable-next-line var-name-mixedcase\n bytes public ZRX_ASSET_DATA;\n\n // @TODO: Remove when we deploy.\n constructor (bytes memory zrxAssetData)\n public\n {\n ZRX_ASSET_DATA = zrxAssetData;\n }\n}\n",
+ "2.0.0/protocol/Exchange/libs/LibEIP712.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.24;\n\n\ncontract LibEIP712 {\n // EIP191 header for EIP712 prefix\n string constant internal EIP191_HEADER = \"\\x19\\x01\";\n\n // EIP712 Domain Name value\n string constant internal EIP712_DOMAIN_NAME = \"0x Protocol\";\n\n // EIP712 Domain Version value\n string constant internal EIP712_DOMAIN_VERSION = \"2\";\n\n // Hash of the EIP712 Domain Separator Schema\n bytes32 public constant EIP712_DOMAIN_SEPARATOR_SCHEMA_HASH = keccak256(abi.encodePacked(\n \"EIP712Domain(\",\n \"string name,\",\n \"string version,\",\n \"address verifyingContract\",\n \")\"\n ));\n\n // Hash of the EIP712 Domain Separator data\n // solhint-disable-next-line var-name-mixedcase\n bytes32 public EIP712_DOMAIN_HASH;\n\n constructor ()\n public\n {\n EIP712_DOMAIN_HASH = keccak256(abi.encode(\n EIP712_DOMAIN_SEPARATOR_SCHEMA_HASH,\n keccak256(bytes(EIP712_DOMAIN_NAME)),\n keccak256(bytes(EIP712_DOMAIN_VERSION)),\n address(this)\n ));\n }\n\n /// @dev Calculates EIP712 encoding for a hash struct in this EIP712 Domain.\n /// @param hashStruct The EIP712 hash struct.\n /// @return EIP712 hash applied to this EIP712 Domain.\n function hashEIP712Message(bytes32 hashStruct)\n internal\n view\n returns (bytes32)\n {\n return keccak256(abi.encodePacked(EIP191_HEADER, EIP712_DOMAIN_HASH, hashStruct));\n }\n}\n",
+ "2.0.0/protocol/Exchange/libs/LibExchangeErrors.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\n// solhint-disable\npragma solidity 0.4.24;\n\n\n/// @dev This contract documents the revert reasons used in the Exchange contract.\n/// This contract is intended to serve as a reference, but is not actually used for efficiency reasons.\ncontract LibExchangeErrors {\n\n /// Order validation errors ///\n string constant ORDER_UNFILLABLE = \"ORDER_UNFILLABLE\"; // Order cannot be filled.\n string constant INVALID_MAKER = \"INVALID_MAKER\"; // Invalid makerAddress.\n string constant INVALID_TAKER = \"INVALID_TAKER\"; // Invalid takerAddress.\n string constant INVALID_SENDER = \"INVALID_SENDER\"; // Invalid `msg.sender`.\n string constant INVALID_ORDER_SIGNATURE = \"INVALID_ORDER_SIGNATURE\"; // Signature validation failed. \n \n /// fillOrder validation errors ///\n string constant INVALID_TAKER_AMOUNT = \"INVALID_TAKER_AMOUNT\"; // takerAssetFillAmount cannot equal 0.\n string constant ROUNDING_ERROR = \"ROUNDING_ERROR\"; // Rounding error greater than 0.1% of takerAssetFillAmount. \n \n /// Signature validation errors ///\n string constant INVALID_SIGNATURE = \"INVALID_SIGNATURE\"; // Signature validation failed. \n string constant SIGNATURE_ILLEGAL = \"SIGNATURE_ILLEGAL\"; // Signature type is illegal.\n string constant SIGNATURE_UNSUPPORTED = \"SIGNATURE_UNSUPPORTED\"; // Signature type unsupported.\n \n /// cancelOrdersUptTo errors ///\n string constant INVALID_NEW_ORDER_EPOCH = \"INVALID_NEW_ORDER_EPOCH\"; // Specified salt must be greater than or equal to existing orderEpoch.\n\n /// fillOrKillOrder errors ///\n string constant COMPLETE_FILL_FAILED = \"COMPLETE_FILL_FAILED\"; // Desired takerAssetFillAmount could not be completely filled. \n\n /// matchOrders errors ///\n string constant NEGATIVE_SPREAD_REQUIRED = \"NEGATIVE_SPREAD_REQUIRED\"; // Matched orders must have a negative spread.\n\n /// Transaction errors ///\n string constant REENTRANCY_ILLEGAL = \"REENTRANCY_ILLEGAL\"; // Recursive reentrancy is not allowed. \n string constant INVALID_TX_HASH = \"INVALID_TX_HASH\"; // Transaction has already been executed. \n string constant INVALID_TX_SIGNATURE = \"INVALID_TX_SIGNATURE\"; // Signature validation failed. \n string constant FAILED_EXECUTION = \"FAILED_EXECUTION\"; // Transaction execution failed. \n \n /// registerAssetProxy errors ///\n string constant ASSET_PROXY_ALREADY_EXISTS = \"ASSET_PROXY_ALREADY_EXISTS\"; // AssetProxy with same id already exists.\n\n /// dispatchTransferFrom errors ///\n string constant ASSET_PROXY_DOES_NOT_EXIST = \"ASSET_PROXY_DOES_NOT_EXIST\"; // No assetProxy registered at given id.\n string constant TRANSFER_FAILED = \"TRANSFER_FAILED\"; // Asset transfer unsuccesful.\n\n /// Length validation errors ///\n string constant LENGTH_GREATER_THAN_0_REQUIRED = \"LENGTH_GREATER_THAN_0_REQUIRED\"; // Byte array must have a length greater than 0.\n string constant LENGTH_GREATER_THAN_3_REQUIRED = \"LENGTH_GREATER_THAN_3_REQUIRED\"; // Byte array must have a length greater than 3.\n string constant LENGTH_0_REQUIRED = \"LENGTH_0_REQUIRED\"; // Byte array must have a length of 0.\n string constant LENGTH_65_REQUIRED = \"LENGTH_65_REQUIRED\"; // Byte array must have a length of 65.\n}\n",
+ "2.0.0/protocol/Exchange/libs/LibFillResults.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.24;\n\nimport \"../../../utils/SafeMath/SafeMath.sol\";\n\n\ncontract LibFillResults is\n SafeMath\n{\n\n struct FillResults {\n uint256 makerAssetFilledAmount; // Total amount of makerAsset(s) filled.\n uint256 takerAssetFilledAmount; // Total amount of takerAsset(s) filled.\n uint256 makerFeePaid; // Total amount of ZRX paid by maker(s) to feeRecipient(s).\n uint256 takerFeePaid; // Total amount of ZRX paid by taker to feeRecipients(s).\n }\n\n struct MatchedFillResults {\n FillResults left; // Amounts filled and fees paid of left order.\n FillResults right; // Amounts filled and fees paid of right order.\n uint256 leftMakerAssetSpreadAmount; // Spread between price of left and right order, denominated in the left order's makerAsset, paid to taker.\n }\n\n /// @dev Adds properties of both FillResults instances.\n /// Modifies the first FillResults instance specified.\n /// @param totalFillResults Fill results instance that will be added onto.\n /// @param singleFillResults Fill results instance that will be added to totalFillResults.\n function addFillResults(FillResults memory totalFillResults, FillResults memory singleFillResults)\n internal\n pure\n {\n totalFillResults.makerAssetFilledAmount = safeAdd(totalFillResults.makerAssetFilledAmount, singleFillResults.makerAssetFilledAmount);\n totalFillResults.takerAssetFilledAmount = safeAdd(totalFillResults.takerAssetFilledAmount, singleFillResults.takerAssetFilledAmount);\n totalFillResults.makerFeePaid = safeAdd(totalFillResults.makerFeePaid, singleFillResults.makerFeePaid);\n totalFillResults.takerFeePaid = safeAdd(totalFillResults.takerFeePaid, singleFillResults.takerFeePaid);\n }\n}\n",
+ "2.0.0/protocol/Exchange/libs/LibMath.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.24;\n\nimport \"../../../utils/SafeMath/SafeMath.sol\";\n\n\ncontract LibMath is\n SafeMath\n{\n\n /// @dev Calculates partial value given a numerator and denominator.\n /// @param numerator Numerator.\n /// @param denominator Denominator.\n /// @param target Value to calculate partial of.\n /// @return Partial value of target.\n function getPartialAmount(\n uint256 numerator,\n uint256 denominator,\n uint256 target)\n internal\n pure\n returns (uint256 partialAmount)\n {\n partialAmount = safeDiv(\n safeMul(numerator, target),\n denominator\n );\n return partialAmount;\n }\n\n /// @dev Checks if rounding error > 0.1%.\n /// @param numerator Numerator.\n /// @param denominator Denominator.\n /// @param target Value to multiply with numerator/denominator.\n /// @return Rounding error is present.\n function isRoundingError(\n uint256 numerator,\n uint256 denominator,\n uint256 target)\n internal\n pure\n returns (bool isError)\n {\n uint256 remainder = mulmod(target, numerator, denominator);\n if (remainder == 0) {\n return false; // No rounding error.\n }\n\n uint256 errPercentageTimes1000000 = safeDiv(\n safeMul(remainder, 1000000),\n safeMul(numerator, target)\n );\n isError = errPercentageTimes1000000 > 1000;\n return isError;\n }\n}\n",
+ "2.0.0/protocol/Exchange/libs/LibOrder.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.24;\n\nimport \"./LibEIP712.sol\";\n\n\ncontract LibOrder is\n LibEIP712\n{\n\n // Hash for the EIP712 Order Schema\n bytes32 constant internal EIP712_ORDER_SCHEMA_HASH = keccak256(abi.encodePacked(\n \"Order(\",\n \"address makerAddress,\",\n \"address takerAddress,\",\n \"address feeRecipientAddress,\",\n \"address senderAddress,\",\n \"uint256 makerAssetAmount,\",\n \"uint256 takerAssetAmount,\",\n \"uint256 makerFee,\",\n \"uint256 takerFee,\",\n \"uint256 expirationTimeSeconds,\",\n \"uint256 salt,\",\n \"bytes makerAssetData,\",\n \"bytes takerAssetData\",\n \")\"\n ));\n\n // A valid order remains fillable until it is expired, fully filled, or cancelled.\n // An order's state is unaffected by external factors, like account balances.\n enum OrderStatus {\n INVALID, // Default value\n INVALID_MAKER_ASSET_AMOUNT, // Order does not have a valid maker asset amount\n INVALID_TAKER_ASSET_AMOUNT, // Order does not have a valid taker asset amount\n FILLABLE, // Order is fillable\n EXPIRED, // Order has already expired\n FULLY_FILLED, // Order is fully filled\n CANCELLED // Order has been cancelled\n }\n\n // solhint-disable max-line-length\n struct Order {\n address makerAddress; // Address that created the order. \n address takerAddress; // Address that is allowed to fill the order. If set to 0, any address is allowed to fill the order. \n address feeRecipientAddress; // Address that will recieve fees when order is filled. \n address senderAddress; // Address that is allowed to call Exchange contract methods that affect this order. If set to 0, any address is allowed to call these methods.\n uint256 makerAssetAmount; // Amount of makerAsset being offered by maker. Must be greater than 0. \n uint256 takerAssetAmount; // Amount of takerAsset being bid on by maker. Must be greater than 0. \n uint256 makerFee; // Amount of ZRX paid to feeRecipient by maker when order is filled. If set to 0, no transfer of ZRX from maker to feeRecipient will be attempted.\n uint256 takerFee; // Amount of ZRX paid to feeRecipient by taker when order is filled. If set to 0, no transfer of ZRX from taker to feeRecipient will be attempted.\n uint256 expirationTimeSeconds; // Timestamp in seconds at which order expires. \n uint256 salt; // Arbitrary number to facilitate uniqueness of the order's hash. \n bytes makerAssetData; // Encoded data that can be decoded by a specified proxy contract when transferring makerAsset. The last byte references the id of this proxy.\n bytes takerAssetData; // Encoded data that can be decoded by a specified proxy contract when transferring takerAsset. The last byte references the id of this proxy.\n }\n // solhint-enable max-line-length\n\n struct OrderInfo {\n uint8 orderStatus; // Status that describes order's validity and fillability.\n bytes32 orderHash; // EIP712 hash of the order (see LibOrder.getOrderHash).\n uint256 orderTakerAssetFilledAmount; // Amount of order that has already been filled.\n }\n\n /// @dev Calculates Keccak-256 hash of the order.\n /// @param order The order structure.\n /// @return Keccak-256 EIP712 hash of the order.\n function getOrderHash(Order memory order)\n internal\n view\n returns (bytes32 orderHash)\n {\n orderHash = hashEIP712Message(hashOrder(order));\n return orderHash;\n }\n\n /// @dev Calculates EIP712 hash of the order.\n /// @param order The order structure.\n /// @return EIP712 hash of the order.\n function hashOrder(Order memory order)\n internal\n pure\n returns (bytes32 result)\n {\n bytes32 schemaHash = EIP712_ORDER_SCHEMA_HASH;\n bytes32 makerAssetDataHash = keccak256(order.makerAssetData);\n bytes32 takerAssetDataHash = keccak256(order.takerAssetData);\n\n // Assembly for more efficiently computing:\n // keccak256(abi.encode(\n // order.makerAddress,\n // order.takerAddress,\n // order.feeRecipientAddress,\n // order.senderAddress,\n // order.makerAssetAmount,\n // order.takerAssetAmount,\n // order.makerFee,\n // order.takerFee,\n // order.expirationTimeSeconds,\n // order.salt,\n // keccak256(order.makerAssetData),\n // keccak256(order.takerAssetData)\n // ));\n\n assembly {\n // Backup\n // solhint-disable-next-line space-after-comma\n let temp1 := mload(sub(order, 32))\n let temp2 := mload(add(order, 320))\n let temp3 := mload(add(order, 352))\n \n // Hash in place\n // solhint-disable-next-line space-after-comma\n mstore(sub(order, 32), schemaHash)\n mstore(add(order, 320), makerAssetDataHash)\n mstore(add(order, 352), takerAssetDataHash)\n result := keccak256(sub(order, 32), 416)\n \n // Restore\n // solhint-disable-next-line space-after-comma\n mstore(sub(order, 32), temp1)\n mstore(add(order, 320), temp2)\n mstore(add(order, 352), temp3)\n }\n return result;\n }\n}\n",
+ "2.0.0/protocol/Exchange/mixins/MAssetProxyDispatcher.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.24;\n\nimport \"../interfaces/IAssetProxyDispatcher.sol\";\n\n\ncontract MAssetProxyDispatcher is\n IAssetProxyDispatcher\n{\n\n // Logs registration of new asset proxy\n event AssetProxyRegistered(\n bytes4 id, // Id of new registered AssetProxy.\n address assetProxy // Address of new registered AssetProxy.\n );\n\n /// @dev Forwards arguments to assetProxy and calls `transferFrom`. Either succeeds or throws.\n /// @param assetData Byte array encoded for the asset.\n /// @param from Address to transfer token from.\n /// @param to Address to transfer token to.\n /// @param amount Amount of token to transfer.\n function dispatchTransferFrom(\n bytes memory assetData,\n address from,\n address to,\n uint256 amount\n )\n internal;\n}\n",
+ "2.0.0/protocol/Exchange/mixins/MExchangeCore.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../libs/LibOrder.sol\";\nimport \"../libs/LibFillResults.sol\";\nimport \"../interfaces/IExchangeCore.sol\";\n\n\ncontract MExchangeCore is\n IExchangeCore\n{\n // Fill event is emitted whenever an order is filled.\n event Fill(\n address indexed makerAddress, // Address that created the order. \n address indexed feeRecipientAddress, // Address that received fees.\n address takerAddress, // Address that filled the order.\n address senderAddress, // Address that called the Exchange contract (msg.sender).\n uint256 makerAssetFilledAmount, // Amount of makerAsset sold by maker and bought by taker. \n uint256 takerAssetFilledAmount, // Amount of takerAsset sold by taker and bought by maker.\n uint256 makerFeePaid, // Amount of ZRX paid to feeRecipient by maker.\n uint256 takerFeePaid, // Amount of ZRX paid to feeRecipient by taker.\n bytes32 indexed orderHash, // EIP712 hash of order (see LibOrder.getOrderHash).\n bytes makerAssetData, // Encoded data specific to makerAsset. \n bytes takerAssetData // Encoded data specific to takerAsset.\n );\n\n // Cancel event is emitted whenever an individual order is cancelled.\n event Cancel(\n address indexed makerAddress, // Address that created the order. \n address indexed feeRecipientAddress, // Address that would have recieved fees if order was filled. \n address senderAddress, // Address that called the Exchange contract (msg.sender).\n bytes32 indexed orderHash, // EIP712 hash of order (see LibOrder.getOrderHash).\n bytes makerAssetData, // Encoded data specific to makerAsset. \n bytes takerAssetData // Encoded data specific to takerAsset.\n );\n\n // CancelUpTo event is emitted whenever `cancelOrdersUpTo` is executed succesfully.\n event CancelUpTo(\n address indexed makerAddress, // Orders cancelled must have been created by this address.\n address indexed senderAddress, // Orders cancelled must have a `senderAddress` equal to this address.\n uint256 orderEpoch // Orders specified makerAddress and senderAddress with a salt <= this value are considered cancelled.\n );\n\n /// @dev Updates state with results of a fill order.\n /// @param order that was filled.\n /// @param takerAddress Address of taker who filled the order.\n /// @param orderTakerAssetFilledAmount Amount of order already filled.\n /// @return fillResults Amounts filled and fees paid by maker and taker.\n function updateFilledState(\n LibOrder.Order memory order,\n address takerAddress,\n bytes32 orderHash,\n uint256 orderTakerAssetFilledAmount,\n LibFillResults.FillResults memory fillResults\n )\n internal;\n\n /// @dev Updates state with results of cancelling an order.\n /// State is only updated if the order is currently fillable.\n /// Otherwise, updating state would have no effect.\n /// @param order that was cancelled.\n /// @param orderHash Hash of order that was cancelled.\n function updateCancelledState(\n LibOrder.Order memory order,\n bytes32 orderHash\n )\n internal;\n\n /// @dev Validates context for fillOrder. Succeeds or throws.\n /// @param order to be filled.\n /// @param orderInfo Status, orderHash, and amount already filled of order.\n /// @param takerAddress Address of order taker.\n /// @param takerAssetFillAmount Desired amount of order to fill by taker.\n /// @param takerAssetFilledAmount Amount of takerAsset that will be filled.\n /// @param signature Proof that the orders was created by its maker.\n function assertValidFill(\n LibOrder.Order memory order,\n LibOrder.OrderInfo memory orderInfo,\n address takerAddress,\n uint256 takerAssetFillAmount,\n uint256 takerAssetFilledAmount,\n bytes memory signature\n )\n internal\n view;\n\n /// @dev Validates context for cancelOrder. Succeeds or throws.\n /// @param order to be cancelled.\n /// @param orderInfo OrderStatus, orderHash, and amount already filled of order.\n function assertValidCancel(\n LibOrder.Order memory order,\n LibOrder.OrderInfo memory orderInfo\n )\n internal\n view;\n\n /// @dev Calculates amounts filled and fees paid by maker and taker.\n /// @param order to be filled.\n /// @param takerAssetFilledAmount Amount of takerAsset that will be filled.\n /// @return fillResults Amounts filled and fees paid by maker and taker.\n function calculateFillResults(\n LibOrder.Order memory order,\n uint256 takerAssetFilledAmount\n )\n internal\n pure\n returns (LibFillResults.FillResults memory fillResults);\n\n}\n",
+ "2.0.0/protocol/Exchange/mixins/MMatchOrders.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*/\npragma solidity 0.4.24;\npragma experimental ABIEncoderV2;\n\nimport \"../libs/LibOrder.sol\";\nimport \"../libs/LibFillResults.sol\";\nimport \"../interfaces/IMatchOrders.sol\";\n\n\ncontract MMatchOrders is\n IMatchOrders\n{\n\n /// @dev Validates context for matchOrders. Succeeds or throws.\n /// @param leftOrder First order to match.\n /// @param rightOrder Second order to match.\n function assertValidMatch(\n LibOrder.Order memory leftOrder,\n LibOrder.Order memory rightOrder\n )\n internal\n pure;\n\n /// @dev Calculates fill amounts for the matched orders.\n /// Each order is filled at their respective price point. However, the calculations are\n /// carried out as though the orders are both being filled at the right order's price point.\n /// The profit made by the leftOrder order goes to the taker (who matched the two orders).\n /// @param leftOrder First order to match.\n /// @param rightOrder Second order to match.\n /// @param leftOrderTakerAssetFilledAmount Amount of left order already filled.\n /// @param rightOrderTakerAssetFilledAmount Amount of right order already filled.\n /// @param matchedFillResults Amounts to fill and fees to pay by maker and taker of matched orders.\n function calculateMatchedFillResults(\n LibOrder.Order memory leftOrder,\n LibOrder.Order memory rightOrder,\n uint256 leftOrderTakerAssetFilledAmount,\n uint256 rightOrderTakerAssetFilledAmount\n )\n internal\n pure\n returns (LibFillResults.MatchedFillResults memory matchedFillResults);\n\n}\n",
+ "2.0.0/protocol/Exchange/mixins/MSignatureValidator.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.24;\n\nimport \"../interfaces/ISignatureValidator.sol\";\n\n\ncontract MSignatureValidator is\n ISignatureValidator\n{\n event SignatureValidatorApproval(\n address indexed signerAddress, // Address that approves or disapproves a contract to verify signatures.\n address indexed validatorAddress, // Address of signature validator contract.\n bool approved // Approval or disapproval of validator contract.\n );\n\n // Allowed signature types.\n enum SignatureType {\n Illegal, // 0x00, default value\n Invalid, // 0x01\n EIP712, // 0x02\n EthSign, // 0x03\n Caller, // 0x04\n Wallet, // 0x05\n Validator, // 0x06\n PreSigned, // 0x07\n Trezor, // 0x08\n NSignatureTypes // 0x09, number of signature types. Always leave at end.\n }\n}\n",
+ "2.0.0/protocol/Exchange/mixins/MTransactions.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*/\npragma solidity 0.4.24;\n\nimport \"../interfaces/ITransactions.sol\";\n\n\ncontract MTransactions is\n ITransactions\n{\n\n /// @dev The current function will be called in the context of this address (either 0x transaction signer or `msg.sender`).\n /// If calling a fill function, this address will represent the taker.\n /// If calling a cancel function, this address will represent the maker.\n /// @return Signer of 0x transaction if entry point is `executeTransaction`.\n /// `msg.sender` if entry point is any other function.\n function getCurrentContextAddress()\n internal\n view\n returns (address);\n}\n",
+ "2.0.0/utils/LibBytes/LibBytes.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.24;\n\n\nlibrary LibBytes {\n\n using LibBytes for bytes;\n\n /// @dev Gets the memory address for a byte array.\n /// @param input Byte array to lookup.\n /// @return memoryAddress Memory address of byte array. This\n /// points to the header of the byte array which contains\n /// the length.\n function rawAddress(bytes memory input)\n internal\n pure\n returns (uint256 memoryAddress)\n {\n assembly {\n memoryAddress := input\n }\n return memoryAddress;\n }\n \n /// @dev Gets the memory address for the contents of a byte array.\n /// @param input Byte array to lookup.\n /// @return memoryAddress Memory address of the contents of the byte array.\n function contentAddress(bytes memory input)\n internal\n pure\n returns (uint256 memoryAddress)\n {\n assembly {\n memoryAddress := add(input, 32)\n }\n return memoryAddress;\n }\n\n /// @dev Copies `length` bytes from memory location `source` to `dest`.\n /// @param dest memory address to copy bytes to.\n /// @param source memory address to copy bytes from.\n /// @param length number of bytes to copy.\n function memCopy(\n uint256 dest,\n uint256 source,\n uint256 length\n )\n internal\n pure\n {\n if (length < 32) {\n // Handle a partial word by reading destination and masking\n // off the bits we are interested in.\n // This correctly handles overlap, zero lengths and source == dest\n assembly {\n let mask := sub(exp(256, sub(32, length)), 1)\n let s := and(mload(source), not(mask))\n let d := and(mload(dest), mask)\n mstore(dest, or(s, d))\n }\n } else {\n // Skip the O(length) loop when source == dest.\n if (source == dest) {\n return;\n }\n\n // For large copies we copy whole words at a time. The final\n // word is aligned to the end of the range (instead of after the\n // previous) to handle partial words. So a copy will look like this:\n //\n // ####\n // ####\n // ####\n // ####\n //\n // We handle overlap in the source and destination range by\n // changing the copying direction. This prevents us from\n // overwriting parts of source that we still need to copy.\n //\n // This correctly handles source == dest\n //\n if (source > dest) {\n assembly {\n // We subtract 32 from `sEnd` and `dEnd` because it\n // is easier to compare with in the loop, and these\n // are also the addresses we need for copying the\n // last bytes.\n length := sub(length, 32)\n let sEnd := add(source, length)\n let dEnd := add(dest, length)\n\n // Remember the last 32 bytes of source\n // This needs to be done here and not after the loop\n // because we may have overwritten the last bytes in\n // source already due to overlap.\n let last := mload(sEnd)\n\n // Copy whole words front to back\n // Note: the first check is always true,\n // this could have been a do-while loop.\n // solhint-disable-next-line no-empty-blocks\n for {} lt(source, sEnd) {} {\n mstore(dest, mload(source))\n source := add(source, 32)\n dest := add(dest, 32)\n }\n \n // Write the last 32 bytes\n mstore(dEnd, last)\n }\n } else {\n assembly {\n // We subtract 32 from `sEnd` and `dEnd` because those\n // are the starting points when copying a word at the end.\n length := sub(length, 32)\n let sEnd := add(source, length)\n let dEnd := add(dest, length)\n\n // Remember the first 32 bytes of source\n // This needs to be done here and not after the loop\n // because we may have overwritten the first bytes in\n // source already due to overlap.\n let first := mload(source)\n\n // Copy whole words back to front\n // We use a signed comparisson here to allow dEnd to become\n // negative (happens when source and dest < 32). Valid\n // addresses in local memory will never be larger than\n // 2**255, so they can be safely re-interpreted as signed.\n // Note: the first check is always true,\n // this could have been a do-while loop.\n // solhint-disable-next-line no-empty-blocks\n for {} slt(dest, dEnd) {} {\n mstore(dEnd, mload(sEnd))\n sEnd := sub(sEnd, 32)\n dEnd := sub(dEnd, 32)\n }\n \n // Write the first 32 bytes\n mstore(dest, first)\n }\n }\n }\n }\n\n /// @dev Returns a slices from a byte array.\n /// @param b The byte array to take a slice from.\n /// @param from The starting index for the slice (inclusive).\n /// @param to The final index for the slice (exclusive).\n /// @return result The slice containing bytes at indices [from, to)\n function slice(\n bytes memory b,\n uint256 from,\n uint256 to\n )\n internal\n pure\n returns (bytes memory result)\n {\n require(\n from <= to,\n \"FROM_LESS_THAN_TO_REQUIRED\"\n );\n require(\n to < b.length,\n \"TO_LESS_THAN_LENGTH_REQUIRED\"\n );\n \n // Create a new bytes structure and copy contents\n result = new bytes(to - from);\n memCopy(\n result.contentAddress(),\n b.contentAddress() + from,\n result.length);\n return result;\n }\n \n /// @dev Returns a slice from a byte array without preserving the input.\n /// @param b The byte array to take a slice from. Will be destroyed in the process.\n /// @param from The starting index for the slice (inclusive).\n /// @param to The final index for the slice (exclusive).\n /// @return result The slice containing bytes at indices [from, to)\n /// @dev When `from == 0`, the original array will match the slice. In other cases its state will be corrupted.\n function sliceDestructive(\n bytes memory b,\n uint256 from,\n uint256 to\n )\n internal\n pure\n returns (bytes memory result)\n {\n require(\n from <= to,\n \"FROM_LESS_THAN_TO_REQUIRED\"\n );\n require(\n to < b.length,\n \"TO_LESS_THAN_LENGTH_REQUIRED\"\n );\n \n // Create a new bytes structure around [from, to) in-place.\n assembly {\n result := add(b, from)\n mstore(result, sub(to, from))\n }\n return result;\n }\n\n /// @dev Pops the last byte off of a byte array by modifying its length.\n /// @param b Byte array that will be modified.\n /// @return The byte that was popped off.\n function popLastByte(bytes memory b)\n internal\n pure\n returns (bytes1 result)\n {\n require(\n b.length > 0,\n \"GREATER_THAN_ZERO_LENGTH_REQUIRED\"\n );\n\n // Store last byte.\n result = b[b.length - 1];\n\n assembly {\n // Decrement length of byte array.\n let newLen := sub(mload(b), 1)\n mstore(b, newLen)\n }\n return result;\n }\n\n /// @dev Pops the last 20 bytes off of a byte array by modifying its length.\n /// @param b Byte array that will be modified.\n /// @return The 20 byte address that was popped off.\n function popLast20Bytes(bytes memory b)\n internal\n pure\n returns (address result)\n {\n require(\n b.length >= 20,\n \"GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\"\n );\n\n // Store last 20 bytes.\n result = readAddress(b, b.length - 20);\n\n assembly {\n // Subtract 20 from byte array length.\n let newLen := sub(mload(b), 20)\n mstore(b, newLen)\n }\n return result;\n }\n\n /// @dev Tests equality of two byte arrays.\n /// @param lhs First byte array to compare.\n /// @param rhs Second byte array to compare.\n /// @return True if arrays are the same. False otherwise.\n function equals(\n bytes memory lhs,\n bytes memory rhs\n )\n internal\n pure\n returns (bool equal)\n {\n // Keccak gas cost is 30 + numWords * 6. This is a cheap way to compare.\n // We early exit on unequal lengths, but keccak would also correctly\n // handle this.\n return lhs.length == rhs.length && keccak256(lhs) == keccak256(rhs);\n }\n\n /// @dev Reads an address from a position in a byte array.\n /// @param b Byte array containing an address.\n /// @param index Index in byte array of address.\n /// @return address from byte array.\n function readAddress(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (address result)\n {\n require(\n b.length >= index + 20, // 20 is length of address\n \"GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\"\n );\n\n // Add offset to index:\n // 1. Arrays are prefixed by 32-byte length parameter (add 32 to index)\n // 2. Account for size difference between address length and 32-byte storage word (subtract 12 from index)\n index += 20;\n\n // Read address from array memory\n assembly {\n // 1. Add index to address of bytes array\n // 2. Load 32-byte word from memory\n // 3. Apply 20-byte mask to obtain address\n result := and(mload(add(b, index)), 0xffffffffffffffffffffffffffffffffffffffff)\n }\n return result;\n }\n\n /// @dev Writes an address into a specific position in a byte array.\n /// @param b Byte array to insert address into.\n /// @param index Index in byte array of address.\n /// @param input Address to put into byte array.\n function writeAddress(\n bytes memory b,\n uint256 index,\n address input\n )\n internal\n pure\n {\n require(\n b.length >= index + 20, // 20 is length of address\n \"GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\"\n );\n\n // Add offset to index:\n // 1. Arrays are prefixed by 32-byte length parameter (add 32 to index)\n // 2. Account for size difference between address length and 32-byte storage word (subtract 12 from index)\n index += 20;\n\n // Store address into array memory\n assembly {\n // The address occupies 20 bytes and mstore stores 32 bytes.\n // First fetch the 32-byte word where we'll be storing the address, then\n // apply a mask so we have only the bytes in the word that the address will not occupy.\n // Then combine these bytes with the address and store the 32 bytes back to memory with mstore.\n\n // 1. Add index to address of bytes array\n // 2. Load 32-byte word from memory\n // 3. Apply 12-byte mask to obtain extra bytes occupying word of memory where we'll store the address\n let neighbors := and(\n mload(add(b, index)),\n 0xffffffffffffffffffffffff0000000000000000000000000000000000000000\n )\n \n // Make sure input address is clean.\n // (Solidity does not guarantee this)\n input := and(input, 0xffffffffffffffffffffffffffffffffffffffff)\n\n // Store the neighbors and address into memory\n mstore(add(b, index), xor(input, neighbors))\n }\n }\n\n /// @dev Reads a bytes32 value from a position in a byte array.\n /// @param b Byte array containing a bytes32 value.\n /// @param index Index in byte array of bytes32 value.\n /// @return bytes32 value from byte array.\n function readBytes32(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (bytes32 result)\n {\n require(\n b.length >= index + 32,\n \"GREATER_OR_EQUAL_TO_32_LENGTH_REQUIRED\"\n );\n\n // Arrays are prefixed by a 256 bit length parameter\n index += 32;\n\n // Read the bytes32 from array memory\n assembly {\n result := mload(add(b, index))\n }\n return result;\n }\n\n /// @dev Writes a bytes32 into a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input bytes32 to put into byte array.\n function writeBytes32(\n bytes memory b,\n uint256 index,\n bytes32 input\n )\n internal\n pure\n {\n require(\n b.length >= index + 32,\n \"GREATER_OR_EQUAL_TO_32_LENGTH_REQUIRED\"\n );\n\n // Arrays are prefixed by a 256 bit length parameter\n index += 32;\n\n // Read the bytes32 from array memory\n assembly {\n mstore(add(b, index), input)\n }\n }\n\n /// @dev Reads a uint256 value from a position in a byte array.\n /// @param b Byte array containing a uint256 value.\n /// @param index Index in byte array of uint256 value.\n /// @return uint256 value from byte array.\n function readUint256(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (uint256 result)\n {\n return uint256(readBytes32(b, index));\n }\n\n /// @dev Writes a uint256 into a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input uint256 to put into byte array.\n function writeUint256(\n bytes memory b,\n uint256 index,\n uint256 input\n )\n internal\n pure\n {\n writeBytes32(b, index, bytes32(input));\n }\n\n /// @dev Reads an unpadded bytes4 value from a position in a byte array.\n /// @param b Byte array containing a bytes4 value.\n /// @param index Index in byte array of bytes4 value.\n /// @return bytes4 value from byte array.\n function readBytes4(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (bytes4 result)\n {\n require(\n b.length >= index + 4,\n \"GREATER_OR_EQUAL_TO_4_LENGTH_REQUIRED\"\n );\n assembly {\n result := mload(add(b, 32))\n // Solidity does not require us to clean the trailing bytes.\n // We do it anyway\n result := and(result, 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000)\n }\n return result;\n }\n\n /// @dev Reads nested bytes from a specific position.\n /// @dev NOTE: the returned value overlaps with the input value.\n /// Both should be treated as immutable.\n /// @param b Byte array containing nested bytes.\n /// @param index Index of nested bytes.\n /// @return result Nested bytes.\n function readBytesWithLength(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (bytes memory result)\n {\n // Read length of nested bytes\n uint256 nestedBytesLength = readUint256(b, index);\n index += 32;\n\n // Assert length of <b> is valid, given\n // length of nested bytes\n require(\n b.length >= index + nestedBytesLength,\n \"GREATER_OR_EQUAL_TO_NESTED_BYTES_LENGTH_REQUIRED\"\n );\n \n // Return a pointer to the byte array as it exists inside `b`\n assembly {\n result := add(b, index)\n }\n return result;\n }\n\n /// @dev Inserts bytes at a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input bytes to insert.\n function writeBytesWithLength(\n bytes memory b,\n uint256 index,\n bytes memory input\n )\n internal\n pure\n {\n // Assert length of <b> is valid, given\n // length of input\n require(\n b.length >= index + 32 + input.length, // 32 bytes to store length\n \"GREATER_OR_EQUAL_TO_NESTED_BYTES_LENGTH_REQUIRED\"\n );\n\n // Copy <input> into <b>\n memCopy(\n b.contentAddress() + index,\n input.rawAddress(), // includes length of <input>\n input.length + 32 // +32 bytes to store <input> length\n );\n }\n\n /// @dev Performs a deep copy of a byte array onto another byte array of greater than or equal length.\n /// @param dest Byte array that will be overwritten with source bytes.\n /// @param source Byte array to copy onto dest bytes.\n function deepCopyBytes(\n bytes memory dest,\n bytes memory source\n )\n internal\n pure\n {\n uint256 sourceLen = source.length;\n // Dest length must be >= source length, or some bytes would not be copied.\n require(\n dest.length >= sourceLen,\n \"GREATER_OR_EQUAL_TO_SOURCE_BYTES_LENGTH_REQUIRED\"\n );\n memCopy(\n dest.contentAddress(),\n source.contentAddress(),\n sourceLen\n );\n }\n}\n",
+ "2.0.0/utils/Ownable/IOwnable.sol": "pragma solidity 0.4.24;\n\n/*\n * Ownable\n *\n * Base contract with an owner.\n * Provides onlyOwner modifier, which prevents function from running if it is called by anyone other than the owner.\n */\n\ncontract IOwnable {\n function transferOwnership(address newOwner)\n public;\n}\n",
+ "2.0.0/utils/Ownable/Ownable.sol": "pragma solidity 0.4.24;\n\n/*\n * Ownable\n *\n * Base contract with an owner.\n * Provides onlyOwner modifier, which prevents function from running if it is called by anyone other than the owner.\n */\n\nimport \"./IOwnable.sol\";\n\n\ncontract Ownable is IOwnable {\n address public owner;\n\n constructor ()\n public\n {\n owner = msg.sender;\n }\n\n modifier onlyOwner() {\n require(\n msg.sender == owner,\n \"ONLY_CONTRACT_OWNER\"\n );\n _;\n }\n\n function transferOwnership(address newOwner)\n public\n onlyOwner\n {\n if (newOwner != address(0)) {\n owner = newOwner;\n }\n }\n}\n",
+ "2.0.0/utils/SafeMath/SafeMath.sol": "pragma solidity 0.4.24;\n\n\ncontract SafeMath {\n function safeMul(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n if (a == 0) {\n return 0;\n }\n uint256 c = a * b;\n require(\n c / a == b,\n \"UINT256_OVERFLOW\"\n );\n return c;\n }\n\n function safeDiv(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n uint256 c = a / b;\n return c;\n }\n\n function safeSub(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n require(\n b <= a,\n \"UINT256_OVERFLOW\"\n );\n return a - b;\n }\n\n function safeAdd(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n uint256 c = a + b;\n require(\n c >= a,\n \"UINT256_OVERFLOW\"\n );\n return c;\n }\n\n function max64(uint64 a, uint64 b)\n internal\n pure\n returns (uint256)\n {\n return a >= b ? a : b;\n }\n\n function min64(uint64 a, uint64 b)\n internal\n pure\n returns (uint256)\n {\n return a < b ? a : b;\n }\n\n function max256(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n return a >= b ? a : b;\n }\n\n function min256(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n return a < b ? a : b;\n }\n}\n"
},
- "sourceTreeHashHex": "0xa862d06d390757b6ffa38da125eabc98e816c6e9467f6afd56ffb9f964da1733",
+ "sourceTreeHashHex": "0xbfc241cbae71226b40165a93c66351122af93c9b20c621b3c5d3ab7bd7145fdc",
"compiler": {
"name": "solc",
"version": "soljson-v0.4.24+commit.e67f0147.js",
diff --git a/packages/migrations/artifacts/2.0.0/ExchangeWrapper.json b/packages/migrations/artifacts/2.0.0/ExchangeWrapper.json
index 92fa91868..e6d619340 100644
--- a/packages/migrations/artifacts/2.0.0/ExchangeWrapper.json
+++ b/packages/migrations/artifacts/2.0.0/ExchangeWrapper.json
@@ -120,15 +120,15 @@
"evm": {
"bytecode": {
"linkReferences": {},
- "object": "0x608060405234801561001057600080fd5b50604051602080610a86833981018060405261002f9190810190610067565b60008054600160a060020a031916600160a060020a0392909216919091179055610099565b6000610060825161008d565b9392505050565b60006020828403121561007957600080fd5b60006100858484610054565b949350505050565b600160a060020a031690565b6109de806100a86000396000f30060806040526004361061004b5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663a2dbfe658114610050578063f7de1c8b14610072575b600080fd5b34801561005c57600080fd5b5061007061006b366004610538565b610092565b005b34801561007e57600080fd5b5061007061008d3660046105f4565b6101e4565b60405133906060907fb4be83d500000000000000000000000000000000000000000000000000000000906100ce908990899088906024016107d5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925260005491517fbfc8bfce00000000000000000000000000000000000000000000000000000000815290925073ffffffffffffffffffffffffffffffffffffffff9091169063bfc8bfce906101a9908890869086908990600401610868565b600060405180830381600087803b1580156101c357600080fd5b505af11580156101d7573d6000803e3d6000fd5b5050505050505050505050565b60405133906060907f4f9559b1000000000000000000000000000000000000000000000000000000009061021c908890602401610807565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925260005491517fbfc8bfce00000000000000000000000000000000000000000000000000000000815290925073ffffffffffffffffffffffffffffffffffffffff9091169063bfc8bfce906102f9908890869086908a908a9060040161081b565b600060405180830381600087803b15801561031357600080fd5b505af1158015610327573d6000803e3d6000fd5b50505050505050505050565b600061033f8235610924565b9392505050565b600080601f8301841361035857600080fd5b50813567ffffffffffffffff81111561037057600080fd5b60208301915083600182028301111561038857600080fd5b9250929050565b6000601f820183136103a057600080fd5b81356103b36103ae826108da565b6108b3565b915080825260208301602083018583830111156103cf57600080fd5b6103da838284610940565b50505092915050565b600061018082840312156103f657600080fd5b6104016101806108b3565b9050600061040f8484610333565b825250602061042084848301610333565b602083015250604061043484828501610333565b604083015250606061044884828501610333565b606083015250608061045c8482850161052c565b60808301525060a06104708482850161052c565b60a08301525060c06104848482850161052c565b60c08301525060e06104988482850161052c565b60e0830152506101006104ad8482850161052c565b610100830152506101206104c38482850161052c565b6101208301525061014082013567ffffffffffffffff8111156104e557600080fd5b6104f18482850161038f565b6101408301525061016082013567ffffffffffffffff81111561051357600080fd5b61051f8482850161038f565b6101608301525092915050565b600061033f823561093d565b600080600080600060a0868803121561055057600080fd5b853567ffffffffffffffff81111561056757600080fd5b610573888289016103e3565b95505060206105848882890161052c565b94505060406105958882890161052c565b935050606086013567ffffffffffffffff8111156105b257600080fd5b6105be8882890161038f565b925050608086013567ffffffffffffffff8111156105db57600080fd5b6105e78882890161038f565b9150509295509295909350565b6000806000806060858703121561060a57600080fd5b6000610616878761052c565b94505060206106278782880161052c565b935050604085013567ffffffffffffffff81111561064457600080fd5b61065087828801610346565b95989497509550505050565b61066581610924565b82525050565b6000828452602084019350610681838584610940565b61068a8361097c565b9093019392505050565b600061069f82610920565b8084526106b381602086016020860161094c565b6106bc8161097c565b9093016020019392505050565b80516000906101808401906106de858261065c565b5060208301516106f1602086018261065c565b506040830151610704604086018261065c565b506060830151610717606086018261065c565b50608083015161072a60808601826107cc565b5060a083015161073d60a08601826107cc565b5060c083015161075060c08601826107cc565b5060e083015161076360e08601826107cc565b506101008301516107786101008601826107cc565b5061012083015161078d6101208601826107cc565b506101408301518482036101408601526107a78282610694565b9150506101608301518482036101608601526107c38282610694565b95945050505050565b6106658161093d565b606080825281016107e681866106c9565b90506107f560208301856107cc565b81810360408301526107c38184610694565b6020810161081582846107cc565b92915050565b6080810161082982886107cc565b610836602083018761065c565b81810360408301526108488186610694565b9050818103606083015261085d81848661066b565b979650505050505050565b6080810161087682876107cc565b610883602083018661065c565b81810360408301526108958185610694565b905081810360608301526108a98184610694565b9695505050505050565b60405181810167ffffffffffffffff811182821017156108d257600080fd5b604052919050565b600067ffffffffffffffff8211156108f157600080fd5b506020601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160190565b5190565b73ffffffffffffffffffffffffffffffffffffffff1690565b90565b82818337506000910152565b60005b8381101561096757818101518382015260200161094f565b83811115610976576000848401525b50505050565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016905600a265627a7a723058206a874e8a835bf2f6abbffc089fb355e16d02e0b0d8dc65757e1c397aa5a807276c6578706572696d656e74616cf50037",
- "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP1 PUSH2 0xA86 DUP4 CODECOPY DUP2 ADD DUP1 PUSH1 0x40 MSTORE PUSH2 0x2F SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x67 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB NOT AND PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x99 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x60 DUP3 MLOAD PUSH2 0x8D JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x79 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x85 DUP5 DUP5 PUSH2 0x54 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x9DE DUP1 PUSH2 0xA8 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4B JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0xA2DBFE65 DUP2 EQ PUSH2 0x50 JUMPI DUP1 PUSH4 0xF7DE1C8B EQ PUSH2 0x72 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x70 PUSH2 0x6B CALLDATASIZE PUSH1 0x4 PUSH2 0x538 JUMP JUMPDEST PUSH2 0x92 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x70 PUSH2 0x8D CALLDATASIZE PUSH1 0x4 PUSH2 0x5F4 JUMP JUMPDEST PUSH2 0x1E4 JUMP JUMPDEST PUSH1 0x40 MLOAD CALLER SWAP1 PUSH1 0x60 SWAP1 PUSH32 0xB4BE83D500000000000000000000000000000000000000000000000000000000 SWAP1 PUSH2 0xCE SWAP1 DUP10 SWAP1 DUP10 SWAP1 DUP9 SWAP1 PUSH1 0x24 ADD PUSH2 0x7D5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 DUP2 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 MSTORE PUSH1 0x0 SLOAD SWAP2 MLOAD PUSH32 0xBFC8BFCE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 SWAP3 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0xBFC8BFCE SWAP1 PUSH2 0x1A9 SWAP1 DUP9 SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP10 SWAP1 PUSH1 0x4 ADD PUSH2 0x868 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1D7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD CALLER SWAP1 PUSH1 0x60 SWAP1 PUSH32 0x4F9559B100000000000000000000000000000000000000000000000000000000 SWAP1 PUSH2 0x21C SWAP1 DUP9 SWAP1 PUSH1 0x24 ADD PUSH2 0x807 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 DUP2 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 MSTORE PUSH1 0x0 SLOAD SWAP2 MLOAD PUSH32 0xBFC8BFCE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 SWAP3 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0xBFC8BFCE SWAP1 PUSH2 0x2F9 SWAP1 DUP9 SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP11 SWAP1 DUP11 SWAP1 PUSH1 0x4 ADD PUSH2 0x81B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x313 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x327 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x33F DUP3 CALLDATALOAD PUSH2 0x924 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x1F DUP4 ADD DUP5 SGT PUSH2 0x358 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x370 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x1 DUP3 MUL DUP4 ADD GT ISZERO PUSH2 0x388 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0x3A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x3B3 PUSH2 0x3AE DUP3 PUSH2 0x8DA JUMP JUMPDEST PUSH2 0x8B3 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP4 ADD DUP6 DUP4 DUP4 ADD GT ISZERO PUSH2 0x3CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3DA DUP4 DUP3 DUP5 PUSH2 0x940 JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x180 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x401 PUSH2 0x180 PUSH2 0x8B3 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x40F DUP5 DUP5 PUSH2 0x333 JUMP JUMPDEST DUP3 MSTORE POP PUSH1 0x20 PUSH2 0x420 DUP5 DUP5 DUP4 ADD PUSH2 0x333 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP PUSH1 0x40 PUSH2 0x434 DUP5 DUP3 DUP6 ADD PUSH2 0x333 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 PUSH2 0x448 DUP5 DUP3 DUP6 ADD PUSH2 0x333 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE POP PUSH1 0x80 PUSH2 0x45C DUP5 DUP3 DUP6 ADD PUSH2 0x52C JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE POP PUSH1 0xA0 PUSH2 0x470 DUP5 DUP3 DUP6 ADD PUSH2 0x52C JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE POP PUSH1 0xC0 PUSH2 0x484 DUP5 DUP3 DUP6 ADD PUSH2 0x52C JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE POP PUSH1 0xE0 PUSH2 0x498 DUP5 DUP3 DUP6 ADD PUSH2 0x52C JUMP JUMPDEST PUSH1 0xE0 DUP4 ADD MSTORE POP PUSH2 0x100 PUSH2 0x4AD DUP5 DUP3 DUP6 ADD PUSH2 0x52C JUMP JUMPDEST PUSH2 0x100 DUP4 ADD MSTORE POP PUSH2 0x120 PUSH2 0x4C3 DUP5 DUP3 DUP6 ADD PUSH2 0x52C JUMP JUMPDEST PUSH2 0x120 DUP4 ADD MSTORE POP PUSH2 0x140 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4F1 DUP5 DUP3 DUP6 ADD PUSH2 0x38F JUMP JUMPDEST PUSH2 0x140 DUP4 ADD MSTORE POP PUSH2 0x160 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x513 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x51F DUP5 DUP3 DUP6 ADD PUSH2 0x38F JUMP JUMPDEST PUSH2 0x160 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x33F DUP3 CALLDATALOAD PUSH2 0x93D JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x550 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x567 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x573 DUP9 DUP3 DUP10 ADD PUSH2 0x3E3 JUMP JUMPDEST SWAP6 POP POP PUSH1 0x20 PUSH2 0x584 DUP9 DUP3 DUP10 ADD PUSH2 0x52C JUMP JUMPDEST SWAP5 POP POP PUSH1 0x40 PUSH2 0x595 DUP9 DUP3 DUP10 ADD PUSH2 0x52C JUMP JUMPDEST SWAP4 POP POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x5B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5BE DUP9 DUP3 DUP10 ADD PUSH2 0x38F JUMP JUMPDEST SWAP3 POP POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x5DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5E7 DUP9 DUP3 DUP10 ADD PUSH2 0x38F JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x60A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x616 DUP8 DUP8 PUSH2 0x52C JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x627 DUP8 DUP3 DUP9 ADD PUSH2 0x52C JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x644 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x650 DUP8 DUP3 DUP9 ADD PUSH2 0x346 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH2 0x665 DUP2 PUSH2 0x924 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH2 0x681 DUP4 DUP6 DUP5 PUSH2 0x940 JUMP JUMPDEST PUSH2 0x68A DUP4 PUSH2 0x97C JUMP JUMPDEST SWAP1 SWAP4 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x69F DUP3 PUSH2 0x920 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH2 0x6B3 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x94C JUMP JUMPDEST PUSH2 0x6BC DUP2 PUSH2 0x97C JUMP JUMPDEST SWAP1 SWAP4 ADD PUSH1 0x20 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH2 0x180 DUP5 ADD SWAP1 PUSH2 0x6DE DUP6 DUP3 PUSH2 0x65C JUMP JUMPDEST POP PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x6F1 PUSH1 0x20 DUP7 ADD DUP3 PUSH2 0x65C JUMP JUMPDEST POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x704 PUSH1 0x40 DUP7 ADD DUP3 PUSH2 0x65C JUMP JUMPDEST POP PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x717 PUSH1 0x60 DUP7 ADD DUP3 PUSH2 0x65C JUMP JUMPDEST POP PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x72A PUSH1 0x80 DUP7 ADD DUP3 PUSH2 0x7CC JUMP JUMPDEST POP PUSH1 0xA0 DUP4 ADD MLOAD PUSH2 0x73D PUSH1 0xA0 DUP7 ADD DUP3 PUSH2 0x7CC JUMP JUMPDEST POP PUSH1 0xC0 DUP4 ADD MLOAD PUSH2 0x750 PUSH1 0xC0 DUP7 ADD DUP3 PUSH2 0x7CC JUMP JUMPDEST POP PUSH1 0xE0 DUP4 ADD MLOAD PUSH2 0x763 PUSH1 0xE0 DUP7 ADD DUP3 PUSH2 0x7CC JUMP JUMPDEST POP PUSH2 0x100 DUP4 ADD MLOAD PUSH2 0x778 PUSH2 0x100 DUP7 ADD DUP3 PUSH2 0x7CC JUMP JUMPDEST POP PUSH2 0x120 DUP4 ADD MLOAD PUSH2 0x78D PUSH2 0x120 DUP7 ADD DUP3 PUSH2 0x7CC JUMP JUMPDEST POP PUSH2 0x140 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH2 0x140 DUP7 ADD MSTORE PUSH2 0x7A7 DUP3 DUP3 PUSH2 0x694 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x160 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH2 0x160 DUP7 ADD MSTORE PUSH2 0x7C3 DUP3 DUP3 PUSH2 0x694 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x665 DUP2 PUSH2 0x93D JUMP JUMPDEST PUSH1 0x60 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x7E6 DUP2 DUP7 PUSH2 0x6C9 JUMP JUMPDEST SWAP1 POP PUSH2 0x7F5 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x7CC JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x7C3 DUP2 DUP5 PUSH2 0x694 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x815 DUP3 DUP5 PUSH2 0x7CC JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x829 DUP3 DUP9 PUSH2 0x7CC JUMP JUMPDEST PUSH2 0x836 PUSH1 0x20 DUP4 ADD DUP8 PUSH2 0x65C JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x848 DUP2 DUP7 PUSH2 0x694 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x85D DUP2 DUP5 DUP7 PUSH2 0x66B JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x876 DUP3 DUP8 PUSH2 0x7CC JUMP JUMPDEST PUSH2 0x883 PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x65C JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x895 DUP2 DUP6 PUSH2 0x694 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x8A9 DUP2 DUP5 PUSH2 0x694 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x8D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x8F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x1F SWAP2 SWAP1 SWAP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x967 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x94F JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x976 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP1 JUMP STOP LOG2 PUSH6 0x627A7A723058 KECCAK256 PUSH11 0x874E8A835BF2F6ABBFFC08 SWAP16 0xb3 SSTORE 0xe1 PUSH14 0x2E0B0D8DC65757E1C397AA5A807 0x27 PUSH13 0x6578706572696D656E74616CF5 STOP CALLDATACOPY ",
- "sourceMap": "752:2357:10:-;;;835:99;8:9:-1;5:2;;;30:1;27;20:12;5:2;835:99:10;;;;;;;;;;;;;;;;;;;;;;896:8;:31;;-1:-1:-1;;;;;;896:31:10;-1:-1:-1;;;;;896:31:10;;;;;;;;;;752:2357;;5:122:-1;;83:39;114:6;108:13;83:39;;;74:48;68:59;-1:-1;;;68:59;134:263;;249:2;237:9;228:7;224:23;220:32;217:2;;;265:1;262;255:12;217:2;300:1;317:64;373:7;353:9;317:64;;;307:74;211:186;-1:-1;;;;211:186;404:128;-1:-1;;;;;473:54;;456:76;;752:2357:10;;;;;;"
+ "object": "0x608060405234801561001057600080fd5b50604051602080610a86833981018060405261002f9190810190610067565b60008054600160a060020a031916600160a060020a0392909216919091179055610099565b6000610060825161008d565b9392505050565b60006020828403121561007957600080fd5b60006100858484610054565b949350505050565b600160a060020a031690565b6109de806100a86000396000f30060806040526004361061004b5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663a2dbfe658114610050578063f7de1c8b14610072575b600080fd5b34801561005c57600080fd5b5061007061006b366004610538565b610092565b005b34801561007e57600080fd5b5061007061008d3660046105f4565b6101e4565b60405133906060907fb4be83d500000000000000000000000000000000000000000000000000000000906100ce908990899088906024016107d5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925260005491517fbfc8bfce00000000000000000000000000000000000000000000000000000000815290925073ffffffffffffffffffffffffffffffffffffffff9091169063bfc8bfce906101a9908890869086908990600401610868565b600060405180830381600087803b1580156101c357600080fd5b505af11580156101d7573d6000803e3d6000fd5b5050505050505050505050565b60405133906060907f4f9559b1000000000000000000000000000000000000000000000000000000009061021c908890602401610807565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925260005491517fbfc8bfce00000000000000000000000000000000000000000000000000000000815290925073ffffffffffffffffffffffffffffffffffffffff9091169063bfc8bfce906102f9908890869086908a908a9060040161081b565b600060405180830381600087803b15801561031357600080fd5b505af1158015610327573d6000803e3d6000fd5b50505050505050505050565b600061033f8235610924565b9392505050565b600080601f8301841361035857600080fd5b50813567ffffffffffffffff81111561037057600080fd5b60208301915083600182028301111561038857600080fd5b9250929050565b6000601f820183136103a057600080fd5b81356103b36103ae826108da565b6108b3565b915080825260208301602083018583830111156103cf57600080fd5b6103da838284610940565b50505092915050565b600061018082840312156103f657600080fd5b6104016101806108b3565b9050600061040f8484610333565b825250602061042084848301610333565b602083015250604061043484828501610333565b604083015250606061044884828501610333565b606083015250608061045c8482850161052c565b60808301525060a06104708482850161052c565b60a08301525060c06104848482850161052c565b60c08301525060e06104988482850161052c565b60e0830152506101006104ad8482850161052c565b610100830152506101206104c38482850161052c565b6101208301525061014082013567ffffffffffffffff8111156104e557600080fd5b6104f18482850161038f565b6101408301525061016082013567ffffffffffffffff81111561051357600080fd5b61051f8482850161038f565b6101608301525092915050565b600061033f823561093d565b600080600080600060a0868803121561055057600080fd5b853567ffffffffffffffff81111561056757600080fd5b610573888289016103e3565b95505060206105848882890161052c565b94505060406105958882890161052c565b935050606086013567ffffffffffffffff8111156105b257600080fd5b6105be8882890161038f565b925050608086013567ffffffffffffffff8111156105db57600080fd5b6105e78882890161038f565b9150509295509295909350565b6000806000806060858703121561060a57600080fd5b6000610616878761052c565b94505060206106278782880161052c565b935050604085013567ffffffffffffffff81111561064457600080fd5b61065087828801610346565b95989497509550505050565b61066581610924565b82525050565b6000828452602084019350610681838584610940565b61068a8361097c565b9093019392505050565b600061069f82610920565b8084526106b381602086016020860161094c565b6106bc8161097c565b9093016020019392505050565b80516000906101808401906106de858261065c565b5060208301516106f1602086018261065c565b506040830151610704604086018261065c565b506060830151610717606086018261065c565b50608083015161072a60808601826107cc565b5060a083015161073d60a08601826107cc565b5060c083015161075060c08601826107cc565b5060e083015161076360e08601826107cc565b506101008301516107786101008601826107cc565b5061012083015161078d6101208601826107cc565b506101408301518482036101408601526107a78282610694565b9150506101608301518482036101608601526107c38282610694565b95945050505050565b6106658161093d565b606080825281016107e681866106c9565b90506107f560208301856107cc565b81810360408301526107c38184610694565b6020810161081582846107cc565b92915050565b6080810161082982886107cc565b610836602083018761065c565b81810360408301526108488186610694565b9050818103606083015261085d81848661066b565b979650505050505050565b6080810161087682876107cc565b610883602083018661065c565b81810360408301526108958185610694565b905081810360608301526108a98184610694565b9695505050505050565b60405181810167ffffffffffffffff811182821017156108d257600080fd5b604052919050565b600067ffffffffffffffff8211156108f157600080fd5b506020601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160190565b5190565b73ffffffffffffffffffffffffffffffffffffffff1690565b90565b82818337506000910152565b60005b8381101561096757818101518382015260200161094f565b83811115610976576000848401525b50505050565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016905600a265627a7a723058207cf6c43855ec3c90051a1652faa76da89c76ad7dcadee12edb0d13b52a6fd4f86c6578706572696d656e74616cf50037",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP1 PUSH2 0xA86 DUP4 CODECOPY DUP2 ADD DUP1 PUSH1 0x40 MSTORE PUSH2 0x2F SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x67 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB NOT AND PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x99 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x60 DUP3 MLOAD PUSH2 0x8D JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x79 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x85 DUP5 DUP5 PUSH2 0x54 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x9DE DUP1 PUSH2 0xA8 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4B JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0xA2DBFE65 DUP2 EQ PUSH2 0x50 JUMPI DUP1 PUSH4 0xF7DE1C8B EQ PUSH2 0x72 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x70 PUSH2 0x6B CALLDATASIZE PUSH1 0x4 PUSH2 0x538 JUMP JUMPDEST PUSH2 0x92 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x70 PUSH2 0x8D CALLDATASIZE PUSH1 0x4 PUSH2 0x5F4 JUMP JUMPDEST PUSH2 0x1E4 JUMP JUMPDEST PUSH1 0x40 MLOAD CALLER SWAP1 PUSH1 0x60 SWAP1 PUSH32 0xB4BE83D500000000000000000000000000000000000000000000000000000000 SWAP1 PUSH2 0xCE SWAP1 DUP10 SWAP1 DUP10 SWAP1 DUP9 SWAP1 PUSH1 0x24 ADD PUSH2 0x7D5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 DUP2 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 MSTORE PUSH1 0x0 SLOAD SWAP2 MLOAD PUSH32 0xBFC8BFCE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 SWAP3 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0xBFC8BFCE SWAP1 PUSH2 0x1A9 SWAP1 DUP9 SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP10 SWAP1 PUSH1 0x4 ADD PUSH2 0x868 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1D7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD CALLER SWAP1 PUSH1 0x60 SWAP1 PUSH32 0x4F9559B100000000000000000000000000000000000000000000000000000000 SWAP1 PUSH2 0x21C SWAP1 DUP9 SWAP1 PUSH1 0x24 ADD PUSH2 0x807 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 DUP2 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 MSTORE PUSH1 0x0 SLOAD SWAP2 MLOAD PUSH32 0xBFC8BFCE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 SWAP3 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0xBFC8BFCE SWAP1 PUSH2 0x2F9 SWAP1 DUP9 SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP11 SWAP1 DUP11 SWAP1 PUSH1 0x4 ADD PUSH2 0x81B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x313 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x327 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x33F DUP3 CALLDATALOAD PUSH2 0x924 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x1F DUP4 ADD DUP5 SGT PUSH2 0x358 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x370 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x1 DUP3 MUL DUP4 ADD GT ISZERO PUSH2 0x388 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0x3A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x3B3 PUSH2 0x3AE DUP3 PUSH2 0x8DA JUMP JUMPDEST PUSH2 0x8B3 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP4 ADD DUP6 DUP4 DUP4 ADD GT ISZERO PUSH2 0x3CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3DA DUP4 DUP3 DUP5 PUSH2 0x940 JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x180 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x401 PUSH2 0x180 PUSH2 0x8B3 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x40F DUP5 DUP5 PUSH2 0x333 JUMP JUMPDEST DUP3 MSTORE POP PUSH1 0x20 PUSH2 0x420 DUP5 DUP5 DUP4 ADD PUSH2 0x333 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP PUSH1 0x40 PUSH2 0x434 DUP5 DUP3 DUP6 ADD PUSH2 0x333 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 PUSH2 0x448 DUP5 DUP3 DUP6 ADD PUSH2 0x333 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE POP PUSH1 0x80 PUSH2 0x45C DUP5 DUP3 DUP6 ADD PUSH2 0x52C JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE POP PUSH1 0xA0 PUSH2 0x470 DUP5 DUP3 DUP6 ADD PUSH2 0x52C JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE POP PUSH1 0xC0 PUSH2 0x484 DUP5 DUP3 DUP6 ADD PUSH2 0x52C JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE POP PUSH1 0xE0 PUSH2 0x498 DUP5 DUP3 DUP6 ADD PUSH2 0x52C JUMP JUMPDEST PUSH1 0xE0 DUP4 ADD MSTORE POP PUSH2 0x100 PUSH2 0x4AD DUP5 DUP3 DUP6 ADD PUSH2 0x52C JUMP JUMPDEST PUSH2 0x100 DUP4 ADD MSTORE POP PUSH2 0x120 PUSH2 0x4C3 DUP5 DUP3 DUP6 ADD PUSH2 0x52C JUMP JUMPDEST PUSH2 0x120 DUP4 ADD MSTORE POP PUSH2 0x140 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4F1 DUP5 DUP3 DUP6 ADD PUSH2 0x38F JUMP JUMPDEST PUSH2 0x140 DUP4 ADD MSTORE POP PUSH2 0x160 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x513 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x51F DUP5 DUP3 DUP6 ADD PUSH2 0x38F JUMP JUMPDEST PUSH2 0x160 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x33F DUP3 CALLDATALOAD PUSH2 0x93D JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x550 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x567 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x573 DUP9 DUP3 DUP10 ADD PUSH2 0x3E3 JUMP JUMPDEST SWAP6 POP POP PUSH1 0x20 PUSH2 0x584 DUP9 DUP3 DUP10 ADD PUSH2 0x52C JUMP JUMPDEST SWAP5 POP POP PUSH1 0x40 PUSH2 0x595 DUP9 DUP3 DUP10 ADD PUSH2 0x52C JUMP JUMPDEST SWAP4 POP POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x5B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5BE DUP9 DUP3 DUP10 ADD PUSH2 0x38F JUMP JUMPDEST SWAP3 POP POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x5DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5E7 DUP9 DUP3 DUP10 ADD PUSH2 0x38F JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x60A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x616 DUP8 DUP8 PUSH2 0x52C JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x627 DUP8 DUP3 DUP9 ADD PUSH2 0x52C JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x644 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x650 DUP8 DUP3 DUP9 ADD PUSH2 0x346 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH2 0x665 DUP2 PUSH2 0x924 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH2 0x681 DUP4 DUP6 DUP5 PUSH2 0x940 JUMP JUMPDEST PUSH2 0x68A DUP4 PUSH2 0x97C JUMP JUMPDEST SWAP1 SWAP4 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x69F DUP3 PUSH2 0x920 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH2 0x6B3 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x94C JUMP JUMPDEST PUSH2 0x6BC DUP2 PUSH2 0x97C JUMP JUMPDEST SWAP1 SWAP4 ADD PUSH1 0x20 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH2 0x180 DUP5 ADD SWAP1 PUSH2 0x6DE DUP6 DUP3 PUSH2 0x65C JUMP JUMPDEST POP PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x6F1 PUSH1 0x20 DUP7 ADD DUP3 PUSH2 0x65C JUMP JUMPDEST POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x704 PUSH1 0x40 DUP7 ADD DUP3 PUSH2 0x65C JUMP JUMPDEST POP PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x717 PUSH1 0x60 DUP7 ADD DUP3 PUSH2 0x65C JUMP JUMPDEST POP PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x72A PUSH1 0x80 DUP7 ADD DUP3 PUSH2 0x7CC JUMP JUMPDEST POP PUSH1 0xA0 DUP4 ADD MLOAD PUSH2 0x73D PUSH1 0xA0 DUP7 ADD DUP3 PUSH2 0x7CC JUMP JUMPDEST POP PUSH1 0xC0 DUP4 ADD MLOAD PUSH2 0x750 PUSH1 0xC0 DUP7 ADD DUP3 PUSH2 0x7CC JUMP JUMPDEST POP PUSH1 0xE0 DUP4 ADD MLOAD PUSH2 0x763 PUSH1 0xE0 DUP7 ADD DUP3 PUSH2 0x7CC JUMP JUMPDEST POP PUSH2 0x100 DUP4 ADD MLOAD PUSH2 0x778 PUSH2 0x100 DUP7 ADD DUP3 PUSH2 0x7CC JUMP JUMPDEST POP PUSH2 0x120 DUP4 ADD MLOAD PUSH2 0x78D PUSH2 0x120 DUP7 ADD DUP3 PUSH2 0x7CC JUMP JUMPDEST POP PUSH2 0x140 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH2 0x140 DUP7 ADD MSTORE PUSH2 0x7A7 DUP3 DUP3 PUSH2 0x694 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x160 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH2 0x160 DUP7 ADD MSTORE PUSH2 0x7C3 DUP3 DUP3 PUSH2 0x694 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x665 DUP2 PUSH2 0x93D JUMP JUMPDEST PUSH1 0x60 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x7E6 DUP2 DUP7 PUSH2 0x6C9 JUMP JUMPDEST SWAP1 POP PUSH2 0x7F5 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x7CC JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x7C3 DUP2 DUP5 PUSH2 0x694 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x815 DUP3 DUP5 PUSH2 0x7CC JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x829 DUP3 DUP9 PUSH2 0x7CC JUMP JUMPDEST PUSH2 0x836 PUSH1 0x20 DUP4 ADD DUP8 PUSH2 0x65C JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x848 DUP2 DUP7 PUSH2 0x694 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x85D DUP2 DUP5 DUP7 PUSH2 0x66B JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x876 DUP3 DUP8 PUSH2 0x7CC JUMP JUMPDEST PUSH2 0x883 PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x65C JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x895 DUP2 DUP6 PUSH2 0x694 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x8A9 DUP2 DUP5 PUSH2 0x694 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x8D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x8F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x1F SWAP2 SWAP1 SWAP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x967 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x94F JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x976 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP1 JUMP STOP LOG2 PUSH6 0x627A7A723058 KECCAK256 PUSH29 0xF6C43855EC3C90051A1652FAA76DA89C76AD7DCADEE12EDB0D13B52A6F 0xd4 0xf8 PUSH13 0x6578706572696D656E74616CF5 STOP CALLDATACOPY ",
+ "sourceMap": "752:2418:10:-;;;896:99;8:9:-1;5:2;;;30:1;27;20:12;5:2;896:99:10;;;;;;;;;;;;;;;;;;;;;;957:8;:31;;-1:-1:-1;;;;;;957:31:10;-1:-1:-1;;;;;957:31:10;;;;;;;;;;752:2418;;5:122:-1;;83:39;114:6;108:13;83:39;;;74:48;68:59;-1:-1;;;68:59;134:263;;249:2;237:9;228:7;224:23;220:32;217:2;;;265:1;262;255:12;217:2;300:1;317:64;373:7;353:9;317:64;;;307:74;211:186;-1:-1;;;;211:186;404:128;-1:-1;;;;;473:54;;456:76;;752:2418:10;;;;;;"
},
"deployedBytecode": {
"linkReferences": {},
- "object": "0x60806040526004361061004b5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663a2dbfe658114610050578063f7de1c8b14610072575b600080fd5b34801561005c57600080fd5b5061007061006b366004610538565b610092565b005b34801561007e57600080fd5b5061007061008d3660046105f4565b6101e4565b60405133906060907fb4be83d500000000000000000000000000000000000000000000000000000000906100ce908990899088906024016107d5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925260005491517fbfc8bfce00000000000000000000000000000000000000000000000000000000815290925073ffffffffffffffffffffffffffffffffffffffff9091169063bfc8bfce906101a9908890869086908990600401610868565b600060405180830381600087803b1580156101c357600080fd5b505af11580156101d7573d6000803e3d6000fd5b5050505050505050505050565b60405133906060907f4f9559b1000000000000000000000000000000000000000000000000000000009061021c908890602401610807565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925260005491517fbfc8bfce00000000000000000000000000000000000000000000000000000000815290925073ffffffffffffffffffffffffffffffffffffffff9091169063bfc8bfce906102f9908890869086908a908a9060040161081b565b600060405180830381600087803b15801561031357600080fd5b505af1158015610327573d6000803e3d6000fd5b50505050505050505050565b600061033f8235610924565b9392505050565b600080601f8301841361035857600080fd5b50813567ffffffffffffffff81111561037057600080fd5b60208301915083600182028301111561038857600080fd5b9250929050565b6000601f820183136103a057600080fd5b81356103b36103ae826108da565b6108b3565b915080825260208301602083018583830111156103cf57600080fd5b6103da838284610940565b50505092915050565b600061018082840312156103f657600080fd5b6104016101806108b3565b9050600061040f8484610333565b825250602061042084848301610333565b602083015250604061043484828501610333565b604083015250606061044884828501610333565b606083015250608061045c8482850161052c565b60808301525060a06104708482850161052c565b60a08301525060c06104848482850161052c565b60c08301525060e06104988482850161052c565b60e0830152506101006104ad8482850161052c565b610100830152506101206104c38482850161052c565b6101208301525061014082013567ffffffffffffffff8111156104e557600080fd5b6104f18482850161038f565b6101408301525061016082013567ffffffffffffffff81111561051357600080fd5b61051f8482850161038f565b6101608301525092915050565b600061033f823561093d565b600080600080600060a0868803121561055057600080fd5b853567ffffffffffffffff81111561056757600080fd5b610573888289016103e3565b95505060206105848882890161052c565b94505060406105958882890161052c565b935050606086013567ffffffffffffffff8111156105b257600080fd5b6105be8882890161038f565b925050608086013567ffffffffffffffff8111156105db57600080fd5b6105e78882890161038f565b9150509295509295909350565b6000806000806060858703121561060a57600080fd5b6000610616878761052c565b94505060206106278782880161052c565b935050604085013567ffffffffffffffff81111561064457600080fd5b61065087828801610346565b95989497509550505050565b61066581610924565b82525050565b6000828452602084019350610681838584610940565b61068a8361097c565b9093019392505050565b600061069f82610920565b8084526106b381602086016020860161094c565b6106bc8161097c565b9093016020019392505050565b80516000906101808401906106de858261065c565b5060208301516106f1602086018261065c565b506040830151610704604086018261065c565b506060830151610717606086018261065c565b50608083015161072a60808601826107cc565b5060a083015161073d60a08601826107cc565b5060c083015161075060c08601826107cc565b5060e083015161076360e08601826107cc565b506101008301516107786101008601826107cc565b5061012083015161078d6101208601826107cc565b506101408301518482036101408601526107a78282610694565b9150506101608301518482036101608601526107c38282610694565b95945050505050565b6106658161093d565b606080825281016107e681866106c9565b90506107f560208301856107cc565b81810360408301526107c38184610694565b6020810161081582846107cc565b92915050565b6080810161082982886107cc565b610836602083018761065c565b81810360408301526108488186610694565b9050818103606083015261085d81848661066b565b979650505050505050565b6080810161087682876107cc565b610883602083018661065c565b81810360408301526108958185610694565b905081810360608301526108a98184610694565b9695505050505050565b60405181810167ffffffffffffffff811182821017156108d257600080fd5b604052919050565b600067ffffffffffffffff8211156108f157600080fd5b506020601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160190565b5190565b73ffffffffffffffffffffffffffffffffffffffff1690565b90565b82818337506000910152565b60005b8381101561096757818101518382015260200161094f565b83811115610976576000848401525b50505050565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016905600a265627a7a723058206a874e8a835bf2f6abbffc089fb355e16d02e0b0d8dc65757e1c397aa5a807276c6578706572696d656e74616cf50037",
- "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4B JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0xA2DBFE65 DUP2 EQ PUSH2 0x50 JUMPI DUP1 PUSH4 0xF7DE1C8B EQ PUSH2 0x72 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x70 PUSH2 0x6B CALLDATASIZE PUSH1 0x4 PUSH2 0x538 JUMP JUMPDEST PUSH2 0x92 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x70 PUSH2 0x8D CALLDATASIZE PUSH1 0x4 PUSH2 0x5F4 JUMP JUMPDEST PUSH2 0x1E4 JUMP JUMPDEST PUSH1 0x40 MLOAD CALLER SWAP1 PUSH1 0x60 SWAP1 PUSH32 0xB4BE83D500000000000000000000000000000000000000000000000000000000 SWAP1 PUSH2 0xCE SWAP1 DUP10 SWAP1 DUP10 SWAP1 DUP9 SWAP1 PUSH1 0x24 ADD PUSH2 0x7D5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 DUP2 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 MSTORE PUSH1 0x0 SLOAD SWAP2 MLOAD PUSH32 0xBFC8BFCE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 SWAP3 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0xBFC8BFCE SWAP1 PUSH2 0x1A9 SWAP1 DUP9 SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP10 SWAP1 PUSH1 0x4 ADD PUSH2 0x868 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1D7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD CALLER SWAP1 PUSH1 0x60 SWAP1 PUSH32 0x4F9559B100000000000000000000000000000000000000000000000000000000 SWAP1 PUSH2 0x21C SWAP1 DUP9 SWAP1 PUSH1 0x24 ADD PUSH2 0x807 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 DUP2 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 MSTORE PUSH1 0x0 SLOAD SWAP2 MLOAD PUSH32 0xBFC8BFCE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 SWAP3 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0xBFC8BFCE SWAP1 PUSH2 0x2F9 SWAP1 DUP9 SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP11 SWAP1 DUP11 SWAP1 PUSH1 0x4 ADD PUSH2 0x81B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x313 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x327 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x33F DUP3 CALLDATALOAD PUSH2 0x924 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x1F DUP4 ADD DUP5 SGT PUSH2 0x358 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x370 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x1 DUP3 MUL DUP4 ADD GT ISZERO PUSH2 0x388 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0x3A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x3B3 PUSH2 0x3AE DUP3 PUSH2 0x8DA JUMP JUMPDEST PUSH2 0x8B3 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP4 ADD DUP6 DUP4 DUP4 ADD GT ISZERO PUSH2 0x3CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3DA DUP4 DUP3 DUP5 PUSH2 0x940 JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x180 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x401 PUSH2 0x180 PUSH2 0x8B3 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x40F DUP5 DUP5 PUSH2 0x333 JUMP JUMPDEST DUP3 MSTORE POP PUSH1 0x20 PUSH2 0x420 DUP5 DUP5 DUP4 ADD PUSH2 0x333 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP PUSH1 0x40 PUSH2 0x434 DUP5 DUP3 DUP6 ADD PUSH2 0x333 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 PUSH2 0x448 DUP5 DUP3 DUP6 ADD PUSH2 0x333 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE POP PUSH1 0x80 PUSH2 0x45C DUP5 DUP3 DUP6 ADD PUSH2 0x52C JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE POP PUSH1 0xA0 PUSH2 0x470 DUP5 DUP3 DUP6 ADD PUSH2 0x52C JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE POP PUSH1 0xC0 PUSH2 0x484 DUP5 DUP3 DUP6 ADD PUSH2 0x52C JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE POP PUSH1 0xE0 PUSH2 0x498 DUP5 DUP3 DUP6 ADD PUSH2 0x52C JUMP JUMPDEST PUSH1 0xE0 DUP4 ADD MSTORE POP PUSH2 0x100 PUSH2 0x4AD DUP5 DUP3 DUP6 ADD PUSH2 0x52C JUMP JUMPDEST PUSH2 0x100 DUP4 ADD MSTORE POP PUSH2 0x120 PUSH2 0x4C3 DUP5 DUP3 DUP6 ADD PUSH2 0x52C JUMP JUMPDEST PUSH2 0x120 DUP4 ADD MSTORE POP PUSH2 0x140 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4F1 DUP5 DUP3 DUP6 ADD PUSH2 0x38F JUMP JUMPDEST PUSH2 0x140 DUP4 ADD MSTORE POP PUSH2 0x160 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x513 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x51F DUP5 DUP3 DUP6 ADD PUSH2 0x38F JUMP JUMPDEST PUSH2 0x160 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x33F DUP3 CALLDATALOAD PUSH2 0x93D JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x550 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x567 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x573 DUP9 DUP3 DUP10 ADD PUSH2 0x3E3 JUMP JUMPDEST SWAP6 POP POP PUSH1 0x20 PUSH2 0x584 DUP9 DUP3 DUP10 ADD PUSH2 0x52C JUMP JUMPDEST SWAP5 POP POP PUSH1 0x40 PUSH2 0x595 DUP9 DUP3 DUP10 ADD PUSH2 0x52C JUMP JUMPDEST SWAP4 POP POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x5B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5BE DUP9 DUP3 DUP10 ADD PUSH2 0x38F JUMP JUMPDEST SWAP3 POP POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x5DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5E7 DUP9 DUP3 DUP10 ADD PUSH2 0x38F JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x60A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x616 DUP8 DUP8 PUSH2 0x52C JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x627 DUP8 DUP3 DUP9 ADD PUSH2 0x52C JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x644 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x650 DUP8 DUP3 DUP9 ADD PUSH2 0x346 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH2 0x665 DUP2 PUSH2 0x924 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH2 0x681 DUP4 DUP6 DUP5 PUSH2 0x940 JUMP JUMPDEST PUSH2 0x68A DUP4 PUSH2 0x97C JUMP JUMPDEST SWAP1 SWAP4 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x69F DUP3 PUSH2 0x920 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH2 0x6B3 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x94C JUMP JUMPDEST PUSH2 0x6BC DUP2 PUSH2 0x97C JUMP JUMPDEST SWAP1 SWAP4 ADD PUSH1 0x20 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH2 0x180 DUP5 ADD SWAP1 PUSH2 0x6DE DUP6 DUP3 PUSH2 0x65C JUMP JUMPDEST POP PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x6F1 PUSH1 0x20 DUP7 ADD DUP3 PUSH2 0x65C JUMP JUMPDEST POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x704 PUSH1 0x40 DUP7 ADD DUP3 PUSH2 0x65C JUMP JUMPDEST POP PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x717 PUSH1 0x60 DUP7 ADD DUP3 PUSH2 0x65C JUMP JUMPDEST POP PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x72A PUSH1 0x80 DUP7 ADD DUP3 PUSH2 0x7CC JUMP JUMPDEST POP PUSH1 0xA0 DUP4 ADD MLOAD PUSH2 0x73D PUSH1 0xA0 DUP7 ADD DUP3 PUSH2 0x7CC JUMP JUMPDEST POP PUSH1 0xC0 DUP4 ADD MLOAD PUSH2 0x750 PUSH1 0xC0 DUP7 ADD DUP3 PUSH2 0x7CC JUMP JUMPDEST POP PUSH1 0xE0 DUP4 ADD MLOAD PUSH2 0x763 PUSH1 0xE0 DUP7 ADD DUP3 PUSH2 0x7CC JUMP JUMPDEST POP PUSH2 0x100 DUP4 ADD MLOAD PUSH2 0x778 PUSH2 0x100 DUP7 ADD DUP3 PUSH2 0x7CC JUMP JUMPDEST POP PUSH2 0x120 DUP4 ADD MLOAD PUSH2 0x78D PUSH2 0x120 DUP7 ADD DUP3 PUSH2 0x7CC JUMP JUMPDEST POP PUSH2 0x140 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH2 0x140 DUP7 ADD MSTORE PUSH2 0x7A7 DUP3 DUP3 PUSH2 0x694 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x160 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH2 0x160 DUP7 ADD MSTORE PUSH2 0x7C3 DUP3 DUP3 PUSH2 0x694 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x665 DUP2 PUSH2 0x93D JUMP JUMPDEST PUSH1 0x60 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x7E6 DUP2 DUP7 PUSH2 0x6C9 JUMP JUMPDEST SWAP1 POP PUSH2 0x7F5 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x7CC JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x7C3 DUP2 DUP5 PUSH2 0x694 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x815 DUP3 DUP5 PUSH2 0x7CC JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x829 DUP3 DUP9 PUSH2 0x7CC JUMP JUMPDEST PUSH2 0x836 PUSH1 0x20 DUP4 ADD DUP8 PUSH2 0x65C JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x848 DUP2 DUP7 PUSH2 0x694 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x85D DUP2 DUP5 DUP7 PUSH2 0x66B JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x876 DUP3 DUP8 PUSH2 0x7CC JUMP JUMPDEST PUSH2 0x883 PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x65C JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x895 DUP2 DUP6 PUSH2 0x694 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x8A9 DUP2 DUP5 PUSH2 0x694 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x8D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x8F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x1F SWAP2 SWAP1 SWAP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x967 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x94F JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x976 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP1 JUMP STOP LOG2 PUSH6 0x627A7A723058 KECCAK256 PUSH11 0x874E8A835BF2F6ABBFFC08 SWAP16 0xb3 SSTORE 0xe1 PUSH14 0x2E0B0D8DC65757E1C397AA5A807 0x27 PUSH13 0x6578706572696D656E74616CF5 STOP CALLDATACOPY ",
- "sourceMap": "752:2357:10:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;1395:687;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1395:687:10;;;;;;;;;;;2533:574;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2533:574:10;;;;;;;;;1395:687;1729:154;;1643:10;;1709:17;;1765:27;;1729:154;;1806:5;;1825:20;;1859:14;;1729:154;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;1729:154:10;;;49:4:-1;25:18;;61:17;;1729:154:10;182:15:-1;1729:154:10;;;;179:29:-1;;;;160:49;;;-1:-1;1948:8:10;:127;;;;;1729:154;;-1:-1:-1;1948:8:10;;;;;:27;;:127;;1989:4;;2007:12;;1729:154;;2051:14;;1948:127;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1948:127:10;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1948:127:10;;;;1395:687;;;;;;;:::o;2533:574::-;2791:110;;2705:10;;2771:17;;2827:34;;2791:110;;2875:16;;2791:110;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;2791:110:10;;;49:4:-1;25:18;;61:17;;2791:110:10;182:15:-1;2791:110:10;;;;179:29:-1;;;;160:49;;;-1:-1;2973:8:10;:127;;;;;2791:110;;-1:-1:-1;2973:8:10;;;;;:27;;:127;;3014:4;;3032:12;;2791:110;;3076:14;;;;2973:127;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2973:127:10;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2973:127:10;;;;2533:574;;;;;;:::o;5:118:-1:-;;72:46;110:6;97:20;72:46;;;63:55;57:66;-1:-1;;;57:66;144:335;;;251:4;239:17;;235:27;-1:-1;225:2;;276:1;273;266:12;225:2;-1:-1;296:20;;336:18;325:30;;322:2;;;368:1;365;358:12;322:2;402:4;394:6;390:17;378:29;;452:3;445;437:6;433:16;423:8;419:31;416:40;413:2;;;469:1;466;459:12;413:2;218:261;;;;;;488:432;;578:4;566:17;;562:27;-1:-1;552:2;;603:1;600;593:12;552:2;640:6;627:20;662:60;677:44;714:6;677:44;;;662:60;;;653:69;;742:6;735:5;728:21;778:4;770:6;766:17;811:4;804:5;800:16;846:3;837:6;832:3;828:16;825:25;822:2;;;863:1;860;853:12;822:2;873:41;907:6;902:3;897;873:41;;;545:375;;;;;;;;1405:2208;;1516:5;1504:9;1499:3;1495:19;1491:31;1488:2;;;1535:1;1532;1525:12;1488:2;1553:21;1568:5;1553:21;;;1544:30;-1:-1;1632:1;1663:49;1708:3;1688:9;1663:49;;;1639:74;;-1:-1;1782:2;1815:49;1860:3;1836:22;;;1815:49;;;1808:4;1801:5;1797:16;1790:75;1734:142;1941:2;1974:49;2019:3;2010:6;1999:9;1995:22;1974:49;;;1967:4;1960:5;1956:16;1949:75;1886:149;2094:2;2127:49;2172:3;2163:6;2152:9;2148:22;2127:49;;;2120:4;2113:5;2109:16;2102:75;2045:143;2250:3;2284:49;2329:3;2320:6;2309:9;2305:22;2284:49;;;2277:4;2270:5;2266:16;2259:75;2198:147;2407:3;2441:49;2486:3;2477:6;2466:9;2462:22;2441:49;;;2434:4;2427:5;2423:16;2416:75;2355:147;2556:3;2590:49;2635:3;2626:6;2615:9;2611:22;2590:49;;;2583:4;2576:5;2572:16;2565:75;2512:139;2705:3;2739:49;2784:3;2775:6;2764:9;2760:22;2739:49;;;2732:4;2725:5;2721:16;2714:75;2661:139;2867:3;2902:49;2947:3;2938:6;2927:9;2923:22;2902:49;;;2894:5;2887;2883:17;2876:76;2810:153;3013:3;3048:49;3093:3;3084:6;3073:9;3069:22;3048:49;;;3040:5;3033;3029:17;3022:76;2973:136;3197:3;3186:9;3182:19;3169:33;3222:18;3214:6;3211:30;3208:2;;;3254:1;3251;3244:12;3208:2;3290:54;3340:3;3331:6;3320:9;3316:22;3290:54;;;3282:5;3275;3271:17;3264:81;3119:237;3444:3;3433:9;3429:19;3416:33;3469:18;3461:6;3458:30;3455:2;;;3501:1;3498;3491:12;3455:2;3537:54;3587:3;3578:6;3567:9;3563:22;3537:54;;;3529:5;3522;3518:17;3511:81;3366:237;1482:2131;;;;;3620:118;;3687:46;3725:6;3712:20;3687:46;;3745:1081;;;;;;3957:3;3945:9;3936:7;3932:23;3928:33;3925:2;;;3974:1;3971;3964:12;3925:2;4009:31;;4060:18;4049:30;;4046:2;;;4092:1;4089;4082:12;4046:2;4112:75;4179:7;4170:6;4159:9;4155:22;4112:75;;;4102:85;;3988:205;4224:2;4242:53;4287:7;4278:6;4267:9;4263:22;4242:53;;;4232:63;;4203:98;4332:2;4350:53;4395:7;4386:6;4375:9;4371:22;4350:53;;;4340:63;;4311:98;4468:2;4457:9;4453:18;4440:32;4492:18;4484:6;4481:30;4478:2;;;4524:1;4521;4514:12;4478:2;4544:62;4598:7;4589:6;4578:9;4574:22;4544:62;;;4534:72;;4419:193;4671:3;4660:9;4656:19;4643:33;4696:18;4688:6;4685:30;4682:2;;;4728:1;4725;4718:12;4682:2;4748:62;4802:7;4793:6;4782:9;4778:22;4748:62;;;4738:72;;4622:194;3919:907;;;;;;;;;4833:615;;;;;4990:2;4978:9;4969:7;4965:23;4961:32;4958:2;;;5006:1;5003;4996:12;4958:2;5041:1;5058:53;5103:7;5083:9;5058:53;;;5048:63;;5020:97;5148:2;5166:53;5211:7;5202:6;5191:9;5187:22;5166:53;;;5156:63;;5127:98;5284:2;5273:9;5269:18;5256:32;5308:18;5300:6;5297:30;5294:2;;;5340:1;5337;5330:12;5294:2;5368:64;5424:7;5415:6;5404:9;5400:22;5368:64;;;4952:496;;;;-1:-1;5350:82;-1:-1;;;;4952:496;5455:110;5528:31;5553:5;5528:31;;;5523:3;5516:44;5510:55;;;5593:261;;5701:6;5696:3;5689:19;5725:4;5720:3;5716:14;5709:21;;5755:43;5791:6;5786:3;5779:5;5755:43;;;5819:29;5841:6;5819:29;;;5810:39;;;;5683:171;-1:-1;;;5683:171;5861:297;;5961:38;5993:5;5961:38;;;6016:6;6011:3;6004:19;6028:63;6084:6;6077:4;6072:3;6068:14;6061:4;6054:5;6050:16;6028:63;;;6123:29;6145:6;6123:29;;;6103:50;;;6116:4;6103:50;;5941:217;-1:-1;;;5941:217;6514:2417;6727:22;;6514:2417;;6649:5;6640:15;;;6761:61;6644:3;6727:22;6761:61;;;6670:164;6918:4;6911:5;6907:16;6901:23;6936:62;6992:4;6987:3;6983:14;6970:11;6936:62;;;6844:166;7101:4;7094:5;7090:16;7084:23;7119:62;7175:4;7170:3;7166:14;7153:11;7119:62;;;7020:173;7278:4;7271:5;7267:16;7261:23;7296:62;7352:4;7347:3;7343:14;7330:11;7296:62;;;7203:167;7458:4;7451:5;7447:16;7441:23;7476:62;7532:4;7527:3;7523:14;7510:11;7476:62;;;7380:170;7638:4;7631:5;7627:16;7621:23;7656:62;7712:4;7707:3;7703:14;7690:11;7656:62;;;7560:170;7810:4;7803:5;7799:16;7793:23;7828:62;7884:4;7879:3;7875:14;7862:11;7828:62;;;7740:162;7982:4;7975:5;7971:16;7965:23;8000:62;8056:4;8051:3;8047:14;8034:11;8000:62;;;7912:162;8167:5;8160;8156:17;8150:24;8186:63;8242:5;8237:3;8233:15;8220:11;8186:63;;;8084:177;8337:5;8330;8326:17;8320:24;8356:63;8412:5;8407:3;8403:15;8390:11;8356:63;;;8271:160;8517:5;8510;8506:17;8500:24;8570:3;8564:4;8560:14;8552:5;8547:3;8543:15;8536:39;8590:66;8651:4;8638:11;8590:66;;;8582:74;;8441:227;8754:5;8747;8743:17;8737:24;8807:3;8801:4;8797:14;8789:5;8784:3;8780:15;8773:39;8827:66;8888:4;8875:11;8827:66;;;8819:74;6622:2309;-1:-1;;;;;6622:2309;8938:110;9011:31;9036:5;9011:31;;9055:615;9281:2;9295:47;;;9266:18;;9356:92;9266:18;9434:6;9356:92;;;9348:100;;9459:62;9517:2;9506:9;9502:18;9493:6;9459:62;;;9569:9;9563:4;9559:20;9554:2;9543:9;9539:18;9532:48;9594:66;9655:4;9646:6;9594:66;;9677:193;9785:2;9770:18;;9799:61;9774:9;9833:6;9799:61;;;9756:114;;;;;9877:685;10115:3;10100:19;;10130:61;10104:9;10164:6;10130:61;;;10202:62;10260:2;10249:9;10245:18;10236:6;10202:62;;;10312:9;10306:4;10302:20;10297:2;10286:9;10282:18;10275:48;10337:66;10398:4;10389:6;10337:66;;;10329:74;;10451:9;10445:4;10441:20;10436:2;10425:9;10421:18;10414:48;10476:76;10547:4;10538:6;10530;10476:76;;;10468:84;10086:476;-1:-1;;;;;;;10086:476;10569:665;10797:3;10782:19;;10812:61;10786:9;10846:6;10812:61;;;10884:62;10942:2;10931:9;10927:18;10918:6;10884:62;;;10994:9;10988:4;10984:20;10979:2;10968:9;10964:18;10957:48;11019:66;11080:4;11071:6;11019:66;;;11011:74;;11133:9;11127:4;11123:20;11118:2;11107:9;11103:18;11096:48;11158:66;11219:4;11210:6;11158:66;;;11150:74;10768:466;-1:-1;;;;;;10768:466;11241:256;11303:2;11297:9;11329:17;;;11404:18;11389:34;;11425:22;;;11386:62;11383:2;;;11461:1;11458;11451:12;11383:2;11477;11470:22;11281:216;;-1:-1;11281:216;11504:254;;11643:18;11635:6;11632:30;11629:2;;;11675:1;11672;11665:12;11629:2;-1:-1;11748:4;11719;11696:17;;;;11715:9;11692:33;11738:15;;11566:192;12030:87;12100:12;;12084:33;12222:128;12302:42;12291:54;;12274:76;12357:79;12426:5;12409:27;12665:145;12746:6;12741:3;12736;12723:30;-1:-1;12802:1;12784:16;;12777:27;12716:94;12819:268;12884:1;12891:101;12905:6;12902:1;12899:13;12891:101;;;12972:11;;;12966:18;12953:11;;;12946:39;12927:2;12920:10;12891:101;;;13007:6;13004:1;13001:13;12998:2;;;13072:1;13063:6;13058:3;13054:16;13047:27;12998:2;12868:219;;;;;13095:97;13183:2;13163:14;13179:7;13159:28;;13143:49"
+ "object": "0x60806040526004361061004b5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663a2dbfe658114610050578063f7de1c8b14610072575b600080fd5b34801561005c57600080fd5b5061007061006b366004610538565b610092565b005b34801561007e57600080fd5b5061007061008d3660046105f4565b6101e4565b60405133906060907fb4be83d500000000000000000000000000000000000000000000000000000000906100ce908990899088906024016107d5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925260005491517fbfc8bfce00000000000000000000000000000000000000000000000000000000815290925073ffffffffffffffffffffffffffffffffffffffff9091169063bfc8bfce906101a9908890869086908990600401610868565b600060405180830381600087803b1580156101c357600080fd5b505af11580156101d7573d6000803e3d6000fd5b5050505050505050505050565b60405133906060907f4f9559b1000000000000000000000000000000000000000000000000000000009061021c908890602401610807565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925260005491517fbfc8bfce00000000000000000000000000000000000000000000000000000000815290925073ffffffffffffffffffffffffffffffffffffffff9091169063bfc8bfce906102f9908890869086908a908a9060040161081b565b600060405180830381600087803b15801561031357600080fd5b505af1158015610327573d6000803e3d6000fd5b50505050505050505050565b600061033f8235610924565b9392505050565b600080601f8301841361035857600080fd5b50813567ffffffffffffffff81111561037057600080fd5b60208301915083600182028301111561038857600080fd5b9250929050565b6000601f820183136103a057600080fd5b81356103b36103ae826108da565b6108b3565b915080825260208301602083018583830111156103cf57600080fd5b6103da838284610940565b50505092915050565b600061018082840312156103f657600080fd5b6104016101806108b3565b9050600061040f8484610333565b825250602061042084848301610333565b602083015250604061043484828501610333565b604083015250606061044884828501610333565b606083015250608061045c8482850161052c565b60808301525060a06104708482850161052c565b60a08301525060c06104848482850161052c565b60c08301525060e06104988482850161052c565b60e0830152506101006104ad8482850161052c565b610100830152506101206104c38482850161052c565b6101208301525061014082013567ffffffffffffffff8111156104e557600080fd5b6104f18482850161038f565b6101408301525061016082013567ffffffffffffffff81111561051357600080fd5b61051f8482850161038f565b6101608301525092915050565b600061033f823561093d565b600080600080600060a0868803121561055057600080fd5b853567ffffffffffffffff81111561056757600080fd5b610573888289016103e3565b95505060206105848882890161052c565b94505060406105958882890161052c565b935050606086013567ffffffffffffffff8111156105b257600080fd5b6105be8882890161038f565b925050608086013567ffffffffffffffff8111156105db57600080fd5b6105e78882890161038f565b9150509295509295909350565b6000806000806060858703121561060a57600080fd5b6000610616878761052c565b94505060206106278782880161052c565b935050604085013567ffffffffffffffff81111561064457600080fd5b61065087828801610346565b95989497509550505050565b61066581610924565b82525050565b6000828452602084019350610681838584610940565b61068a8361097c565b9093019392505050565b600061069f82610920565b8084526106b381602086016020860161094c565b6106bc8161097c565b9093016020019392505050565b80516000906101808401906106de858261065c565b5060208301516106f1602086018261065c565b506040830151610704604086018261065c565b506060830151610717606086018261065c565b50608083015161072a60808601826107cc565b5060a083015161073d60a08601826107cc565b5060c083015161075060c08601826107cc565b5060e083015161076360e08601826107cc565b506101008301516107786101008601826107cc565b5061012083015161078d6101208601826107cc565b506101408301518482036101408601526107a78282610694565b9150506101608301518482036101608601526107c38282610694565b95945050505050565b6106658161093d565b606080825281016107e681866106c9565b90506107f560208301856107cc565b81810360408301526107c38184610694565b6020810161081582846107cc565b92915050565b6080810161082982886107cc565b610836602083018761065c565b81810360408301526108488186610694565b9050818103606083015261085d81848661066b565b979650505050505050565b6080810161087682876107cc565b610883602083018661065c565b81810360408301526108958185610694565b905081810360608301526108a98184610694565b9695505050505050565b60405181810167ffffffffffffffff811182821017156108d257600080fd5b604052919050565b600067ffffffffffffffff8211156108f157600080fd5b506020601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160190565b5190565b73ffffffffffffffffffffffffffffffffffffffff1690565b90565b82818337506000910152565b60005b8381101561096757818101518382015260200161094f565b83811115610976576000848401525b50505050565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016905600a265627a7a723058207cf6c43855ec3c90051a1652faa76da89c76ad7dcadee12edb0d13b52a6fd4f86c6578706572696d656e74616cf50037",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4B JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0xA2DBFE65 DUP2 EQ PUSH2 0x50 JUMPI DUP1 PUSH4 0xF7DE1C8B EQ PUSH2 0x72 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x70 PUSH2 0x6B CALLDATASIZE PUSH1 0x4 PUSH2 0x538 JUMP JUMPDEST PUSH2 0x92 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x70 PUSH2 0x8D CALLDATASIZE PUSH1 0x4 PUSH2 0x5F4 JUMP JUMPDEST PUSH2 0x1E4 JUMP JUMPDEST PUSH1 0x40 MLOAD CALLER SWAP1 PUSH1 0x60 SWAP1 PUSH32 0xB4BE83D500000000000000000000000000000000000000000000000000000000 SWAP1 PUSH2 0xCE SWAP1 DUP10 SWAP1 DUP10 SWAP1 DUP9 SWAP1 PUSH1 0x24 ADD PUSH2 0x7D5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 DUP2 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 MSTORE PUSH1 0x0 SLOAD SWAP2 MLOAD PUSH32 0xBFC8BFCE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 SWAP3 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0xBFC8BFCE SWAP1 PUSH2 0x1A9 SWAP1 DUP9 SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP10 SWAP1 PUSH1 0x4 ADD PUSH2 0x868 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1D7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD CALLER SWAP1 PUSH1 0x60 SWAP1 PUSH32 0x4F9559B100000000000000000000000000000000000000000000000000000000 SWAP1 PUSH2 0x21C SWAP1 DUP9 SWAP1 PUSH1 0x24 ADD PUSH2 0x807 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 DUP2 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 MSTORE PUSH1 0x0 SLOAD SWAP2 MLOAD PUSH32 0xBFC8BFCE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 SWAP3 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0xBFC8BFCE SWAP1 PUSH2 0x2F9 SWAP1 DUP9 SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP11 SWAP1 DUP11 SWAP1 PUSH1 0x4 ADD PUSH2 0x81B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x313 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x327 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x33F DUP3 CALLDATALOAD PUSH2 0x924 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x1F DUP4 ADD DUP5 SGT PUSH2 0x358 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x370 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x1 DUP3 MUL DUP4 ADD GT ISZERO PUSH2 0x388 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0x3A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x3B3 PUSH2 0x3AE DUP3 PUSH2 0x8DA JUMP JUMPDEST PUSH2 0x8B3 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP4 ADD DUP6 DUP4 DUP4 ADD GT ISZERO PUSH2 0x3CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3DA DUP4 DUP3 DUP5 PUSH2 0x940 JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x180 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x401 PUSH2 0x180 PUSH2 0x8B3 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x40F DUP5 DUP5 PUSH2 0x333 JUMP JUMPDEST DUP3 MSTORE POP PUSH1 0x20 PUSH2 0x420 DUP5 DUP5 DUP4 ADD PUSH2 0x333 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP PUSH1 0x40 PUSH2 0x434 DUP5 DUP3 DUP6 ADD PUSH2 0x333 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 PUSH2 0x448 DUP5 DUP3 DUP6 ADD PUSH2 0x333 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE POP PUSH1 0x80 PUSH2 0x45C DUP5 DUP3 DUP6 ADD PUSH2 0x52C JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE POP PUSH1 0xA0 PUSH2 0x470 DUP5 DUP3 DUP6 ADD PUSH2 0x52C JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE POP PUSH1 0xC0 PUSH2 0x484 DUP5 DUP3 DUP6 ADD PUSH2 0x52C JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE POP PUSH1 0xE0 PUSH2 0x498 DUP5 DUP3 DUP6 ADD PUSH2 0x52C JUMP JUMPDEST PUSH1 0xE0 DUP4 ADD MSTORE POP PUSH2 0x100 PUSH2 0x4AD DUP5 DUP3 DUP6 ADD PUSH2 0x52C JUMP JUMPDEST PUSH2 0x100 DUP4 ADD MSTORE POP PUSH2 0x120 PUSH2 0x4C3 DUP5 DUP3 DUP6 ADD PUSH2 0x52C JUMP JUMPDEST PUSH2 0x120 DUP4 ADD MSTORE POP PUSH2 0x140 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4F1 DUP5 DUP3 DUP6 ADD PUSH2 0x38F JUMP JUMPDEST PUSH2 0x140 DUP4 ADD MSTORE POP PUSH2 0x160 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x513 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x51F DUP5 DUP3 DUP6 ADD PUSH2 0x38F JUMP JUMPDEST PUSH2 0x160 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x33F DUP3 CALLDATALOAD PUSH2 0x93D JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x550 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x567 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x573 DUP9 DUP3 DUP10 ADD PUSH2 0x3E3 JUMP JUMPDEST SWAP6 POP POP PUSH1 0x20 PUSH2 0x584 DUP9 DUP3 DUP10 ADD PUSH2 0x52C JUMP JUMPDEST SWAP5 POP POP PUSH1 0x40 PUSH2 0x595 DUP9 DUP3 DUP10 ADD PUSH2 0x52C JUMP JUMPDEST SWAP4 POP POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x5B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5BE DUP9 DUP3 DUP10 ADD PUSH2 0x38F JUMP JUMPDEST SWAP3 POP POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x5DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5E7 DUP9 DUP3 DUP10 ADD PUSH2 0x38F JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x60A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x616 DUP8 DUP8 PUSH2 0x52C JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x627 DUP8 DUP3 DUP9 ADD PUSH2 0x52C JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x644 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x650 DUP8 DUP3 DUP9 ADD PUSH2 0x346 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH2 0x665 DUP2 PUSH2 0x924 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH2 0x681 DUP4 DUP6 DUP5 PUSH2 0x940 JUMP JUMPDEST PUSH2 0x68A DUP4 PUSH2 0x97C JUMP JUMPDEST SWAP1 SWAP4 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x69F DUP3 PUSH2 0x920 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH2 0x6B3 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x94C JUMP JUMPDEST PUSH2 0x6BC DUP2 PUSH2 0x97C JUMP JUMPDEST SWAP1 SWAP4 ADD PUSH1 0x20 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH2 0x180 DUP5 ADD SWAP1 PUSH2 0x6DE DUP6 DUP3 PUSH2 0x65C JUMP JUMPDEST POP PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x6F1 PUSH1 0x20 DUP7 ADD DUP3 PUSH2 0x65C JUMP JUMPDEST POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x704 PUSH1 0x40 DUP7 ADD DUP3 PUSH2 0x65C JUMP JUMPDEST POP PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x717 PUSH1 0x60 DUP7 ADD DUP3 PUSH2 0x65C JUMP JUMPDEST POP PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x72A PUSH1 0x80 DUP7 ADD DUP3 PUSH2 0x7CC JUMP JUMPDEST POP PUSH1 0xA0 DUP4 ADD MLOAD PUSH2 0x73D PUSH1 0xA0 DUP7 ADD DUP3 PUSH2 0x7CC JUMP JUMPDEST POP PUSH1 0xC0 DUP4 ADD MLOAD PUSH2 0x750 PUSH1 0xC0 DUP7 ADD DUP3 PUSH2 0x7CC JUMP JUMPDEST POP PUSH1 0xE0 DUP4 ADD MLOAD PUSH2 0x763 PUSH1 0xE0 DUP7 ADD DUP3 PUSH2 0x7CC JUMP JUMPDEST POP PUSH2 0x100 DUP4 ADD MLOAD PUSH2 0x778 PUSH2 0x100 DUP7 ADD DUP3 PUSH2 0x7CC JUMP JUMPDEST POP PUSH2 0x120 DUP4 ADD MLOAD PUSH2 0x78D PUSH2 0x120 DUP7 ADD DUP3 PUSH2 0x7CC JUMP JUMPDEST POP PUSH2 0x140 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH2 0x140 DUP7 ADD MSTORE PUSH2 0x7A7 DUP3 DUP3 PUSH2 0x694 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x160 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH2 0x160 DUP7 ADD MSTORE PUSH2 0x7C3 DUP3 DUP3 PUSH2 0x694 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x665 DUP2 PUSH2 0x93D JUMP JUMPDEST PUSH1 0x60 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x7E6 DUP2 DUP7 PUSH2 0x6C9 JUMP JUMPDEST SWAP1 POP PUSH2 0x7F5 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x7CC JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x7C3 DUP2 DUP5 PUSH2 0x694 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x815 DUP3 DUP5 PUSH2 0x7CC JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x829 DUP3 DUP9 PUSH2 0x7CC JUMP JUMPDEST PUSH2 0x836 PUSH1 0x20 DUP4 ADD DUP8 PUSH2 0x65C JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x848 DUP2 DUP7 PUSH2 0x694 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x85D DUP2 DUP5 DUP7 PUSH2 0x66B JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x876 DUP3 DUP8 PUSH2 0x7CC JUMP JUMPDEST PUSH2 0x883 PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x65C JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x895 DUP2 DUP6 PUSH2 0x694 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x8A9 DUP2 DUP5 PUSH2 0x694 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x8D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x8F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x1F SWAP2 SWAP1 SWAP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x967 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x94F JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x976 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP1 JUMP STOP LOG2 PUSH6 0x627A7A723058 KECCAK256 PUSH29 0xF6C43855EC3C90051A1652FAA76DA89C76AD7DCADEE12EDB0D13B52A6F 0xd4 0xf8 PUSH13 0x6578706572696D656E74616CF5 STOP CALLDATACOPY ",
+ "sourceMap": "752:2418:10:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;2481:687;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2481:687:10;;;;;;;;;;;1446:574;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1446:574:10;;;;;;;;;2481:687;2815:154;;2729:10;;2795:17;;2851:27;;2815:154;;2892:5;;2911:20;;2945:14;;2815:154;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;2815:154:10;;;49:4:-1;25:18;;61:17;;2815:154:10;182:15:-1;2815:154:10;;;;179:29:-1;;;;160:49;;;-1:-1;3034:8:10;:127;;;;;2815:154;;-1:-1:-1;3034:8:10;;;;;:27;;:127;;3075:4;;3093:12;;2815:154;;3137:14;;3034:127;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3034:127:10;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3034:127:10;;;;2481:687;;;;;;;:::o;1446:574::-;1704:110;;1618:10;;1684:17;;1740:34;;1704:110;;1788:16;;1704:110;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;1704:110:10;;;49:4:-1;25:18;;61:17;;1704:110:10;182:15:-1;1704:110:10;;;;179:29:-1;;;;160:49;;;-1:-1;1886:8:10;:127;;;;;1704:110;;-1:-1:-1;1886:8:10;;;;;:27;;:127;;1927:4;;1945:12;;1704:110;;1989:14;;;;1886:127;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1886:127:10;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1886:127:10;;;;1446:574;;;;;;:::o;5:118:-1:-;;72:46;110:6;97:20;72:46;;;63:55;57:66;-1:-1;;;57:66;144:335;;;251:4;239:17;;235:27;-1:-1;225:2;;276:1;273;266:12;225:2;-1:-1;296:20;;336:18;325:30;;322:2;;;368:1;365;358:12;322:2;402:4;394:6;390:17;378:29;;452:3;445;437:6;433:16;423:8;419:31;416:40;413:2;;;469:1;466;459:12;413:2;218:261;;;;;;488:432;;578:4;566:17;;562:27;-1:-1;552:2;;603:1;600;593:12;552:2;640:6;627:20;662:60;677:44;714:6;677:44;;;662:60;;;653:69;;742:6;735:5;728:21;778:4;770:6;766:17;811:4;804:5;800:16;846:3;837:6;832:3;828:16;825:25;822:2;;;863:1;860;853:12;822:2;873:41;907:6;902:3;897;873:41;;;545:375;;;;;;;;1405:2208;;1516:5;1504:9;1499:3;1495:19;1491:31;1488:2;;;1535:1;1532;1525:12;1488:2;1553:21;1568:5;1553:21;;;1544:30;-1:-1;1632:1;1663:49;1708:3;1688:9;1663:49;;;1639:74;;-1:-1;1782:2;1815:49;1860:3;1836:22;;;1815:49;;;1808:4;1801:5;1797:16;1790:75;1734:142;1941:2;1974:49;2019:3;2010:6;1999:9;1995:22;1974:49;;;1967:4;1960:5;1956:16;1949:75;1886:149;2094:2;2127:49;2172:3;2163:6;2152:9;2148:22;2127:49;;;2120:4;2113:5;2109:16;2102:75;2045:143;2250:3;2284:49;2329:3;2320:6;2309:9;2305:22;2284:49;;;2277:4;2270:5;2266:16;2259:75;2198:147;2407:3;2441:49;2486:3;2477:6;2466:9;2462:22;2441:49;;;2434:4;2427:5;2423:16;2416:75;2355:147;2556:3;2590:49;2635:3;2626:6;2615:9;2611:22;2590:49;;;2583:4;2576:5;2572:16;2565:75;2512:139;2705:3;2739:49;2784:3;2775:6;2764:9;2760:22;2739:49;;;2732:4;2725:5;2721:16;2714:75;2661:139;2867:3;2902:49;2947:3;2938:6;2927:9;2923:22;2902:49;;;2894:5;2887;2883:17;2876:76;2810:153;3013:3;3048:49;3093:3;3084:6;3073:9;3069:22;3048:49;;;3040:5;3033;3029:17;3022:76;2973:136;3197:3;3186:9;3182:19;3169:33;3222:18;3214:6;3211:30;3208:2;;;3254:1;3251;3244:12;3208:2;3290:54;3340:3;3331:6;3320:9;3316:22;3290:54;;;3282:5;3275;3271:17;3264:81;3119:237;3444:3;3433:9;3429:19;3416:33;3469:18;3461:6;3458:30;3455:2;;;3501:1;3498;3491:12;3455:2;3537:54;3587:3;3578:6;3567:9;3563:22;3537:54;;;3529:5;3522;3518:17;3511:81;3366:237;1482:2131;;;;;3620:118;;3687:46;3725:6;3712:20;3687:46;;3745:1081;;;;;;3957:3;3945:9;3936:7;3932:23;3928:33;3925:2;;;3974:1;3971;3964:12;3925:2;4009:31;;4060:18;4049:30;;4046:2;;;4092:1;4089;4082:12;4046:2;4112:75;4179:7;4170:6;4159:9;4155:22;4112:75;;;4102:85;;3988:205;4224:2;4242:53;4287:7;4278:6;4267:9;4263:22;4242:53;;;4232:63;;4203:98;4332:2;4350:53;4395:7;4386:6;4375:9;4371:22;4350:53;;;4340:63;;4311:98;4468:2;4457:9;4453:18;4440:32;4492:18;4484:6;4481:30;4478:2;;;4524:1;4521;4514:12;4478:2;4544:62;4598:7;4589:6;4578:9;4574:22;4544:62;;;4534:72;;4419:193;4671:3;4660:9;4656:19;4643:33;4696:18;4688:6;4685:30;4682:2;;;4728:1;4725;4718:12;4682:2;4748:62;4802:7;4793:6;4782:9;4778:22;4748:62;;;4738:72;;4622:194;3919:907;;;;;;;;;4833:615;;;;;4990:2;4978:9;4969:7;4965:23;4961:32;4958:2;;;5006:1;5003;4996:12;4958:2;5041:1;5058:53;5103:7;5083:9;5058:53;;;5048:63;;5020:97;5148:2;5166:53;5211:7;5202:6;5191:9;5187:22;5166:53;;;5156:63;;5127:98;5284:2;5273:9;5269:18;5256:32;5308:18;5300:6;5297:30;5294:2;;;5340:1;5337;5330:12;5294:2;5368:64;5424:7;5415:6;5404:9;5400:22;5368:64;;;4952:496;;;;-1:-1;5350:82;-1:-1;;;;4952:496;5455:110;5528:31;5553:5;5528:31;;;5523:3;5516:44;5510:55;;;5593:261;;5701:6;5696:3;5689:19;5725:4;5720:3;5716:14;5709:21;;5755:43;5791:6;5786:3;5779:5;5755:43;;;5819:29;5841:6;5819:29;;;5810:39;;;;5683:171;-1:-1;;;5683:171;5861:297;;5961:38;5993:5;5961:38;;;6016:6;6011:3;6004:19;6028:63;6084:6;6077:4;6072:3;6068:14;6061:4;6054:5;6050:16;6028:63;;;6123:29;6145:6;6123:29;;;6103:50;;;6116:4;6103:50;;5941:217;-1:-1;;;5941:217;6514:2417;6727:22;;6514:2417;;6649:5;6640:15;;;6761:61;6644:3;6727:22;6761:61;;;6670:164;6918:4;6911:5;6907:16;6901:23;6936:62;6992:4;6987:3;6983:14;6970:11;6936:62;;;6844:166;7101:4;7094:5;7090:16;7084:23;7119:62;7175:4;7170:3;7166:14;7153:11;7119:62;;;7020:173;7278:4;7271:5;7267:16;7261:23;7296:62;7352:4;7347:3;7343:14;7330:11;7296:62;;;7203:167;7458:4;7451:5;7447:16;7441:23;7476:62;7532:4;7527:3;7523:14;7510:11;7476:62;;;7380:170;7638:4;7631:5;7627:16;7621:23;7656:62;7712:4;7707:3;7703:14;7690:11;7656:62;;;7560:170;7810:4;7803:5;7799:16;7793:23;7828:62;7884:4;7879:3;7875:14;7862:11;7828:62;;;7740:162;7982:4;7975:5;7971:16;7965:23;8000:62;8056:4;8051:3;8047:14;8034:11;8000:62;;;7912:162;8167:5;8160;8156:17;8150:24;8186:63;8242:5;8237:3;8233:15;8220:11;8186:63;;;8084:177;8337:5;8330;8326:17;8320:24;8356:63;8412:5;8407:3;8403:15;8390:11;8356:63;;;8271:160;8517:5;8510;8506:17;8500:24;8570:3;8564:4;8560:14;8552:5;8547:3;8543:15;8536:39;8590:66;8651:4;8638:11;8590:66;;;8582:74;;8441:227;8754:5;8747;8743:17;8737:24;8807:3;8801:4;8797:14;8789:5;8784:3;8780:15;8773:39;8827:66;8888:4;8875:11;8827:66;;;8819:74;6622:2309;-1:-1;;;;;6622:2309;8938:110;9011:31;9036:5;9011:31;;9055:615;9281:2;9295:47;;;9266:18;;9356:92;9266:18;9434:6;9356:92;;;9348:100;;9459:62;9517:2;9506:9;9502:18;9493:6;9459:62;;;9569:9;9563:4;9559:20;9554:2;9543:9;9539:18;9532:48;9594:66;9655:4;9646:6;9594:66;;9677:193;9785:2;9770:18;;9799:61;9774:9;9833:6;9799:61;;;9756:114;;;;;9877:685;10115:3;10100:19;;10130:61;10104:9;10164:6;10130:61;;;10202:62;10260:2;10249:9;10245:18;10236:6;10202:62;;;10312:9;10306:4;10302:20;10297:2;10286:9;10282:18;10275:48;10337:66;10398:4;10389:6;10337:66;;;10329:74;;10451:9;10445:4;10441:20;10436:2;10425:9;10421:18;10414:48;10476:76;10547:4;10538:6;10530;10476:76;;;10468:84;10086:476;-1:-1;;;;;;;10086:476;10569:665;10797:3;10782:19;;10812:61;10786:9;10846:6;10812:61;;;10884:62;10942:2;10931:9;10927:18;10918:6;10884:62;;;10994:9;10988:4;10984:20;10979:2;10968:9;10964:18;10957:48;11019:66;11080:4;11071:6;11019:66;;;11011:74;;11133:9;11127:4;11123:20;11118:2;11107:9;11103:18;11096:48;11158:66;11219:4;11210:6;11158:66;;;11150:74;10768:466;-1:-1;;;;;;10768:466;11241:256;11303:2;11297:9;11329:17;;;11404:18;11389:34;;11425:22;;;11386:62;11383:2;;;11461:1;11458;11451:12;11383:2;11477;11470:22;11281:216;;-1:-1;11281:216;11504:254;;11643:18;11635:6;11632:30;11629:2;;;11675:1;11672;11665:12;11629:2;-1:-1;11748:4;11719;11696:17;;;;11715:9;11692:33;11738:15;;11566:192;12030:87;12100:12;;12084:33;12222:128;12302:42;12291:54;;12274:76;12357:79;12426:5;12409:27;12665:145;12746:6;12741:3;12736;12723:30;-1:-1;12802:1;12784:16;;12777:27;12716:94;12819:268;12884:1;12891:101;12905:6;12902:1;12899:13;12891:101;;;12972:11;;;12966:18;12953:11;;;12946:39;12927:2;12920:10;12891:101;;;13007:6;13004:1;13001:13;12998:2;;;13072:1;13063:6;13058:3;13054:16;13047:27;12998:2;12868:219;;;;;13095:97;13183:2;13163:14;13179:7;13159:28;;13143:49"
}
}
},
@@ -171,20 +171,20 @@
}
},
"sourceCodes": {
- "2.0.0/protocol/Exchange/interfaces/IAssetProxyDispatcher.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.24;\n\ncontract IAssetProxyDispatcher {\n\n /// @dev Registers an asset proxy to its asset proxy id.\n /// Once an asset proxy is registered, it cannot be unregistered.\n /// @param assetProxy Address of new asset proxy to register.\n function registerAssetProxy(address assetProxy)\n external;\n\n /// @dev Gets an asset proxy.\n /// @param assetProxyId Id of the asset proxy.\n /// @return The asset proxy registered to assetProxyId. Returns 0x0 if no proxy is registered.\n function getAssetProxy(bytes4 assetProxyId)\n external\n view\n returns (address);\n}\n",
- "2.0.0/protocol/Exchange/interfaces/IExchange.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"./IExchangeCore.sol\";\nimport \"./IMatchOrders.sol\";\nimport \"./ISignatureValidator.sol\";\nimport \"./ITransactions.sol\";\nimport \"./IAssetProxyDispatcher.sol\";\nimport \"./IWrapperFunctions.sol\";\n\ncontract IExchange is\n IExchangeCore,\n IMatchOrders,\n ISignatureValidator,\n ITransactions,\n IAssetProxyDispatcher,\n IWrapperFunctions\n{}\n",
- "2.0.0/protocol/Exchange/interfaces/IExchangeCore.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../libs/LibOrder.sol\";\nimport \"../libs/LibFillResults.sol\";\n\ncontract IExchangeCore {\n\n /// @dev Cancels all orders created by makerAddress with a salt less than or equal to the targetOrderEpoch\n /// and senderAddress equal to msg.sender (or null address if msg.sender == makerAddress).\n /// @param targetOrderEpoch Orders created with a salt less or equal to this value will be cancelled.\n function cancelOrdersUpTo(uint256 targetOrderEpoch)\n external;\n\n /// @dev Fills the input order.\n /// @param order Order struct containing order specifications.\n /// @param takerAssetFillAmount Desired amount of takerAsset to sell.\n /// @param signature Proof that order has been created by maker.\n /// @return Amounts filled and fees paid by maker and taker.\n function fillOrder(\n LibOrder.Order memory order,\n uint256 takerAssetFillAmount,\n bytes memory signature\n )\n public\n returns (LibFillResults.FillResults memory fillResults);\n\n /// @dev After calling, the order can not be filled anymore.\n /// @param order Order struct containing order specifications.\n function cancelOrder(LibOrder.Order memory order)\n public;\n\n /// @dev Gets information about an order: status, hash, and amount filled.\n /// @param order Order to gather information on.\n /// @return OrderInfo Information about the order and its state.\n /// See LibOrder.OrderInfo for a complete description.\n function getOrderInfo(LibOrder.Order memory order)\n public\n view\n returns (LibOrder.OrderInfo memory orderInfo);\n}\n",
- "2.0.0/protocol/Exchange/interfaces/IMatchOrders.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*/\npragma solidity ^0.4.24;\npragma experimental ABIEncoderV2;\n\nimport \"../libs/LibOrder.sol\";\nimport \"../libs/LibFillResults.sol\";\n\ncontract IMatchOrders {\n\n /// @dev Match two complementary orders that have a profitable spread.\n /// Each order is filled at their respective price point. However, the calculations are\n /// carried out as though the orders are both being filled at the right order's price point.\n /// The profit made by the left order goes to the taker (who matched the two orders).\n /// @param leftOrder First order to match.\n /// @param rightOrder Second order to match.\n /// @param leftSignature Proof that order was created by the left maker.\n /// @param rightSignature Proof that order was created by the right maker.\n /// @return matchedFillResults Amounts filled and fees paid by maker and taker of matched orders.\n /// TODO: Make this function external once supported by Solidity (See Solidity Issues #3199, #1603)\n function matchOrders(\n LibOrder.Order memory leftOrder,\n LibOrder.Order memory rightOrder,\n bytes memory leftSignature,\n bytes memory rightSignature\n )\n public\n returns (LibFillResults.MatchedFillResults memory matchedFillResults);\n}\n",
- "2.0.0/protocol/Exchange/interfaces/ISignatureValidator.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.24;\n\ncontract ISignatureValidator {\n\n /// @dev Approves a hash on-chain using any valid signature type.\n /// After presigning a hash, the preSign signature type will become valid for that hash and signer.\n /// @param signerAddress Address that should have signed the given hash.\n /// @param signature Proof that the hash has been signed by signer.\n function preSign(\n bytes32 hash,\n address signerAddress,\n bytes signature\n )\n external;\n \n /// @dev Approves/unnapproves a Validator contract to verify signatures on signer's behalf.\n /// @param validatorAddress Address of Validator contract.\n /// @param approval Approval or disapproval of Validator contract.\n function setSignatureValidatorApproval(\n address validatorAddress,\n bool approval\n )\n external;\n\n /// @dev Verifies that a signature is valid.\n /// @param hash Message hash that is signed.\n /// @param signerAddress Address of signer.\n /// @param signature Proof of signing.\n /// @return Validity of order signature.\n function isValidSignature(\n bytes32 hash,\n address signerAddress,\n bytes memory signature\n )\n public\n view\n returns (bool isValid);\n}\n",
- "2.0.0/protocol/Exchange/interfaces/ITransactions.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*/\npragma solidity ^0.4.24;\n\ncontract ITransactions {\n\n /// @dev Executes an exchange method call in the context of signer.\n /// @param salt Arbitrary number to ensure uniqueness of transaction hash.\n /// @param signerAddress Address of transaction signer.\n /// @param data AbiV2 encoded calldata.\n /// @param signature Proof of signer transaction by signer.\n function executeTransaction(\n uint256 salt,\n address signerAddress,\n bytes data,\n bytes signature\n )\n external;\n}\n",
- "2.0.0/protocol/Exchange/interfaces/IWrapperFunctions.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../libs/LibOrder.sol\";\nimport \"../libs/LibFillResults.sol\";\n\ncontract IWrapperFunctions {\n /// @dev Fills the input order. Reverts if exact takerAssetFillAmount not filled.\n /// @param order LibOrder.Order struct containing order specifications.\n /// @param takerAssetFillAmount Desired amount of takerAsset to sell.\n /// @param signature Proof that order has been created by maker.\n function fillOrKillOrder(\n LibOrder.Order memory order,\n uint256 takerAssetFillAmount,\n bytes memory signature\n )\n public\n returns (LibFillResults.FillResults memory fillResults);\n\n /// @dev Fills an order with specified parameters and ECDSA signature.\n /// Returns false if the transaction would otherwise revert.\n /// @param order LibOrder.Order struct containing order specifications.\n /// @param takerAssetFillAmount Desired amount of takerAsset to sell.\n /// @param signature Proof that order has been created by maker.\n /// @return Amounts filled and fees paid by maker and taker.\n function fillOrderNoThrow(\n LibOrder.Order memory order,\n uint256 takerAssetFillAmount,\n bytes memory signature\n )\n public\n returns (LibFillResults.FillResults memory fillResults);\n\n /// @dev Synchronously executes multiple calls of fillOrder.\n /// @param orders Array of order specifications.\n /// @param takerAssetFillAmounts Array of desired amounts of takerAsset to sell in orders.\n /// @param signatures Proofs that orders have been created by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n function batchFillOrders(\n LibOrder.Order[] memory orders,\n uint256[] memory takerAssetFillAmounts,\n bytes[] memory signatures\n )\n public\n returns (LibFillResults.FillResults memory totalFillResults);\n\n /// @dev Synchronously executes multiple calls of fillOrKill.\n /// @param orders Array of order specifications.\n /// @param takerAssetFillAmounts Array of desired amounts of takerAsset to sell in orders.\n /// @param signatures Proofs that orders have been created by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n function batchFillOrKillOrders(\n LibOrder.Order[] memory orders,\n uint256[] memory takerAssetFillAmounts,\n bytes[] memory signatures\n )\n public\n returns (LibFillResults.FillResults memory totalFillResults);\n\n /// @dev Fills an order with specified parameters and ECDSA signature.\n /// Returns false if the transaction would otherwise revert.\n /// @param orders Array of order specifications.\n /// @param takerAssetFillAmounts Array of desired amounts of takerAsset to sell in orders.\n /// @param signatures Proofs that orders have been created by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n function batchFillOrdersNoThrow(\n LibOrder.Order[] memory orders,\n uint256[] memory takerAssetFillAmounts,\n bytes[] memory signatures\n )\n public\n returns (LibFillResults.FillResults memory totalFillResults);\n\n /// @dev Synchronously executes multiple calls of fillOrder until total amount of takerAsset is sold by taker.\n /// @param orders Array of order specifications.\n /// @param takerAssetFillAmount Desired amount of takerAsset to sell.\n /// @param signatures Proofs that orders have been created by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n function marketSellOrders(\n LibOrder.Order[] memory orders,\n uint256 takerAssetFillAmount,\n bytes[] memory signatures\n )\n public\n returns (LibFillResults.FillResults memory totalFillResults);\n\n /// @dev Synchronously executes multiple calls of fillOrder until total amount of takerAsset is sold by taker.\n /// Returns false if the transaction would otherwise revert.\n /// @param orders Array of order specifications.\n /// @param takerAssetFillAmount Desired amount of takerAsset to sell.\n /// @param signatures Proofs that orders have been signed by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n function marketSellOrdersNoThrow(\n LibOrder.Order[] memory orders,\n uint256 takerAssetFillAmount,\n bytes[] memory signatures\n )\n public\n returns (LibFillResults.FillResults memory totalFillResults);\n\n /// @dev Synchronously executes multiple calls of fillOrder until total amount of makerAsset is bought by taker.\n /// @param orders Array of order specifications.\n /// @param makerAssetFillAmount Desired amount of makerAsset to buy.\n /// @param signatures Proofs that orders have been signed by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n function marketBuyOrders(\n LibOrder.Order[] memory orders,\n uint256 makerAssetFillAmount,\n bytes[] memory signatures\n )\n public\n returns (LibFillResults.FillResults memory totalFillResults);\n\n /// @dev Synchronously executes multiple fill orders in a single transaction until total amount is bought by taker.\n /// Returns false if the transaction would otherwise revert.\n /// @param orders Array of order specifications.\n /// @param makerAssetFillAmount Desired amount of makerAsset to buy.\n /// @param signatures Proofs that orders have been signed by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n function marketBuyOrdersNoThrow(\n LibOrder.Order[] memory orders,\n uint256 makerAssetFillAmount,\n bytes[] memory signatures\n )\n public\n returns (LibFillResults.FillResults memory totalFillResults);\n\n /// @dev Synchronously cancels multiple orders in a single transaction.\n /// @param orders Array of order specifications.\n function batchCancelOrders(LibOrder.Order[] memory orders)\n public;\n}\n",
- "2.0.0/protocol/Exchange/libs/LibEIP712.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.24;\n\ncontract LibEIP712 {\n // EIP191 header for EIP712 prefix\n string constant EIP191_HEADER = \"\\x19\\x01\";\n\n // EIP712 Domain Name value\n string constant EIP712_DOMAIN_NAME = \"0x Protocol\";\n\n // EIP712 Domain Version value\n string constant EIP712_DOMAIN_VERSION = \"2\";\n\n // Hash of the EIP712 Domain Separator Schema\n bytes32 public constant EIP712_DOMAIN_SEPARATOR_SCHEMA_HASH = keccak256(abi.encodePacked(\n \"EIP712Domain(\",\n \"string name,\",\n \"string version,\",\n \"address verifyingContract\",\n \")\"\n ));\n\n // Hash of the EIP712 Domain Separator data\n bytes32 public EIP712_DOMAIN_HASH;\n\n constructor ()\n public\n {\n EIP712_DOMAIN_HASH = keccak256(abi.encode(\n EIP712_DOMAIN_SEPARATOR_SCHEMA_HASH,\n keccak256(bytes(EIP712_DOMAIN_NAME)),\n keccak256(bytes(EIP712_DOMAIN_VERSION)),\n address(this)\n ));\n }\n\n /// @dev Calculates EIP712 encoding for a hash struct in this EIP712 Domain.\n /// @param hashStruct The EIP712 hash struct.\n /// @return EIP712 hash applied to this EIP712 Domain.\n function hashEIP712Message(bytes32 hashStruct)\n internal\n view\n returns (bytes32)\n {\n return keccak256(abi.encodePacked(EIP191_HEADER, EIP712_DOMAIN_HASH, hashStruct));\n }\n}\n",
- "2.0.0/protocol/Exchange/libs/LibFillResults.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.24;\n\nimport \"../../../utils/SafeMath/SafeMath.sol\";\n\ncontract LibFillResults is\n SafeMath\n{\n\n struct FillResults {\n uint256 makerAssetFilledAmount; // Total amount of makerAsset(s) filled.\n uint256 takerAssetFilledAmount; // Total amount of takerAsset(s) filled.\n uint256 makerFeePaid; // Total amount of ZRX paid by maker(s) to feeRecipient(s).\n uint256 takerFeePaid; // Total amount of ZRX paid by taker to feeRecipients(s).\n }\n\n struct MatchedFillResults {\n FillResults left; // Amounts filled and fees paid of left order.\n FillResults right; // Amounts filled and fees paid of right order.\n uint256 leftMakerAssetSpreadAmount; // Spread between price of left and right order, denominated in the left order's makerAsset, paid to taker.\n }\n\n /// @dev Adds properties of both FillResults instances.\n /// Modifies the first FillResults instance specified.\n /// @param totalFillResults Fill results instance that will be added onto.\n /// @param singleFillResults Fill results instance that will be added to totalFillResults.\n function addFillResults(FillResults memory totalFillResults, FillResults memory singleFillResults)\n internal\n pure\n {\n totalFillResults.makerAssetFilledAmount = safeAdd(totalFillResults.makerAssetFilledAmount, singleFillResults.makerAssetFilledAmount);\n totalFillResults.takerAssetFilledAmount = safeAdd(totalFillResults.takerAssetFilledAmount, singleFillResults.takerAssetFilledAmount);\n totalFillResults.makerFeePaid = safeAdd(totalFillResults.makerFeePaid, singleFillResults.makerFeePaid);\n totalFillResults.takerFeePaid = safeAdd(totalFillResults.takerFeePaid, singleFillResults.takerFeePaid);\n }\n}\n",
- "2.0.0/protocol/Exchange/libs/LibOrder.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.24;\n\nimport \"./LibEIP712.sol\";\n\ncontract LibOrder is\n LibEIP712\n{\n\n // Hash for the EIP712 Order Schema\n bytes32 constant EIP712_ORDER_SCHEMA_HASH = keccak256(abi.encodePacked(\n \"Order(\",\n \"address makerAddress,\",\n \"address takerAddress,\",\n \"address feeRecipientAddress,\",\n \"address senderAddress,\",\n \"uint256 makerAssetAmount,\",\n \"uint256 takerAssetAmount,\",\n \"uint256 makerFee,\",\n \"uint256 takerFee,\",\n \"uint256 expirationTimeSeconds,\",\n \"uint256 salt,\",\n \"bytes makerAssetData,\",\n \"bytes takerAssetData\",\n \")\"\n ));\n\n // A valid order remains fillable until it is expired, fully filled, or cancelled.\n // An order's state is unaffected by external factors, like account balances.\n enum OrderStatus {\n INVALID, // Default value\n INVALID_MAKER_ASSET_AMOUNT, // Order does not have a valid maker asset amount\n INVALID_TAKER_ASSET_AMOUNT, // Order does not have a valid taker asset amount\n FILLABLE, // Order is fillable\n EXPIRED, // Order has already expired\n FULLY_FILLED, // Order is fully filled\n CANCELLED // Order has been cancelled\n }\n\n struct Order {\n address makerAddress; // Address that created the order. \n address takerAddress; // Address that is allowed to fill the order. If set to 0, any address is allowed to fill the order. \n address feeRecipientAddress; // Address that will recieve fees when order is filled. \n address senderAddress; // Address that is allowed to call Exchange contract methods that affect this order. If set to 0, any address is allowed to call these methods.\n uint256 makerAssetAmount; // Amount of makerAsset being offered by maker. Must be greater than 0. \n uint256 takerAssetAmount; // Amount of takerAsset being bid on by maker. Must be greater than 0. \n uint256 makerFee; // Amount of ZRX paid to feeRecipient by maker when order is filled. If set to 0, no transfer of ZRX from maker to feeRecipient will be attempted.\n uint256 takerFee; // Amount of ZRX paid to feeRecipient by taker when order is filled. If set to 0, no transfer of ZRX from taker to feeRecipient will be attempted.\n uint256 expirationTimeSeconds; // Timestamp in seconds at which order expires. \n uint256 salt; // Arbitrary number to facilitate uniqueness of the order's hash. \n bytes makerAssetData; // Encoded data that can be decoded by a specified proxy contract when transferring makerAsset. The last byte references the id of this proxy.\n bytes takerAssetData; // Encoded data that can be decoded by a specified proxy contract when transferring takerAsset. The last byte references the id of this proxy.\n }\n\n struct OrderInfo {\n uint8 orderStatus; // Status that describes order's validity and fillability.\n bytes32 orderHash; // EIP712 hash of the order (see LibOrder.getOrderHash).\n uint256 orderTakerAssetFilledAmount; // Amount of order that has already been filled.\n }\n\n /// @dev Calculates Keccak-256 hash of the order.\n /// @param order The order structure.\n /// @return Keccak-256 EIP712 hash of the order.\n function getOrderHash(Order memory order)\n internal\n view\n returns (bytes32 orderHash)\n {\n orderHash = hashEIP712Message(hashOrder(order));\n return orderHash;\n }\n\n /// @dev Calculates EIP712 hash of the order.\n /// @param order The order structure.\n /// @return EIP712 hash of the order.\n function hashOrder(Order memory order)\n internal\n pure\n returns (bytes32 result)\n {\n bytes32 schemaHash = EIP712_ORDER_SCHEMA_HASH;\n bytes32 makerAssetDataHash = keccak256(order.makerAssetData);\n bytes32 takerAssetDataHash = keccak256(order.takerAssetData);\n // Assembly for more efficiently computing:\n // keccak256(abi.encode(\n // order.makerAddress,\n // order.takerAddress,\n // order.feeRecipientAddress,\n // order.senderAddress,\n // order.makerAssetAmount,\n // order.takerAssetAmount,\n // order.makerFee,\n // order.takerFee,\n // order.expirationTimeSeconds,\n // order.salt,\n // keccak256(order.makerAssetData),\n // keccak256(order.takerAssetData)\n // ));\n assembly {\n // Backup\n let temp1 := mload(sub(order, 32))\n let temp2 := mload(add(order, 320))\n let temp3 := mload(add(order, 352))\n \n // Hash in place\n mstore(sub(order, 32), schemaHash)\n mstore(add(order, 320), makerAssetDataHash)\n mstore(add(order, 352), takerAssetDataHash)\n result := keccak256(sub(order, 32), 416)\n \n // Restore\n mstore(sub(order, 32), temp1)\n mstore(add(order, 320), temp2)\n mstore(add(order, 352), temp3)\n }\n return result;\n }\n}\n",
- "2.0.0/test/ExchangeWrapper/ExchangeWrapper.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../../protocol/Exchange/interfaces/IExchange.sol\";\nimport \"../../protocol/Exchange/libs/LibOrder.sol\";\n\ncontract ExchangeWrapper {\n\n // Exchange contract.\n IExchange EXCHANGE;\n\n constructor (address _exchange)\n public\n {\n EXCHANGE = IExchange(_exchange);\n }\n\n /// @dev Fills an order using `msg.sender` as the taker.\n /// @param order Order struct containing order specifications.\n /// @param takerAssetFillAmount Desired amount of takerAsset to sell.\n /// @param salt Arbitrary value to gaurantee uniqueness of 0x transaction hash.\n /// @param orderSignature Proof that order has been created by maker.\n /// @param takerSignature Proof that taker wishes to call this function with given params.\n function fillOrder(\n LibOrder.Order memory order,\n uint256 takerAssetFillAmount,\n uint256 salt,\n bytes memory orderSignature,\n bytes memory takerSignature\n )\n public\n {\n address takerAddress = msg.sender;\n\n // Encode arguments into byte array.\n bytes memory data = abi.encodeWithSelector(\n EXCHANGE.fillOrder.selector,\n order,\n takerAssetFillAmount,\n orderSignature\n );\n\n // Call `fillOrder` via `executeTransaction`.\n EXCHANGE.executeTransaction(\n salt,\n takerAddress,\n data,\n takerSignature\n );\n }\n\n /// @dev Cancels all orders created by sender with a salt less than or equal to the targetOrderEpoch\n /// and senderAddress equal to this contract.\n /// @param targetOrderEpoch Orders created with a salt less or equal to this value will be cancelled.\n /// @param salt Arbitrary value to gaurantee uniqueness of 0x transaction hash.\n /// @param makerSignature Proof that maker wishes to call this function with given params.\n function cancelOrdersUpTo(\n uint256 targetOrderEpoch,\n uint256 salt,\n bytes makerSignature\n )\n external\n {\n address makerAddress = msg.sender;\n\n // Encode arguments into byte array.\n bytes memory data = abi.encodeWithSelector(\n EXCHANGE.cancelOrdersUpTo.selector,\n targetOrderEpoch\n );\n\n // Call `cancelOrdersUpTo` via `executeTransaction`.\n EXCHANGE.executeTransaction(\n salt,\n makerAddress,\n data,\n makerSignature\n );\n }\n}\n",
- "2.0.0/utils/SafeMath/SafeMath.sol": "pragma solidity ^0.4.24;\npragma experimental ABIEncoderV2;\n\ncontract SafeMath {\n function safeMul(uint a, uint b)\n internal\n pure\n returns (uint256)\n {\n uint c = a * b;\n assert(a == 0 || c / a == b);\n return c;\n }\n\n function safeDiv(uint a, uint b)\n internal\n pure\n returns (uint256)\n {\n uint c = a / b;\n return c;\n }\n\n function safeSub(uint a, uint b)\n internal\n pure\n returns (uint256)\n {\n assert(b <= a);\n return a - b;\n }\n\n function safeAdd(uint a, uint b)\n internal\n pure\n returns (uint256)\n {\n uint c = a + b;\n assert(c >= a);\n return c;\n }\n\n function max64(uint64 a, uint64 b)\n internal\n pure\n returns (uint256)\n {\n return a >= b ? a : b;\n }\n\n function min64(uint64 a, uint64 b)\n internal\n pure\n returns (uint256)\n {\n return a < b ? a : b;\n }\n\n function max256(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n return a >= b ? a : b;\n }\n\n function min256(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n return a < b ? a : b;\n }\n}\n"
+ "2.0.0/protocol/Exchange/interfaces/IAssetProxyDispatcher.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.24;\n\n\ncontract IAssetProxyDispatcher {\n\n /// @dev Registers an asset proxy to its asset proxy id.\n /// Once an asset proxy is registered, it cannot be unregistered.\n /// @param assetProxy Address of new asset proxy to register.\n function registerAssetProxy(address assetProxy)\n external;\n\n /// @dev Gets an asset proxy.\n /// @param assetProxyId Id of the asset proxy.\n /// @return The asset proxy registered to assetProxyId. Returns 0x0 if no proxy is registered.\n function getAssetProxy(bytes4 assetProxyId)\n external\n view\n returns (address);\n}\n",
+ "2.0.0/protocol/Exchange/interfaces/IExchange.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"./IExchangeCore.sol\";\nimport \"./IMatchOrders.sol\";\nimport \"./ISignatureValidator.sol\";\nimport \"./ITransactions.sol\";\nimport \"./IAssetProxyDispatcher.sol\";\nimport \"./IWrapperFunctions.sol\";\n\n\n// solhint-disable no-empty-blocks\ncontract IExchange is\n IExchangeCore,\n IMatchOrders,\n ISignatureValidator,\n ITransactions,\n IAssetProxyDispatcher,\n IWrapperFunctions\n{}\n",
+ "2.0.0/protocol/Exchange/interfaces/IExchangeCore.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../libs/LibOrder.sol\";\nimport \"../libs/LibFillResults.sol\";\n\n\ncontract IExchangeCore {\n\n /// @dev Cancels all orders created by makerAddress with a salt less than or equal to the targetOrderEpoch\n /// and senderAddress equal to msg.sender (or null address if msg.sender == makerAddress).\n /// @param targetOrderEpoch Orders created with a salt less or equal to this value will be cancelled.\n function cancelOrdersUpTo(uint256 targetOrderEpoch)\n external;\n\n /// @dev Fills the input order.\n /// @param order Order struct containing order specifications.\n /// @param takerAssetFillAmount Desired amount of takerAsset to sell.\n /// @param signature Proof that order has been created by maker.\n /// @return Amounts filled and fees paid by maker and taker.\n function fillOrder(\n LibOrder.Order memory order,\n uint256 takerAssetFillAmount,\n bytes memory signature\n )\n public\n returns (LibFillResults.FillResults memory fillResults);\n\n /// @dev After calling, the order can not be filled anymore.\n /// @param order Order struct containing order specifications.\n function cancelOrder(LibOrder.Order memory order)\n public;\n\n /// @dev Gets information about an order: status, hash, and amount filled.\n /// @param order Order to gather information on.\n /// @return OrderInfo Information about the order and its state.\n /// See LibOrder.OrderInfo for a complete description.\n function getOrderInfo(LibOrder.Order memory order)\n public\n view\n returns (LibOrder.OrderInfo memory orderInfo);\n}\n",
+ "2.0.0/protocol/Exchange/interfaces/IMatchOrders.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*/\npragma solidity 0.4.24;\npragma experimental ABIEncoderV2;\n\nimport \"../libs/LibOrder.sol\";\nimport \"../libs/LibFillResults.sol\";\n\n\ncontract IMatchOrders {\n\n /// @dev Match two complementary orders that have a profitable spread.\n /// Each order is filled at their respective price point. However, the calculations are\n /// carried out as though the orders are both being filled at the right order's price point.\n /// The profit made by the left order goes to the taker (who matched the two orders).\n /// @param leftOrder First order to match.\n /// @param rightOrder Second order to match.\n /// @param leftSignature Proof that order was created by the left maker.\n /// @param rightSignature Proof that order was created by the right maker.\n /// @return matchedFillResults Amounts filled and fees paid by maker and taker of matched orders.\n function matchOrders(\n LibOrder.Order memory leftOrder,\n LibOrder.Order memory rightOrder,\n bytes memory leftSignature,\n bytes memory rightSignature\n )\n public\n returns (LibFillResults.MatchedFillResults memory matchedFillResults);\n}\n",
+ "2.0.0/protocol/Exchange/interfaces/ISignatureValidator.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.24;\n\n\ncontract ISignatureValidator {\n\n /// @dev Approves a hash on-chain using any valid signature type.\n /// After presigning a hash, the preSign signature type will become valid for that hash and signer.\n /// @param signerAddress Address that should have signed the given hash.\n /// @param signature Proof that the hash has been signed by signer.\n function preSign(\n bytes32 hash,\n address signerAddress,\n bytes signature\n )\n external;\n \n /// @dev Approves/unnapproves a Validator contract to verify signatures on signer's behalf.\n /// @param validatorAddress Address of Validator contract.\n /// @param approval Approval or disapproval of Validator contract.\n function setSignatureValidatorApproval(\n address validatorAddress,\n bool approval\n )\n external;\n\n /// @dev Verifies that a signature is valid.\n /// @param hash Message hash that is signed.\n /// @param signerAddress Address of signer.\n /// @param signature Proof of signing.\n /// @return Validity of order signature.\n function isValidSignature(\n bytes32 hash,\n address signerAddress,\n bytes memory signature\n )\n public\n view\n returns (bool isValid);\n}\n",
+ "2.0.0/protocol/Exchange/interfaces/ITransactions.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*/\npragma solidity 0.4.24;\n\n\ncontract ITransactions {\n\n /// @dev Executes an exchange method call in the context of signer.\n /// @param salt Arbitrary number to ensure uniqueness of transaction hash.\n /// @param signerAddress Address of transaction signer.\n /// @param data AbiV2 encoded calldata.\n /// @param signature Proof of signer transaction by signer.\n function executeTransaction(\n uint256 salt,\n address signerAddress,\n bytes data,\n bytes signature\n )\n external;\n}\n",
+ "2.0.0/protocol/Exchange/interfaces/IWrapperFunctions.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../libs/LibOrder.sol\";\nimport \"../libs/LibFillResults.sol\";\n\n\ncontract IWrapperFunctions {\n\n /// @dev Fills the input order. Reverts if exact takerAssetFillAmount not filled.\n /// @param order LibOrder.Order struct containing order specifications.\n /// @param takerAssetFillAmount Desired amount of takerAsset to sell.\n /// @param signature Proof that order has been created by maker.\n function fillOrKillOrder(\n LibOrder.Order memory order,\n uint256 takerAssetFillAmount,\n bytes memory signature\n )\n public\n returns (LibFillResults.FillResults memory fillResults);\n\n /// @dev Fills an order with specified parameters and ECDSA signature.\n /// Returns false if the transaction would otherwise revert.\n /// @param order LibOrder.Order struct containing order specifications.\n /// @param takerAssetFillAmount Desired amount of takerAsset to sell.\n /// @param signature Proof that order has been created by maker.\n /// @return Amounts filled and fees paid by maker and taker.\n function fillOrderNoThrow(\n LibOrder.Order memory order,\n uint256 takerAssetFillAmount,\n bytes memory signature\n )\n public\n returns (LibFillResults.FillResults memory fillResults);\n\n /// @dev Synchronously executes multiple calls of fillOrder.\n /// @param orders Array of order specifications.\n /// @param takerAssetFillAmounts Array of desired amounts of takerAsset to sell in orders.\n /// @param signatures Proofs that orders have been created by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n function batchFillOrders(\n LibOrder.Order[] memory orders,\n uint256[] memory takerAssetFillAmounts,\n bytes[] memory signatures\n )\n public\n returns (LibFillResults.FillResults memory totalFillResults);\n\n /// @dev Synchronously executes multiple calls of fillOrKill.\n /// @param orders Array of order specifications.\n /// @param takerAssetFillAmounts Array of desired amounts of takerAsset to sell in orders.\n /// @param signatures Proofs that orders have been created by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n function batchFillOrKillOrders(\n LibOrder.Order[] memory orders,\n uint256[] memory takerAssetFillAmounts,\n bytes[] memory signatures\n )\n public\n returns (LibFillResults.FillResults memory totalFillResults);\n\n /// @dev Fills an order with specified parameters and ECDSA signature.\n /// Returns false if the transaction would otherwise revert.\n /// @param orders Array of order specifications.\n /// @param takerAssetFillAmounts Array of desired amounts of takerAsset to sell in orders.\n /// @param signatures Proofs that orders have been created by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n function batchFillOrdersNoThrow(\n LibOrder.Order[] memory orders,\n uint256[] memory takerAssetFillAmounts,\n bytes[] memory signatures\n )\n public\n returns (LibFillResults.FillResults memory totalFillResults);\n\n /// @dev Synchronously executes multiple calls of fillOrder until total amount of takerAsset is sold by taker.\n /// @param orders Array of order specifications.\n /// @param takerAssetFillAmount Desired amount of takerAsset to sell.\n /// @param signatures Proofs that orders have been created by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n function marketSellOrders(\n LibOrder.Order[] memory orders,\n uint256 takerAssetFillAmount,\n bytes[] memory signatures\n )\n public\n returns (LibFillResults.FillResults memory totalFillResults);\n\n /// @dev Synchronously executes multiple calls of fillOrder until total amount of takerAsset is sold by taker.\n /// Returns false if the transaction would otherwise revert.\n /// @param orders Array of order specifications.\n /// @param takerAssetFillAmount Desired amount of takerAsset to sell.\n /// @param signatures Proofs that orders have been signed by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n function marketSellOrdersNoThrow(\n LibOrder.Order[] memory orders,\n uint256 takerAssetFillAmount,\n bytes[] memory signatures\n )\n public\n returns (LibFillResults.FillResults memory totalFillResults);\n\n /// @dev Synchronously executes multiple calls of fillOrder until total amount of makerAsset is bought by taker.\n /// @param orders Array of order specifications.\n /// @param makerAssetFillAmount Desired amount of makerAsset to buy.\n /// @param signatures Proofs that orders have been signed by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n function marketBuyOrders(\n LibOrder.Order[] memory orders,\n uint256 makerAssetFillAmount,\n bytes[] memory signatures\n )\n public\n returns (LibFillResults.FillResults memory totalFillResults);\n\n /// @dev Synchronously executes multiple fill orders in a single transaction until total amount is bought by taker.\n /// Returns false if the transaction would otherwise revert.\n /// @param orders Array of order specifications.\n /// @param makerAssetFillAmount Desired amount of makerAsset to buy.\n /// @param signatures Proofs that orders have been signed by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n function marketBuyOrdersNoThrow(\n LibOrder.Order[] memory orders,\n uint256 makerAssetFillAmount,\n bytes[] memory signatures\n )\n public\n returns (LibFillResults.FillResults memory totalFillResults);\n\n /// @dev Synchronously cancels multiple orders in a single transaction.\n /// @param orders Array of order specifications.\n function batchCancelOrders(LibOrder.Order[] memory orders)\n public;\n\n /// @dev Fetches information for all passed in orders\n /// @param orders Array of order specifications.\n /// @return Array of OrderInfo instances that correspond to each order.\n function getOrdersInfo(LibOrder.Order[] memory orders)\n public\n view\n returns (LibOrder.OrderInfo[] memory);\n}\n",
+ "2.0.0/protocol/Exchange/libs/LibEIP712.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.24;\n\n\ncontract LibEIP712 {\n // EIP191 header for EIP712 prefix\n string constant internal EIP191_HEADER = \"\\x19\\x01\";\n\n // EIP712 Domain Name value\n string constant internal EIP712_DOMAIN_NAME = \"0x Protocol\";\n\n // EIP712 Domain Version value\n string constant internal EIP712_DOMAIN_VERSION = \"2\";\n\n // Hash of the EIP712 Domain Separator Schema\n bytes32 public constant EIP712_DOMAIN_SEPARATOR_SCHEMA_HASH = keccak256(abi.encodePacked(\n \"EIP712Domain(\",\n \"string name,\",\n \"string version,\",\n \"address verifyingContract\",\n \")\"\n ));\n\n // Hash of the EIP712 Domain Separator data\n // solhint-disable-next-line var-name-mixedcase\n bytes32 public EIP712_DOMAIN_HASH;\n\n constructor ()\n public\n {\n EIP712_DOMAIN_HASH = keccak256(abi.encode(\n EIP712_DOMAIN_SEPARATOR_SCHEMA_HASH,\n keccak256(bytes(EIP712_DOMAIN_NAME)),\n keccak256(bytes(EIP712_DOMAIN_VERSION)),\n address(this)\n ));\n }\n\n /// @dev Calculates EIP712 encoding for a hash struct in this EIP712 Domain.\n /// @param hashStruct The EIP712 hash struct.\n /// @return EIP712 hash applied to this EIP712 Domain.\n function hashEIP712Message(bytes32 hashStruct)\n internal\n view\n returns (bytes32)\n {\n return keccak256(abi.encodePacked(EIP191_HEADER, EIP712_DOMAIN_HASH, hashStruct));\n }\n}\n",
+ "2.0.0/protocol/Exchange/libs/LibFillResults.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.24;\n\nimport \"../../../utils/SafeMath/SafeMath.sol\";\n\n\ncontract LibFillResults is\n SafeMath\n{\n\n struct FillResults {\n uint256 makerAssetFilledAmount; // Total amount of makerAsset(s) filled.\n uint256 takerAssetFilledAmount; // Total amount of takerAsset(s) filled.\n uint256 makerFeePaid; // Total amount of ZRX paid by maker(s) to feeRecipient(s).\n uint256 takerFeePaid; // Total amount of ZRX paid by taker to feeRecipients(s).\n }\n\n struct MatchedFillResults {\n FillResults left; // Amounts filled and fees paid of left order.\n FillResults right; // Amounts filled and fees paid of right order.\n uint256 leftMakerAssetSpreadAmount; // Spread between price of left and right order, denominated in the left order's makerAsset, paid to taker.\n }\n\n /// @dev Adds properties of both FillResults instances.\n /// Modifies the first FillResults instance specified.\n /// @param totalFillResults Fill results instance that will be added onto.\n /// @param singleFillResults Fill results instance that will be added to totalFillResults.\n function addFillResults(FillResults memory totalFillResults, FillResults memory singleFillResults)\n internal\n pure\n {\n totalFillResults.makerAssetFilledAmount = safeAdd(totalFillResults.makerAssetFilledAmount, singleFillResults.makerAssetFilledAmount);\n totalFillResults.takerAssetFilledAmount = safeAdd(totalFillResults.takerAssetFilledAmount, singleFillResults.takerAssetFilledAmount);\n totalFillResults.makerFeePaid = safeAdd(totalFillResults.makerFeePaid, singleFillResults.makerFeePaid);\n totalFillResults.takerFeePaid = safeAdd(totalFillResults.takerFeePaid, singleFillResults.takerFeePaid);\n }\n}\n",
+ "2.0.0/protocol/Exchange/libs/LibOrder.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.24;\n\nimport \"./LibEIP712.sol\";\n\n\ncontract LibOrder is\n LibEIP712\n{\n\n // Hash for the EIP712 Order Schema\n bytes32 constant internal EIP712_ORDER_SCHEMA_HASH = keccak256(abi.encodePacked(\n \"Order(\",\n \"address makerAddress,\",\n \"address takerAddress,\",\n \"address feeRecipientAddress,\",\n \"address senderAddress,\",\n \"uint256 makerAssetAmount,\",\n \"uint256 takerAssetAmount,\",\n \"uint256 makerFee,\",\n \"uint256 takerFee,\",\n \"uint256 expirationTimeSeconds,\",\n \"uint256 salt,\",\n \"bytes makerAssetData,\",\n \"bytes takerAssetData\",\n \")\"\n ));\n\n // A valid order remains fillable until it is expired, fully filled, or cancelled.\n // An order's state is unaffected by external factors, like account balances.\n enum OrderStatus {\n INVALID, // Default value\n INVALID_MAKER_ASSET_AMOUNT, // Order does not have a valid maker asset amount\n INVALID_TAKER_ASSET_AMOUNT, // Order does not have a valid taker asset amount\n FILLABLE, // Order is fillable\n EXPIRED, // Order has already expired\n FULLY_FILLED, // Order is fully filled\n CANCELLED // Order has been cancelled\n }\n\n // solhint-disable max-line-length\n struct Order {\n address makerAddress; // Address that created the order. \n address takerAddress; // Address that is allowed to fill the order. If set to 0, any address is allowed to fill the order. \n address feeRecipientAddress; // Address that will recieve fees when order is filled. \n address senderAddress; // Address that is allowed to call Exchange contract methods that affect this order. If set to 0, any address is allowed to call these methods.\n uint256 makerAssetAmount; // Amount of makerAsset being offered by maker. Must be greater than 0. \n uint256 takerAssetAmount; // Amount of takerAsset being bid on by maker. Must be greater than 0. \n uint256 makerFee; // Amount of ZRX paid to feeRecipient by maker when order is filled. If set to 0, no transfer of ZRX from maker to feeRecipient will be attempted.\n uint256 takerFee; // Amount of ZRX paid to feeRecipient by taker when order is filled. If set to 0, no transfer of ZRX from taker to feeRecipient will be attempted.\n uint256 expirationTimeSeconds; // Timestamp in seconds at which order expires. \n uint256 salt; // Arbitrary number to facilitate uniqueness of the order's hash. \n bytes makerAssetData; // Encoded data that can be decoded by a specified proxy contract when transferring makerAsset. The last byte references the id of this proxy.\n bytes takerAssetData; // Encoded data that can be decoded by a specified proxy contract when transferring takerAsset. The last byte references the id of this proxy.\n }\n // solhint-enable max-line-length\n\n struct OrderInfo {\n uint8 orderStatus; // Status that describes order's validity and fillability.\n bytes32 orderHash; // EIP712 hash of the order (see LibOrder.getOrderHash).\n uint256 orderTakerAssetFilledAmount; // Amount of order that has already been filled.\n }\n\n /// @dev Calculates Keccak-256 hash of the order.\n /// @param order The order structure.\n /// @return Keccak-256 EIP712 hash of the order.\n function getOrderHash(Order memory order)\n internal\n view\n returns (bytes32 orderHash)\n {\n orderHash = hashEIP712Message(hashOrder(order));\n return orderHash;\n }\n\n /// @dev Calculates EIP712 hash of the order.\n /// @param order The order structure.\n /// @return EIP712 hash of the order.\n function hashOrder(Order memory order)\n internal\n pure\n returns (bytes32 result)\n {\n bytes32 schemaHash = EIP712_ORDER_SCHEMA_HASH;\n bytes32 makerAssetDataHash = keccak256(order.makerAssetData);\n bytes32 takerAssetDataHash = keccak256(order.takerAssetData);\n\n // Assembly for more efficiently computing:\n // keccak256(abi.encode(\n // order.makerAddress,\n // order.takerAddress,\n // order.feeRecipientAddress,\n // order.senderAddress,\n // order.makerAssetAmount,\n // order.takerAssetAmount,\n // order.makerFee,\n // order.takerFee,\n // order.expirationTimeSeconds,\n // order.salt,\n // keccak256(order.makerAssetData),\n // keccak256(order.takerAssetData)\n // ));\n\n assembly {\n // Backup\n // solhint-disable-next-line space-after-comma\n let temp1 := mload(sub(order, 32))\n let temp2 := mload(add(order, 320))\n let temp3 := mload(add(order, 352))\n \n // Hash in place\n // solhint-disable-next-line space-after-comma\n mstore(sub(order, 32), schemaHash)\n mstore(add(order, 320), makerAssetDataHash)\n mstore(add(order, 352), takerAssetDataHash)\n result := keccak256(sub(order, 32), 416)\n \n // Restore\n // solhint-disable-next-line space-after-comma\n mstore(sub(order, 32), temp1)\n mstore(add(order, 320), temp2)\n mstore(add(order, 352), temp3)\n }\n return result;\n }\n}\n",
+ "2.0.0/test/ExchangeWrapper/ExchangeWrapper.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../../protocol/Exchange/interfaces/IExchange.sol\";\nimport \"../../protocol/Exchange/libs/LibOrder.sol\";\n\n\ncontract ExchangeWrapper {\n\n // Exchange contract.\n // solhint-disable-next-line var-name-mixedcase\n IExchange internal EXCHANGE;\n\n constructor (address _exchange)\n public\n {\n EXCHANGE = IExchange(_exchange);\n }\n\n /// @dev Cancels all orders created by sender with a salt less than or equal to the targetOrderEpoch\n /// and senderAddress equal to this contract.\n /// @param targetOrderEpoch Orders created with a salt less or equal to this value will be cancelled.\n /// @param salt Arbitrary value to gaurantee uniqueness of 0x transaction hash.\n /// @param makerSignature Proof that maker wishes to call this function with given params.\n function cancelOrdersUpTo(\n uint256 targetOrderEpoch,\n uint256 salt,\n bytes makerSignature\n )\n external\n {\n address makerAddress = msg.sender;\n\n // Encode arguments into byte array.\n bytes memory data = abi.encodeWithSelector(\n EXCHANGE.cancelOrdersUpTo.selector,\n targetOrderEpoch\n );\n\n // Call `cancelOrdersUpTo` via `executeTransaction`.\n EXCHANGE.executeTransaction(\n salt,\n makerAddress,\n data,\n makerSignature\n );\n }\n\n /// @dev Fills an order using `msg.sender` as the taker.\n /// @param order Order struct containing order specifications.\n /// @param takerAssetFillAmount Desired amount of takerAsset to sell.\n /// @param salt Arbitrary value to gaurantee uniqueness of 0x transaction hash.\n /// @param orderSignature Proof that order has been created by maker.\n /// @param takerSignature Proof that taker wishes to call this function with given params.\n function fillOrder(\n LibOrder.Order memory order,\n uint256 takerAssetFillAmount,\n uint256 salt,\n bytes memory orderSignature,\n bytes memory takerSignature\n )\n public\n {\n address takerAddress = msg.sender;\n\n // Encode arguments into byte array.\n bytes memory data = abi.encodeWithSelector(\n EXCHANGE.fillOrder.selector,\n order,\n takerAssetFillAmount,\n orderSignature\n );\n\n // Call `fillOrder` via `executeTransaction`.\n EXCHANGE.executeTransaction(\n salt,\n takerAddress,\n data,\n takerSignature\n );\n }\n}\n",
+ "2.0.0/utils/SafeMath/SafeMath.sol": "pragma solidity 0.4.24;\n\n\ncontract SafeMath {\n function safeMul(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n if (a == 0) {\n return 0;\n }\n uint256 c = a * b;\n require(\n c / a == b,\n \"UINT256_OVERFLOW\"\n );\n return c;\n }\n\n function safeDiv(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n uint256 c = a / b;\n return c;\n }\n\n function safeSub(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n require(\n b <= a,\n \"UINT256_OVERFLOW\"\n );\n return a - b;\n }\n\n function safeAdd(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n uint256 c = a + b;\n require(\n c >= a,\n \"UINT256_OVERFLOW\"\n );\n return c;\n }\n\n function max64(uint64 a, uint64 b)\n internal\n pure\n returns (uint256)\n {\n return a >= b ? a : b;\n }\n\n function min64(uint64 a, uint64 b)\n internal\n pure\n returns (uint256)\n {\n return a < b ? a : b;\n }\n\n function max256(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n return a >= b ? a : b;\n }\n\n function min256(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n return a < b ? a : b;\n }\n}\n"
},
- "sourceTreeHashHex": "0xfb37b7d16d9de73d63893ec12a9c717671a87acc160b780b6570f3b2ff3b6392",
+ "sourceTreeHashHex": "0x8f987fe89e675259bfeec3e04977656c5a4393696670dd031023b76f85f8bfb7",
"compiler": {
"name": "solc",
"version": "soljson-v0.4.24+commit.e67f0147.js",
diff --git a/packages/migrations/artifacts/2.0.0/Forwarder.json b/packages/migrations/artifacts/2.0.0/Forwarder.json
index acfc3b83b..479f9d2eb 100644
--- a/packages/migrations/artifacts/2.0.0/Forwarder.json
+++ b/packages/migrations/artifacts/2.0.0/Forwarder.json
@@ -297,20 +297,6 @@
"type": "function"
},
{
- "constant": true,
- "inputs": [],
- "name": "ERC20_DATA_ID",
- "outputs": [
- {
- "name": "",
- "type": "bytes4"
- }
- ],
- "payable": false,
- "stateMutability": "view",
- "type": "function"
- },
- {
"constant": false,
"inputs": [
{
@@ -474,11 +460,11 @@
{
"constant": true,
"inputs": [],
- "name": "owner",
+ "name": "PERCENTAGE_DENOMINATOR",
"outputs": [
{
"name": "",
- "type": "address"
+ "type": "uint16"
}
],
"payable": false,
@@ -488,7 +474,7 @@
{
"constant": true,
"inputs": [],
- "name": "PERCENTAGE_DENOMINATOR",
+ "name": "MAX_FEE",
"outputs": [
{
"name": "",
@@ -501,12 +487,89 @@
},
{
"constant": true,
- "inputs": [],
- "name": "MAX_FEE",
+ "inputs": [
+ {
+ "components": [
+ {
+ "name": "makerAddress",
+ "type": "address"
+ },
+ {
+ "name": "takerAddress",
+ "type": "address"
+ },
+ {
+ "name": "feeRecipientAddress",
+ "type": "address"
+ },
+ {
+ "name": "senderAddress",
+ "type": "address"
+ },
+ {
+ "name": "makerAssetAmount",
+ "type": "uint256"
+ },
+ {
+ "name": "takerAssetAmount",
+ "type": "uint256"
+ },
+ {
+ "name": "makerFee",
+ "type": "uint256"
+ },
+ {
+ "name": "takerFee",
+ "type": "uint256"
+ },
+ {
+ "name": "expirationTimeSeconds",
+ "type": "uint256"
+ },
+ {
+ "name": "salt",
+ "type": "uint256"
+ },
+ {
+ "name": "makerAssetData",
+ "type": "bytes"
+ },
+ {
+ "name": "takerAssetData",
+ "type": "bytes"
+ }
+ ],
+ "name": "orders",
+ "type": "tuple[]"
+ },
+ {
+ "name": "takerAssetFillAmount",
+ "type": "uint256"
+ }
+ ],
+ "name": "calculateMarketSellResults",
"outputs": [
{
- "name": "",
- "type": "uint16"
+ "components": [
+ {
+ "name": "makerAssetFilledAmount",
+ "type": "uint256"
+ },
+ {
+ "name": "takerAssetFilledAmount",
+ "type": "uint256"
+ },
+ {
+ "name": "makerFeePaid",
+ "type": "uint256"
+ },
+ {
+ "name": "takerFeePaid",
+ "type": "uint256"
+ }
+ ],
+ "name": "totalFillResults",
+ "type": "tuple"
}
],
"payable": false,
@@ -632,48 +695,6 @@
"type": "function"
},
{
- "constant": false,
- "inputs": [
- {
- "name": "erc20AssetProxyId",
- "type": "bytes4"
- }
- ],
- "name": "setERC20ProxyApproval",
- "outputs": [],
- "payable": false,
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "name": "newOwner",
- "type": "address"
- }
- ],
- "name": "transferOwnership",
- "outputs": [],
- "payable": false,
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [],
- "name": "ERC721_DATA_ID",
- "outputs": [
- {
- "name": "",
- "type": "bytes4"
- }
- ],
- "payable": false,
- "stateMutability": "view",
- "type": "function"
- },
- {
"inputs": [
{
"name": "_exchange",
@@ -688,10 +709,6 @@
"type": "address"
},
{
- "name": "_erc20AssetProxyId",
- "type": "bytes4"
- },
- {
"name": "_zrxAssetData",
"type": "bytes"
},
@@ -713,15 +730,15 @@
"evm": {
"bytecode": {
"linkReferences": {},
- "object": "0x60806040526000196006553480156200001757600080fd5b5060405162003c7238038062003c7283398101806040526200003d919081019062000494565b6000805433600160a060020a031991821617909155600180548216600160a060020a038981169190911790915560028054831688831617905560038054909216908616179055815186908690869085908590620000a290600490602085019062000339565b508051620000b890600590602084019062000339565b505050505050620000d883620000e4640100000000026401000000009004565b505050505050620006cf565b60008054600160a060020a0316331462000135576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200012c9062000605565b60405180910390fd5b6001546040517f60704108000000000000000000000000000000000000000000000000000000008152600160a060020a039091169063607041089062000180908590600401620005ef565b602060405180830381600087803b1580156200019b57600080fd5b505af1158015620001b0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620001d691908101906200046b565b9050600160a060020a0381161562000335576002546006546040517f095ea7b3000000000000000000000000000000000000000000000000000000008152600160a060020a039092169163095ea7b3916200023791859190600401620005d0565b602060405180830381600087803b1580156200025257600080fd5b505af115801562000267573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506200028d919081019062000558565b506003546006546040517f095ea7b3000000000000000000000000000000000000000000000000000000008152600160a060020a039092169163095ea7b391620002dd91859190600401620005d0565b602060405180830381600087803b158015620002f857600080fd5b505af11580156200030d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525062000333919081019062000558565b505b5050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200037c57805160ff1916838001178555620003ac565b82800160010185558215620003ac579182015b82811115620003ac5782518255916020019190600101906200038f565b50620003ba929150620003be565b5090565b620003db91905b80821115620003ba5760008155600101620003c5565b90565b6000620003ec825162000666565b9392505050565b6000620003ec825162000697565b6000620003ec825162000672565b6000601f820183136200042157600080fd5b81516200043862000432826200063e565b62000617565b915080825260208301602083018583830111156200045557600080fd5b620004628382846200069c565b50505092915050565b6000602082840312156200047e57600080fd5b60006200048c8484620003de565b949350505050565b60008060008060008060c08789031215620004ae57600080fd5b6000620004bc8989620003de565b9650506020620004cf89828a01620003de565b9550506040620004e289828a01620003de565b9450506060620004f589828a0162000401565b93505060808701516001604060020a038111156200051257600080fd5b6200052089828a016200040f565b92505060a08701516001604060020a038111156200053d57600080fd5b6200054b89828a016200040f565b9150509295509295509295565b6000602082840312156200056b57600080fd5b60006200048c8484620003f3565b620005848162000666565b82525050565b620005848162000672565b601381527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000602082015260400190565b6200058481620003db565b60408101620005e0828562000579565b620003ec6020830184620005c5565b60208101620005ff82846200058a565b92915050565b60208082528101620005ff8162000595565b6040518181016001604060020a03811182821017156200063657600080fd5b604052919050565b60006001604060020a038211156200065557600080fd5b506020601f91909101601f19160190565b600160a060020a031690565b7fffffffff000000000000000000000000000000000000000000000000000000001690565b151590565b60005b83811015620006b95781810151838201526020016200069f565b83811115620006c9576000848401525b50505050565b61359380620006df6000396000f3006080604052600436106100cf5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663150b7a02811461012b578063169645f2146101615780631c5b1ec41461018157806320472cf7146101a15780634a00f7d5146101c3578063725cef06146101d85780638da5cb5b146101eb578063b3cd42541461020d578063bc063e1a14610222578063e58e9c1614610237578063f0b9e5ba14610257578063f2afd85a14610277578063f2fde38b14610297578063fb4f9087146102b7575b60025473ffffffffffffffffffffffffffffffffffffffff163314610129576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610120906132e1565b60405180910390fd5b005b34801561013757600080fd5b5061014b6101463660046128b0565b6102cc565b60405161015891906132d3565b60405180910390f35b61017461016f36600461298e565b61032c565b60405161015891906133a1565b34801561018d57600080fd5b5061017461019c366004612b6f565b6105f8565b3480156101ad57600080fd5b506101b66106be565b60405161015891906133f2565b3480156101cf57600080fd5b5061014b6106c4565b6101746101e6366004612a74565b6106f9565b3480156101f757600080fd5b50610200610ac7565b60405161015891906131fb565b34801561021957600080fd5b506101b6610ae3565b34801561022e57600080fd5b506101b6610ae9565b34801561024357600080fd5b50610174610252366004612b6f565b610aef565b34801561026357600080fd5b5061014b610272366004612929565b610bec565b34801561028357600080fd5b50610129610292366004612bde565b610c4c565b3480156102a357600080fd5b506101296102b2366004612874565b610ec3565b3480156102c357600080fd5b5061014b610f74565b604080517f6f6e455243373231526563656976656428616464726573732c6164647265737381527f2c75696e743235362c62797465732900000000000000000000000000000000006020820152905190819003602f019020949350505050565b6103346124b3565b3460008080808411610372576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012090613311565b61037d848888610fcf565b9250610389848461109d565b9150600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016000604051808303818588803b15801561041157600080fd5b505af1158015610425573d6000803e3d6000fd5b50505050506104528b600081518110151561043c57fe5b90602001906020020151610140015160106110b4565b60058054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010060018816150201909516949094049384018190048102820181019092528281529394508301828280156104f85780601f106104cd576101008083540402835291602001916104f8565b820191906000526020600020905b8154815290600101906020018083116104db57829003601f168201915b50505050508b600081518110151561050c57fe5b60209081029091010151610160015260035473ffffffffffffffffffffffffffffffffffffffff82811691161415610550576105498b8b84611115565b9450610560565b61055d8b8b8b8b8661122f565b94505b602085015184101561059e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610120906132f1565b602085015182146105db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012090613351565b6105ea813387600001516113b7565b505050509695505050505050565b6106006124b3565b600080600061060d6124b3565b600093505b86518410156106b45761062986866000015161109d565b925061066c878581518110151561063c57fe5b9060200190602002015160a00151888681518110151561065857fe5b906020019060200201516080015185611591565b915061068f878581518110151561067f57fe5b90602001906020020151836115ae565b905061069b85826116fc565b84518614156106a9576106b4565b600190930192610612565b5050505092915050565b61251c81565b604080517f4552433230546f6b656e286164647265737329000000000000000000000000008152905190819003601301902081565b6107016124b3565b34600080821161073d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012090613311565b60008611610777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012090613311565b61079f8a600081518110151561078957fe5b906020019060200201516101400151600061175e565b604080517f4552433230546f6b656e28616464726573732900000000000000000000000000815290519081900360130190209091507fffffffff00000000000000000000000000000000000000000000000000000000808316911614806108815750604080517f455243373231546f6b656e28616464726573732c75696e743235362c6279746581527f7329000000000000000000000000000000000000000000000000000000000000602082015290519081900360220190207fffffffff000000000000000000000000000000000000000000000000000000008281169116145b15156108b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012090613381565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016000604051808303818588803b15801561093f57600080fd5b505af1158015610953573d6000803e3d6000fd5b5050604080517f4552433230546f6b656e28616464726573732900000000000000000000000000815290519081900360130190207fffffffff000000000000000000000000000000000000000000000000000000008581169116141592506109cc915050576109c58a8a8a8a8a6117cb565b9250610a5f565b604080517f455243373231546f6b656e28616464726573732c75696e743235362c6279746581527f7329000000000000000000000000000000000000000000000000000000000000602082015290519081900360220190207fffffffff0000000000000000000000000000000000000000000000000000000082811691161415610a5f57610a5c8a8a8a8a611b22565b92505b6020830151821015610a9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610120906132f1565b610aba610aae83856020015161109d565b84602001518787611e24565b5050979650505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b61271081565b6103e881565b610af76124b3565b6000806000610b046124b3565b600093505b86518410156106b457610b2086866000015161109d565b9250610b878785815181101515610b3357fe5b9060200190602002015160a00151610b818987815181101515610b5257fe5b90602001906020020151608001518a88815181101515610b6e57fe5b9060200190602002015160e0015161109d565b85611591565b9150610bb48785815181101515610b9a57fe5b90602001906020020151610baf846001611f11565b6115ae565b9050610bc88160000151826060015161109d565b8152610bd485826116fc565b84518611610be1576106b4565b600190930192610b09565b604080517f6f6e455243373231526563656976656428616464726573732c75696e7432353681527f2c62797465732900000000000000000000000000000000000000000000000000602082015290519081900360270190205b9392505050565b6000805473ffffffffffffffffffffffffffffffffffffffff163314610c9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012090613361565b6001546040517f6070410800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690636070410890610cf49085906004016132d3565b602060405180830381600087803b158015610d0e57600080fd5b505af1158015610d22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610d469190810190612892565b905073ffffffffffffffffffffffffffffffffffffffff811615610ebf576002546006546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163095ea7b391610dbe9185919060040161324d565b602060405180830381600087803b158015610dd857600080fd5b505af1158015610dec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610e109190810190612bc0565b506003546006546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163095ea7b391610e6b9185919060040161324d565b602060405180830381600087803b158015610e8557600080fd5b505af1158015610e99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610ebd9190810190612bc0565b505b5050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610f14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012090613361565b73ffffffffffffffffffffffffffffffffffffffff811615610f7157600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b604080517f455243373231546f6b656e28616464726573732c75696e743235362c6279746581527f73290000000000000000000000000000000000000000000000000000000000006020820152905190819003602201902081565b6000808361ffff16118015610ff9575073ffffffffffffffffffffffffffffffffffffffff821615155b15610c45576103e861ffff8416111561103e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012090613331565b61104f61ffff841661271086611591565b60405190915073ffffffffffffffffffffffffffffffffffffffff83169082156108fc029083906000818181858888f19350505050158015611095573d6000803e3d6000fd5b509392505050565b6000828211156110a957fe5b508082035b92915050565b6000816014018351101515156110f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012090613371565b50016014015173ffffffffffffffffffffffffffffffffffffffff1690565b61111d6124b3565b6001546040517f7e1d980800000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff1690637e1d980890611178908890879089906004016132a1565b608060405180830381600087803b15801561119257600080fd5b505af11580156111a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506111ca9190810190612bfc565b91506111de8260000151836060015161109d565b90506111ee826000015182611f20565b1515611226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012090613351565b81529392505050565b6112376124b3565b60006112416124b3565b6112496124b3565b6112516124b3565b85935061125e8a87611f3d565b92506000836060015111156112f25761127c88888560600151611fa7565b91506112958661129088856020015161109d565b611f20565b15156112cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012090613351565b6112db84836020015161109d565b606080840151908701526020808401519087015293505b6001546040517f7e1d980800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690637e1d98089061134c908d9088908e906004016132a1565b608060405180830381600087803b15801561136657600080fd5b505af115801561137a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061139e9190810190612bfc565b90506113aa85826116fc565b5050505095945050505050565b604080517f7472616e7366657228616464726573732c75696e7432353629000000000000008152905190819003601901812060009173ffffffffffffffffffffffffffffffffffffffff86169190611415908690869060240161324d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931783525181519192909182919080838360005b838110156114b95781810151838201526020016114a1565b50505050905090810190601f1680156114e65780820380516001836020036101000a031916815260200191505b509150506000604051808303816000865af192505050801515611535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012090613341565b3d15611552575060003d602014156115525760206000803e506000515b80151561158b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012090613341565b50505050565b60006115a66115a085846122e0565b84612304565b949350505050565b6115b66124b3565b6115be6124dc565b6001546040517fc75e0a81000000000000000000000000000000000000000000000000000000008152600091829173ffffffffffffffffffffffffffffffffffffffff9091169063c75e0a81906116199089906004016133af565b606060405180830381600087803b15801561163357600080fd5b505af1158015611647573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061166b9190810190612c1a565b805190935060ff1660031461167f576116f3565b6116918660a00151846040015161109d565b915061169d858361231b565b9050808460200181815250506116bc818760a001518860800151611591565b845260a086015160c08701516116d3918391611591565b604085015260a086015160e08701516116ed918391611591565b60608501525b50505092915050565b8151815161170a9190611f11565b8252602080830151908201516117209190611f11565b6020830152604080830151908201516117399190611f11565b6040830152606080830151908201516117529190611f11565b60609092019190915250565b6000816004018351101515156117a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012090613391565b5050602001517fffffffff000000000000000000000000000000000000000000000000000000001690565b6117d36124b3565b60006117dd6124b3565b6117e56124b3565b6117ed6124b3565b6117ff8a600081518110151561043c57fe5b60058054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010060018816150201909516949094049384018190048102820181019092528281529397508301828280156118a55780601f1061187a576101008083540402835291602001916118a5565b820191906000526020600020905b81548152906001019060200180831161188857829003601f168201915b50505050508a60008151811015156118b957fe5b60209081029091010151610160015260035473ffffffffffffffffffffffffffffffffffffffff85811691161415611997576118f68a8a88611fa7565b8051909350861115611934576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012090613351565b61193e85846116fc565b61195a61195386600001518760600151611f11565b8651611f20565b1515611992576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012090613351565b611b13565b6119a18a876105f8565b91506000826060015111156119d6576119bf88888460600151611fa7565b602080820151908701526060808201519087015290505b6001546040517fe5fa431b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e5fa431b90611a30908d908a908e906004016132a1565b608060405180830381600087803b158015611a4a57600080fd5b505af1158015611a5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611a829190810190612bfc565b80519093508614611abf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012090613351565b611ac985846116fc565b611adb85602001518460200151611f20565b1515611b13576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012090613351565b6113aa843385600001516113b7565b611b2a6124b3565b60008060606000611b396124b3565b611b416124b3565b8a51945084604051908082528060200260200182016040528015611b6f578160200160208202803883390190505b509350600092505b84831015611cab57611ba4868c85815181101515611b9157fe5b9060200190602002015160e00151611f11565b60058054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152939950830182828015611c4a5780601f10611c1f57610100808354040283529160200191611c4a565b820191906000526020600020905b815481529060010190602001808311611c2d57829003601f168201915b50505050508b84815181101515611c5d57fe5b6020908102909101015161016001528a518b9084908110611c7a57fe5b9060200190602002015160a001518484815181101515611c9657fe5b60209081029091010152600190920191611b77565b6000861115611cd657611cbf898988611fa7565b606080820151908901526020808201519089015291505b6001546040517f4d0ae54600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690634d0ae54690611d30908e9088908f90600401613268565b608060405180830381600087803b158015611d4a57600080fd5b505af1158015611d5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611d829190810190612bfc565b9050611d8e87826116fc565b611da087602001518260200151611f20565b1515611dd8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012090613351565b600092505b84831015611e1657611e0b8b84815181101515611df657fe5b90602001906020020151610140015133612331565b600190920191611ddd565b505050505050949350505050565b6000806000861115611f09576002546040517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690632e1a7d4d90611e86908990600401613400565b600060405180830381600087803b158015611ea057600080fd5b505af1158015611eb4573d6000803e3d6000fd5b50505050611ec3858585610fcf565b9150611ecf868361109d565b90506000811115611f0957604051339082156108fc029083906000818181858888f19350505050158015611f07573d6000803e3d6000fd5b505b505050505050565b600082820183811015610c4557fe5b600080611f3261251c61271086611591565b909210159392505050565b611f456124b3565b600080611f506124b3565b600092505b85518310156116f357611f6c85856020015161109d565b9150611f7f868481518110151561067f57fe5b9050611f8b84826116fc565b8484602001511415611f9c576116f3565b600190920191611f55565b611faf6124b3565b6000806000611fbc6124b3565b600093505b87518410156122d5576004805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f8101849004840282018401909252818152929183018282801561206e5780601f106120435761010080835404028352916020019161206e565b820191906000526020600020905b81548152906001019060200180831161205157829003601f168201915b5050505050888581518110151561208157fe5b602090810290910181015161014001919091526005805460408051601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001871615020190941693909304928301859004850281018501909152818152928301828280156121365780601f1061210b57610100808354040283529160200191612136565b820191906000526020600020905b81548152906001019060200180831161211957829003601f168201915b5050505050888581518110151561214957fe5b602090810290910101516101600152845161216590879061109d565b92506121b3888581518110151561217857fe5b9060200190602002015160a00151610b818a8781518110151561219757fe5b90602001906020020151608001518b88815181101515610b6e57fe5b600154895191935073ffffffffffffffffffffffffffffffffffffffff169063b4be83d5908a90879081106121e457fe5b906020019060200201516121f9856001611f11565b8a8881518110151561220757fe5b906020019060200201516040518463ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161224b939291906133c0565b608060405180830381600087803b15801561226557600080fd5b505af1158015612279573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061229d9190810190612bfc565b90506122b18160000151826060015161109d565b81526122bd85826116fc565b845186116122ca576122d5565b600190930192611fc1565b505050509392505050565b60008282028315806122fc57508284828115156122f957fe5b04145b1515610c4557fe5b600080828481151561231257fe5b04949350505050565b600081831061232a5781610c45565b5090919050565b600080606061234785601063ffffffff6110b416565b925061235a85602463ffffffff61240116565b915061236d85606463ffffffff61240d16565b6040517fb88d4fde00000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff84169063b88d4fde906123c8903090889087908790600401613209565b600060405180830381600087803b1580156123e257600080fd5b505af11580156123f6573d6000803e3d6000fd5b505050505050505050565b6000610c458383612468565b6060600061241b8484612401565b9050602083019250808301845110151515612462576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012090613301565b50500190565b6000816020018351101515156124aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012090613321565b50016020015190565b608060405190810160405280600081526020016000815260200160008152602001600081525090565b604080516060810182526000808252602082018190529181019190915290565b6000610c4582356134a6565b6000610c4582516134a6565b6000601f8201831361252557600080fd5b813561253861253382613435565b61340e565b81815260209384019390925082018360005b838110156106b4578135860161256088826125f7565b845250602092830192919091019060010161254a565b6000601f8201831361258757600080fd5b813561259561253382613435565b81815260209384019390925082018360005b838110156106b457813586016125bd8882612707565b84525060209283019291909101906001016125a7565b6000610c4582516134ee565b6000610c4582516134eb565b6000610c4582356134bf565b6000601f8201831361260857600080fd5b813561261661253382613456565b9150808252602083016020830185838301111561263257600080fd5b6116f38382846134f9565b60006080828403121561264f57600080fd5b612659608061340e565b9050600061266784846125df565b8252506020612678848483016125df565b602083015250604061268c848285016125df565b60408301525060606126a0848285016125df565b60608301525092915050565b6000606082840312156126be57600080fd5b6126c8606061340e565b905060006126d68484612868565b82525060206126e7848483016125df565b60208301525060406126fb848285016125df565b60408301525092915050565b6000610180828403121561271a57600080fd5b61272561018061340e565b9050600061273384846124fc565b8252506020612744848483016124fc565b6020830152506040612758848285016124fc565b604083015250606061276c848285016124fc565b60608301525060806127808482850161285c565b60808301525060a06127948482850161285c565b60a08301525060c06127a88482850161285c565b60c08301525060e06127bc8482850161285c565b60e0830152506101006127d18482850161285c565b610100830152506101206127e78482850161285c565b6101208301525061014082013567ffffffffffffffff81111561280957600080fd5b612815848285016125f7565b6101408301525061016082013567ffffffffffffffff81111561283757600080fd5b612843848285016125f7565b6101608301525092915050565b6000610c4582356134e4565b6000610c4582356134eb565b6000610c4582516134f3565b60006020828403121561288657600080fd5b60006115a684846124fc565b6000602082840312156128a457600080fd5b60006115a68484612508565b600080600080608085870312156128c657600080fd5b60006128d287876124fc565b94505060206128e3878288016124fc565b93505060406128f48782880161285c565b925050606085013567ffffffffffffffff81111561291157600080fd5b61291d878288016125f7565b91505092959194509250565b60008060006060848603121561293e57600080fd5b600061294a86866124fc565b935050602061295b8682870161285c565b925050604084013567ffffffffffffffff81111561297857600080fd5b612984868287016125f7565b9150509250925092565b60008060008060008060c087890312156129a757600080fd5b863567ffffffffffffffff8111156129be57600080fd5b6129ca89828a01612576565b965050602087013567ffffffffffffffff8111156129e757600080fd5b6129f389828a01612514565b955050604087013567ffffffffffffffff811115612a1057600080fd5b612a1c89828a01612576565b945050606087013567ffffffffffffffff811115612a3957600080fd5b612a4589828a01612514565b9350506080612a5689828a01612850565b92505060a0612a6789828a016124fc565b9150509295509295509295565b600080600080600080600060e0888a031215612a8f57600080fd5b873567ffffffffffffffff811115612aa657600080fd5b612ab28a828b01612576565b975050602088013567ffffffffffffffff811115612acf57600080fd5b612adb8a828b01612514565b965050604088013567ffffffffffffffff811115612af857600080fd5b612b048a828b01612576565b955050606088013567ffffffffffffffff811115612b2157600080fd5b612b2d8a828b01612514565b9450506080612b3e8a828b0161285c565b93505060a0612b4f8a828b01612850565b92505060c0612b608a828b016124fc565b91505092959891949750929550565b60008060408385031215612b8257600080fd5b823567ffffffffffffffff811115612b9957600080fd5b612ba585828601612576565b9250506020612bb68582860161285c565b9150509250929050565b600060208284031215612bd257600080fd5b60006115a684846125d3565b600060208284031215612bf057600080fd5b60006115a684846125eb565b600060808284031215612c0e57600080fd5b60006115a6848461263d565b600060608284031215612c2c57600080fd5b60006115a684846126ac565b612c41816134a6565b82525050565b6000612c52826134a2565b80845260208401935083602082028501612c6b8561349c565b60005b84811015612ca2578383038852612c86838351612d69565b9250612c918261349c565b602098909801979150600101612c6e565b50909695505050505050565b6000612cb9826134a2565b80845260208401935083602082028501612cd28561349c565b60005b84811015612ca2578383038852612ced8383516130e6565b9250612cf88261349c565b602098909801979150600101612cd5565b6000612d14826134a2565b808452602084019350612d268361349c565b60005b82811015612d5657612d3c8683516131f2565b612d458261349c565b602096909601959150600101612d29565b5093949350505050565b612c41816134bf565b6000612d74826134a2565b808452612d88816020860160208601613505565b612d9181613531565b9093016020019392505050565b602381527f44454641554c545f46554e4354494f4e5f574554485f434f4e54524143545f4f60208201527f4e4c590000000000000000000000000000000000000000000000000000000000604082015260600190565b601181527f494e56414c49445f4d53475f56414c5545000000000000000000000000000000602082015260400190565b603081527f475245415445525f4f525f455155414c5f544f5f4e45535445445f425954455360208201527f5f4c454e4754485f524551554952454400000000000000000000000000000000604082015260600190565b601781527f56414c55455f475245415445525f5448414e5f5a45524f000000000000000000602082015260400190565b602681527f475245415445525f4f525f455155414c5f544f5f33325f4c454e4754485f524560208201527f5155495245440000000000000000000000000000000000000000000000000000604082015260600190565b601881527f4645455f50524f504f5254494f4e5f544f4f5f4c415247450000000000000000602082015260400190565b600f81527f5452414e534645525f4641494c45440000000000000000000000000000000000602082015260400190565b601681527f554e41434345505441424c455f5448524553484f4c4400000000000000000000602082015260400190565b601381527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000602082015260400190565b602681527f475245415445525f4f525f455155414c5f544f5f32305f4c454e4754485f524560208201527f5155495245440000000000000000000000000000000000000000000000000000604082015260600190565b601781527f554e535550504f525445445f544f4b454e5f50524f5859000000000000000000602082015260400190565b602581527f475245415445525f4f525f455155414c5f544f5f345f4c454e4754485f52455160208201527f5549524544000000000000000000000000000000000000000000000000000000604082015260600190565b805160808301906130ad84826131f2565b5060208201516130c060208501826131f2565b5060408201516130d360408501826131f2565b50606082015161158b60608501826131f2565b80516000906101808401906130fb8582612c38565b50602083015161310e6020860182612c38565b5060408301516131216040860182612c38565b5060608301516131346060860182612c38565b50608083015161314760808601826131f2565b5060a083015161315a60a08601826131f2565b5060c083015161316d60c08601826131f2565b5060e083015161318060e08601826131f2565b506101008301516131956101008601826131f2565b506101208301516131aa6101208601826131f2565b506101408301518482036101408601526131c48282612d69565b9150506101608301518482036101608601526131e08282612d69565b95945050505050565b612c41816134e4565b612c41816134eb565b602081016110ae8284612c38565b608081016132178287612c38565b6132246020830186612c38565b61323160408301856131f2565b81810360608301526132438184612d69565b9695505050505050565b6040810161325b8285612c38565b610c4560208301846131f2565b606080825281016132798186612cae565b9050818103602083015261328d8185612d09565b905081810360408301526131e08184612c47565b606080825281016132b28186612cae565b90506132c160208301856131f2565b81810360408301526131e08184612c47565b602081016110ae8284612d60565b602080825281016110ae81612d9e565b602080825281016110ae81612df4565b602080825281016110ae81612e24565b602080825281016110ae81612e7a565b602080825281016110ae81612eaa565b602080825281016110ae81612f00565b602080825281016110ae81612f30565b602080825281016110ae81612f60565b602080825281016110ae81612f90565b602080825281016110ae81612fc0565b602080825281016110ae81613016565b602080825281016110ae81613046565b608081016110ae828461309c565b60208082528101610c4581846130e6565b606080825281016133d181866130e6565b90506133e060208301856131f2565b81810360408301526131e08184612d69565b602081016110ae82846131e9565b602081016110ae82846131f2565b60405181810167ffffffffffffffff8111828210171561342d57600080fd5b604052919050565b600067ffffffffffffffff82111561344c57600080fd5b5060209081020190565b600067ffffffffffffffff82111561346d57600080fd5b506020601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160190565b60200190565b5190565b73ffffffffffffffffffffffffffffffffffffffff1690565b7fffffffff000000000000000000000000000000000000000000000000000000001690565b61ffff1690565b90565b151590565b60ff1690565b82818337506000910152565b60005b83811015613520578181015183820152602001613508565b8381111561158b5750506000910152565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016905600a265627a7a72305820f84428674a7a1b076ea035cdfa190e912ba3c094f209cbddcd831d7362003d456c6578706572696d656e74616cf50037",
- "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 NOT PUSH1 0x6 SSTORE CALLVALUE DUP1 ISZERO PUSH3 0x17 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x3C72 CODESIZE SUB DUP1 PUSH3 0x3C72 DUP4 CODECOPY DUP2 ADD DUP1 PUSH1 0x40 MSTORE PUSH3 0x3D SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH3 0x494 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD CALLER PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x1 DUP1 SLOAD DUP3 AND PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP10 DUP2 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x2 DUP1 SLOAD DUP4 AND DUP9 DUP4 AND OR SWAP1 SSTORE PUSH1 0x3 DUP1 SLOAD SWAP1 SWAP3 AND SWAP1 DUP7 AND OR SWAP1 SSTORE DUP2 MLOAD DUP7 SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP6 SWAP1 DUP6 SWAP1 PUSH3 0xA2 SWAP1 PUSH1 0x4 SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH3 0x339 JUMP JUMPDEST POP DUP1 MLOAD PUSH3 0xB8 SWAP1 PUSH1 0x5 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH3 0x339 JUMP JUMPDEST POP POP POP POP POP POP PUSH3 0xD8 DUP4 PUSH3 0xE4 PUSH5 0x100000000 MUL PUSH5 0x100000000 SWAP1 DIV JUMP JUMPDEST POP POP POP POP POP POP PUSH3 0x6CF JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND CALLER EQ PUSH3 0x135 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH3 0x12C SWAP1 PUSH3 0x605 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH32 0x6070410800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x60704108 SWAP1 PUSH3 0x180 SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH3 0x5EF JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x19B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH3 0x1B0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH3 0x1D6 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH3 0x46B JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 AND ISZERO PUSH3 0x335 JUMPI PUSH1 0x2 SLOAD PUSH1 0x6 SLOAD PUSH1 0x40 MLOAD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x95EA7B3 SWAP2 PUSH3 0x237 SWAP2 DUP6 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH3 0x5D0 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x252 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH3 0x267 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH3 0x28D SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH3 0x558 JUMP JUMPDEST POP PUSH1 0x3 SLOAD PUSH1 0x6 SLOAD PUSH1 0x40 MLOAD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x95EA7B3 SWAP2 PUSH3 0x2DD SWAP2 DUP6 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH3 0x5D0 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x2F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH3 0x30D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH3 0x333 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH3 0x558 JUMP JUMPDEST POP JUMPDEST POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH3 0x37C JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x3AC JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x3AC JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x3AC JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x38F JUMP JUMPDEST POP PUSH3 0x3BA SWAP3 SWAP2 POP PUSH3 0x3BE JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH3 0x3DB SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x3BA JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x3C5 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH3 0x3EC DUP3 MLOAD PUSH3 0x666 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0x3EC DUP3 MLOAD PUSH3 0x697 JUMP JUMPDEST PUSH1 0x0 PUSH3 0x3EC DUP3 MLOAD PUSH3 0x672 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH3 0x421 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x438 PUSH3 0x432 DUP3 PUSH3 0x63E JUMP JUMPDEST PUSH3 0x617 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP4 ADD DUP6 DUP4 DUP4 ADD GT ISZERO PUSH3 0x455 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x462 DUP4 DUP3 DUP5 PUSH3 0x69C JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x47E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH3 0x48C DUP5 DUP5 PUSH3 0x3DE JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH3 0x4AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH3 0x4BC DUP10 DUP10 PUSH3 0x3DE JUMP JUMPDEST SWAP7 POP POP PUSH1 0x20 PUSH3 0x4CF DUP10 DUP3 DUP11 ADD PUSH3 0x3DE JUMP JUMPDEST SWAP6 POP POP PUSH1 0x40 PUSH3 0x4E2 DUP10 DUP3 DUP11 ADD PUSH3 0x3DE JUMP JUMPDEST SWAP5 POP POP PUSH1 0x60 PUSH3 0x4F5 DUP10 DUP3 DUP11 ADD PUSH3 0x401 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x80 DUP8 ADD MLOAD PUSH1 0x1 PUSH1 0x40 PUSH1 0x2 EXP SUB DUP2 GT ISZERO PUSH3 0x512 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x520 DUP10 DUP3 DUP11 ADD PUSH3 0x40F JUMP JUMPDEST SWAP3 POP POP PUSH1 0xA0 DUP8 ADD MLOAD PUSH1 0x1 PUSH1 0x40 PUSH1 0x2 EXP SUB DUP2 GT ISZERO PUSH3 0x53D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x54B DUP10 DUP3 DUP11 ADD PUSH3 0x40F JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x56B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH3 0x48C DUP5 DUP5 PUSH3 0x3F3 JUMP JUMPDEST PUSH3 0x584 DUP2 PUSH3 0x666 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH3 0x584 DUP2 PUSH3 0x672 JUMP JUMPDEST PUSH1 0x13 DUP2 MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH3 0x584 DUP2 PUSH3 0x3DB JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH3 0x5E0 DUP3 DUP6 PUSH3 0x579 JUMP JUMPDEST PUSH3 0x3EC PUSH1 0x20 DUP4 ADD DUP5 PUSH3 0x5C5 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH3 0x5FF DUP3 DUP5 PUSH3 0x58A JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH3 0x5FF DUP2 PUSH3 0x595 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH1 0x1 PUSH1 0x40 PUSH1 0x2 EXP SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH3 0x636 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x40 PUSH1 0x2 EXP SUB DUP3 GT ISZERO PUSH3 0x655 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x1F SWAP2 SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND SWAP1 JUMP JUMPDEST ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x6B9 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x69F JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH3 0x6C9 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x3593 DUP1 PUSH3 0x6DF PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xCF JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x150B7A02 DUP2 EQ PUSH2 0x12B JUMPI DUP1 PUSH4 0x169645F2 EQ PUSH2 0x161 JUMPI DUP1 PUSH4 0x1C5B1EC4 EQ PUSH2 0x181 JUMPI DUP1 PUSH4 0x20472CF7 EQ PUSH2 0x1A1 JUMPI DUP1 PUSH4 0x4A00F7D5 EQ PUSH2 0x1C3 JUMPI DUP1 PUSH4 0x725CEF06 EQ PUSH2 0x1D8 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x1EB JUMPI DUP1 PUSH4 0xB3CD4254 EQ PUSH2 0x20D JUMPI DUP1 PUSH4 0xBC063E1A EQ PUSH2 0x222 JUMPI DUP1 PUSH4 0xE58E9C16 EQ PUSH2 0x237 JUMPI DUP1 PUSH4 0xF0B9E5BA EQ PUSH2 0x257 JUMPI DUP1 PUSH4 0xF2AFD85A EQ PUSH2 0x277 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x297 JUMPI DUP1 PUSH4 0xFB4F9087 EQ PUSH2 0x2B7 JUMPI JUMPDEST PUSH1 0x2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x129 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x120 SWAP1 PUSH2 0x32E1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x137 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x14B PUSH2 0x146 CALLDATASIZE PUSH1 0x4 PUSH2 0x28B0 JUMP JUMPDEST PUSH2 0x2CC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x158 SWAP2 SWAP1 PUSH2 0x32D3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x174 PUSH2 0x16F CALLDATASIZE PUSH1 0x4 PUSH2 0x298E JUMP JUMPDEST PUSH2 0x32C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x158 SWAP2 SWAP1 PUSH2 0x33A1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x18D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x174 PUSH2 0x19C CALLDATASIZE PUSH1 0x4 PUSH2 0x2B6F JUMP JUMPDEST PUSH2 0x5F8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B6 PUSH2 0x6BE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x158 SWAP2 SWAP1 PUSH2 0x33F2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x14B PUSH2 0x6C4 JUMP JUMPDEST PUSH2 0x174 PUSH2 0x1E6 CALLDATASIZE PUSH1 0x4 PUSH2 0x2A74 JUMP JUMPDEST PUSH2 0x6F9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x200 PUSH2 0xAC7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x158 SWAP2 SWAP1 PUSH2 0x31FB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x219 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B6 PUSH2 0xAE3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x22E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B6 PUSH2 0xAE9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x243 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x174 PUSH2 0x252 CALLDATASIZE PUSH1 0x4 PUSH2 0x2B6F JUMP JUMPDEST PUSH2 0xAEF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x263 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x14B PUSH2 0x272 CALLDATASIZE PUSH1 0x4 PUSH2 0x2929 JUMP JUMPDEST PUSH2 0xBEC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x283 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x129 PUSH2 0x292 CALLDATASIZE PUSH1 0x4 PUSH2 0x2BDE JUMP JUMPDEST PUSH2 0xC4C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x129 PUSH2 0x2B2 CALLDATASIZE PUSH1 0x4 PUSH2 0x2874 JUMP JUMPDEST PUSH2 0xEC3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x14B PUSH2 0xF74 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x6F6E455243373231526563656976656428616464726573732C61646472657373 DUP2 MSTORE PUSH32 0x2C75696E743235362C6279746573290000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x2F ADD SWAP1 KECCAK256 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x334 PUSH2 0x24B3 JUMP JUMPDEST CALLVALUE PUSH1 0x0 DUP1 DUP1 DUP1 DUP5 GT PUSH2 0x372 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x120 SWAP1 PUSH2 0x3311 JUMP JUMPDEST PUSH2 0x37D DUP5 DUP9 DUP9 PUSH2 0xFCF JUMP JUMPDEST SWAP3 POP PUSH2 0x389 DUP5 DUP5 PUSH2 0x109D JUMP JUMPDEST SWAP2 POP PUSH1 0x2 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0E30DB0 DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH29 0x100000000000000000000000000000000000000000000000000000000 MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x411 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x425 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP PUSH2 0x452 DUP12 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x43C JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x140 ADD MLOAD PUSH1 0x10 PUSH2 0x10B4 JUMP JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE SWAP4 SWAP5 POP DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x4F8 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x4CD JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x4F8 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x4DB JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP12 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x50C JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MLOAD PUSH2 0x160 ADD MSTORE PUSH1 0x3 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x550 JUMPI PUSH2 0x549 DUP12 DUP12 DUP5 PUSH2 0x1115 JUMP JUMPDEST SWAP5 POP PUSH2 0x560 JUMP JUMPDEST PUSH2 0x55D DUP12 DUP12 DUP12 DUP12 DUP7 PUSH2 0x122F JUMP JUMPDEST SWAP5 POP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD DUP5 LT ISZERO PUSH2 0x59E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x120 SWAP1 PUSH2 0x32F1 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD DUP3 EQ PUSH2 0x5DB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x120 SWAP1 PUSH2 0x3351 JUMP JUMPDEST PUSH2 0x5EA DUP2 CALLER DUP8 PUSH1 0x0 ADD MLOAD PUSH2 0x13B7 JUMP JUMPDEST POP POP POP POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x600 PUSH2 0x24B3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x60D PUSH2 0x24B3 JUMP JUMPDEST PUSH1 0x0 SWAP4 POP JUMPDEST DUP7 MLOAD DUP5 LT ISZERO PUSH2 0x6B4 JUMPI PUSH2 0x629 DUP7 DUP7 PUSH1 0x0 ADD MLOAD PUSH2 0x109D JUMP JUMPDEST SWAP3 POP PUSH2 0x66C DUP8 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x63C JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0xA0 ADD MLOAD DUP9 DUP7 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x658 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0x80 ADD MLOAD DUP6 PUSH2 0x1591 JUMP JUMPDEST SWAP2 POP PUSH2 0x68F DUP8 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x67F JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP4 PUSH2 0x15AE JUMP JUMPDEST SWAP1 POP PUSH2 0x69B DUP6 DUP3 PUSH2 0x16FC JUMP JUMPDEST DUP5 MLOAD DUP7 EQ ISZERO PUSH2 0x6A9 JUMPI PUSH2 0x6B4 JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP4 ADD SWAP3 PUSH2 0x612 JUMP JUMPDEST POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x251C DUP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x4552433230546F6B656E28616464726573732900000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x13 ADD SWAP1 KECCAK256 DUP2 JUMP JUMPDEST PUSH2 0x701 PUSH2 0x24B3 JUMP JUMPDEST CALLVALUE PUSH1 0x0 DUP1 DUP3 GT PUSH2 0x73D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x120 SWAP1 PUSH2 0x3311 JUMP JUMPDEST PUSH1 0x0 DUP7 GT PUSH2 0x777 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x120 SWAP1 PUSH2 0x3311 JUMP JUMPDEST PUSH2 0x79F DUP11 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x789 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x140 ADD MLOAD PUSH1 0x0 PUSH2 0x175E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x4552433230546F6B656E28616464726573732900000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x13 ADD SWAP1 KECCAK256 SWAP1 SWAP2 POP PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP1 DUP4 AND SWAP2 AND EQ DUP1 PUSH2 0x881 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH32 0x455243373231546F6B656E28616464726573732C75696E743235362C62797465 DUP2 MSTORE PUSH32 0x7329000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x22 ADD SWAP1 KECCAK256 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 DUP2 AND SWAP2 AND EQ JUMPDEST ISZERO ISZERO PUSH2 0x8B9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x120 SWAP1 PUSH2 0x3381 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0E30DB0 DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH29 0x100000000000000000000000000000000000000000000000000000000 MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x93F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x953 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH32 0x4552433230546F6B656E28616464726573732900000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x13 ADD SWAP1 KECCAK256 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP6 DUP2 AND SWAP2 AND EQ ISZERO SWAP3 POP PUSH2 0x9CC SWAP2 POP POP JUMPI PUSH2 0x9C5 DUP11 DUP11 DUP11 DUP11 DUP11 PUSH2 0x17CB JUMP JUMPDEST SWAP3 POP PUSH2 0xA5F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x455243373231546F6B656E28616464726573732C75696E743235362C62797465 DUP2 MSTORE PUSH32 0x7329000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x22 ADD SWAP1 KECCAK256 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0xA5F JUMPI PUSH2 0xA5C DUP11 DUP11 DUP11 DUP11 PUSH2 0x1B22 JUMP JUMPDEST SWAP3 POP JUMPDEST PUSH1 0x20 DUP4 ADD MLOAD DUP3 LT ISZERO PUSH2 0xA9D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x120 SWAP1 PUSH2 0x32F1 JUMP JUMPDEST PUSH2 0xABA PUSH2 0xAAE DUP4 DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x109D JUMP JUMPDEST DUP5 PUSH1 0x20 ADD MLOAD DUP8 DUP8 PUSH2 0x1E24 JUMP JUMPDEST POP POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH2 0x2710 DUP2 JUMP JUMPDEST PUSH2 0x3E8 DUP2 JUMP JUMPDEST PUSH2 0xAF7 PUSH2 0x24B3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0xB04 PUSH2 0x24B3 JUMP JUMPDEST PUSH1 0x0 SWAP4 POP JUMPDEST DUP7 MLOAD DUP5 LT ISZERO PUSH2 0x6B4 JUMPI PUSH2 0xB20 DUP7 DUP7 PUSH1 0x0 ADD MLOAD PUSH2 0x109D JUMP JUMPDEST SWAP3 POP PUSH2 0xB87 DUP8 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xB33 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0xA0 ADD MLOAD PUSH2 0xB81 DUP10 DUP8 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xB52 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0x80 ADD MLOAD DUP11 DUP9 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xB6E JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0xE0 ADD MLOAD PUSH2 0x109D JUMP JUMPDEST DUP6 PUSH2 0x1591 JUMP JUMPDEST SWAP2 POP PUSH2 0xBB4 DUP8 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xB9A JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0xBAF DUP5 PUSH1 0x1 PUSH2 0x1F11 JUMP JUMPDEST PUSH2 0x15AE JUMP JUMPDEST SWAP1 POP PUSH2 0xBC8 DUP2 PUSH1 0x0 ADD MLOAD DUP3 PUSH1 0x60 ADD MLOAD PUSH2 0x109D JUMP JUMPDEST DUP2 MSTORE PUSH2 0xBD4 DUP6 DUP3 PUSH2 0x16FC JUMP JUMPDEST DUP5 MLOAD DUP7 GT PUSH2 0xBE1 JUMPI PUSH2 0x6B4 JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP4 ADD SWAP3 PUSH2 0xB09 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x6F6E455243373231526563656976656428616464726573732C75696E74323536 DUP2 MSTORE PUSH32 0x2C62797465732900000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x27 ADD SWAP1 KECCAK256 JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xC9E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x120 SWAP1 PUSH2 0x3361 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH32 0x6070410800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0x60704108 SWAP1 PUSH2 0xCF4 SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x32D3 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xD0E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xD22 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0xD46 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x2892 JUMP JUMPDEST SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0xEBF JUMPI PUSH1 0x2 SLOAD PUSH1 0x6 SLOAD PUSH1 0x40 MLOAD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 PUSH4 0x95EA7B3 SWAP2 PUSH2 0xDBE SWAP2 DUP6 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x324D JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xDD8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xDEC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0xE10 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x2BC0 JUMP JUMPDEST POP PUSH1 0x3 SLOAD PUSH1 0x6 SLOAD PUSH1 0x40 MLOAD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 PUSH4 0x95EA7B3 SWAP2 PUSH2 0xE6B SWAP2 DUP6 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x324D JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE85 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xE99 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0xEBD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x2BC0 JUMP JUMPDEST POP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xF14 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x120 SWAP1 PUSH2 0x3361 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0xF71 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND OR SWAP1 SSTORE JUMPDEST POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x455243373231546F6B656E28616464726573732C75696E743235362C62797465 DUP2 MSTORE PUSH32 0x7329000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x22 ADD SWAP1 KECCAK256 DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH2 0xFFFF AND GT DUP1 ISZERO PUSH2 0xFF9 JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND ISZERO ISZERO JUMPDEST ISZERO PUSH2 0xC45 JUMPI PUSH2 0x3E8 PUSH2 0xFFFF DUP5 AND GT ISZERO PUSH2 0x103E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x120 SWAP1 PUSH2 0x3331 JUMP JUMPDEST PUSH2 0x104F PUSH2 0xFFFF DUP5 AND PUSH2 0x2710 DUP7 PUSH2 0x1591 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x1095 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 GT ISZERO PUSH2 0x10A9 JUMPI INVALID JUMPDEST POP DUP1 DUP3 SUB JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x14 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x10F6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x120 SWAP1 PUSH2 0x3371 JUMP JUMPDEST POP ADD PUSH1 0x14 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x111D PUSH2 0x24B3 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH32 0x7E1D980800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH4 0x7E1D9808 SWAP1 PUSH2 0x1178 SWAP1 DUP9 SWAP1 DUP8 SWAP1 DUP10 SWAP1 PUSH1 0x4 ADD PUSH2 0x32A1 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1192 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x11A6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0x11CA SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x2BFC JUMP JUMPDEST SWAP2 POP PUSH2 0x11DE DUP3 PUSH1 0x0 ADD MLOAD DUP4 PUSH1 0x60 ADD MLOAD PUSH2 0x109D JUMP JUMPDEST SWAP1 POP PUSH2 0x11EE DUP3 PUSH1 0x0 ADD MLOAD DUP3 PUSH2 0x1F20 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x1226 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x120 SWAP1 PUSH2 0x3351 JUMP JUMPDEST DUP2 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x1237 PUSH2 0x24B3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1241 PUSH2 0x24B3 JUMP JUMPDEST PUSH2 0x1249 PUSH2 0x24B3 JUMP JUMPDEST PUSH2 0x1251 PUSH2 0x24B3 JUMP JUMPDEST DUP6 SWAP4 POP PUSH2 0x125E DUP11 DUP8 PUSH2 0x1F3D JUMP JUMPDEST SWAP3 POP PUSH1 0x0 DUP4 PUSH1 0x60 ADD MLOAD GT ISZERO PUSH2 0x12F2 JUMPI PUSH2 0x127C DUP9 DUP9 DUP6 PUSH1 0x60 ADD MLOAD PUSH2 0x1FA7 JUMP JUMPDEST SWAP2 POP PUSH2 0x1295 DUP7 PUSH2 0x1290 DUP9 DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x109D JUMP JUMPDEST PUSH2 0x1F20 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x12CD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x120 SWAP1 PUSH2 0x3351 JUMP JUMPDEST PUSH2 0x12DB DUP5 DUP4 PUSH1 0x20 ADD MLOAD PUSH2 0x109D JUMP JUMPDEST PUSH1 0x60 DUP1 DUP5 ADD MLOAD SWAP1 DUP8 ADD MSTORE PUSH1 0x20 DUP1 DUP5 ADD MLOAD SWAP1 DUP8 ADD MSTORE SWAP4 POP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH32 0x7E1D980800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0x7E1D9808 SWAP1 PUSH2 0x134C SWAP1 DUP14 SWAP1 DUP9 SWAP1 DUP15 SWAP1 PUSH1 0x4 ADD PUSH2 0x32A1 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1366 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x137A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0x139E SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x2BFC JUMP JUMPDEST SWAP1 POP PUSH2 0x13AA DUP6 DUP3 PUSH2 0x16FC JUMP JUMPDEST POP POP POP POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x7472616E7366657228616464726573732C75696E743235362900000000000000 DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x19 ADD DUP2 KECCAK256 PUSH1 0x0 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP2 SWAP1 PUSH2 0x1415 SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x24 ADD PUSH2 0x324D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 DUP2 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 OR DUP4 MSTORE MLOAD DUP2 MLOAD SWAP2 SWAP3 SWAP1 SWAP2 DUP3 SWAP2 SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x14B9 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x14A1 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x14E6 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 SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP3 POP POP POP DUP1 ISZERO ISZERO PUSH2 0x1535 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x120 SWAP1 PUSH2 0x3341 JUMP JUMPDEST RETURNDATASIZE ISZERO PUSH2 0x1552 JUMPI POP PUSH1 0x0 RETURNDATASIZE PUSH1 0x20 EQ ISZERO PUSH2 0x1552 JUMPI PUSH1 0x20 PUSH1 0x0 DUP1 RETURNDATACOPY POP PUSH1 0x0 MLOAD JUMPDEST DUP1 ISZERO ISZERO PUSH2 0x158B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x120 SWAP1 PUSH2 0x3341 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15A6 PUSH2 0x15A0 DUP6 DUP5 PUSH2 0x22E0 JUMP JUMPDEST DUP5 PUSH2 0x2304 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x15B6 PUSH2 0x24B3 JUMP JUMPDEST PUSH2 0x15BE PUSH2 0x24DC JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC75E0A8100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0xC75E0A81 SWAP1 PUSH2 0x1619 SWAP1 DUP10 SWAP1 PUSH1 0x4 ADD PUSH2 0x33AF JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1633 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1647 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0x166B SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x2C1A JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP4 POP PUSH1 0xFF AND PUSH1 0x3 EQ PUSH2 0x167F JUMPI PUSH2 0x16F3 JUMP JUMPDEST PUSH2 0x1691 DUP7 PUSH1 0xA0 ADD MLOAD DUP5 PUSH1 0x40 ADD MLOAD PUSH2 0x109D JUMP JUMPDEST SWAP2 POP PUSH2 0x169D DUP6 DUP4 PUSH2 0x231B JUMP JUMPDEST SWAP1 POP DUP1 DUP5 PUSH1 0x20 ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x16BC DUP2 DUP8 PUSH1 0xA0 ADD MLOAD DUP9 PUSH1 0x80 ADD MLOAD PUSH2 0x1591 JUMP JUMPDEST DUP5 MSTORE PUSH1 0xA0 DUP7 ADD MLOAD PUSH1 0xC0 DUP8 ADD MLOAD PUSH2 0x16D3 SWAP2 DUP4 SWAP2 PUSH2 0x1591 JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0xA0 DUP7 ADD MLOAD PUSH1 0xE0 DUP8 ADD MLOAD PUSH2 0x16ED SWAP2 DUP4 SWAP2 PUSH2 0x1591 JUMP JUMPDEST PUSH1 0x60 DUP6 ADD MSTORE JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD PUSH2 0x170A SWAP2 SWAP1 PUSH2 0x1F11 JUMP JUMPDEST DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MLOAD PUSH2 0x1720 SWAP2 SWAP1 PUSH2 0x1F11 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MLOAD PUSH2 0x1739 SWAP2 SWAP1 PUSH2 0x1F11 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MLOAD PUSH2 0x1752 SWAP2 SWAP1 PUSH2 0x1F11 JUMP JUMPDEST PUSH1 0x60 SWAP1 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x4 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x17A0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x120 SWAP1 PUSH2 0x3391 JUMP JUMPDEST POP POP PUSH1 0x20 ADD MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND SWAP1 JUMP JUMPDEST PUSH2 0x17D3 PUSH2 0x24B3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x17DD PUSH2 0x24B3 JUMP JUMPDEST PUSH2 0x17E5 PUSH2 0x24B3 JUMP JUMPDEST PUSH2 0x17ED PUSH2 0x24B3 JUMP JUMPDEST PUSH2 0x17FF DUP11 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x43C JUMPI INVALID JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE SWAP4 SWAP8 POP DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x18A5 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x187A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x18A5 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1888 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP11 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x18B9 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MLOAD PUSH2 0x160 ADD MSTORE PUSH1 0x3 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x1997 JUMPI PUSH2 0x18F6 DUP11 DUP11 DUP9 PUSH2 0x1FA7 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP4 POP DUP7 GT ISZERO PUSH2 0x1934 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x120 SWAP1 PUSH2 0x3351 JUMP JUMPDEST PUSH2 0x193E DUP6 DUP5 PUSH2 0x16FC JUMP JUMPDEST PUSH2 0x195A PUSH2 0x1953 DUP7 PUSH1 0x0 ADD MLOAD DUP8 PUSH1 0x60 ADD MLOAD PUSH2 0x1F11 JUMP JUMPDEST DUP7 MLOAD PUSH2 0x1F20 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x1992 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x120 SWAP1 PUSH2 0x3351 JUMP JUMPDEST PUSH2 0x1B13 JUMP JUMPDEST PUSH2 0x19A1 DUP11 DUP8 PUSH2 0x5F8 JUMP JUMPDEST SWAP2 POP PUSH1 0x0 DUP3 PUSH1 0x60 ADD MLOAD GT ISZERO PUSH2 0x19D6 JUMPI PUSH2 0x19BF DUP9 DUP9 DUP5 PUSH1 0x60 ADD MLOAD PUSH2 0x1FA7 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 ADD MLOAD SWAP1 DUP8 ADD MSTORE PUSH1 0x60 DUP1 DUP3 ADD MLOAD SWAP1 DUP8 ADD MSTORE SWAP1 POP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH32 0xE5FA431B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0xE5FA431B SWAP1 PUSH2 0x1A30 SWAP1 DUP14 SWAP1 DUP11 SWAP1 DUP15 SWAP1 PUSH1 0x4 ADD PUSH2 0x32A1 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1A4A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1A5E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0x1A82 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x2BFC JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP4 POP DUP7 EQ PUSH2 0x1ABF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x120 SWAP1 PUSH2 0x3351 JUMP JUMPDEST PUSH2 0x1AC9 DUP6 DUP5 PUSH2 0x16FC JUMP JUMPDEST PUSH2 0x1ADB DUP6 PUSH1 0x20 ADD MLOAD DUP5 PUSH1 0x20 ADD MLOAD PUSH2 0x1F20 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x1B13 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x120 SWAP1 PUSH2 0x3351 JUMP JUMPDEST PUSH2 0x13AA DUP5 CALLER DUP6 PUSH1 0x0 ADD MLOAD PUSH2 0x13B7 JUMP JUMPDEST PUSH2 0x1B2A PUSH2 0x24B3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 PUSH1 0x0 PUSH2 0x1B39 PUSH2 0x24B3 JUMP JUMPDEST PUSH2 0x1B41 PUSH2 0x24B3 JUMP JUMPDEST DUP11 MLOAD SWAP5 POP DUP5 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1B6F JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP PUSH1 0x0 SWAP3 POP JUMPDEST DUP5 DUP4 LT ISZERO PUSH2 0x1CAB JUMPI PUSH2 0x1BA4 DUP7 DUP13 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1B91 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0xE0 ADD MLOAD PUSH2 0x1F11 JUMP JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE SWAP4 SWAP10 POP DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x1C4A JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1C1F JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1C4A JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1C2D JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP12 DUP5 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1C5D JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MLOAD PUSH2 0x160 ADD MSTORE DUP11 MLOAD DUP12 SWAP1 DUP5 SWAP1 DUP2 LT PUSH2 0x1C7A JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0xA0 ADD MLOAD DUP5 DUP5 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1C96 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 PUSH2 0x1B77 JUMP JUMPDEST PUSH1 0x0 DUP7 GT ISZERO PUSH2 0x1CD6 JUMPI PUSH2 0x1CBF DUP10 DUP10 DUP9 PUSH2 0x1FA7 JUMP JUMPDEST PUSH1 0x60 DUP1 DUP3 ADD MLOAD SWAP1 DUP10 ADD MSTORE PUSH1 0x20 DUP1 DUP3 ADD MLOAD SWAP1 DUP10 ADD MSTORE SWAP2 POP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH32 0x4D0AE54600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0x4D0AE546 SWAP1 PUSH2 0x1D30 SWAP1 DUP15 SWAP1 DUP9 SWAP1 DUP16 SWAP1 PUSH1 0x4 ADD PUSH2 0x3268 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1D4A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1D5E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0x1D82 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x2BFC JUMP JUMPDEST SWAP1 POP PUSH2 0x1D8E DUP8 DUP3 PUSH2 0x16FC JUMP JUMPDEST PUSH2 0x1DA0 DUP8 PUSH1 0x20 ADD MLOAD DUP3 PUSH1 0x20 ADD MLOAD PUSH2 0x1F20 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x1DD8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x120 SWAP1 PUSH2 0x3351 JUMP JUMPDEST PUSH1 0x0 SWAP3 POP JUMPDEST DUP5 DUP4 LT ISZERO PUSH2 0x1E16 JUMPI PUSH2 0x1E0B DUP12 DUP5 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1DF6 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x140 ADD MLOAD CALLER PUSH2 0x2331 JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 PUSH2 0x1DDD JUMP JUMPDEST POP POP POP POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP7 GT ISZERO PUSH2 0x1F09 JUMPI PUSH1 0x2 SLOAD PUSH1 0x40 MLOAD PUSH32 0x2E1A7D4D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0x2E1A7D4D SWAP1 PUSH2 0x1E86 SWAP1 DUP10 SWAP1 PUSH1 0x4 ADD PUSH2 0x3400 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1EA0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1EB4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x1EC3 DUP6 DUP6 DUP6 PUSH2 0xFCF JUMP JUMPDEST SWAP2 POP PUSH2 0x1ECF DUP7 DUP4 PUSH2 0x109D JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 GT ISZERO PUSH2 0x1F09 JUMPI PUSH1 0x40 MLOAD CALLER SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x1F07 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0xC45 JUMPI INVALID JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1F32 PUSH2 0x251C PUSH2 0x2710 DUP7 PUSH2 0x1591 JUMP JUMPDEST SWAP1 SWAP3 LT ISZERO SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x1F45 PUSH2 0x24B3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1F50 PUSH2 0x24B3 JUMP JUMPDEST PUSH1 0x0 SWAP3 POP JUMPDEST DUP6 MLOAD DUP4 LT ISZERO PUSH2 0x16F3 JUMPI PUSH2 0x1F6C DUP6 DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x109D JUMP JUMPDEST SWAP2 POP PUSH2 0x1F7F DUP7 DUP5 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x67F JUMPI INVALID JUMPDEST SWAP1 POP PUSH2 0x1F8B DUP5 DUP3 PUSH2 0x16FC JUMP JUMPDEST DUP5 DUP5 PUSH1 0x20 ADD MLOAD EQ ISZERO PUSH2 0x1F9C JUMPI PUSH2 0x16F3 JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 PUSH2 0x1F55 JUMP JUMPDEST PUSH2 0x1FAF PUSH2 0x24B3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1FBC PUSH2 0x24B3 JUMP JUMPDEST PUSH1 0x0 SWAP4 POP JUMPDEST DUP8 MLOAD DUP5 LT ISZERO PUSH2 0x22D5 JUMPI PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x206E JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2043 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x206E JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x2051 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP9 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x2081 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH2 0x140 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x5 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP8 AND ISZERO MUL ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV SWAP3 DUP4 ADD DUP6 SWAP1 DIV DUP6 MUL DUP2 ADD DUP6 ADD SWAP1 SWAP2 MSTORE DUP2 DUP2 MSTORE SWAP3 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x2136 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x210B JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x2136 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x2119 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP9 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x2149 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MLOAD PUSH2 0x160 ADD MSTORE DUP5 MLOAD PUSH2 0x2165 SWAP1 DUP8 SWAP1 PUSH2 0x109D JUMP JUMPDEST SWAP3 POP PUSH2 0x21B3 DUP9 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x2178 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0xA0 ADD MLOAD PUSH2 0xB81 DUP11 DUP8 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x2197 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0x80 ADD MLOAD DUP12 DUP9 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xB6E JUMPI INVALID JUMPDEST PUSH1 0x1 SLOAD DUP10 MLOAD SWAP2 SWAP4 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH4 0xB4BE83D5 SWAP1 DUP11 SWAP1 DUP8 SWAP1 DUP2 LT PUSH2 0x21E4 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x21F9 DUP6 PUSH1 0x1 PUSH2 0x1F11 JUMP JUMPDEST DUP11 DUP9 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x2207 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH29 0x100000000000000000000000000000000000000000000000000000000 MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224B SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x33C0 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2265 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2279 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0x229D SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x2BFC JUMP JUMPDEST SWAP1 POP PUSH2 0x22B1 DUP2 PUSH1 0x0 ADD MLOAD DUP3 PUSH1 0x60 ADD MLOAD PUSH2 0x109D JUMP JUMPDEST DUP2 MSTORE PUSH2 0x22BD DUP6 DUP3 PUSH2 0x16FC JUMP JUMPDEST DUP5 MLOAD DUP7 GT PUSH2 0x22CA JUMPI PUSH2 0x22D5 JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP4 ADD SWAP3 PUSH2 0x1FC1 JUMP JUMPDEST POP POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MUL DUP4 ISZERO DUP1 PUSH2 0x22FC JUMPI POP DUP3 DUP5 DUP3 DUP2 ISZERO ISZERO PUSH2 0x22F9 JUMPI INVALID JUMPDEST DIV EQ JUMPDEST ISZERO ISZERO PUSH2 0xC45 JUMPI INVALID JUMPDEST PUSH1 0x0 DUP1 DUP3 DUP5 DUP2 ISZERO ISZERO PUSH2 0x2312 JUMPI INVALID JUMPDEST DIV SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x232A JUMPI DUP2 PUSH2 0xC45 JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 PUSH2 0x2347 DUP6 PUSH1 0x10 PUSH4 0xFFFFFFFF PUSH2 0x10B4 AND JUMP JUMPDEST SWAP3 POP PUSH2 0x235A DUP6 PUSH1 0x24 PUSH4 0xFFFFFFFF PUSH2 0x2401 AND JUMP JUMPDEST SWAP2 POP PUSH2 0x236D DUP6 PUSH1 0x64 PUSH4 0xFFFFFFFF PUSH2 0x240D AND JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xB88D4FDE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH4 0xB88D4FDE SWAP1 PUSH2 0x23C8 SWAP1 ADDRESS SWAP1 DUP9 SWAP1 DUP8 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x3209 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x23E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x23F6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC45 DUP4 DUP4 PUSH2 0x2468 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x241B DUP5 DUP5 PUSH2 0x2401 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP4 ADD SWAP3 POP DUP1 DUP4 ADD DUP5 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x2462 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x120 SWAP1 PUSH2 0x3301 JUMP JUMPDEST POP POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x20 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x24AA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x120 SWAP1 PUSH2 0x3321 JUMP JUMPDEST POP ADD PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC45 DUP3 CALLDATALOAD PUSH2 0x34A6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC45 DUP3 MLOAD PUSH2 0x34A6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0x2525 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x2538 PUSH2 0x2533 DUP3 PUSH2 0x3435 JUMP JUMPDEST PUSH2 0x340E JUMP JUMPDEST DUP2 DUP2 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP3 POP DUP3 ADD DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x6B4 JUMPI DUP2 CALLDATALOAD DUP7 ADD PUSH2 0x2560 DUP9 DUP3 PUSH2 0x25F7 JUMP JUMPDEST DUP5 MSTORE POP PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x254A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0x2587 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x2595 PUSH2 0x2533 DUP3 PUSH2 0x3435 JUMP JUMPDEST DUP2 DUP2 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP3 POP DUP3 ADD DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x6B4 JUMPI DUP2 CALLDATALOAD DUP7 ADD PUSH2 0x25BD DUP9 DUP3 PUSH2 0x2707 JUMP JUMPDEST DUP5 MSTORE POP PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x25A7 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC45 DUP3 MLOAD PUSH2 0x34EE JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC45 DUP3 MLOAD PUSH2 0x34EB JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC45 DUP3 CALLDATALOAD PUSH2 0x34BF JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0x2608 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x2616 PUSH2 0x2533 DUP3 PUSH2 0x3456 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP4 ADD DUP6 DUP4 DUP4 ADD GT ISZERO PUSH2 0x2632 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x16F3 DUP4 DUP3 DUP5 PUSH2 0x34F9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x264F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2659 PUSH1 0x80 PUSH2 0x340E JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2667 DUP5 DUP5 PUSH2 0x25DF JUMP JUMPDEST DUP3 MSTORE POP PUSH1 0x20 PUSH2 0x2678 DUP5 DUP5 DUP4 ADD PUSH2 0x25DF JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP PUSH1 0x40 PUSH2 0x268C DUP5 DUP3 DUP6 ADD PUSH2 0x25DF JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 PUSH2 0x26A0 DUP5 DUP3 DUP6 ADD PUSH2 0x25DF JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x26BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x26C8 PUSH1 0x60 PUSH2 0x340E JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x26D6 DUP5 DUP5 PUSH2 0x2868 JUMP JUMPDEST DUP3 MSTORE POP PUSH1 0x20 PUSH2 0x26E7 DUP5 DUP5 DUP4 ADD PUSH2 0x25DF JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP PUSH1 0x40 PUSH2 0x26FB DUP5 DUP3 DUP6 ADD PUSH2 0x25DF JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x180 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x271A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2725 PUSH2 0x180 PUSH2 0x340E JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2733 DUP5 DUP5 PUSH2 0x24FC JUMP JUMPDEST DUP3 MSTORE POP PUSH1 0x20 PUSH2 0x2744 DUP5 DUP5 DUP4 ADD PUSH2 0x24FC JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP PUSH1 0x40 PUSH2 0x2758 DUP5 DUP3 DUP6 ADD PUSH2 0x24FC JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 PUSH2 0x276C DUP5 DUP3 DUP6 ADD PUSH2 0x24FC JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE POP PUSH1 0x80 PUSH2 0x2780 DUP5 DUP3 DUP6 ADD PUSH2 0x285C JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE POP PUSH1 0xA0 PUSH2 0x2794 DUP5 DUP3 DUP6 ADD PUSH2 0x285C JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE POP PUSH1 0xC0 PUSH2 0x27A8 DUP5 DUP3 DUP6 ADD PUSH2 0x285C JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE POP PUSH1 0xE0 PUSH2 0x27BC DUP5 DUP3 DUP6 ADD PUSH2 0x285C JUMP JUMPDEST PUSH1 0xE0 DUP4 ADD MSTORE POP PUSH2 0x100 PUSH2 0x27D1 DUP5 DUP3 DUP6 ADD PUSH2 0x285C JUMP JUMPDEST PUSH2 0x100 DUP4 ADD MSTORE POP PUSH2 0x120 PUSH2 0x27E7 DUP5 DUP3 DUP6 ADD PUSH2 0x285C JUMP JUMPDEST PUSH2 0x120 DUP4 ADD MSTORE POP PUSH2 0x140 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2809 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2815 DUP5 DUP3 DUP6 ADD PUSH2 0x25F7 JUMP JUMPDEST PUSH2 0x140 DUP4 ADD MSTORE POP PUSH2 0x160 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2837 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2843 DUP5 DUP3 DUP6 ADD PUSH2 0x25F7 JUMP JUMPDEST PUSH2 0x160 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC45 DUP3 CALLDATALOAD PUSH2 0x34E4 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC45 DUP3 CALLDATALOAD PUSH2 0x34EB JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC45 DUP3 MLOAD PUSH2 0x34F3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2886 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x15A6 DUP5 DUP5 PUSH2 0x24FC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x28A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x15A6 DUP5 DUP5 PUSH2 0x2508 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x28C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x28D2 DUP8 DUP8 PUSH2 0x24FC JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x28E3 DUP8 DUP3 DUP9 ADD PUSH2 0x24FC JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 PUSH2 0x28F4 DUP8 DUP3 DUP9 ADD PUSH2 0x285C JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2911 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x291D DUP8 DUP3 DUP9 ADD PUSH2 0x25F7 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x293E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x294A DUP7 DUP7 PUSH2 0x24FC JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x295B DUP7 DUP3 DUP8 ADD PUSH2 0x285C JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2978 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2984 DUP7 DUP3 DUP8 ADD PUSH2 0x25F7 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x29A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x29BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x29CA DUP10 DUP3 DUP11 ADD PUSH2 0x2576 JUMP JUMPDEST SWAP7 POP POP PUSH1 0x20 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x29E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x29F3 DUP10 DUP3 DUP11 ADD PUSH2 0x2514 JUMP JUMPDEST SWAP6 POP POP PUSH1 0x40 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2A10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2A1C DUP10 DUP3 DUP11 ADD PUSH2 0x2576 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2A39 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2A45 DUP10 DUP3 DUP11 ADD PUSH2 0x2514 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x80 PUSH2 0x2A56 DUP10 DUP3 DUP11 ADD PUSH2 0x2850 JUMP JUMPDEST SWAP3 POP POP PUSH1 0xA0 PUSH2 0x2A67 DUP10 DUP3 DUP11 ADD PUSH2 0x24FC JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x2A8F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2AA6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2AB2 DUP11 DUP3 DUP12 ADD PUSH2 0x2576 JUMP JUMPDEST SWAP8 POP POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2ACF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2ADB DUP11 DUP3 DUP12 ADD PUSH2 0x2514 JUMP JUMPDEST SWAP7 POP POP PUSH1 0x40 DUP9 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2AF8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2B04 DUP11 DUP3 DUP12 ADD PUSH2 0x2576 JUMP JUMPDEST SWAP6 POP POP PUSH1 0x60 DUP9 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2B21 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2B2D DUP11 DUP3 DUP12 ADD PUSH2 0x2514 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x80 PUSH2 0x2B3E DUP11 DUP3 DUP12 ADD PUSH2 0x285C JUMP JUMPDEST SWAP4 POP POP PUSH1 0xA0 PUSH2 0x2B4F DUP11 DUP3 DUP12 ADD PUSH2 0x2850 JUMP JUMPDEST SWAP3 POP POP PUSH1 0xC0 PUSH2 0x2B60 DUP11 DUP3 DUP12 ADD PUSH2 0x24FC JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2B82 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2B99 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2BA5 DUP6 DUP3 DUP7 ADD PUSH2 0x2576 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x2BB6 DUP6 DUP3 DUP7 ADD PUSH2 0x285C JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2BD2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x15A6 DUP5 DUP5 PUSH2 0x25D3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2BF0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x15A6 DUP5 DUP5 PUSH2 0x25EB JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2C0E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x15A6 DUP5 DUP5 PUSH2 0x263D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2C2C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x15A6 DUP5 DUP5 PUSH2 0x26AC JUMP JUMPDEST PUSH2 0x2C41 DUP2 PUSH2 0x34A6 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2C52 DUP3 PUSH2 0x34A2 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP DUP4 PUSH1 0x20 DUP3 MUL DUP6 ADD PUSH2 0x2C6B DUP6 PUSH2 0x349C JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x2CA2 JUMPI DUP4 DUP4 SUB DUP9 MSTORE PUSH2 0x2C86 DUP4 DUP4 MLOAD PUSH2 0x2D69 JUMP JUMPDEST SWAP3 POP PUSH2 0x2C91 DUP3 PUSH2 0x349C JUMP JUMPDEST PUSH1 0x20 SWAP9 SWAP1 SWAP9 ADD SWAP8 SWAP2 POP PUSH1 0x1 ADD PUSH2 0x2C6E JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2CB9 DUP3 PUSH2 0x34A2 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP DUP4 PUSH1 0x20 DUP3 MUL DUP6 ADD PUSH2 0x2CD2 DUP6 PUSH2 0x349C JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x2CA2 JUMPI DUP4 DUP4 SUB DUP9 MSTORE PUSH2 0x2CED DUP4 DUP4 MLOAD PUSH2 0x30E6 JUMP JUMPDEST SWAP3 POP PUSH2 0x2CF8 DUP3 PUSH2 0x349C JUMP JUMPDEST PUSH1 0x20 SWAP9 SWAP1 SWAP9 ADD SWAP8 SWAP2 POP PUSH1 0x1 ADD PUSH2 0x2CD5 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2D14 DUP3 PUSH2 0x34A2 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH2 0x2D26 DUP4 PUSH2 0x349C JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x2D56 JUMPI PUSH2 0x2D3C DUP7 DUP4 MLOAD PUSH2 0x31F2 JUMP JUMPDEST PUSH2 0x2D45 DUP3 PUSH2 0x349C JUMP JUMPDEST PUSH1 0x20 SWAP7 SWAP1 SWAP7 ADD SWAP6 SWAP2 POP PUSH1 0x1 ADD PUSH2 0x2D29 JUMP JUMPDEST POP SWAP4 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x2C41 DUP2 PUSH2 0x34BF JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2D74 DUP3 PUSH2 0x34A2 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH2 0x2D88 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x3505 JUMP JUMPDEST PUSH2 0x2D91 DUP2 PUSH2 0x3531 JUMP JUMPDEST SWAP1 SWAP4 ADD PUSH1 0x20 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x23 DUP2 MSTORE PUSH32 0x44454641554C545F46554E4354494F4E5F574554485F434F4E54524143545F4F PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x4E4C590000000000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x11 DUP2 MSTORE PUSH32 0x494E56414C49445F4D53475F56414C5545000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x30 DUP2 MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F4E45535445445F4259544553 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x5F4C454E4754485F524551554952454400000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x17 DUP2 MSTORE PUSH32 0x56414C55455F475245415445525F5448414E5F5A45524F000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F33325F4C454E4754485F5245 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x18 DUP2 MSTORE PUSH32 0x4645455F50524F504F5254494F4E5F544F4F5F4C415247450000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0xF DUP2 MSTORE PUSH32 0x5452414E534645525F4641494C45440000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x16 DUP2 MSTORE PUSH32 0x554E41434345505441424C455F5448524553484F4C4400000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x13 DUP2 MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F32305F4C454E4754485F5245 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x17 DUP2 MSTORE PUSH32 0x554E535550504F525445445F544F4B454E5F50524F5859000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x25 DUP2 MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F345F4C454E4754485F524551 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x5549524544000000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x80 DUP4 ADD SWAP1 PUSH2 0x30AD DUP5 DUP3 PUSH2 0x31F2 JUMP JUMPDEST POP PUSH1 0x20 DUP3 ADD MLOAD PUSH2 0x30C0 PUSH1 0x20 DUP6 ADD DUP3 PUSH2 0x31F2 JUMP JUMPDEST POP PUSH1 0x40 DUP3 ADD MLOAD PUSH2 0x30D3 PUSH1 0x40 DUP6 ADD DUP3 PUSH2 0x31F2 JUMP JUMPDEST POP PUSH1 0x60 DUP3 ADD MLOAD PUSH2 0x158B PUSH1 0x60 DUP6 ADD DUP3 PUSH2 0x31F2 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH2 0x180 DUP5 ADD SWAP1 PUSH2 0x30FB DUP6 DUP3 PUSH2 0x2C38 JUMP JUMPDEST POP PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x310E PUSH1 0x20 DUP7 ADD DUP3 PUSH2 0x2C38 JUMP JUMPDEST POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x3121 PUSH1 0x40 DUP7 ADD DUP3 PUSH2 0x2C38 JUMP JUMPDEST POP PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x3134 PUSH1 0x60 DUP7 ADD DUP3 PUSH2 0x2C38 JUMP JUMPDEST POP PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x3147 PUSH1 0x80 DUP7 ADD DUP3 PUSH2 0x31F2 JUMP JUMPDEST POP PUSH1 0xA0 DUP4 ADD MLOAD PUSH2 0x315A PUSH1 0xA0 DUP7 ADD DUP3 PUSH2 0x31F2 JUMP JUMPDEST POP PUSH1 0xC0 DUP4 ADD MLOAD PUSH2 0x316D PUSH1 0xC0 DUP7 ADD DUP3 PUSH2 0x31F2 JUMP JUMPDEST POP PUSH1 0xE0 DUP4 ADD MLOAD PUSH2 0x3180 PUSH1 0xE0 DUP7 ADD DUP3 PUSH2 0x31F2 JUMP JUMPDEST POP PUSH2 0x100 DUP4 ADD MLOAD PUSH2 0x3195 PUSH2 0x100 DUP7 ADD DUP3 PUSH2 0x31F2 JUMP JUMPDEST POP PUSH2 0x120 DUP4 ADD MLOAD PUSH2 0x31AA PUSH2 0x120 DUP7 ADD DUP3 PUSH2 0x31F2 JUMP JUMPDEST POP PUSH2 0x140 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH2 0x140 DUP7 ADD MSTORE PUSH2 0x31C4 DUP3 DUP3 PUSH2 0x2D69 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x160 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH2 0x160 DUP7 ADD MSTORE PUSH2 0x31E0 DUP3 DUP3 PUSH2 0x2D69 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x2C41 DUP2 PUSH2 0x34E4 JUMP JUMPDEST PUSH2 0x2C41 DUP2 PUSH2 0x34EB JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x10AE DUP3 DUP5 PUSH2 0x2C38 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x3217 DUP3 DUP8 PUSH2 0x2C38 JUMP JUMPDEST PUSH2 0x3224 PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x2C38 JUMP JUMPDEST PUSH2 0x3231 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x31F2 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x3243 DUP2 DUP5 PUSH2 0x2D69 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x325B DUP3 DUP6 PUSH2 0x2C38 JUMP JUMPDEST PUSH2 0xC45 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x31F2 JUMP JUMPDEST PUSH1 0x60 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x3279 DUP2 DUP7 PUSH2 0x2CAE JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x328D DUP2 DUP6 PUSH2 0x2D09 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x31E0 DUP2 DUP5 PUSH2 0x2C47 JUMP JUMPDEST PUSH1 0x60 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x32B2 DUP2 DUP7 PUSH2 0x2CAE JUMP JUMPDEST SWAP1 POP PUSH2 0x32C1 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x31F2 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x31E0 DUP2 DUP5 PUSH2 0x2C47 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x10AE DUP3 DUP5 PUSH2 0x2D60 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x10AE DUP2 PUSH2 0x2D9E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x10AE DUP2 PUSH2 0x2DF4 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x10AE DUP2 PUSH2 0x2E24 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x10AE DUP2 PUSH2 0x2E7A JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x10AE DUP2 PUSH2 0x2EAA JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x10AE DUP2 PUSH2 0x2F00 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x10AE DUP2 PUSH2 0x2F30 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x10AE DUP2 PUSH2 0x2F60 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x10AE DUP2 PUSH2 0x2F90 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x10AE DUP2 PUSH2 0x2FC0 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x10AE DUP2 PUSH2 0x3016 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x10AE DUP2 PUSH2 0x3046 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x10AE DUP3 DUP5 PUSH2 0x309C JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xC45 DUP2 DUP5 PUSH2 0x30E6 JUMP JUMPDEST PUSH1 0x60 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x33D1 DUP2 DUP7 PUSH2 0x30E6 JUMP JUMPDEST SWAP1 POP PUSH2 0x33E0 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x31F2 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x31E0 DUP2 DUP5 PUSH2 0x2D69 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x10AE DUP3 DUP5 PUSH2 0x31E9 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x10AE DUP3 DUP5 PUSH2 0x31F2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x342D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x344C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 SWAP1 DUP2 MUL ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x346D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x1F SWAP2 SWAP1 SWAP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND SWAP1 JUMP JUMPDEST PUSH2 0xFFFF AND SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0xFF AND SWAP1 JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3520 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3508 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x158B JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP1 JUMP STOP LOG2 PUSH6 0x627A7A723058 KECCAK256 0xf8 DIFFICULTY 0x28 PUSH8 0x4A7A1B076EA035CD STATICCALL NOT 0xe SWAP2 0x2b LOG3 0xc0 SWAP5 CALLCODE MULMOD 0xcb 0xdd 0xcd DUP4 SAR PUSH20 0x62003D456C6578706572696D656E74616CF50037 ",
- "sourceMap": "816:1324:0:-;;;-1:-1:-1;;971:29:0;;1007:464;8:9:-1;5:2;;;30:1;27;20:12;5:2;1007:464:0;;;;;;;;;;;;;;;;;;;;;;;;363:5:41;:18;;371:10;-1:-1:-1;;;;;;363:18:41;;;;;;;-1:-1:-1;1130:30:1;;;;-1:-1:-1;;;;;1130:30:1;;;;;;;;;;1170:11;:37;;;;;;;;;;1217:9;:34;;;;;;;;;;;1261:30;;1130;;1170:37;;1217:34;;1261:30;;1384:14:0;;1261:30:1;;:14;;:30;;;;;:::i;:::-;-1:-1:-1;1301:32:1;;;;:15;;:32;;;;;:::i;:::-;;926:414;;;;;1423:41:0;1445:18;1423:21;;;:41;;;:::i;:::-;1007:464;;;;;;816:1324;;1799:339;1903:20;460:5:41;;-1:-1:-1;;;;;460:5:41;446:10;:19;425:85;;;;;;;;;;;;;;;;;;;;;;1926:8:0;;:41;;;;;-1:-1:-1;;;;;1926:8:0;;;;:22;;:41;;1949:17;;1926:41;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1926:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1926:41:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;1926:41:0;;;;;;;;;1903:64;-1:-1:-1;;;;;;1981:26:0;;;1977:155;;2023:11;;2057:8;;2023:43;;;;;-1:-1:-1;;;;;2023:11:0;;;;:19;;:43;;2043:12;;2057:8;2023:43;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2023:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2023:43:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;2023:43:0;;;;;;;;;-1:-1:-1;2080:9:0;;2112:8;;2080:41;;;;;-1:-1:-1;;;;;2080:9:0;;;;:17;;:41;;2098:12;;2112:8;2080:41;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2080:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2080:41:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;2080:41:0;;;;;;;;;;1977:155;1799:339;;:::o;816:1324::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;816:1324:0;;;-1:-1:-1;816:1324:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;5:122:-1:-;;83:39;114:6;108:13;83:39;;;74:48;68:59;-1:-1;;;68:59;134:116;;209:36;237:6;231:13;209:36;;257:120;;334:38;364:6;358:13;334:38;;385:442;;490:4;478:17;;474:27;-1:-1;464:2;;515:1;512;505:12;464:2;545:6;539:13;567:64;582:48;623:6;582:48;;;567:64;;;558:73;;651:6;644:5;637:21;687:4;679:6;675:17;720:4;713:5;709:16;755:3;746:6;741:3;737:16;734:25;731:2;;;772:1;769;762:12;731:2;782:39;814:6;809:3;804;782:39;;;457:370;;;;;;;;835:263;;950:2;938:9;929:7;925:23;921:32;918:2;;;966:1;963;956:12;918:2;1001:1;1018:64;1074:7;1054:9;1018:64;;;1008:74;912:186;-1:-1;;;;912:186;1105:1138;;;;;;;1322:3;1310:9;1301:7;1297:23;1293:33;1290:2;;;1339:1;1336;1329:12;1290:2;1374:1;1391:64;1447:7;1427:9;1391:64;;;1381:74;;1353:108;1492:2;1510:64;1566:7;1557:6;1546:9;1542:22;1510:64;;;1500:74;;1471:109;1611:2;1629:64;1685:7;1676:6;1665:9;1661:22;1629:64;;;1619:74;;1590:109;1730:2;1748:63;1803:7;1794:6;1783:9;1779:22;1748:63;;;1738:73;;1709:108;1869:3;1858:9;1854:19;1848:26;-1:-1;;;;;1886:6;1883:30;1880:2;;;1926:1;1923;1916:12;1880:2;1946:73;2011:7;2002:6;1991:9;1987:22;1946:73;;;1936:83;;1827:198;2077:3;2066:9;2062:19;2056:26;-1:-1;;;;;2094:6;2091:30;2088:2;;;2134:1;2131;2124:12;2088:2;2154:73;2219:7;2210:6;2199:9;2195:22;2154:73;;;2144:83;;2035:198;1284:959;;;;;;;;;2250:257;;2362:2;2350:9;2341:7;2337:23;2333:32;2330:2;;;2378:1;2375;2368:12;2330:2;2413:1;2430:61;2483:7;2463:9;2430:61;;2514:110;2587:31;2612:5;2587:31;;;2582:3;2575:44;2569:55;;;2631:107;2702:30;2726:5;2702:30;;2746:296;2901:2;2889:15;;2938:66;2933:2;2924:12;;2917:88;3033:2;3024:12;;2882:160;3050:110;3123:31;3148:5;3123:31;;3167:294;3303:2;3288:18;;3317:61;3292:9;3351:6;3317:61;;;3389:62;3447:2;3436:9;3432:18;3423:6;3389:62;;3468:189;3574:2;3559:18;;3588:59;3563:9;3620:6;3588:59;;;3545:112;;;;;3664:387;3845:2;3859:47;;;3830:18;;3920:121;3830:18;3920:121;;4058:256;4120:2;4114:9;4146:17;;;-1:-1;;;;;4206:34;;4242:22;;;4203:62;4200:2;;;4278:1;4275;4268:12;4200:2;4294;4287:22;4098:216;;-1:-1;4098:216;4321:258;;-1:-1;;;;;4456:6;4453:30;4450:2;;;4496:1;4493;4486:12;4450:2;-1:-1;4569:4;4540;4517:17;;;;-1:-1;;4513:33;4559:15;;4387:192;4586:128;-1:-1;;;;;4655:54;;4638:76;4721:151;4800:66;4789:78;;4772:100;5100:92;5173:13;5166:21;;5149:43;5358:268;5423:1;5430:101;5444:6;5441:1;5438:13;5430:101;;;5511:11;;;5505:18;5492:11;;;5485:39;5466:2;5459:10;5430:101;;;5546:6;5543:1;5540:13;5537:2;;;5611:1;5602:6;5597:3;5593:16;5586:27;5537:2;5407:219;;;;;;816:1324:0;;;;;;"
+ "object": "0x60806040523480156200001157600080fd5b506040516200374638038062003746833981018060405262000037919081019062000433565b60008054600160a060020a03808816600160a060020a03199283161783556001805482891690841617905560028054918716919092161790558251869086908690869086906200008f906003906020850190620002e6565b508051620000a5906004906020840190620002e6565b5050600054604080517f4552433230546f6b656e28616464726573732900000000000000000000000000815290519081900360130181207f60704108000000000000000000000000000000000000000000000000000000008252600160a060020a039092169550636070410894506200012593509091506004016200054a565b602060405180830381600087803b1580156200014057600080fd5b505af115801562000155573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506200017b91908101906200040a565b9050600160a060020a03811615620002da576001546040517f095ea7b3000000000000000000000000000000000000000000000000000000008152600160a060020a039091169063095ea7b390620001dc908490600019906004016200052b565b602060405180830381600087803b158015620001f757600080fd5b505af11580156200020c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620002329190810190620004e3565b506002546040517f095ea7b3000000000000000000000000000000000000000000000000000000008152600160a060020a039091169063095ea7b39062000282908490600019906004016200052b565b602060405180830381600087803b1580156200029d57600080fd5b505af1158015620002b2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620002d89190810190620004e3565b505b50505050505062000618565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200032957805160ff191683800117855562000359565b8280016001018555821562000359579182015b82811115620003595782518255916020019190600101906200033c565b50620003679291506200036b565b5090565b6200038891905b8082111562000367576000815560010162000372565b90565b6000620003998251620005af565b9392505050565b6000620003998251620005e0565b6000601f82018313620003c057600080fd5b8151620003d7620003d18262000587565b62000560565b91508082526020830160208301858383011115620003f457600080fd5b62000401838284620005e5565b50505092915050565b6000602082840312156200041d57600080fd5b60006200042b84846200038b565b949350505050565b600080600080600060a086880312156200044c57600080fd5b60006200045a88886200038b565b95505060206200046d888289016200038b565b945050604062000480888289016200038b565b93505060608601516001604060020a038111156200049d57600080fd5b620004ab88828901620003ae565b92505060808601516001604060020a03811115620004c857600080fd5b620004d688828901620003ae565b9150509295509295909350565b600060208284031215620004f657600080fd5b60006200042b8484620003a0565b6200050f81620005af565b82525050565b6200050f81620005bb565b6200050f8162000388565b604081016200053b828562000504565b62000399602083018462000520565b602081016200055a828462000515565b92915050565b6040518181016001604060020a03811182821017156200057f57600080fd5b604052919050565b60006001604060020a038211156200059e57600080fd5b506020601f91909101601f19160190565b600160a060020a031690565b7fffffffff000000000000000000000000000000000000000000000000000000001690565b151590565b60005b8381101562000602578181015183820152602001620005e8565b8381111562000612576000848401525b50505050565b61311e80620006286000396000f3006080604052600436106100a35763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663150b7a0281146100ff578063169645f2146101355780631c5b1ec41461015557806320472cf714610175578063725cef0614610197578063b3cd4254146101aa578063bc063e1a146101bf578063c5e6e6ac146101d4578063e58e9c16146101f4578063f0b9e5ba14610214575b60015473ffffffffffffffffffffffffffffffffffffffff1633146100fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f490612e71565b60405180910390fd5b005b34801561010b57600080fd5b5061011f61011a36600461248a565b610234565b60405161012c9190612e63565b60405180910390f35b610148610143366004612568565b610294565b60405161012c9190612f31565b34801561016157600080fd5b50610148610170366004612749565b610560565b34801561018157600080fd5b5061018a610626565b60405161012c9190612f82565b6101486101a536600461264e565b61062c565b3480156101b657600080fd5b5061018a6109fa565b3480156101cb57600080fd5b5061018a610a00565b3480156101e057600080fd5b506101486101ef366004612749565b610a06565b34801561020057600080fd5b5061014861020f366004612749565b610a79565b34801561022057600080fd5b5061011f61022f366004612503565b610b76565b604080517f6f6e455243373231526563656976656428616464726573732c6164647265737381527f2c75696e743235362c62797465732900000000000000000000000000000000006020820152905190819003602f019020949350505050565b61029c6120ed565b34600080808084116102da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f490612ea1565b6102e5848888610bd6565b92506102f18484610ca4565b9150600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016000604051808303818588803b15801561037957600080fd5b505af115801561038d573d6000803e3d6000fd5b50505050506103ba8b60008151811015156103a457fe5b9060200190602002015161014001516010610ceb565b60048054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010060018816150201909516949094049384018190048102820181019092528281529394508301828280156104605780601f1061043557610100808354040283529160200191610460565b820191906000526020600020905b81548152906001019060200180831161044357829003601f168201915b50505050508b600081518110151561047457fe5b60209081029091010151610160015260025473ffffffffffffffffffffffffffffffffffffffff828116911614156104b8576104b18b8b84610d4c565b94506104c8565b6104c58b8b8b8b86610e66565b94505b6020850151841015610506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f490612e81565b60208501518214610543576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f490612ef1565b61055281338760000151610fee565b505050509695505050505050565b6105686120ed565b60008060006105756120ed565b600093505b865184101561061c57610591868660000151610ca4565b92506105d487858151811015156105a457fe5b9060200190602002015160a0015188868151811015156105c057fe5b9060200190602002015160800151856111c8565b91506105f787858151811015156105e757fe5b90602001906020020151836111e5565b9050610603858261132e565b84518614156106115761061c565b60019093019261057a565b5050505092915050565b61251c81565b6106346120ed565b346000808211610670576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f490612ea1565b600086116106aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f490612ea1565b6106d28a60008151811015156106bc57fe5b9060200190602002015161014001516000611390565b604080517f4552433230546f6b656e28616464726573732900000000000000000000000000815290519081900360130190209091507fffffffff00000000000000000000000000000000000000000000000000000000808316911614806107b45750604080517f455243373231546f6b656e28616464726573732c75696e743235362c6279746581527f7329000000000000000000000000000000000000000000000000000000000000602082015290519081900360220190207fffffffff000000000000000000000000000000000000000000000000000000008281169116145b15156107ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f490612f11565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016000604051808303818588803b15801561087257600080fd5b505af1158015610886573d6000803e3d6000fd5b5050604080517f4552433230546f6b656e28616464726573732900000000000000000000000000815290519081900360130190207fffffffff000000000000000000000000000000000000000000000000000000008581169116141592506108ff915050576108f88a8a8a8a8a6113fd565b9250610992565b604080517f455243373231546f6b656e28616464726573732c75696e743235362c6279746581527f7329000000000000000000000000000000000000000000000000000000000000602082015290519081900360220190207fffffffff00000000000000000000000000000000000000000000000000000000828116911614156109925761098f8a8a8a8a611754565b92505b60208301518210156109d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f490612e81565b6109ed6109e1838560200151610ca4565b84602001518787611a56565b5050979650505050505050565b61271081565b6103e881565b610a0e6120ed565b600080610a196120ed565b600092505b8551831015610a7057610a35858560200151610ca4565b9150610a4886848151811015156105e757fe5b9050610a54848261132e565b8484602001511415610a6557610a70565b600190920191610a1e565b50505092915050565b610a816120ed565b6000806000610a8e6120ed565b600093505b865184101561061c57610aaa868660000151610ca4565b9250610b118785815181101515610abd57fe5b9060200190602002015160a00151610b0b8987815181101515610adc57fe5b90602001906020020151608001518a88815181101515610af857fe5b9060200190602002015160e00151610ca4565b856111c8565b9150610b3e8785815181101515610b2457fe5b90602001906020020151610b39846001611b43565b6111e5565b9050610b5281600001518260600151610ca4565b8152610b5e858261132e565b84518611610b6b5761061c565b600190930192610a93565b604080517f6f6e455243373231526563656976656428616464726573732c75696e7432353681527f2c62797465732900000000000000000000000000000000000000000000000000602082015290519081900360270190205b9392505050565b6000808361ffff16118015610c00575073ffffffffffffffffffffffffffffffffffffffff821615155b15610bcf576103e861ffff84161115610c45576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f490612ed1565b610c5661ffff8416612710866111c8565b60405190915073ffffffffffffffffffffffffffffffffffffffff83169082156108fc029083906000818181858888f19350505050158015610c9c573d6000803e3d6000fd5b509392505050565b600082821115610ce0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f490612ec1565b508082035b92915050565b600081601401835110151515610d2d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f490612f01565b50016014015173ffffffffffffffffffffffffffffffffffffffff1690565b610d546120ed565b600080546040517f7e1d980800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690637e1d980890610daf90889087908990600401612e31565b608060405180830381600087803b158015610dc957600080fd5b505af1158015610ddd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610e01919081019061279a565b9150610e1582600001518360600151610ca4565b9050610e25826000015182611b8d565b1515610e5d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f490612ef1565b81529392505050565b610e6e6120ed565b6000610e786120ed565b610e806120ed565b610e886120ed565b859350610e958a87610a06565b9250600083606001511115610f2957610eb388888560600151611baa565b9150610ecc86610ec7888560200151610ca4565b611b8d565b1515610f04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f490612ef1565b610f12848360200151610ca4565b606080840151908701526020808401519087015293505b6000546040517f7e1d980800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690637e1d980890610f83908d9088908e90600401612e31565b608060405180830381600087803b158015610f9d57600080fd5b505af1158015610fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610fd5919081019061279a565b9050610fe1858261132e565b5050505095945050505050565b604080517f7472616e7366657228616464726573732c75696e7432353629000000000000008152905190819003601901812060009173ffffffffffffffffffffffffffffffffffffffff8616919061104c9086908690602401612ddd565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931783525181519192909182919080838360005b838110156110f05781810151838201526020016110d8565b50505050905090810190601f16801561111d5780820380516001836020036101000a031916815260200191505b509150506000604051808303816000865af19250505080151561116c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f490612ee1565b3d15611189575060003d602014156111895760206000803e506000515b8015156111c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f490612ee1565b50505050565b60006111dd6111d78584611ee3565b84611f3e565b949350505050565b6111ed6120ed565b6111f5612116565b600080546040517fc75e0a81000000000000000000000000000000000000000000000000000000008152829173ffffffffffffffffffffffffffffffffffffffff169063c75e0a819061124c908990600401612f3f565b606060405180830381600087803b15801561126657600080fd5b505af115801561127a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061129e91908101906127b8565b805190935060ff166003146112b257610a70565b6112c48660a001518460400151610ca4565b91506112d08583611f55565b9050808460200181815250506112ef818760a0015188608001516111c8565b845260a086015160c08701516113069183916111c8565b604085015260a086015160e08701516113209183916111c8565b606085015250505092915050565b8151815161133c9190611b43565b8252602080830151908201516113529190611b43565b60208301526040808301519082015161136b9190611b43565b6040830152606080830151908201516113849190611b43565b60609092019190915250565b6000816004018351101515156113d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f490612f21565b5050602001517fffffffff000000000000000000000000000000000000000000000000000000001690565b6114056120ed565b600061140f6120ed565b6114176120ed565b61141f6120ed565b6114318a60008151811015156103a457fe5b60048054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010060018816150201909516949094049384018190048102820181019092528281529397508301828280156114d75780601f106114ac576101008083540402835291602001916114d7565b820191906000526020600020905b8154815290600101906020018083116114ba57829003601f168201915b50505050508a60008151811015156114eb57fe5b60209081029091010151610160015260025473ffffffffffffffffffffffffffffffffffffffff858116911614156115c9576115288a8a88611baa565b8051909350861115611566576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f490612ef1565b611570858461132e565b61158c61158586600001518760600151611b43565b8651611b8d565b15156115c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f490612ef1565b611745565b6115d38a87610560565b9150600082606001511115611608576115f188888460600151611baa565b602080820151908701526060808201519087015290505b6000546040517fe5fa431b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e5fa431b90611662908d908a908e90600401612e31565b608060405180830381600087803b15801561167c57600080fd5b505af1158015611690573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506116b4919081019061279a565b805190935086146116f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f490612ef1565b6116fb858461132e565b61170d85602001518460200151611b8d565b1515611745576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f490612ef1565b610fe184338560000151610fee565b61175c6120ed565b6000806060600061176b6120ed565b6117736120ed565b8a519450846040519080825280602002602001820160405280156117a1578160200160208202803883390190505b509350600092505b848310156118dd576117d6868c858151811015156117c357fe5b9060200190602002015160e00151611b43565b60048054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600188161502019095169490940493840181900481028201810190925282815293995083018282801561187c5780601f106118515761010080835404028352916020019161187c565b820191906000526020600020905b81548152906001019060200180831161185f57829003601f168201915b50505050508b8481518110151561188f57fe5b6020908102909101015161016001528a518b90849081106118ac57fe5b9060200190602002015160a0015184848151811015156118c857fe5b602090810290910101526001909201916117a9565b6000861115611908576118f1898988611baa565b606080820151908901526020808201519089015291505b6000546040517f4d0ae54600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690634d0ae54690611962908e9088908f90600401612df8565b608060405180830381600087803b15801561197c57600080fd5b505af1158015611990573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506119b4919081019061279a565b90506119c0878261132e565b6119d287602001518260200151611b8d565b1515611a0a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f490612ef1565b600092505b84831015611a4857611a3d8b84815181101515611a2857fe5b90602001906020020151610140015133611f6b565b600190920191611a0f565b505050505050949350505050565b6000806000861115611b3b576001546040517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690632e1a7d4d90611ab8908990600401612f90565b600060405180830381600087803b158015611ad257600080fd5b505af1158015611ae6573d6000803e3d6000fd5b50505050611af5858585610bd6565b9150611b018683610ca4565b90506000811115611b3b57604051339082156108fc029083906000818181858888f19350505050158015611b39573d6000803e3d6000fd5b505b505050505050565b600082820183811015611b82576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f490612ec1565b8091505b5092915050565b600080611b9f61251c612710866111c8565b909210159392505050565b611bb26120ed565b6000806000611bbf6120ed565b600093505b8751841015611ed8576003805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f81018490048402820184019092528181529291830182828015611c715780601f10611c4657610100808354040283529160200191611c71565b820191906000526020600020905b815481529060010190602001808311611c5457829003601f168201915b50505050508885815181101515611c8457fe5b602090810290910181015161014001919091526004805460408051601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600187161502019094169390930492830185900485028101850190915281815292830182828015611d395780601f10611d0e57610100808354040283529160200191611d39565b820191906000526020600020905b815481529060010190602001808311611d1c57829003601f168201915b50505050508885815181101515611d4c57fe5b6020908102909101015161016001528451611d68908790610ca4565b9250611db68885815181101515611d7b57fe5b9060200190602002015160a00151610b0b8a87815181101515611d9a57fe5b90602001906020020151608001518b88815181101515610af857fe5b600054895191935073ffffffffffffffffffffffffffffffffffffffff169063b4be83d5908a9087908110611de757fe5b90602001906020020151611dfc856001611b43565b8a88815181101515611e0a57fe5b906020019060200201516040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401611e4e93929190612f50565b608060405180830381600087803b158015611e6857600080fd5b505af1158015611e7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611ea0919081019061279a565b9050611eb481600001518260600151610ca4565b8152611ec0858261132e565b84518611611ecd57611ed8565b600190930192611bc4565b505050509392505050565b600080831515611ef65760009150611b86565b50828202828482811515611f0657fe5b0414611b82576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f490612ec1565b6000808284811515611f4c57fe5b04949350505050565b6000818310611f645781610bcf565b5090919050565b6000806060611f8185601063ffffffff610ceb16565b9250611f9485602463ffffffff61203b16565b9150611fa785606463ffffffff61204716565b6040517fb88d4fde00000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff84169063b88d4fde90612002903090889087908790600401612d99565b600060405180830381600087803b15801561201c57600080fd5b505af1158015612030573d6000803e3d6000fd5b505050505050505050565b6000610bcf83836120a2565b60606000612055848461203b565b905060208301925080830184511015151561209c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f490612e91565b50500190565b6000816020018351101515156120e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f490612eb1565b50016020015190565b608060405190810160405280600081526020016000815260200160008152602001600081525090565b604080516060810182526000808252602082018190529181019190915290565b6000610bcf8235613036565b6000601f8201831361215357600080fd5b813561216661216182612fc5565b612f9e565b81815260209384019390925082018360005b8381101561061c578135860161218e888261220d565b8452506020928301929190910190600101612178565b6000601f820183136121b557600080fd5b81356121c361216182612fc5565b81815260209384019390925082018360005b8381101561061c57813586016121eb888261231d565b84525060209283019291909101906001016121d5565b6000610bcf825161307b565b6000601f8201831361221e57600080fd5b813561222c61216182612fe6565b9150808252602083016020830185838301111561224857600080fd5b610a70838284613084565b60006080828403121561226557600080fd5b61226f6080612f9e565b9050600061227d8484612201565b825250602061228e84848301612201565b60208301525060406122a284828501612201565b60408301525060606122b684828501612201565b60608301525092915050565b6000606082840312156122d457600080fd5b6122de6060612f9e565b905060006122ec848461247e565b82525060206122fd84848301612201565b602083015250604061231184828501612201565b60408301525092915050565b6000610180828403121561233057600080fd5b61233b610180612f9e565b905060006123498484612136565b825250602061235a84848301612136565b602083015250604061236e84828501612136565b604083015250606061238284828501612136565b606083015250608061239684828501612472565b60808301525060a06123aa84828501612472565b60a08301525060c06123be84828501612472565b60c08301525060e06123d284828501612472565b60e0830152506101006123e784828501612472565b610100830152506101206123fd84828501612472565b6101208301525061014082013567ffffffffffffffff81111561241f57600080fd5b61242b8482850161220d565b6101408301525061016082013567ffffffffffffffff81111561244d57600080fd5b6124598482850161220d565b6101608301525092915050565b6000610bcf8235613074565b6000610bcf823561307b565b6000610bcf825161307e565b600080600080608085870312156124a057600080fd5b60006124ac8787612136565b94505060206124bd87828801612136565b93505060406124ce87828801612472565b925050606085013567ffffffffffffffff8111156124eb57600080fd5b6124f78782880161220d565b91505092959194509250565b60008060006060848603121561251857600080fd5b60006125248686612136565b935050602061253586828701612472565b925050604084013567ffffffffffffffff81111561255257600080fd5b61255e8682870161220d565b9150509250925092565b60008060008060008060c0878903121561258157600080fd5b863567ffffffffffffffff81111561259857600080fd5b6125a489828a016121a4565b965050602087013567ffffffffffffffff8111156125c157600080fd5b6125cd89828a01612142565b955050604087013567ffffffffffffffff8111156125ea57600080fd5b6125f689828a016121a4565b945050606087013567ffffffffffffffff81111561261357600080fd5b61261f89828a01612142565b935050608061263089828a01612466565b92505060a061264189828a01612136565b9150509295509295509295565b600080600080600080600060e0888a03121561266957600080fd5b873567ffffffffffffffff81111561268057600080fd5b61268c8a828b016121a4565b975050602088013567ffffffffffffffff8111156126a957600080fd5b6126b58a828b01612142565b965050604088013567ffffffffffffffff8111156126d257600080fd5b6126de8a828b016121a4565b955050606088013567ffffffffffffffff8111156126fb57600080fd5b6127078a828b01612142565b94505060806127188a828b01612472565b93505060a06127298a828b01612466565b92505060c061273a8a828b01612136565b91505092959891949750929550565b6000806040838503121561275c57600080fd5b823567ffffffffffffffff81111561277357600080fd5b61277f858286016121a4565b925050602061279085828601612472565b9150509250929050565b6000608082840312156127ac57600080fd5b60006111dd8484612253565b6000606082840312156127ca57600080fd5b60006111dd84846122c2565b6127df81613036565b82525050565b60006127f082613032565b808452602084019350836020820285016128098561302c565b60005b84811015612840578383038852612824838351612907565b925061282f8261302c565b60209890980197915060010161280c565b50909695505050505050565b600061285782613032565b808452602084019350836020820285016128708561302c565b60005b8481101561284057838303885261288b838351612c84565b92506128968261302c565b602098909801979150600101612873565b60006128b282613032565b8084526020840193506128c48361302c565b60005b828110156128f4576128da868351612d90565b6128e38261302c565b6020969096019591506001016128c7565b5093949350505050565b6127df8161304f565b600061291282613032565b808452612926816020860160208601613090565b61292f816130bc565b9093016020019392505050565b602381527f44454641554c545f46554e4354494f4e5f574554485f434f4e54524143545f4f60208201527f4e4c590000000000000000000000000000000000000000000000000000000000604082015260600190565b601181527f494e56414c49445f4d53475f56414c5545000000000000000000000000000000602082015260400190565b603081527f475245415445525f4f525f455155414c5f544f5f4e45535445445f425954455360208201527f5f4c454e4754485f524551554952454400000000000000000000000000000000604082015260600190565b601781527f56414c55455f475245415445525f5448414e5f5a45524f000000000000000000602082015260400190565b602681527f475245415445525f4f525f455155414c5f544f5f33325f4c454e4754485f524560208201527f5155495245440000000000000000000000000000000000000000000000000000604082015260600190565b601081527f55494e543235365f4f564552464c4f5700000000000000000000000000000000602082015260400190565b601881527f4645455f50524f504f5254494f4e5f544f4f5f4c415247450000000000000000602082015260400190565b600f81527f5452414e534645525f4641494c45440000000000000000000000000000000000602082015260400190565b601681527f554e41434345505441424c455f5448524553484f4c4400000000000000000000602082015260400190565b602681527f475245415445525f4f525f455155414c5f544f5f32305f4c454e4754485f524560208201527f5155495245440000000000000000000000000000000000000000000000000000604082015260600190565b601781527f554e535550504f525445445f544f4b454e5f50524f5859000000000000000000602082015260400190565b602581527f475245415445525f4f525f455155414c5f544f5f345f4c454e4754485f52455160208201527f5549524544000000000000000000000000000000000000000000000000000000604082015260600190565b80516080830190612c4b8482612d90565b506020820151612c5e6020850182612d90565b506040820151612c716040850182612d90565b5060608201516111c26060850182612d90565b8051600090610180840190612c9985826127d6565b506020830151612cac60208601826127d6565b506040830151612cbf60408601826127d6565b506060830151612cd260608601826127d6565b506080830151612ce56080860182612d90565b5060a0830151612cf860a0860182612d90565b5060c0830151612d0b60c0860182612d90565b5060e0830151612d1e60e0860182612d90565b50610100830151612d33610100860182612d90565b50610120830151612d48610120860182612d90565b50610140830151848203610140860152612d628282612907565b915050610160830151848203610160860152612d7e8282612907565b95945050505050565b6127df81613074565b6127df8161307b565b60808101612da782876127d6565b612db460208301866127d6565b612dc16040830185612d90565b8181036060830152612dd38184612907565b9695505050505050565b60408101612deb82856127d6565b610bcf6020830184612d90565b60608082528101612e09818661284c565b90508181036020830152612e1d81856128a7565b90508181036040830152612d7e81846127e5565b60608082528101612e42818661284c565b9050612e516020830185612d90565b8181036040830152612d7e81846127e5565b60208101610ce582846128fe565b60208082528101610ce58161293c565b60208082528101610ce581612992565b60208082528101610ce5816129c2565b60208082528101610ce581612a18565b60208082528101610ce581612a48565b60208082528101610ce581612a9e565b60208082528101610ce581612ace565b60208082528101610ce581612afe565b60208082528101610ce581612b2e565b60208082528101610ce581612b5e565b60208082528101610ce581612bb4565b60208082528101610ce581612be4565b60808101610ce58284612c3a565b60208082528101610bcf8184612c84565b60608082528101612f618186612c84565b9050612f706020830185612d90565b8181036040830152612d7e8184612907565b60208101610ce58284612d87565b60208101610ce58284612d90565b60405181810167ffffffffffffffff81118282101715612fbd57600080fd5b604052919050565b600067ffffffffffffffff821115612fdc57600080fd5b5060209081020190565b600067ffffffffffffffff821115612ffd57600080fd5b506020601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160190565b60200190565b5190565b73ffffffffffffffffffffffffffffffffffffffff1690565b7fffffffff000000000000000000000000000000000000000000000000000000001690565b61ffff1690565b90565b60ff1690565b82818337506000910152565b60005b838110156130ab578181015183820152602001613093565b838111156111c25750506000910152565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016905600a265627a7a72305820ff5c1e325698909ffd3590166bdff6a2f31ff4394822a4e1b9ea119a6a813e6c6c6578706572696d656e74616cf50037",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x3746 CODESIZE SUB DUP1 PUSH3 0x3746 DUP4 CODECOPY DUP2 ADD DUP1 PUSH1 0x40 MSTORE PUSH3 0x37 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH3 0x433 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP1 DUP9 AND PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB NOT SWAP3 DUP4 AND OR DUP4 SSTORE PUSH1 0x1 DUP1 SLOAD DUP3 DUP10 AND SWAP1 DUP5 AND OR SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD SWAP2 DUP8 AND SWAP2 SWAP1 SWAP3 AND OR SWAP1 SSTORE DUP3 MLOAD DUP7 SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH3 0x8F SWAP1 PUSH1 0x3 SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH3 0x2E6 JUMP JUMPDEST POP DUP1 MLOAD PUSH3 0xA5 SWAP1 PUSH1 0x4 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH3 0x2E6 JUMP JUMPDEST POP POP PUSH1 0x0 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x4552433230546F6B656E28616464726573732900000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x13 ADD DUP2 KECCAK256 PUSH32 0x6070410800000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP1 SWAP3 AND SWAP6 POP PUSH4 0x60704108 SWAP5 POP PUSH3 0x125 SWAP4 POP SWAP1 SWAP2 POP PUSH1 0x4 ADD PUSH3 0x54A JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x140 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH3 0x155 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH3 0x17B SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH3 0x40A JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 AND ISZERO PUSH3 0x2DA JUMPI PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x95EA7B3 SWAP1 PUSH3 0x1DC SWAP1 DUP5 SWAP1 PUSH1 0x0 NOT SWAP1 PUSH1 0x4 ADD PUSH3 0x52B JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x1F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH3 0x20C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH3 0x232 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH3 0x4E3 JUMP JUMPDEST POP PUSH1 0x2 SLOAD PUSH1 0x40 MLOAD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x95EA7B3 SWAP1 PUSH3 0x282 SWAP1 DUP5 SWAP1 PUSH1 0x0 NOT SWAP1 PUSH1 0x4 ADD PUSH3 0x52B JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x29D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH3 0x2B2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH3 0x2D8 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH3 0x4E3 JUMP JUMPDEST POP JUMPDEST POP POP POP POP POP POP PUSH3 0x618 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH3 0x329 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x359 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x359 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x359 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x33C JUMP JUMPDEST POP PUSH3 0x367 SWAP3 SWAP2 POP PUSH3 0x36B JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH3 0x388 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x367 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x372 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH3 0x399 DUP3 MLOAD PUSH3 0x5AF JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0x399 DUP3 MLOAD PUSH3 0x5E0 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH3 0x3C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x3D7 PUSH3 0x3D1 DUP3 PUSH3 0x587 JUMP JUMPDEST PUSH3 0x560 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP4 ADD DUP6 DUP4 DUP4 ADD GT ISZERO PUSH3 0x3F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x401 DUP4 DUP3 DUP5 PUSH3 0x5E5 JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x41D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH3 0x42B DUP5 DUP5 PUSH3 0x38B JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH3 0x44C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH3 0x45A DUP9 DUP9 PUSH3 0x38B JUMP JUMPDEST SWAP6 POP POP PUSH1 0x20 PUSH3 0x46D DUP9 DUP3 DUP10 ADD PUSH3 0x38B JUMP JUMPDEST SWAP5 POP POP PUSH1 0x40 PUSH3 0x480 DUP9 DUP3 DUP10 ADD PUSH3 0x38B JUMP JUMPDEST SWAP4 POP POP PUSH1 0x60 DUP7 ADD MLOAD PUSH1 0x1 PUSH1 0x40 PUSH1 0x2 EXP SUB DUP2 GT ISZERO PUSH3 0x49D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x4AB DUP9 DUP3 DUP10 ADD PUSH3 0x3AE JUMP JUMPDEST SWAP3 POP POP PUSH1 0x80 DUP7 ADD MLOAD PUSH1 0x1 PUSH1 0x40 PUSH1 0x2 EXP SUB DUP2 GT ISZERO PUSH3 0x4C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x4D6 DUP9 DUP3 DUP10 ADD PUSH3 0x3AE JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x4F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH3 0x42B DUP5 DUP5 PUSH3 0x3A0 JUMP JUMPDEST PUSH3 0x50F DUP2 PUSH3 0x5AF JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH3 0x50F DUP2 PUSH3 0x5BB JUMP JUMPDEST PUSH3 0x50F DUP2 PUSH3 0x388 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH3 0x53B DUP3 DUP6 PUSH3 0x504 JUMP JUMPDEST PUSH3 0x399 PUSH1 0x20 DUP4 ADD DUP5 PUSH3 0x520 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH3 0x55A DUP3 DUP5 PUSH3 0x515 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH1 0x1 PUSH1 0x40 PUSH1 0x2 EXP SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH3 0x57F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x40 PUSH1 0x2 EXP SUB DUP3 GT ISZERO PUSH3 0x59E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x1F SWAP2 SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND SWAP1 JUMP JUMPDEST ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x602 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x5E8 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH3 0x612 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x311E DUP1 PUSH3 0x628 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xA3 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x150B7A02 DUP2 EQ PUSH2 0xFF JUMPI DUP1 PUSH4 0x169645F2 EQ PUSH2 0x135 JUMPI DUP1 PUSH4 0x1C5B1EC4 EQ PUSH2 0x155 JUMPI DUP1 PUSH4 0x20472CF7 EQ PUSH2 0x175 JUMPI DUP1 PUSH4 0x725CEF06 EQ PUSH2 0x197 JUMPI DUP1 PUSH4 0xB3CD4254 EQ PUSH2 0x1AA JUMPI DUP1 PUSH4 0xBC063E1A EQ PUSH2 0x1BF JUMPI DUP1 PUSH4 0xC5E6E6AC EQ PUSH2 0x1D4 JUMPI DUP1 PUSH4 0xE58E9C16 EQ PUSH2 0x1F4 JUMPI DUP1 PUSH4 0xF0B9E5BA EQ PUSH2 0x214 JUMPI JUMPDEST PUSH1 0x1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xFD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF4 SWAP1 PUSH2 0x2E71 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x10B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11F PUSH2 0x11A CALLDATASIZE PUSH1 0x4 PUSH2 0x248A JUMP JUMPDEST PUSH2 0x234 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x12C SWAP2 SWAP1 PUSH2 0x2E63 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x148 PUSH2 0x143 CALLDATASIZE PUSH1 0x4 PUSH2 0x2568 JUMP JUMPDEST PUSH2 0x294 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x12C SWAP2 SWAP1 PUSH2 0x2F31 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x161 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x148 PUSH2 0x170 CALLDATASIZE PUSH1 0x4 PUSH2 0x2749 JUMP JUMPDEST PUSH2 0x560 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x181 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x18A PUSH2 0x626 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x12C SWAP2 SWAP1 PUSH2 0x2F82 JUMP JUMPDEST PUSH2 0x148 PUSH2 0x1A5 CALLDATASIZE PUSH1 0x4 PUSH2 0x264E JUMP JUMPDEST PUSH2 0x62C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x18A PUSH2 0x9FA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x18A PUSH2 0xA00 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x148 PUSH2 0x1EF CALLDATASIZE PUSH1 0x4 PUSH2 0x2749 JUMP JUMPDEST PUSH2 0xA06 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x200 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x148 PUSH2 0x20F CALLDATASIZE PUSH1 0x4 PUSH2 0x2749 JUMP JUMPDEST PUSH2 0xA79 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x220 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11F PUSH2 0x22F CALLDATASIZE PUSH1 0x4 PUSH2 0x2503 JUMP JUMPDEST PUSH2 0xB76 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x6F6E455243373231526563656976656428616464726573732C61646472657373 DUP2 MSTORE PUSH32 0x2C75696E743235362C6279746573290000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x2F ADD SWAP1 KECCAK256 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x29C PUSH2 0x20ED JUMP JUMPDEST CALLVALUE PUSH1 0x0 DUP1 DUP1 DUP1 DUP5 GT PUSH2 0x2DA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF4 SWAP1 PUSH2 0x2EA1 JUMP JUMPDEST PUSH2 0x2E5 DUP5 DUP9 DUP9 PUSH2 0xBD6 JUMP JUMPDEST SWAP3 POP PUSH2 0x2F1 DUP5 DUP5 PUSH2 0xCA4 JUMP JUMPDEST SWAP2 POP PUSH1 0x1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0E30DB0 DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH29 0x100000000000000000000000000000000000000000000000000000000 MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x379 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x38D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP PUSH2 0x3BA DUP12 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x3A4 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x140 ADD MLOAD PUSH1 0x10 PUSH2 0xCEB JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE SWAP4 SWAP5 POP DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x460 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x435 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x460 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x443 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP12 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x474 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MLOAD PUSH2 0x160 ADD MSTORE PUSH1 0x2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x4B8 JUMPI PUSH2 0x4B1 DUP12 DUP12 DUP5 PUSH2 0xD4C JUMP JUMPDEST SWAP5 POP PUSH2 0x4C8 JUMP JUMPDEST PUSH2 0x4C5 DUP12 DUP12 DUP12 DUP12 DUP7 PUSH2 0xE66 JUMP JUMPDEST SWAP5 POP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD DUP5 LT ISZERO PUSH2 0x506 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF4 SWAP1 PUSH2 0x2E81 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD DUP3 EQ PUSH2 0x543 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF4 SWAP1 PUSH2 0x2EF1 JUMP JUMPDEST PUSH2 0x552 DUP2 CALLER DUP8 PUSH1 0x0 ADD MLOAD PUSH2 0xFEE JUMP JUMPDEST POP POP POP POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x568 PUSH2 0x20ED JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x575 PUSH2 0x20ED JUMP JUMPDEST PUSH1 0x0 SWAP4 POP JUMPDEST DUP7 MLOAD DUP5 LT ISZERO PUSH2 0x61C JUMPI PUSH2 0x591 DUP7 DUP7 PUSH1 0x0 ADD MLOAD PUSH2 0xCA4 JUMP JUMPDEST SWAP3 POP PUSH2 0x5D4 DUP8 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x5A4 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0xA0 ADD MLOAD DUP9 DUP7 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x5C0 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0x80 ADD MLOAD DUP6 PUSH2 0x11C8 JUMP JUMPDEST SWAP2 POP PUSH2 0x5F7 DUP8 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x5E7 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP4 PUSH2 0x11E5 JUMP JUMPDEST SWAP1 POP PUSH2 0x603 DUP6 DUP3 PUSH2 0x132E JUMP JUMPDEST DUP5 MLOAD DUP7 EQ ISZERO PUSH2 0x611 JUMPI PUSH2 0x61C JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP4 ADD SWAP3 PUSH2 0x57A JUMP JUMPDEST POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x251C DUP2 JUMP JUMPDEST PUSH2 0x634 PUSH2 0x20ED JUMP JUMPDEST CALLVALUE PUSH1 0x0 DUP1 DUP3 GT PUSH2 0x670 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF4 SWAP1 PUSH2 0x2EA1 JUMP JUMPDEST PUSH1 0x0 DUP7 GT PUSH2 0x6AA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF4 SWAP1 PUSH2 0x2EA1 JUMP JUMPDEST PUSH2 0x6D2 DUP11 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x6BC JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x140 ADD MLOAD PUSH1 0x0 PUSH2 0x1390 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x4552433230546F6B656E28616464726573732900000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x13 ADD SWAP1 KECCAK256 SWAP1 SWAP2 POP PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP1 DUP4 AND SWAP2 AND EQ DUP1 PUSH2 0x7B4 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH32 0x455243373231546F6B656E28616464726573732C75696E743235362C62797465 DUP2 MSTORE PUSH32 0x7329000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x22 ADD SWAP1 KECCAK256 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 DUP2 AND SWAP2 AND EQ JUMPDEST ISZERO ISZERO PUSH2 0x7EC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF4 SWAP1 PUSH2 0x2F11 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0E30DB0 DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH29 0x100000000000000000000000000000000000000000000000000000000 MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x872 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x886 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH32 0x4552433230546F6B656E28616464726573732900000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x13 ADD SWAP1 KECCAK256 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP6 DUP2 AND SWAP2 AND EQ ISZERO SWAP3 POP PUSH2 0x8FF SWAP2 POP POP JUMPI PUSH2 0x8F8 DUP11 DUP11 DUP11 DUP11 DUP11 PUSH2 0x13FD JUMP JUMPDEST SWAP3 POP PUSH2 0x992 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x455243373231546F6B656E28616464726573732C75696E743235362C62797465 DUP2 MSTORE PUSH32 0x7329000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x22 ADD SWAP1 KECCAK256 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x992 JUMPI PUSH2 0x98F DUP11 DUP11 DUP11 DUP11 PUSH2 0x1754 JUMP JUMPDEST SWAP3 POP JUMPDEST PUSH1 0x20 DUP4 ADD MLOAD DUP3 LT ISZERO PUSH2 0x9D0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF4 SWAP1 PUSH2 0x2E81 JUMP JUMPDEST PUSH2 0x9ED PUSH2 0x9E1 DUP4 DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0xCA4 JUMP JUMPDEST DUP5 PUSH1 0x20 ADD MLOAD DUP8 DUP8 PUSH2 0x1A56 JUMP JUMPDEST POP POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x2710 DUP2 JUMP JUMPDEST PUSH2 0x3E8 DUP2 JUMP JUMPDEST PUSH2 0xA0E PUSH2 0x20ED JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xA19 PUSH2 0x20ED JUMP JUMPDEST PUSH1 0x0 SWAP3 POP JUMPDEST DUP6 MLOAD DUP4 LT ISZERO PUSH2 0xA70 JUMPI PUSH2 0xA35 DUP6 DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0xCA4 JUMP JUMPDEST SWAP2 POP PUSH2 0xA48 DUP7 DUP5 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x5E7 JUMPI INVALID JUMPDEST SWAP1 POP PUSH2 0xA54 DUP5 DUP3 PUSH2 0x132E JUMP JUMPDEST DUP5 DUP5 PUSH1 0x20 ADD MLOAD EQ ISZERO PUSH2 0xA65 JUMPI PUSH2 0xA70 JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 PUSH2 0xA1E JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xA81 PUSH2 0x20ED JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0xA8E PUSH2 0x20ED JUMP JUMPDEST PUSH1 0x0 SWAP4 POP JUMPDEST DUP7 MLOAD DUP5 LT ISZERO PUSH2 0x61C JUMPI PUSH2 0xAAA DUP7 DUP7 PUSH1 0x0 ADD MLOAD PUSH2 0xCA4 JUMP JUMPDEST SWAP3 POP PUSH2 0xB11 DUP8 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xABD JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0xA0 ADD MLOAD PUSH2 0xB0B DUP10 DUP8 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xADC JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0x80 ADD MLOAD DUP11 DUP9 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xAF8 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0xE0 ADD MLOAD PUSH2 0xCA4 JUMP JUMPDEST DUP6 PUSH2 0x11C8 JUMP JUMPDEST SWAP2 POP PUSH2 0xB3E DUP8 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xB24 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0xB39 DUP5 PUSH1 0x1 PUSH2 0x1B43 JUMP JUMPDEST PUSH2 0x11E5 JUMP JUMPDEST SWAP1 POP PUSH2 0xB52 DUP2 PUSH1 0x0 ADD MLOAD DUP3 PUSH1 0x60 ADD MLOAD PUSH2 0xCA4 JUMP JUMPDEST DUP2 MSTORE PUSH2 0xB5E DUP6 DUP3 PUSH2 0x132E JUMP JUMPDEST DUP5 MLOAD DUP7 GT PUSH2 0xB6B JUMPI PUSH2 0x61C JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP4 ADD SWAP3 PUSH2 0xA93 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x6F6E455243373231526563656976656428616464726573732C75696E74323536 DUP2 MSTORE PUSH32 0x2C62797465732900000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x27 ADD SWAP1 KECCAK256 JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH2 0xFFFF AND GT DUP1 ISZERO PUSH2 0xC00 JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND ISZERO ISZERO JUMPDEST ISZERO PUSH2 0xBCF JUMPI PUSH2 0x3E8 PUSH2 0xFFFF DUP5 AND GT ISZERO PUSH2 0xC45 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF4 SWAP1 PUSH2 0x2ED1 JUMP JUMPDEST PUSH2 0xC56 PUSH2 0xFFFF DUP5 AND PUSH2 0x2710 DUP7 PUSH2 0x11C8 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0xC9C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 GT ISZERO PUSH2 0xCE0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF4 SWAP1 PUSH2 0x2EC1 JUMP JUMPDEST POP DUP1 DUP3 SUB JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x14 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0xD2D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF4 SWAP1 PUSH2 0x2F01 JUMP JUMPDEST POP ADD PUSH1 0x14 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0xD54 PUSH2 0x20ED JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH32 0x7E1D980800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0x7E1D9808 SWAP1 PUSH2 0xDAF SWAP1 DUP9 SWAP1 DUP8 SWAP1 DUP10 SWAP1 PUSH1 0x4 ADD PUSH2 0x2E31 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xDC9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xDDD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0xE01 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x279A JUMP JUMPDEST SWAP2 POP PUSH2 0xE15 DUP3 PUSH1 0x0 ADD MLOAD DUP4 PUSH1 0x60 ADD MLOAD PUSH2 0xCA4 JUMP JUMPDEST SWAP1 POP PUSH2 0xE25 DUP3 PUSH1 0x0 ADD MLOAD DUP3 PUSH2 0x1B8D JUMP JUMPDEST ISZERO ISZERO PUSH2 0xE5D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF4 SWAP1 PUSH2 0x2EF1 JUMP JUMPDEST DUP2 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0xE6E PUSH2 0x20ED JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE78 PUSH2 0x20ED JUMP JUMPDEST PUSH2 0xE80 PUSH2 0x20ED JUMP JUMPDEST PUSH2 0xE88 PUSH2 0x20ED JUMP JUMPDEST DUP6 SWAP4 POP PUSH2 0xE95 DUP11 DUP8 PUSH2 0xA06 JUMP JUMPDEST SWAP3 POP PUSH1 0x0 DUP4 PUSH1 0x60 ADD MLOAD GT ISZERO PUSH2 0xF29 JUMPI PUSH2 0xEB3 DUP9 DUP9 DUP6 PUSH1 0x60 ADD MLOAD PUSH2 0x1BAA JUMP JUMPDEST SWAP2 POP PUSH2 0xECC DUP7 PUSH2 0xEC7 DUP9 DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0xCA4 JUMP JUMPDEST PUSH2 0x1B8D JUMP JUMPDEST ISZERO ISZERO PUSH2 0xF04 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF4 SWAP1 PUSH2 0x2EF1 JUMP JUMPDEST PUSH2 0xF12 DUP5 DUP4 PUSH1 0x20 ADD MLOAD PUSH2 0xCA4 JUMP JUMPDEST PUSH1 0x60 DUP1 DUP5 ADD MLOAD SWAP1 DUP8 ADD MSTORE PUSH1 0x20 DUP1 DUP5 ADD MLOAD SWAP1 DUP8 ADD MSTORE SWAP4 POP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH32 0x7E1D980800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0x7E1D9808 SWAP1 PUSH2 0xF83 SWAP1 DUP14 SWAP1 DUP9 SWAP1 DUP15 SWAP1 PUSH1 0x4 ADD PUSH2 0x2E31 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xF9D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xFB1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0xFD5 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x279A JUMP JUMPDEST SWAP1 POP PUSH2 0xFE1 DUP6 DUP3 PUSH2 0x132E JUMP JUMPDEST POP POP POP POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x7472616E7366657228616464726573732C75696E743235362900000000000000 DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x19 ADD DUP2 KECCAK256 PUSH1 0x0 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP2 SWAP1 PUSH2 0x104C SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x24 ADD PUSH2 0x2DDD JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 DUP2 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 OR DUP4 MSTORE MLOAD DUP2 MLOAD SWAP2 SWAP3 SWAP1 SWAP2 DUP3 SWAP2 SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x10F0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x10D8 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x111D 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 SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP3 POP POP POP DUP1 ISZERO ISZERO PUSH2 0x116C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF4 SWAP1 PUSH2 0x2EE1 JUMP JUMPDEST RETURNDATASIZE ISZERO PUSH2 0x1189 JUMPI POP PUSH1 0x0 RETURNDATASIZE PUSH1 0x20 EQ ISZERO PUSH2 0x1189 JUMPI PUSH1 0x20 PUSH1 0x0 DUP1 RETURNDATACOPY POP PUSH1 0x0 MLOAD JUMPDEST DUP1 ISZERO ISZERO PUSH2 0x11C2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF4 SWAP1 PUSH2 0x2EE1 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x11DD PUSH2 0x11D7 DUP6 DUP5 PUSH2 0x1EE3 JUMP JUMPDEST DUP5 PUSH2 0x1F3E JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x11ED PUSH2 0x20ED JUMP JUMPDEST PUSH2 0x11F5 PUSH2 0x2116 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC75E0A8100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH4 0xC75E0A81 SWAP1 PUSH2 0x124C SWAP1 DUP10 SWAP1 PUSH1 0x4 ADD PUSH2 0x2F3F JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1266 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x127A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0x129E SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x27B8 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP4 POP PUSH1 0xFF AND PUSH1 0x3 EQ PUSH2 0x12B2 JUMPI PUSH2 0xA70 JUMP JUMPDEST PUSH2 0x12C4 DUP7 PUSH1 0xA0 ADD MLOAD DUP5 PUSH1 0x40 ADD MLOAD PUSH2 0xCA4 JUMP JUMPDEST SWAP2 POP PUSH2 0x12D0 DUP6 DUP4 PUSH2 0x1F55 JUMP JUMPDEST SWAP1 POP DUP1 DUP5 PUSH1 0x20 ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x12EF DUP2 DUP8 PUSH1 0xA0 ADD MLOAD DUP9 PUSH1 0x80 ADD MLOAD PUSH2 0x11C8 JUMP JUMPDEST DUP5 MSTORE PUSH1 0xA0 DUP7 ADD MLOAD PUSH1 0xC0 DUP8 ADD MLOAD PUSH2 0x1306 SWAP2 DUP4 SWAP2 PUSH2 0x11C8 JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0xA0 DUP7 ADD MLOAD PUSH1 0xE0 DUP8 ADD MLOAD PUSH2 0x1320 SWAP2 DUP4 SWAP2 PUSH2 0x11C8 JUMP JUMPDEST PUSH1 0x60 DUP6 ADD MSTORE POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD PUSH2 0x133C SWAP2 SWAP1 PUSH2 0x1B43 JUMP JUMPDEST DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MLOAD PUSH2 0x1352 SWAP2 SWAP1 PUSH2 0x1B43 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MLOAD PUSH2 0x136B SWAP2 SWAP1 PUSH2 0x1B43 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MLOAD PUSH2 0x1384 SWAP2 SWAP1 PUSH2 0x1B43 JUMP JUMPDEST PUSH1 0x60 SWAP1 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x4 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x13D2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF4 SWAP1 PUSH2 0x2F21 JUMP JUMPDEST POP POP PUSH1 0x20 ADD MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND SWAP1 JUMP JUMPDEST PUSH2 0x1405 PUSH2 0x20ED JUMP JUMPDEST PUSH1 0x0 PUSH2 0x140F PUSH2 0x20ED JUMP JUMPDEST PUSH2 0x1417 PUSH2 0x20ED JUMP JUMPDEST PUSH2 0x141F PUSH2 0x20ED JUMP JUMPDEST PUSH2 0x1431 DUP11 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x3A4 JUMPI INVALID JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE SWAP4 SWAP8 POP DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x14D7 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x14AC JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x14D7 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x14BA JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP11 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x14EB JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MLOAD PUSH2 0x160 ADD MSTORE PUSH1 0x2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x15C9 JUMPI PUSH2 0x1528 DUP11 DUP11 DUP9 PUSH2 0x1BAA JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP4 POP DUP7 GT ISZERO PUSH2 0x1566 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF4 SWAP1 PUSH2 0x2EF1 JUMP JUMPDEST PUSH2 0x1570 DUP6 DUP5 PUSH2 0x132E JUMP JUMPDEST PUSH2 0x158C PUSH2 0x1585 DUP7 PUSH1 0x0 ADD MLOAD DUP8 PUSH1 0x60 ADD MLOAD PUSH2 0x1B43 JUMP JUMPDEST DUP7 MLOAD PUSH2 0x1B8D JUMP JUMPDEST ISZERO ISZERO PUSH2 0x15C4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF4 SWAP1 PUSH2 0x2EF1 JUMP JUMPDEST PUSH2 0x1745 JUMP JUMPDEST PUSH2 0x15D3 DUP11 DUP8 PUSH2 0x560 JUMP JUMPDEST SWAP2 POP PUSH1 0x0 DUP3 PUSH1 0x60 ADD MLOAD GT ISZERO PUSH2 0x1608 JUMPI PUSH2 0x15F1 DUP9 DUP9 DUP5 PUSH1 0x60 ADD MLOAD PUSH2 0x1BAA JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 ADD MLOAD SWAP1 DUP8 ADD MSTORE PUSH1 0x60 DUP1 DUP3 ADD MLOAD SWAP1 DUP8 ADD MSTORE SWAP1 POP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH32 0xE5FA431B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0xE5FA431B SWAP1 PUSH2 0x1662 SWAP1 DUP14 SWAP1 DUP11 SWAP1 DUP15 SWAP1 PUSH1 0x4 ADD PUSH2 0x2E31 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x167C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1690 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0x16B4 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x279A JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP4 POP DUP7 EQ PUSH2 0x16F1 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF4 SWAP1 PUSH2 0x2EF1 JUMP JUMPDEST PUSH2 0x16FB DUP6 DUP5 PUSH2 0x132E JUMP JUMPDEST PUSH2 0x170D DUP6 PUSH1 0x20 ADD MLOAD DUP5 PUSH1 0x20 ADD MLOAD PUSH2 0x1B8D JUMP JUMPDEST ISZERO ISZERO PUSH2 0x1745 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF4 SWAP1 PUSH2 0x2EF1 JUMP JUMPDEST PUSH2 0xFE1 DUP5 CALLER DUP6 PUSH1 0x0 ADD MLOAD PUSH2 0xFEE JUMP JUMPDEST PUSH2 0x175C PUSH2 0x20ED JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 PUSH1 0x0 PUSH2 0x176B PUSH2 0x20ED JUMP JUMPDEST PUSH2 0x1773 PUSH2 0x20ED JUMP JUMPDEST DUP11 MLOAD SWAP5 POP DUP5 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x17A1 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP PUSH1 0x0 SWAP3 POP JUMPDEST DUP5 DUP4 LT ISZERO PUSH2 0x18DD JUMPI PUSH2 0x17D6 DUP7 DUP13 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x17C3 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0xE0 ADD MLOAD PUSH2 0x1B43 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE SWAP4 SWAP10 POP DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x187C JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1851 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x187C JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x185F JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP12 DUP5 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x188F JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MLOAD PUSH2 0x160 ADD MSTORE DUP11 MLOAD DUP12 SWAP1 DUP5 SWAP1 DUP2 LT PUSH2 0x18AC JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0xA0 ADD MLOAD DUP5 DUP5 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x18C8 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 PUSH2 0x17A9 JUMP JUMPDEST PUSH1 0x0 DUP7 GT ISZERO PUSH2 0x1908 JUMPI PUSH2 0x18F1 DUP10 DUP10 DUP9 PUSH2 0x1BAA JUMP JUMPDEST PUSH1 0x60 DUP1 DUP3 ADD MLOAD SWAP1 DUP10 ADD MSTORE PUSH1 0x20 DUP1 DUP3 ADD MLOAD SWAP1 DUP10 ADD MSTORE SWAP2 POP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH32 0x4D0AE54600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0x4D0AE546 SWAP1 PUSH2 0x1962 SWAP1 DUP15 SWAP1 DUP9 SWAP1 DUP16 SWAP1 PUSH1 0x4 ADD PUSH2 0x2DF8 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x197C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1990 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0x19B4 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x279A JUMP JUMPDEST SWAP1 POP PUSH2 0x19C0 DUP8 DUP3 PUSH2 0x132E JUMP JUMPDEST PUSH2 0x19D2 DUP8 PUSH1 0x20 ADD MLOAD DUP3 PUSH1 0x20 ADD MLOAD PUSH2 0x1B8D JUMP JUMPDEST ISZERO ISZERO PUSH2 0x1A0A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF4 SWAP1 PUSH2 0x2EF1 JUMP JUMPDEST PUSH1 0x0 SWAP3 POP JUMPDEST DUP5 DUP4 LT ISZERO PUSH2 0x1A48 JUMPI PUSH2 0x1A3D DUP12 DUP5 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1A28 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x140 ADD MLOAD CALLER PUSH2 0x1F6B JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 PUSH2 0x1A0F JUMP JUMPDEST POP POP POP POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP7 GT ISZERO PUSH2 0x1B3B JUMPI PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH32 0x2E1A7D4D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0x2E1A7D4D SWAP1 PUSH2 0x1AB8 SWAP1 DUP10 SWAP1 PUSH1 0x4 ADD PUSH2 0x2F90 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1AD2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1AE6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x1AF5 DUP6 DUP6 DUP6 PUSH2 0xBD6 JUMP JUMPDEST SWAP2 POP PUSH2 0x1B01 DUP7 DUP4 PUSH2 0xCA4 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 GT ISZERO PUSH2 0x1B3B JUMPI PUSH1 0x40 MLOAD CALLER SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x1B39 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x1B82 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF4 SWAP1 PUSH2 0x2EC1 JUMP JUMPDEST DUP1 SWAP2 POP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1B9F PUSH2 0x251C PUSH2 0x2710 DUP7 PUSH2 0x11C8 JUMP JUMPDEST SWAP1 SWAP3 LT ISZERO SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x1BB2 PUSH2 0x20ED JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1BBF PUSH2 0x20ED JUMP JUMPDEST PUSH1 0x0 SWAP4 POP JUMPDEST DUP8 MLOAD DUP5 LT ISZERO PUSH2 0x1ED8 JUMPI PUSH1 0x3 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x1C71 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1C46 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1C71 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1C54 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP9 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1C84 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH2 0x140 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP8 AND ISZERO MUL ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV SWAP3 DUP4 ADD DUP6 SWAP1 DIV DUP6 MUL DUP2 ADD DUP6 ADD SWAP1 SWAP2 MSTORE DUP2 DUP2 MSTORE SWAP3 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x1D39 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1D0E JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1D39 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1D1C JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP9 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1D4C JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MLOAD PUSH2 0x160 ADD MSTORE DUP5 MLOAD PUSH2 0x1D68 SWAP1 DUP8 SWAP1 PUSH2 0xCA4 JUMP JUMPDEST SWAP3 POP PUSH2 0x1DB6 DUP9 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1D7B JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0xA0 ADD MLOAD PUSH2 0xB0B DUP11 DUP8 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1D9A JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0x80 ADD MLOAD DUP12 DUP9 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xAF8 JUMPI INVALID JUMPDEST PUSH1 0x0 SLOAD DUP10 MLOAD SWAP2 SWAP4 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH4 0xB4BE83D5 SWAP1 DUP11 SWAP1 DUP8 SWAP1 DUP2 LT PUSH2 0x1DE7 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x1DFC DUP6 PUSH1 0x1 PUSH2 0x1B43 JUMP JUMPDEST DUP11 DUP9 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1E0A JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH29 0x100000000000000000000000000000000000000000000000000000000 MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1E4E SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2F50 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1E68 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1E7C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0x1EA0 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x279A JUMP JUMPDEST SWAP1 POP PUSH2 0x1EB4 DUP2 PUSH1 0x0 ADD MLOAD DUP3 PUSH1 0x60 ADD MLOAD PUSH2 0xCA4 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x1EC0 DUP6 DUP3 PUSH2 0x132E JUMP JUMPDEST DUP5 MLOAD DUP7 GT PUSH2 0x1ECD JUMPI PUSH2 0x1ED8 JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP4 ADD SWAP3 PUSH2 0x1BC4 JUMP JUMPDEST POP POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 ISZERO ISZERO PUSH2 0x1EF6 JUMPI PUSH1 0x0 SWAP2 POP PUSH2 0x1B86 JUMP JUMPDEST POP DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 ISZERO ISZERO PUSH2 0x1F06 JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x1B82 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF4 SWAP1 PUSH2 0x2EC1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 DUP5 DUP2 ISZERO ISZERO PUSH2 0x1F4C JUMPI INVALID JUMPDEST DIV SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x1F64 JUMPI DUP2 PUSH2 0xBCF JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 PUSH2 0x1F81 DUP6 PUSH1 0x10 PUSH4 0xFFFFFFFF PUSH2 0xCEB AND JUMP JUMPDEST SWAP3 POP PUSH2 0x1F94 DUP6 PUSH1 0x24 PUSH4 0xFFFFFFFF PUSH2 0x203B AND JUMP JUMPDEST SWAP2 POP PUSH2 0x1FA7 DUP6 PUSH1 0x64 PUSH4 0xFFFFFFFF PUSH2 0x2047 AND JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xB88D4FDE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH4 0xB88D4FDE SWAP1 PUSH2 0x2002 SWAP1 ADDRESS SWAP1 DUP9 SWAP1 DUP8 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x2D99 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x201C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2030 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBCF DUP4 DUP4 PUSH2 0x20A2 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x2055 DUP5 DUP5 PUSH2 0x203B JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP4 ADD SWAP3 POP DUP1 DUP4 ADD DUP5 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x209C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF4 SWAP1 PUSH2 0x2E91 JUMP JUMPDEST POP POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x20 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x20E4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF4 SWAP1 PUSH2 0x2EB1 JUMP JUMPDEST POP ADD PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBCF DUP3 CALLDATALOAD PUSH2 0x3036 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0x2153 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x2166 PUSH2 0x2161 DUP3 PUSH2 0x2FC5 JUMP JUMPDEST PUSH2 0x2F9E JUMP JUMPDEST DUP2 DUP2 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP3 POP DUP3 ADD DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x61C JUMPI DUP2 CALLDATALOAD DUP7 ADD PUSH2 0x218E DUP9 DUP3 PUSH2 0x220D JUMP JUMPDEST DUP5 MSTORE POP PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2178 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0x21B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x21C3 PUSH2 0x2161 DUP3 PUSH2 0x2FC5 JUMP JUMPDEST DUP2 DUP2 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP3 POP DUP3 ADD DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x61C JUMPI DUP2 CALLDATALOAD DUP7 ADD PUSH2 0x21EB DUP9 DUP3 PUSH2 0x231D JUMP JUMPDEST DUP5 MSTORE POP PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x21D5 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBCF DUP3 MLOAD PUSH2 0x307B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0x221E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x222C PUSH2 0x2161 DUP3 PUSH2 0x2FE6 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP4 ADD DUP6 DUP4 DUP4 ADD GT ISZERO PUSH2 0x2248 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA70 DUP4 DUP3 DUP5 PUSH2 0x3084 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2265 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x226F PUSH1 0x80 PUSH2 0x2F9E JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x227D DUP5 DUP5 PUSH2 0x2201 JUMP JUMPDEST DUP3 MSTORE POP PUSH1 0x20 PUSH2 0x228E DUP5 DUP5 DUP4 ADD PUSH2 0x2201 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP PUSH1 0x40 PUSH2 0x22A2 DUP5 DUP3 DUP6 ADD PUSH2 0x2201 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 PUSH2 0x22B6 DUP5 DUP3 DUP6 ADD PUSH2 0x2201 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x22D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x22DE PUSH1 0x60 PUSH2 0x2F9E JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x22EC DUP5 DUP5 PUSH2 0x247E JUMP JUMPDEST DUP3 MSTORE POP PUSH1 0x20 PUSH2 0x22FD DUP5 DUP5 DUP4 ADD PUSH2 0x2201 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP PUSH1 0x40 PUSH2 0x2311 DUP5 DUP3 DUP6 ADD PUSH2 0x2201 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x180 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2330 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x233B PUSH2 0x180 PUSH2 0x2F9E JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2349 DUP5 DUP5 PUSH2 0x2136 JUMP JUMPDEST DUP3 MSTORE POP PUSH1 0x20 PUSH2 0x235A DUP5 DUP5 DUP4 ADD PUSH2 0x2136 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP PUSH1 0x40 PUSH2 0x236E DUP5 DUP3 DUP6 ADD PUSH2 0x2136 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 PUSH2 0x2382 DUP5 DUP3 DUP6 ADD PUSH2 0x2136 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE POP PUSH1 0x80 PUSH2 0x2396 DUP5 DUP3 DUP6 ADD PUSH2 0x2472 JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE POP PUSH1 0xA0 PUSH2 0x23AA DUP5 DUP3 DUP6 ADD PUSH2 0x2472 JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE POP PUSH1 0xC0 PUSH2 0x23BE DUP5 DUP3 DUP6 ADD PUSH2 0x2472 JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE POP PUSH1 0xE0 PUSH2 0x23D2 DUP5 DUP3 DUP6 ADD PUSH2 0x2472 JUMP JUMPDEST PUSH1 0xE0 DUP4 ADD MSTORE POP PUSH2 0x100 PUSH2 0x23E7 DUP5 DUP3 DUP6 ADD PUSH2 0x2472 JUMP JUMPDEST PUSH2 0x100 DUP4 ADD MSTORE POP PUSH2 0x120 PUSH2 0x23FD DUP5 DUP3 DUP6 ADD PUSH2 0x2472 JUMP JUMPDEST PUSH2 0x120 DUP4 ADD MSTORE POP PUSH2 0x140 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x241F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x242B DUP5 DUP3 DUP6 ADD PUSH2 0x220D JUMP JUMPDEST PUSH2 0x140 DUP4 ADD MSTORE POP PUSH2 0x160 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x244D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2459 DUP5 DUP3 DUP6 ADD PUSH2 0x220D JUMP JUMPDEST PUSH2 0x160 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBCF DUP3 CALLDATALOAD PUSH2 0x3074 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBCF DUP3 CALLDATALOAD PUSH2 0x307B JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBCF DUP3 MLOAD PUSH2 0x307E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x24A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x24AC DUP8 DUP8 PUSH2 0x2136 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x24BD DUP8 DUP3 DUP9 ADD PUSH2 0x2136 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 PUSH2 0x24CE DUP8 DUP3 DUP9 ADD PUSH2 0x2472 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x24EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x24F7 DUP8 DUP3 DUP9 ADD PUSH2 0x220D JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2518 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2524 DUP7 DUP7 PUSH2 0x2136 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x2535 DUP7 DUP3 DUP8 ADD PUSH2 0x2472 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2552 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x255E DUP7 DUP3 DUP8 ADD PUSH2 0x220D JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x2581 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2598 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x25A4 DUP10 DUP3 DUP11 ADD PUSH2 0x21A4 JUMP JUMPDEST SWAP7 POP POP PUSH1 0x20 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x25C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x25CD DUP10 DUP3 DUP11 ADD PUSH2 0x2142 JUMP JUMPDEST SWAP6 POP POP PUSH1 0x40 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x25EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x25F6 DUP10 DUP3 DUP11 ADD PUSH2 0x21A4 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2613 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x261F DUP10 DUP3 DUP11 ADD PUSH2 0x2142 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x80 PUSH2 0x2630 DUP10 DUP3 DUP11 ADD PUSH2 0x2466 JUMP JUMPDEST SWAP3 POP POP PUSH1 0xA0 PUSH2 0x2641 DUP10 DUP3 DUP11 ADD PUSH2 0x2136 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x2669 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2680 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x268C DUP11 DUP3 DUP12 ADD PUSH2 0x21A4 JUMP JUMPDEST SWAP8 POP POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x26A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x26B5 DUP11 DUP3 DUP12 ADD PUSH2 0x2142 JUMP JUMPDEST SWAP7 POP POP PUSH1 0x40 DUP9 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x26D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x26DE DUP11 DUP3 DUP12 ADD PUSH2 0x21A4 JUMP JUMPDEST SWAP6 POP POP PUSH1 0x60 DUP9 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x26FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2707 DUP11 DUP3 DUP12 ADD PUSH2 0x2142 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x80 PUSH2 0x2718 DUP11 DUP3 DUP12 ADD PUSH2 0x2472 JUMP JUMPDEST SWAP4 POP POP PUSH1 0xA0 PUSH2 0x2729 DUP11 DUP3 DUP12 ADD PUSH2 0x2466 JUMP JUMPDEST SWAP3 POP POP PUSH1 0xC0 PUSH2 0x273A DUP11 DUP3 DUP12 ADD PUSH2 0x2136 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x275C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2773 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x277F DUP6 DUP3 DUP7 ADD PUSH2 0x21A4 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x2790 DUP6 DUP3 DUP7 ADD PUSH2 0x2472 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x27AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x11DD DUP5 DUP5 PUSH2 0x2253 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x27CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x11DD DUP5 DUP5 PUSH2 0x22C2 JUMP JUMPDEST PUSH2 0x27DF DUP2 PUSH2 0x3036 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x27F0 DUP3 PUSH2 0x3032 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP DUP4 PUSH1 0x20 DUP3 MUL DUP6 ADD PUSH2 0x2809 DUP6 PUSH2 0x302C JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x2840 JUMPI DUP4 DUP4 SUB DUP9 MSTORE PUSH2 0x2824 DUP4 DUP4 MLOAD PUSH2 0x2907 JUMP JUMPDEST SWAP3 POP PUSH2 0x282F DUP3 PUSH2 0x302C JUMP JUMPDEST PUSH1 0x20 SWAP9 SWAP1 SWAP9 ADD SWAP8 SWAP2 POP PUSH1 0x1 ADD PUSH2 0x280C JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2857 DUP3 PUSH2 0x3032 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP DUP4 PUSH1 0x20 DUP3 MUL DUP6 ADD PUSH2 0x2870 DUP6 PUSH2 0x302C JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x2840 JUMPI DUP4 DUP4 SUB DUP9 MSTORE PUSH2 0x288B DUP4 DUP4 MLOAD PUSH2 0x2C84 JUMP JUMPDEST SWAP3 POP PUSH2 0x2896 DUP3 PUSH2 0x302C JUMP JUMPDEST PUSH1 0x20 SWAP9 SWAP1 SWAP9 ADD SWAP8 SWAP2 POP PUSH1 0x1 ADD PUSH2 0x2873 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x28B2 DUP3 PUSH2 0x3032 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH2 0x28C4 DUP4 PUSH2 0x302C JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x28F4 JUMPI PUSH2 0x28DA DUP7 DUP4 MLOAD PUSH2 0x2D90 JUMP JUMPDEST PUSH2 0x28E3 DUP3 PUSH2 0x302C JUMP JUMPDEST PUSH1 0x20 SWAP7 SWAP1 SWAP7 ADD SWAP6 SWAP2 POP PUSH1 0x1 ADD PUSH2 0x28C7 JUMP JUMPDEST POP SWAP4 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x27DF DUP2 PUSH2 0x304F JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2912 DUP3 PUSH2 0x3032 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH2 0x2926 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x3090 JUMP JUMPDEST PUSH2 0x292F DUP2 PUSH2 0x30BC JUMP JUMPDEST SWAP1 SWAP4 ADD PUSH1 0x20 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x23 DUP2 MSTORE PUSH32 0x44454641554C545F46554E4354494F4E5F574554485F434F4E54524143545F4F PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x4E4C590000000000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x11 DUP2 MSTORE PUSH32 0x494E56414C49445F4D53475F56414C5545000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x30 DUP2 MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F4E45535445445F4259544553 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x5F4C454E4754485F524551554952454400000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x17 DUP2 MSTORE PUSH32 0x56414C55455F475245415445525F5448414E5F5A45524F000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F33325F4C454E4754485F5245 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x10 DUP2 MSTORE PUSH32 0x55494E543235365F4F564552464C4F5700000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x18 DUP2 MSTORE PUSH32 0x4645455F50524F504F5254494F4E5F544F4F5F4C415247450000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0xF DUP2 MSTORE PUSH32 0x5452414E534645525F4641494C45440000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x16 DUP2 MSTORE PUSH32 0x554E41434345505441424C455F5448524553484F4C4400000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F32305F4C454E4754485F5245 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x17 DUP2 MSTORE PUSH32 0x554E535550504F525445445F544F4B454E5F50524F5859000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x25 DUP2 MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F345F4C454E4754485F524551 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x5549524544000000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x80 DUP4 ADD SWAP1 PUSH2 0x2C4B DUP5 DUP3 PUSH2 0x2D90 JUMP JUMPDEST POP PUSH1 0x20 DUP3 ADD MLOAD PUSH2 0x2C5E PUSH1 0x20 DUP6 ADD DUP3 PUSH2 0x2D90 JUMP JUMPDEST POP PUSH1 0x40 DUP3 ADD MLOAD PUSH2 0x2C71 PUSH1 0x40 DUP6 ADD DUP3 PUSH2 0x2D90 JUMP JUMPDEST POP PUSH1 0x60 DUP3 ADD MLOAD PUSH2 0x11C2 PUSH1 0x60 DUP6 ADD DUP3 PUSH2 0x2D90 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH2 0x180 DUP5 ADD SWAP1 PUSH2 0x2C99 DUP6 DUP3 PUSH2 0x27D6 JUMP JUMPDEST POP PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x2CAC PUSH1 0x20 DUP7 ADD DUP3 PUSH2 0x27D6 JUMP JUMPDEST POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x2CBF PUSH1 0x40 DUP7 ADD DUP3 PUSH2 0x27D6 JUMP JUMPDEST POP PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x2CD2 PUSH1 0x60 DUP7 ADD DUP3 PUSH2 0x27D6 JUMP JUMPDEST POP PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x2CE5 PUSH1 0x80 DUP7 ADD DUP3 PUSH2 0x2D90 JUMP JUMPDEST POP PUSH1 0xA0 DUP4 ADD MLOAD PUSH2 0x2CF8 PUSH1 0xA0 DUP7 ADD DUP3 PUSH2 0x2D90 JUMP JUMPDEST POP PUSH1 0xC0 DUP4 ADD MLOAD PUSH2 0x2D0B PUSH1 0xC0 DUP7 ADD DUP3 PUSH2 0x2D90 JUMP JUMPDEST POP PUSH1 0xE0 DUP4 ADD MLOAD PUSH2 0x2D1E PUSH1 0xE0 DUP7 ADD DUP3 PUSH2 0x2D90 JUMP JUMPDEST POP PUSH2 0x100 DUP4 ADD MLOAD PUSH2 0x2D33 PUSH2 0x100 DUP7 ADD DUP3 PUSH2 0x2D90 JUMP JUMPDEST POP PUSH2 0x120 DUP4 ADD MLOAD PUSH2 0x2D48 PUSH2 0x120 DUP7 ADD DUP3 PUSH2 0x2D90 JUMP JUMPDEST POP PUSH2 0x140 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH2 0x140 DUP7 ADD MSTORE PUSH2 0x2D62 DUP3 DUP3 PUSH2 0x2907 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x160 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH2 0x160 DUP7 ADD MSTORE PUSH2 0x2D7E DUP3 DUP3 PUSH2 0x2907 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x27DF DUP2 PUSH2 0x3074 JUMP JUMPDEST PUSH2 0x27DF DUP2 PUSH2 0x307B JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x2DA7 DUP3 DUP8 PUSH2 0x27D6 JUMP JUMPDEST PUSH2 0x2DB4 PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x27D6 JUMP JUMPDEST PUSH2 0x2DC1 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x2D90 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x2DD3 DUP2 DUP5 PUSH2 0x2907 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x2DEB DUP3 DUP6 PUSH2 0x27D6 JUMP JUMPDEST PUSH2 0xBCF PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2D90 JUMP JUMPDEST PUSH1 0x60 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x2E09 DUP2 DUP7 PUSH2 0x284C JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x2E1D DUP2 DUP6 PUSH2 0x28A7 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x2D7E DUP2 DUP5 PUSH2 0x27E5 JUMP JUMPDEST PUSH1 0x60 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x2E42 DUP2 DUP7 PUSH2 0x284C JUMP JUMPDEST SWAP1 POP PUSH2 0x2E51 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x2D90 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x2D7E DUP2 DUP5 PUSH2 0x27E5 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xCE5 DUP3 DUP5 PUSH2 0x28FE JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xCE5 DUP2 PUSH2 0x293C JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xCE5 DUP2 PUSH2 0x2992 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xCE5 DUP2 PUSH2 0x29C2 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xCE5 DUP2 PUSH2 0x2A18 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xCE5 DUP2 PUSH2 0x2A48 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xCE5 DUP2 PUSH2 0x2A9E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xCE5 DUP2 PUSH2 0x2ACE JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xCE5 DUP2 PUSH2 0x2AFE JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xCE5 DUP2 PUSH2 0x2B2E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xCE5 DUP2 PUSH2 0x2B5E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xCE5 DUP2 PUSH2 0x2BB4 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xCE5 DUP2 PUSH2 0x2BE4 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0xCE5 DUP3 DUP5 PUSH2 0x2C3A JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xBCF DUP2 DUP5 PUSH2 0x2C84 JUMP JUMPDEST PUSH1 0x60 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x2F61 DUP2 DUP7 PUSH2 0x2C84 JUMP JUMPDEST SWAP1 POP PUSH2 0x2F70 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x2D90 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x2D7E DUP2 DUP5 PUSH2 0x2907 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xCE5 DUP3 DUP5 PUSH2 0x2D87 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xCE5 DUP3 DUP5 PUSH2 0x2D90 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2FBD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x2FDC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 SWAP1 DUP2 MUL ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x2FFD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x1F SWAP2 SWAP1 SWAP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND SWAP1 JUMP JUMPDEST PUSH2 0xFFFF AND SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0xFF AND SWAP1 JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x30AB JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3093 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x11C2 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP1 JUMP STOP LOG2 PUSH6 0x627A7A723058 KECCAK256 SELFDESTRUCT 0x5c 0x1e ORIGIN JUMP SWAP9 SWAP1 SWAP16 REVERT CALLDATALOAD SWAP1 AND PUSH12 0xDFF6A2F31FF4394822A4E1B9 0xea GT SWAP11 PUSH11 0x813E6C6C6578706572696D PUSH6 0x6E74616CF500 CALLDATACOPY ",
+ "sourceMap": "834:541:0:-;;;989:384;8:9:-1;5:2;;;30:1;27;20:12;5:2;989:384:0;;;;;;;;;;;;;;;;;;;;;;;;1444:20:4;894:31:1;;-1:-1:-1;;;;;894:31:1;;;-1:-1:-1;;;;;;894:31:1;;;;;;;935:38;;;;;;;;;;;983:9;:34;;;;;;;;;;;;1027:30;;1215:9:0;;1238:11;;1263:9;;1286:13;;1313:14;;1027:30:1;;:14;;:30;;;;;:::i;:::-;-1:-1:-1;1067:32:1;;;;:15;;:32;;;;;:::i;:::-;-1:-1:-1;;1467:8:4;;1204:32;;;;;;;;;;;;;;;;1467:37;;;-1:-1:-1;;;;;1467:8:4;;;;-1:-1:-1;1467:22:4;;-1:-1:-1;1467:37:4;;-1:-1:-1;1204:32:4;;-1:-1:-1;1467:37:4;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1467:37:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1467:37:4;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;1467:37:4;;;;;;;;;1444:60;-1:-1:-1;;;;;;1518:26:4;;;1514:155;;1560:11;;:43;;;;;-1:-1:-1;;;;;1560:11:4;;;;:19;;:43;;1580:12;;-1:-1:-1;;1383:10:4;1560:43;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1560:43:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1560:43:4;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;1560:43:4;;;;;;;;;-1:-1:-1;1617:9:4;;:41;;;;;-1:-1:-1;;;;;1617:9:4;;;;:17;;:41;;1635:12;;-1:-1:-1;;1383:10:4;1617:41;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1617:41:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1617:41:4;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;1617:41:4;;;;;;;;;;1514:155;1400:275;989:384:0;;;;;834:541;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;834:541:0;;;-1:-1:-1;834:541:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;5:122:-1:-;;83:39;114:6;108:13;83:39;;;74:48;68:59;-1:-1;;;68:59;134:116;;209:36;237:6;231:13;209:36;;258:442;;363:4;351:17;;347:27;-1:-1;337:2;;388:1;385;378:12;337:2;418:6;412:13;440:64;455:48;496:6;455:48;;;440:64;;;431:73;;524:6;517:5;510:21;560:4;552:6;548:17;593:4;586:5;582:16;628:3;619:6;614:3;610:16;607:25;604:2;;;645:1;642;635:12;604:2;655:39;687:6;682:3;677;655:39;;;330:370;;;;;;;;708:263;;823:2;811:9;802:7;798:23;794:32;791:2;;;839:1;836;829:12;791:2;874:1;891:64;947:7;927:9;891:64;;;881:74;785:186;-1:-1;;;;785:186;978:1003;;;;;;1179:3;1167:9;1158:7;1154:23;1150:33;1147:2;;;1196:1;1193;1186:12;1147:2;1231:1;1248:64;1304:7;1284:9;1248:64;;;1238:74;;1210:108;1349:2;1367:64;1423:7;1414:6;1403:9;1399:22;1367:64;;;1357:74;;1328:109;1468:2;1486:64;1542:7;1533:6;1522:9;1518:22;1486:64;;;1476:74;;1447:109;1608:2;1597:9;1593:18;1587:25;-1:-1;;;;;1624:6;1621:30;1618:2;;;1664:1;1661;1654:12;1618:2;1684:73;1749:7;1740:6;1729:9;1725:22;1684:73;;;1674:83;;1566:197;1815:3;1804:9;1800:19;1794:26;-1:-1;;;;;1832:6;1829:30;1826:2;;;1872:1;1869;1862:12;1826:2;1892:73;1957:7;1948:6;1937:9;1933:22;1892:73;;;1882:83;;1773:198;1141:840;;;;;;;;;1988:257;;2100:2;2088:9;2079:7;2075:23;2071:32;2068:2;;;2116:1;2113;2106:12;2068:2;2151:1;2168:61;2221:7;2201:9;2168:61;;2252:110;2325:31;2350:5;2325:31;;;2320:3;2313:44;2307:55;;;2369:107;2440:30;2464:5;2440:30;;2483:110;2556:31;2581:5;2556:31;;2600:294;2736:2;2721:18;;2750:61;2725:9;2784:6;2750:61;;;2822:62;2880:2;2869:9;2865:18;2856:6;2822:62;;2901:189;3007:2;2992:18;;3021:59;2996:9;3053:6;3021:59;;;2978:112;;;;;3097:256;3159:2;3153:9;3185:17;;;-1:-1;;;;;3245:34;;3281:22;;;3242:62;3239:2;;;3317:1;3314;3307:12;3239:2;3333;3326:22;3137:216;;-1:-1;3137:216;3360:258;;-1:-1;;;;;3495:6;3492:30;3489:2;;;3535:1;3532;3525:12;3489:2;-1:-1;3608:4;3579;3556:17;;;;-1:-1;;3552:33;3598:15;;3426:192;3625:128;-1:-1;;;;;3694:54;;3677:76;3760:151;3839:66;3828:78;;3811:100;4139:92;4212:13;4205:21;;4188:43;4239:268;4304:1;4311:101;4325:6;4322:1;4319:13;4311:101;;;4392:11;;;4386:18;4373:11;;;4366:39;4347:2;4340:10;4311:101;;;4427:6;4424:1;4421:13;4418:2;;;4492:1;4483:6;4478:3;4474:16;4467:27;4418:2;4288:219;;;;;;834:541:0;;;;;;"
},
"deployedBytecode": {
"linkReferences": {},
- "object": "0x6080604052600436106100cf5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663150b7a02811461012b578063169645f2146101615780631c5b1ec41461018157806320472cf7146101a15780634a00f7d5146101c3578063725cef06146101d85780638da5cb5b146101eb578063b3cd42541461020d578063bc063e1a14610222578063e58e9c1614610237578063f0b9e5ba14610257578063f2afd85a14610277578063f2fde38b14610297578063fb4f9087146102b7575b60025473ffffffffffffffffffffffffffffffffffffffff163314610129576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610120906132e1565b60405180910390fd5b005b34801561013757600080fd5b5061014b6101463660046128b0565b6102cc565b60405161015891906132d3565b60405180910390f35b61017461016f36600461298e565b61032c565b60405161015891906133a1565b34801561018d57600080fd5b5061017461019c366004612b6f565b6105f8565b3480156101ad57600080fd5b506101b66106be565b60405161015891906133f2565b3480156101cf57600080fd5b5061014b6106c4565b6101746101e6366004612a74565b6106f9565b3480156101f757600080fd5b50610200610ac7565b60405161015891906131fb565b34801561021957600080fd5b506101b6610ae3565b34801561022e57600080fd5b506101b6610ae9565b34801561024357600080fd5b50610174610252366004612b6f565b610aef565b34801561026357600080fd5b5061014b610272366004612929565b610bec565b34801561028357600080fd5b50610129610292366004612bde565b610c4c565b3480156102a357600080fd5b506101296102b2366004612874565b610ec3565b3480156102c357600080fd5b5061014b610f74565b604080517f6f6e455243373231526563656976656428616464726573732c6164647265737381527f2c75696e743235362c62797465732900000000000000000000000000000000006020820152905190819003602f019020949350505050565b6103346124b3565b3460008080808411610372576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012090613311565b61037d848888610fcf565b9250610389848461109d565b9150600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016000604051808303818588803b15801561041157600080fd5b505af1158015610425573d6000803e3d6000fd5b50505050506104528b600081518110151561043c57fe5b90602001906020020151610140015160106110b4565b60058054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010060018816150201909516949094049384018190048102820181019092528281529394508301828280156104f85780601f106104cd576101008083540402835291602001916104f8565b820191906000526020600020905b8154815290600101906020018083116104db57829003601f168201915b50505050508b600081518110151561050c57fe5b60209081029091010151610160015260035473ffffffffffffffffffffffffffffffffffffffff82811691161415610550576105498b8b84611115565b9450610560565b61055d8b8b8b8b8661122f565b94505b602085015184101561059e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610120906132f1565b602085015182146105db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012090613351565b6105ea813387600001516113b7565b505050509695505050505050565b6106006124b3565b600080600061060d6124b3565b600093505b86518410156106b45761062986866000015161109d565b925061066c878581518110151561063c57fe5b9060200190602002015160a00151888681518110151561065857fe5b906020019060200201516080015185611591565b915061068f878581518110151561067f57fe5b90602001906020020151836115ae565b905061069b85826116fc565b84518614156106a9576106b4565b600190930192610612565b5050505092915050565b61251c81565b604080517f4552433230546f6b656e286164647265737329000000000000000000000000008152905190819003601301902081565b6107016124b3565b34600080821161073d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012090613311565b60008611610777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012090613311565b61079f8a600081518110151561078957fe5b906020019060200201516101400151600061175e565b604080517f4552433230546f6b656e28616464726573732900000000000000000000000000815290519081900360130190209091507fffffffff00000000000000000000000000000000000000000000000000000000808316911614806108815750604080517f455243373231546f6b656e28616464726573732c75696e743235362c6279746581527f7329000000000000000000000000000000000000000000000000000000000000602082015290519081900360220190207fffffffff000000000000000000000000000000000000000000000000000000008281169116145b15156108b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012090613381565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016000604051808303818588803b15801561093f57600080fd5b505af1158015610953573d6000803e3d6000fd5b5050604080517f4552433230546f6b656e28616464726573732900000000000000000000000000815290519081900360130190207fffffffff000000000000000000000000000000000000000000000000000000008581169116141592506109cc915050576109c58a8a8a8a8a6117cb565b9250610a5f565b604080517f455243373231546f6b656e28616464726573732c75696e743235362c6279746581527f7329000000000000000000000000000000000000000000000000000000000000602082015290519081900360220190207fffffffff0000000000000000000000000000000000000000000000000000000082811691161415610a5f57610a5c8a8a8a8a611b22565b92505b6020830151821015610a9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610120906132f1565b610aba610aae83856020015161109d565b84602001518787611e24565b5050979650505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b61271081565b6103e881565b610af76124b3565b6000806000610b046124b3565b600093505b86518410156106b457610b2086866000015161109d565b9250610b878785815181101515610b3357fe5b9060200190602002015160a00151610b818987815181101515610b5257fe5b90602001906020020151608001518a88815181101515610b6e57fe5b9060200190602002015160e0015161109d565b85611591565b9150610bb48785815181101515610b9a57fe5b90602001906020020151610baf846001611f11565b6115ae565b9050610bc88160000151826060015161109d565b8152610bd485826116fc565b84518611610be1576106b4565b600190930192610b09565b604080517f6f6e455243373231526563656976656428616464726573732c75696e7432353681527f2c62797465732900000000000000000000000000000000000000000000000000602082015290519081900360270190205b9392505050565b6000805473ffffffffffffffffffffffffffffffffffffffff163314610c9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012090613361565b6001546040517f6070410800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690636070410890610cf49085906004016132d3565b602060405180830381600087803b158015610d0e57600080fd5b505af1158015610d22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610d469190810190612892565b905073ffffffffffffffffffffffffffffffffffffffff811615610ebf576002546006546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163095ea7b391610dbe9185919060040161324d565b602060405180830381600087803b158015610dd857600080fd5b505af1158015610dec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610e109190810190612bc0565b506003546006546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163095ea7b391610e6b9185919060040161324d565b602060405180830381600087803b158015610e8557600080fd5b505af1158015610e99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610ebd9190810190612bc0565b505b5050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610f14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012090613361565b73ffffffffffffffffffffffffffffffffffffffff811615610f7157600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b604080517f455243373231546f6b656e28616464726573732c75696e743235362c6279746581527f73290000000000000000000000000000000000000000000000000000000000006020820152905190819003602201902081565b6000808361ffff16118015610ff9575073ffffffffffffffffffffffffffffffffffffffff821615155b15610c45576103e861ffff8416111561103e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012090613331565b61104f61ffff841661271086611591565b60405190915073ffffffffffffffffffffffffffffffffffffffff83169082156108fc029083906000818181858888f19350505050158015611095573d6000803e3d6000fd5b509392505050565b6000828211156110a957fe5b508082035b92915050565b6000816014018351101515156110f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012090613371565b50016014015173ffffffffffffffffffffffffffffffffffffffff1690565b61111d6124b3565b6001546040517f7e1d980800000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff1690637e1d980890611178908890879089906004016132a1565b608060405180830381600087803b15801561119257600080fd5b505af11580156111a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506111ca9190810190612bfc565b91506111de8260000151836060015161109d565b90506111ee826000015182611f20565b1515611226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012090613351565b81529392505050565b6112376124b3565b60006112416124b3565b6112496124b3565b6112516124b3565b85935061125e8a87611f3d565b92506000836060015111156112f25761127c88888560600151611fa7565b91506112958661129088856020015161109d565b611f20565b15156112cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012090613351565b6112db84836020015161109d565b606080840151908701526020808401519087015293505b6001546040517f7e1d980800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690637e1d98089061134c908d9088908e906004016132a1565b608060405180830381600087803b15801561136657600080fd5b505af115801561137a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061139e9190810190612bfc565b90506113aa85826116fc565b5050505095945050505050565b604080517f7472616e7366657228616464726573732c75696e7432353629000000000000008152905190819003601901812060009173ffffffffffffffffffffffffffffffffffffffff86169190611415908690869060240161324d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931783525181519192909182919080838360005b838110156114b95781810151838201526020016114a1565b50505050905090810190601f1680156114e65780820380516001836020036101000a031916815260200191505b509150506000604051808303816000865af192505050801515611535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012090613341565b3d15611552575060003d602014156115525760206000803e506000515b80151561158b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012090613341565b50505050565b60006115a66115a085846122e0565b84612304565b949350505050565b6115b66124b3565b6115be6124dc565b6001546040517fc75e0a81000000000000000000000000000000000000000000000000000000008152600091829173ffffffffffffffffffffffffffffffffffffffff9091169063c75e0a81906116199089906004016133af565b606060405180830381600087803b15801561163357600080fd5b505af1158015611647573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061166b9190810190612c1a565b805190935060ff1660031461167f576116f3565b6116918660a00151846040015161109d565b915061169d858361231b565b9050808460200181815250506116bc818760a001518860800151611591565b845260a086015160c08701516116d3918391611591565b604085015260a086015160e08701516116ed918391611591565b60608501525b50505092915050565b8151815161170a9190611f11565b8252602080830151908201516117209190611f11565b6020830152604080830151908201516117399190611f11565b6040830152606080830151908201516117529190611f11565b60609092019190915250565b6000816004018351101515156117a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012090613391565b5050602001517fffffffff000000000000000000000000000000000000000000000000000000001690565b6117d36124b3565b60006117dd6124b3565b6117e56124b3565b6117ed6124b3565b6117ff8a600081518110151561043c57fe5b60058054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010060018816150201909516949094049384018190048102820181019092528281529397508301828280156118a55780601f1061187a576101008083540402835291602001916118a5565b820191906000526020600020905b81548152906001019060200180831161188857829003601f168201915b50505050508a60008151811015156118b957fe5b60209081029091010151610160015260035473ffffffffffffffffffffffffffffffffffffffff85811691161415611997576118f68a8a88611fa7565b8051909350861115611934576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012090613351565b61193e85846116fc565b61195a61195386600001518760600151611f11565b8651611f20565b1515611992576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012090613351565b611b13565b6119a18a876105f8565b91506000826060015111156119d6576119bf88888460600151611fa7565b602080820151908701526060808201519087015290505b6001546040517fe5fa431b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e5fa431b90611a30908d908a908e906004016132a1565b608060405180830381600087803b158015611a4a57600080fd5b505af1158015611a5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611a829190810190612bfc565b80519093508614611abf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012090613351565b611ac985846116fc565b611adb85602001518460200151611f20565b1515611b13576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012090613351565b6113aa843385600001516113b7565b611b2a6124b3565b60008060606000611b396124b3565b611b416124b3565b8a51945084604051908082528060200260200182016040528015611b6f578160200160208202803883390190505b509350600092505b84831015611cab57611ba4868c85815181101515611b9157fe5b9060200190602002015160e00151611f11565b60058054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152939950830182828015611c4a5780601f10611c1f57610100808354040283529160200191611c4a565b820191906000526020600020905b815481529060010190602001808311611c2d57829003601f168201915b50505050508b84815181101515611c5d57fe5b6020908102909101015161016001528a518b9084908110611c7a57fe5b9060200190602002015160a001518484815181101515611c9657fe5b60209081029091010152600190920191611b77565b6000861115611cd657611cbf898988611fa7565b606080820151908901526020808201519089015291505b6001546040517f4d0ae54600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690634d0ae54690611d30908e9088908f90600401613268565b608060405180830381600087803b158015611d4a57600080fd5b505af1158015611d5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611d829190810190612bfc565b9050611d8e87826116fc565b611da087602001518260200151611f20565b1515611dd8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012090613351565b600092505b84831015611e1657611e0b8b84815181101515611df657fe5b90602001906020020151610140015133612331565b600190920191611ddd565b505050505050949350505050565b6000806000861115611f09576002546040517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690632e1a7d4d90611e86908990600401613400565b600060405180830381600087803b158015611ea057600080fd5b505af1158015611eb4573d6000803e3d6000fd5b50505050611ec3858585610fcf565b9150611ecf868361109d565b90506000811115611f0957604051339082156108fc029083906000818181858888f19350505050158015611f07573d6000803e3d6000fd5b505b505050505050565b600082820183811015610c4557fe5b600080611f3261251c61271086611591565b909210159392505050565b611f456124b3565b600080611f506124b3565b600092505b85518310156116f357611f6c85856020015161109d565b9150611f7f868481518110151561067f57fe5b9050611f8b84826116fc565b8484602001511415611f9c576116f3565b600190920191611f55565b611faf6124b3565b6000806000611fbc6124b3565b600093505b87518410156122d5576004805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f8101849004840282018401909252818152929183018282801561206e5780601f106120435761010080835404028352916020019161206e565b820191906000526020600020905b81548152906001019060200180831161205157829003601f168201915b5050505050888581518110151561208157fe5b602090810290910181015161014001919091526005805460408051601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001871615020190941693909304928301859004850281018501909152818152928301828280156121365780601f1061210b57610100808354040283529160200191612136565b820191906000526020600020905b81548152906001019060200180831161211957829003601f168201915b5050505050888581518110151561214957fe5b602090810290910101516101600152845161216590879061109d565b92506121b3888581518110151561217857fe5b9060200190602002015160a00151610b818a8781518110151561219757fe5b90602001906020020151608001518b88815181101515610b6e57fe5b600154895191935073ffffffffffffffffffffffffffffffffffffffff169063b4be83d5908a90879081106121e457fe5b906020019060200201516121f9856001611f11565b8a8881518110151561220757fe5b906020019060200201516040518463ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161224b939291906133c0565b608060405180830381600087803b15801561226557600080fd5b505af1158015612279573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061229d9190810190612bfc565b90506122b18160000151826060015161109d565b81526122bd85826116fc565b845186116122ca576122d5565b600190930192611fc1565b505050509392505050565b60008282028315806122fc57508284828115156122f957fe5b04145b1515610c4557fe5b600080828481151561231257fe5b04949350505050565b600081831061232a5781610c45565b5090919050565b600080606061234785601063ffffffff6110b416565b925061235a85602463ffffffff61240116565b915061236d85606463ffffffff61240d16565b6040517fb88d4fde00000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff84169063b88d4fde906123c8903090889087908790600401613209565b600060405180830381600087803b1580156123e257600080fd5b505af11580156123f6573d6000803e3d6000fd5b505050505050505050565b6000610c458383612468565b6060600061241b8484612401565b9050602083019250808301845110151515612462576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012090613301565b50500190565b6000816020018351101515156124aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012090613321565b50016020015190565b608060405190810160405280600081526020016000815260200160008152602001600081525090565b604080516060810182526000808252602082018190529181019190915290565b6000610c4582356134a6565b6000610c4582516134a6565b6000601f8201831361252557600080fd5b813561253861253382613435565b61340e565b81815260209384019390925082018360005b838110156106b4578135860161256088826125f7565b845250602092830192919091019060010161254a565b6000601f8201831361258757600080fd5b813561259561253382613435565b81815260209384019390925082018360005b838110156106b457813586016125bd8882612707565b84525060209283019291909101906001016125a7565b6000610c4582516134ee565b6000610c4582516134eb565b6000610c4582356134bf565b6000601f8201831361260857600080fd5b813561261661253382613456565b9150808252602083016020830185838301111561263257600080fd5b6116f38382846134f9565b60006080828403121561264f57600080fd5b612659608061340e565b9050600061266784846125df565b8252506020612678848483016125df565b602083015250604061268c848285016125df565b60408301525060606126a0848285016125df565b60608301525092915050565b6000606082840312156126be57600080fd5b6126c8606061340e565b905060006126d68484612868565b82525060206126e7848483016125df565b60208301525060406126fb848285016125df565b60408301525092915050565b6000610180828403121561271a57600080fd5b61272561018061340e565b9050600061273384846124fc565b8252506020612744848483016124fc565b6020830152506040612758848285016124fc565b604083015250606061276c848285016124fc565b60608301525060806127808482850161285c565b60808301525060a06127948482850161285c565b60a08301525060c06127a88482850161285c565b60c08301525060e06127bc8482850161285c565b60e0830152506101006127d18482850161285c565b610100830152506101206127e78482850161285c565b6101208301525061014082013567ffffffffffffffff81111561280957600080fd5b612815848285016125f7565b6101408301525061016082013567ffffffffffffffff81111561283757600080fd5b612843848285016125f7565b6101608301525092915050565b6000610c4582356134e4565b6000610c4582356134eb565b6000610c4582516134f3565b60006020828403121561288657600080fd5b60006115a684846124fc565b6000602082840312156128a457600080fd5b60006115a68484612508565b600080600080608085870312156128c657600080fd5b60006128d287876124fc565b94505060206128e3878288016124fc565b93505060406128f48782880161285c565b925050606085013567ffffffffffffffff81111561291157600080fd5b61291d878288016125f7565b91505092959194509250565b60008060006060848603121561293e57600080fd5b600061294a86866124fc565b935050602061295b8682870161285c565b925050604084013567ffffffffffffffff81111561297857600080fd5b612984868287016125f7565b9150509250925092565b60008060008060008060c087890312156129a757600080fd5b863567ffffffffffffffff8111156129be57600080fd5b6129ca89828a01612576565b965050602087013567ffffffffffffffff8111156129e757600080fd5b6129f389828a01612514565b955050604087013567ffffffffffffffff811115612a1057600080fd5b612a1c89828a01612576565b945050606087013567ffffffffffffffff811115612a3957600080fd5b612a4589828a01612514565b9350506080612a5689828a01612850565b92505060a0612a6789828a016124fc565b9150509295509295509295565b600080600080600080600060e0888a031215612a8f57600080fd5b873567ffffffffffffffff811115612aa657600080fd5b612ab28a828b01612576565b975050602088013567ffffffffffffffff811115612acf57600080fd5b612adb8a828b01612514565b965050604088013567ffffffffffffffff811115612af857600080fd5b612b048a828b01612576565b955050606088013567ffffffffffffffff811115612b2157600080fd5b612b2d8a828b01612514565b9450506080612b3e8a828b0161285c565b93505060a0612b4f8a828b01612850565b92505060c0612b608a828b016124fc565b91505092959891949750929550565b60008060408385031215612b8257600080fd5b823567ffffffffffffffff811115612b9957600080fd5b612ba585828601612576565b9250506020612bb68582860161285c565b9150509250929050565b600060208284031215612bd257600080fd5b60006115a684846125d3565b600060208284031215612bf057600080fd5b60006115a684846125eb565b600060808284031215612c0e57600080fd5b60006115a6848461263d565b600060608284031215612c2c57600080fd5b60006115a684846126ac565b612c41816134a6565b82525050565b6000612c52826134a2565b80845260208401935083602082028501612c6b8561349c565b60005b84811015612ca2578383038852612c86838351612d69565b9250612c918261349c565b602098909801979150600101612c6e565b50909695505050505050565b6000612cb9826134a2565b80845260208401935083602082028501612cd28561349c565b60005b84811015612ca2578383038852612ced8383516130e6565b9250612cf88261349c565b602098909801979150600101612cd5565b6000612d14826134a2565b808452602084019350612d268361349c565b60005b82811015612d5657612d3c8683516131f2565b612d458261349c565b602096909601959150600101612d29565b5093949350505050565b612c41816134bf565b6000612d74826134a2565b808452612d88816020860160208601613505565b612d9181613531565b9093016020019392505050565b602381527f44454641554c545f46554e4354494f4e5f574554485f434f4e54524143545f4f60208201527f4e4c590000000000000000000000000000000000000000000000000000000000604082015260600190565b601181527f494e56414c49445f4d53475f56414c5545000000000000000000000000000000602082015260400190565b603081527f475245415445525f4f525f455155414c5f544f5f4e45535445445f425954455360208201527f5f4c454e4754485f524551554952454400000000000000000000000000000000604082015260600190565b601781527f56414c55455f475245415445525f5448414e5f5a45524f000000000000000000602082015260400190565b602681527f475245415445525f4f525f455155414c5f544f5f33325f4c454e4754485f524560208201527f5155495245440000000000000000000000000000000000000000000000000000604082015260600190565b601881527f4645455f50524f504f5254494f4e5f544f4f5f4c415247450000000000000000602082015260400190565b600f81527f5452414e534645525f4641494c45440000000000000000000000000000000000602082015260400190565b601681527f554e41434345505441424c455f5448524553484f4c4400000000000000000000602082015260400190565b601381527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000602082015260400190565b602681527f475245415445525f4f525f455155414c5f544f5f32305f4c454e4754485f524560208201527f5155495245440000000000000000000000000000000000000000000000000000604082015260600190565b601781527f554e535550504f525445445f544f4b454e5f50524f5859000000000000000000602082015260400190565b602581527f475245415445525f4f525f455155414c5f544f5f345f4c454e4754485f52455160208201527f5549524544000000000000000000000000000000000000000000000000000000604082015260600190565b805160808301906130ad84826131f2565b5060208201516130c060208501826131f2565b5060408201516130d360408501826131f2565b50606082015161158b60608501826131f2565b80516000906101808401906130fb8582612c38565b50602083015161310e6020860182612c38565b5060408301516131216040860182612c38565b5060608301516131346060860182612c38565b50608083015161314760808601826131f2565b5060a083015161315a60a08601826131f2565b5060c083015161316d60c08601826131f2565b5060e083015161318060e08601826131f2565b506101008301516131956101008601826131f2565b506101208301516131aa6101208601826131f2565b506101408301518482036101408601526131c48282612d69565b9150506101608301518482036101608601526131e08282612d69565b95945050505050565b612c41816134e4565b612c41816134eb565b602081016110ae8284612c38565b608081016132178287612c38565b6132246020830186612c38565b61323160408301856131f2565b81810360608301526132438184612d69565b9695505050505050565b6040810161325b8285612c38565b610c4560208301846131f2565b606080825281016132798186612cae565b9050818103602083015261328d8185612d09565b905081810360408301526131e08184612c47565b606080825281016132b28186612cae565b90506132c160208301856131f2565b81810360408301526131e08184612c47565b602081016110ae8284612d60565b602080825281016110ae81612d9e565b602080825281016110ae81612df4565b602080825281016110ae81612e24565b602080825281016110ae81612e7a565b602080825281016110ae81612eaa565b602080825281016110ae81612f00565b602080825281016110ae81612f30565b602080825281016110ae81612f60565b602080825281016110ae81612f90565b602080825281016110ae81612fc0565b602080825281016110ae81613016565b602080825281016110ae81613046565b608081016110ae828461309c565b60208082528101610c4581846130e6565b606080825281016133d181866130e6565b90506133e060208301856131f2565b81810360408301526131e08184612d69565b602081016110ae82846131e9565b602081016110ae82846131f2565b60405181810167ffffffffffffffff8111828210171561342d57600080fd5b604052919050565b600067ffffffffffffffff82111561344c57600080fd5b5060209081020190565b600067ffffffffffffffff82111561346d57600080fd5b506020601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160190565b60200190565b5190565b73ffffffffffffffffffffffffffffffffffffffff1690565b7fffffffff000000000000000000000000000000000000000000000000000000001690565b61ffff1690565b90565b151590565b60ff1690565b82818337506000910152565b60005b83811015613520578181015183820152602001613508565b8381111561158b5750506000910152565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016905600a265627a7a72305820f84428674a7a1b076ea035cdfa190e912ba3c094f209cbddcd831d7362003d456c6578706572696d656e74616cf50037",
- "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xCF JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x150B7A02 DUP2 EQ PUSH2 0x12B JUMPI DUP1 PUSH4 0x169645F2 EQ PUSH2 0x161 JUMPI DUP1 PUSH4 0x1C5B1EC4 EQ PUSH2 0x181 JUMPI DUP1 PUSH4 0x20472CF7 EQ PUSH2 0x1A1 JUMPI DUP1 PUSH4 0x4A00F7D5 EQ PUSH2 0x1C3 JUMPI DUP1 PUSH4 0x725CEF06 EQ PUSH2 0x1D8 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x1EB JUMPI DUP1 PUSH4 0xB3CD4254 EQ PUSH2 0x20D JUMPI DUP1 PUSH4 0xBC063E1A EQ PUSH2 0x222 JUMPI DUP1 PUSH4 0xE58E9C16 EQ PUSH2 0x237 JUMPI DUP1 PUSH4 0xF0B9E5BA EQ PUSH2 0x257 JUMPI DUP1 PUSH4 0xF2AFD85A EQ PUSH2 0x277 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x297 JUMPI DUP1 PUSH4 0xFB4F9087 EQ PUSH2 0x2B7 JUMPI JUMPDEST PUSH1 0x2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x129 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x120 SWAP1 PUSH2 0x32E1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x137 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x14B PUSH2 0x146 CALLDATASIZE PUSH1 0x4 PUSH2 0x28B0 JUMP JUMPDEST PUSH2 0x2CC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x158 SWAP2 SWAP1 PUSH2 0x32D3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x174 PUSH2 0x16F CALLDATASIZE PUSH1 0x4 PUSH2 0x298E JUMP JUMPDEST PUSH2 0x32C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x158 SWAP2 SWAP1 PUSH2 0x33A1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x18D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x174 PUSH2 0x19C CALLDATASIZE PUSH1 0x4 PUSH2 0x2B6F JUMP JUMPDEST PUSH2 0x5F8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B6 PUSH2 0x6BE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x158 SWAP2 SWAP1 PUSH2 0x33F2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x14B PUSH2 0x6C4 JUMP JUMPDEST PUSH2 0x174 PUSH2 0x1E6 CALLDATASIZE PUSH1 0x4 PUSH2 0x2A74 JUMP JUMPDEST PUSH2 0x6F9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x200 PUSH2 0xAC7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x158 SWAP2 SWAP1 PUSH2 0x31FB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x219 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B6 PUSH2 0xAE3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x22E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B6 PUSH2 0xAE9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x243 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x174 PUSH2 0x252 CALLDATASIZE PUSH1 0x4 PUSH2 0x2B6F JUMP JUMPDEST PUSH2 0xAEF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x263 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x14B PUSH2 0x272 CALLDATASIZE PUSH1 0x4 PUSH2 0x2929 JUMP JUMPDEST PUSH2 0xBEC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x283 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x129 PUSH2 0x292 CALLDATASIZE PUSH1 0x4 PUSH2 0x2BDE JUMP JUMPDEST PUSH2 0xC4C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x129 PUSH2 0x2B2 CALLDATASIZE PUSH1 0x4 PUSH2 0x2874 JUMP JUMPDEST PUSH2 0xEC3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x14B PUSH2 0xF74 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x6F6E455243373231526563656976656428616464726573732C61646472657373 DUP2 MSTORE PUSH32 0x2C75696E743235362C6279746573290000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x2F ADD SWAP1 KECCAK256 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x334 PUSH2 0x24B3 JUMP JUMPDEST CALLVALUE PUSH1 0x0 DUP1 DUP1 DUP1 DUP5 GT PUSH2 0x372 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x120 SWAP1 PUSH2 0x3311 JUMP JUMPDEST PUSH2 0x37D DUP5 DUP9 DUP9 PUSH2 0xFCF JUMP JUMPDEST SWAP3 POP PUSH2 0x389 DUP5 DUP5 PUSH2 0x109D JUMP JUMPDEST SWAP2 POP PUSH1 0x2 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0E30DB0 DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH29 0x100000000000000000000000000000000000000000000000000000000 MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x411 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x425 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP PUSH2 0x452 DUP12 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x43C JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x140 ADD MLOAD PUSH1 0x10 PUSH2 0x10B4 JUMP JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE SWAP4 SWAP5 POP DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x4F8 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x4CD JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x4F8 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x4DB JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP12 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x50C JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MLOAD PUSH2 0x160 ADD MSTORE PUSH1 0x3 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x550 JUMPI PUSH2 0x549 DUP12 DUP12 DUP5 PUSH2 0x1115 JUMP JUMPDEST SWAP5 POP PUSH2 0x560 JUMP JUMPDEST PUSH2 0x55D DUP12 DUP12 DUP12 DUP12 DUP7 PUSH2 0x122F JUMP JUMPDEST SWAP5 POP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD DUP5 LT ISZERO PUSH2 0x59E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x120 SWAP1 PUSH2 0x32F1 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD DUP3 EQ PUSH2 0x5DB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x120 SWAP1 PUSH2 0x3351 JUMP JUMPDEST PUSH2 0x5EA DUP2 CALLER DUP8 PUSH1 0x0 ADD MLOAD PUSH2 0x13B7 JUMP JUMPDEST POP POP POP POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x600 PUSH2 0x24B3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x60D PUSH2 0x24B3 JUMP JUMPDEST PUSH1 0x0 SWAP4 POP JUMPDEST DUP7 MLOAD DUP5 LT ISZERO PUSH2 0x6B4 JUMPI PUSH2 0x629 DUP7 DUP7 PUSH1 0x0 ADD MLOAD PUSH2 0x109D JUMP JUMPDEST SWAP3 POP PUSH2 0x66C DUP8 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x63C JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0xA0 ADD MLOAD DUP9 DUP7 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x658 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0x80 ADD MLOAD DUP6 PUSH2 0x1591 JUMP JUMPDEST SWAP2 POP PUSH2 0x68F DUP8 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x67F JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP4 PUSH2 0x15AE JUMP JUMPDEST SWAP1 POP PUSH2 0x69B DUP6 DUP3 PUSH2 0x16FC JUMP JUMPDEST DUP5 MLOAD DUP7 EQ ISZERO PUSH2 0x6A9 JUMPI PUSH2 0x6B4 JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP4 ADD SWAP3 PUSH2 0x612 JUMP JUMPDEST POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x251C DUP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x4552433230546F6B656E28616464726573732900000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x13 ADD SWAP1 KECCAK256 DUP2 JUMP JUMPDEST PUSH2 0x701 PUSH2 0x24B3 JUMP JUMPDEST CALLVALUE PUSH1 0x0 DUP1 DUP3 GT PUSH2 0x73D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x120 SWAP1 PUSH2 0x3311 JUMP JUMPDEST PUSH1 0x0 DUP7 GT PUSH2 0x777 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x120 SWAP1 PUSH2 0x3311 JUMP JUMPDEST PUSH2 0x79F DUP11 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x789 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x140 ADD MLOAD PUSH1 0x0 PUSH2 0x175E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x4552433230546F6B656E28616464726573732900000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x13 ADD SWAP1 KECCAK256 SWAP1 SWAP2 POP PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP1 DUP4 AND SWAP2 AND EQ DUP1 PUSH2 0x881 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH32 0x455243373231546F6B656E28616464726573732C75696E743235362C62797465 DUP2 MSTORE PUSH32 0x7329000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x22 ADD SWAP1 KECCAK256 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 DUP2 AND SWAP2 AND EQ JUMPDEST ISZERO ISZERO PUSH2 0x8B9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x120 SWAP1 PUSH2 0x3381 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0E30DB0 DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH29 0x100000000000000000000000000000000000000000000000000000000 MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x93F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x953 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH32 0x4552433230546F6B656E28616464726573732900000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x13 ADD SWAP1 KECCAK256 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP6 DUP2 AND SWAP2 AND EQ ISZERO SWAP3 POP PUSH2 0x9CC SWAP2 POP POP JUMPI PUSH2 0x9C5 DUP11 DUP11 DUP11 DUP11 DUP11 PUSH2 0x17CB JUMP JUMPDEST SWAP3 POP PUSH2 0xA5F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x455243373231546F6B656E28616464726573732C75696E743235362C62797465 DUP2 MSTORE PUSH32 0x7329000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x22 ADD SWAP1 KECCAK256 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0xA5F JUMPI PUSH2 0xA5C DUP11 DUP11 DUP11 DUP11 PUSH2 0x1B22 JUMP JUMPDEST SWAP3 POP JUMPDEST PUSH1 0x20 DUP4 ADD MLOAD DUP3 LT ISZERO PUSH2 0xA9D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x120 SWAP1 PUSH2 0x32F1 JUMP JUMPDEST PUSH2 0xABA PUSH2 0xAAE DUP4 DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x109D JUMP JUMPDEST DUP5 PUSH1 0x20 ADD MLOAD DUP8 DUP8 PUSH2 0x1E24 JUMP JUMPDEST POP POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH2 0x2710 DUP2 JUMP JUMPDEST PUSH2 0x3E8 DUP2 JUMP JUMPDEST PUSH2 0xAF7 PUSH2 0x24B3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0xB04 PUSH2 0x24B3 JUMP JUMPDEST PUSH1 0x0 SWAP4 POP JUMPDEST DUP7 MLOAD DUP5 LT ISZERO PUSH2 0x6B4 JUMPI PUSH2 0xB20 DUP7 DUP7 PUSH1 0x0 ADD MLOAD PUSH2 0x109D JUMP JUMPDEST SWAP3 POP PUSH2 0xB87 DUP8 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xB33 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0xA0 ADD MLOAD PUSH2 0xB81 DUP10 DUP8 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xB52 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0x80 ADD MLOAD DUP11 DUP9 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xB6E JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0xE0 ADD MLOAD PUSH2 0x109D JUMP JUMPDEST DUP6 PUSH2 0x1591 JUMP JUMPDEST SWAP2 POP PUSH2 0xBB4 DUP8 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xB9A JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0xBAF DUP5 PUSH1 0x1 PUSH2 0x1F11 JUMP JUMPDEST PUSH2 0x15AE JUMP JUMPDEST SWAP1 POP PUSH2 0xBC8 DUP2 PUSH1 0x0 ADD MLOAD DUP3 PUSH1 0x60 ADD MLOAD PUSH2 0x109D JUMP JUMPDEST DUP2 MSTORE PUSH2 0xBD4 DUP6 DUP3 PUSH2 0x16FC JUMP JUMPDEST DUP5 MLOAD DUP7 GT PUSH2 0xBE1 JUMPI PUSH2 0x6B4 JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP4 ADD SWAP3 PUSH2 0xB09 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x6F6E455243373231526563656976656428616464726573732C75696E74323536 DUP2 MSTORE PUSH32 0x2C62797465732900000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x27 ADD SWAP1 KECCAK256 JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xC9E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x120 SWAP1 PUSH2 0x3361 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH32 0x6070410800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0x60704108 SWAP1 PUSH2 0xCF4 SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x32D3 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xD0E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xD22 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0xD46 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x2892 JUMP JUMPDEST SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0xEBF JUMPI PUSH1 0x2 SLOAD PUSH1 0x6 SLOAD PUSH1 0x40 MLOAD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 PUSH4 0x95EA7B3 SWAP2 PUSH2 0xDBE SWAP2 DUP6 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x324D JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xDD8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xDEC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0xE10 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x2BC0 JUMP JUMPDEST POP PUSH1 0x3 SLOAD PUSH1 0x6 SLOAD PUSH1 0x40 MLOAD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 PUSH4 0x95EA7B3 SWAP2 PUSH2 0xE6B SWAP2 DUP6 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x324D JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE85 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xE99 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0xEBD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x2BC0 JUMP JUMPDEST POP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xF14 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x120 SWAP1 PUSH2 0x3361 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0xF71 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND OR SWAP1 SSTORE JUMPDEST POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x455243373231546F6B656E28616464726573732C75696E743235362C62797465 DUP2 MSTORE PUSH32 0x7329000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x22 ADD SWAP1 KECCAK256 DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH2 0xFFFF AND GT DUP1 ISZERO PUSH2 0xFF9 JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND ISZERO ISZERO JUMPDEST ISZERO PUSH2 0xC45 JUMPI PUSH2 0x3E8 PUSH2 0xFFFF DUP5 AND GT ISZERO PUSH2 0x103E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x120 SWAP1 PUSH2 0x3331 JUMP JUMPDEST PUSH2 0x104F PUSH2 0xFFFF DUP5 AND PUSH2 0x2710 DUP7 PUSH2 0x1591 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x1095 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 GT ISZERO PUSH2 0x10A9 JUMPI INVALID JUMPDEST POP DUP1 DUP3 SUB JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x14 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x10F6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x120 SWAP1 PUSH2 0x3371 JUMP JUMPDEST POP ADD PUSH1 0x14 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x111D PUSH2 0x24B3 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH32 0x7E1D980800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH4 0x7E1D9808 SWAP1 PUSH2 0x1178 SWAP1 DUP9 SWAP1 DUP8 SWAP1 DUP10 SWAP1 PUSH1 0x4 ADD PUSH2 0x32A1 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1192 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x11A6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0x11CA SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x2BFC JUMP JUMPDEST SWAP2 POP PUSH2 0x11DE DUP3 PUSH1 0x0 ADD MLOAD DUP4 PUSH1 0x60 ADD MLOAD PUSH2 0x109D JUMP JUMPDEST SWAP1 POP PUSH2 0x11EE DUP3 PUSH1 0x0 ADD MLOAD DUP3 PUSH2 0x1F20 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x1226 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x120 SWAP1 PUSH2 0x3351 JUMP JUMPDEST DUP2 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x1237 PUSH2 0x24B3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1241 PUSH2 0x24B3 JUMP JUMPDEST PUSH2 0x1249 PUSH2 0x24B3 JUMP JUMPDEST PUSH2 0x1251 PUSH2 0x24B3 JUMP JUMPDEST DUP6 SWAP4 POP PUSH2 0x125E DUP11 DUP8 PUSH2 0x1F3D JUMP JUMPDEST SWAP3 POP PUSH1 0x0 DUP4 PUSH1 0x60 ADD MLOAD GT ISZERO PUSH2 0x12F2 JUMPI PUSH2 0x127C DUP9 DUP9 DUP6 PUSH1 0x60 ADD MLOAD PUSH2 0x1FA7 JUMP JUMPDEST SWAP2 POP PUSH2 0x1295 DUP7 PUSH2 0x1290 DUP9 DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x109D JUMP JUMPDEST PUSH2 0x1F20 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x12CD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x120 SWAP1 PUSH2 0x3351 JUMP JUMPDEST PUSH2 0x12DB DUP5 DUP4 PUSH1 0x20 ADD MLOAD PUSH2 0x109D JUMP JUMPDEST PUSH1 0x60 DUP1 DUP5 ADD MLOAD SWAP1 DUP8 ADD MSTORE PUSH1 0x20 DUP1 DUP5 ADD MLOAD SWAP1 DUP8 ADD MSTORE SWAP4 POP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH32 0x7E1D980800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0x7E1D9808 SWAP1 PUSH2 0x134C SWAP1 DUP14 SWAP1 DUP9 SWAP1 DUP15 SWAP1 PUSH1 0x4 ADD PUSH2 0x32A1 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1366 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x137A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0x139E SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x2BFC JUMP JUMPDEST SWAP1 POP PUSH2 0x13AA DUP6 DUP3 PUSH2 0x16FC JUMP JUMPDEST POP POP POP POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x7472616E7366657228616464726573732C75696E743235362900000000000000 DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x19 ADD DUP2 KECCAK256 PUSH1 0x0 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP2 SWAP1 PUSH2 0x1415 SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x24 ADD PUSH2 0x324D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 DUP2 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 OR DUP4 MSTORE MLOAD DUP2 MLOAD SWAP2 SWAP3 SWAP1 SWAP2 DUP3 SWAP2 SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x14B9 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x14A1 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x14E6 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 SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP3 POP POP POP DUP1 ISZERO ISZERO PUSH2 0x1535 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x120 SWAP1 PUSH2 0x3341 JUMP JUMPDEST RETURNDATASIZE ISZERO PUSH2 0x1552 JUMPI POP PUSH1 0x0 RETURNDATASIZE PUSH1 0x20 EQ ISZERO PUSH2 0x1552 JUMPI PUSH1 0x20 PUSH1 0x0 DUP1 RETURNDATACOPY POP PUSH1 0x0 MLOAD JUMPDEST DUP1 ISZERO ISZERO PUSH2 0x158B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x120 SWAP1 PUSH2 0x3341 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15A6 PUSH2 0x15A0 DUP6 DUP5 PUSH2 0x22E0 JUMP JUMPDEST DUP5 PUSH2 0x2304 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x15B6 PUSH2 0x24B3 JUMP JUMPDEST PUSH2 0x15BE PUSH2 0x24DC JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC75E0A8100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0xC75E0A81 SWAP1 PUSH2 0x1619 SWAP1 DUP10 SWAP1 PUSH1 0x4 ADD PUSH2 0x33AF JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1633 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1647 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0x166B SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x2C1A JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP4 POP PUSH1 0xFF AND PUSH1 0x3 EQ PUSH2 0x167F JUMPI PUSH2 0x16F3 JUMP JUMPDEST PUSH2 0x1691 DUP7 PUSH1 0xA0 ADD MLOAD DUP5 PUSH1 0x40 ADD MLOAD PUSH2 0x109D JUMP JUMPDEST SWAP2 POP PUSH2 0x169D DUP6 DUP4 PUSH2 0x231B JUMP JUMPDEST SWAP1 POP DUP1 DUP5 PUSH1 0x20 ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x16BC DUP2 DUP8 PUSH1 0xA0 ADD MLOAD DUP9 PUSH1 0x80 ADD MLOAD PUSH2 0x1591 JUMP JUMPDEST DUP5 MSTORE PUSH1 0xA0 DUP7 ADD MLOAD PUSH1 0xC0 DUP8 ADD MLOAD PUSH2 0x16D3 SWAP2 DUP4 SWAP2 PUSH2 0x1591 JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0xA0 DUP7 ADD MLOAD PUSH1 0xE0 DUP8 ADD MLOAD PUSH2 0x16ED SWAP2 DUP4 SWAP2 PUSH2 0x1591 JUMP JUMPDEST PUSH1 0x60 DUP6 ADD MSTORE JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD PUSH2 0x170A SWAP2 SWAP1 PUSH2 0x1F11 JUMP JUMPDEST DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MLOAD PUSH2 0x1720 SWAP2 SWAP1 PUSH2 0x1F11 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MLOAD PUSH2 0x1739 SWAP2 SWAP1 PUSH2 0x1F11 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MLOAD PUSH2 0x1752 SWAP2 SWAP1 PUSH2 0x1F11 JUMP JUMPDEST PUSH1 0x60 SWAP1 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x4 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x17A0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x120 SWAP1 PUSH2 0x3391 JUMP JUMPDEST POP POP PUSH1 0x20 ADD MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND SWAP1 JUMP JUMPDEST PUSH2 0x17D3 PUSH2 0x24B3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x17DD PUSH2 0x24B3 JUMP JUMPDEST PUSH2 0x17E5 PUSH2 0x24B3 JUMP JUMPDEST PUSH2 0x17ED PUSH2 0x24B3 JUMP JUMPDEST PUSH2 0x17FF DUP11 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x43C JUMPI INVALID JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE SWAP4 SWAP8 POP DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x18A5 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x187A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x18A5 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1888 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP11 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x18B9 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MLOAD PUSH2 0x160 ADD MSTORE PUSH1 0x3 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x1997 JUMPI PUSH2 0x18F6 DUP11 DUP11 DUP9 PUSH2 0x1FA7 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP4 POP DUP7 GT ISZERO PUSH2 0x1934 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x120 SWAP1 PUSH2 0x3351 JUMP JUMPDEST PUSH2 0x193E DUP6 DUP5 PUSH2 0x16FC JUMP JUMPDEST PUSH2 0x195A PUSH2 0x1953 DUP7 PUSH1 0x0 ADD MLOAD DUP8 PUSH1 0x60 ADD MLOAD PUSH2 0x1F11 JUMP JUMPDEST DUP7 MLOAD PUSH2 0x1F20 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x1992 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x120 SWAP1 PUSH2 0x3351 JUMP JUMPDEST PUSH2 0x1B13 JUMP JUMPDEST PUSH2 0x19A1 DUP11 DUP8 PUSH2 0x5F8 JUMP JUMPDEST SWAP2 POP PUSH1 0x0 DUP3 PUSH1 0x60 ADD MLOAD GT ISZERO PUSH2 0x19D6 JUMPI PUSH2 0x19BF DUP9 DUP9 DUP5 PUSH1 0x60 ADD MLOAD PUSH2 0x1FA7 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 ADD MLOAD SWAP1 DUP8 ADD MSTORE PUSH1 0x60 DUP1 DUP3 ADD MLOAD SWAP1 DUP8 ADD MSTORE SWAP1 POP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH32 0xE5FA431B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0xE5FA431B SWAP1 PUSH2 0x1A30 SWAP1 DUP14 SWAP1 DUP11 SWAP1 DUP15 SWAP1 PUSH1 0x4 ADD PUSH2 0x32A1 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1A4A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1A5E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0x1A82 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x2BFC JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP4 POP DUP7 EQ PUSH2 0x1ABF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x120 SWAP1 PUSH2 0x3351 JUMP JUMPDEST PUSH2 0x1AC9 DUP6 DUP5 PUSH2 0x16FC JUMP JUMPDEST PUSH2 0x1ADB DUP6 PUSH1 0x20 ADD MLOAD DUP5 PUSH1 0x20 ADD MLOAD PUSH2 0x1F20 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x1B13 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x120 SWAP1 PUSH2 0x3351 JUMP JUMPDEST PUSH2 0x13AA DUP5 CALLER DUP6 PUSH1 0x0 ADD MLOAD PUSH2 0x13B7 JUMP JUMPDEST PUSH2 0x1B2A PUSH2 0x24B3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 PUSH1 0x0 PUSH2 0x1B39 PUSH2 0x24B3 JUMP JUMPDEST PUSH2 0x1B41 PUSH2 0x24B3 JUMP JUMPDEST DUP11 MLOAD SWAP5 POP DUP5 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1B6F JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP PUSH1 0x0 SWAP3 POP JUMPDEST DUP5 DUP4 LT ISZERO PUSH2 0x1CAB JUMPI PUSH2 0x1BA4 DUP7 DUP13 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1B91 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0xE0 ADD MLOAD PUSH2 0x1F11 JUMP JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE SWAP4 SWAP10 POP DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x1C4A JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1C1F JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1C4A JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1C2D JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP12 DUP5 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1C5D JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MLOAD PUSH2 0x160 ADD MSTORE DUP11 MLOAD DUP12 SWAP1 DUP5 SWAP1 DUP2 LT PUSH2 0x1C7A JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0xA0 ADD MLOAD DUP5 DUP5 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1C96 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 PUSH2 0x1B77 JUMP JUMPDEST PUSH1 0x0 DUP7 GT ISZERO PUSH2 0x1CD6 JUMPI PUSH2 0x1CBF DUP10 DUP10 DUP9 PUSH2 0x1FA7 JUMP JUMPDEST PUSH1 0x60 DUP1 DUP3 ADD MLOAD SWAP1 DUP10 ADD MSTORE PUSH1 0x20 DUP1 DUP3 ADD MLOAD SWAP1 DUP10 ADD MSTORE SWAP2 POP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH32 0x4D0AE54600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0x4D0AE546 SWAP1 PUSH2 0x1D30 SWAP1 DUP15 SWAP1 DUP9 SWAP1 DUP16 SWAP1 PUSH1 0x4 ADD PUSH2 0x3268 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1D4A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1D5E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0x1D82 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x2BFC JUMP JUMPDEST SWAP1 POP PUSH2 0x1D8E DUP8 DUP3 PUSH2 0x16FC JUMP JUMPDEST PUSH2 0x1DA0 DUP8 PUSH1 0x20 ADD MLOAD DUP3 PUSH1 0x20 ADD MLOAD PUSH2 0x1F20 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x1DD8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x120 SWAP1 PUSH2 0x3351 JUMP JUMPDEST PUSH1 0x0 SWAP3 POP JUMPDEST DUP5 DUP4 LT ISZERO PUSH2 0x1E16 JUMPI PUSH2 0x1E0B DUP12 DUP5 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1DF6 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x140 ADD MLOAD CALLER PUSH2 0x2331 JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 PUSH2 0x1DDD JUMP JUMPDEST POP POP POP POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP7 GT ISZERO PUSH2 0x1F09 JUMPI PUSH1 0x2 SLOAD PUSH1 0x40 MLOAD PUSH32 0x2E1A7D4D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0x2E1A7D4D SWAP1 PUSH2 0x1E86 SWAP1 DUP10 SWAP1 PUSH1 0x4 ADD PUSH2 0x3400 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1EA0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1EB4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x1EC3 DUP6 DUP6 DUP6 PUSH2 0xFCF JUMP JUMPDEST SWAP2 POP PUSH2 0x1ECF DUP7 DUP4 PUSH2 0x109D JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 GT ISZERO PUSH2 0x1F09 JUMPI PUSH1 0x40 MLOAD CALLER SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x1F07 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0xC45 JUMPI INVALID JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1F32 PUSH2 0x251C PUSH2 0x2710 DUP7 PUSH2 0x1591 JUMP JUMPDEST SWAP1 SWAP3 LT ISZERO SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x1F45 PUSH2 0x24B3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1F50 PUSH2 0x24B3 JUMP JUMPDEST PUSH1 0x0 SWAP3 POP JUMPDEST DUP6 MLOAD DUP4 LT ISZERO PUSH2 0x16F3 JUMPI PUSH2 0x1F6C DUP6 DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x109D JUMP JUMPDEST SWAP2 POP PUSH2 0x1F7F DUP7 DUP5 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x67F JUMPI INVALID JUMPDEST SWAP1 POP PUSH2 0x1F8B DUP5 DUP3 PUSH2 0x16FC JUMP JUMPDEST DUP5 DUP5 PUSH1 0x20 ADD MLOAD EQ ISZERO PUSH2 0x1F9C JUMPI PUSH2 0x16F3 JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 PUSH2 0x1F55 JUMP JUMPDEST PUSH2 0x1FAF PUSH2 0x24B3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1FBC PUSH2 0x24B3 JUMP JUMPDEST PUSH1 0x0 SWAP4 POP JUMPDEST DUP8 MLOAD DUP5 LT ISZERO PUSH2 0x22D5 JUMPI PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x206E JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2043 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x206E JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x2051 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP9 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x2081 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH2 0x140 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x5 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP8 AND ISZERO MUL ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV SWAP3 DUP4 ADD DUP6 SWAP1 DIV DUP6 MUL DUP2 ADD DUP6 ADD SWAP1 SWAP2 MSTORE DUP2 DUP2 MSTORE SWAP3 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x2136 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x210B JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x2136 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x2119 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP9 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x2149 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MLOAD PUSH2 0x160 ADD MSTORE DUP5 MLOAD PUSH2 0x2165 SWAP1 DUP8 SWAP1 PUSH2 0x109D JUMP JUMPDEST SWAP3 POP PUSH2 0x21B3 DUP9 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x2178 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0xA0 ADD MLOAD PUSH2 0xB81 DUP11 DUP8 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x2197 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0x80 ADD MLOAD DUP12 DUP9 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xB6E JUMPI INVALID JUMPDEST PUSH1 0x1 SLOAD DUP10 MLOAD SWAP2 SWAP4 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH4 0xB4BE83D5 SWAP1 DUP11 SWAP1 DUP8 SWAP1 DUP2 LT PUSH2 0x21E4 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x21F9 DUP6 PUSH1 0x1 PUSH2 0x1F11 JUMP JUMPDEST DUP11 DUP9 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x2207 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH29 0x100000000000000000000000000000000000000000000000000000000 MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224B SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x33C0 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2265 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2279 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0x229D SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x2BFC JUMP JUMPDEST SWAP1 POP PUSH2 0x22B1 DUP2 PUSH1 0x0 ADD MLOAD DUP3 PUSH1 0x60 ADD MLOAD PUSH2 0x109D JUMP JUMPDEST DUP2 MSTORE PUSH2 0x22BD DUP6 DUP3 PUSH2 0x16FC JUMP JUMPDEST DUP5 MLOAD DUP7 GT PUSH2 0x22CA JUMPI PUSH2 0x22D5 JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP4 ADD SWAP3 PUSH2 0x1FC1 JUMP JUMPDEST POP POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MUL DUP4 ISZERO DUP1 PUSH2 0x22FC JUMPI POP DUP3 DUP5 DUP3 DUP2 ISZERO ISZERO PUSH2 0x22F9 JUMPI INVALID JUMPDEST DIV EQ JUMPDEST ISZERO ISZERO PUSH2 0xC45 JUMPI INVALID JUMPDEST PUSH1 0x0 DUP1 DUP3 DUP5 DUP2 ISZERO ISZERO PUSH2 0x2312 JUMPI INVALID JUMPDEST DIV SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x232A JUMPI DUP2 PUSH2 0xC45 JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 PUSH2 0x2347 DUP6 PUSH1 0x10 PUSH4 0xFFFFFFFF PUSH2 0x10B4 AND JUMP JUMPDEST SWAP3 POP PUSH2 0x235A DUP6 PUSH1 0x24 PUSH4 0xFFFFFFFF PUSH2 0x2401 AND JUMP JUMPDEST SWAP2 POP PUSH2 0x236D DUP6 PUSH1 0x64 PUSH4 0xFFFFFFFF PUSH2 0x240D AND JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xB88D4FDE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH4 0xB88D4FDE SWAP1 PUSH2 0x23C8 SWAP1 ADDRESS SWAP1 DUP9 SWAP1 DUP8 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x3209 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x23E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x23F6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC45 DUP4 DUP4 PUSH2 0x2468 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x241B DUP5 DUP5 PUSH2 0x2401 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP4 ADD SWAP3 POP DUP1 DUP4 ADD DUP5 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x2462 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x120 SWAP1 PUSH2 0x3301 JUMP JUMPDEST POP POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x20 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x24AA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x120 SWAP1 PUSH2 0x3321 JUMP JUMPDEST POP ADD PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC45 DUP3 CALLDATALOAD PUSH2 0x34A6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC45 DUP3 MLOAD PUSH2 0x34A6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0x2525 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x2538 PUSH2 0x2533 DUP3 PUSH2 0x3435 JUMP JUMPDEST PUSH2 0x340E JUMP JUMPDEST DUP2 DUP2 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP3 POP DUP3 ADD DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x6B4 JUMPI DUP2 CALLDATALOAD DUP7 ADD PUSH2 0x2560 DUP9 DUP3 PUSH2 0x25F7 JUMP JUMPDEST DUP5 MSTORE POP PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x254A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0x2587 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x2595 PUSH2 0x2533 DUP3 PUSH2 0x3435 JUMP JUMPDEST DUP2 DUP2 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP3 POP DUP3 ADD DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x6B4 JUMPI DUP2 CALLDATALOAD DUP7 ADD PUSH2 0x25BD DUP9 DUP3 PUSH2 0x2707 JUMP JUMPDEST DUP5 MSTORE POP PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x25A7 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC45 DUP3 MLOAD PUSH2 0x34EE JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC45 DUP3 MLOAD PUSH2 0x34EB JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC45 DUP3 CALLDATALOAD PUSH2 0x34BF JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0x2608 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x2616 PUSH2 0x2533 DUP3 PUSH2 0x3456 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP4 ADD DUP6 DUP4 DUP4 ADD GT ISZERO PUSH2 0x2632 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x16F3 DUP4 DUP3 DUP5 PUSH2 0x34F9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x264F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2659 PUSH1 0x80 PUSH2 0x340E JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2667 DUP5 DUP5 PUSH2 0x25DF JUMP JUMPDEST DUP3 MSTORE POP PUSH1 0x20 PUSH2 0x2678 DUP5 DUP5 DUP4 ADD PUSH2 0x25DF JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP PUSH1 0x40 PUSH2 0x268C DUP5 DUP3 DUP6 ADD PUSH2 0x25DF JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 PUSH2 0x26A0 DUP5 DUP3 DUP6 ADD PUSH2 0x25DF JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x26BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x26C8 PUSH1 0x60 PUSH2 0x340E JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x26D6 DUP5 DUP5 PUSH2 0x2868 JUMP JUMPDEST DUP3 MSTORE POP PUSH1 0x20 PUSH2 0x26E7 DUP5 DUP5 DUP4 ADD PUSH2 0x25DF JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP PUSH1 0x40 PUSH2 0x26FB DUP5 DUP3 DUP6 ADD PUSH2 0x25DF JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x180 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x271A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2725 PUSH2 0x180 PUSH2 0x340E JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2733 DUP5 DUP5 PUSH2 0x24FC JUMP JUMPDEST DUP3 MSTORE POP PUSH1 0x20 PUSH2 0x2744 DUP5 DUP5 DUP4 ADD PUSH2 0x24FC JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP PUSH1 0x40 PUSH2 0x2758 DUP5 DUP3 DUP6 ADD PUSH2 0x24FC JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 PUSH2 0x276C DUP5 DUP3 DUP6 ADD PUSH2 0x24FC JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE POP PUSH1 0x80 PUSH2 0x2780 DUP5 DUP3 DUP6 ADD PUSH2 0x285C JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE POP PUSH1 0xA0 PUSH2 0x2794 DUP5 DUP3 DUP6 ADD PUSH2 0x285C JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE POP PUSH1 0xC0 PUSH2 0x27A8 DUP5 DUP3 DUP6 ADD PUSH2 0x285C JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE POP PUSH1 0xE0 PUSH2 0x27BC DUP5 DUP3 DUP6 ADD PUSH2 0x285C JUMP JUMPDEST PUSH1 0xE0 DUP4 ADD MSTORE POP PUSH2 0x100 PUSH2 0x27D1 DUP5 DUP3 DUP6 ADD PUSH2 0x285C JUMP JUMPDEST PUSH2 0x100 DUP4 ADD MSTORE POP PUSH2 0x120 PUSH2 0x27E7 DUP5 DUP3 DUP6 ADD PUSH2 0x285C JUMP JUMPDEST PUSH2 0x120 DUP4 ADD MSTORE POP PUSH2 0x140 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2809 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2815 DUP5 DUP3 DUP6 ADD PUSH2 0x25F7 JUMP JUMPDEST PUSH2 0x140 DUP4 ADD MSTORE POP PUSH2 0x160 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2837 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2843 DUP5 DUP3 DUP6 ADD PUSH2 0x25F7 JUMP JUMPDEST PUSH2 0x160 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC45 DUP3 CALLDATALOAD PUSH2 0x34E4 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC45 DUP3 CALLDATALOAD PUSH2 0x34EB JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC45 DUP3 MLOAD PUSH2 0x34F3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2886 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x15A6 DUP5 DUP5 PUSH2 0x24FC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x28A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x15A6 DUP5 DUP5 PUSH2 0x2508 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x28C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x28D2 DUP8 DUP8 PUSH2 0x24FC JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x28E3 DUP8 DUP3 DUP9 ADD PUSH2 0x24FC JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 PUSH2 0x28F4 DUP8 DUP3 DUP9 ADD PUSH2 0x285C JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2911 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x291D DUP8 DUP3 DUP9 ADD PUSH2 0x25F7 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x293E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x294A DUP7 DUP7 PUSH2 0x24FC JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x295B DUP7 DUP3 DUP8 ADD PUSH2 0x285C JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2978 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2984 DUP7 DUP3 DUP8 ADD PUSH2 0x25F7 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x29A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x29BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x29CA DUP10 DUP3 DUP11 ADD PUSH2 0x2576 JUMP JUMPDEST SWAP7 POP POP PUSH1 0x20 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x29E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x29F3 DUP10 DUP3 DUP11 ADD PUSH2 0x2514 JUMP JUMPDEST SWAP6 POP POP PUSH1 0x40 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2A10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2A1C DUP10 DUP3 DUP11 ADD PUSH2 0x2576 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2A39 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2A45 DUP10 DUP3 DUP11 ADD PUSH2 0x2514 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x80 PUSH2 0x2A56 DUP10 DUP3 DUP11 ADD PUSH2 0x2850 JUMP JUMPDEST SWAP3 POP POP PUSH1 0xA0 PUSH2 0x2A67 DUP10 DUP3 DUP11 ADD PUSH2 0x24FC JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x2A8F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2AA6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2AB2 DUP11 DUP3 DUP12 ADD PUSH2 0x2576 JUMP JUMPDEST SWAP8 POP POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2ACF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2ADB DUP11 DUP3 DUP12 ADD PUSH2 0x2514 JUMP JUMPDEST SWAP7 POP POP PUSH1 0x40 DUP9 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2AF8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2B04 DUP11 DUP3 DUP12 ADD PUSH2 0x2576 JUMP JUMPDEST SWAP6 POP POP PUSH1 0x60 DUP9 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2B21 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2B2D DUP11 DUP3 DUP12 ADD PUSH2 0x2514 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x80 PUSH2 0x2B3E DUP11 DUP3 DUP12 ADD PUSH2 0x285C JUMP JUMPDEST SWAP4 POP POP PUSH1 0xA0 PUSH2 0x2B4F DUP11 DUP3 DUP12 ADD PUSH2 0x2850 JUMP JUMPDEST SWAP3 POP POP PUSH1 0xC0 PUSH2 0x2B60 DUP11 DUP3 DUP12 ADD PUSH2 0x24FC JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2B82 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2B99 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2BA5 DUP6 DUP3 DUP7 ADD PUSH2 0x2576 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x2BB6 DUP6 DUP3 DUP7 ADD PUSH2 0x285C JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2BD2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x15A6 DUP5 DUP5 PUSH2 0x25D3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2BF0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x15A6 DUP5 DUP5 PUSH2 0x25EB JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2C0E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x15A6 DUP5 DUP5 PUSH2 0x263D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2C2C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x15A6 DUP5 DUP5 PUSH2 0x26AC JUMP JUMPDEST PUSH2 0x2C41 DUP2 PUSH2 0x34A6 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2C52 DUP3 PUSH2 0x34A2 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP DUP4 PUSH1 0x20 DUP3 MUL DUP6 ADD PUSH2 0x2C6B DUP6 PUSH2 0x349C JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x2CA2 JUMPI DUP4 DUP4 SUB DUP9 MSTORE PUSH2 0x2C86 DUP4 DUP4 MLOAD PUSH2 0x2D69 JUMP JUMPDEST SWAP3 POP PUSH2 0x2C91 DUP3 PUSH2 0x349C JUMP JUMPDEST PUSH1 0x20 SWAP9 SWAP1 SWAP9 ADD SWAP8 SWAP2 POP PUSH1 0x1 ADD PUSH2 0x2C6E JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2CB9 DUP3 PUSH2 0x34A2 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP DUP4 PUSH1 0x20 DUP3 MUL DUP6 ADD PUSH2 0x2CD2 DUP6 PUSH2 0x349C JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x2CA2 JUMPI DUP4 DUP4 SUB DUP9 MSTORE PUSH2 0x2CED DUP4 DUP4 MLOAD PUSH2 0x30E6 JUMP JUMPDEST SWAP3 POP PUSH2 0x2CF8 DUP3 PUSH2 0x349C JUMP JUMPDEST PUSH1 0x20 SWAP9 SWAP1 SWAP9 ADD SWAP8 SWAP2 POP PUSH1 0x1 ADD PUSH2 0x2CD5 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2D14 DUP3 PUSH2 0x34A2 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH2 0x2D26 DUP4 PUSH2 0x349C JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x2D56 JUMPI PUSH2 0x2D3C DUP7 DUP4 MLOAD PUSH2 0x31F2 JUMP JUMPDEST PUSH2 0x2D45 DUP3 PUSH2 0x349C JUMP JUMPDEST PUSH1 0x20 SWAP7 SWAP1 SWAP7 ADD SWAP6 SWAP2 POP PUSH1 0x1 ADD PUSH2 0x2D29 JUMP JUMPDEST POP SWAP4 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x2C41 DUP2 PUSH2 0x34BF JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2D74 DUP3 PUSH2 0x34A2 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH2 0x2D88 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x3505 JUMP JUMPDEST PUSH2 0x2D91 DUP2 PUSH2 0x3531 JUMP JUMPDEST SWAP1 SWAP4 ADD PUSH1 0x20 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x23 DUP2 MSTORE PUSH32 0x44454641554C545F46554E4354494F4E5F574554485F434F4E54524143545F4F PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x4E4C590000000000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x11 DUP2 MSTORE PUSH32 0x494E56414C49445F4D53475F56414C5545000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x30 DUP2 MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F4E45535445445F4259544553 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x5F4C454E4754485F524551554952454400000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x17 DUP2 MSTORE PUSH32 0x56414C55455F475245415445525F5448414E5F5A45524F000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F33325F4C454E4754485F5245 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x18 DUP2 MSTORE PUSH32 0x4645455F50524F504F5254494F4E5F544F4F5F4C415247450000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0xF DUP2 MSTORE PUSH32 0x5452414E534645525F4641494C45440000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x16 DUP2 MSTORE PUSH32 0x554E41434345505441424C455F5448524553484F4C4400000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x13 DUP2 MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F32305F4C454E4754485F5245 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x17 DUP2 MSTORE PUSH32 0x554E535550504F525445445F544F4B454E5F50524F5859000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x25 DUP2 MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F345F4C454E4754485F524551 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x5549524544000000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x80 DUP4 ADD SWAP1 PUSH2 0x30AD DUP5 DUP3 PUSH2 0x31F2 JUMP JUMPDEST POP PUSH1 0x20 DUP3 ADD MLOAD PUSH2 0x30C0 PUSH1 0x20 DUP6 ADD DUP3 PUSH2 0x31F2 JUMP JUMPDEST POP PUSH1 0x40 DUP3 ADD MLOAD PUSH2 0x30D3 PUSH1 0x40 DUP6 ADD DUP3 PUSH2 0x31F2 JUMP JUMPDEST POP PUSH1 0x60 DUP3 ADD MLOAD PUSH2 0x158B PUSH1 0x60 DUP6 ADD DUP3 PUSH2 0x31F2 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH2 0x180 DUP5 ADD SWAP1 PUSH2 0x30FB DUP6 DUP3 PUSH2 0x2C38 JUMP JUMPDEST POP PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x310E PUSH1 0x20 DUP7 ADD DUP3 PUSH2 0x2C38 JUMP JUMPDEST POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x3121 PUSH1 0x40 DUP7 ADD DUP3 PUSH2 0x2C38 JUMP JUMPDEST POP PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x3134 PUSH1 0x60 DUP7 ADD DUP3 PUSH2 0x2C38 JUMP JUMPDEST POP PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x3147 PUSH1 0x80 DUP7 ADD DUP3 PUSH2 0x31F2 JUMP JUMPDEST POP PUSH1 0xA0 DUP4 ADD MLOAD PUSH2 0x315A PUSH1 0xA0 DUP7 ADD DUP3 PUSH2 0x31F2 JUMP JUMPDEST POP PUSH1 0xC0 DUP4 ADD MLOAD PUSH2 0x316D PUSH1 0xC0 DUP7 ADD DUP3 PUSH2 0x31F2 JUMP JUMPDEST POP PUSH1 0xE0 DUP4 ADD MLOAD PUSH2 0x3180 PUSH1 0xE0 DUP7 ADD DUP3 PUSH2 0x31F2 JUMP JUMPDEST POP PUSH2 0x100 DUP4 ADD MLOAD PUSH2 0x3195 PUSH2 0x100 DUP7 ADD DUP3 PUSH2 0x31F2 JUMP JUMPDEST POP PUSH2 0x120 DUP4 ADD MLOAD PUSH2 0x31AA PUSH2 0x120 DUP7 ADD DUP3 PUSH2 0x31F2 JUMP JUMPDEST POP PUSH2 0x140 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH2 0x140 DUP7 ADD MSTORE PUSH2 0x31C4 DUP3 DUP3 PUSH2 0x2D69 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x160 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH2 0x160 DUP7 ADD MSTORE PUSH2 0x31E0 DUP3 DUP3 PUSH2 0x2D69 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x2C41 DUP2 PUSH2 0x34E4 JUMP JUMPDEST PUSH2 0x2C41 DUP2 PUSH2 0x34EB JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x10AE DUP3 DUP5 PUSH2 0x2C38 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x3217 DUP3 DUP8 PUSH2 0x2C38 JUMP JUMPDEST PUSH2 0x3224 PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x2C38 JUMP JUMPDEST PUSH2 0x3231 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x31F2 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x3243 DUP2 DUP5 PUSH2 0x2D69 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x325B DUP3 DUP6 PUSH2 0x2C38 JUMP JUMPDEST PUSH2 0xC45 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x31F2 JUMP JUMPDEST PUSH1 0x60 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x3279 DUP2 DUP7 PUSH2 0x2CAE JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x328D DUP2 DUP6 PUSH2 0x2D09 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x31E0 DUP2 DUP5 PUSH2 0x2C47 JUMP JUMPDEST PUSH1 0x60 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x32B2 DUP2 DUP7 PUSH2 0x2CAE JUMP JUMPDEST SWAP1 POP PUSH2 0x32C1 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x31F2 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x31E0 DUP2 DUP5 PUSH2 0x2C47 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x10AE DUP3 DUP5 PUSH2 0x2D60 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x10AE DUP2 PUSH2 0x2D9E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x10AE DUP2 PUSH2 0x2DF4 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x10AE DUP2 PUSH2 0x2E24 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x10AE DUP2 PUSH2 0x2E7A JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x10AE DUP2 PUSH2 0x2EAA JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x10AE DUP2 PUSH2 0x2F00 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x10AE DUP2 PUSH2 0x2F30 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x10AE DUP2 PUSH2 0x2F60 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x10AE DUP2 PUSH2 0x2F90 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x10AE DUP2 PUSH2 0x2FC0 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x10AE DUP2 PUSH2 0x3016 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x10AE DUP2 PUSH2 0x3046 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x10AE DUP3 DUP5 PUSH2 0x309C JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xC45 DUP2 DUP5 PUSH2 0x30E6 JUMP JUMPDEST PUSH1 0x60 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x33D1 DUP2 DUP7 PUSH2 0x30E6 JUMP JUMPDEST SWAP1 POP PUSH2 0x33E0 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x31F2 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x31E0 DUP2 DUP5 PUSH2 0x2D69 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x10AE DUP3 DUP5 PUSH2 0x31E9 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x10AE DUP3 DUP5 PUSH2 0x31F2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x342D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x344C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 SWAP1 DUP2 MUL ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x346D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x1F SWAP2 SWAP1 SWAP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND SWAP1 JUMP JUMPDEST PUSH2 0xFFFF AND SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0xFF AND SWAP1 JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3520 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3508 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x158B JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP1 JUMP STOP LOG2 PUSH6 0x627A7A723058 KECCAK256 0xf8 DIFFICULTY 0x28 PUSH8 0x4A7A1B076EA035CD STATICCALL NOT 0xe SWAP2 0x2b LOG3 0xc0 SWAP5 CALLCODE MULMOD 0xcb 0xdd 0xcd DUP4 SAR PUSH20 0x62003D456C6578706572696D656E74616CF50037 ",
- "sourceMap": "816:1324:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1649:11;;;;1627:10;:34;1606:116;;;;;;;;;;;;;;;;;;;;;;816:1324;1166:171:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1166:171:3;;;;;;;;;;;;;;;;;;;;;;;;;2306:2403:7;;;;;;;;;;;;;;;;;;4077:950:4;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4077:950:4;;;;;;;;;991:60:8;;8:9:-1;5:2;;;30:1;27;20:12;5:2;991:60:8;;;;;;;;;;;;1077:79:5;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1077:79:5;;;;2616:1894;;;;;;;;;;292:20:41;;8:9:-1;5:2;;;30:1;27;20:12;5:2;292:20:41;;;;;;;;;;;;850:54:8;;8:9:-1;5:2;;;30:1;27;20:12;5:2;850:54:8;;;;940:38;;8:9:-1;5:2;;;30:1;27;20:12;5:2;940:38:8;;;;5436:1414:4;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5436:1414:4;;;;;;;;;1007:153:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1007:153:3;;;;;;;;;1799:339:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1799:339:0;;;;;;;;;534:167:41;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;534:167:41;;;;;;;;;1162:95:5;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1162:95:5;;;;1166:171:3;939:60;;;;;;;;;;;;;;;;;;;;;1166:171;;;;;;:::o;2306:2403:7:-;2608:35;;:::i;:::-;2684:9;2659:22;;;2724:18;;;2703:88;;;;;;;;;;;;;;2887:100;2910:14;2938:13;2965:12;2887:9;:100::i;:::-;2864:123;;3022:37;3030:14;3046:12;3022:7;:37::i;:::-;2997:62;;3126:11;;;;;;;;;;;:19;;;3152:14;3126:43;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3126:43:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3126:43:7;;;;;3363:50;3384:6;3391:1;3384:9;;;;;;;;;;;;;;;;;;:24;;;3410:2;3363:20;:50::i;:::-;3450:15;3423:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3335:78;;-1:-1:-1;3423:42:7;;3450:15;3423:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:6;3430:1;3423:9;;;;;;;;;;;;;;;;;;;:24;;:42;3508:9;;;3479:39;;;3508:9;;3479:39;3475:614;;;3718:125;3763:6;3787:10;3815:14;3718:27;:125::i;:::-;3699:144;;3475:614;;;3893:185;3940:6;3964:10;3992:9;4019:13;4050:14;3893:29;:185::i;:::-;3874:204;;3475:614;4214:39;;;;4196:57;;;4175:121;;;;;;;;;;;;;;4396:39;;;;4378:57;;4357:126;;;;;;;;;;;;;;4538:131;4565:17;4596:10;4620:16;:39;;;4538:13;:131::i;:::-;2306:2403;;;;;;;;;;;;:::o;4077:950:4:-;4241:35;;:::i;:::-;4297:9;4350:37;4474;4693:35;;:::i;:::-;4309:1;4297:13;;4292:696;4316:6;:13;4312:1;:17;4292:696;;;4390:70;4398:20;4420:16;:39;;;4390:7;:70::i;:::-;4350:110;;4514:165;4548:6;4555:1;4548:9;;;;;;;;;;;;;;;;;;:26;;;4592:6;4599:1;4592:9;;;;;;;;;;;;;;;;;;:26;;;4636:29;4514:16;:165::i;:::-;4474:205;;4731:62;4752:6;4759:1;4752:9;;;;;;;;;;;;;;;;;;4763:29;4731:20;:62::i;:::-;4693:100;;4807:50;4822:16;4840;4807:14;:50::i;:::-;4875:39;;:63;;4871:107;;;4958:5;;4871:107;4331:3;;;;;4292:696;;;4077:950;;;;;;;;:::o;991:60:8:-;1047:4;991:60;:::o;1077:79:5:-;1123:32;;;;;;;;;;;;;;;;1077:79;:::o;2616:1894::-;2957:35;;:::i;:::-;3033:9;3008:22;3073:18;;;3052:88;;;;;;;;;;;;;;3194:1;3171:24;;3150:94;;;;;;;;;;;;;;3275:48;3295:6;3302:1;3295:9;;;;;;;;;;;;;;;;;;:24;;;3321:1;3275:19;:48::i;:::-;1123:32;;;;;;;;;;;;;;;;3254:69;;-1:-1:-1;3354:28:5;;;;;;;;:61;;-1:-1:-1;1209:47:5;;;;;;;;;;;;;;;;;;;;;3386:29;;;;;;;3354:61;3333:131;;;;;;;;;;;;;;;;3475:11;;;;;;;;;;;:19;;;3501:14;3475:43;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3475:43:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;1123:32:5;;;;;;;;;;;;;;;;3532:28;;;;;;;3528:505;;-1:-1:-1;3528:505:5;;-1:-1:-1;;3528:505:5;3595:190;3641:6;3665:10;3693:9;3720:13;3751:20;3595:28;:190::i;:::-;3576:209;;3528:505;;;1209:47;;;;;;;;;;;;;;;;;;;;;3806:29;;;;;;;3802:231;;;3870:152;3916:6;3940:10;3968:9;3995:13;3870:28;:152::i;:::-;3851:171;;3802:231;4158:39;;;;4140:57;;;4119:121;;;;;;;;;;;;;;4250:220;4290:64;4298:14;4314:16;:39;;;4290:7;:64::i;:::-;4368:16;:39;;;4421:13;4448:12;4250:26;:220::i;:::-;2616:1894;;;;;;;;;;;:::o;292:20:41:-;;;;;;:::o;850:54:8:-;899:5;850:54;:::o;940:38::-;974:4;940:38;:::o;5436:1414:4:-;5596:35;;:::i;:::-;5652:9;5705:30;5996:31;6264:35;;:::i;:::-;5664:1;5652:13;;5647:1164;5671:6;:13;5667:1;:17;5647:1164;;;5738:63;5746:13;5761:16;:39;;;5738:7;:63::i;:::-;5705:96;;6030:220;6064:6;6071:1;6064:9;;;;;;;;;;;;;;;;;;:26;;;6108:55;6116:6;6123:1;6116:9;;;;;;;;;;;;;;;;;;:26;;;6144:6;6151:1;6144:9;;;;;;;;;;;;;;;;;;:18;;;6108:7;:55::i;:::-;6214:22;6030:16;:220::i;:::-;5996:254;;6302:68;6323:6;6330:1;6323:9;;;;;;;;;;;;;;;;;;6334:35;6342:23;6367:1;6334:7;:35::i;:::-;6302:20;:68::i;:::-;6264:106;;6427:79;6435:16;:39;;;6476:16;:29;;;6427:7;:79::i;:::-;6385:121;;6520:50;6535:16;6385;6520:14;:50::i;:::-;6705:39;;:56;-1:-1:-1;6701:100:4;;6781:5;;6701:100;5686:3;;;;;5647:1164;;1007:153:3;830:52;;;;;;;;;;;;;;;;;;;;;1007:153;;;;;;:::o;1799:339:0:-;1903:20;460:5:41;;;;446:10;:19;425:85;;;;;;;;;;;;;;1926:8:0;;:41;;;;;:8;;;;;:22;;:41;;1949:17;;1926:41;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1926:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1926:41:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;1926:41:0;;;;;;;;;1903:64;-1:-1:-1;1981:26:0;;;;1977:155;;2023:11;;2057:8;;2023:43;;;;;:11;;;;;:19;;:43;;2043:12;;2057:8;2023:43;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2023:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2023:43:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;2023:43:0;;;;;;;;;-1:-1:-1;2080:9:0;;2112:8;;2080:41;;;;;:9;;;;;:17;;:41;;2098:12;;2112:8;2080:41;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2080:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2080:41:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;2080:41:0;;;;;;;;;;1977:155;1799:339;;:::o;534:167:41:-;460:5;;;;446:10;:19;425:85;;;;;;;;;;;;;;630:22;;;;626:69;;668:5;:16;;;;;;;;;;626:69;534:167;:::o;1162:95:5:-;1209:47;;;;;;;;;;;;;;;;;;;;;1162:95;:::o;1453:695:8:-;1604:20;1660:1;1644:13;:17;;;:47;;;;-1:-1:-1;1665:26:8;;;;;1644:47;1640:473;;;974:4;1732:24;;;;;1707:107;;;;;;;;;;;;;;1920:133;;;;899:5;2025:14;1920:16;:133::i;:::-;2067:35;;1905:148;;-1:-1:-1;2067:21:8;;;;:35;;;;;1905:148;;2067:35;;;;1905:148;2067:21;:35;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2067:35:8;1453:695;;;;;:::o;418:146:42:-;498:7;528:6;;;;521:14;;;;-1:-1:-1;552:5:42;;;418:146;;;;;:::o;10073:886:39:-;10194:14;10257:5;10265:2;10257:10;10245:1;:8;:22;;10224:135;;;;;;;;;;;;;;;;-1:-1:-1;10861:13:39;10606:2;10861:13;10855:20;10877:42;10851:69;;10073:886::o;7513:994:7:-;7697:35;;:::i;:::-;7854:8;;:107;;;;;8137:23;;7854:8;;;:25;;:107;;7893:6;;7913:14;;7941:10;;7854:107;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7854:107:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7854:107:7;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;7854:107:7;;;;;;;;;7835:126;;8163:79;8171:16;:39;;;8212:16;:29;;;8163:7;:79::i;:::-;8137:105;;8273:79;8295:16;:39;;;8336:15;8273:21;:79::i;:::-;8252:148;;;;;;;;;;;;;;;;8410:57;;;7513:994;-1:-1:-1;;;7513:994:7:o;5257:1906::-;5524:35;;:::i;:::-;5575:31;5633:46;;:::i;:::-;5903:35;;:::i;:::-;6836:41;;:::i;:::-;5609:14;5575:48;;5682:50;5709:6;5717:14;5682:26;:50::i;:::-;5633:99;;5789:1;5746:27;:40;;;:44;5742:998;;;5941:150;5979:9;6006:13;6037:27;:40;;;5941:20;:150::i;:::-;5903:188;;6229:161;6272:14;6308:64;6316:14;6332:16;:39;;;6308:7;:64::i;:::-;6229:21;:161::i;:::-;6204:242;;;;;;;;;;;;;;;;6486:73;6494:23;6519:16;:39;;;6486:7;:73::i;:::-;6605:29;;;;;6573;;;:61;6690:39;;;;;6648;;;:81;6460:99;-1:-1:-1;5742:998:7;6880:8;;:116;;;;;:8;;;;;:25;;:116;;6919:6;;6939:23;;6976:10;;6880:116;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6880:116:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6880:116:7;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;6880:116:7;;;;;;;;;6836:160;;7067:56;7082:16;7100:22;7067:14;:56::i;:::-;5257:1906;;;;;;;;;;;:::o;825:1219:2:-;779:38;;;;;;;;;;;;;;;;1078:12;;1093:10;;;;779:38;1104:105;;1177:2;;1193:6;;1104:105;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;1104:105:2;;;49:4:-1;25:18;;61:17;;1104:105:2;182:15:-1;1104:105:2;;;;179:29:-1;;;;160:49;;1093:117:2;;;1104:105;;1093:117;;;;25:18:-1;1093:117:2;;25:18:-1;-1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;1093:117:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1220:69:2;;;;;;;;;;;;;;;;;1668:14;1665:2;;;-1:-1:-1;1712:1:2;1736:14;1752:2;1733:22;1730:2;;;1874;1871:1;1868;1853:24;-1:-1:-1;1915:1:2;1909:8;1730:2;1989:7;1968:69;;;;;;;;;;;;;;;;825:1219;;;;:::o;937:326:29:-;1091:21;1144:82;1165:26;1173:9;1184:6;1165:7;:26::i;:::-;1205:11;1144:7;:82::i;:::-;1128:98;937:326;-1:-1:-1;;;;937:326:29:o;1312:1215:4:-;1470:30;;:::i;:::-;1516:35;;:::i;:::-;1554:8;;:28;;;;;1711:33;;;;1554:8;;;;;:21;;:28;;1576:5;;1554:28;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1554:28:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1554:28:4;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;1554:28:4;;;;;;;;;1596:21;;1516:66;;-1:-1:-1;1596:61:4;;1627:29;1596:61;1592:110;;1673:18;;1592:110;1747:70;1755:5;:22;;;1779:9;:37;;;1747:7;:70::i;:::-;1711:106;;1860:55;1867:20;1889:25;1860:6;:55::i;:::-;1827:88;;1963:22;1926:11;:34;;:59;;;;;2032:134;2062:22;2098:5;:22;;;2134:5;:22;;;2032:16;:134::i;:::-;1995:171;;2269:22;;;;2305:14;;;;2203:126;;2233:22;;2203:16;:126::i;:::-;2176:24;;;:153;2432:22;;;;2468:14;;;;2366:126;;2396:22;;2366:16;:126::i;:::-;2339:24;;;:153;1312:1215;;;;;;;;:::o;1772:648:28:-;1965:39;;2006:40;;1957:90;;1965:39;1957:7;:90::i;:::-;1915:132;;2107:39;;;;;2148:40;;;;2099:90;;2107:39;2099:7;:90::i;:::-;2057:39;;;:132;2239:29;;;;;2270:30;;;;2231:70;;2239:29;2231:7;:70::i;:::-;2199:29;;;:102;2351:29;;;;;2382:30;;;;2343:70;;2351:29;2343:7;:70::i;:::-;2311:29;;;;:102;;;;-1:-1:-1;1772:648:28:o;15327:554:39:-;15442:13;15504:5;15512:1;15504:9;15492:1;:8;:21;;15471:105;;;;;;;;;;;;;;;;-1:-1:-1;;15632:2:39;15625:10;15619:17;15775:66;15763:79;;15327:554::o;5119:3574:5:-;5390:35;;:::i;:::-;5536:25;6109:35;;:::i;:::-;7033:45;;:::i;:::-;7318:38;;:::i;:::-;5564:50;5585:6;5592:1;5585:9;;;;;;;;;5564:50;5856:15;5829:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5536:78;;-1:-1:-1;5829:42:5;;5856:15;5829:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:6;5836:1;5829:9;;;;;;;;;;;;;;;;;;;:24;;:42;6187:9;;;6158:39;;;6187:9;;6158:39;6154:2304;;;6232:124;6270:6;6294:10;6322:20;6232;:124::i;:::-;6480:39;;6213:143;;-1:-1:-1;6480:63:5;-1:-1:-1;6480:63:5;6455:144;;;;;;;;;;;;;;6613:50;6628:16;6646;6613:14;:50::i;:::-;6702:244;6745:79;6753:16;:39;;;6794:16;:29;;;6745:7;:79::i;:::-;6859:39;;6702:21;:244::i;:::-;6677:325;;;;;;;;;;;;;;;;6154:2304;;;7081:55;7107:6;7115:20;7081:25;:55::i;:::-;7033:103;;7196:1;7154:26;:39;;;:43;7150:573;;;7359:165;7401:9;7432:13;7467:26;:39;;;7359:20;:165::i;:::-;7584:42;;;;;7542:39;;;:84;7676:32;;;;;7644:29;;;:64;7318:206;-1:-1:-1;7150:573:5;7841:8;;:128;;;;;:8;;;;;:24;;:128;;7883:6;;7907:20;;7945:10;;7841:128;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7841:128:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7841:128:5;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;7841:128:5;;;;;;;;;8008:39;;7822:147;;-1:-1:-1;8008:63:5;;7983:144;;;;;;;;;;;;;;8141:50;8156:16;8174;8141:14;:50::i;:::-;8230:161;8273:16;:39;;;8334:16;:39;;;8230:21;:161::i;:::-;8205:242;;;;;;;;;;;;;;;;8522:131;8549:17;8580:10;8604:16;:39;;;8522:13;:131::i;9238:2212::-;9471:35;;:::i;:::-;9522:25;9557:20;9603:38;9686:9;10365:38;;:::i;:::-;10729:35;;:::i;:::-;9580:6;:13;9557:36;;9658:12;9644:27;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;9644:27:5;;9603:68;;9698:1;9686:13;;9681:543;9705:12;9701:1;:16;9681:543;;;9791:46;9799:17;9818:6;9825:1;9818:9;;;;;;;;;;;;;;;;;;:18;;;9791:7;:46::i;:::-;10065:15;10038:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9771:66;;-1:-1:-1;10038:42:5;;10065:15;10038:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:6;10045:1;10038:9;;;;;;;;;;;;;;;;;;;:24;;:42;10187:9;;:6;;10194:1;;10187:9;;;;;;;;;;;;;;:26;;;10160:21;10182:1;10160:24;;;;;;;;;;;;;;;;;;:53;9719:3;;;;;9681:543;;;10257:1;10237:17;:21;10233:487;;;10406:127;10444:9;10471:13;10502:17;10406:20;:127::i;:::-;10579:32;;;;;10547:29;;;:64;10667:42;;;;;10625:39;;;:84;10365:168;-1:-1:-1;10233:487:5;10767:8;;:119;;;;;:8;;;;;:30;;:119;;10811:6;;10831:21;;10866:10;;10767:119;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10767:119:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10767:119:5;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;10767:119:5;;;;;;;;;10729:157;;10896:50;10911:16;10929;10896:14;:50::i;:::-;10977:149;11016:16;:39;;;11073:16;:39;;;10977:21;:149::i;:::-;10956:218;;;;;;;;;;;;;;;;11257:1;11253:5;;11248:163;11264:12;11260:1;:16;11248:163;;;11297:103;11334:6;11341:1;11334:9;;;;;;;;;;;;;;;;;;:24;;;11376:10;11297:19;:103::i;:::-;11278:3;;;;;11248:163;;;9238:2212;;;;;;;;;;;;:::o;2769:777:8:-;3200:20;3353:24;3076:1;3056:17;:21;3052:488;;;3093:11;;:39;;;;;:11;;;;;:20;;:39;;3114:17;;3093:39;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3093:39:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3093:39:8;;;;3223:116;3250:14;3282:13;3313:12;3223:9;:116::i;:::-;3200:139;;3380:40;3388:17;3407:12;3380:7;:40::i;:::-;3353:67;;3457:1;3438:16;:20;3434:96;;;3478:37;;:10;;:37;;;;;3498:16;;3478:37;;;;3498:16;3478:10;:37;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3478:37:8;3434:96;2769:777;;;;;;:::o;570:166:42:-;650:7;682:5;;;704:6;;;;697:14;;;4159:384:8;4291:4;;4342:138;1047:4;899:5;4451:19;4342:16;:138::i;:::-;4497:39;;;;;4159:384;-1:-1:-1;;;4159:384:8:o;2936:734:4:-;3103:35;;:::i;:::-;3159:9;3212:37;3336:35;;:::i;:::-;3171:1;3159:13;;3154:477;3178:6;:13;3174:1;:17;3154:477;;;3252:70;3260:20;3282:16;:39;;;3252:7;:70::i;:::-;3212:110;;3374:62;3395:6;3402:1;3395:9;;;;;;;;;3374:62;3336:100;;3450:50;3465:16;3483;3450:14;:50::i;:::-;3561:20;3518:16;:39;;;:63;3514:107;;;3601:5;;3514:107;3193:3;;;;;3154:477;;1819:2046:6;1994:35;;:::i;:::-;2050:9;2374:29;2663:31;3083:35;;:::i;:::-;2062:1;2050:13;;2045:1781;2069:6;:13;2065:1;:17;2045:1781;;;2223:14;2196:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2223:14;2196:41;;2223:14;2196:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:6;2203:1;2196:9;;;;;;;;;;;;;;;;;;;;:24;;:41;;;;2278:15;2251:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2278:15;2251:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:6;2258:1;2251:9;;;;;;;;;;;;;;;;;;;:24;;:42;2428:39;;2406:62;;2414:12;;2406:7;:62::i;:::-;2374:94;;2697:219;2731:6;2738:1;2731:9;;;;;;;;;;;;;;;;;;:26;;;2775:55;2783:6;2790:1;2783:9;;;;;;;;;;;;;;;;;;:26;;;2811:6;2818:1;2811:9;;;;;;;;;2697:219;3121:8;;3157:9;;2663:253;;-1:-1:-1;3121:8:6;;;:18;;3157:6;;3164:1;;3157:9;;;;;;;;;;;;;;3184:35;3192:23;3217:1;3184:7;:35::i;:::-;3237:10;3248:1;3237:13;;;;;;;;;;;;;;;;;;3121:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3121:143:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3121:143:6;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;3121:143:6;;;;;;;;;3083:181;;3409:79;3417:16;:39;;;3458:16;:29;;;3409:7;:79::i;:::-;3367:121;;3572:50;3587:16;3367;3572:14;:50::i;:::-;3721:39;;:55;-1:-1:-1;3717:99:6;;3796:5;;3717:99;2084:3;;;;;2045:1781;;;1819:2046;;;;;;;;;:::o;84:180:42:-;164:7;196:5;;;218:6;;;:20;;;237:1;232;228;:5;;;;;;;;:10;218:20;211:28;;;;;270:142;350:7;373:6;386:1;382;:5;;;;;;;;;270:142;-1:-1:-1;;;;270:142:42:o;1161:135::-;1246:7;1280:1;1276;:5;:13;;1288:1;1276:13;;;-1:-1:-1;1284:1:42;;1269:20;-1:-1:-1;1161:135:42:o;1343:467:3:-;1491:13;;1595:25;1507;:9;1529:2;1507:25;:21;:25;:::i;:::-;1491:41;-1:-1:-1;1560:25:3;:9;1582:2;1560:25;:21;:25;:::i;:::-;1542:43;-1:-1:-1;1623:34:3;:9;1653:3;1623:34;:29;:34;:::i;:::-;1667:136;;;;;1595:62;;-1:-1:-1;1667:36:3;;;;;;:136;;1725:4;;1744:2;;1760:7;;1595:62;;1667:136;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1667:136:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1667:136:3;;;;1343:467;;;;;:::o;14467:195:39:-;14588:14;14633:21;14645:1;14648:5;14633:11;:21::i;16204:672::-;16333:19;16407:25;16435:21;16447:1;16450:5;16435:11;:21::i;:::-;16407:49;;16475:2;16466:11;;;;16611:17;16603:5;:25;16591:1;:8;:37;;16570:132;;;;;;;;;;;;;;;;-1:-1:-1;;16824:13:39;;16204:672::o;13049:490::-;13170:14;13233:5;13241:2;13233:10;13221:1;:8;:22;;13200:107;;;;;;;;;;;;;;;;-1:-1:-1;13486:13:39;13388:2;13486:13;13480:20;;13049:490::o;816:1324:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;-1:-1:-1;816:1324:0;;;;;;;;;;;;;;;;;:::o;5:118:-1:-;;72:46;110:6;97:20;72:46;;130:122;;208:39;239:6;233:13;208:39;;275:693;;390:4;378:17;;374:27;-1:-1;364:2;;415:1;412;405:12;364:2;452:6;439:20;474:85;489:69;551:6;489:69;;;474:85;;;587:21;;;631:4;619:17;;;;465:94;;-1:-1;644:14;;619:17;739:1;724:238;749:6;746:1;743:13;724:238;;;832:3;819:17;811:6;807:30;856:42;894:3;882:10;856:42;;;844:55;;-1:-1;922:4;913:14;;;;941;;;;;771:1;764:9;724:238;;1008:735;;1137:4;1125:17;;1121:27;-1:-1;1111:2;;1162:1;1159;1152:12;1111:2;1199:6;1186:20;1221:99;1236:83;1312:6;1236:83;;1221:99;1348:21;;;1392:4;1380:17;;;;1212:108;;-1:-1;1405:14;;1380:17;1500:1;1485:252;1510:6;1507:1;1504:13;1485:252;;;1593:3;1580:17;1572:6;1568:30;1617:56;1669:3;1657:10;1617:56;;;1605:69;;-1:-1;1697:4;1688:14;;;;1716;;;;;1532:1;1525:9;1485:252;;1751:116;;1826:36;1854:6;1848:13;1826:36;;1874:122;;1952:39;1983:6;1977:13;1952:39;;2003:116;;2069:45;2106:6;2093:20;2069:45;;2127:432;;2217:4;2205:17;;2201:27;-1:-1;2191:2;;2242:1;2239;2232:12;2191:2;2279:6;2266:20;2301:60;2316:44;2353:6;2316:44;;2301:60;2292:69;;2381:6;2374:5;2367:21;2417:4;2409:6;2405:17;2450:4;2443:5;2439:16;2485:3;2476:6;2471:3;2467:16;2464:25;2461:2;;;2502:1;2499;2492:12;2461:2;2512:41;2546:6;2541:3;2536;2512:41;;3056:865;;3185:4;3173:9;3168:3;3164:19;3160:30;3157:2;;;3203:1;3200;3193:12;3157:2;3221:20;3236:4;3221:20;;;3212:29;-1:-1;3309:1;3340:60;3396:3;3376:9;3340:60;;;3316:85;;-1:-1;3480:2;3513:60;3569:3;3545:22;;;3513:60;;;3506:4;3499:5;3495:16;3488:86;3422:163;3643:2;3676:60;3732:3;3723:6;3712:9;3708:22;3676:60;;;3669:4;3662:5;3658:16;3651:86;3595:153;3806:2;3839:60;3895:3;3886:6;3875:9;3871:22;3839:60;;;3832:4;3825:5;3821:16;3814:86;3758:153;3151:770;;;;;3960:689;;4087:4;4075:9;4070:3;4066:19;4062:30;4059:2;;;4105:1;4102;4095:12;4059:2;4123:20;4138:4;4123:20;;;4114:29;-1:-1;4200:1;4231:58;4285:3;4265:9;4231:58;;;4207:83;;-1:-1;4356:2;4389:60;4445:3;4421:22;;;4389:60;;;4382:4;4375:5;4371:16;4364:86;4311:150;4534:2;4567:60;4623:3;4614:6;4603:9;4599:22;4567:60;;;4560:4;4553:5;4549:16;4542:86;4471:168;4053:596;;;;;4684:2205;;4792:5;4780:9;4775:3;4771:19;4767:31;4764:2;;;4811:1;4808;4801:12;4764:2;4829:21;4844:5;4829:21;;;4820:30;-1:-1;4908:1;4939:49;4984:3;4964:9;4939:49;;;4915:74;;-1:-1;5058:2;5091:49;5136:3;5112:22;;;5091:49;;;5084:4;5077:5;5073:16;5066:75;5010:142;5217:2;5250:49;5295:3;5286:6;5275:9;5271:22;5250:49;;;5243:4;5236:5;5232:16;5225:75;5162:149;5370:2;5403:49;5448:3;5439:6;5428:9;5424:22;5403:49;;;5396:4;5389:5;5385:16;5378:75;5321:143;5526:3;5560:49;5605:3;5596:6;5585:9;5581:22;5560:49;;;5553:4;5546:5;5542:16;5535:75;5474:147;5683:3;5717:49;5762:3;5753:6;5742:9;5738:22;5717:49;;;5710:4;5703:5;5699:16;5692:75;5631:147;5832:3;5866:49;5911:3;5902:6;5891:9;5887:22;5866:49;;;5859:4;5852:5;5848:16;5841:75;5788:139;5981:3;6015:49;6060:3;6051:6;6040:9;6036:22;6015:49;;;6008:4;6001:5;5997:16;5990:75;5937:139;6143:3;6178:49;6223:3;6214:6;6203:9;6199:22;6178:49;;;6170:5;6163;6159:17;6152:76;6086:153;6289:3;6324:49;6369:3;6360:6;6349:9;6345:22;6324:49;;;6316:5;6309;6305:17;6298:76;6249:136;6473:3;6462:9;6458:19;6445:33;6498:18;6490:6;6487:30;6484:2;;;6530:1;6527;6520:12;6484:2;6566:54;6616:3;6607:6;6596:9;6592:22;6566:54;;;6558:5;6551;6547:17;6540:81;6395:237;6720:3;6709:9;6705:19;6692:33;6745:18;6737:6;6734:30;6731:2;;;6777:1;6774;6767:12;6731:2;6813:54;6863:3;6854:6;6843:9;6839:22;6813:54;;;6805:5;6798;6794:17;6787:81;6642:237;4758:2131;;;;;6896:116;;6962:45;6999:6;6986:20;6962:45;;7019:118;;7086:46;7124:6;7111:20;7086:46;;7273:118;;7349:37;7378:6;7372:13;7349:37;;7398:241;;7502:2;7490:9;7481:7;7477:23;7473:32;7470:2;;;7518:1;7515;7508:12;7470:2;7553:1;7570:53;7615:7;7595:9;7570:53;;7646:263;;7761:2;7749:9;7740:7;7736:23;7732:32;7729:2;;;7777:1;7774;7767:12;7729:2;7812:1;7829:64;7885:7;7865:9;7829:64;;7916:721;;;;;8080:3;8068:9;8059:7;8055:23;8051:33;8048:2;;;8097:1;8094;8087:12;8048:2;8132:1;8149:53;8194:7;8174:9;8149:53;;;8139:63;;8111:97;8239:2;8257:53;8302:7;8293:6;8282:9;8278:22;8257:53;;;8247:63;;8218:98;8347:2;8365:53;8410:7;8401:6;8390:9;8386:22;8365:53;;;8355:63;;8326:98;8483:2;8472:9;8468:18;8455:32;8507:18;8499:6;8496:30;8493:2;;;8539:1;8536;8529:12;8493:2;8559:62;8613:7;8604:6;8593:9;8589:22;8559:62;;;8549:72;;8434:193;8042:595;;;;;;;;8644;;;;8791:2;8779:9;8770:7;8766:23;8762:32;8759:2;;;8807:1;8804;8797:12;8759:2;8842:1;8859:53;8904:7;8884:9;8859:53;;;8849:63;;8821:97;8949:2;8967:53;9012:7;9003:6;8992:9;8988:22;8967:53;;;8957:63;;8928:98;9085:2;9074:9;9070:18;9057:32;9109:18;9101:6;9098:30;9095:2;;;9141:1;9138;9131:12;9095:2;9161:62;9215:7;9206:6;9195:9;9191:22;9161:62;;;9151:72;;9036:193;8753:486;;;;;;9246:1507;;;;;;;9582:3;9570:9;9561:7;9557:23;9553:33;9550:2;;;9599:1;9596;9589:12;9550:2;9634:31;;9685:18;9674:30;;9671:2;;;9717:1;9714;9707:12;9671:2;9737:97;9826:7;9817:6;9806:9;9802:22;9737:97;;;9727:107;;9613:227;9899:2;9888:9;9884:18;9871:32;9923:18;9915:6;9912:30;9909:2;;;9955:1;9952;9945:12;9909:2;9975:83;10050:7;10041:6;10030:9;10026:22;9975:83;;;9965:93;;9850:214;10123:2;10112:9;10108:18;10095:32;10147:18;10139:6;10136:30;10133:2;;;10179:1;10176;10169:12;10133:2;10199:97;10288:7;10279:6;10268:9;10264:22;10199:97;;;10189:107;;10074:228;10361:2;10350:9;10346:18;10333:32;10385:18;10377:6;10374:30;10371:2;;;10417:1;10414;10407:12;10371:2;10437:83;10512:7;10503:6;10492:9;10488:22;10437:83;;;10427:93;;10312:214;10557:3;10576:52;10620:7;10611:6;10600:9;10596:22;10576:52;;;10566:62;;10536:98;10665:3;10684:53;10729:7;10720:6;10709:9;10705:22;10684:53;;;10674:63;;10644:99;9544:1209;;;;;;;;;10760:1633;;;;;;;;11113:3;11101:9;11092:7;11088:23;11084:33;11081:2;;;11130:1;11127;11120:12;11081:2;11165:31;;11216:18;11205:30;;11202:2;;;11248:1;11245;11238:12;11202:2;11268:97;11357:7;11348:6;11337:9;11333:22;11268:97;;;11258:107;;11144:227;11430:2;11419:9;11415:18;11402:32;11454:18;11446:6;11443:30;11440:2;;;11486:1;11483;11476:12;11440:2;11506:83;11581:7;11572:6;11561:9;11557:22;11506:83;;;11496:93;;11381:214;11654:2;11643:9;11639:18;11626:32;11678:18;11670:6;11667:30;11664:2;;;11710:1;11707;11700:12;11664:2;11730:97;11819:7;11810:6;11799:9;11795:22;11730:97;;;11720:107;;11605:228;11892:2;11881:9;11877:18;11864:32;11916:18;11908:6;11905:30;11902:2;;;11948:1;11945;11938:12;11902:2;11968:83;12043:7;12034:6;12023:9;12019:22;11968:83;;;11958:93;;11843:214;12088:3;12107:53;12152:7;12143:6;12132:9;12128:22;12107:53;;;12097:63;;12067:99;12197:3;12216:52;12260:7;12251:6;12240:9;12236:22;12216:52;;;12206:62;;12176:98;12305:3;12324:53;12369:7;12360:6;12349:9;12345:22;12324:53;;;12314:63;;12284:99;11075:1318;;;;;;;;;;;12400:540;;;12565:2;12553:9;12544:7;12540:23;12536:32;12533:2;;;12581:1;12578;12571:12;12533:2;12616:31;;12667:18;12656:30;;12653:2;;;12699:1;12696;12689:12;12653:2;12719:97;12808:7;12799:6;12788:9;12784:22;12719:97;;;12709:107;;12595:227;12853:2;12871:53;12916:7;12907:6;12896:9;12892:22;12871:53;;;12861:63;;12832:98;12527:413;;;;;;12947:257;;13059:2;13047:9;13038:7;13034:23;13030:32;13027:2;;;13075:1;13072;13065:12;13027:2;13110:1;13127:61;13180:7;13160:9;13127:61;;13211:239;;13314:2;13302:9;13293:7;13289:23;13285:32;13282:2;;;13330:1;13327;13320:12;13282:2;13365:1;13382:52;13426:7;13406:9;13382:52;;13457:322;;13601:3;13589:9;13580:7;13576:23;13572:33;13569:2;;;13618:1;13615;13608:12;13569:2;13653:1;13670:93;13755:7;13735:9;13670:93;;13786:317;;13928:2;13916:9;13907:7;13903:23;13899:32;13896:2;;;13944:1;13941;13934:12;13896:2;13979:1;13996:91;14079:7;14059:9;13996:91;;14110:110;14183:31;14208:5;14183:31;;;14178:3;14171:44;14165:55;;;14254:766;;14399:59;14452:5;14399:59;;;14476:6;14471:3;14464:19;14500:4;14495:3;14491:14;14484:21;;14548:3;14590:4;14582:6;14578:17;14573:3;14569:27;14616:61;14671:5;14616:61;;;14698:1;14683:298;14708:6;14705:1;14702:13;14683:298;;;14770:9;14764:4;14760:20;14755:3;14748:33;14796:68;14859:4;14850:6;14844:13;14796:68;;;14788:76;;14881:65;14939:6;14881:65;;;14969:4;14960:14;;;;;14871:75;-1:-1;14730:1;14723:9;14683:298;;;-1:-1;14994:4;;14378:642;-1:-1;;;;;;14378:642;15087:864;;15260:73;15327:5;15260:73;;;15351:6;15346:3;15339:19;15375:4;15370:3;15366:14;15359:21;;15423:3;15465:4;15457:6;15453:17;15448:3;15444:27;15491:75;15560:5;15491:75;;;15587:1;15572:340;15597:6;15594:1;15591:13;15572:340;;;15659:9;15653:4;15649:20;15644:3;15637:33;15685:96;15776:4;15767:6;15761:13;15685:96;;;15677:104;;15798:79;15870:6;15798:79;;;15900:4;15891:14;;;;;15788:89;-1:-1;15619:1;15612:9;15572:340;;15990:590;;16125:54;16173:5;16125:54;;;16197:6;16192:3;16185:19;16221:4;16216:3;16212:14;16205:21;;16266:56;16316:5;16266:56;;;16343:1;16328:230;16353:6;16350:1;16347:13;16328:230;;;16393:53;16442:3;16433:6;16427:13;16393:53;;;16463:60;16516:6;16463:60;;;16546:4;16537:14;;;;;16453:70;-1:-1;16375:1;16368:9;16328:230;;;-1:-1;16571:3;;16104:476;-1:-1;;;;16104:476;16588:107;16659:30;16683:5;16659:30;;16702:297;;16802:38;16834:5;16802:38;;;16857:6;16852:3;16845:19;16869:63;16925:6;16918:4;16913:3;16909:14;16902:4;16895:5;16891:16;16869:63;;;16964:29;16986:6;16964:29;;;16944:50;;;16957:4;16944:50;;16782:217;-1:-1;;;16782:217;17303:397;17458:2;17446:15;;17495:66;17490:2;17481:12;;17474:88;17596:66;17591:2;17582:12;;17575:88;17691:2;17682:12;;17439:261;17709:296;17864:2;17852:15;;17901:66;17896:2;17887:12;;17880:88;17996:2;17987:12;;17845:160;18014:397;18169:2;18157:15;;18206:66;18201:2;18192:12;;18185:88;18307:66;18302:2;18293:12;;18286:88;18402:2;18393:12;;18150:261;18420:296;18575:2;18563:15;;18612:66;18607:2;18598:12;;18591:88;18707:2;18698:12;;18556:160;18725:397;18880:2;18868:15;;18917:66;18912:2;18903:12;;18896:88;19018:66;19013:2;19004:12;;18997:88;19113:2;19104:12;;18861:261;19131:296;19286:2;19274:15;;19323:66;19318:2;19309:12;;19302:88;19418:2;19409:12;;19267:160;19436:296;19591:2;19579:15;;19628:66;19623:2;19614:12;;19607:88;19723:2;19714:12;;19572:160;19741:296;19896:2;19884:15;;19933:66;19928:2;19919:12;;19912:88;20028:2;20019:12;;19877:160;20046:296;20201:2;20189:15;;20238:66;20233:2;20224:12;;20217:88;20333:2;20324:12;;20182:160;20351:397;20506:2;20494:15;;20543:66;20538:2;20529:12;;20522:88;20644:66;20639:2;20630:12;;20623:88;20739:2;20730:12;;20487:261;20757:296;20912:2;20900:15;;20949:66;20944:2;20935:12;;20928:88;21044:2;21035:12;;20893:160;21062:397;21217:2;21205:15;;21254:66;21249:2;21240:12;;21233:88;21355:66;21350:2;21341:12;;21334:88;21450:2;21441:12;;21198:261;21544:888;21772:22;;21685:4;21676:14;;;21806:61;21680:3;21772:22;21806:61;;;21705:174;21973:4;21966:5;21962:16;21956:23;21991:62;22047:4;22042:3;22038:14;22025:11;21991:62;;;21889:176;22149:4;22142:5;22138:16;22132:23;22167:62;22223:4;22218:3;22214:14;22201:11;22167:62;;;22075:166;22325:4;22318:5;22314:16;22308:23;22343:62;22399:4;22394:3;22390:14;22377:11;22343:62;;22492:2419;22707:22;;22492:2419;;22629:5;22620:15;;;22741:61;22624:3;22707:22;22741:61;;;22650:164;22898:4;22891:5;22887:16;22881:23;22916:62;22972:4;22967:3;22963:14;22950:11;22916:62;;;22824:166;23081:4;23074:5;23070:16;23064:23;23099:62;23155:4;23150:3;23146:14;23133:11;23099:62;;;23000:173;23258:4;23251:5;23247:16;23241:23;23276:62;23332:4;23327:3;23323:14;23310:11;23276:62;;;23183:167;23438:4;23431:5;23427:16;23421:23;23456:62;23512:4;23507:3;23503:14;23490:11;23456:62;;;23360:170;23618:4;23611:5;23607:16;23601:23;23636:62;23692:4;23687:3;23683:14;23670:11;23636:62;;;23540:170;23790:4;23783:5;23779:16;23773:23;23808:62;23864:4;23859:3;23855:14;23842:11;23808:62;;;23720:162;23962:4;23955:5;23951:16;23945:23;23980:62;24036:4;24031:3;24027:14;24014:11;23980:62;;;23892:162;24147:5;24140;24136:17;24130:24;24166:63;24222:5;24217:3;24213:15;24200:11;24166:63;;;24064:177;24317:5;24310;24306:17;24300:24;24336:63;24392:5;24387:3;24383:15;24370:11;24336:63;;;24251:160;24497:5;24490;24486:17;24480:24;24550:3;24544:4;24540:14;24532:5;24527:3;24523:15;24516:39;24570:66;24631:4;24618:11;24570:66;;;24562:74;;24421:227;24734:5;24727;24723:17;24717:24;24787:3;24781:4;24777:14;24769:5;24764:3;24760:15;24753:39;24807:66;24868:4;24855:11;24807:66;;;24799:74;22602:2309;-1:-1;;;;;22602:2309;27393:107;27464:30;27488:5;27464:30;;27507:110;27580:31;27605:5;27580:31;;27624:193;27732:2;27717:18;;27746:61;27721:9;27780:6;27746:61;;27824:581;28034:3;28019:19;;28049:61;28023:9;28083:6;28049:61;;;28121:62;28179:2;28168:9;28164:18;28155:6;28121:62;;;28194;28252:2;28241:9;28237:18;28228:6;28194:62;;;28304:9;28298:4;28294:20;28289:2;28278:9;28274:18;28267:48;28329:66;28390:4;28381:6;28329:66;;;28321:74;28005:400;-1:-1;;;;;;28005:400;28412:294;28548:2;28533:18;;28562:61;28537:9;28596:6;28562:61;;;28634:62;28692:2;28681:9;28677:18;28668:6;28634:62;;28713:935;29075:2;29089:47;;;29060:18;;29150:136;29060:18;29272:6;29150:136;;;29142:144;;29334:9;29328:4;29324:20;29319:2;29308:9;29304:18;29297:48;29359:98;29452:4;29443:6;29359:98;;;29351:106;;29505:9;29499:4;29495:20;29490:2;29479:9;29475:18;29468:48;29530:108;29633:4;29624:6;29530:108;;29655:787;29967:2;29981:47;;;29952:18;;30042:136;29952:18;30164:6;30042:136;;;30034:144;;30189:62;30247:2;30236:9;30232:18;30223:6;30189:62;;;30299:9;30293:4;30289:20;30284:2;30273:9;30269:18;30262:48;30324:108;30427:4;30418:6;30324:108;;30449:189;30555:2;30540:18;;30569:59;30544:9;30601:6;30569:59;;30645:387;30826:2;30840:47;;;30811:18;;30901:121;30811:18;30901:121;;31039:387;31220:2;31234:47;;;31205:18;;31295:121;31205:18;31295:121;;31433:387;31614:2;31628:47;;;31599:18;;31689:121;31599:18;31689:121;;31827:387;32008:2;32022:47;;;31993:18;;32083:121;31993:18;32083:121;;32221:387;32402:2;32416:47;;;32387:18;;32477:121;32387:18;32477:121;;32615:387;32796:2;32810:47;;;32781:18;;32871:121;32781:18;32871:121;;33009:387;33190:2;33204:47;;;33175:18;;33265:121;33175:18;33265:121;;33403:387;33584:2;33598:47;;;33569:18;;33659:121;33569:18;33659:121;;33797:387;33978:2;33992:47;;;33963:18;;34053:121;33963:18;34053:121;;34191:387;34372:2;34386:47;;;34357:18;;34447:121;34357:18;34447:121;;34585:387;34766:2;34780:47;;;34751:18;;34841:121;34751:18;34841:121;;34979:387;35160:2;35174:47;;;35145:18;;35235:121;35145:18;35235:121;;35373:310;35539:3;35524:19;;35554:119;35528:9;35646:6;35554:119;;35690:333;35844:2;35858:47;;;35829:18;;35919:94;35829:18;35999:6;35919:94;;36030:603;36250:2;36264:47;;;36235:18;;36325:90;36235:18;36401:6;36325:90;;;36317:98;;36426:62;36484:2;36473:9;36469:18;36460:6;36426:62;;;36536:9;36530:4;36526:20;36521:2;36510:9;36506:18;36499:48;36561:62;36618:4;36609:6;36561:62;;36640:189;36746:2;36731:18;;36760:59;36735:9;36792:6;36760:59;;36836:193;36944:2;36929:18;;36958:61;36933:9;36992:6;36958:61;;37036:256;37098:2;37092:9;37124:17;;;37199:18;37184:34;;37220:22;;;37181:62;37178:2;;;37256:1;37253;37246:12;37178:2;37272;37265:22;37076:216;;-1:-1;37076:216;37299:263;;37463:18;37455:6;37452:30;37449:2;;;37495:1;37492;37485:12;37449:2;-1:-1;37524:4;37512:17;;;37542:15;;37386:176;37853:254;;37992:18;37984:6;37981:30;37978:2;;;38024:1;38021;38014:12;37978:2;-1:-1;38097:4;38068;38045:17;;;;38064:9;38041:33;38087:15;;37915:192;38381:126;38495:4;38483:17;;38464:43;38799:112;38894:12;;38878:33;39774:128;39854:42;39843:54;;39826:76;39909:151;39988:66;39977:78;;39960:100;40067:91;40146:6;40135:18;;40118:40;40165:79;40234:5;40217:27;40386:92;40459:13;40452:21;;40435:43;40913:88;40991:4;40980:16;;40963:38;41009:145;41090:6;41085:3;41080;41067:30;-1:-1;41146:1;41128:16;;41121:27;41060:94;41163:268;41228:1;41235:101;41249:6;41246:1;41243:13;41235:101;;;41316:11;;;41310:18;41297:11;;;41290:39;41271:2;41264:10;41235:101;;;41351:6;41348:1;41345:13;41342:2;;;-1:-1;;41416:1;41398:16;;41391:27;41212:219;41439:97;41527:2;41507:14;41523:7;41503:28;;41487:49"
+ "object": "0x6080604052600436106100a35763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663150b7a0281146100ff578063169645f2146101355780631c5b1ec41461015557806320472cf714610175578063725cef0614610197578063b3cd4254146101aa578063bc063e1a146101bf578063c5e6e6ac146101d4578063e58e9c16146101f4578063f0b9e5ba14610214575b60015473ffffffffffffffffffffffffffffffffffffffff1633146100fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f490612e71565b60405180910390fd5b005b34801561010b57600080fd5b5061011f61011a36600461248a565b610234565b60405161012c9190612e63565b60405180910390f35b610148610143366004612568565b610294565b60405161012c9190612f31565b34801561016157600080fd5b50610148610170366004612749565b610560565b34801561018157600080fd5b5061018a610626565b60405161012c9190612f82565b6101486101a536600461264e565b61062c565b3480156101b657600080fd5b5061018a6109fa565b3480156101cb57600080fd5b5061018a610a00565b3480156101e057600080fd5b506101486101ef366004612749565b610a06565b34801561020057600080fd5b5061014861020f366004612749565b610a79565b34801561022057600080fd5b5061011f61022f366004612503565b610b76565b604080517f6f6e455243373231526563656976656428616464726573732c6164647265737381527f2c75696e743235362c62797465732900000000000000000000000000000000006020820152905190819003602f019020949350505050565b61029c6120ed565b34600080808084116102da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f490612ea1565b6102e5848888610bd6565b92506102f18484610ca4565b9150600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016000604051808303818588803b15801561037957600080fd5b505af115801561038d573d6000803e3d6000fd5b50505050506103ba8b60008151811015156103a457fe5b9060200190602002015161014001516010610ceb565b60048054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010060018816150201909516949094049384018190048102820181019092528281529394508301828280156104605780601f1061043557610100808354040283529160200191610460565b820191906000526020600020905b81548152906001019060200180831161044357829003601f168201915b50505050508b600081518110151561047457fe5b60209081029091010151610160015260025473ffffffffffffffffffffffffffffffffffffffff828116911614156104b8576104b18b8b84610d4c565b94506104c8565b6104c58b8b8b8b86610e66565b94505b6020850151841015610506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f490612e81565b60208501518214610543576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f490612ef1565b61055281338760000151610fee565b505050509695505050505050565b6105686120ed565b60008060006105756120ed565b600093505b865184101561061c57610591868660000151610ca4565b92506105d487858151811015156105a457fe5b9060200190602002015160a0015188868151811015156105c057fe5b9060200190602002015160800151856111c8565b91506105f787858151811015156105e757fe5b90602001906020020151836111e5565b9050610603858261132e565b84518614156106115761061c565b60019093019261057a565b5050505092915050565b61251c81565b6106346120ed565b346000808211610670576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f490612ea1565b600086116106aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f490612ea1565b6106d28a60008151811015156106bc57fe5b9060200190602002015161014001516000611390565b604080517f4552433230546f6b656e28616464726573732900000000000000000000000000815290519081900360130190209091507fffffffff00000000000000000000000000000000000000000000000000000000808316911614806107b45750604080517f455243373231546f6b656e28616464726573732c75696e743235362c6279746581527f7329000000000000000000000000000000000000000000000000000000000000602082015290519081900360220190207fffffffff000000000000000000000000000000000000000000000000000000008281169116145b15156107ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f490612f11565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016000604051808303818588803b15801561087257600080fd5b505af1158015610886573d6000803e3d6000fd5b5050604080517f4552433230546f6b656e28616464726573732900000000000000000000000000815290519081900360130190207fffffffff000000000000000000000000000000000000000000000000000000008581169116141592506108ff915050576108f88a8a8a8a8a6113fd565b9250610992565b604080517f455243373231546f6b656e28616464726573732c75696e743235362c6279746581527f7329000000000000000000000000000000000000000000000000000000000000602082015290519081900360220190207fffffffff00000000000000000000000000000000000000000000000000000000828116911614156109925761098f8a8a8a8a611754565b92505b60208301518210156109d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f490612e81565b6109ed6109e1838560200151610ca4565b84602001518787611a56565b5050979650505050505050565b61271081565b6103e881565b610a0e6120ed565b600080610a196120ed565b600092505b8551831015610a7057610a35858560200151610ca4565b9150610a4886848151811015156105e757fe5b9050610a54848261132e565b8484602001511415610a6557610a70565b600190920191610a1e565b50505092915050565b610a816120ed565b6000806000610a8e6120ed565b600093505b865184101561061c57610aaa868660000151610ca4565b9250610b118785815181101515610abd57fe5b9060200190602002015160a00151610b0b8987815181101515610adc57fe5b90602001906020020151608001518a88815181101515610af857fe5b9060200190602002015160e00151610ca4565b856111c8565b9150610b3e8785815181101515610b2457fe5b90602001906020020151610b39846001611b43565b6111e5565b9050610b5281600001518260600151610ca4565b8152610b5e858261132e565b84518611610b6b5761061c565b600190930192610a93565b604080517f6f6e455243373231526563656976656428616464726573732c75696e7432353681527f2c62797465732900000000000000000000000000000000000000000000000000602082015290519081900360270190205b9392505050565b6000808361ffff16118015610c00575073ffffffffffffffffffffffffffffffffffffffff821615155b15610bcf576103e861ffff84161115610c45576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f490612ed1565b610c5661ffff8416612710866111c8565b60405190915073ffffffffffffffffffffffffffffffffffffffff83169082156108fc029083906000818181858888f19350505050158015610c9c573d6000803e3d6000fd5b509392505050565b600082821115610ce0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f490612ec1565b508082035b92915050565b600081601401835110151515610d2d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f490612f01565b50016014015173ffffffffffffffffffffffffffffffffffffffff1690565b610d546120ed565b600080546040517f7e1d980800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690637e1d980890610daf90889087908990600401612e31565b608060405180830381600087803b158015610dc957600080fd5b505af1158015610ddd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610e01919081019061279a565b9150610e1582600001518360600151610ca4565b9050610e25826000015182611b8d565b1515610e5d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f490612ef1565b81529392505050565b610e6e6120ed565b6000610e786120ed565b610e806120ed565b610e886120ed565b859350610e958a87610a06565b9250600083606001511115610f2957610eb388888560600151611baa565b9150610ecc86610ec7888560200151610ca4565b611b8d565b1515610f04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f490612ef1565b610f12848360200151610ca4565b606080840151908701526020808401519087015293505b6000546040517f7e1d980800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690637e1d980890610f83908d9088908e90600401612e31565b608060405180830381600087803b158015610f9d57600080fd5b505af1158015610fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610fd5919081019061279a565b9050610fe1858261132e565b5050505095945050505050565b604080517f7472616e7366657228616464726573732c75696e7432353629000000000000008152905190819003601901812060009173ffffffffffffffffffffffffffffffffffffffff8616919061104c9086908690602401612ddd565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931783525181519192909182919080838360005b838110156110f05781810151838201526020016110d8565b50505050905090810190601f16801561111d5780820380516001836020036101000a031916815260200191505b509150506000604051808303816000865af19250505080151561116c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f490612ee1565b3d15611189575060003d602014156111895760206000803e506000515b8015156111c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f490612ee1565b50505050565b60006111dd6111d78584611ee3565b84611f3e565b949350505050565b6111ed6120ed565b6111f5612116565b600080546040517fc75e0a81000000000000000000000000000000000000000000000000000000008152829173ffffffffffffffffffffffffffffffffffffffff169063c75e0a819061124c908990600401612f3f565b606060405180830381600087803b15801561126657600080fd5b505af115801561127a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061129e91908101906127b8565b805190935060ff166003146112b257610a70565b6112c48660a001518460400151610ca4565b91506112d08583611f55565b9050808460200181815250506112ef818760a0015188608001516111c8565b845260a086015160c08701516113069183916111c8565b604085015260a086015160e08701516113209183916111c8565b606085015250505092915050565b8151815161133c9190611b43565b8252602080830151908201516113529190611b43565b60208301526040808301519082015161136b9190611b43565b6040830152606080830151908201516113849190611b43565b60609092019190915250565b6000816004018351101515156113d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f490612f21565b5050602001517fffffffff000000000000000000000000000000000000000000000000000000001690565b6114056120ed565b600061140f6120ed565b6114176120ed565b61141f6120ed565b6114318a60008151811015156103a457fe5b60048054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010060018816150201909516949094049384018190048102820181019092528281529397508301828280156114d75780601f106114ac576101008083540402835291602001916114d7565b820191906000526020600020905b8154815290600101906020018083116114ba57829003601f168201915b50505050508a60008151811015156114eb57fe5b60209081029091010151610160015260025473ffffffffffffffffffffffffffffffffffffffff858116911614156115c9576115288a8a88611baa565b8051909350861115611566576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f490612ef1565b611570858461132e565b61158c61158586600001518760600151611b43565b8651611b8d565b15156115c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f490612ef1565b611745565b6115d38a87610560565b9150600082606001511115611608576115f188888460600151611baa565b602080820151908701526060808201519087015290505b6000546040517fe5fa431b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e5fa431b90611662908d908a908e90600401612e31565b608060405180830381600087803b15801561167c57600080fd5b505af1158015611690573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506116b4919081019061279a565b805190935086146116f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f490612ef1565b6116fb858461132e565b61170d85602001518460200151611b8d565b1515611745576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f490612ef1565b610fe184338560000151610fee565b61175c6120ed565b6000806060600061176b6120ed565b6117736120ed565b8a519450846040519080825280602002602001820160405280156117a1578160200160208202803883390190505b509350600092505b848310156118dd576117d6868c858151811015156117c357fe5b9060200190602002015160e00151611b43565b60048054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600188161502019095169490940493840181900481028201810190925282815293995083018282801561187c5780601f106118515761010080835404028352916020019161187c565b820191906000526020600020905b81548152906001019060200180831161185f57829003601f168201915b50505050508b8481518110151561188f57fe5b6020908102909101015161016001528a518b90849081106118ac57fe5b9060200190602002015160a0015184848151811015156118c857fe5b602090810290910101526001909201916117a9565b6000861115611908576118f1898988611baa565b606080820151908901526020808201519089015291505b6000546040517f4d0ae54600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690634d0ae54690611962908e9088908f90600401612df8565b608060405180830381600087803b15801561197c57600080fd5b505af1158015611990573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506119b4919081019061279a565b90506119c0878261132e565b6119d287602001518260200151611b8d565b1515611a0a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f490612ef1565b600092505b84831015611a4857611a3d8b84815181101515611a2857fe5b90602001906020020151610140015133611f6b565b600190920191611a0f565b505050505050949350505050565b6000806000861115611b3b576001546040517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690632e1a7d4d90611ab8908990600401612f90565b600060405180830381600087803b158015611ad257600080fd5b505af1158015611ae6573d6000803e3d6000fd5b50505050611af5858585610bd6565b9150611b018683610ca4565b90506000811115611b3b57604051339082156108fc029083906000818181858888f19350505050158015611b39573d6000803e3d6000fd5b505b505050505050565b600082820183811015611b82576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f490612ec1565b8091505b5092915050565b600080611b9f61251c612710866111c8565b909210159392505050565b611bb26120ed565b6000806000611bbf6120ed565b600093505b8751841015611ed8576003805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f81018490048402820184019092528181529291830182828015611c715780601f10611c4657610100808354040283529160200191611c71565b820191906000526020600020905b815481529060010190602001808311611c5457829003601f168201915b50505050508885815181101515611c8457fe5b602090810290910181015161014001919091526004805460408051601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600187161502019094169390930492830185900485028101850190915281815292830182828015611d395780601f10611d0e57610100808354040283529160200191611d39565b820191906000526020600020905b815481529060010190602001808311611d1c57829003601f168201915b50505050508885815181101515611d4c57fe5b6020908102909101015161016001528451611d68908790610ca4565b9250611db68885815181101515611d7b57fe5b9060200190602002015160a00151610b0b8a87815181101515611d9a57fe5b90602001906020020151608001518b88815181101515610af857fe5b600054895191935073ffffffffffffffffffffffffffffffffffffffff169063b4be83d5908a9087908110611de757fe5b90602001906020020151611dfc856001611b43565b8a88815181101515611e0a57fe5b906020019060200201516040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401611e4e93929190612f50565b608060405180830381600087803b158015611e6857600080fd5b505af1158015611e7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611ea0919081019061279a565b9050611eb481600001518260600151610ca4565b8152611ec0858261132e565b84518611611ecd57611ed8565b600190930192611bc4565b505050509392505050565b600080831515611ef65760009150611b86565b50828202828482811515611f0657fe5b0414611b82576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f490612ec1565b6000808284811515611f4c57fe5b04949350505050565b6000818310611f645781610bcf565b5090919050565b6000806060611f8185601063ffffffff610ceb16565b9250611f9485602463ffffffff61203b16565b9150611fa785606463ffffffff61204716565b6040517fb88d4fde00000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff84169063b88d4fde90612002903090889087908790600401612d99565b600060405180830381600087803b15801561201c57600080fd5b505af1158015612030573d6000803e3d6000fd5b505050505050505050565b6000610bcf83836120a2565b60606000612055848461203b565b905060208301925080830184511015151561209c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f490612e91565b50500190565b6000816020018351101515156120e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f490612eb1565b50016020015190565b608060405190810160405280600081526020016000815260200160008152602001600081525090565b604080516060810182526000808252602082018190529181019190915290565b6000610bcf8235613036565b6000601f8201831361215357600080fd5b813561216661216182612fc5565b612f9e565b81815260209384019390925082018360005b8381101561061c578135860161218e888261220d565b8452506020928301929190910190600101612178565b6000601f820183136121b557600080fd5b81356121c361216182612fc5565b81815260209384019390925082018360005b8381101561061c57813586016121eb888261231d565b84525060209283019291909101906001016121d5565b6000610bcf825161307b565b6000601f8201831361221e57600080fd5b813561222c61216182612fe6565b9150808252602083016020830185838301111561224857600080fd5b610a70838284613084565b60006080828403121561226557600080fd5b61226f6080612f9e565b9050600061227d8484612201565b825250602061228e84848301612201565b60208301525060406122a284828501612201565b60408301525060606122b684828501612201565b60608301525092915050565b6000606082840312156122d457600080fd5b6122de6060612f9e565b905060006122ec848461247e565b82525060206122fd84848301612201565b602083015250604061231184828501612201565b60408301525092915050565b6000610180828403121561233057600080fd5b61233b610180612f9e565b905060006123498484612136565b825250602061235a84848301612136565b602083015250604061236e84828501612136565b604083015250606061238284828501612136565b606083015250608061239684828501612472565b60808301525060a06123aa84828501612472565b60a08301525060c06123be84828501612472565b60c08301525060e06123d284828501612472565b60e0830152506101006123e784828501612472565b610100830152506101206123fd84828501612472565b6101208301525061014082013567ffffffffffffffff81111561241f57600080fd5b61242b8482850161220d565b6101408301525061016082013567ffffffffffffffff81111561244d57600080fd5b6124598482850161220d565b6101608301525092915050565b6000610bcf8235613074565b6000610bcf823561307b565b6000610bcf825161307e565b600080600080608085870312156124a057600080fd5b60006124ac8787612136565b94505060206124bd87828801612136565b93505060406124ce87828801612472565b925050606085013567ffffffffffffffff8111156124eb57600080fd5b6124f78782880161220d565b91505092959194509250565b60008060006060848603121561251857600080fd5b60006125248686612136565b935050602061253586828701612472565b925050604084013567ffffffffffffffff81111561255257600080fd5b61255e8682870161220d565b9150509250925092565b60008060008060008060c0878903121561258157600080fd5b863567ffffffffffffffff81111561259857600080fd5b6125a489828a016121a4565b965050602087013567ffffffffffffffff8111156125c157600080fd5b6125cd89828a01612142565b955050604087013567ffffffffffffffff8111156125ea57600080fd5b6125f689828a016121a4565b945050606087013567ffffffffffffffff81111561261357600080fd5b61261f89828a01612142565b935050608061263089828a01612466565b92505060a061264189828a01612136565b9150509295509295509295565b600080600080600080600060e0888a03121561266957600080fd5b873567ffffffffffffffff81111561268057600080fd5b61268c8a828b016121a4565b975050602088013567ffffffffffffffff8111156126a957600080fd5b6126b58a828b01612142565b965050604088013567ffffffffffffffff8111156126d257600080fd5b6126de8a828b016121a4565b955050606088013567ffffffffffffffff8111156126fb57600080fd5b6127078a828b01612142565b94505060806127188a828b01612472565b93505060a06127298a828b01612466565b92505060c061273a8a828b01612136565b91505092959891949750929550565b6000806040838503121561275c57600080fd5b823567ffffffffffffffff81111561277357600080fd5b61277f858286016121a4565b925050602061279085828601612472565b9150509250929050565b6000608082840312156127ac57600080fd5b60006111dd8484612253565b6000606082840312156127ca57600080fd5b60006111dd84846122c2565b6127df81613036565b82525050565b60006127f082613032565b808452602084019350836020820285016128098561302c565b60005b84811015612840578383038852612824838351612907565b925061282f8261302c565b60209890980197915060010161280c565b50909695505050505050565b600061285782613032565b808452602084019350836020820285016128708561302c565b60005b8481101561284057838303885261288b838351612c84565b92506128968261302c565b602098909801979150600101612873565b60006128b282613032565b8084526020840193506128c48361302c565b60005b828110156128f4576128da868351612d90565b6128e38261302c565b6020969096019591506001016128c7565b5093949350505050565b6127df8161304f565b600061291282613032565b808452612926816020860160208601613090565b61292f816130bc565b9093016020019392505050565b602381527f44454641554c545f46554e4354494f4e5f574554485f434f4e54524143545f4f60208201527f4e4c590000000000000000000000000000000000000000000000000000000000604082015260600190565b601181527f494e56414c49445f4d53475f56414c5545000000000000000000000000000000602082015260400190565b603081527f475245415445525f4f525f455155414c5f544f5f4e45535445445f425954455360208201527f5f4c454e4754485f524551554952454400000000000000000000000000000000604082015260600190565b601781527f56414c55455f475245415445525f5448414e5f5a45524f000000000000000000602082015260400190565b602681527f475245415445525f4f525f455155414c5f544f5f33325f4c454e4754485f524560208201527f5155495245440000000000000000000000000000000000000000000000000000604082015260600190565b601081527f55494e543235365f4f564552464c4f5700000000000000000000000000000000602082015260400190565b601881527f4645455f50524f504f5254494f4e5f544f4f5f4c415247450000000000000000602082015260400190565b600f81527f5452414e534645525f4641494c45440000000000000000000000000000000000602082015260400190565b601681527f554e41434345505441424c455f5448524553484f4c4400000000000000000000602082015260400190565b602681527f475245415445525f4f525f455155414c5f544f5f32305f4c454e4754485f524560208201527f5155495245440000000000000000000000000000000000000000000000000000604082015260600190565b601781527f554e535550504f525445445f544f4b454e5f50524f5859000000000000000000602082015260400190565b602581527f475245415445525f4f525f455155414c5f544f5f345f4c454e4754485f52455160208201527f5549524544000000000000000000000000000000000000000000000000000000604082015260600190565b80516080830190612c4b8482612d90565b506020820151612c5e6020850182612d90565b506040820151612c716040850182612d90565b5060608201516111c26060850182612d90565b8051600090610180840190612c9985826127d6565b506020830151612cac60208601826127d6565b506040830151612cbf60408601826127d6565b506060830151612cd260608601826127d6565b506080830151612ce56080860182612d90565b5060a0830151612cf860a0860182612d90565b5060c0830151612d0b60c0860182612d90565b5060e0830151612d1e60e0860182612d90565b50610100830151612d33610100860182612d90565b50610120830151612d48610120860182612d90565b50610140830151848203610140860152612d628282612907565b915050610160830151848203610160860152612d7e8282612907565b95945050505050565b6127df81613074565b6127df8161307b565b60808101612da782876127d6565b612db460208301866127d6565b612dc16040830185612d90565b8181036060830152612dd38184612907565b9695505050505050565b60408101612deb82856127d6565b610bcf6020830184612d90565b60608082528101612e09818661284c565b90508181036020830152612e1d81856128a7565b90508181036040830152612d7e81846127e5565b60608082528101612e42818661284c565b9050612e516020830185612d90565b8181036040830152612d7e81846127e5565b60208101610ce582846128fe565b60208082528101610ce58161293c565b60208082528101610ce581612992565b60208082528101610ce5816129c2565b60208082528101610ce581612a18565b60208082528101610ce581612a48565b60208082528101610ce581612a9e565b60208082528101610ce581612ace565b60208082528101610ce581612afe565b60208082528101610ce581612b2e565b60208082528101610ce581612b5e565b60208082528101610ce581612bb4565b60208082528101610ce581612be4565b60808101610ce58284612c3a565b60208082528101610bcf8184612c84565b60608082528101612f618186612c84565b9050612f706020830185612d90565b8181036040830152612d7e8184612907565b60208101610ce58284612d87565b60208101610ce58284612d90565b60405181810167ffffffffffffffff81118282101715612fbd57600080fd5b604052919050565b600067ffffffffffffffff821115612fdc57600080fd5b5060209081020190565b600067ffffffffffffffff821115612ffd57600080fd5b506020601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160190565b60200190565b5190565b73ffffffffffffffffffffffffffffffffffffffff1690565b7fffffffff000000000000000000000000000000000000000000000000000000001690565b61ffff1690565b90565b60ff1690565b82818337506000910152565b60005b838110156130ab578181015183820152602001613093565b838111156111c25750506000910152565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016905600a265627a7a72305820ff5c1e325698909ffd3590166bdff6a2f31ff4394822a4e1b9ea119a6a813e6c6c6578706572696d656e74616cf50037",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xA3 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x150B7A02 DUP2 EQ PUSH2 0xFF JUMPI DUP1 PUSH4 0x169645F2 EQ PUSH2 0x135 JUMPI DUP1 PUSH4 0x1C5B1EC4 EQ PUSH2 0x155 JUMPI DUP1 PUSH4 0x20472CF7 EQ PUSH2 0x175 JUMPI DUP1 PUSH4 0x725CEF06 EQ PUSH2 0x197 JUMPI DUP1 PUSH4 0xB3CD4254 EQ PUSH2 0x1AA JUMPI DUP1 PUSH4 0xBC063E1A EQ PUSH2 0x1BF JUMPI DUP1 PUSH4 0xC5E6E6AC EQ PUSH2 0x1D4 JUMPI DUP1 PUSH4 0xE58E9C16 EQ PUSH2 0x1F4 JUMPI DUP1 PUSH4 0xF0B9E5BA EQ PUSH2 0x214 JUMPI JUMPDEST PUSH1 0x1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xFD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF4 SWAP1 PUSH2 0x2E71 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x10B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11F PUSH2 0x11A CALLDATASIZE PUSH1 0x4 PUSH2 0x248A JUMP JUMPDEST PUSH2 0x234 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x12C SWAP2 SWAP1 PUSH2 0x2E63 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x148 PUSH2 0x143 CALLDATASIZE PUSH1 0x4 PUSH2 0x2568 JUMP JUMPDEST PUSH2 0x294 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x12C SWAP2 SWAP1 PUSH2 0x2F31 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x161 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x148 PUSH2 0x170 CALLDATASIZE PUSH1 0x4 PUSH2 0x2749 JUMP JUMPDEST PUSH2 0x560 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x181 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x18A PUSH2 0x626 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x12C SWAP2 SWAP1 PUSH2 0x2F82 JUMP JUMPDEST PUSH2 0x148 PUSH2 0x1A5 CALLDATASIZE PUSH1 0x4 PUSH2 0x264E JUMP JUMPDEST PUSH2 0x62C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x18A PUSH2 0x9FA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x18A PUSH2 0xA00 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x148 PUSH2 0x1EF CALLDATASIZE PUSH1 0x4 PUSH2 0x2749 JUMP JUMPDEST PUSH2 0xA06 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x200 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x148 PUSH2 0x20F CALLDATASIZE PUSH1 0x4 PUSH2 0x2749 JUMP JUMPDEST PUSH2 0xA79 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x220 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11F PUSH2 0x22F CALLDATASIZE PUSH1 0x4 PUSH2 0x2503 JUMP JUMPDEST PUSH2 0xB76 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x6F6E455243373231526563656976656428616464726573732C61646472657373 DUP2 MSTORE PUSH32 0x2C75696E743235362C6279746573290000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x2F ADD SWAP1 KECCAK256 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x29C PUSH2 0x20ED JUMP JUMPDEST CALLVALUE PUSH1 0x0 DUP1 DUP1 DUP1 DUP5 GT PUSH2 0x2DA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF4 SWAP1 PUSH2 0x2EA1 JUMP JUMPDEST PUSH2 0x2E5 DUP5 DUP9 DUP9 PUSH2 0xBD6 JUMP JUMPDEST SWAP3 POP PUSH2 0x2F1 DUP5 DUP5 PUSH2 0xCA4 JUMP JUMPDEST SWAP2 POP PUSH1 0x1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0E30DB0 DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH29 0x100000000000000000000000000000000000000000000000000000000 MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x379 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x38D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP PUSH2 0x3BA DUP12 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x3A4 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x140 ADD MLOAD PUSH1 0x10 PUSH2 0xCEB JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE SWAP4 SWAP5 POP DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x460 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x435 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x460 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x443 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP12 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x474 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MLOAD PUSH2 0x160 ADD MSTORE PUSH1 0x2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x4B8 JUMPI PUSH2 0x4B1 DUP12 DUP12 DUP5 PUSH2 0xD4C JUMP JUMPDEST SWAP5 POP PUSH2 0x4C8 JUMP JUMPDEST PUSH2 0x4C5 DUP12 DUP12 DUP12 DUP12 DUP7 PUSH2 0xE66 JUMP JUMPDEST SWAP5 POP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD DUP5 LT ISZERO PUSH2 0x506 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF4 SWAP1 PUSH2 0x2E81 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD DUP3 EQ PUSH2 0x543 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF4 SWAP1 PUSH2 0x2EF1 JUMP JUMPDEST PUSH2 0x552 DUP2 CALLER DUP8 PUSH1 0x0 ADD MLOAD PUSH2 0xFEE JUMP JUMPDEST POP POP POP POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x568 PUSH2 0x20ED JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x575 PUSH2 0x20ED JUMP JUMPDEST PUSH1 0x0 SWAP4 POP JUMPDEST DUP7 MLOAD DUP5 LT ISZERO PUSH2 0x61C JUMPI PUSH2 0x591 DUP7 DUP7 PUSH1 0x0 ADD MLOAD PUSH2 0xCA4 JUMP JUMPDEST SWAP3 POP PUSH2 0x5D4 DUP8 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x5A4 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0xA0 ADD MLOAD DUP9 DUP7 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x5C0 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0x80 ADD MLOAD DUP6 PUSH2 0x11C8 JUMP JUMPDEST SWAP2 POP PUSH2 0x5F7 DUP8 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x5E7 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP4 PUSH2 0x11E5 JUMP JUMPDEST SWAP1 POP PUSH2 0x603 DUP6 DUP3 PUSH2 0x132E JUMP JUMPDEST DUP5 MLOAD DUP7 EQ ISZERO PUSH2 0x611 JUMPI PUSH2 0x61C JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP4 ADD SWAP3 PUSH2 0x57A JUMP JUMPDEST POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x251C DUP2 JUMP JUMPDEST PUSH2 0x634 PUSH2 0x20ED JUMP JUMPDEST CALLVALUE PUSH1 0x0 DUP1 DUP3 GT PUSH2 0x670 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF4 SWAP1 PUSH2 0x2EA1 JUMP JUMPDEST PUSH1 0x0 DUP7 GT PUSH2 0x6AA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF4 SWAP1 PUSH2 0x2EA1 JUMP JUMPDEST PUSH2 0x6D2 DUP11 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x6BC JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x140 ADD MLOAD PUSH1 0x0 PUSH2 0x1390 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x4552433230546F6B656E28616464726573732900000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x13 ADD SWAP1 KECCAK256 SWAP1 SWAP2 POP PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP1 DUP4 AND SWAP2 AND EQ DUP1 PUSH2 0x7B4 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH32 0x455243373231546F6B656E28616464726573732C75696E743235362C62797465 DUP2 MSTORE PUSH32 0x7329000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x22 ADD SWAP1 KECCAK256 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 DUP2 AND SWAP2 AND EQ JUMPDEST ISZERO ISZERO PUSH2 0x7EC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF4 SWAP1 PUSH2 0x2F11 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0E30DB0 DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH29 0x100000000000000000000000000000000000000000000000000000000 MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x872 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x886 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH32 0x4552433230546F6B656E28616464726573732900000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x13 ADD SWAP1 KECCAK256 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP6 DUP2 AND SWAP2 AND EQ ISZERO SWAP3 POP PUSH2 0x8FF SWAP2 POP POP JUMPI PUSH2 0x8F8 DUP11 DUP11 DUP11 DUP11 DUP11 PUSH2 0x13FD JUMP JUMPDEST SWAP3 POP PUSH2 0x992 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x455243373231546F6B656E28616464726573732C75696E743235362C62797465 DUP2 MSTORE PUSH32 0x7329000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x22 ADD SWAP1 KECCAK256 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x992 JUMPI PUSH2 0x98F DUP11 DUP11 DUP11 DUP11 PUSH2 0x1754 JUMP JUMPDEST SWAP3 POP JUMPDEST PUSH1 0x20 DUP4 ADD MLOAD DUP3 LT ISZERO PUSH2 0x9D0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF4 SWAP1 PUSH2 0x2E81 JUMP JUMPDEST PUSH2 0x9ED PUSH2 0x9E1 DUP4 DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0xCA4 JUMP JUMPDEST DUP5 PUSH1 0x20 ADD MLOAD DUP8 DUP8 PUSH2 0x1A56 JUMP JUMPDEST POP POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x2710 DUP2 JUMP JUMPDEST PUSH2 0x3E8 DUP2 JUMP JUMPDEST PUSH2 0xA0E PUSH2 0x20ED JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xA19 PUSH2 0x20ED JUMP JUMPDEST PUSH1 0x0 SWAP3 POP JUMPDEST DUP6 MLOAD DUP4 LT ISZERO PUSH2 0xA70 JUMPI PUSH2 0xA35 DUP6 DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0xCA4 JUMP JUMPDEST SWAP2 POP PUSH2 0xA48 DUP7 DUP5 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x5E7 JUMPI INVALID JUMPDEST SWAP1 POP PUSH2 0xA54 DUP5 DUP3 PUSH2 0x132E JUMP JUMPDEST DUP5 DUP5 PUSH1 0x20 ADD MLOAD EQ ISZERO PUSH2 0xA65 JUMPI PUSH2 0xA70 JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 PUSH2 0xA1E JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xA81 PUSH2 0x20ED JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0xA8E PUSH2 0x20ED JUMP JUMPDEST PUSH1 0x0 SWAP4 POP JUMPDEST DUP7 MLOAD DUP5 LT ISZERO PUSH2 0x61C JUMPI PUSH2 0xAAA DUP7 DUP7 PUSH1 0x0 ADD MLOAD PUSH2 0xCA4 JUMP JUMPDEST SWAP3 POP PUSH2 0xB11 DUP8 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xABD JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0xA0 ADD MLOAD PUSH2 0xB0B DUP10 DUP8 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xADC JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0x80 ADD MLOAD DUP11 DUP9 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xAF8 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0xE0 ADD MLOAD PUSH2 0xCA4 JUMP JUMPDEST DUP6 PUSH2 0x11C8 JUMP JUMPDEST SWAP2 POP PUSH2 0xB3E DUP8 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xB24 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0xB39 DUP5 PUSH1 0x1 PUSH2 0x1B43 JUMP JUMPDEST PUSH2 0x11E5 JUMP JUMPDEST SWAP1 POP PUSH2 0xB52 DUP2 PUSH1 0x0 ADD MLOAD DUP3 PUSH1 0x60 ADD MLOAD PUSH2 0xCA4 JUMP JUMPDEST DUP2 MSTORE PUSH2 0xB5E DUP6 DUP3 PUSH2 0x132E JUMP JUMPDEST DUP5 MLOAD DUP7 GT PUSH2 0xB6B JUMPI PUSH2 0x61C JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP4 ADD SWAP3 PUSH2 0xA93 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x6F6E455243373231526563656976656428616464726573732C75696E74323536 DUP2 MSTORE PUSH32 0x2C62797465732900000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x27 ADD SWAP1 KECCAK256 JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH2 0xFFFF AND GT DUP1 ISZERO PUSH2 0xC00 JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND ISZERO ISZERO JUMPDEST ISZERO PUSH2 0xBCF JUMPI PUSH2 0x3E8 PUSH2 0xFFFF DUP5 AND GT ISZERO PUSH2 0xC45 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF4 SWAP1 PUSH2 0x2ED1 JUMP JUMPDEST PUSH2 0xC56 PUSH2 0xFFFF DUP5 AND PUSH2 0x2710 DUP7 PUSH2 0x11C8 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0xC9C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 GT ISZERO PUSH2 0xCE0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF4 SWAP1 PUSH2 0x2EC1 JUMP JUMPDEST POP DUP1 DUP3 SUB JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x14 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0xD2D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF4 SWAP1 PUSH2 0x2F01 JUMP JUMPDEST POP ADD PUSH1 0x14 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0xD54 PUSH2 0x20ED JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH32 0x7E1D980800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0x7E1D9808 SWAP1 PUSH2 0xDAF SWAP1 DUP9 SWAP1 DUP8 SWAP1 DUP10 SWAP1 PUSH1 0x4 ADD PUSH2 0x2E31 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xDC9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xDDD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0xE01 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x279A JUMP JUMPDEST SWAP2 POP PUSH2 0xE15 DUP3 PUSH1 0x0 ADD MLOAD DUP4 PUSH1 0x60 ADD MLOAD PUSH2 0xCA4 JUMP JUMPDEST SWAP1 POP PUSH2 0xE25 DUP3 PUSH1 0x0 ADD MLOAD DUP3 PUSH2 0x1B8D JUMP JUMPDEST ISZERO ISZERO PUSH2 0xE5D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF4 SWAP1 PUSH2 0x2EF1 JUMP JUMPDEST DUP2 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0xE6E PUSH2 0x20ED JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE78 PUSH2 0x20ED JUMP JUMPDEST PUSH2 0xE80 PUSH2 0x20ED JUMP JUMPDEST PUSH2 0xE88 PUSH2 0x20ED JUMP JUMPDEST DUP6 SWAP4 POP PUSH2 0xE95 DUP11 DUP8 PUSH2 0xA06 JUMP JUMPDEST SWAP3 POP PUSH1 0x0 DUP4 PUSH1 0x60 ADD MLOAD GT ISZERO PUSH2 0xF29 JUMPI PUSH2 0xEB3 DUP9 DUP9 DUP6 PUSH1 0x60 ADD MLOAD PUSH2 0x1BAA JUMP JUMPDEST SWAP2 POP PUSH2 0xECC DUP7 PUSH2 0xEC7 DUP9 DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0xCA4 JUMP JUMPDEST PUSH2 0x1B8D JUMP JUMPDEST ISZERO ISZERO PUSH2 0xF04 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF4 SWAP1 PUSH2 0x2EF1 JUMP JUMPDEST PUSH2 0xF12 DUP5 DUP4 PUSH1 0x20 ADD MLOAD PUSH2 0xCA4 JUMP JUMPDEST PUSH1 0x60 DUP1 DUP5 ADD MLOAD SWAP1 DUP8 ADD MSTORE PUSH1 0x20 DUP1 DUP5 ADD MLOAD SWAP1 DUP8 ADD MSTORE SWAP4 POP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH32 0x7E1D980800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0x7E1D9808 SWAP1 PUSH2 0xF83 SWAP1 DUP14 SWAP1 DUP9 SWAP1 DUP15 SWAP1 PUSH1 0x4 ADD PUSH2 0x2E31 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xF9D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xFB1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0xFD5 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x279A JUMP JUMPDEST SWAP1 POP PUSH2 0xFE1 DUP6 DUP3 PUSH2 0x132E JUMP JUMPDEST POP POP POP POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x7472616E7366657228616464726573732C75696E743235362900000000000000 DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x19 ADD DUP2 KECCAK256 PUSH1 0x0 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP2 SWAP1 PUSH2 0x104C SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x24 ADD PUSH2 0x2DDD JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 DUP2 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 OR DUP4 MSTORE MLOAD DUP2 MLOAD SWAP2 SWAP3 SWAP1 SWAP2 DUP3 SWAP2 SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x10F0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x10D8 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x111D 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 SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP3 POP POP POP DUP1 ISZERO ISZERO PUSH2 0x116C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF4 SWAP1 PUSH2 0x2EE1 JUMP JUMPDEST RETURNDATASIZE ISZERO PUSH2 0x1189 JUMPI POP PUSH1 0x0 RETURNDATASIZE PUSH1 0x20 EQ ISZERO PUSH2 0x1189 JUMPI PUSH1 0x20 PUSH1 0x0 DUP1 RETURNDATACOPY POP PUSH1 0x0 MLOAD JUMPDEST DUP1 ISZERO ISZERO PUSH2 0x11C2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF4 SWAP1 PUSH2 0x2EE1 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x11DD PUSH2 0x11D7 DUP6 DUP5 PUSH2 0x1EE3 JUMP JUMPDEST DUP5 PUSH2 0x1F3E JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x11ED PUSH2 0x20ED JUMP JUMPDEST PUSH2 0x11F5 PUSH2 0x2116 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC75E0A8100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH4 0xC75E0A81 SWAP1 PUSH2 0x124C SWAP1 DUP10 SWAP1 PUSH1 0x4 ADD PUSH2 0x2F3F JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1266 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x127A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0x129E SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x27B8 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP4 POP PUSH1 0xFF AND PUSH1 0x3 EQ PUSH2 0x12B2 JUMPI PUSH2 0xA70 JUMP JUMPDEST PUSH2 0x12C4 DUP7 PUSH1 0xA0 ADD MLOAD DUP5 PUSH1 0x40 ADD MLOAD PUSH2 0xCA4 JUMP JUMPDEST SWAP2 POP PUSH2 0x12D0 DUP6 DUP4 PUSH2 0x1F55 JUMP JUMPDEST SWAP1 POP DUP1 DUP5 PUSH1 0x20 ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x12EF DUP2 DUP8 PUSH1 0xA0 ADD MLOAD DUP9 PUSH1 0x80 ADD MLOAD PUSH2 0x11C8 JUMP JUMPDEST DUP5 MSTORE PUSH1 0xA0 DUP7 ADD MLOAD PUSH1 0xC0 DUP8 ADD MLOAD PUSH2 0x1306 SWAP2 DUP4 SWAP2 PUSH2 0x11C8 JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0xA0 DUP7 ADD MLOAD PUSH1 0xE0 DUP8 ADD MLOAD PUSH2 0x1320 SWAP2 DUP4 SWAP2 PUSH2 0x11C8 JUMP JUMPDEST PUSH1 0x60 DUP6 ADD MSTORE POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD PUSH2 0x133C SWAP2 SWAP1 PUSH2 0x1B43 JUMP JUMPDEST DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MLOAD PUSH2 0x1352 SWAP2 SWAP1 PUSH2 0x1B43 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MLOAD PUSH2 0x136B SWAP2 SWAP1 PUSH2 0x1B43 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MLOAD PUSH2 0x1384 SWAP2 SWAP1 PUSH2 0x1B43 JUMP JUMPDEST PUSH1 0x60 SWAP1 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x4 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x13D2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF4 SWAP1 PUSH2 0x2F21 JUMP JUMPDEST POP POP PUSH1 0x20 ADD MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND SWAP1 JUMP JUMPDEST PUSH2 0x1405 PUSH2 0x20ED JUMP JUMPDEST PUSH1 0x0 PUSH2 0x140F PUSH2 0x20ED JUMP JUMPDEST PUSH2 0x1417 PUSH2 0x20ED JUMP JUMPDEST PUSH2 0x141F PUSH2 0x20ED JUMP JUMPDEST PUSH2 0x1431 DUP11 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x3A4 JUMPI INVALID JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE SWAP4 SWAP8 POP DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x14D7 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x14AC JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x14D7 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x14BA JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP11 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x14EB JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MLOAD PUSH2 0x160 ADD MSTORE PUSH1 0x2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x15C9 JUMPI PUSH2 0x1528 DUP11 DUP11 DUP9 PUSH2 0x1BAA JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP4 POP DUP7 GT ISZERO PUSH2 0x1566 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF4 SWAP1 PUSH2 0x2EF1 JUMP JUMPDEST PUSH2 0x1570 DUP6 DUP5 PUSH2 0x132E JUMP JUMPDEST PUSH2 0x158C PUSH2 0x1585 DUP7 PUSH1 0x0 ADD MLOAD DUP8 PUSH1 0x60 ADD MLOAD PUSH2 0x1B43 JUMP JUMPDEST DUP7 MLOAD PUSH2 0x1B8D JUMP JUMPDEST ISZERO ISZERO PUSH2 0x15C4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF4 SWAP1 PUSH2 0x2EF1 JUMP JUMPDEST PUSH2 0x1745 JUMP JUMPDEST PUSH2 0x15D3 DUP11 DUP8 PUSH2 0x560 JUMP JUMPDEST SWAP2 POP PUSH1 0x0 DUP3 PUSH1 0x60 ADD MLOAD GT ISZERO PUSH2 0x1608 JUMPI PUSH2 0x15F1 DUP9 DUP9 DUP5 PUSH1 0x60 ADD MLOAD PUSH2 0x1BAA JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 ADD MLOAD SWAP1 DUP8 ADD MSTORE PUSH1 0x60 DUP1 DUP3 ADD MLOAD SWAP1 DUP8 ADD MSTORE SWAP1 POP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH32 0xE5FA431B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0xE5FA431B SWAP1 PUSH2 0x1662 SWAP1 DUP14 SWAP1 DUP11 SWAP1 DUP15 SWAP1 PUSH1 0x4 ADD PUSH2 0x2E31 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x167C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1690 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0x16B4 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x279A JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP4 POP DUP7 EQ PUSH2 0x16F1 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF4 SWAP1 PUSH2 0x2EF1 JUMP JUMPDEST PUSH2 0x16FB DUP6 DUP5 PUSH2 0x132E JUMP JUMPDEST PUSH2 0x170D DUP6 PUSH1 0x20 ADD MLOAD DUP5 PUSH1 0x20 ADD MLOAD PUSH2 0x1B8D JUMP JUMPDEST ISZERO ISZERO PUSH2 0x1745 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF4 SWAP1 PUSH2 0x2EF1 JUMP JUMPDEST PUSH2 0xFE1 DUP5 CALLER DUP6 PUSH1 0x0 ADD MLOAD PUSH2 0xFEE JUMP JUMPDEST PUSH2 0x175C PUSH2 0x20ED JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 PUSH1 0x0 PUSH2 0x176B PUSH2 0x20ED JUMP JUMPDEST PUSH2 0x1773 PUSH2 0x20ED JUMP JUMPDEST DUP11 MLOAD SWAP5 POP DUP5 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x17A1 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP PUSH1 0x0 SWAP3 POP JUMPDEST DUP5 DUP4 LT ISZERO PUSH2 0x18DD JUMPI PUSH2 0x17D6 DUP7 DUP13 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x17C3 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0xE0 ADD MLOAD PUSH2 0x1B43 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE SWAP4 SWAP10 POP DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x187C JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1851 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x187C JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x185F JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP12 DUP5 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x188F JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MLOAD PUSH2 0x160 ADD MSTORE DUP11 MLOAD DUP12 SWAP1 DUP5 SWAP1 DUP2 LT PUSH2 0x18AC JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0xA0 ADD MLOAD DUP5 DUP5 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x18C8 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 PUSH2 0x17A9 JUMP JUMPDEST PUSH1 0x0 DUP7 GT ISZERO PUSH2 0x1908 JUMPI PUSH2 0x18F1 DUP10 DUP10 DUP9 PUSH2 0x1BAA JUMP JUMPDEST PUSH1 0x60 DUP1 DUP3 ADD MLOAD SWAP1 DUP10 ADD MSTORE PUSH1 0x20 DUP1 DUP3 ADD MLOAD SWAP1 DUP10 ADD MSTORE SWAP2 POP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH32 0x4D0AE54600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0x4D0AE546 SWAP1 PUSH2 0x1962 SWAP1 DUP15 SWAP1 DUP9 SWAP1 DUP16 SWAP1 PUSH1 0x4 ADD PUSH2 0x2DF8 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x197C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1990 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0x19B4 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x279A JUMP JUMPDEST SWAP1 POP PUSH2 0x19C0 DUP8 DUP3 PUSH2 0x132E JUMP JUMPDEST PUSH2 0x19D2 DUP8 PUSH1 0x20 ADD MLOAD DUP3 PUSH1 0x20 ADD MLOAD PUSH2 0x1B8D JUMP JUMPDEST ISZERO ISZERO PUSH2 0x1A0A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF4 SWAP1 PUSH2 0x2EF1 JUMP JUMPDEST PUSH1 0x0 SWAP3 POP JUMPDEST DUP5 DUP4 LT ISZERO PUSH2 0x1A48 JUMPI PUSH2 0x1A3D DUP12 DUP5 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1A28 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x140 ADD MLOAD CALLER PUSH2 0x1F6B JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 PUSH2 0x1A0F JUMP JUMPDEST POP POP POP POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP7 GT ISZERO PUSH2 0x1B3B JUMPI PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH32 0x2E1A7D4D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0x2E1A7D4D SWAP1 PUSH2 0x1AB8 SWAP1 DUP10 SWAP1 PUSH1 0x4 ADD PUSH2 0x2F90 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1AD2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1AE6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x1AF5 DUP6 DUP6 DUP6 PUSH2 0xBD6 JUMP JUMPDEST SWAP2 POP PUSH2 0x1B01 DUP7 DUP4 PUSH2 0xCA4 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 GT ISZERO PUSH2 0x1B3B JUMPI PUSH1 0x40 MLOAD CALLER SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x1B39 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x1B82 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF4 SWAP1 PUSH2 0x2EC1 JUMP JUMPDEST DUP1 SWAP2 POP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1B9F PUSH2 0x251C PUSH2 0x2710 DUP7 PUSH2 0x11C8 JUMP JUMPDEST SWAP1 SWAP3 LT ISZERO SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x1BB2 PUSH2 0x20ED JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1BBF PUSH2 0x20ED JUMP JUMPDEST PUSH1 0x0 SWAP4 POP JUMPDEST DUP8 MLOAD DUP5 LT ISZERO PUSH2 0x1ED8 JUMPI PUSH1 0x3 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x1C71 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1C46 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1C71 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1C54 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP9 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1C84 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH2 0x140 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP8 AND ISZERO MUL ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV SWAP3 DUP4 ADD DUP6 SWAP1 DIV DUP6 MUL DUP2 ADD DUP6 ADD SWAP1 SWAP2 MSTORE DUP2 DUP2 MSTORE SWAP3 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x1D39 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1D0E JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1D39 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1D1C JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP9 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1D4C JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MLOAD PUSH2 0x160 ADD MSTORE DUP5 MLOAD PUSH2 0x1D68 SWAP1 DUP8 SWAP1 PUSH2 0xCA4 JUMP JUMPDEST SWAP3 POP PUSH2 0x1DB6 DUP9 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1D7B JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0xA0 ADD MLOAD PUSH2 0xB0B DUP11 DUP8 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1D9A JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0x80 ADD MLOAD DUP12 DUP9 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xAF8 JUMPI INVALID JUMPDEST PUSH1 0x0 SLOAD DUP10 MLOAD SWAP2 SWAP4 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH4 0xB4BE83D5 SWAP1 DUP11 SWAP1 DUP8 SWAP1 DUP2 LT PUSH2 0x1DE7 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x1DFC DUP6 PUSH1 0x1 PUSH2 0x1B43 JUMP JUMPDEST DUP11 DUP9 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1E0A JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH29 0x100000000000000000000000000000000000000000000000000000000 MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1E4E SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2F50 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1E68 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1E7C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0x1EA0 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x279A JUMP JUMPDEST SWAP1 POP PUSH2 0x1EB4 DUP2 PUSH1 0x0 ADD MLOAD DUP3 PUSH1 0x60 ADD MLOAD PUSH2 0xCA4 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x1EC0 DUP6 DUP3 PUSH2 0x132E JUMP JUMPDEST DUP5 MLOAD DUP7 GT PUSH2 0x1ECD JUMPI PUSH2 0x1ED8 JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP4 ADD SWAP3 PUSH2 0x1BC4 JUMP JUMPDEST POP POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 ISZERO ISZERO PUSH2 0x1EF6 JUMPI PUSH1 0x0 SWAP2 POP PUSH2 0x1B86 JUMP JUMPDEST POP DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 ISZERO ISZERO PUSH2 0x1F06 JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x1B82 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF4 SWAP1 PUSH2 0x2EC1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 DUP5 DUP2 ISZERO ISZERO PUSH2 0x1F4C JUMPI INVALID JUMPDEST DIV SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x1F64 JUMPI DUP2 PUSH2 0xBCF JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 PUSH2 0x1F81 DUP6 PUSH1 0x10 PUSH4 0xFFFFFFFF PUSH2 0xCEB AND JUMP JUMPDEST SWAP3 POP PUSH2 0x1F94 DUP6 PUSH1 0x24 PUSH4 0xFFFFFFFF PUSH2 0x203B AND JUMP JUMPDEST SWAP2 POP PUSH2 0x1FA7 DUP6 PUSH1 0x64 PUSH4 0xFFFFFFFF PUSH2 0x2047 AND JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xB88D4FDE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH4 0xB88D4FDE SWAP1 PUSH2 0x2002 SWAP1 ADDRESS SWAP1 DUP9 SWAP1 DUP8 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x2D99 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x201C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2030 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBCF DUP4 DUP4 PUSH2 0x20A2 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x2055 DUP5 DUP5 PUSH2 0x203B JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP4 ADD SWAP3 POP DUP1 DUP4 ADD DUP5 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x209C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF4 SWAP1 PUSH2 0x2E91 JUMP JUMPDEST POP POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x20 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x20E4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF4 SWAP1 PUSH2 0x2EB1 JUMP JUMPDEST POP ADD PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBCF DUP3 CALLDATALOAD PUSH2 0x3036 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0x2153 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x2166 PUSH2 0x2161 DUP3 PUSH2 0x2FC5 JUMP JUMPDEST PUSH2 0x2F9E JUMP JUMPDEST DUP2 DUP2 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP3 POP DUP3 ADD DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x61C JUMPI DUP2 CALLDATALOAD DUP7 ADD PUSH2 0x218E DUP9 DUP3 PUSH2 0x220D JUMP JUMPDEST DUP5 MSTORE POP PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2178 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0x21B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x21C3 PUSH2 0x2161 DUP3 PUSH2 0x2FC5 JUMP JUMPDEST DUP2 DUP2 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP3 POP DUP3 ADD DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x61C JUMPI DUP2 CALLDATALOAD DUP7 ADD PUSH2 0x21EB DUP9 DUP3 PUSH2 0x231D JUMP JUMPDEST DUP5 MSTORE POP PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x21D5 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBCF DUP3 MLOAD PUSH2 0x307B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0x221E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x222C PUSH2 0x2161 DUP3 PUSH2 0x2FE6 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP4 ADD DUP6 DUP4 DUP4 ADD GT ISZERO PUSH2 0x2248 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA70 DUP4 DUP3 DUP5 PUSH2 0x3084 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2265 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x226F PUSH1 0x80 PUSH2 0x2F9E JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x227D DUP5 DUP5 PUSH2 0x2201 JUMP JUMPDEST DUP3 MSTORE POP PUSH1 0x20 PUSH2 0x228E DUP5 DUP5 DUP4 ADD PUSH2 0x2201 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP PUSH1 0x40 PUSH2 0x22A2 DUP5 DUP3 DUP6 ADD PUSH2 0x2201 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 PUSH2 0x22B6 DUP5 DUP3 DUP6 ADD PUSH2 0x2201 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x22D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x22DE PUSH1 0x60 PUSH2 0x2F9E JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x22EC DUP5 DUP5 PUSH2 0x247E JUMP JUMPDEST DUP3 MSTORE POP PUSH1 0x20 PUSH2 0x22FD DUP5 DUP5 DUP4 ADD PUSH2 0x2201 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP PUSH1 0x40 PUSH2 0x2311 DUP5 DUP3 DUP6 ADD PUSH2 0x2201 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x180 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2330 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x233B PUSH2 0x180 PUSH2 0x2F9E JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2349 DUP5 DUP5 PUSH2 0x2136 JUMP JUMPDEST DUP3 MSTORE POP PUSH1 0x20 PUSH2 0x235A DUP5 DUP5 DUP4 ADD PUSH2 0x2136 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP PUSH1 0x40 PUSH2 0x236E DUP5 DUP3 DUP6 ADD PUSH2 0x2136 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 PUSH2 0x2382 DUP5 DUP3 DUP6 ADD PUSH2 0x2136 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE POP PUSH1 0x80 PUSH2 0x2396 DUP5 DUP3 DUP6 ADD PUSH2 0x2472 JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE POP PUSH1 0xA0 PUSH2 0x23AA DUP5 DUP3 DUP6 ADD PUSH2 0x2472 JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE POP PUSH1 0xC0 PUSH2 0x23BE DUP5 DUP3 DUP6 ADD PUSH2 0x2472 JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE POP PUSH1 0xE0 PUSH2 0x23D2 DUP5 DUP3 DUP6 ADD PUSH2 0x2472 JUMP JUMPDEST PUSH1 0xE0 DUP4 ADD MSTORE POP PUSH2 0x100 PUSH2 0x23E7 DUP5 DUP3 DUP6 ADD PUSH2 0x2472 JUMP JUMPDEST PUSH2 0x100 DUP4 ADD MSTORE POP PUSH2 0x120 PUSH2 0x23FD DUP5 DUP3 DUP6 ADD PUSH2 0x2472 JUMP JUMPDEST PUSH2 0x120 DUP4 ADD MSTORE POP PUSH2 0x140 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x241F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x242B DUP5 DUP3 DUP6 ADD PUSH2 0x220D JUMP JUMPDEST PUSH2 0x140 DUP4 ADD MSTORE POP PUSH2 0x160 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x244D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2459 DUP5 DUP3 DUP6 ADD PUSH2 0x220D JUMP JUMPDEST PUSH2 0x160 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBCF DUP3 CALLDATALOAD PUSH2 0x3074 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBCF DUP3 CALLDATALOAD PUSH2 0x307B JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBCF DUP3 MLOAD PUSH2 0x307E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x24A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x24AC DUP8 DUP8 PUSH2 0x2136 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x24BD DUP8 DUP3 DUP9 ADD PUSH2 0x2136 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 PUSH2 0x24CE DUP8 DUP3 DUP9 ADD PUSH2 0x2472 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x24EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x24F7 DUP8 DUP3 DUP9 ADD PUSH2 0x220D JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2518 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2524 DUP7 DUP7 PUSH2 0x2136 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x2535 DUP7 DUP3 DUP8 ADD PUSH2 0x2472 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2552 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x255E DUP7 DUP3 DUP8 ADD PUSH2 0x220D JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x2581 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2598 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x25A4 DUP10 DUP3 DUP11 ADD PUSH2 0x21A4 JUMP JUMPDEST SWAP7 POP POP PUSH1 0x20 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x25C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x25CD DUP10 DUP3 DUP11 ADD PUSH2 0x2142 JUMP JUMPDEST SWAP6 POP POP PUSH1 0x40 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x25EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x25F6 DUP10 DUP3 DUP11 ADD PUSH2 0x21A4 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2613 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x261F DUP10 DUP3 DUP11 ADD PUSH2 0x2142 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x80 PUSH2 0x2630 DUP10 DUP3 DUP11 ADD PUSH2 0x2466 JUMP JUMPDEST SWAP3 POP POP PUSH1 0xA0 PUSH2 0x2641 DUP10 DUP3 DUP11 ADD PUSH2 0x2136 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x2669 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2680 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x268C DUP11 DUP3 DUP12 ADD PUSH2 0x21A4 JUMP JUMPDEST SWAP8 POP POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x26A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x26B5 DUP11 DUP3 DUP12 ADD PUSH2 0x2142 JUMP JUMPDEST SWAP7 POP POP PUSH1 0x40 DUP9 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x26D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x26DE DUP11 DUP3 DUP12 ADD PUSH2 0x21A4 JUMP JUMPDEST SWAP6 POP POP PUSH1 0x60 DUP9 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x26FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2707 DUP11 DUP3 DUP12 ADD PUSH2 0x2142 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x80 PUSH2 0x2718 DUP11 DUP3 DUP12 ADD PUSH2 0x2472 JUMP JUMPDEST SWAP4 POP POP PUSH1 0xA0 PUSH2 0x2729 DUP11 DUP3 DUP12 ADD PUSH2 0x2466 JUMP JUMPDEST SWAP3 POP POP PUSH1 0xC0 PUSH2 0x273A DUP11 DUP3 DUP12 ADD PUSH2 0x2136 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x275C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2773 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x277F DUP6 DUP3 DUP7 ADD PUSH2 0x21A4 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x2790 DUP6 DUP3 DUP7 ADD PUSH2 0x2472 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x27AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x11DD DUP5 DUP5 PUSH2 0x2253 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x27CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x11DD DUP5 DUP5 PUSH2 0x22C2 JUMP JUMPDEST PUSH2 0x27DF DUP2 PUSH2 0x3036 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x27F0 DUP3 PUSH2 0x3032 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP DUP4 PUSH1 0x20 DUP3 MUL DUP6 ADD PUSH2 0x2809 DUP6 PUSH2 0x302C JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x2840 JUMPI DUP4 DUP4 SUB DUP9 MSTORE PUSH2 0x2824 DUP4 DUP4 MLOAD PUSH2 0x2907 JUMP JUMPDEST SWAP3 POP PUSH2 0x282F DUP3 PUSH2 0x302C JUMP JUMPDEST PUSH1 0x20 SWAP9 SWAP1 SWAP9 ADD SWAP8 SWAP2 POP PUSH1 0x1 ADD PUSH2 0x280C JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2857 DUP3 PUSH2 0x3032 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP DUP4 PUSH1 0x20 DUP3 MUL DUP6 ADD PUSH2 0x2870 DUP6 PUSH2 0x302C JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x2840 JUMPI DUP4 DUP4 SUB DUP9 MSTORE PUSH2 0x288B DUP4 DUP4 MLOAD PUSH2 0x2C84 JUMP JUMPDEST SWAP3 POP PUSH2 0x2896 DUP3 PUSH2 0x302C JUMP JUMPDEST PUSH1 0x20 SWAP9 SWAP1 SWAP9 ADD SWAP8 SWAP2 POP PUSH1 0x1 ADD PUSH2 0x2873 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x28B2 DUP3 PUSH2 0x3032 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH2 0x28C4 DUP4 PUSH2 0x302C JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x28F4 JUMPI PUSH2 0x28DA DUP7 DUP4 MLOAD PUSH2 0x2D90 JUMP JUMPDEST PUSH2 0x28E3 DUP3 PUSH2 0x302C JUMP JUMPDEST PUSH1 0x20 SWAP7 SWAP1 SWAP7 ADD SWAP6 SWAP2 POP PUSH1 0x1 ADD PUSH2 0x28C7 JUMP JUMPDEST POP SWAP4 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x27DF DUP2 PUSH2 0x304F JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2912 DUP3 PUSH2 0x3032 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH2 0x2926 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x3090 JUMP JUMPDEST PUSH2 0x292F DUP2 PUSH2 0x30BC JUMP JUMPDEST SWAP1 SWAP4 ADD PUSH1 0x20 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x23 DUP2 MSTORE PUSH32 0x44454641554C545F46554E4354494F4E5F574554485F434F4E54524143545F4F PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x4E4C590000000000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x11 DUP2 MSTORE PUSH32 0x494E56414C49445F4D53475F56414C5545000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x30 DUP2 MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F4E45535445445F4259544553 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x5F4C454E4754485F524551554952454400000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x17 DUP2 MSTORE PUSH32 0x56414C55455F475245415445525F5448414E5F5A45524F000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F33325F4C454E4754485F5245 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x10 DUP2 MSTORE PUSH32 0x55494E543235365F4F564552464C4F5700000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x18 DUP2 MSTORE PUSH32 0x4645455F50524F504F5254494F4E5F544F4F5F4C415247450000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0xF DUP2 MSTORE PUSH32 0x5452414E534645525F4641494C45440000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x16 DUP2 MSTORE PUSH32 0x554E41434345505441424C455F5448524553484F4C4400000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F32305F4C454E4754485F5245 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x17 DUP2 MSTORE PUSH32 0x554E535550504F525445445F544F4B454E5F50524F5859000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x25 DUP2 MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F345F4C454E4754485F524551 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x5549524544000000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x80 DUP4 ADD SWAP1 PUSH2 0x2C4B DUP5 DUP3 PUSH2 0x2D90 JUMP JUMPDEST POP PUSH1 0x20 DUP3 ADD MLOAD PUSH2 0x2C5E PUSH1 0x20 DUP6 ADD DUP3 PUSH2 0x2D90 JUMP JUMPDEST POP PUSH1 0x40 DUP3 ADD MLOAD PUSH2 0x2C71 PUSH1 0x40 DUP6 ADD DUP3 PUSH2 0x2D90 JUMP JUMPDEST POP PUSH1 0x60 DUP3 ADD MLOAD PUSH2 0x11C2 PUSH1 0x60 DUP6 ADD DUP3 PUSH2 0x2D90 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH2 0x180 DUP5 ADD SWAP1 PUSH2 0x2C99 DUP6 DUP3 PUSH2 0x27D6 JUMP JUMPDEST POP PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x2CAC PUSH1 0x20 DUP7 ADD DUP3 PUSH2 0x27D6 JUMP JUMPDEST POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x2CBF PUSH1 0x40 DUP7 ADD DUP3 PUSH2 0x27D6 JUMP JUMPDEST POP PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x2CD2 PUSH1 0x60 DUP7 ADD DUP3 PUSH2 0x27D6 JUMP JUMPDEST POP PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x2CE5 PUSH1 0x80 DUP7 ADD DUP3 PUSH2 0x2D90 JUMP JUMPDEST POP PUSH1 0xA0 DUP4 ADD MLOAD PUSH2 0x2CF8 PUSH1 0xA0 DUP7 ADD DUP3 PUSH2 0x2D90 JUMP JUMPDEST POP PUSH1 0xC0 DUP4 ADD MLOAD PUSH2 0x2D0B PUSH1 0xC0 DUP7 ADD DUP3 PUSH2 0x2D90 JUMP JUMPDEST POP PUSH1 0xE0 DUP4 ADD MLOAD PUSH2 0x2D1E PUSH1 0xE0 DUP7 ADD DUP3 PUSH2 0x2D90 JUMP JUMPDEST POP PUSH2 0x100 DUP4 ADD MLOAD PUSH2 0x2D33 PUSH2 0x100 DUP7 ADD DUP3 PUSH2 0x2D90 JUMP JUMPDEST POP PUSH2 0x120 DUP4 ADD MLOAD PUSH2 0x2D48 PUSH2 0x120 DUP7 ADD DUP3 PUSH2 0x2D90 JUMP JUMPDEST POP PUSH2 0x140 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH2 0x140 DUP7 ADD MSTORE PUSH2 0x2D62 DUP3 DUP3 PUSH2 0x2907 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x160 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH2 0x160 DUP7 ADD MSTORE PUSH2 0x2D7E DUP3 DUP3 PUSH2 0x2907 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x27DF DUP2 PUSH2 0x3074 JUMP JUMPDEST PUSH2 0x27DF DUP2 PUSH2 0x307B JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x2DA7 DUP3 DUP8 PUSH2 0x27D6 JUMP JUMPDEST PUSH2 0x2DB4 PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x27D6 JUMP JUMPDEST PUSH2 0x2DC1 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x2D90 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x2DD3 DUP2 DUP5 PUSH2 0x2907 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x2DEB DUP3 DUP6 PUSH2 0x27D6 JUMP JUMPDEST PUSH2 0xBCF PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2D90 JUMP JUMPDEST PUSH1 0x60 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x2E09 DUP2 DUP7 PUSH2 0x284C JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x2E1D DUP2 DUP6 PUSH2 0x28A7 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x2D7E DUP2 DUP5 PUSH2 0x27E5 JUMP JUMPDEST PUSH1 0x60 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x2E42 DUP2 DUP7 PUSH2 0x284C JUMP JUMPDEST SWAP1 POP PUSH2 0x2E51 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x2D90 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x2D7E DUP2 DUP5 PUSH2 0x27E5 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xCE5 DUP3 DUP5 PUSH2 0x28FE JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xCE5 DUP2 PUSH2 0x293C JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xCE5 DUP2 PUSH2 0x2992 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xCE5 DUP2 PUSH2 0x29C2 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xCE5 DUP2 PUSH2 0x2A18 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xCE5 DUP2 PUSH2 0x2A48 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xCE5 DUP2 PUSH2 0x2A9E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xCE5 DUP2 PUSH2 0x2ACE JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xCE5 DUP2 PUSH2 0x2AFE JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xCE5 DUP2 PUSH2 0x2B2E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xCE5 DUP2 PUSH2 0x2B5E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xCE5 DUP2 PUSH2 0x2BB4 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xCE5 DUP2 PUSH2 0x2BE4 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0xCE5 DUP3 DUP5 PUSH2 0x2C3A JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xBCF DUP2 DUP5 PUSH2 0x2C84 JUMP JUMPDEST PUSH1 0x60 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x2F61 DUP2 DUP7 PUSH2 0x2C84 JUMP JUMPDEST SWAP1 POP PUSH2 0x2F70 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x2D90 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x2D7E DUP2 DUP5 PUSH2 0x2907 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xCE5 DUP3 DUP5 PUSH2 0x2D87 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xCE5 DUP3 DUP5 PUSH2 0x2D90 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2FBD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x2FDC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 SWAP1 DUP2 MUL ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x2FFD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x1F SWAP2 SWAP1 SWAP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND SWAP1 JUMP JUMPDEST PUSH2 0xFFFF AND SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0xFF AND SWAP1 JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x30AB JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3093 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x11C2 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP1 JUMP STOP LOG2 PUSH6 0x627A7A723058 KECCAK256 SELFDESTRUCT 0x5c 0x1e ORIGIN JUMP SWAP9 SWAP1 SWAP16 REVERT CALLDATALOAD SWAP1 AND PUSH12 0xDFF6A2F31FF4394822A4E1B9 0xea GT SWAP11 PUSH11 0x813E6C6C6578706572696D PUSH6 0x6E74616CF500 CALLDATACOPY ",
+ "sourceMap": "834:541:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1170:11:3;;;;1148:10;:34;1127:116;;;;;;;;;;;;;;;;;;;;;;834:541:0;1336:209:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1336:209:6;;;;;;;;;;;;;;;;;;;;;;;;;2954:2408:4;;;;;;;;;;;;;;;;;;1419:950:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1419:950:2;;;;;;;;;925:59:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;925:59:3;;;;;;;;;;;;6720:1894:4;;;;;;;;;;786:53:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;786:53:3;;;;875:37;;8:9:-1;5:2;;;30:1;27;20:12;5:2;875:37:3;;;;2778:732:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2778:732:2;;;;;;;;;3919:1414;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3919:1414:2;;;;;;;;;1147:183:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1147:183:6;;;;;;;;;1336:209;1079:60;;;;;;;;;;;;;;;;;;;;;1336:209;;;;;;:::o;2954:2408:4:-;3256:35;;:::i;:::-;3332:9;3307:22;;;3372:18;;;3351:88;;;;;;;;;;;;;;3535:100;3558:14;3586:13;3613:12;3535:9;:100::i;:::-;3512:123;;3670:37;3678:14;3694:12;3670:7;:37::i;:::-;3645:62;;3774:11;;;;;;;;;;;:19;;;3800:14;3774:43;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3774:43:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3774:43:4;;;;;4011:50;4032:6;4039:1;4032:9;;;;;;;;;;;;;;;;;;:24;;;4058:2;4011:20;:50::i;:::-;4098:15;4071:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3983:78;;-1:-1:-1;4071:42:4;;4098:15;4071:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:6;4078:1;4071:9;;;;;;;;;;;;;;;;;;;:24;;:42;4156:9;;;4127:39;;;4156:9;;4127:39;4123:614;;;4366:125;4411:6;4435:10;4463:14;4366:27;:125::i;:::-;4347:144;;4123:614;;;4541:185;4588:6;4612:10;4640:9;4667:13;4698:14;4541:29;:185::i;:::-;4522:204;;4123:614;4862:39;;;;4844:57;;;4823:121;;;;;;;;;;;;;;5044:39;;;;5026:57;;5005:126;;;;;;;;;;;;;;5186:136;5218:17;5249:10;5273:16;:39;;;5186:18;:136::i;:::-;2954:2408;;;;;;;;;;;;:::o;1419:950:2:-;1583:35;;:::i;:::-;1639:9;1692:37;1816;2035:35;;:::i;:::-;1651:1;1639:13;;1634:696;1658:6;:13;1654:1;:17;1634:696;;;1732:70;1740:20;1762:16;:39;;;1732:7;:70::i;:::-;1692:110;;1856:165;1890:6;1897:1;1890:9;;;;;;;;;;;;;;;;;;:26;;;1934:6;1941:1;1934:9;;;;;;;;;;;;;;;;;;:26;;;1978:29;1856:16;:165::i;:::-;1816:205;;2073:62;2094:6;2101:1;2094:9;;;;;;;;;;;;;;;;;;2105:29;2073:20;:62::i;:::-;2035:100;;2149:50;2164:16;2182;2149:14;:50::i;:::-;2217:39;;:63;;2213:107;;;2300:5;;2213:107;1673:3;;;;;1634:696;;;1419:950;;;;;;;;:::o;925:59:3:-;980:4;925:59;:::o;6720:1894:4:-;7061:35;;:::i;:::-;7137:9;7112:22;7177:18;;;7156:88;;;;;;;;;;;;;;7298:1;7275:24;;7254:94;;;;;;;;;;;;;;7379:48;7399:6;7406:1;7399:9;;;;;;;;;;;;;;;;;;:24;;;7425:1;7379:19;:48::i;:::-;1204:32;;;;;;;;;;;;;;;;7358:69;;-1:-1:-1;7458:28:4;;;;;;;;:61;;-1:-1:-1;1292:47:4;;;;;;;;;;;;;;;;;;;;;7490:29;;;;;;;7458:61;7437:131;;;;;;;;;;;;;;;;7579:11;;;;;;;;;;;:19;;;7605:14;7579:43;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7579:43:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;1204:32:4;;;;;;;;;;;;;;;;7636:28;;;;;;;7632:505;;-1:-1:-1;7632:505:4;;-1:-1:-1;;7632:505:4;7699:190;7745:6;7769:10;7797:9;7824:13;7855:20;7699:28;:190::i;:::-;7680:209;;7632:505;;;1292:47;;;;;;;;;;;;;;;;;;;;;7910:29;;;;;;;7906:231;;;7974:152;8020:6;8044:10;8072:9;8099:13;7974:28;:152::i;:::-;7955:171;;7906:231;8262:39;;;;8244:57;;;8223:121;;;;;;;;;;;;;;8354:220;8394:64;8402:14;8418:16;:39;;;8394:7;:64::i;:::-;8472:16;:39;;;8525:13;8552:12;8354:26;:220::i;:::-;6720:1894;;;;;;;;;;;:::o;786:53:3:-;834:5;786:53;:::o;875:37::-;908:4;875:37;:::o;2778:732:2:-;2943:35;;:::i;:::-;2999:9;3052:37;3176:35;;:::i;:::-;3011:1;2999:13;;2994:477;3018:6;:13;3014:1;:17;2994:477;;;3092:70;3100:20;3122:16;:39;;;3092:7;:70::i;:::-;3052:110;;3214:62;3235:6;3242:1;3235:9;;;;;;;;;3214:62;3176:100;;3290:50;3305:16;3323;3290:14;:50::i;:::-;3401:20;3358:16;:39;;;:63;3354:107;;;3441:5;;3354:107;3033:3;;;;;2994:477;;;2778:732;;;;;;;:::o;3919:1414::-;4079:35;;:::i;:::-;4135:9;4188:30;4479:31;4747:35;;:::i;:::-;4147:1;4135:13;;4130:1164;4154:6;:13;4150:1;:17;4130:1164;;;4221:63;4229:13;4244:16;:39;;;4221:7;:63::i;:::-;4188:96;;4513:220;4547:6;4554:1;4547:9;;;;;;;;;;;;;;;;;;:26;;;4591:55;4599:6;4606:1;4599:9;;;;;;;;;;;;;;;;;;:26;;;4627:6;4634:1;4627:9;;;;;;;;;;;;;;;;;;:18;;;4591:7;:55::i;:::-;4697:22;4513:16;:220::i;:::-;4479:254;;4785:68;4806:6;4813:1;4806:9;;;;;;;;;;;;;;;;;;4817:35;4825:23;4850:1;4817:7;:35::i;:::-;4785:20;:68::i;:::-;4747:106;;4910:79;4918:16;:39;;;4959:16;:29;;;4910:7;:79::i;:::-;4868:121;;5003:50;5018:16;4868;5003:14;:50::i;:::-;5188:39;;:56;-1:-1:-1;5184:100:2;;5264:5;;5184:100;4169:3;;;;;4130:1164;;1147:183:6;961:52;;;;;;;;;;;;;;;;;;;;;1147:183;;;;;;:::o;1644:695:3:-;1795:20;1851:1;1835:13;:17;;;:47;;;;-1:-1:-1;1856:26:3;;;;;1835:47;1831:473;;;908:4;1923:24;;;;;1898:107;;;;;;;;;;;;;;2111:133;;;;834:5;2216:14;2111:16;:133::i;:::-;2258:35;;2096:148;;-1:-1:-1;2258:21:3;;;;:35;;;;;2096:148;;2258:35;;;;2096:148;2258:21;:35;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2258:35:3;1644:695;;;;;:::o;501:207:30:-;587:7;631:6;;;;610:69;;;;;;;;;;;;;;-1:-1:-1;696:5:30;;;501:207;;;;;:::o;10259:886:29:-;10380:14;10443:5;10451:2;10443:10;10431:1;:8;:22;;10410:135;;;;;;;;;;;;;;;;-1:-1:-1;11047:13:29;10792:2;11047:13;11041:20;11063:42;11037:69;;10259:886::o;11418:994:4:-;11602:35;;:::i;:::-;12042:23;11759:8;;:107;;;;;:8;;;;;:25;;:107;;11798:6;;11818:14;;11846:10;;11759:107;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11759:107:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11759:107:4;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;11759:107:4;;;;;;;;;11740:126;;12068:79;12076:16;:39;;;12117:16;:29;;;12068:7;:79::i;:::-;12042:105;;12178:79;12200:16;:39;;;12241:15;12178:21;:79::i;:::-;12157:148;;;;;;;;;;;;;;;;12315:57;;;11418:994;-1:-1:-1;;;11418:994:4:o;9162:1906::-;9429:35;;:::i;:::-;9480:31;9538:46;;:::i;:::-;9808:35;;:::i;:::-;10741:41;;:::i;:::-;9514:14;9480:48;;9587:50;9614:6;9622:14;9587:26;:50::i;:::-;9538:99;;9694:1;9651:27;:40;;;:44;9647:998;;;9846:150;9884:9;9911:13;9942:27;:40;;;9846:20;:150::i;:::-;9808:188;;10134:161;10177:14;10213:64;10221:14;10237:16;:39;;;10213:7;:64::i;:::-;10134:21;:161::i;:::-;10109:242;;;;;;;;;;;;;;;;10391:73;10399:23;10424:16;:39;;;10391:7;:73::i;:::-;10510:29;;;;;10478;;;:61;10595:39;;;;;10553;;;:81;10365:99;-1:-1:-1;9647:998:4;10785:8;;:116;;;;;:8;;;;;:25;;:116;;10824:6;;10844:23;;10881:10;;10785:116;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10785:116:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10785:116:4;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;10785:116:4;;;;;;;;;10741:160;;10972:56;10987:16;11005:22;10972:14;:56::i;:::-;9162:1906;;;;;;;;;;;:::o;1551:1224:6:-;866:38;;;;;;;;;;;;;;;;1809:12;;1824:10;;;;866:38;1835:105;;1908:2;;1924:6;;1835:105;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;1835:105:6;;;49:4:-1;25:18;;61:17;;1835:105:6;182:15:-1;1835:105:6;;;;179:29:-1;;;;160:49;;1824:117:6;;;1835:105;;1824:117;;;;25:18:-1;1824:117:6;;25:18:-1;-1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;1824:117:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1951:69:6;;;;;;;;;;;;;;;;;2399:14;2396:2;;;-1:-1:-1;2443:1:6;2467:14;2483:2;2464:22;2461:2;;;2605;2602:1;2599;2584:24;-1:-1:-1;2646:1:6;2640:8;2461:2;2720:7;2699:69;;;;;;;;;;;;;;;;1551:1224;;;;:::o;937:326:24:-;1091:21;1144:82;1165:26;1173:9;1184:6;1165:7;:26::i;:::-;1205:11;1144:7;:82::i;:::-;1128:98;937:326;-1:-1:-1;;;;937:326:24:o;5694:1215:2:-;5852:30;;:::i;:::-;5898:35;;:::i;:::-;6093:33;5936:8;;:28;;;;;6093:33;;5936:8;;;:21;;:28;;5958:5;;5936:28;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5936:28:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5936:28:2;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;5936:28:2;;;;;;;;;5978:21;;5898:66;;-1:-1:-1;5978:61:2;;6009:29;5978:61;5974:110;;6055:18;;5974:110;6129:70;6137:5;:22;;;6161:9;:37;;;6129:7;:70::i;:::-;6093:106;;6242:55;6249:20;6271:25;6242:6;:55::i;:::-;6209:88;;6345:22;6308:11;:34;;:59;;;;;6414:134;6444:22;6480:5;:22;;;6516:5;:22;;;6414:16;:134::i;:::-;6377:171;;6651:22;;;;6687:14;;;;6585:126;;6615:22;;6585:16;:126::i;:::-;6558:24;;;:153;6814:22;;;;6850:14;;;;6748:126;;6778:22;;6748:16;:126::i;:::-;6721:24;;;:153;5694:1215;;;;;;;:::o;1772:648:23:-;1965:39;;2006:40;;1957:90;;1965:39;1957:7;:90::i;:::-;1915:132;;2107:39;;;;;2148:40;;;;2099:90;;2107:39;2099:7;:90::i;:::-;2057:39;;;:132;2239:29;;;;;2270:30;;;;2231:70;;2239:29;2231:7;:70::i;:::-;2199:29;;;:102;2351:29;;;;;2382:30;;;;2343:70;;2351:29;2343:7;:70::i;:::-;2311:29;;;;:102;;;;-1:-1:-1;1772:648:23:o;15559:559:29:-;15679:13;15741:5;15749:1;15741:9;15729:1;:8;:21;;15708:105;;;;;;;;;;;;;;;;-1:-1:-1;;15869:2:29;15862:10;15856:17;16012:66;16000:79;;15559:559::o;13021:3595:4:-;13293:50;;:::i;:::-;13454:25;14027:35;;:::i;:::-;14951:45;;:::i;:::-;15236:38;;:::i;:::-;13482:50;13503:6;13510:1;13503:9;;;;;;;;;13482:50;13774:15;13747:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13454:78;;-1:-1:-1;13747:42:4;;13774:15;13747:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:6;13754:1;13747:9;;;;;;;;;;;;;;;;;;;:24;;:42;14105:9;;;14076:39;;;14105:9;;14076:39;14072:2304;;;14150:124;14188:6;14212:10;14240:20;14150;:124::i;:::-;14398:39;;14131:143;;-1:-1:-1;14398:63:4;-1:-1:-1;14398:63:4;14373:144;;;;;;;;;;;;;;14531:50;14546:16;14564;14531:14;:50::i;:::-;14620:244;14663:79;14671:16;:39;;;14712:16;:29;;;14663:7;:79::i;:::-;14777:39;;14620:21;:244::i;:::-;14595:325;;;;;;;;;;;;;;;;14072:2304;;;14999:55;15025:6;15033:20;14999:25;:55::i;:::-;14951:103;;15114:1;15072:26;:39;;;:43;15068:573;;;15277:165;15319:9;15350:13;15385:26;:39;;;15277:20;:165::i;:::-;15502:42;;;;;15460:39;;;:84;15594:32;;;;;15562:29;;;:64;15236:206;-1:-1:-1;15068:573:4;15759:8;;:128;;;;;:8;;;;;:24;;:128;;15801:6;;15825:20;;15863:10;;15759:128;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15759:128:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15759:128:4;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;15759:128:4;;;;;;;;;15926:39;;15740:147;;-1:-1:-1;15926:63:4;;15901:144;;;;;;;;;;;;;;16059:50;16074:16;16092;16059:14;:50::i;:::-;16148:161;16191:16;:39;;;16252:16;:39;;;16148:21;:161::i;:::-;16123:242;;;;;;;;;;;;;;;;16440:136;16472:17;16503:10;16527:16;:39;;;16440:18;:136::i;17161:2228::-;17395:50;;:::i;:::-;17461:25;17496:20;17542:38;17625:9;18304:38;;:::i;:::-;18668:35;;:::i;:::-;17519:6;:13;17496:36;;17597:12;17583:27;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;17583:27:4;;17542:68;;17637:1;17625:13;;17620:543;17644:12;17640:1;:16;17620:543;;;17730:46;17738:17;17757:6;17764:1;17757:9;;;;;;;;;;;;;;;;;;:18;;;17730:7;:46::i;:::-;18004:15;17977:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17710:66;;-1:-1:-1;17977:42:4;;18004:15;17977:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:6;17984:1;17977:9;;;;;;;;;;;;;;;;;;;:24;;:42;18126:9;;:6;;18133:1;;18126:9;;;;;;;;;;;;;;:26;;;18099:21;18121:1;18099:24;;;;;;;;;;;;;;;;;;:53;17658:3;;;;;17620:543;;;18196:1;18176:17;:21;18172:487;;;18345:127;18383:9;18410:13;18441:17;18345:20;:127::i;:::-;18518:32;;;;;18486:29;;;:64;18606:42;;;;;18564:39;;;:84;18304:168;-1:-1:-1;18172:487:4;18706:8;;:119;;;;;:8;;;;;:30;;:119;;18750:6;;18770:21;;18805:10;;18706:119;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18706:119:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18706:119:4;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;18706:119:4;;;;;;;;;18668:157;;18835:50;18850:16;18868;18835:14;:50::i;:::-;18916:149;18955:16;:39;;;19012:16;:39;;;18916:21;:149::i;:::-;18895:218;;;;;;;;;;;;;;;;19196:1;19192:5;;19187:163;19203:12;19199:1;:16;19187:163;;;19236:103;19273:6;19280:1;19273:9;;;;;;;;;;;;;;;;;;:24;;;19315:10;19236:19;:103::i;:::-;19217:3;;;;;19187:163;;;17161:2228;;;;;;;;;;;;:::o;2960:777:3:-;3391:20;3544:24;3267:1;3247:17;:21;3243:488;;;3284:11;;:39;;;;;:11;;;;;:20;;:39;;3305:17;;3284:39;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3284:39:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3284:39:3;;;;3414:116;3441:14;3473:13;3504:12;3414:9;:116::i;:::-;3391:139;;3571:40;3579:17;3598:12;3571:7;:40::i;:::-;3544:67;;3648:1;3629:16;:20;3625:96;;;3669:37;;:10;;:37;;;;;3689:16;;3669:37;;;;3689:16;3669:10;:37;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3669:37:3;3625:96;2960:777;;;;;;:::o;714:230:30:-;800:7;835:5;;;871:6;;;;850:69;;;;;;;;;;;;;;936:1;929:8;;714:230;;;;;;:::o;4350:384:3:-;4482:4;;4533:138;980:4;834:5;4642:19;4533:16;:138::i;:::-;4688:39;;;;;4350:384;-1:-1:-1;;;4350:384:3:o;1831:2046:5:-;2006:35;;:::i;:::-;2062:9;2386:29;2675:31;3095:35;;:::i;:::-;2074:1;2062:13;;2057:1781;2081:6;:13;2077:1;:17;2057:1781;;;2235:14;2208:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2235:14;2208:41;;2235:14;2208:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:6;2215:1;2208:9;;;;;;;;;;;;;;;;;;;;:24;;:41;;;;2290:15;2263:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2290:15;2263:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:6;2270:1;2263:9;;;;;;;;;;;;;;;;;;;:24;;:42;2440:39;;2418:62;;2426:12;;2418:7;:62::i;:::-;2386:94;;2709:219;2743:6;2750:1;2743:9;;;;;;;;;;;;;;;;;;:26;;;2787:55;2795:6;2802:1;2795:9;;;;;;;;;;;;;;;;;;:26;;;2823:6;2830:1;2823:9;;;;;;;;;2709:219;3133:8;;3169:9;;2675:253;;-1:-1:-1;3133:8:5;;;:18;;3169:6;;3176:1;;3169:9;;;;;;;;;;;;;;3196:35;3204:23;3229:1;3196:7;:35::i;:::-;3249:10;3260:1;3249:13;;;;;;;;;;;;;;;;;;3133:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3133:143:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3133:143:5;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;3133:143:5;;;;;;;;;3095:181;;3421:79;3429:16;:39;;;3470:16;:29;;;3421:7;:79::i;:::-;3379:121;;3584:50;3599:16;3379;3584:14;:50::i;:::-;3733:39;;:55;-1:-1:-1;3729:99:5;;3808:5;;3729:99;2096:3;;;;;2057:1781;;;1831:2046;;;;;;;;;:::o;50:288:30:-;136:7;;163:6;;159:45;;;192:1;185:8;;;;159:45;-1:-1:-1;225:5:30;;;229:1;225;:5;261;;;;;;;;:10;240:73;;;;;;;;;;;;;344:151;430:7;453:9;469:1;465;:5;;;;;;;;;344:151;-1:-1:-1;;;;344:151:30:o;1369:135::-;1454:7;1488:1;1484;:5;:13;;1496:1;1484:13;;;-1:-1:-1;1492:1:30;;1477:20;-1:-1:-1;1369:135:30:o;2781:467:6:-;2929:13;;3033:25;2945;:9;2967:2;2945:25;:21;:25;:::i;:::-;2929:41;-1:-1:-1;2998:25:6;:9;3020:2;2998:25;:21;:25;:::i;:::-;2980:43;-1:-1:-1;3061:34:6;:9;3091:3;3061:34;:29;:34;:::i;:::-;3105:136;;;;;3033:62;;-1:-1:-1;3105:36:6;;;;;;:136;;3163:4;;3182:2;;3198:7;;3033:62;;3105:136;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3105:136:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3105:136:6;;;;2781:467;;;;;:::o;14699:195:29:-;14820:14;14865:21;14877:1;14880:5;14865:11;:21::i;16441:672::-;16570:19;16644:25;16672:21;16684:1;16687:5;16672:11;:21::i;:::-;16644:49;;16712:2;16703:11;;;;16848:17;16840:5;:25;16828:1;:8;:37;;16807:132;;;;;;;;;;;;;;;;-1:-1:-1;;17061:13:29;;16441:672::o;13281:490::-;13402:14;13465:5;13473:2;13465:10;13453:1;:8;:22;;13432:107;;;;;;;;;;;;;;;;-1:-1:-1;13718:13:29;13620:2;13718:13;13712:20;;13281:490::o;834:541:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;-1:-1:-1;834:541:0;;;;;;;;;;;;;;;;;:::o;5:118:-1:-;;72:46;110:6;97:20;72:46;;146:693;;261:4;249:17;;245:27;-1:-1;235:2;;286:1;283;276:12;235:2;323:6;310:20;345:85;360:69;422:6;360:69;;;345:85;;;458:21;;;502:4;490:17;;;;336:94;;-1:-1;515:14;;490:17;610:1;595:238;620:6;617:1;614:13;595:238;;;703:3;690:17;682:6;678:30;727:42;765:3;753:10;727:42;;;715:55;;-1:-1;793:4;784:14;;;;812;;;;;642:1;635:9;595:238;;879:735;;1008:4;996:17;;992:27;-1:-1;982:2;;1033:1;1030;1023:12;982:2;1070:6;1057:20;1092:99;1107:83;1183:6;1107:83;;1092:99;1219:21;;;1263:4;1251:17;;;;1083:108;;-1:-1;1276:14;;1251:17;1371:1;1356:252;1381:6;1378:1;1375:13;1356:252;;;1464:3;1451:17;1443:6;1439:30;1488:56;1540:3;1528:10;1488:56;;;1476:69;;-1:-1;1568:4;1559:14;;;;1587;;;;;1403:1;1396:9;1356:252;;1622:122;;1700:39;1731:6;1725:13;1700:39;;1752:432;;1842:4;1830:17;;1826:27;-1:-1;1816:2;;1867:1;1864;1857:12;1816:2;1904:6;1891:20;1926:60;1941:44;1978:6;1941:44;;1926:60;1917:69;;2006:6;1999:5;1992:21;2042:4;2034:6;2030:17;2075:4;2068:5;2064:16;2110:3;2101:6;2096:3;2092:16;2089:25;2086:2;;;2127:1;2124;2117:12;2086:2;2137:41;2171:6;2166:3;2161;2137:41;;2681:865;;2810:4;2798:9;2793:3;2789:19;2785:30;2782:2;;;2828:1;2825;2818:12;2782:2;2846:20;2861:4;2846:20;;;2837:29;-1:-1;2934:1;2965:60;3021:3;3001:9;2965:60;;;2941:85;;-1:-1;3105:2;3138:60;3194:3;3170:22;;;3138:60;;;3131:4;3124:5;3120:16;3113:86;3047:163;3268:2;3301:60;3357:3;3348:6;3337:9;3333:22;3301:60;;;3294:4;3287:5;3283:16;3276:86;3220:153;3431:2;3464:60;3520:3;3511:6;3500:9;3496:22;3464:60;;;3457:4;3450:5;3446:16;3439:86;3383:153;2776:770;;;;;3585:689;;3712:4;3700:9;3695:3;3691:19;3687:30;3684:2;;;3730:1;3727;3720:12;3684:2;3748:20;3763:4;3748:20;;;3739:29;-1:-1;3825:1;3856:58;3910:3;3890:9;3856:58;;;3832:83;;-1:-1;3981:2;4014:60;4070:3;4046:22;;;4014:60;;;4007:4;4000:5;3996:16;3989:86;3936:150;4159:2;4192:60;4248:3;4239:6;4228:9;4224:22;4192:60;;;4185:4;4178:5;4174:16;4167:86;4096:168;3678:596;;;;;4309:2205;;4417:5;4405:9;4400:3;4396:19;4392:31;4389:2;;;4436:1;4433;4426:12;4389:2;4454:21;4469:5;4454:21;;;4445:30;-1:-1;4533:1;4564:49;4609:3;4589:9;4564:49;;;4540:74;;-1:-1;4683:2;4716:49;4761:3;4737:22;;;4716:49;;;4709:4;4702:5;4698:16;4691:75;4635:142;4842:2;4875:49;4920:3;4911:6;4900:9;4896:22;4875:49;;;4868:4;4861:5;4857:16;4850:75;4787:149;4995:2;5028:49;5073:3;5064:6;5053:9;5049:22;5028:49;;;5021:4;5014:5;5010:16;5003:75;4946:143;5151:3;5185:49;5230:3;5221:6;5210:9;5206:22;5185:49;;;5178:4;5171:5;5167:16;5160:75;5099:147;5308:3;5342:49;5387:3;5378:6;5367:9;5363:22;5342:49;;;5335:4;5328:5;5324:16;5317:75;5256:147;5457:3;5491:49;5536:3;5527:6;5516:9;5512:22;5491:49;;;5484:4;5477:5;5473:16;5466:75;5413:139;5606:3;5640:49;5685:3;5676:6;5665:9;5661:22;5640:49;;;5633:4;5626:5;5622:16;5615:75;5562:139;5768:3;5803:49;5848:3;5839:6;5828:9;5824:22;5803:49;;;5795:5;5788;5784:17;5777:76;5711:153;5914:3;5949:49;5994:3;5985:6;5974:9;5970:22;5949:49;;;5941:5;5934;5930:17;5923:76;5874:136;6098:3;6087:9;6083:19;6070:33;6123:18;6115:6;6112:30;6109:2;;;6155:1;6152;6145:12;6109:2;6191:54;6241:3;6232:6;6221:9;6217:22;6191:54;;;6183:5;6176;6172:17;6165:81;6020:237;6345:3;6334:9;6330:19;6317:33;6370:18;6362:6;6359:30;6356:2;;;6402:1;6399;6392:12;6356:2;6438:54;6488:3;6479:6;6468:9;6464:22;6438:54;;;6430:5;6423;6419:17;6412:81;6267:237;4383:2131;;;;;6521:116;;6587:45;6624:6;6611:20;6587:45;;6644:118;;6711:46;6749:6;6736:20;6711:46;;6898:118;;6974:37;7003:6;6997:13;6974:37;;7023:721;;;;;7187:3;7175:9;7166:7;7162:23;7158:33;7155:2;;;7204:1;7201;7194:12;7155:2;7239:1;7256:53;7301:7;7281:9;7256:53;;;7246:63;;7218:97;7346:2;7364:53;7409:7;7400:6;7389:9;7385:22;7364:53;;;7354:63;;7325:98;7454:2;7472:53;7517:7;7508:6;7497:9;7493:22;7472:53;;;7462:63;;7433:98;7590:2;7579:9;7575:18;7562:32;7614:18;7606:6;7603:30;7600:2;;;7646:1;7643;7636:12;7600:2;7666:62;7720:7;7711:6;7700:9;7696:22;7666:62;;;7656:72;;7541:193;7149:595;;;;;;;;7751;;;;7898:2;7886:9;7877:7;7873:23;7869:32;7866:2;;;7914:1;7911;7904:12;7866:2;7949:1;7966:53;8011:7;7991:9;7966:53;;;7956:63;;7928:97;8056:2;8074:53;8119:7;8110:6;8099:9;8095:22;8074:53;;;8064:63;;8035:98;8192:2;8181:9;8177:18;8164:32;8216:18;8208:6;8205:30;8202:2;;;8248:1;8245;8238:12;8202:2;8268:62;8322:7;8313:6;8302:9;8298:22;8268:62;;;8258:72;;8143:193;7860:486;;;;;;8353:1507;;;;;;;8689:3;8677:9;8668:7;8664:23;8660:33;8657:2;;;8706:1;8703;8696:12;8657:2;8741:31;;8792:18;8781:30;;8778:2;;;8824:1;8821;8814:12;8778:2;8844:97;8933:7;8924:6;8913:9;8909:22;8844:97;;;8834:107;;8720:227;9006:2;8995:9;8991:18;8978:32;9030:18;9022:6;9019:30;9016:2;;;9062:1;9059;9052:12;9016:2;9082:83;9157:7;9148:6;9137:9;9133:22;9082:83;;;9072:93;;8957:214;9230:2;9219:9;9215:18;9202:32;9254:18;9246:6;9243:30;9240:2;;;9286:1;9283;9276:12;9240:2;9306:97;9395:7;9386:6;9375:9;9371:22;9306:97;;;9296:107;;9181:228;9468:2;9457:9;9453:18;9440:32;9492:18;9484:6;9481:30;9478:2;;;9524:1;9521;9514:12;9478:2;9544:83;9619:7;9610:6;9599:9;9595:22;9544:83;;;9534:93;;9419:214;9664:3;9683:52;9727:7;9718:6;9707:9;9703:22;9683:52;;;9673:62;;9643:98;9772:3;9791:53;9836:7;9827:6;9816:9;9812:22;9791:53;;;9781:63;;9751:99;8651:1209;;;;;;;;;9867:1633;;;;;;;;10220:3;10208:9;10199:7;10195:23;10191:33;10188:2;;;10237:1;10234;10227:12;10188:2;10272:31;;10323:18;10312:30;;10309:2;;;10355:1;10352;10345:12;10309:2;10375:97;10464:7;10455:6;10444:9;10440:22;10375:97;;;10365:107;;10251:227;10537:2;10526:9;10522:18;10509:32;10561:18;10553:6;10550:30;10547:2;;;10593:1;10590;10583:12;10547:2;10613:83;10688:7;10679:6;10668:9;10664:22;10613:83;;;10603:93;;10488:214;10761:2;10750:9;10746:18;10733:32;10785:18;10777:6;10774:30;10771:2;;;10817:1;10814;10807:12;10771:2;10837:97;10926:7;10917:6;10906:9;10902:22;10837:97;;;10827:107;;10712:228;10999:2;10988:9;10984:18;10971:32;11023:18;11015:6;11012:30;11009:2;;;11055:1;11052;11045:12;11009:2;11075:83;11150:7;11141:6;11130:9;11126:22;11075:83;;;11065:93;;10950:214;11195:3;11214:53;11259:7;11250:6;11239:9;11235:22;11214:53;;;11204:63;;11174:99;11304:3;11323:52;11367:7;11358:6;11347:9;11343:22;11323:52;;;11313:62;;11283:98;11412:3;11431:53;11476:7;11467:6;11456:9;11452:22;11431:53;;;11421:63;;11391:99;10182:1318;;;;;;;;;;;11507:540;;;11672:2;11660:9;11651:7;11647:23;11643:32;11640:2;;;11688:1;11685;11678:12;11640:2;11723:31;;11774:18;11763:30;;11760:2;;;11806:1;11803;11796:12;11760:2;11826:97;11915:7;11906:6;11895:9;11891:22;11826:97;;;11816:107;;11702:227;11960:2;11978:53;12023:7;12014:6;12003:9;11999:22;11978:53;;;11968:63;;11939:98;11634:413;;;;;;12054:322;;12198:3;12186:9;12177:7;12173:23;12169:33;12166:2;;;12215:1;12212;12205:12;12166:2;12250:1;12267:93;12352:7;12332:9;12267:93;;12383:317;;12525:2;12513:9;12504:7;12500:23;12496:32;12493:2;;;12541:1;12538;12531:12;12493:2;12576:1;12593:91;12676:7;12656:9;12593:91;;12707:110;12780:31;12805:5;12780:31;;;12775:3;12768:44;12762:55;;;12851:766;;12996:59;13049:5;12996:59;;;13073:6;13068:3;13061:19;13097:4;13092:3;13088:14;13081:21;;13145:3;13187:4;13179:6;13175:17;13170:3;13166:27;13213:61;13268:5;13213:61;;;13295:1;13280:298;13305:6;13302:1;13299:13;13280:298;;;13367:9;13361:4;13357:20;13352:3;13345:33;13393:68;13456:4;13447:6;13441:13;13393:68;;;13385:76;;13478:65;13536:6;13478:65;;;13566:4;13557:14;;;;;13468:75;-1:-1;13327:1;13320:9;13280:298;;;-1:-1;13591:4;;12975:642;-1:-1;;;;;;12975:642;13684:864;;13857:73;13924:5;13857:73;;;13948:6;13943:3;13936:19;13972:4;13967:3;13963:14;13956:21;;14020:3;14062:4;14054:6;14050:17;14045:3;14041:27;14088:75;14157:5;14088:75;;;14184:1;14169:340;14194:6;14191:1;14188:13;14169:340;;;14256:9;14250:4;14246:20;14241:3;14234:33;14282:96;14373:4;14364:6;14358:13;14282:96;;;14274:104;;14395:79;14467:6;14395:79;;;14497:4;14488:14;;;;;14385:89;-1:-1;14216:1;14209:9;14169:340;;14587:590;;14722:54;14770:5;14722:54;;;14794:6;14789:3;14782:19;14818:4;14813:3;14809:14;14802:21;;14863:56;14913:5;14863:56;;;14940:1;14925:230;14950:6;14947:1;14944:13;14925:230;;;14990:53;15039:3;15030:6;15024:13;14990:53;;;15060:60;15113:6;15060:60;;;15143:4;15134:14;;;;;15050:70;-1:-1;14972:1;14965:9;14925:230;;;-1:-1;15168:3;;14701:476;-1:-1;;;;14701:476;15185:107;15256:30;15280:5;15256:30;;15299:297;;15399:38;15431:5;15399:38;;;15454:6;15449:3;15442:19;15466:63;15522:6;15515:4;15510:3;15506:14;15499:4;15492:5;15488:16;15466:63;;;15561:29;15583:6;15561:29;;;15541:50;;;15554:4;15541:50;;15379:217;-1:-1;;;15379:217;15900:397;16055:2;16043:15;;16092:66;16087:2;16078:12;;16071:88;16193:66;16188:2;16179:12;;16172:88;16288:2;16279:12;;16036:261;16306:296;16461:2;16449:15;;16498:66;16493:2;16484:12;;16477:88;16593:2;16584:12;;16442:160;16611:397;16766:2;16754:15;;16803:66;16798:2;16789:12;;16782:88;16904:66;16899:2;16890:12;;16883:88;16999:2;16990:12;;16747:261;17017:296;17172:2;17160:15;;17209:66;17204:2;17195:12;;17188:88;17304:2;17295:12;;17153:160;17322:397;17477:2;17465:15;;17514:66;17509:2;17500:12;;17493:88;17615:66;17610:2;17601:12;;17594:88;17710:2;17701:12;;17458:261;17728:296;17883:2;17871:15;;17920:66;17915:2;17906:12;;17899:88;18015:2;18006:12;;17864:160;18033:296;18188:2;18176:15;;18225:66;18220:2;18211:12;;18204:88;18320:2;18311:12;;18169:160;18338:296;18493:2;18481:15;;18530:66;18525:2;18516:12;;18509:88;18625:2;18616:12;;18474:160;18643:296;18798:2;18786:15;;18835:66;18830:2;18821:12;;18814:88;18930:2;18921:12;;18779:160;18948:397;19103:2;19091:15;;19140:66;19135:2;19126:12;;19119:88;19241:66;19236:2;19227:12;;19220:88;19336:2;19327:12;;19084:261;19354:296;19509:2;19497:15;;19546:66;19541:2;19532:12;;19525:88;19641:2;19632:12;;19490:160;19659:397;19814:2;19802:15;;19851:66;19846:2;19837:12;;19830:88;19952:66;19947:2;19938:12;;19931:88;20047:2;20038:12;;19795:261;20141:888;20369:22;;20282:4;20273:14;;;20403:61;20277:3;20369:22;20403:61;;;20302:174;20570:4;20563:5;20559:16;20553:23;20588:62;20644:4;20639:3;20635:14;20622:11;20588:62;;;20486:176;20746:4;20739:5;20735:16;20729:23;20764:62;20820:4;20815:3;20811:14;20798:11;20764:62;;;20672:166;20922:4;20915:5;20911:16;20905:23;20940:62;20996:4;20991:3;20987:14;20974:11;20940:62;;21089:2419;21304:22;;21089:2419;;21226:5;21217:15;;;21338:61;21221:3;21304:22;21338:61;;;21247:164;21495:4;21488:5;21484:16;21478:23;21513:62;21569:4;21564:3;21560:14;21547:11;21513:62;;;21421:166;21678:4;21671:5;21667:16;21661:23;21696:62;21752:4;21747:3;21743:14;21730:11;21696:62;;;21597:173;21855:4;21848:5;21844:16;21838:23;21873:62;21929:4;21924:3;21920:14;21907:11;21873:62;;;21780:167;22035:4;22028:5;22024:16;22018:23;22053:62;22109:4;22104:3;22100:14;22087:11;22053:62;;;21957:170;22215:4;22208:5;22204:16;22198:23;22233:62;22289:4;22284:3;22280:14;22267:11;22233:62;;;22137:170;22387:4;22380:5;22376:16;22370:23;22405:62;22461:4;22456:3;22452:14;22439:11;22405:62;;;22317:162;22559:4;22552:5;22548:16;22542:23;22577:62;22633:4;22628:3;22624:14;22611:11;22577:62;;;22489:162;22744:5;22737;22733:17;22727:24;22763:63;22819:5;22814:3;22810:15;22797:11;22763:63;;;22661:177;22914:5;22907;22903:17;22897:24;22933:63;22989:5;22984:3;22980:15;22967:11;22933:63;;;22848:160;23094:5;23087;23083:17;23077:24;23147:3;23141:4;23137:14;23129:5;23124:3;23120:15;23113:39;23167:66;23228:4;23215:11;23167:66;;;23159:74;;23018:227;23331:5;23324;23320:17;23314:24;23384:3;23378:4;23374:14;23366:5;23361:3;23357:15;23350:39;23404:66;23465:4;23452:11;23404:66;;;23396:74;21199:2309;-1:-1;;;;;21199:2309;25990:107;26061:30;26085:5;26061:30;;26104:110;26177:31;26202:5;26177:31;;26221:581;26431:3;26416:19;;26446:61;26420:9;26480:6;26446:61;;;26518:62;26576:2;26565:9;26561:18;26552:6;26518:62;;;26591;26649:2;26638:9;26634:18;26625:6;26591:62;;;26701:9;26695:4;26691:20;26686:2;26675:9;26671:18;26664:48;26726:66;26787:4;26778:6;26726:66;;;26718:74;26402:400;-1:-1;;;;;;26402:400;26809:294;26945:2;26930:18;;26959:61;26934:9;26993:6;26959:61;;;27031:62;27089:2;27078:9;27074:18;27065:6;27031:62;;27110:935;27472:2;27486:47;;;27457:18;;27547:136;27457:18;27669:6;27547:136;;;27539:144;;27731:9;27725:4;27721:20;27716:2;27705:9;27701:18;27694:48;27756:98;27849:4;27840:6;27756:98;;;27748:106;;27902:9;27896:4;27892:20;27887:2;27876:9;27872:18;27865:48;27927:108;28030:4;28021:6;27927:108;;28052:787;28364:2;28378:47;;;28349:18;;28439:136;28349:18;28561:6;28439:136;;;28431:144;;28586:62;28644:2;28633:9;28629:18;28620:6;28586:62;;;28696:9;28690:4;28686:20;28681:2;28670:9;28666:18;28659:48;28721:108;28824:4;28815:6;28721:108;;28846:189;28952:2;28937:18;;28966:59;28941:9;28998:6;28966:59;;29042:387;29223:2;29237:47;;;29208:18;;29298:121;29208:18;29298:121;;29436:387;29617:2;29631:47;;;29602:18;;29692:121;29602:18;29692:121;;29830:387;30011:2;30025:47;;;29996:18;;30086:121;29996:18;30086:121;;30224:387;30405:2;30419:47;;;30390:18;;30480:121;30390:18;30480:121;;30618:387;30799:2;30813:47;;;30784:18;;30874:121;30784:18;30874:121;;31012:387;31193:2;31207:47;;;31178:18;;31268:121;31178:18;31268:121;;31406:387;31587:2;31601:47;;;31572:18;;31662:121;31572:18;31662:121;;31800:387;31981:2;31995:47;;;31966:18;;32056:121;31966:18;32056:121;;32194:387;32375:2;32389:47;;;32360:18;;32450:121;32360:18;32450:121;;32588:387;32769:2;32783:47;;;32754:18;;32844:121;32754:18;32844:121;;32982:387;33163:2;33177:47;;;33148:18;;33238:121;33148:18;33238:121;;33376:387;33557:2;33571:47;;;33542:18;;33632:121;33542:18;33632:121;;33770:310;33936:3;33921:19;;33951:119;33925:9;34043:6;33951:119;;34087:333;34241:2;34255:47;;;34226:18;;34316:94;34226:18;34396:6;34316:94;;34427:603;34647:2;34661:47;;;34632:18;;34722:90;34632:18;34798:6;34722:90;;;34714:98;;34823:62;34881:2;34870:9;34866:18;34857:6;34823:62;;;34933:9;34927:4;34923:20;34918:2;34907:9;34903:18;34896:48;34958:62;35015:4;35006:6;34958:62;;35037:189;35143:2;35128:18;;35157:59;35132:9;35189:6;35157:59;;35233:193;35341:2;35326:18;;35355:61;35330:9;35389:6;35355:61;;35433:256;35495:2;35489:9;35521:17;;;35596:18;35581:34;;35617:22;;;35578:62;35575:2;;;35653:1;35650;35643:12;35575:2;35669;35662:22;35473:216;;-1:-1;35473:216;35696:263;;35860:18;35852:6;35849:30;35846:2;;;35892:1;35889;35882:12;35846:2;-1:-1;35921:4;35909:17;;;35939:15;;35783:176;36250:254;;36389:18;36381:6;36378:30;36375:2;;;36421:1;36418;36411:12;36375:2;-1:-1;36494:4;36465;36442:17;;;;36461:9;36438:33;36484:15;;36312:192;36778:126;36892:4;36880:17;;36861:43;37196:112;37291:12;;37275:33;38171:128;38251:42;38240:54;;38223:76;38306:151;38385:66;38374:78;;38357:100;38464:91;38543:6;38532:18;;38515:40;38562:79;38631:5;38614:27;39053:88;39131:4;39120:16;;39103:38;39149:145;39230:6;39225:3;39220;39207:30;-1:-1;39286:1;39268:16;;39261:27;39200:94;39303:268;39368:1;39375:101;39389:6;39386:1;39383:13;39375:101;;;39456:11;;;39450:18;39437:11;;;39430:39;39411:2;39404:10;39375:101;;;39491:6;39488:1;39485:13;39482:2;;;-1:-1;;39556:1;39538:16;;39531:27;39352:219;39579:97;39667:2;39647:14;39663:7;39643:28;;39627:49"
}
}
},
@@ -732,176 +749,128 @@
"2.0.0/forwarder/MixinConstants.sol": {
"id": 1
},
- "2.0.0/forwarder/MixinERC20.sol": {
+ "2.0.0/forwarder/MixinExpectedResults.sol": {
"id": 2
},
- "2.0.0/forwarder/MixinERC721.sol": {
+ "2.0.0/forwarder/MixinFees.sol": {
"id": 3
},
- "2.0.0/forwarder/MixinExpectedResults.sol": {
+ "2.0.0/forwarder/MixinForwarderCore.sol": {
"id": 4
},
- "2.0.0/forwarder/MixinMarketBuyTokens.sol": {
+ "2.0.0/forwarder/MixinMarketBuyZrx.sol": {
"id": 5
},
- "2.0.0/forwarder/MixinMarketBuyZrx.sol": {
+ "2.0.0/forwarder/MixinTransfer.sol": {
"id": 6
},
- "2.0.0/forwarder/MixinMarketSellTokens.sol": {
+ "2.0.0/forwarder/interfaces/IExpectedResults.sol": {
"id": 7
},
- "2.0.0/forwarder/MixinWethFees.sol": {
+ "2.0.0/forwarder/interfaces/IForwarderCore.sol": {
"id": 8
},
- "2.0.0/protocol/AssetProxy/interfaces/IAssetProxy.sol": {
+ "2.0.0/forwarder/mixins/MConstants.sol": {
"id": 9
},
- "2.0.0/protocol/AssetProxy/interfaces/IAuthorizable.sol": {
+ "2.0.0/forwarder/mixins/MExpectedResults.sol": {
"id": 10
},
- "2.0.0/protocol/Exchange/Exchange.sol": {
+ "2.0.0/forwarder/mixins/MFees.sol": {
"id": 11
},
- "2.0.0/protocol/Exchange/MixinAssetProxyDispatcher.sol": {
+ "2.0.0/forwarder/mixins/MForwarderCore.sol": {
"id": 12
},
- "2.0.0/protocol/Exchange/MixinExchangeCore.sol": {
+ "2.0.0/forwarder/mixins/MMarketBuyZrx.sol": {
"id": 13
},
- "2.0.0/protocol/Exchange/MixinMatchOrders.sol": {
+ "2.0.0/forwarder/mixins/MTransfer.sol": {
"id": 14
},
- "2.0.0/protocol/Exchange/MixinSignatureValidator.sol": {
+ "2.0.0/protocol/Exchange/interfaces/IAssetProxyDispatcher.sol": {
"id": 15
},
- "2.0.0/protocol/Exchange/MixinTransactions.sol": {
+ "2.0.0/protocol/Exchange/interfaces/IExchange.sol": {
"id": 16
},
- "2.0.0/protocol/Exchange/MixinWrapperFunctions.sol": {
+ "2.0.0/protocol/Exchange/interfaces/IExchangeCore.sol": {
"id": 17
},
- "2.0.0/protocol/Exchange/interfaces/IAssetProxyDispatcher.sol": {
+ "2.0.0/protocol/Exchange/interfaces/IMatchOrders.sol": {
"id": 18
},
- "2.0.0/protocol/Exchange/interfaces/IExchangeCore.sol": {
+ "2.0.0/protocol/Exchange/interfaces/ISignatureValidator.sol": {
"id": 19
},
- "2.0.0/protocol/Exchange/interfaces/IMatchOrders.sol": {
+ "2.0.0/protocol/Exchange/interfaces/ITransactions.sol": {
"id": 20
},
- "2.0.0/protocol/Exchange/interfaces/ISignatureValidator.sol": {
+ "2.0.0/protocol/Exchange/interfaces/IWrapperFunctions.sol": {
"id": 21
},
- "2.0.0/protocol/Exchange/interfaces/ITransactions.sol": {
+ "2.0.0/protocol/Exchange/libs/LibEIP712.sol": {
"id": 22
},
- "2.0.0/protocol/Exchange/interfaces/IValidator.sol": {
+ "2.0.0/protocol/Exchange/libs/LibFillResults.sol": {
"id": 23
},
- "2.0.0/protocol/Exchange/interfaces/IWallet.sol": {
+ "2.0.0/protocol/Exchange/libs/LibMath.sol": {
"id": 24
},
- "2.0.0/protocol/Exchange/libs/LibConstants.sol": {
+ "2.0.0/protocol/Exchange/libs/LibOrder.sol": {
"id": 25
},
- "2.0.0/protocol/Exchange/libs/LibEIP712.sol": {
+ "2.0.0/tokens/ERC20Token/IERC20Token.sol": {
"id": 26
},
- "2.0.0/protocol/Exchange/libs/LibExchangeErrors.sol": {
+ "2.0.0/tokens/ERC721Token/IERC721Token.sol": {
"id": 27
},
- "2.0.0/protocol/Exchange/libs/LibFillResults.sol": {
+ "2.0.0/tokens/EtherToken/IEtherToken.sol": {
"id": 28
},
- "2.0.0/protocol/Exchange/libs/LibMath.sol": {
- "id": 29
- },
- "2.0.0/protocol/Exchange/libs/LibOrder.sol": {
- "id": 30
- },
- "2.0.0/protocol/Exchange/mixins/MAssetProxyDispatcher.sol": {
- "id": 31
- },
- "2.0.0/protocol/Exchange/mixins/MExchangeCore.sol": {
- "id": 32
- },
- "2.0.0/protocol/Exchange/mixins/MMatchOrders.sol": {
- "id": 33
- },
- "2.0.0/protocol/Exchange/mixins/MSignatureValidator.sol": {
- "id": 34
- },
- "2.0.0/protocol/Exchange/mixins/MTransactions.sol": {
- "id": 35
- },
- "2.0.0/tokens/ERC20Token/IERC20Token.sol": {
- "id": 36
- },
- "2.0.0/tokens/ERC721Token/IERC721Token.sol": {
- "id": 37
- },
- "2.0.0/tokens/WETH9/WETH9.sol": {
- "id": 38
- },
"2.0.0/utils/LibBytes/LibBytes.sol": {
- "id": 39
- },
- "2.0.0/utils/Ownable/IOwnable.sol": {
- "id": 40
- },
- "2.0.0/utils/Ownable/Ownable.sol": {
- "id": 41
+ "id": 29
},
"2.0.0/utils/SafeMath/SafeMath.sol": {
- "id": 42
+ "id": 30
}
},
"sourceCodes": {
- "2.0.0/forwarder/Forwarder.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"./MixinWethFees.sol\";\nimport \"./MixinMarketSellTokens.sol\";\nimport \"./MixinMarketBuyTokens.sol\";\nimport \"./MixinConstants.sol\";\nimport \"../utils/Ownable/Ownable.sol\";\n\ncontract Forwarder is\n Ownable,\n MixinConstants,\n MixinWethFees,\n MixinMarketBuyZrx,\n MixinMarketBuyTokens,\n MixinMarketSellTokens\n{\n uint256 MAX_UINT = 2**256 - 1;\n\n constructor (\n address _exchange,\n address _etherToken,\n address _zrxToken,\n bytes4 _erc20AssetProxyId,\n bytes memory _zrxAssetData,\n bytes memory _wethAssetData\n )\n public\n Ownable()\n MixinConstants(\n _exchange,\n _etherToken,\n _zrxToken,\n _zrxAssetData,\n _wethAssetData\n )\n {\n setERC20ProxyApproval(_erc20AssetProxyId);\n }\n\n /// @dev Default payabale function, this allows us to withdraw WETH\n function ()\n public\n payable\n {\n require(\n msg.sender == address(ETHER_TOKEN),\n \"DEFAULT_FUNCTION_WETH_CONTRACT_ONLY\"\n );\n }\n\n /// @dev Sets the allowances to the proxy for this contract\n function setERC20ProxyApproval(bytes4 erc20AssetProxyId)\n public\n onlyOwner\n {\n address proxyAddress = EXCHANGE.getAssetProxy(erc20AssetProxyId);\n if (proxyAddress != address(0)) {\n ETHER_TOKEN.approve(proxyAddress, MAX_UINT);\n ZRX_TOKEN.approve(proxyAddress, MAX_UINT);\n }\n }\n}\n",
- "2.0.0/forwarder/MixinConstants.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.24;\n\nimport \"../protocol/Exchange/Exchange.sol\";\nimport { WETH9 as EtherToken } from \"../tokens/WETH9/WETH9.sol\";\nimport \"../tokens/ERC20Token/IERC20Token.sol\";\n\ncontract MixinConstants {\n\n Exchange EXCHANGE;\n EtherToken ETHER_TOKEN;\n IERC20Token ZRX_TOKEN;\n bytes ZRX_ASSET_DATA;\n bytes WETH_ASSET_DATA;\n\n constructor (\n address _exchange,\n address _etherToken,\n address _zrxToken,\n bytes memory _zrxAssetData,\n bytes memory _wethAssetData\n )\n public\n {\n EXCHANGE = Exchange(_exchange);\n ETHER_TOKEN = EtherToken(_etherToken);\n ZRX_TOKEN = IERC20Token(_zrxToken);\n ZRX_ASSET_DATA = _zrxAssetData;\n WETH_ASSET_DATA = _wethAssetData;\n }\n\n}",
- "2.0.0/forwarder/MixinERC20.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.24;\npragma experimental ABIEncoderV2;\n\ncontract MixinERC20 {\n\n string constant ERROR_TRANSFER_FAILED = \"TRANSFER_FAILED\";\n bytes4 constant ERC20_TRANSFER_SELECTOR = bytes4(keccak256(\"transfer(address,uint256)\"));\n\n function transferToken(\n address token,\n address to,\n uint256 amount\n )\n internal\n {\n // Transfer tokens.\n // We do a raw call so we can check the success separate\n // from the return data.\n bool success = token.call(abi.encodeWithSelector(\n ERC20_TRANSFER_SELECTOR,\n to,\n amount\n ));\n require(\n success,\n \"TRANSFER_FAILED\"\n );\n \n // Check return data.\n // If there is no return data, we assume the token incorrectly\n // does not return a bool. In this case we expect it to revert\n // on failure, which was handled above.\n // If the token does return data, we require that it is a single\n // value that evaluates to true.\n assembly {\n if returndatasize {\n success := 0\n if eq(returndatasize, 32) {\n // First 64 bytes of memory are reserved scratch space\n returndatacopy(0, 0, 32)\n success := mload(0)\n }\n }\n }\n require(\n success,\n \"TRANSFER_FAILED\"\n );\n }\n}\n",
- "2.0.0/forwarder/MixinERC721.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../utils/LibBytes/LibBytes.sol\";\nimport \"../tokens/ERC721Token/IERC721Token.sol\";\n\ncontract MixinERC721 {\n\n using LibBytes for bytes;\n bytes4 constant ERC721_RECEIVED = bytes4(keccak256(\"onERC721Received(address,uint256,bytes)\"));\n bytes4 constant ERC721_RECEIVED_OPERATOR = bytes4(keccak256(\"onERC721Received(address,address,uint256,bytes)\"));\n\n function onERC721Received(address, uint256, bytes memory)\n public\n pure\n returns(bytes4)\n {\n return ERC721_RECEIVED;\n }\n\n function onERC721Received(address, address, uint256, bytes memory)\n public\n pure\n returns(bytes4)\n {\n return ERC721_RECEIVED_OPERATOR;\n }\n\n function transferERC721Token(\n bytes memory assetData,\n address to\n )\n internal\n {\n // Decode asset data.\n address token = assetData.readAddress(16);\n uint256 tokenId = assetData.readUint256(36);\n bytes memory receiverData = assetData.readBytesWithLength(100);\n IERC721Token(token).safeTransferFrom(\n address(this),\n to,\n tokenId,\n receiverData\n );\n }\n}\n",
- "2.0.0/forwarder/MixinExpectedResults.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../utils/LibBytes/LibBytes.sol\";\nimport \"../protocol/Exchange/libs/LibFillResults.sol\";\nimport \"../protocol/Exchange/libs/LibMath.sol\";\nimport \"../protocol/Exchange/libs/LibOrder.sol\";\nimport \"./MixinConstants.sol\";\n\ncontract MixinExpectedResults is\n LibMath,\n LibFillResults,\n MixinConstants\n{\n\n /// @dev Simulates the 0x Exchange fillOrder validation and calculations, without performing any state changes.\n /// @param order An Order struct containing order specifications.\n /// @param takerAssetFillAmount A number representing the amount of this order to fill.\n /// @return fillResults Amounts filled and fees paid by maker and taker.\n function calculateFillResults(\n LibOrder.Order memory order,\n uint256 takerAssetFillAmount\n )\n internal\n view\n returns (FillResults memory fillResults)\n {\n LibOrder.OrderInfo memory orderInfo = EXCHANGE.getOrderInfo(order);\n if (orderInfo.orderStatus != uint8(LibOrder.OrderStatus.FILLABLE)) {\n return fillResults;\n }\n uint256 remainingTakerAssetAmount = safeSub(order.takerAssetAmount, orderInfo.orderTakerAssetFilledAmount);\n uint256 takerAssetFilledAmount = min256(takerAssetFillAmount, remainingTakerAssetAmount);\n\n fillResults.takerAssetFilledAmount = takerAssetFilledAmount;\n fillResults.makerAssetFilledAmount = getPartialAmount(\n takerAssetFilledAmount,\n order.takerAssetAmount,\n order.makerAssetAmount\n );\n fillResults.makerFeePaid = getPartialAmount(\n takerAssetFilledAmount,\n order.takerAssetAmount,\n order.makerFee\n );\n fillResults.takerFeePaid = getPartialAmount(\n takerAssetFilledAmount,\n order.takerAssetAmount,\n order.takerFee\n );\n return fillResults;\n }\n\n /// @dev Calculates a FillResults total for selling takerAssetFillAmount over all orders. \n /// Including the fees required to be paid. \n /// @param orders An array of Order struct containing order specifications.\n /// @param takerAssetFillAmount A number representing the amount of this order to fill.\n /// @return totalFillResults Amounts filled and fees paid by maker and taker.\n function calculateMarketSellResults(\n LibOrder.Order[] memory orders,\n uint256 takerAssetFillAmount\n )\n internal\n view\n returns (FillResults memory totalFillResults)\n {\n for (uint256 i = 0; i < orders.length; i++) {\n uint256 remainingTakerAssetFillAmount = safeSub(takerAssetFillAmount, totalFillResults.takerAssetFilledAmount);\n FillResults memory singleFillResult = calculateFillResults(orders[i], remainingTakerAssetFillAmount);\n addFillResults(totalFillResults, singleFillResult);\n if (totalFillResults.takerAssetFilledAmount == takerAssetFillAmount) {\n break;\n }\n }\n return totalFillResults;\n }\n\n /// @dev Calculates a total FillResults for buying makerAssetFillAmount over all orders.\n /// Including the fees required to be paid. \n /// @param orders An array of Order struct containing order specifications.\n /// @param makerAssetFillAmount A number representing the amount of this order to fill.\n /// @return totalFillResults Amounts filled and fees paid by maker and taker.\n function calculateMarketBuyResults(\n LibOrder.Order[] memory orders,\n uint256 makerAssetFillAmount\n )\n public\n view\n returns (FillResults memory totalFillResults)\n {\n for (uint256 i = 0; i < orders.length; i++) {\n uint256 remainingMakerAssetFillAmount = safeSub(makerAssetFillAmount, totalFillResults.makerAssetFilledAmount);\n uint256 remainingTakerAssetFillAmount = getPartialAmount(\n orders[i].takerAssetAmount,\n orders[i].makerAssetAmount,\n remainingMakerAssetFillAmount\n );\n FillResults memory singleFillResult = calculateFillResults(orders[i], remainingTakerAssetFillAmount);\n addFillResults(totalFillResults, singleFillResult);\n if (totalFillResults.makerAssetFilledAmount == makerAssetFillAmount) {\n break;\n }\n }\n return totalFillResults;\n }\n\n /// @dev Calculates fill results for buyFeeTokens. This handles fees on buying ZRX\n /// so the end result is the expected amount of ZRX (not less after fees).\n /// @param orders An array of Order struct containing order specifications.\n /// @param zrxFillAmount A number representing the amount zrx to buy\n /// @return totalFillResults Expected fill result amounts from buying fees\n function calculateMarketBuyZrxResults(\n LibOrder.Order[] memory orders,\n uint256 zrxFillAmount\n )\n public\n view\n returns (FillResults memory totalFillResults)\n {\n for (uint256 i = 0; i < orders.length; i++) {\n uint256 remainingZrxFillAmount = safeSub(zrxFillAmount, totalFillResults.makerAssetFilledAmount);\n // Convert the remaining amount of makerToken to buy into remaining amount\n // of takerToken to sell, assuming entire amount can be sold in the current order\n uint256 remainingWethSellAmount = getPartialAmount(\n orders[i].takerAssetAmount,\n safeSub(orders[i].makerAssetAmount, orders[i].takerFee), // our exchange rate after fees \n remainingZrxFillAmount\n );\n FillResults memory singleFillResult = calculateFillResults(orders[i], safeAdd(remainingWethSellAmount, 1));\n\n singleFillResult.makerAssetFilledAmount = safeSub(singleFillResult.makerAssetFilledAmount, singleFillResult.takerFeePaid);\n addFillResults(totalFillResults, singleFillResult);\n // As we compensate for the rounding issue above have slightly more ZRX than the requested zrxFillAmount\n if (totalFillResults.makerAssetFilledAmount >= zrxFillAmount) {\n break;\n }\n }\n return totalFillResults;\n }\n}\n",
- "2.0.0/forwarder/MixinMarketBuyTokens.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../utils/LibBytes/LibBytes.sol\";\nimport \"./MixinWethFees.sol\";\nimport \"./MixinMarketBuyZrx.sol\";\nimport \"./MixinExpectedResults.sol\";\nimport \"./MixinERC20.sol\";\nimport \"./MixinERC721.sol\";\nimport \"./MixinConstants.sol\";\nimport \"../protocol/Exchange/libs/LibOrder.sol\";\n\ncontract MixinMarketBuyTokens is\n MixinConstants,\n MixinWethFees,\n MixinMarketBuyZrx,\n MixinExpectedResults,\n MixinERC20,\n MixinERC721\n{\n bytes4 public constant ERC20_DATA_ID = bytes4(keccak256(\"ERC20Token(address)\"));\n bytes4 public constant ERC721_DATA_ID = bytes4(keccak256(\"ERC721Token(address,uint256,bytes)\"));\n\n /// @dev Buys the exact amount of assets (ERC20 and ERC721), performing fee abstraction if required.\n /// All order assets must be of the same type. Deducts a proportional fee to fee recipient.\n /// This function is payable and will convert all incoming ETH into WETH and perform the trade on behalf of the caller.\n /// The caller is sent all assets from the fill of orders. This function will revert unless the requested amount of assets are purchased.\n /// Any excess ETH sent will be returned to the caller\n /// @param orders An array of Order struct containing order specifications.\n /// @param signatures An array of Proof that order has been created by maker.\n /// @param feeOrders An array of Order struct containing order specifications for fees.\n /// @param makerTokenFillAmount The amount of maker asset to buy.\n /// @param feeSignatures An array of Proof that order has been created by maker for the fee orders.\n /// @param feeProportion A proportion deducted off the ETH spent and sent to feeRecipient. The maximum value for this\n /// is 1000, aka 10%. Supports up to 2 decimal places. I.e 0.59% is 59.\n /// @param feeRecipient An address of the fee recipient whom receives feeProportion of ETH.\n /// @return FillResults amounts filled and fees paid by maker and taker.\n function marketBuyTokensWithEth(\n LibOrder.Order[] memory orders,\n bytes[] memory signatures,\n LibOrder.Order[] memory feeOrders,\n bytes[] memory feeSignatures,\n uint256 makerTokenFillAmount,\n uint16 feeProportion,\n address feeRecipient\n )\n payable\n public\n returns (FillResults memory totalFillResults)\n {\n uint256 takerEthAmount = msg.value;\n require(\n takerEthAmount > 0,\n \"VALUE_GREATER_THAN_ZERO\"\n );\n require(\n makerTokenFillAmount > 0,\n \"VALUE_GREATER_THAN_ZERO\"\n );\n bytes4 assetDataId = LibBytes.readBytes4(orders[0].makerAssetData, 0);\n require(\n assetDataId == ERC20_DATA_ID || assetDataId == ERC721_DATA_ID,\n \"UNSUPPORTED_TOKEN_PROXY\"\n );\n\n ETHER_TOKEN.deposit.value(takerEthAmount)();\n if (assetDataId == ERC20_DATA_ID) {\n totalFillResults = marketBuyERC20TokensInternal(\n orders,\n signatures,\n feeOrders,\n feeSignatures,\n makerTokenFillAmount\n );\n } else if (assetDataId == ERC721_DATA_ID) {\n totalFillResults = batchBuyERC721TokensInternal(\n orders,\n signatures,\n feeOrders,\n feeSignatures\n );\n }\n // Prevent accidental WETH owned by this contract and it being spent\n require(\n takerEthAmount >= totalFillResults.takerAssetFilledAmount,\n \"INVALID_MSG_VALUE\"\n );\n withdrawPayAndDeductEthFee(\n safeSub(takerEthAmount, totalFillResults.takerAssetFilledAmount),\n totalFillResults.takerAssetFilledAmount,\n feeProportion,\n feeRecipient\n );\n return totalFillResults;\n }\n\n /// @dev Buys an exact amount of an ERC20 token using WETH.\n /// @param orders Orders to fill. The maker asset is the ERC20 token to buy. The taker asset is WETH.\n /// @param signatures Proof that the orders were created by their respective makers.\n /// @param feeOrders to fill. The maker asset is ZRX and the taker asset is WETH.\n /// @param feeSignatures Proof that the feeOrders were created by their respective makers.\n /// @param makerTokenFillAmount Amount of the ERC20 token to buy.\n /// @return totalFillResults Aggregated fill results of buying the ERC20 and ZRX tokens.\n function marketBuyERC20TokensInternal(\n LibOrder.Order[] memory orders,\n bytes[] memory signatures,\n LibOrder.Order[] memory feeOrders,\n bytes[] memory feeSignatures,\n uint256 makerTokenFillAmount\n )\n private\n returns (FillResults memory totalFillResults)\n {\n // We read the maker token address to check if it is ZRX and later use it for transfer\n address makerTokenAddress = LibBytes.readAddress(orders[0].makerAssetData, 16);\n // We assume that asset being bought by taker is the same for each order.\n // Rather than passing this in as calldata, we copy the makerAssetData from the first order onto all later orders.\n orders[0].takerAssetData = WETH_ASSET_DATA;\n // We can short cut here for effeciency and use buyFeeTokensInternal if maker asset token is ZRX\n // this buys us exactly that amount taking into account the fees. This saves gas and calculates the rate correctly\n FillResults memory marketBuyResults;\n if (makerTokenAddress == address(ZRX_TOKEN)) {\n marketBuyResults = marketBuyZrxInternal(\n orders,\n signatures,\n makerTokenFillAmount\n );\n // When buying ZRX we round up which can result in a small margin excess\n require(\n marketBuyResults.makerAssetFilledAmount >= makerTokenFillAmount,\n \"UNACCEPTABLE_THRESHOLD\"\n );\n addFillResults(totalFillResults, marketBuyResults);\n require(\n isAcceptableThreshold(\n safeAdd(totalFillResults.makerAssetFilledAmount, totalFillResults.takerFeePaid), // Total ZRX\n totalFillResults.makerAssetFilledAmount // amount going to msg.sender\n ),\n \"UNACCEPTABLE_THRESHOLD\"\n );\n } else {\n FillResults memory calculatedMarketBuyResults = calculateMarketBuyResults(orders, makerTokenFillAmount);\n if (calculatedMarketBuyResults.takerFeePaid > 0) {\n // Fees are required for these orders. Buy enough ZRX to cover the future market buy\n FillResults memory zrxMarketBuyResults = marketBuyZrxInternal(\n feeOrders,\n feeSignatures,\n calculatedMarketBuyResults.takerFeePaid\n );\n totalFillResults.takerAssetFilledAmount = zrxMarketBuyResults.takerAssetFilledAmount;\n totalFillResults.takerFeePaid = zrxMarketBuyResults.takerFeePaid;\n }\n // Make our market buy of the requested tokens with the remaining balance\n marketBuyResults = EXCHANGE.marketBuyOrders(\n orders,\n makerTokenFillAmount,\n signatures\n );\n require(\n marketBuyResults.makerAssetFilledAmount == makerTokenFillAmount,\n \"UNACCEPTABLE_THRESHOLD\"\n );\n addFillResults(totalFillResults, marketBuyResults);\n require(\n isAcceptableThreshold(\n totalFillResults.takerAssetFilledAmount,\n marketBuyResults.takerAssetFilledAmount\n ),\n \"UNACCEPTABLE_THRESHOLD\"\n );\n }\n // Transfer all purchased tokens to msg.sender\n transferToken(\n makerTokenAddress,\n msg.sender,\n marketBuyResults.makerAssetFilledAmount\n );\n return totalFillResults;\n }\n\n /// @dev Buys an all of the ERC721 tokens in the orders.\n /// @param orders Orders to fill. The maker asset is the ERC721 token to buy. The taker asset is WETH.\n /// @param signatures Proof that the orders were created by their respective makers.\n /// @param feeOrders to fill. The maker asset is ZRX and the taker asset is WETH.\n /// @param feeSignatures Proof that the feeOrders were created by their respective makers.\n /// @return totalFillResults Aggregated fill results of buying the ERC721 tokens and ZRX tokens.\n function batchBuyERC721TokensInternal(\n LibOrder.Order[] memory orders,\n bytes[] memory signatures,\n LibOrder.Order[] memory feeOrders,\n bytes[] memory feeSignatures\n )\n private\n returns (FillResults memory totalFillResults)\n {\n uint256 totalZrxFeeAmount;\n uint256 ordersLength = orders.length;\n uint256[] memory takerAssetFillAmounts = new uint256[](ordersLength);\n for (uint256 i = 0; i < ordersLength; i++) {\n // Total up the fees\n totalZrxFeeAmount = safeAdd(totalZrxFeeAmount, orders[i].takerFee);\n // We assume that asset being bought by taker is the same for each order.\n // Rather than passing this in as calldata, we set the takerAssetData as WETH asset data\n orders[i].takerAssetData = WETH_ASSET_DATA;\n // Populate takerAssetFillAmounts for later batchFill\n takerAssetFillAmounts[i] = orders[i].takerAssetAmount;\n }\n if (totalZrxFeeAmount > 0) {\n // Fees are required for these orders. Buy enough ZRX to cover the future fill\n FillResults memory zrxMarketBuyResults = marketBuyZrxInternal(\n feeOrders,\n feeSignatures,\n totalZrxFeeAmount\n );\n totalFillResults.takerFeePaid = zrxMarketBuyResults.takerFeePaid;\n totalFillResults.takerAssetFilledAmount = zrxMarketBuyResults.takerAssetFilledAmount;\n }\n FillResults memory batchFillResults = EXCHANGE.batchFillOrKillOrders(\n orders,\n takerAssetFillAmounts,\n signatures\n );\n addFillResults(totalFillResults, batchFillResults);\n require(\n isAcceptableThreshold(\n totalFillResults.takerAssetFilledAmount,\n batchFillResults.takerAssetFilledAmount\n ),\n \"UNACCEPTABLE_THRESHOLD\"\n );\n // Transfer all of the tokens filled from the batchFill\n for (i = 0; i < ordersLength; i++) {\n transferERC721Token(\n orders[i].makerAssetData,\n msg.sender\n );\n }\n return totalFillResults;\n }\n}\n",
- "2.0.0/forwarder/MixinMarketBuyZrx.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../protocol/Exchange/Exchange.sol\";\nimport \"../protocol/Exchange/libs/LibFillResults.sol\";\nimport \"../protocol/Exchange/libs/LibOrder.sol\";\nimport \"../protocol/Exchange/libs/LibMath.sol\";\nimport \"./MixinConstants.sol\";\n\ncontract MixinMarketBuyZrx is\n LibMath,\n LibFillResults,\n MixinConstants\n{\n /// @dev Buys zrxBuyAmount of ZRX fee tokens, taking into account the fees on buying fee tokens. This will guarantee\n /// At least zrxBuyAmount of ZRX fee tokens are purchased (sometimes slightly over due to rounding issues).\n /// It is possible that a request to buy 200 ZRX fee tokens will require purchasing 202 ZRX tokens\n /// As 2 ZRX is required to purchase the 200 ZRX fee tokens. This guarantees at least 200 ZRX for future purchases.\n /// @param orders An array of Order struct containing order specifications for fees.\n /// @param signatures An array of Proof that order has been created by maker for the fee orders.\n /// @param zrxBuyAmount The number of requested ZRX fee tokens.\n /// @return totalFillResults Amounts filled and fees paid by maker and taker. makerTokenAmount is the zrx amount deducted of fees\n function marketBuyZrxInternal(\n LibOrder.Order[] memory orders,\n bytes[] memory signatures,\n uint256 zrxBuyAmount\n )\n internal\n returns (FillResults memory totalFillResults)\n {\n for (uint256 i = 0; i < orders.length; i++) {\n // All of these are ZRX/WETH, we can drop the respective assetData from callData\n orders[i].makerAssetData = ZRX_ASSET_DATA;\n orders[i].takerAssetData = WETH_ASSET_DATA;\n // Calculate the remaining amount of makerToken to buy\n uint256 remainingZrxBuyAmount = safeSub(zrxBuyAmount, totalFillResults.makerAssetFilledAmount);\n // Convert the remaining amount of makerToken to buy into remaining amount\n // of takerToken to sell, assuming entire amount can be sold in the current order\n uint256 remainingWethSellAmount = getPartialAmount(\n orders[i].takerAssetAmount,\n safeSub(orders[i].makerAssetAmount, orders[i].takerFee), // our exchange rate after fees \n remainingZrxBuyAmount\n );\n // Attempt to sell the remaining amount of takerToken\n // Round up the amount to ensure we don't under buy by a fractional amount\n FillResults memory singleFillResult = EXCHANGE.fillOrder(\n orders[i],\n safeAdd(remainingWethSellAmount, 1),\n signatures[i]\n );\n // We didn't buy the full amount when buying ZRX as some were taken for fees\n singleFillResult.makerAssetFilledAmount = safeSub(singleFillResult.makerAssetFilledAmount, singleFillResult.takerFeePaid);\n // Update amounts filled and fees paid by maker and taker\n addFillResults(totalFillResults, singleFillResult);\n // Stop execution if the entire amount of makerToken has been bought\n if (totalFillResults.makerAssetFilledAmount >= zrxBuyAmount) {\n break;\n }\n }\n return totalFillResults;\n }\n}\n",
- "2.0.0/forwarder/MixinMarketSellTokens.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../protocol/Exchange/libs/LibOrder.sol\";\nimport \"../utils/LibBytes/LibBytes.sol\";\nimport \"./MixinWethFees.sol\";\nimport \"./MixinExpectedResults.sol\";\nimport \"./MixinERC20.sol\";\nimport \"./MixinConstants.sol\";\nimport \"./MixinMarketBuyZrx.sol\";\n\ncontract MixinMarketSellTokens is\n MixinConstants,\n MixinWethFees,\n MixinMarketBuyZrx,\n MixinExpectedResults,\n MixinERC20\n{\n /// @dev Market sells ETH for ERC20 tokens, performing fee abstraction if required. This does not support ERC721 tokens. This function is payable\n /// and will convert all incoming ETH into WETH and perform the trade on behalf of the caller.\n /// This function allows for a deduction of a proportion of incoming ETH sent to the feeRecipient.\n /// The caller is sent all tokens from the operation.\n /// If the purchased token amount does not meet an acceptable threshold then this function reverts.\n /// @param orders An array of Order struct containing order specifications.\n /// @param signatures An array of Proof that order has been created by maker.\n /// @param feeOrders An array of Order struct containing order specifications for fees.\n /// @param feeSignatures An array of Proof that order has been created by maker for the fee orders.\n /// @param feeProportion A proportion deducted off the incoming ETH and sent to feeRecipient. The maximum value for this\n /// is 1000, aka 10%. Supports up to 2 decimal places. I.e 0.59% is 59.\n /// @param feeRecipient An address of the fee recipient whom receives feeProportion of ETH.\n /// @return FillResults amounts filled and fees paid by maker and taker.\n function marketSellEthForERC20(\n LibOrder.Order[] memory orders,\n bytes[] memory signatures,\n LibOrder.Order[] memory feeOrders,\n bytes[] memory feeSignatures,\n uint16 feeProportion,\n address feeRecipient\n )\n payable\n public\n returns (FillResults memory totalFillResults)\n {\n uint256 takerEthAmount = msg.value;\n require(\n takerEthAmount > 0,\n \"VALUE_GREATER_THAN_ZERO\"\n );\n // Deduct the fee from the total amount of ETH sent in\n uint256 ethFeeAmount = payEthFee(\n takerEthAmount,\n feeProportion,\n feeRecipient\n );\n uint256 wethSellAmount = safeSub(takerEthAmount, ethFeeAmount);\n\n // Deposit the remaining to be used for trading\n ETHER_TOKEN.deposit.value(wethSellAmount)();\n // Populate the known assetData, as it is always WETH the caller can provide null bytes to save gas\n // marketSellOrders fills the remaining\n address makerTokenAddress = LibBytes.readAddress(orders[0].makerAssetData, 16);\n orders[0].takerAssetData = WETH_ASSET_DATA;\n if (makerTokenAddress == address(ZRX_TOKEN)) {\n // If this is ZRX then we market sell from the orders, rather than a 2 step of buying ZRX fees from feeOrders\n // then buying ZRX from orders\n totalFillResults = marketSellEthForZRXInternal(\n orders,\n signatures,\n wethSellAmount\n );\n } else {\n totalFillResults = marketSellEthForERC20Internal(\n orders,\n signatures,\n feeOrders,\n feeSignatures,\n wethSellAmount\n );\n }\n // Prevent accidental WETH owned by this contract and it being spent\n require(\n takerEthAmount >= totalFillResults.takerAssetFilledAmount,\n \"INVALID_MSG_VALUE\"\n );\n // Ensure no WETH is left in this contract\n require(\n wethSellAmount == totalFillResults.takerAssetFilledAmount,\n \"UNACCEPTABLE_THRESHOLD\"\n );\n // Transfer all tokens to msg.sender\n transferToken(\n makerTokenAddress,\n msg.sender,\n totalFillResults.makerAssetFilledAmount\n );\n return totalFillResults;\n }\n\n /// @dev Market sells WETH for ERC20 tokens.\n /// @param orders An array of Order struct containing order specifications.\n /// @param signatures An array of Proof that order has been created by maker.\n /// @param feeOrders An array of Order struct containing order specifications for fees.\n /// @param feeSignatures An array of Proof that order has been created by maker for the fee orders.\n /// @param wethSellAmount The amount of WETH to sell.\n /// @return FillResults amounts filled and fees paid by maker and taker.\n function marketSellEthForERC20Internal(\n LibOrder.Order[] memory orders,\n bytes[] memory signatures,\n LibOrder.Order[] memory feeOrders,\n bytes[] memory feeSignatures,\n uint256 wethSellAmount\n )\n internal\n returns (FillResults memory totalFillResults)\n {\n uint256 remainingWethSellAmount = wethSellAmount;\n FillResults memory calculatedMarketSellResults = calculateMarketSellResults(orders, wethSellAmount);\n if (calculatedMarketSellResults.takerFeePaid > 0) {\n // Fees are required for these orders. Buy enough ZRX to cover the future market buy\n FillResults memory feeTokensResults = marketBuyZrxInternal(\n feeOrders,\n feeSignatures,\n calculatedMarketSellResults.takerFeePaid\n );\n // Ensure the token abstraction was fair if fees were proportionally too high, we fail\n require(\n isAcceptableThreshold(\n wethSellAmount,\n safeSub(wethSellAmount, feeTokensResults.takerAssetFilledAmount)\n ),\n \"UNACCEPTABLE_THRESHOLD\"\n );\n remainingWethSellAmount = safeSub(remainingWethSellAmount, feeTokensResults.takerAssetFilledAmount);\n totalFillResults.takerFeePaid = feeTokensResults.takerFeePaid;\n totalFillResults.takerAssetFilledAmount = feeTokensResults.takerAssetFilledAmount;\n }\n // Make our market sell to buy the requested tokens with the remaining balance\n FillResults memory requestedTokensResults = EXCHANGE.marketSellOrders(\n orders,\n remainingWethSellAmount,\n signatures\n );\n // Update our return FillResult with the market sell\n addFillResults(totalFillResults, requestedTokensResults);\n return totalFillResults;\n }\n\n /// @dev Market sells WETH for ZRX tokens.\n /// @param orders An array of Order struct containing order specifications.\n /// @param signatures An array of Proof that order has been created by maker.\n /// @param wethSellAmount The amount of WETH to sell.\n /// @return FillResults amounts filled and fees paid by maker and taker.\n function marketSellEthForZRXInternal(\n LibOrder.Order[] memory orders,\n bytes[] memory signatures,\n uint256 wethSellAmount\n )\n internal\n returns (FillResults memory totalFillResults)\n {\n // Make our market sell to buy the requested tokens with the remaining balance\n totalFillResults = EXCHANGE.marketSellOrders(\n orders,\n wethSellAmount,\n signatures\n );\n // Exchange does not special case ZRX in the makerAssetFilledAmount, if fees were deducted then using this amount\n // for future transfers is invalid.\n uint256 zrxAmountBought = safeSub(totalFillResults.makerAssetFilledAmount, totalFillResults.takerFeePaid);\n require(\n isAcceptableThreshold(totalFillResults.makerAssetFilledAmount, zrxAmountBought),\n \"UNACCEPTABLE_THRESHOLD\"\n );\n totalFillResults.makerAssetFilledAmount = zrxAmountBought;\n return totalFillResults;\n }\n\n}\n",
- "2.0.0/forwarder/MixinWethFees.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.24;\npragma experimental ABIEncoderV2;\n\nimport { WETH9 as EtherToken } from \"../tokens/WETH9/WETH9.sol\";\nimport \"../protocol/Exchange/libs/LibMath.sol\";\nimport \"./MixinConstants.sol\";\n\ncontract MixinWethFees is\n LibMath,\n MixinConstants\n{\n\n uint16 constant public PERCENTAGE_DENOMINATOR = 10000; // 9800 == 98%, 10000 == 100%\n uint16 constant public MAX_FEE = 1000; // 10%\n uint16 constant public ALLOWABLE_EXCHANGE_PERCENTAGE = 9500; // 95%\n\n /// @dev Pays the feeRecipient feeProportion of the total takerEthAmount, denominated in ETH\n /// @param takerEthAmount The total amount that was transacted in WETH, fees are calculated from this value.\n /// @param feeProportion The proportion of fees\n /// @param feeRecipient The recipient of the fees\n /// @return ethFeeAmount Amount of ETH paid to feeRecipient as fee.\n function payEthFee(\n uint256 takerEthAmount,\n uint16 feeProportion,\n address feeRecipient\n )\n internal\n returns (uint256 ethFeeAmount)\n {\n if (feeProportion > 0 && feeRecipient != address(0)) {\n require(\n feeProportion <= MAX_FEE,\n \"FEE_PROPORTION_TOO_LARGE\"\n );\n // 1.5% is 150, allowing for 2 decimal precision, i.e 0.05% is 5\n ethFeeAmount = getPartialAmount(\n feeProportion,\n PERCENTAGE_DENOMINATOR,\n takerEthAmount\n );\n feeRecipient.transfer(ethFeeAmount);\n }\n return ethFeeAmount;\n }\n\n /// @dev Withdraws the remaining WETH, deduct and pay fees from this amount based on the takerTokenAmount to the feeRecipient.\n /// If a user overpaid ETH initially, the fees are calculated from the amount traded and deducted from withdrawAmount.\n /// Any remaining ETH is sent back to the user.\n /// @param ethWithdrawAmount The amount to withdraw from the WETH contract.\n /// @param wethAmountSold The total amount that was transacted in WETH, fees are calculated from this value.\n /// @param feeProportion The proportion of fees\n /// @param feeRecipient The recipient of the fees\n function withdrawPayAndDeductEthFee(\n uint256 ethWithdrawAmount,\n uint256 wethAmountSold,\n uint16 feeProportion,\n address feeRecipient\n )\n internal\n {\n // Return all of the excess WETH if any after deducting fees on the amount\n if (ethWithdrawAmount > 0) {\n ETHER_TOKEN.withdraw(ethWithdrawAmount);\n // Fees proportional to the amount traded\n uint256 ethFeeAmount = payEthFee(\n wethAmountSold,\n feeProportion,\n feeRecipient\n );\n uint256 unspentEthAmount = safeSub(ethWithdrawAmount, ethFeeAmount);\n if (unspentEthAmount > 0) {\n msg.sender.transfer(unspentEthAmount);\n }\n }\n }\n\n /// @dev Checks whether the amount of tokens sold against the amount of tokens requested\n /// is within a certain threshold. This ensures the caller gets a fair deal when\n /// performing any token fee abstraction. Threshold is 95%. If fee abstraction costs more than\n /// 5% of the total transaction, we return false.\n /// @param requestedSellAmount The amount the user requested, or sent in to a payable function\n /// @param tokenAmountSold The amount of the token that was sold after fee abstraction\n /// @return bool of whether this is within an acceptable threshold\n function isAcceptableThreshold(uint256 requestedSellAmount, uint256 tokenAmountSold)\n internal\n pure\n returns (bool)\n {\n uint256 acceptableSellAmount = getPartialAmount(\n ALLOWABLE_EXCHANGE_PERCENTAGE,\n PERCENTAGE_DENOMINATOR,\n requestedSellAmount\n );\n return tokenAmountSold >= acceptableSellAmount;\n }\n}\n",
- "2.0.0/protocol/AssetProxy/interfaces/IAssetProxy.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"./IAuthorizable.sol\";\n\ncontract IAssetProxy is\n IAuthorizable\n{\n\n /// @dev Transfers assets. Either succeeds or throws.\n /// @param assetData Byte array encoded for the respective asset proxy.\n /// @param from Address to transfer asset from.\n /// @param to Address to transfer asset to.\n /// @param amount Amount of asset to transfer.\n function transferFrom(\n bytes assetData,\n address from,\n address to,\n uint256 amount\n )\n external;\n \n /// @dev Gets the proxy id associated with the proxy address.\n /// @return Proxy id.\n function getProxyId()\n external\n pure\n returns (bytes4);\n}\n",
- "2.0.0/protocol/AssetProxy/interfaces/IAuthorizable.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../../../utils/Ownable/IOwnable.sol\";\n\ncontract IAuthorizable is\n IOwnable\n{\n\n /// @dev Gets all authorized addresses.\n /// @return Array of authorized addresses.\n function getAuthorizedAddresses()\n external\n view\n returns (address[]);\n\n /// @dev Authorizes an address.\n /// @param target Address to authorize.\n function addAuthorizedAddress(address target)\n external;\n\n /// @dev Removes authorizion of an address.\n /// @param target Address to remove authorization from.\n function removeAuthorizedAddress(address target)\n external;\n\n /// @dev Removes authorizion of an address.\n /// @param target Address to remove authorization from.\n /// @param index Index of target in authorities array.\n function removeAuthorizedAddressAtIndex(\n address target,\n uint256 index\n )\n external;\n}\n",
- "2.0.0/protocol/Exchange/Exchange.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"./libs/LibConstants.sol\";\nimport \"./MixinExchangeCore.sol\";\nimport \"./MixinSignatureValidator.sol\";\nimport \"./MixinWrapperFunctions.sol\";\nimport \"./MixinAssetProxyDispatcher.sol\";\nimport \"./MixinTransactions.sol\";\nimport \"./MixinMatchOrders.sol\";\n\ncontract Exchange is\n MixinExchangeCore,\n MixinMatchOrders,\n MixinSignatureValidator,\n MixinTransactions,\n MixinAssetProxyDispatcher,\n MixinWrapperFunctions\n{\n\n string constant public VERSION = \"2.0.1-alpha\";\n\n // Mixins are instantiated in the order they are inherited\n constructor (bytes memory _zrxAssetData)\n public\n LibConstants(_zrxAssetData) // @TODO: Remove when we deploy.\n MixinExchangeCore()\n MixinMatchOrders()\n MixinSignatureValidator()\n MixinTransactions()\n MixinAssetProxyDispatcher()\n MixinWrapperFunctions()\n {}\n}\n",
- "2.0.0/protocol/Exchange/MixinAssetProxyDispatcher.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.24;\n\nimport \"../../utils/Ownable/Ownable.sol\";\nimport \"../../utils/LibBytes/LibBytes.sol\";\nimport \"./mixins/MAssetProxyDispatcher.sol\";\nimport \"../AssetProxy/interfaces/IAssetProxy.sol\";\n\ncontract MixinAssetProxyDispatcher is\n Ownable,\n MAssetProxyDispatcher\n{\n using LibBytes for bytes;\n \n // Mapping from Asset Proxy Id's to their respective Asset Proxy\n mapping (bytes4 => IAssetProxy) public assetProxies;\n\n /// @dev Registers an asset proxy to its asset proxy id.\n /// Once an asset proxy is registered, it cannot be unregistered.\n /// @param assetProxy Address of new asset proxy to register.\n function registerAssetProxy(address assetProxy)\n external\n onlyOwner\n {\n IAssetProxy assetProxyContract = IAssetProxy(assetProxy);\n\n // Ensure that no asset proxy exists with current id.\n bytes4 assetProxyId = assetProxyContract.getProxyId();\n address currentAssetProxy = assetProxies[assetProxyId];\n require(\n currentAssetProxy == address(0),\n \"ASSET_PROXY_ALREADY_EXISTS\"\n );\n\n // Add asset proxy and log registration.\n assetProxies[assetProxyId] = assetProxyContract;\n emit AssetProxyRegistered(\n assetProxyId,\n assetProxy\n );\n }\n\n /// @dev Gets an asset proxy.\n /// @param assetProxyId Id of the asset proxy.\n /// @return The asset proxy registered to assetProxyId. Returns 0x0 if no proxy is registered.\n function getAssetProxy(bytes4 assetProxyId)\n external\n view\n returns (address)\n {\n return assetProxies[assetProxyId];\n }\n\n /// @dev Forwards arguments to assetProxy and calls `transferFrom`. Either succeeds or throws.\n /// @param assetData Byte array encoded for the asset.\n /// @param from Address to transfer token from.\n /// @param to Address to transfer token to.\n /// @param amount Amount of token to transfer.\n function dispatchTransferFrom(\n bytes memory assetData,\n address from,\n address to,\n uint256 amount\n )\n internal\n {\n // Do nothing if no amount should be transferred.\n if (amount > 0) {\n // Ensure assetData length is valid\n require(\n assetData.length > 3,\n \"LENGTH_GREATER_THAN_3_REQUIRED\"\n );\n \n // Lookup assetProxy\n bytes4 assetProxyId;\n assembly {\n assetProxyId := and(mload(\n add(assetData, 32)),\n 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000\n )\n }\n address assetProxy = assetProxies[assetProxyId];\n\n // Ensure that assetProxy exists\n require(\n assetProxy != address(0),\n \"ASSET_PROXY_DOES_NOT_EXIST\"\n );\n \n // We construct calldata for the `assetProxy.transferFrom` ABI.\n // The layout of this calldata is in the table below.\n // \n // | Area | Offset | Length | Contents |\n // | -------- |--------|---------|-------------------------------------------- |\n // | Header | 0 | 4 | function selector |\n // | Params | | 4 * 32 | function parameters: |\n // | | 4 | | 1. offset to assetData (*) |\n // | | 36 | | 2. from |\n // | | 68 | | 3. to |\n // | | 100 | | 4. amount |\n // | Data | | | assetData: |\n // | | 132 | 32 | assetData Length |\n // | | 164 | ** | assetData Contents |\n\n assembly {\n /////// Setup State ///////\n // `cdStart` is the start of the calldata for `assetProxy.transferFrom` (equal to free memory ptr).\n let cdStart := mload(64)\n // `dataAreaLength` is the total number of words needed to store `assetData`\n // As-per the ABI spec, this value is padded up to the nearest multiple of 32,\n // and includes 32-bytes for length.\n let dataAreaLength := and(add(mload(assetData), 63), 0xFFFFFFFFFFFE0)\n // `cdEnd` is the end of the calldata for `assetProxy.transferFrom`.\n let cdEnd := add(cdStart, add(132, dataAreaLength))\n\n \n /////// Setup Header Area ///////\n // This area holds the 4-byte `transferFromSelector`.\n // bytes4(keccak256(\"transferFrom(bytes,address,address,uint256)\")) = 0xa85e59e4\n mstore(cdStart, 0xa85e59e400000000000000000000000000000000000000000000000000000000)\n \n /////// Setup Params Area ///////\n // Each parameter is padded to 32-bytes. The entire Params Area is 128 bytes.\n // Notes:\n // 1. The offset to `assetData` is the length of the Params Area (128 bytes).\n // 2. A 20-byte mask is applied to addresses to zero-out the unused bytes.\n mstore(add(cdStart, 4), 128)\n mstore(add(cdStart, 36), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\n mstore(add(cdStart, 68), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\n mstore(add(cdStart, 100), amount)\n \n /////// Setup Data Area ///////\n // This area holds `assetData`.\n let dataArea := add(cdStart, 132)\n for {} lt(dataArea, cdEnd) {} {\n mstore(dataArea, mload(assetData))\n dataArea := add(dataArea, 32)\n assetData := add(assetData, 32)\n }\n\n /////// Call `assetProxy.transferFrom` using the constructed calldata ///////\n let success := call(\n gas, // forward all gas\n assetProxy, // call address of asset proxy\n 0, // don't send any ETH\n cdStart, // pointer to start of input\n sub(cdEnd, cdStart), // length of input \n cdStart, // write output over input\n 512 // reserve 512 bytes for output\n )\n if iszero(success) {\n revert(cdStart, returndatasize())\n }\n }\n }\n }\n}\n",
- "2.0.0/protocol/Exchange/MixinExchangeCore.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"./libs/LibConstants.sol\";\nimport \"./libs/LibFillResults.sol\";\nimport \"./libs/LibOrder.sol\";\nimport \"./libs/LibMath.sol\";\nimport \"./mixins/MExchangeCore.sol\";\nimport \"./mixins/MSignatureValidator.sol\";\nimport \"./mixins/MTransactions.sol\";\nimport \"./mixins/MAssetProxyDispatcher.sol\";\n\ncontract MixinExchangeCore is\n LibConstants,\n LibMath,\n LibOrder,\n LibFillResults,\n MAssetProxyDispatcher,\n MExchangeCore,\n MSignatureValidator,\n MTransactions\n{\n // Mapping of orderHash => amount of takerAsset already bought by maker\n mapping (bytes32 => uint256) public filled;\n\n // Mapping of orderHash => cancelled\n mapping (bytes32 => bool) public cancelled;\n\n // Mapping of makerAddress => senderAddress => lowest salt an order can have in order to be fillable\n // Orders with specified senderAddress and with a salt less than their epoch to are considered cancelled\n mapping (address => mapping (address => uint256)) public orderEpoch;\n\n ////// Core exchange functions //////\n\n /// @dev Cancels all orders created by makerAddress with a salt less than or equal to the targetOrderEpoch\n /// and senderAddress equal to msg.sender (or null address if msg.sender == makerAddress).\n /// @param targetOrderEpoch Orders created with a salt less or equal to this value will be cancelled.\n function cancelOrdersUpTo(uint256 targetOrderEpoch)\n external\n {\n address makerAddress = getCurrentContextAddress();\n // If this function is called via `executeTransaction`, we only update the orderEpoch for the makerAddress/msg.sender combination.\n // This allows external filter contracts to add rules to how orders are cancelled via this function.\n address senderAddress = makerAddress == msg.sender ? address(0) : msg.sender;\n\n // orderEpoch is initialized to 0, so to cancelUpTo we need salt + 1\n uint256 newOrderEpoch = targetOrderEpoch + 1; \n uint256 oldOrderEpoch = orderEpoch[makerAddress][senderAddress];\n\n // Ensure orderEpoch is monotonically increasing\n require(\n newOrderEpoch > oldOrderEpoch, \n \"INVALID_NEW_ORDER_EPOCH\"\n );\n\n // Update orderEpoch\n orderEpoch[makerAddress][senderAddress] = newOrderEpoch;\n emit CancelUpTo(makerAddress, senderAddress, newOrderEpoch);\n }\n\n /// @dev Fills the input order.\n /// @param order Order struct containing order specifications.\n /// @param takerAssetFillAmount Desired amount of takerAsset to sell.\n /// @param signature Proof that order has been created by maker.\n /// @return Amounts filled and fees paid by maker and taker.\n function fillOrder(\n Order memory order,\n uint256 takerAssetFillAmount,\n bytes memory signature\n )\n public\n returns (FillResults memory fillResults)\n {\n // Fetch order info\n OrderInfo memory orderInfo = getOrderInfo(order);\n\n // Fetch taker address\n address takerAddress = getCurrentContextAddress();\n\n // Get amount of takerAsset to fill\n uint256 remainingTakerAssetAmount = safeSub(order.takerAssetAmount, orderInfo.orderTakerAssetFilledAmount);\n uint256 takerAssetFilledAmount = min256(takerAssetFillAmount, remainingTakerAssetAmount);\n\n // Validate context\n assertValidFill(\n order,\n orderInfo,\n takerAddress,\n takerAssetFillAmount,\n takerAssetFilledAmount,\n signature\n );\n\n // Compute proportional fill amounts\n fillResults = calculateFillResults(order, takerAssetFilledAmount);\n\n // Update exchange internal state\n updateFilledState(\n order,\n takerAddress,\n orderInfo.orderHash,\n orderInfo.orderTakerAssetFilledAmount,\n fillResults\n );\n \n // Settle order\n settleOrder(order, takerAddress, fillResults);\n\n return fillResults;\n }\n\n /// @dev After calling, the order can not be filled anymore.\n /// Throws if order is invalid or sender does not have permission to cancel.\n /// @param order Order to cancel. Order must be OrderStatus.FILLABLE.\n function cancelOrder(Order memory order)\n public\n {\n // Fetch current order status\n OrderInfo memory orderInfo = getOrderInfo(order);\n\n // Validate context\n assertValidCancel(order, orderInfo);\n\n // Perform cancel\n updateCancelledState(order, orderInfo.orderHash);\n }\n\n /// @dev Gets information about an order: status, hash, and amount filled.\n /// @param order Order to gather information on.\n /// @return OrderInfo Information about the order and its state.\n /// See LibOrder.OrderInfo for a complete description.\n function getOrderInfo(Order memory order)\n public\n view\n returns (OrderInfo memory orderInfo)\n {\n // Compute the order hash\n orderInfo.orderHash = getOrderHash(order);\n\n // If order.makerAssetAmount is zero, we also reject the order.\n // While the Exchange contract handles them correctly, they create\n // edge cases in the supporting infrastructure because they have\n // an 'infinite' price when computed by a simple division.\n if (order.makerAssetAmount == 0) {\n orderInfo.orderStatus = uint8(OrderStatus.INVALID_MAKER_ASSET_AMOUNT);\n return orderInfo;\n }\n\n // If order.takerAssetAmount is zero, then the order will always\n // be considered filled because 0 == takerAssetAmount == orderTakerAssetFilledAmount\n // Instead of distinguishing between unfilled and filled zero taker\n // amount orders, we choose not to support them.\n if (order.takerAssetAmount == 0) {\n orderInfo.orderStatus = uint8(OrderStatus.INVALID_TAKER_ASSET_AMOUNT);\n return orderInfo;\n }\n\n // Validate order expiration\n if (block.timestamp >= order.expirationTimeSeconds) {\n orderInfo.orderStatus = uint8(OrderStatus.EXPIRED);\n return orderInfo;\n }\n\n // Check if order has been cancelled\n if (cancelled[orderInfo.orderHash]) {\n orderInfo.orderStatus = uint8(OrderStatus.CANCELLED);\n return orderInfo;\n }\n if (orderEpoch[order.makerAddress][order.senderAddress] > order.salt) {\n orderInfo.orderStatus = uint8(OrderStatus.CANCELLED);\n return orderInfo;\n }\n\n // Fetch filled amount and validate order availability\n orderInfo.orderTakerAssetFilledAmount = filled[orderInfo.orderHash];\n if (orderInfo.orderTakerAssetFilledAmount >= order.takerAssetAmount) {\n orderInfo.orderStatus = uint8(OrderStatus.FULLY_FILLED);\n return orderInfo;\n }\n\n // All other statuses are ruled out: order is Fillable\n orderInfo.orderStatus = uint8(OrderStatus.FILLABLE);\n return orderInfo;\n }\n\n /// @dev Updates state with results of a fill order.\n /// @param order that was filled.\n /// @param takerAddress Address of taker who filled the order.\n /// @param orderTakerAssetFilledAmount Amount of order already filled.\n /// @return fillResults Amounts filled and fees paid by maker and taker.\n function updateFilledState(\n Order memory order,\n address takerAddress,\n bytes32 orderHash,\n uint256 orderTakerAssetFilledAmount,\n FillResults memory fillResults\n )\n internal\n {\n // Update state\n filled[orderHash] = safeAdd(orderTakerAssetFilledAmount, fillResults.takerAssetFilledAmount);\n\n // Log order\n emit Fill(\n order.makerAddress,\n order.feeRecipientAddress,\n takerAddress,\n msg.sender,\n fillResults.makerAssetFilledAmount,\n fillResults.takerAssetFilledAmount,\n fillResults.makerFeePaid,\n fillResults.takerFeePaid,\n orderHash,\n order.makerAssetData,\n order.takerAssetData\n );\n }\n\n /// @dev Updates state with results of cancelling an order.\n /// State is only updated if the order is currently fillable.\n /// Otherwise, updating state would have no effect.\n /// @param order that was cancelled.\n /// @param orderHash Hash of order that was cancelled.\n function updateCancelledState(\n Order memory order,\n bytes32 orderHash\n )\n internal\n {\n // Perform cancel\n cancelled[orderHash] = true;\n\n // Log cancel\n emit Cancel(\n order.makerAddress,\n order.feeRecipientAddress,\n msg.sender,\n orderHash,\n order.makerAssetData,\n order.takerAssetData\n );\n }\n\n /// @dev Validates context for fillOrder. Succeeds or throws.\n /// @param order to be filled.\n /// @param orderInfo OrderStatus, orderHash, and amount already filled of order.\n /// @param takerAddress Address of order taker.\n /// @param takerAssetFillAmount Desired amount of order to fill by taker.\n /// @param takerAssetFilledAmount Amount of takerAsset that will be filled.\n /// @param signature Proof that the orders was created by its maker.\n function assertValidFill(\n Order memory order,\n OrderInfo memory orderInfo,\n address takerAddress,\n uint256 takerAssetFillAmount,\n uint256 takerAssetFilledAmount,\n bytes memory signature\n )\n internal\n view\n {\n // An order can only be filled if its status is FILLABLE.\n require(\n orderInfo.orderStatus == uint8(OrderStatus.FILLABLE),\n \"ORDER_UNFILLABLE\"\n );\n\n // Revert if fill amount is invalid\n require(\n takerAssetFillAmount != 0,\n \"INVALID_TAKER_AMOUNT\"\n );\n\n // Validate sender is allowed to fill this order\n if (order.senderAddress != address(0)) {\n require(\n order.senderAddress == msg.sender,\n \"INVALID_SENDER\"\n );\n }\n\n // Validate taker is allowed to fill this order\n if (order.takerAddress != address(0)) {\n require(\n order.takerAddress == takerAddress,\n \"INVALID_TAKER\"\n );\n }\n\n // Validate Maker signature (check only if first time seen)\n if (orderInfo.orderTakerAssetFilledAmount == 0) {\n require(\n isValidSignature(\n orderInfo.orderHash,\n order.makerAddress,\n signature\n ),\n \"INVALID_ORDER_SIGNATURE\"\n );\n }\n\n // Validate fill order rounding\n require(\n !isRoundingError(\n takerAssetFilledAmount,\n order.takerAssetAmount,\n order.makerAssetAmount\n ),\n \"ROUNDING_ERROR\"\n );\n }\n\n /// @dev Validates context for cancelOrder. Succeeds or throws.\n /// @param order to be cancelled.\n /// @param orderInfo OrderStatus, orderHash, and amount already filled of order.\n function assertValidCancel(\n Order memory order,\n OrderInfo memory orderInfo\n )\n internal\n view\n {\n // Ensure order is valid\n // An order can only be cancelled if its status is FILLABLE.\n require(\n orderInfo.orderStatus == uint8(OrderStatus.FILLABLE),\n \"ORDER_UNFILLABLE\"\n );\n\n // Validate sender is allowed to cancel this order\n if (order.senderAddress != address(0)) {\n require(\n order.senderAddress == msg.sender,\n \"INVALID_SENDER\"\n );\n }\n\n // Validate transaction signed by maker\n address makerAddress = getCurrentContextAddress();\n require(\n order.makerAddress == makerAddress,\n \"INVALID_MAKER\"\n );\n }\n\n /// @dev Calculates amounts filled and fees paid by maker and taker.\n /// @param order to be filled.\n /// @param takerAssetFilledAmount Amount of takerAsset that will be filled.\n /// @return fillResults Amounts filled and fees paid by maker and taker.\n function calculateFillResults(\n Order memory order,\n uint256 takerAssetFilledAmount\n )\n internal\n pure\n returns (FillResults memory fillResults)\n {\n // Compute proportional transfer amounts\n // TODO: All three are multiplied by the same fraction. This can\n // potentially be optimized.\n fillResults.takerAssetFilledAmount = takerAssetFilledAmount;\n fillResults.makerAssetFilledAmount = getPartialAmount(\n fillResults.takerAssetFilledAmount,\n order.takerAssetAmount,\n order.makerAssetAmount\n );\n fillResults.makerFeePaid = getPartialAmount(\n fillResults.takerAssetFilledAmount,\n order.takerAssetAmount,\n order.makerFee\n );\n fillResults.takerFeePaid = getPartialAmount(\n fillResults.takerAssetFilledAmount,\n order.takerAssetAmount,\n order.takerFee\n );\n\n return fillResults;\n }\n\n /// @dev Settles an order by transferring assets between counterparties.\n /// @param order Order struct containing order specifications.\n /// @param takerAddress Address selling takerAsset and buying makerAsset.\n /// @param fillResults Amounts to be filled and fees paid by maker and taker.\n function settleOrder(\n LibOrder.Order memory order,\n address takerAddress,\n LibFillResults.FillResults memory fillResults\n )\n private\n {\n bytes memory zrxAssetData = ZRX_ASSET_DATA;\n dispatchTransferFrom(\n order.makerAssetData,\n order.makerAddress,\n takerAddress,\n fillResults.makerAssetFilledAmount\n );\n dispatchTransferFrom(\n order.takerAssetData,\n takerAddress,\n order.makerAddress,\n fillResults.takerAssetFilledAmount\n );\n dispatchTransferFrom(\n zrxAssetData,\n order.makerAddress,\n order.feeRecipientAddress,\n fillResults.makerFeePaid\n );\n dispatchTransferFrom(\n zrxAssetData,\n takerAddress,\n order.feeRecipientAddress,\n fillResults.takerFeePaid\n );\n }\n}\n",
- "2.0.0/protocol/Exchange/MixinMatchOrders.sol": "/*\n Copyright 2018 ZeroEx Intl.\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 http://www.apache.org/licenses/LICENSE-2.0\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\npragma solidity ^0.4.24;\npragma experimental ABIEncoderV2;\n\nimport \"./libs/LibConstants.sol\";\nimport \"./libs/LibMath.sol\";\nimport \"./libs/LibOrder.sol\";\nimport \"./libs/LibFillResults.sol\";\nimport \"./mixins/MExchangeCore.sol\";\nimport \"./mixins/MMatchOrders.sol\";\nimport \"./mixins/MTransactions.sol\";\nimport \"./mixins/MAssetProxyDispatcher.sol\";\n\ncontract MixinMatchOrders is\n LibConstants,\n LibMath,\n MAssetProxyDispatcher,\n MExchangeCore,\n MMatchOrders,\n MTransactions\n{\n /// @dev Match two complementary orders that have a profitable spread.\n /// Each order is filled at their respective price point. However, the calculations are\n /// carried out as though the orders are both being filled at the right order's price point.\n /// The profit made by the left order goes to the taker (who matched the two orders).\n /// @param leftOrder First order to match.\n /// @param rightOrder Second order to match.\n /// @param leftSignature Proof that order was created by the left maker.\n /// @param rightSignature Proof that order was created by the right maker.\n /// @return matchedFillResults Amounts filled and fees paid by maker and taker of matched orders.\n /// TODO: Make this function external once supported by Solidity (See Solidity Issues #3199, #1603)\n function matchOrders(\n LibOrder.Order memory leftOrder,\n LibOrder.Order memory rightOrder,\n bytes memory leftSignature,\n bytes memory rightSignature\n )\n public\n returns (LibFillResults.MatchedFillResults memory matchedFillResults)\n {\n // We assume that rightOrder.takerAssetData == leftOrder.makerAssetData and rightOrder.makerAssetData == leftOrder.takerAssetData.\n // If this assumption isn't true, the match will fail at signature validation.\n rightOrder.makerAssetData = leftOrder.takerAssetData;\n rightOrder.takerAssetData = leftOrder.makerAssetData;\n\n // Get left & right order info\n LibOrder.OrderInfo memory leftOrderInfo = getOrderInfo(leftOrder);\n LibOrder.OrderInfo memory rightOrderInfo = getOrderInfo(rightOrder);\n\n // Fetch taker address\n address takerAddress = getCurrentContextAddress();\n\n // Either our context is valid or we revert\n assertValidMatch(leftOrder, rightOrder);\n\n // Compute proportional fill amounts\n matchedFillResults = calculateMatchedFillResults(\n leftOrder,\n rightOrder,\n leftOrderInfo.orderTakerAssetFilledAmount,\n rightOrderInfo.orderTakerAssetFilledAmount\n );\n\n // Validate fill contexts\n assertValidFill(\n leftOrder,\n leftOrderInfo,\n takerAddress,\n matchedFillResults.left.takerAssetFilledAmount,\n matchedFillResults.left.takerAssetFilledAmount,\n leftSignature\n );\n assertValidFill(\n rightOrder,\n rightOrderInfo,\n takerAddress,\n matchedFillResults.right.takerAssetFilledAmount,\n matchedFillResults.right.takerAssetFilledAmount,\n rightSignature\n );\n\n // Update exchange state\n updateFilledState(\n leftOrder,\n takerAddress,\n leftOrderInfo.orderHash,\n leftOrderInfo.orderTakerAssetFilledAmount,\n matchedFillResults.left\n );\n updateFilledState(\n rightOrder,\n takerAddress,\n rightOrderInfo.orderHash,\n rightOrderInfo.orderTakerAssetFilledAmount,\n matchedFillResults.right\n );\n \n // Settle matched orders. Succeeds or throws.\n settleMatchedOrders(\n leftOrder,\n rightOrder,\n takerAddress,\n matchedFillResults\n );\n\n return matchedFillResults;\n }\n\n /// @dev Validates context for matchOrders. Succeeds or throws.\n /// @param leftOrder First order to match.\n /// @param rightOrder Second order to match.\n function assertValidMatch(\n LibOrder.Order memory leftOrder,\n LibOrder.Order memory rightOrder\n )\n internal\n pure\n {\n // Make sure there is a profitable spread.\n // There is a profitable spread iff the cost per unit bought (OrderA.MakerAmount/OrderA.TakerAmount) for each order is greater\n // than the profit per unit sold of the matched order (OrderB.TakerAmount/OrderB.MakerAmount).\n // This is satisfied by the equations below:\n // <leftOrder.makerAssetAmount> / <leftOrder.takerAssetAmount> >= <rightOrder.takerAssetAmount> / <rightOrder.makerAssetAmount>\n // AND\n // <rightOrder.makerAssetAmount> / <rightOrder.takerAssetAmount> >= <leftOrder.takerAssetAmount> / <leftOrder.makerAssetAmount>\n // These equations can be combined to get the following:\n require(\n safeMul(leftOrder.makerAssetAmount, rightOrder.makerAssetAmount) >=\n safeMul(leftOrder.takerAssetAmount, rightOrder.takerAssetAmount),\n \"NEGATIVE_SPREAD_REQUIRED\"\n );\n }\n\n /// @dev Calculates fill amounts for the matched orders.\n /// Each order is filled at their respective price point. However, the calculations are\n /// carried out as though the orders are both being filled at the right order's price point.\n /// The profit made by the leftOrder order goes to the taker (who matched the two orders).\n /// @param leftOrder First order to match.\n /// @param rightOrder Second order to match.\n /// @param leftOrderTakerAssetFilledAmount Amount of left order already filled.\n /// @param rightOrderTakerAssetFilledAmount Amount of right order already filled.\n /// @param matchedFillResults Amounts to fill and fees to pay by maker and taker of matched orders.\n function calculateMatchedFillResults(\n LibOrder.Order memory leftOrder,\n LibOrder.Order memory rightOrder,\n uint256 leftOrderTakerAssetFilledAmount,\n uint256 rightOrderTakerAssetFilledAmount\n )\n internal\n pure\n returns (LibFillResults.MatchedFillResults memory matchedFillResults)\n {\n // We settle orders at the exchange rate of the right order.\n // The amount saved by the left maker goes to the taker.\n // Either the left or right order will be fully filled; possibly both.\n // The left order is fully filled iff the right order can sell more than left can buy.\n // That is: the amount required to fill the left order is less than or equal to\n // the amount we can spend from the right order:\n // <leftTakerAssetAmountRemaining> <= <rightTakerAssetAmountRemaining> * <rightMakerToTakerRatio>\n // <leftTakerAssetAmountRemaining> <= <rightTakerAssetAmountRemaining> * <rightOrder.makerAssetAmount> / <rightOrder.takerAssetAmount>\n // <leftTakerAssetAmountRemaining> * <rightOrder.takerAssetAmount> <= <rightTakerAssetAmountRemaining> * <rightOrder.makerAssetAmount>\n uint256 leftTakerAssetAmountRemaining = safeSub(leftOrder.takerAssetAmount, leftOrderTakerAssetFilledAmount);\n uint256 rightTakerAssetAmountRemaining = safeSub(rightOrder.takerAssetAmount, rightOrderTakerAssetFilledAmount);\n uint256 leftTakerAssetFilledAmount;\n uint256 rightTakerAssetFilledAmount;\n if (\n safeMul(leftTakerAssetAmountRemaining, rightOrder.takerAssetAmount) <=\n safeMul(rightTakerAssetAmountRemaining, rightOrder.makerAssetAmount)\n ) {\n // Left order will be fully filled: maximally fill left\n leftTakerAssetFilledAmount = leftTakerAssetAmountRemaining;\n\n // The right order receives an amount proportional to how much was spent.\n // TODO: Can we ensure rounding error is in the correct direction?\n rightTakerAssetFilledAmount = getPartialAmount(\n rightOrder.takerAssetAmount,\n rightOrder.makerAssetAmount,\n leftTakerAssetFilledAmount\n );\n } else {\n // Right order will be fully filled: maximally fill right\n rightTakerAssetFilledAmount = rightTakerAssetAmountRemaining;\n\n // The left order receives an amount proportional to how much was spent.\n // TODO: Can we ensure rounding error is in the correct direction?\n leftTakerAssetFilledAmount = getPartialAmount(\n rightOrder.makerAssetAmount,\n rightOrder.takerAssetAmount,\n rightTakerAssetFilledAmount\n );\n }\n\n // Calculate fill results for left order\n matchedFillResults.left = calculateFillResults(\n leftOrder,\n leftTakerAssetFilledAmount\n );\n\n // Calculate fill results for right order\n matchedFillResults.right = calculateFillResults(\n rightOrder,\n rightTakerAssetFilledAmount\n );\n\n // Calculate amount given to taker\n matchedFillResults.leftMakerAssetSpreadAmount = safeSub(\n matchedFillResults.left.makerAssetFilledAmount,\n matchedFillResults.right.takerAssetFilledAmount\n );\n\n // Return fill results\n return matchedFillResults;\n }\n\n /// @dev Settles matched order by transferring appropriate funds between order makers, taker, and fee recipient.\n /// @param leftOrder First matched order.\n /// @param rightOrder Second matched order.\n /// @param takerAddress Address that matched the orders. The taker receives the spread between orders as profit.\n /// @param matchedFillResults Struct holding amounts to transfer between makers, taker, and fee recipients.\n function settleMatchedOrders(\n LibOrder.Order memory leftOrder,\n LibOrder.Order memory rightOrder,\n address takerAddress,\n LibFillResults.MatchedFillResults memory matchedFillResults\n )\n private\n {\n bytes memory zrxAssetData = ZRX_ASSET_DATA;\n // Order makers and taker\n dispatchTransferFrom(\n leftOrder.makerAssetData,\n leftOrder.makerAddress,\n rightOrder.makerAddress,\n matchedFillResults.right.takerAssetFilledAmount\n );\n dispatchTransferFrom(\n rightOrder.makerAssetData,\n rightOrder.makerAddress,\n leftOrder.makerAddress,\n matchedFillResults.left.takerAssetFilledAmount\n );\n dispatchTransferFrom(\n leftOrder.makerAssetData,\n leftOrder.makerAddress,\n takerAddress,\n matchedFillResults.leftMakerAssetSpreadAmount\n );\n\n // Maker fees\n dispatchTransferFrom(\n zrxAssetData,\n leftOrder.makerAddress,\n leftOrder.feeRecipientAddress,\n matchedFillResults.left.makerFeePaid\n );\n dispatchTransferFrom(\n zrxAssetData,\n rightOrder.makerAddress,\n rightOrder.feeRecipientAddress,\n matchedFillResults.right.makerFeePaid\n );\n\n // Taker fees\n if (leftOrder.feeRecipientAddress == rightOrder.feeRecipientAddress) {\n dispatchTransferFrom(\n zrxAssetData,\n takerAddress,\n leftOrder.feeRecipientAddress,\n safeAdd(\n matchedFillResults.left.takerFeePaid,\n matchedFillResults.right.takerFeePaid\n )\n );\n } else {\n dispatchTransferFrom(\n zrxAssetData,\n takerAddress,\n leftOrder.feeRecipientAddress,\n matchedFillResults.left.takerFeePaid\n );\n dispatchTransferFrom(\n zrxAssetData,\n takerAddress,\n rightOrder.feeRecipientAddress,\n matchedFillResults.right.takerFeePaid\n );\n }\n }\n}\n",
- "2.0.0/protocol/Exchange/MixinSignatureValidator.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.24;\n\nimport \"../../utils/LibBytes/LibBytes.sol\";\nimport \"./mixins/MSignatureValidator.sol\";\nimport \"./mixins/MTransactions.sol\";\nimport \"./interfaces/IWallet.sol\";\nimport \"./interfaces/IValidator.sol\";\n\ncontract MixinSignatureValidator is\n MSignatureValidator,\n MTransactions\n{\n using LibBytes for bytes;\n \n // Mapping of hash => signer => signed\n mapping (bytes32 => mapping (address => bool)) public preSigned;\n\n // Mapping of signer => validator => approved\n mapping (address => mapping (address => bool)) public allowedValidators;\n\n /// @dev Approves a hash on-chain using any valid signature type.\n /// After presigning a hash, the preSign signature type will become valid for that hash and signer.\n /// @param signerAddress Address that should have signed the given hash.\n /// @param signature Proof that the hash has been signed by signer.\n function preSign(\n bytes32 hash,\n address signerAddress,\n bytes signature\n )\n external\n {\n require(\n isValidSignature(\n hash,\n signerAddress,\n signature\n ),\n \"INVALID_SIGNATURE\"\n );\n preSigned[hash][signerAddress] = true;\n }\n\n /// @dev Approves/unnapproves a Validator contract to verify signatures on signer's behalf.\n /// @param validatorAddress Address of Validator contract.\n /// @param approval Approval or disapproval of Validator contract.\n function setSignatureValidatorApproval(\n address validatorAddress,\n bool approval\n )\n external\n {\n address signerAddress = getCurrentContextAddress();\n allowedValidators[signerAddress][validatorAddress] = approval;\n emit SignatureValidatorApproval(\n signerAddress,\n validatorAddress,\n approval\n );\n }\n\n /// @dev Verifies that a hash has been signed by the given signer.\n /// @param hash Any 32 byte hash.\n /// @param signerAddress Address that should have signed the given hash.\n /// @param signature Proof that the hash has been signed by signer.\n /// @return True if the address recovered from the provided signature matches the input signer address.\n function isValidSignature(\n bytes32 hash,\n address signerAddress,\n bytes memory signature\n )\n public\n view\n returns (bool isValid)\n {\n // TODO: Domain separation: make hash depend on role. (Taker sig should not be valid as maker sig, etc.)\n require(\n signature.length > 0,\n \"LENGTH_GREATER_THAN_0_REQUIRED\"\n );\n\n // Ensure signature is supported\n uint8 signatureTypeRaw = uint8(signature.popLastByte());\n require(\n signatureTypeRaw < uint8(SignatureType.NSignatureTypes),\n \"SIGNATURE_UNSUPPORTED\"\n );\n\n // Pop last byte off of signature byte array.\n SignatureType signatureType = SignatureType(signatureTypeRaw);\n\n // Variables are not scoped in Solidity.\n uint8 v;\n bytes32 r;\n bytes32 s;\n address recovered;\n\n // Always illegal signature.\n // This is always an implicit option since a signer can create a\n // signature array with invalid type or length. We may as well make\n // it an explicit option. This aids testing and analysis. It is\n // also the initialization value for the enum type.\n if (signatureType == SignatureType.Illegal) {\n revert(\"SIGNATURE_ILLEGAL\");\n\n // Always invalid signature.\n // Like Illegal, this is always implicitly available and therefore\n // offered explicitly. It can be implicitly created by providing\n // a correctly formatted but incorrect signature.\n } else if (signatureType == SignatureType.Invalid) {\n require(\n signature.length == 0,\n \"LENGTH_0_REQUIRED\"\n );\n isValid = false;\n return isValid;\n\n // Signature using EIP712\n } else if (signatureType == SignatureType.EIP712) {\n require(\n signature.length == 65,\n \"LENGTH_65_REQUIRED\"\n );\n v = uint8(signature[0]);\n r = signature.readBytes32(1);\n s = signature.readBytes32(33);\n recovered = ecrecover(hash, v, r, s);\n isValid = signerAddress == recovered;\n return isValid;\n\n // Signed using web3.eth_sign\n } else if (signatureType == SignatureType.EthSign) {\n require(\n signature.length == 65,\n \"LENGTH_65_REQUIRED\"\n );\n v = uint8(signature[0]);\n r = signature.readBytes32(1);\n s = signature.readBytes32(33);\n recovered = ecrecover(\n keccak256(abi.encodePacked(\n \"\\x19Ethereum Signed Message:\\n32\",\n hash\n )),\n v,\n r,\n s\n );\n isValid = signerAddress == recovered;\n return isValid;\n\n // Implicitly signed by caller.\n // The signer has initiated the call. In the case of non-contract\n // accounts it means the transaction itself was signed.\n // Example: let's say for a particular operation three signatures\n // A, B and C are required. To submit the transaction, A and B can\n // give a signature to C, who can then submit the transaction using\n // `Caller` for his own signature. Or A and C can sign and B can\n // submit using `Caller`. Having `Caller` allows this flexibility.\n } else if (signatureType == SignatureType.Caller) {\n require(\n signature.length == 0,\n \"LENGTH_0_REQUIRED\"\n );\n isValid = signerAddress == msg.sender;\n return isValid;\n\n // Signature verified by wallet contract.\n // If used with an order, the maker of the order is the wallet contract.\n } else if (signatureType == SignatureType.Wallet) {\n isValid = IWallet(signerAddress).isValidSignature(hash, signature);\n return isValid;\n\n // Signature verified by validator contract.\n // If used with an order, the maker of the order can still be an EOA.\n // A signature using this type should be encoded as:\n // | Offset | Length | Contents |\n // | 0x00 | x | Signature to validate |\n // | 0x00 + x | 20 | Address of validator contract |\n // | 0x14 + x | 1 | Signature type is always \"\\x06\" |\n } else if (signatureType == SignatureType.Validator) {\n // Pop last 20 bytes off of signature byte array.\n\n address validatorAddress = signature.popLast20Bytes();\n \n // Ensure signer has approved validator.\n if (!allowedValidators[signerAddress][validatorAddress]) {\n return false;\n }\n isValid = IValidator(validatorAddress).isValidSignature(\n hash,\n signerAddress,\n signature\n );\n return isValid;\n\n // Signer signed hash previously using the preSign function.\n } else if (signatureType == SignatureType.PreSigned) {\n isValid = preSigned[hash][signerAddress];\n return isValid;\n\n // Signature from Trezor hardware wallet.\n // It differs from web3.eth_sign in the encoding of message length\n // (Bitcoin varint encoding vs ascii-decimal, the latter is not\n // self-terminating which leads to ambiguities).\n // See also:\n // https://en.bitcoin.it/wiki/Protocol_documentation#Variable_length_integer\n // https://github.com/trezor/trezor-mcu/blob/master/firmware/ethereum.c#L602\n // https://github.com/trezor/trezor-mcu/blob/master/firmware/crypto.c#L36\n } else if (signatureType == SignatureType.Trezor) {\n require(\n signature.length == 65,\n \"LENGTH_65_REQUIRED\"\n );\n v = uint8(signature[0]);\n r = signature.readBytes32(1);\n s = signature.readBytes32(33);\n recovered = ecrecover(\n keccak256(abi.encodePacked(\n \"\\x19Ethereum Signed Message:\\n\\x20\",\n hash\n )),\n v,\n r,\n s\n );\n isValid = signerAddress == recovered;\n return isValid;\n }\n\n // Anything else is illegal (We do not return false because\n // the signature may actually be valid, just not in a format\n // that we currently support. In this case returning false\n // may lead the caller to incorrectly believe that the\n // signature was invalid.)\n revert(\"SIGNATURE_UNSUPPORTED\");\n }\n}\n",
- "2.0.0/protocol/Exchange/MixinTransactions.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*/\npragma solidity ^0.4.24;\n\nimport \"./libs/LibExchangeErrors.sol\";\nimport \"./mixins/MSignatureValidator.sol\";\nimport \"./mixins/MTransactions.sol\";\nimport \"./libs/LibEIP712.sol\";\n\ncontract MixinTransactions is\n LibEIP712,\n MSignatureValidator,\n MTransactions\n{\n\n // Mapping of transaction hash => executed\n // This prevents transactions from being executed more than once.\n mapping (bytes32 => bool) public transactions;\n\n // Address of current transaction signer\n address public currentContextAddress;\n\n // Hash for the EIP712 ZeroEx Transaction Schema\n bytes32 constant EIP712_ZEROEX_TRANSACTION_SCHEMA_HASH = keccak256(abi.encodePacked(\n \"ZeroExTransaction(\",\n \"uint256 salt,\",\n \"address signerAddress,\",\n \"bytes data\",\n \")\"\n ));\n\n /// @dev Calculates EIP712 hash of the Transaction.\n /// @param salt Arbitrary number to ensure uniqueness of transaction hash.\n /// @param signerAddress Address of transaction signer.\n /// @param data AbiV2 encoded calldata.\n /// @return EIP712 hash of the Transaction.\n function hashZeroExTransaction(\n uint256 salt,\n address signerAddress,\n bytes memory data\n )\n internal\n pure\n returns (bytes32 result)\n {\n bytes32 schemaHash = EIP712_ZEROEX_TRANSACTION_SCHEMA_HASH;\n bytes32 dataHash = keccak256(data);\n // Assembly for more efficiently computing:\n // keccak256(abi.encode(\n // EIP712_ZEROEX_TRANSACTION_SCHEMA_HASH,\n // salt,\n // signerAddress,\n // keccak256(data)\n // ));\n assembly {\n let memPtr := mload(64)\n mstore(memPtr, schemaHash)\n mstore(add(memPtr, 32), salt)\n mstore(add(memPtr, 64), and(signerAddress, 0xffffffffffffffffffffffffffffffffffffffff))\n mstore(add(memPtr, 96), dataHash)\n result := keccak256(memPtr, 128)\n }\n\n return result;\n }\n\n /// @dev Executes an exchange method call in the context of signer.\n /// @param salt Arbitrary number to ensure uniqueness of transaction hash.\n /// @param signerAddress Address of transaction signer.\n /// @param data AbiV2 encoded calldata.\n /// @param signature Proof of signer transaction by signer.\n function executeTransaction(\n uint256 salt,\n address signerAddress,\n bytes data,\n bytes signature\n )\n external\n {\n // Prevent reentrancy\n require(\n currentContextAddress == address(0),\n \"REENTRANCY_ILLEGAL\"\n );\n\n bytes32 transactionHash = hashEIP712Message(hashZeroExTransaction(\n salt,\n signerAddress,\n data\n ));\n\n // Validate transaction has not been executed\n require(\n !transactions[transactionHash],\n \"INVALID_TX_HASH\"\n );\n\n // Transaction always valid if signer is sender of transaction\n if (signerAddress != msg.sender) {\n // Validate signature\n require(\n isValidSignature(\n transactionHash,\n signerAddress,\n signature\n ),\n \"INVALID_TX_SIGNATURE\"\n );\n\n // Set the current transaction signer\n currentContextAddress = signerAddress;\n }\n\n // Execute transaction\n transactions[transactionHash] = true;\n require(\n address(this).delegatecall(data),\n \"FAILED_EXECUTION\"\n );\n\n // Reset current transaction signer\n // TODO: Check if gas is paid when currentContextAddress is already 0.\n currentContextAddress = address(0);\n }\n\n /// @dev The current function will be called in the context of this address (either 0x transaction signer or `msg.sender`).\n /// If calling a fill function, this address will represent the taker.\n /// If calling a cancel function, this address will represent the maker.\n /// @return Signer of 0x transaction if entry point is `executeTransaction`.\n /// `msg.sender` if entry point is any other function.\n function getCurrentContextAddress()\n internal\n view\n returns (address)\n {\n address contextAddress = currentContextAddress == address(0) ? msg.sender : currentContextAddress;\n return contextAddress;\n }\n}\n",
- "2.0.0/protocol/Exchange/MixinWrapperFunctions.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"./libs/LibMath.sol\";\nimport \"./libs/LibOrder.sol\";\nimport \"./libs/LibFillResults.sol\";\nimport \"./mixins/MExchangeCore.sol\";\n\ncontract MixinWrapperFunctions is\n LibMath,\n LibFillResults,\n MExchangeCore\n{\n /// @dev Fills the input order. Reverts if exact takerAssetFillAmount not filled.\n /// @param order Order struct containing order specifications.\n /// @param takerAssetFillAmount Desired amount of takerAsset to sell.\n /// @param signature Proof that order has been created by maker.\n function fillOrKillOrder(\n LibOrder.Order memory order,\n uint256 takerAssetFillAmount,\n bytes memory signature\n )\n public\n returns (FillResults memory fillResults)\n {\n fillResults = fillOrder(\n order,\n takerAssetFillAmount,\n signature\n );\n require(\n fillResults.takerAssetFilledAmount == takerAssetFillAmount,\n \"COMPLETE_FILL_FAILED\"\n );\n return fillResults;\n }\n\n /// @dev Fills an order with specified parameters and ECDSA signature.\n /// Returns false if the transaction would otherwise revert.\n /// @param order Order struct containing order specifications.\n /// @param takerAssetFillAmount Desired amount of takerAsset to sell.\n /// @param signature Proof that order has been created by maker.\n /// @return Amounts filled and fees paid by maker and taker.\n function fillOrderNoThrow(\n LibOrder.Order memory order,\n uint256 takerAssetFillAmount,\n bytes memory signature\n )\n public\n returns (FillResults memory fillResults)\n {\n // We need to call MExchangeCore.fillOrder using a delegatecall in\n // assembly so that we can intercept a call that throws. For this, we\n // need the input encoded in memory in the Ethereum ABIv2 format [1].\n\n // | Area | Offset | Length | Contents |\n // | -------- |--------|---------|-------------------------------------------- |\n // | Header | 0x00 | 4 | function selector |\n // | Params | | 3 * 32 | function parameters: |\n // | | 0x00 | | 1. offset to order (*) |\n // | | 0x20 | | 2. takerAssetFillAmount |\n // | | 0x40 | | 3. offset to signature (*) |\n // | Data | | 12 * 32 | order: |\n // | | 0x000 | | 1. senderAddress |\n // | | 0x020 | | 2. makerAddress |\n // | | 0x040 | | 3. takerAddress |\n // | | 0x060 | | 4. feeRecipientAddress |\n // | | 0x080 | | 5. makerAssetAmount |\n // | | 0x0A0 | | 6. takerAssetAmount |\n // | | 0x0C0 | | 7. makerFeeAmount |\n // | | 0x0E0 | | 8. takerFeeAmount |\n // | | 0x100 | | 9. expirationTimeSeconds |\n // | | 0x120 | | 10. salt |\n // | | 0x140 | | 11. Offset to makerAssetData (*) |\n // | | 0x160 | | 12. Offset to takerAssetData (*) |\n // | | 0x180 | 32 | makerAssetData Length |\n // | | 0x1A0 | ** | makerAssetData Contents |\n // | | 0x1C0 | 32 | takerAssetData Length |\n // | | 0x1E0 | ** | takerAssetData Contents |\n // | | 0x200 | 32 | signature Length |\n // | | 0x220 | ** | signature Contents |\n\n // * Offsets are calculated from the beginning of the current area: Header, Params, Data:\n // An offset stored in the Params area is calculated from the beginning of the Params section.\n // An offset stored in the Data area is calculated from the beginning of the Data section.\n\n // ** The length of dynamic array contents are stored in the field immediately preceeding the contents.\n\n // [1]: https://solidity.readthedocs.io/en/develop/abi-spec.html\n\n bytes4 fillOrderSelector = this.fillOrder.selector;\n\n assembly {\n\n // Areas below may use the following variables:\n // 1. <area>Start -- Start of this area in memory\n // 2. <area>End -- End of this area in memory. This value may\n // be precomputed (before writing contents),\n // or it may be computed as contents are written.\n // 3. <area>Offset -- Current offset into area. If an area's End\n // is precomputed, this variable tracks the\n // offsets of contents as they are written.\n\n /////// Setup Header Area ///////\n // Load free memory pointer\n let headerAreaStart := mload(0x40)\n mstore(headerAreaStart, fillOrderSelector)\n let headerAreaEnd := add(headerAreaStart, 0x4)\n\n /////// Setup Params Area ///////\n // This area is preallocated and written to later.\n // This is because we need to fill in offsets that have not yet been calculated.\n let paramsAreaStart := headerAreaEnd\n let paramsAreaEnd := add(paramsAreaStart, 0x60)\n let paramsAreaOffset := paramsAreaStart\n\n /////// Setup Data Area ///////\n let dataAreaStart := paramsAreaEnd\n let dataAreaEnd := dataAreaStart\n\n // Offset from the source data we're reading from\n let sourceOffset := order\n // arrayLenBytes and arrayLenWords track the length of a dynamically-allocated bytes array.\n let arrayLenBytes := 0\n let arrayLenWords := 0\n\n /////// Write order Struct ///////\n // Write memory location of Order, relative to the start of the\n // parameter list, then increment the paramsAreaOffset respectively.\n mstore(paramsAreaOffset, sub(dataAreaEnd, paramsAreaStart))\n paramsAreaOffset := add(paramsAreaOffset, 0x20)\n\n // Write values for each field in the order\n // It would be nice to use a loop, but we save on gas by writing\n // the stores sequentially.\n mstore(dataAreaEnd, mload(sourceOffset)) // makerAddress\n mstore(add(dataAreaEnd, 0x20), mload(add(sourceOffset, 0x20))) // takerAddress\n mstore(add(dataAreaEnd, 0x40), mload(add(sourceOffset, 0x40))) // feeRecipientAddress\n mstore(add(dataAreaEnd, 0x60), mload(add(sourceOffset, 0x60))) // senderAddress\n mstore(add(dataAreaEnd, 0x80), mload(add(sourceOffset, 0x80))) // makerAssetAmount\n mstore(add(dataAreaEnd, 0xA0), mload(add(sourceOffset, 0xA0))) // takerAssetAmount\n mstore(add(dataAreaEnd, 0xC0), mload(add(sourceOffset, 0xC0))) // makerFeeAmount\n mstore(add(dataAreaEnd, 0xE0), mload(add(sourceOffset, 0xE0))) // takerFeeAmount\n mstore(add(dataAreaEnd, 0x100), mload(add(sourceOffset, 0x100))) // expirationTimeSeconds\n mstore(add(dataAreaEnd, 0x120), mload(add(sourceOffset, 0x120))) // salt\n mstore(add(dataAreaEnd, 0x140), mload(add(sourceOffset, 0x140))) // Offset to makerAssetData\n mstore(add(dataAreaEnd, 0x160), mload(add(sourceOffset, 0x160))) // Offset to takerAssetData\n dataAreaEnd := add(dataAreaEnd, 0x180)\n sourceOffset := add(sourceOffset, 0x180)\n\n // Write offset to <order.makerAssetData>\n mstore(add(dataAreaStart, mul(10, 0x20)), sub(dataAreaEnd, dataAreaStart))\n\n // Calculate length of <order.makerAssetData>\n sourceOffset := mload(add(order, 0x140)) // makerAssetData\n arrayLenBytes := mload(sourceOffset)\n sourceOffset := add(sourceOffset, 0x20)\n arrayLenWords := div(add(arrayLenBytes, 0x1F), 0x20)\n\n // Write length of <order.makerAssetData>\n mstore(dataAreaEnd, arrayLenBytes)\n dataAreaEnd := add(dataAreaEnd, 0x20)\n\n // Write contents of <order.makerAssetData>\n for {let i := 0} lt(i, arrayLenWords) {i := add(i, 1)} {\n mstore(dataAreaEnd, mload(sourceOffset))\n dataAreaEnd := add(dataAreaEnd, 0x20)\n sourceOffset := add(sourceOffset, 0x20)\n }\n\n // Write offset to <order.takerAssetData>\n mstore(add(dataAreaStart, mul(11, 0x20)), sub(dataAreaEnd, dataAreaStart))\n\n // Calculate length of <order.takerAssetData>\n sourceOffset := mload(add(order, 0x160)) // takerAssetData\n arrayLenBytes := mload(sourceOffset)\n sourceOffset := add(sourceOffset, 0x20)\n arrayLenWords := div(add(arrayLenBytes, 0x1F), 0x20)\n\n // Write length of <order.takerAssetData>\n mstore(dataAreaEnd, arrayLenBytes)\n dataAreaEnd := add(dataAreaEnd, 0x20)\n\n // Write contents of <order.takerAssetData>\n for {let i := 0} lt(i, arrayLenWords) {i := add(i, 1)} {\n mstore(dataAreaEnd, mload(sourceOffset))\n dataAreaEnd := add(dataAreaEnd, 0x20)\n sourceOffset := add(sourceOffset, 0x20)\n }\n\n /////// Write takerAssetFillAmount ///////\n mstore(paramsAreaOffset, takerAssetFillAmount)\n paramsAreaOffset := add(paramsAreaOffset, 0x20)\n\n /////// Write signature ///////\n // Write offset to paramsArea\n mstore(paramsAreaOffset, sub(dataAreaEnd, paramsAreaStart))\n\n // Calculate length of signature\n sourceOffset := signature\n arrayLenBytes := mload(sourceOffset)\n sourceOffset := add(sourceOffset, 0x20)\n arrayLenWords := div(add(arrayLenBytes, 0x1F), 0x20)\n\n // Write length of signature\n mstore(dataAreaEnd, arrayLenBytes)\n dataAreaEnd := add(dataAreaEnd, 0x20)\n\n // Write contents of signature\n for {let i := 0} lt(i, arrayLenWords) {i := add(i, 1)} {\n mstore(dataAreaEnd, mload(sourceOffset))\n dataAreaEnd := add(dataAreaEnd, 0x20)\n sourceOffset := add(sourceOffset, 0x20)\n }\n\n // Execute delegatecall\n let success := delegatecall(\n gas, // forward all gas, TODO: look into gas consumption of assert/throw\n address, // call address of this contract\n headerAreaStart, // pointer to start of input\n sub(dataAreaEnd, headerAreaStart), // length of input\n headerAreaStart, // write output over input\n 128 // output size is 128 bytes\n )\n switch success\n case 0 {\n mstore(fillResults, 0)\n mstore(add(fillResults, 32), 0)\n mstore(add(fillResults, 64), 0)\n mstore(add(fillResults, 96), 0)\n }\n case 1 {\n mstore(fillResults, mload(headerAreaStart))\n mstore(add(fillResults, 32), mload(add(headerAreaStart, 32)))\n mstore(add(fillResults, 64), mload(add(headerAreaStart, 64)))\n mstore(add(fillResults, 96), mload(add(headerAreaStart, 96)))\n }\n }\n return fillResults;\n }\n\n /// @dev Synchronously executes multiple calls of fillOrder.\n /// @param orders Array of order specifications.\n /// @param takerAssetFillAmounts Array of desired amounts of takerAsset to sell in orders.\n /// @param signatures Proofs that orders have been created by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n /// NOTE: makerAssetFilledAmount and takerAssetFilledAmount may include amounts filled of different assets.\n function batchFillOrders(\n LibOrder.Order[] memory orders,\n uint256[] memory takerAssetFillAmounts,\n bytes[] memory signatures\n )\n public\n returns (FillResults memory totalFillResults)\n {\n for (uint256 i = 0; i < orders.length; i++) {\n FillResults memory singleFillResults = fillOrder(\n orders[i],\n takerAssetFillAmounts[i],\n signatures[i]\n );\n addFillResults(totalFillResults, singleFillResults);\n }\n return totalFillResults;\n }\n\n /// @dev Synchronously executes multiple calls of fillOrKill.\n /// @param orders Array of order specifications.\n /// @param takerAssetFillAmounts Array of desired amounts of takerAsset to sell in orders.\n /// @param signatures Proofs that orders have been created by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n /// NOTE: makerAssetFilledAmount and takerAssetFilledAmount may include amounts filled of different assets.\n function batchFillOrKillOrders(\n LibOrder.Order[] memory orders,\n uint256[] memory takerAssetFillAmounts,\n bytes[] memory signatures\n )\n public\n returns (FillResults memory totalFillResults)\n {\n for (uint256 i = 0; i < orders.length; i++) {\n FillResults memory singleFillResults = fillOrKillOrder(\n orders[i],\n takerAssetFillAmounts[i],\n signatures[i]\n );\n addFillResults(totalFillResults, singleFillResults);\n }\n return totalFillResults;\n }\n\n /// @dev Fills an order with specified parameters and ECDSA signature.\n /// Returns false if the transaction would otherwise revert.\n /// @param orders Array of order specifications.\n /// @param takerAssetFillAmounts Array of desired amounts of takerAsset to sell in orders.\n /// @param signatures Proofs that orders have been created by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n /// NOTE: makerAssetFilledAmount and takerAssetFilledAmount may include amounts filled of different assets.\n function batchFillOrdersNoThrow(\n LibOrder.Order[] memory orders,\n uint256[] memory takerAssetFillAmounts,\n bytes[] memory signatures\n )\n public\n returns (FillResults memory totalFillResults)\n {\n for (uint256 i = 0; i < orders.length; i++) {\n FillResults memory singleFillResults = fillOrderNoThrow(\n orders[i],\n takerAssetFillAmounts[i],\n signatures[i]\n );\n addFillResults(totalFillResults, singleFillResults);\n }\n return totalFillResults;\n }\n\n /// @dev Synchronously executes multiple calls of fillOrder until total amount of takerAsset is sold by taker.\n /// @param orders Array of order specifications.\n /// @param takerAssetFillAmount Desired amount of takerAsset to sell.\n /// @param signatures Proofs that orders have been created by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n function marketSellOrders(\n LibOrder.Order[] memory orders,\n uint256 takerAssetFillAmount,\n bytes[] memory signatures\n )\n public\n returns (FillResults memory totalFillResults)\n {\n bytes memory takerAssetData = orders[0].takerAssetData;\n \n for (uint256 i = 0; i < orders.length; i++) {\n\n // We assume that asset being sold by taker is the same for each order.\n // Rather than passing this in as calldata, we use the takerAssetData from the first order in all later orders.\n orders[i].takerAssetData = takerAssetData;\n\n // Calculate the remaining amount of takerAsset to sell\n uint256 remainingTakerAssetFillAmount = safeSub(takerAssetFillAmount, totalFillResults.takerAssetFilledAmount);\n\n // Attempt to sell the remaining amount of takerAsset\n FillResults memory singleFillResults = fillOrder(\n orders[i],\n remainingTakerAssetFillAmount,\n signatures[i]\n );\n\n // Update amounts filled and fees paid by maker and taker\n addFillResults(totalFillResults, singleFillResults);\n\n // Stop execution if the entire amount of takerAsset has been sold\n if (totalFillResults.takerAssetFilledAmount == takerAssetFillAmount) {\n break;\n }\n }\n return totalFillResults;\n }\n\n /// @dev Synchronously executes multiple calls of fillOrder until total amount of takerAsset is sold by taker.\n /// Returns false if the transaction would otherwise revert.\n /// @param orders Array of order specifications.\n /// @param takerAssetFillAmount Desired amount of takerAsset to sell.\n /// @param signatures Proofs that orders have been signed by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n function marketSellOrdersNoThrow(\n LibOrder.Order[] memory orders,\n uint256 takerAssetFillAmount,\n bytes[] memory signatures\n )\n public\n returns (FillResults memory totalFillResults)\n {\n bytes memory takerAssetData = orders[0].takerAssetData;\n\n for (uint256 i = 0; i < orders.length; i++) {\n\n // We assume that asset being sold by taker is the same for each order.\n // Rather than passing this in as calldata, we use the takerAssetData from the first order in all later orders.\n orders[i].takerAssetData = takerAssetData;\n\n // Calculate the remaining amount of takerAsset to sell\n uint256 remainingTakerAssetFillAmount = safeSub(takerAssetFillAmount, totalFillResults.takerAssetFilledAmount);\n\n // Attempt to sell the remaining amount of takerAsset\n FillResults memory singleFillResults = fillOrderNoThrow(\n orders[i],\n remainingTakerAssetFillAmount,\n signatures[i]\n );\n\n // Update amounts filled and fees paid by maker and taker\n addFillResults(totalFillResults, singleFillResults);\n\n // Stop execution if the entire amount of takerAsset has been sold\n if (totalFillResults.takerAssetFilledAmount == takerAssetFillAmount) {\n break;\n }\n }\n return totalFillResults;\n }\n\n /// @dev Synchronously executes multiple calls of fillOrder until total amount of makerAsset is bought by taker.\n /// @param orders Array of order specifications.\n /// @param makerAssetFillAmount Desired amount of makerAsset to buy.\n /// @param signatures Proofs that orders have been signed by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n function marketBuyOrders(\n LibOrder.Order[] memory orders,\n uint256 makerAssetFillAmount,\n bytes[] memory signatures\n )\n public\n returns (FillResults memory totalFillResults)\n {\n bytes memory makerAssetData = orders[0].makerAssetData;\n\n for (uint256 i = 0; i < orders.length; i++) {\n\n // We assume that asset being bought by taker is the same for each order.\n // Rather than passing this in as calldata, we copy the makerAssetData from the first order onto all later orders.\n orders[i].makerAssetData = makerAssetData;\n\n // Calculate the remaining amount of makerAsset to buy\n uint256 remainingMakerAssetFillAmount = safeSub(makerAssetFillAmount, totalFillResults.makerAssetFilledAmount);\n\n // Convert the remaining amount of makerAsset to buy into remaining amount\n // of takerAsset to sell, assuming entire amount can be sold in the current order\n uint256 remainingTakerAssetFillAmount = getPartialAmount(\n orders[i].takerAssetAmount,\n orders[i].makerAssetAmount,\n remainingMakerAssetFillAmount\n );\n\n // Attempt to sell the remaining amount of takerAsset\n FillResults memory singleFillResults = fillOrder(\n orders[i],\n remainingTakerAssetFillAmount,\n signatures[i]\n );\n\n // Update amounts filled and fees paid by maker and taker\n addFillResults(totalFillResults, singleFillResults);\n\n // Stop execution if the entire amount of makerAsset has been bought\n if (totalFillResults.makerAssetFilledAmount == makerAssetFillAmount) {\n break;\n }\n }\n return totalFillResults;\n }\n\n /// @dev Synchronously executes multiple fill orders in a single transaction until total amount is bought by taker.\n /// Returns false if the transaction would otherwise revert.\n /// @param orders Array of order specifications.\n /// @param makerAssetFillAmount Desired amount of makerAsset to buy.\n /// @param signatures Proofs that orders have been signed by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n function marketBuyOrdersNoThrow(\n LibOrder.Order[] memory orders,\n uint256 makerAssetFillAmount,\n bytes[] memory signatures\n )\n public\n returns (FillResults memory totalFillResults)\n {\n bytes memory makerAssetData = orders[0].makerAssetData;\n\n for (uint256 i = 0; i < orders.length; i++) {\n\n // We assume that asset being bought by taker is the same for each order.\n // Rather than passing this in as calldata, we copy the makerAssetData from the first order onto all later orders.\n orders[i].makerAssetData = makerAssetData;\n\n // Calculate the remaining amount of makerAsset to buy\n uint256 remainingMakerAssetFillAmount = safeSub(makerAssetFillAmount, totalFillResults.makerAssetFilledAmount);\n\n // Convert the remaining amount of makerAsset to buy into remaining amount\n // of takerAsset to sell, assuming entire amount can be sold in the current order\n uint256 remainingTakerAssetFillAmount = getPartialAmount(\n orders[i].takerAssetAmount,\n orders[i].makerAssetAmount,\n remainingMakerAssetFillAmount\n );\n\n // Attempt to sell the remaining amount of takerAsset\n FillResults memory singleFillResults = fillOrderNoThrow(\n orders[i],\n remainingTakerAssetFillAmount,\n signatures[i]\n );\n\n // Update amounts filled and fees paid by maker and taker\n addFillResults(totalFillResults, singleFillResults);\n\n // Stop execution if the entire amount of makerAsset has been bought\n if (totalFillResults.makerAssetFilledAmount == makerAssetFillAmount) {\n break;\n }\n }\n return totalFillResults;\n }\n\n /// @dev Synchronously cancels multiple orders in a single transaction.\n /// @param orders Array of order specifications.\n function batchCancelOrders(LibOrder.Order[] memory orders)\n public\n {\n for (uint256 i = 0; i < orders.length; i++) {\n cancelOrder(orders[i]);\n }\n }\n}\n",
- "2.0.0/protocol/Exchange/interfaces/IAssetProxyDispatcher.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.24;\n\ncontract IAssetProxyDispatcher {\n\n /// @dev Registers an asset proxy to its asset proxy id.\n /// Once an asset proxy is registered, it cannot be unregistered.\n /// @param assetProxy Address of new asset proxy to register.\n function registerAssetProxy(address assetProxy)\n external;\n\n /// @dev Gets an asset proxy.\n /// @param assetProxyId Id of the asset proxy.\n /// @return The asset proxy registered to assetProxyId. Returns 0x0 if no proxy is registered.\n function getAssetProxy(bytes4 assetProxyId)\n external\n view\n returns (address);\n}\n",
- "2.0.0/protocol/Exchange/interfaces/IExchangeCore.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../libs/LibOrder.sol\";\nimport \"../libs/LibFillResults.sol\";\n\ncontract IExchangeCore {\n\n /// @dev Cancels all orders created by makerAddress with a salt less than or equal to the targetOrderEpoch\n /// and senderAddress equal to msg.sender (or null address if msg.sender == makerAddress).\n /// @param targetOrderEpoch Orders created with a salt less or equal to this value will be cancelled.\n function cancelOrdersUpTo(uint256 targetOrderEpoch)\n external;\n\n /// @dev Fills the input order.\n /// @param order Order struct containing order specifications.\n /// @param takerAssetFillAmount Desired amount of takerAsset to sell.\n /// @param signature Proof that order has been created by maker.\n /// @return Amounts filled and fees paid by maker and taker.\n function fillOrder(\n LibOrder.Order memory order,\n uint256 takerAssetFillAmount,\n bytes memory signature\n )\n public\n returns (LibFillResults.FillResults memory fillResults);\n\n /// @dev After calling, the order can not be filled anymore.\n /// @param order Order struct containing order specifications.\n function cancelOrder(LibOrder.Order memory order)\n public;\n\n /// @dev Gets information about an order: status, hash, and amount filled.\n /// @param order Order to gather information on.\n /// @return OrderInfo Information about the order and its state.\n /// See LibOrder.OrderInfo for a complete description.\n function getOrderInfo(LibOrder.Order memory order)\n public\n view\n returns (LibOrder.OrderInfo memory orderInfo);\n}\n",
- "2.0.0/protocol/Exchange/interfaces/IMatchOrders.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*/\npragma solidity ^0.4.24;\npragma experimental ABIEncoderV2;\n\nimport \"../libs/LibOrder.sol\";\nimport \"../libs/LibFillResults.sol\";\n\ncontract IMatchOrders {\n\n /// @dev Match two complementary orders that have a profitable spread.\n /// Each order is filled at their respective price point. However, the calculations are\n /// carried out as though the orders are both being filled at the right order's price point.\n /// The profit made by the left order goes to the taker (who matched the two orders).\n /// @param leftOrder First order to match.\n /// @param rightOrder Second order to match.\n /// @param leftSignature Proof that order was created by the left maker.\n /// @param rightSignature Proof that order was created by the right maker.\n /// @return matchedFillResults Amounts filled and fees paid by maker and taker of matched orders.\n /// TODO: Make this function external once supported by Solidity (See Solidity Issues #3199, #1603)\n function matchOrders(\n LibOrder.Order memory leftOrder,\n LibOrder.Order memory rightOrder,\n bytes memory leftSignature,\n bytes memory rightSignature\n )\n public\n returns (LibFillResults.MatchedFillResults memory matchedFillResults);\n}\n",
- "2.0.0/protocol/Exchange/interfaces/ISignatureValidator.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.24;\n\ncontract ISignatureValidator {\n\n /// @dev Approves a hash on-chain using any valid signature type.\n /// After presigning a hash, the preSign signature type will become valid for that hash and signer.\n /// @param signerAddress Address that should have signed the given hash.\n /// @param signature Proof that the hash has been signed by signer.\n function preSign(\n bytes32 hash,\n address signerAddress,\n bytes signature\n )\n external;\n \n /// @dev Approves/unnapproves a Validator contract to verify signatures on signer's behalf.\n /// @param validatorAddress Address of Validator contract.\n /// @param approval Approval or disapproval of Validator contract.\n function setSignatureValidatorApproval(\n address validatorAddress,\n bool approval\n )\n external;\n\n /// @dev Verifies that a signature is valid.\n /// @param hash Message hash that is signed.\n /// @param signerAddress Address of signer.\n /// @param signature Proof of signing.\n /// @return Validity of order signature.\n function isValidSignature(\n bytes32 hash,\n address signerAddress,\n bytes memory signature\n )\n public\n view\n returns (bool isValid);\n}\n",
- "2.0.0/protocol/Exchange/interfaces/ITransactions.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*/\npragma solidity ^0.4.24;\n\ncontract ITransactions {\n\n /// @dev Executes an exchange method call in the context of signer.\n /// @param salt Arbitrary number to ensure uniqueness of transaction hash.\n /// @param signerAddress Address of transaction signer.\n /// @param data AbiV2 encoded calldata.\n /// @param signature Proof of signer transaction by signer.\n function executeTransaction(\n uint256 salt,\n address signerAddress,\n bytes data,\n bytes signature\n )\n external;\n}\n",
- "2.0.0/protocol/Exchange/interfaces/IValidator.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.23;\n\ncontract IValidator {\n\n /// @dev Verifies that a signature is valid.\n /// @param hash Message hash that is signed.\n /// @param signerAddress Address that should have signed the given hash.\n /// @param signature Proof of signing.\n /// @return Validity of order signature.\n function isValidSignature(\n bytes32 hash,\n address signerAddress,\n bytes signature\n )\n external\n view\n returns (bool isValid);\n}\n",
- "2.0.0/protocol/Exchange/interfaces/IWallet.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.24;\n\ncontract IWallet {\n\n /// @dev Verifies that a signature is valid.\n /// @param hash Message hash that is signed.\n /// @param signature Proof of signing.\n /// @return Validity of order signature.\n function isValidSignature(\n bytes32 hash,\n bytes signature\n )\n external\n view\n returns (bool isValid);\n}\n",
- "2.0.0/protocol/Exchange/libs/LibConstants.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.24;\n\ncontract LibConstants {\n \n // Asset data for ZRX token. Used for fee transfers.\n // @TODO: Hardcode constant when we deploy. Currently \n // not constant to make testing easier.\n bytes public ZRX_ASSET_DATA;\n\n // @TODO: Remove when we deploy.\n constructor (bytes memory zrxAssetData)\n public\n {\n ZRX_ASSET_DATA = zrxAssetData;\n }\n}\n",
- "2.0.0/protocol/Exchange/libs/LibEIP712.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.24;\n\ncontract LibEIP712 {\n // EIP191 header for EIP712 prefix\n string constant EIP191_HEADER = \"\\x19\\x01\";\n\n // EIP712 Domain Name value\n string constant EIP712_DOMAIN_NAME = \"0x Protocol\";\n\n // EIP712 Domain Version value\n string constant EIP712_DOMAIN_VERSION = \"2\";\n\n // Hash of the EIP712 Domain Separator Schema\n bytes32 public constant EIP712_DOMAIN_SEPARATOR_SCHEMA_HASH = keccak256(abi.encodePacked(\n \"EIP712Domain(\",\n \"string name,\",\n \"string version,\",\n \"address verifyingContract\",\n \")\"\n ));\n\n // Hash of the EIP712 Domain Separator data\n bytes32 public EIP712_DOMAIN_HASH;\n\n constructor ()\n public\n {\n EIP712_DOMAIN_HASH = keccak256(abi.encode(\n EIP712_DOMAIN_SEPARATOR_SCHEMA_HASH,\n keccak256(bytes(EIP712_DOMAIN_NAME)),\n keccak256(bytes(EIP712_DOMAIN_VERSION)),\n address(this)\n ));\n }\n\n /// @dev Calculates EIP712 encoding for a hash struct in this EIP712 Domain.\n /// @param hashStruct The EIP712 hash struct.\n /// @return EIP712 hash applied to this EIP712 Domain.\n function hashEIP712Message(bytes32 hashStruct)\n internal\n view\n returns (bytes32)\n {\n return keccak256(abi.encodePacked(EIP191_HEADER, EIP712_DOMAIN_HASH, hashStruct));\n }\n}\n",
- "2.0.0/protocol/Exchange/libs/LibExchangeErrors.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.24;\n\n/// @dev This contract documents the revert reasons used in the Exchange contract.\n/// This contract is intended to serve as a reference, but is not actually used for efficiency reasons.\ncontract LibExchangeErrors {\n\n /// Order validation errors ///\n string constant ORDER_UNFILLABLE = \"ORDER_UNFILLABLE\"; // Order cannot be filled.\n string constant INVALID_MAKER = \"INVALID_MAKER\"; // Invalid makerAddress.\n string constant INVALID_TAKER = \"INVALID_TAKER\"; // Invalid takerAddress.\n string constant INVALID_SENDER = \"INVALID_SENDER\"; // Invalid `msg.sender`.\n string constant INVALID_ORDER_SIGNATURE = \"INVALID_ORDER_SIGNATURE\"; // Signature validation failed. \n \n /// fillOrder validation errors ///\n string constant INVALID_TAKER_AMOUNT = \"INVALID_TAKER_AMOUNT\"; // takerAssetFillAmount cannot equal 0.\n string constant ROUNDING_ERROR = \"ROUNDING_ERROR\"; // Rounding error greater than 0.1% of takerAssetFillAmount. \n \n /// Signature validation errors ///\n string constant INVALID_SIGNATURE = \"INVALID_SIGNATURE\"; // Signature validation failed. \n string constant SIGNATURE_ILLEGAL = \"SIGNATURE_ILLEGAL\"; // Signature type is illegal.\n string constant SIGNATURE_UNSUPPORTED = \"SIGNATURE_UNSUPPORTED\"; // Signature type unsupported.\n \n /// cancelOrdersUptTo errors ///\n string constant INVALID_NEW_ORDER_EPOCH = \"INVALID_NEW_ORDER_EPOCH\"; // Specified salt must be greater than or equal to existing orderEpoch.\n\n /// fillOrKillOrder errors ///\n string constant COMPLETE_FILL_FAILED = \"COMPLETE_FILL_FAILED\"; // Desired takerAssetFillAmount could not be completely filled. \n\n /// matchOrders errors ///\n string constant NEGATIVE_SPREAD_REQUIRED = \"NEGATIVE_SPREAD_REQUIRED\"; // Matched orders must have a negative spread.\n\n /// Transaction errors ///\n string constant REENTRANCY_ILLEGAL = \"REENTRANCY_ILLEGAL\"; // Recursive reentrancy is not allowed. \n string constant INVALID_TX_HASH = \"INVALID_TX_HASH\"; // Transaction has already been executed. \n string constant INVALID_TX_SIGNATURE = \"INVALID_TX_SIGNATURE\"; // Signature validation failed. \n string constant FAILED_EXECUTION = \"FAILED_EXECUTION\"; // Transaction execution failed. \n \n /// registerAssetProxy errors ///\n string constant ASSET_PROXY_ALREADY_EXISTS = \"ASSET_PROXY_ALREADY_EXISTS\"; // AssetProxy with same id already exists.\n\n /// dispatchTransferFrom errors ///\n string constant ASSET_PROXY_DOES_NOT_EXIST = \"ASSET_PROXY_DOES_NOT_EXIST\"; // No assetProxy registered at given id.\n string constant TRANSFER_FAILED = \"TRANSFER_FAILED\"; // Asset transfer unsuccesful.\n\n /// Length validation errors ///\n string constant LENGTH_GREATER_THAN_0_REQUIRED = \"LENGTH_GREATER_THAN_0_REQUIRED\"; // Byte array must have a length greater than 0.\n string constant LENGTH_GREATER_THAN_3_REQUIRED = \"LENGTH_GREATER_THAN_3_REQUIRED\"; // Byte array must have a length greater than 3.\n string constant LENGTH_0_REQUIRED = \"LENGTH_0_REQUIRED\"; // Byte array must have a length of 0.\n string constant LENGTH_65_REQUIRED = \"LENGTH_65_REQUIRED\"; // Byte array must have a length of 65.\n}\n",
- "2.0.0/protocol/Exchange/libs/LibFillResults.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.24;\n\nimport \"../../../utils/SafeMath/SafeMath.sol\";\n\ncontract LibFillResults is\n SafeMath\n{\n\n struct FillResults {\n uint256 makerAssetFilledAmount; // Total amount of makerAsset(s) filled.\n uint256 takerAssetFilledAmount; // Total amount of takerAsset(s) filled.\n uint256 makerFeePaid; // Total amount of ZRX paid by maker(s) to feeRecipient(s).\n uint256 takerFeePaid; // Total amount of ZRX paid by taker to feeRecipients(s).\n }\n\n struct MatchedFillResults {\n FillResults left; // Amounts filled and fees paid of left order.\n FillResults right; // Amounts filled and fees paid of right order.\n uint256 leftMakerAssetSpreadAmount; // Spread between price of left and right order, denominated in the left order's makerAsset, paid to taker.\n }\n\n /// @dev Adds properties of both FillResults instances.\n /// Modifies the first FillResults instance specified.\n /// @param totalFillResults Fill results instance that will be added onto.\n /// @param singleFillResults Fill results instance that will be added to totalFillResults.\n function addFillResults(FillResults memory totalFillResults, FillResults memory singleFillResults)\n internal\n pure\n {\n totalFillResults.makerAssetFilledAmount = safeAdd(totalFillResults.makerAssetFilledAmount, singleFillResults.makerAssetFilledAmount);\n totalFillResults.takerAssetFilledAmount = safeAdd(totalFillResults.takerAssetFilledAmount, singleFillResults.takerAssetFilledAmount);\n totalFillResults.makerFeePaid = safeAdd(totalFillResults.makerFeePaid, singleFillResults.makerFeePaid);\n totalFillResults.takerFeePaid = safeAdd(totalFillResults.takerFeePaid, singleFillResults.takerFeePaid);\n }\n}\n",
- "2.0.0/protocol/Exchange/libs/LibMath.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.24;\n\nimport \"../../../utils/SafeMath/SafeMath.sol\";\n\ncontract LibMath is\n SafeMath\n{\n\n /// @dev Calculates partial value given a numerator and denominator.\n /// @param numerator Numerator.\n /// @param denominator Denominator.\n /// @param target Value to calculate partial of.\n /// @return Partial value of target.\n function getPartialAmount(\n uint256 numerator,\n uint256 denominator,\n uint256 target)\n internal\n pure\n returns (uint256 partialAmount)\n {\n partialAmount = safeDiv(\n safeMul(numerator, target),\n denominator\n );\n return partialAmount;\n }\n\n /// @dev Checks if rounding error > 0.1%.\n /// @param numerator Numerator.\n /// @param denominator Denominator.\n /// @param target Value to multiply with numerator/denominator.\n /// @return Rounding error is present.\n function isRoundingError(\n uint256 numerator,\n uint256 denominator,\n uint256 target)\n internal\n pure\n returns (bool isError)\n {\n uint256 remainder = mulmod(target, numerator, denominator);\n if (remainder == 0) {\n return false; // No rounding error.\n }\n\n uint256 errPercentageTimes1000000 = safeDiv(\n safeMul(remainder, 1000000),\n safeMul(numerator, target)\n );\n isError = errPercentageTimes1000000 > 1000;\n return isError;\n }\n}\n",
- "2.0.0/protocol/Exchange/libs/LibOrder.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.24;\n\nimport \"./LibEIP712.sol\";\n\ncontract LibOrder is\n LibEIP712\n{\n\n // Hash for the EIP712 Order Schema\n bytes32 constant EIP712_ORDER_SCHEMA_HASH = keccak256(abi.encodePacked(\n \"Order(\",\n \"address makerAddress,\",\n \"address takerAddress,\",\n \"address feeRecipientAddress,\",\n \"address senderAddress,\",\n \"uint256 makerAssetAmount,\",\n \"uint256 takerAssetAmount,\",\n \"uint256 makerFee,\",\n \"uint256 takerFee,\",\n \"uint256 expirationTimeSeconds,\",\n \"uint256 salt,\",\n \"bytes makerAssetData,\",\n \"bytes takerAssetData\",\n \")\"\n ));\n\n // A valid order remains fillable until it is expired, fully filled, or cancelled.\n // An order's state is unaffected by external factors, like account balances.\n enum OrderStatus {\n INVALID, // Default value\n INVALID_MAKER_ASSET_AMOUNT, // Order does not have a valid maker asset amount\n INVALID_TAKER_ASSET_AMOUNT, // Order does not have a valid taker asset amount\n FILLABLE, // Order is fillable\n EXPIRED, // Order has already expired\n FULLY_FILLED, // Order is fully filled\n CANCELLED // Order has been cancelled\n }\n\n struct Order {\n address makerAddress; // Address that created the order. \n address takerAddress; // Address that is allowed to fill the order. If set to 0, any address is allowed to fill the order. \n address feeRecipientAddress; // Address that will recieve fees when order is filled. \n address senderAddress; // Address that is allowed to call Exchange contract methods that affect this order. If set to 0, any address is allowed to call these methods.\n uint256 makerAssetAmount; // Amount of makerAsset being offered by maker. Must be greater than 0. \n uint256 takerAssetAmount; // Amount of takerAsset being bid on by maker. Must be greater than 0. \n uint256 makerFee; // Amount of ZRX paid to feeRecipient by maker when order is filled. If set to 0, no transfer of ZRX from maker to feeRecipient will be attempted.\n uint256 takerFee; // Amount of ZRX paid to feeRecipient by taker when order is filled. If set to 0, no transfer of ZRX from taker to feeRecipient will be attempted.\n uint256 expirationTimeSeconds; // Timestamp in seconds at which order expires. \n uint256 salt; // Arbitrary number to facilitate uniqueness of the order's hash. \n bytes makerAssetData; // Encoded data that can be decoded by a specified proxy contract when transferring makerAsset. The last byte references the id of this proxy.\n bytes takerAssetData; // Encoded data that can be decoded by a specified proxy contract when transferring takerAsset. The last byte references the id of this proxy.\n }\n\n struct OrderInfo {\n uint8 orderStatus; // Status that describes order's validity and fillability.\n bytes32 orderHash; // EIP712 hash of the order (see LibOrder.getOrderHash).\n uint256 orderTakerAssetFilledAmount; // Amount of order that has already been filled.\n }\n\n /// @dev Calculates Keccak-256 hash of the order.\n /// @param order The order structure.\n /// @return Keccak-256 EIP712 hash of the order.\n function getOrderHash(Order memory order)\n internal\n view\n returns (bytes32 orderHash)\n {\n orderHash = hashEIP712Message(hashOrder(order));\n return orderHash;\n }\n\n /// @dev Calculates EIP712 hash of the order.\n /// @param order The order structure.\n /// @return EIP712 hash of the order.\n function hashOrder(Order memory order)\n internal\n pure\n returns (bytes32 result)\n {\n bytes32 schemaHash = EIP712_ORDER_SCHEMA_HASH;\n bytes32 makerAssetDataHash = keccak256(order.makerAssetData);\n bytes32 takerAssetDataHash = keccak256(order.takerAssetData);\n // Assembly for more efficiently computing:\n // keccak256(abi.encode(\n // order.makerAddress,\n // order.takerAddress,\n // order.feeRecipientAddress,\n // order.senderAddress,\n // order.makerAssetAmount,\n // order.takerAssetAmount,\n // order.makerFee,\n // order.takerFee,\n // order.expirationTimeSeconds,\n // order.salt,\n // keccak256(order.makerAssetData),\n // keccak256(order.takerAssetData)\n // ));\n assembly {\n // Backup\n let temp1 := mload(sub(order, 32))\n let temp2 := mload(add(order, 320))\n let temp3 := mload(add(order, 352))\n \n // Hash in place\n mstore(sub(order, 32), schemaHash)\n mstore(add(order, 320), makerAssetDataHash)\n mstore(add(order, 352), takerAssetDataHash)\n result := keccak256(sub(order, 32), 416)\n \n // Restore\n mstore(sub(order, 32), temp1)\n mstore(add(order, 320), temp2)\n mstore(add(order, 352), temp3)\n }\n return result;\n }\n}\n",
- "2.0.0/protocol/Exchange/mixins/MAssetProxyDispatcher.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../interfaces/IAssetProxyDispatcher.sol\";\n\ncontract MAssetProxyDispatcher is\n IAssetProxyDispatcher\n{\n\n // Logs registration of new asset proxy\n event AssetProxyRegistered(\n bytes4 id, // Id of new registered AssetProxy.\n address assetProxy // Address of new registered AssetProxy.\n );\n\n /// @dev Forwards arguments to assetProxy and calls `transferFrom`. Either succeeds or throws.\n /// @param assetData Byte array encoded for the asset.\n /// @param from Address to transfer token from.\n /// @param to Address to transfer token to.\n /// @param amount Amount of token to transfer.\n function dispatchTransferFrom(\n bytes memory assetData,\n address from,\n address to,\n uint256 amount\n )\n internal;\n}\n",
- "2.0.0/protocol/Exchange/mixins/MExchangeCore.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../libs/LibOrder.sol\";\nimport \"../libs/LibFillResults.sol\";\nimport \"../interfaces/IExchangeCore.sol\";\n\ncontract MExchangeCore is\n IExchangeCore\n{\n // Fill event is emitted whenever an order is filled.\n event Fill(\n address indexed makerAddress, // Address that created the order. \n address indexed feeRecipientAddress, // Address that received fees.\n address takerAddress, // Address that filled the order.\n address senderAddress, // Address that called the Exchange contract (msg.sender).\n uint256 makerAssetFilledAmount, // Amount of makerAsset sold by maker and bought by taker. \n uint256 takerAssetFilledAmount, // Amount of takerAsset sold by taker and bought by maker.\n uint256 makerFeePaid, // Amount of ZRX paid to feeRecipient by maker.\n uint256 takerFeePaid, // Amount of ZRX paid to feeRecipient by taker.\n bytes32 indexed orderHash, // EIP712 hash of order (see LibOrder.getOrderHash).\n bytes makerAssetData, // Encoded data specific to makerAsset. \n bytes takerAssetData // Encoded data specific to takerAsset.\n );\n\n // Cancel event is emitted whenever an individual order is cancelled.\n event Cancel(\n address indexed makerAddress, // Address that created the order. \n address indexed feeRecipientAddress, // Address that would have recieved fees if order was filled. \n address senderAddress, // Address that called the Exchange contract (msg.sender).\n bytes32 indexed orderHash, // EIP712 hash of order (see LibOrder.getOrderHash).\n bytes makerAssetData, // Encoded data specific to makerAsset. \n bytes takerAssetData // Encoded data specific to takerAsset.\n );\n\n // CancelUpTo event is emitted whenever `cancelOrdersUpTo` is executed succesfully.\n event CancelUpTo(\n address indexed makerAddress, // Orders cancelled must have been created by this address.\n address indexed senderAddress, // Orders cancelled must have a `senderAddress` equal to this address.\n uint256 orderEpoch // Orders specified makerAddress and senderAddress with a salt <= this value are considered cancelled.\n );\n\n /// @dev Updates state with results of a fill order.\n /// @param order that was filled.\n /// @param takerAddress Address of taker who filled the order.\n /// @param orderTakerAssetFilledAmount Amount of order already filled.\n /// @return fillResults Amounts filled and fees paid by maker and taker.\n function updateFilledState(\n LibOrder.Order memory order,\n address takerAddress,\n bytes32 orderHash,\n uint256 orderTakerAssetFilledAmount,\n LibFillResults.FillResults memory fillResults\n )\n internal;\n\n /// @dev Updates state with results of cancelling an order.\n /// State is only updated if the order is currently fillable.\n /// Otherwise, updating state would have no effect.\n /// @param order that was cancelled.\n /// @param orderHash Hash of order that was cancelled.\n function updateCancelledState(\n LibOrder.Order memory order,\n bytes32 orderHash\n )\n internal;\n\n /// @dev Validates context for fillOrder. Succeeds or throws.\n /// @param order to be filled.\n /// @param orderInfo Status, orderHash, and amount already filled of order.\n /// @param takerAddress Address of order taker.\n /// @param takerAssetFillAmount Desired amount of order to fill by taker.\n /// @param takerAssetFilledAmount Amount of takerAsset that will be filled.\n /// @param signature Proof that the orders was created by its maker.\n function assertValidFill(\n LibOrder.Order memory order,\n LibOrder.OrderInfo memory orderInfo,\n address takerAddress,\n uint256 takerAssetFillAmount,\n uint256 takerAssetFilledAmount,\n bytes memory signature\n )\n internal\n view;\n\n\n /// @dev Validates context for cancelOrder. Succeeds or throws.\n /// @param order to be cancelled.\n /// @param orderInfo OrderStatus, orderHash, and amount already filled of order.\n function assertValidCancel(\n LibOrder.Order memory order,\n LibOrder.OrderInfo memory orderInfo\n )\n internal\n view;\n\n /// @dev Calculates amounts filled and fees paid by maker and taker.\n /// @param order to be filled.\n /// @param takerAssetFilledAmount Amount of takerAsset that will be filled.\n /// @return fillResults Amounts filled and fees paid by maker and taker.\n function calculateFillResults(\n LibOrder.Order memory order,\n uint256 takerAssetFilledAmount\n )\n internal\n pure\n returns (LibFillResults.FillResults memory fillResults);\n\n}\n",
- "2.0.0/protocol/Exchange/mixins/MMatchOrders.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*/\npragma solidity ^0.4.24;\npragma experimental ABIEncoderV2;\n\nimport \"../libs/LibOrder.sol\";\nimport \"../libs/LibFillResults.sol\";\nimport \"../interfaces/IMatchOrders.sol\";\n\ncontract MMatchOrders is\n IMatchOrders\n{\n\n /// @dev Validates context for matchOrders. Succeeds or throws.\n /// @param leftOrder First order to match.\n /// @param rightOrder Second order to match.\n function assertValidMatch(\n LibOrder.Order memory leftOrder,\n LibOrder.Order memory rightOrder\n )\n internal\n pure;\n\n /// @dev Calculates fill amounts for the matched orders.\n /// Each order is filled at their respective price point. However, the calculations are\n /// carried out as though the orders are both being filled at the right order's price point.\n /// The profit made by the leftOrder order goes to the taker (who matched the two orders).\n /// @param leftOrder First order to match.\n /// @param rightOrder Second order to match.\n /// @param leftOrderTakerAssetFilledAmount Amount of left order already filled.\n /// @param rightOrderTakerAssetFilledAmount Amount of right order already filled.\n /// @param matchedFillResults Amounts to fill and fees to pay by maker and taker of matched orders.\n function calculateMatchedFillResults(\n LibOrder.Order memory leftOrder,\n LibOrder.Order memory rightOrder,\n uint256 leftOrderTakerAssetFilledAmount,\n uint256 rightOrderTakerAssetFilledAmount\n )\n internal\n pure\n returns (LibFillResults.MatchedFillResults memory matchedFillResults);\n\n}\n",
- "2.0.0/protocol/Exchange/mixins/MSignatureValidator.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.24;\n\nimport \"../interfaces/ISignatureValidator.sol\";\n\ncontract MSignatureValidator is\n ISignatureValidator\n{\n event SignatureValidatorApproval(\n address indexed signerAddress, // Address that approves or disapproves a contract to verify signatures.\n address indexed validatorAddress, // Address of signature validator contract.\n bool approved // Approval or disapproval of validator contract.\n );\n\n // Allowed signature types.\n enum SignatureType {\n Illegal, // 0x00, default value\n Invalid, // 0x01\n EIP712, // 0x02\n EthSign, // 0x03\n Caller, // 0x04\n Wallet, // 0x05\n Validator, // 0x06\n PreSigned, // 0x07\n Trezor, // 0x08\n NSignatureTypes // 0x09, number of signature types. Always leave at end.\n }\n}\n",
- "2.0.0/protocol/Exchange/mixins/MTransactions.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*/\npragma solidity ^0.4.24;\n\nimport \"../interfaces/ITransactions.sol\";\n\ncontract MTransactions is\n ITransactions\n{\n\n /// @dev The current function will be called in the context of this address (either 0x transaction signer or `msg.sender`).\n /// If calling a fill function, this address will represent the taker.\n /// If calling a cancel function, this address will represent the maker.\n /// @return Signer of 0x transaction if entry point is `executeTransaction`.\n /// `msg.sender` if entry point is any other function.\n function getCurrentContextAddress()\n internal\n view\n returns (address);\n}\n",
- "2.0.0/tokens/ERC20Token/IERC20Token.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.24;\npragma experimental ABIEncoderV2;\n\ncontract IERC20Token {\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, uint256 _value)\n public\n returns (bool);\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, uint256 _value)\n public\n returns (bool);\n \n /// @notice `msg.sender` approves `_spender` 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, uint256 _value)\n public\n returns (bool);\n\n /// @param _owner The address from which the balance will be retrieved\n /// @return The balance\n function balanceOf(address _owner)\n public view\n returns (uint256);\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)\n public view\n returns (uint256);\n\n event Transfer(\n address indexed _from,\n address indexed _to,\n uint256 _value\n );\n \n event Approval(\n address indexed _owner,\n address indexed _spender,\n uint256 _value\n );\n}\n",
- "2.0.0/tokens/ERC721Token/IERC721Token.sol": "/*\nThe MIT License (MIT)\n\nCopyright (c) 2016 Smart Contract Solutions, Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be included\nin all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\npragma solidity ^0.4.24;\n\n/**\n * @title ERC721 Non-Fungible Token Standard basic interface\n * @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md\n * Modified from https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/token/ERC721/ERC721Basic.sol\n */\ncontract IERC721Token {\n string internal name_;\n string internal symbol_;\n\n event Transfer(\n address indexed _from,\n address indexed _to,\n uint256 _tokenId\n );\n event Approval(\n address indexed _owner,\n address indexed _approved,\n uint256 _tokenId\n );\n event ApprovalForAll(\n address indexed _owner,\n address indexed _operator,\n bool _approved\n );\n\n function name()\n public\n view\n returns (string);\n function symbol()\n public\n view\n returns (string);\n\n function balanceOf(address _owner)\n public\n view\n returns (uint256 _balance);\n function ownerOf(uint256 _tokenId)\n public\n view\n returns (address _owner);\n function exists(uint256 _tokenId)\n public\n view\n returns (bool _exists);\n\n function approve(address _to, uint256 _tokenId)\n public;\n function getApproved(uint256 _tokenId)\n public\n view\n returns (address _operator);\n\n function setApprovalForAll(address _operator, bool _approved)\n public;\n function isApprovedForAll(address _owner, address _operator)\n public\n view\n returns (bool);\n\n function transferFrom(\n address _from,\n address _to,\n uint256 _tokenId)\n public;\n function safeTransferFrom(\n address _from,\n address _to,\n uint256 _tokenId)\n public;\n function safeTransferFrom(\n address _from,\n address _to,\n uint256 _tokenId,\n bytes _data)\n public;\n}\n",
- "2.0.0/tokens/WETH9/WETH9.sol": "// Copyright (C) 2015, 2016, 2017 Dapphub\n\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see <http://www.gnu.org/licenses/>.\n\npragma solidity ^0.4.18;\n\ncontract WETH9 {\n string public name = \"Wrapped Ether\";\n string public symbol = \"WETH\";\n uint8 public decimals = 18;\n\n event Approval(address indexed src, address indexed guy, uint wad);\n event Transfer(address indexed src, address indexed dst, uint wad);\n event Deposit(address indexed dst, uint wad);\n event Withdrawal(address indexed src, uint wad);\n\n mapping (address => uint) public balanceOf;\n mapping (address => mapping (address => uint)) public allowance;\n\n function() public payable {\n deposit();\n }\n function deposit() public payable {\n balanceOf[msg.sender] += msg.value;\n Deposit(msg.sender, msg.value);\n }\n function withdraw(uint wad) public {\n require(balanceOf[msg.sender] >= wad);\n balanceOf[msg.sender] -= wad;\n msg.sender.transfer(wad);\n Withdrawal(msg.sender, wad);\n }\n\n function totalSupply() public view returns (uint) {\n return this.balance;\n }\n\n function approve(address guy, uint wad) public returns (bool) {\n allowance[msg.sender][guy] = wad;\n Approval(msg.sender, guy, wad);\n return true;\n }\n\n function transfer(address dst, uint wad) public returns (bool) {\n return transferFrom(msg.sender, dst, wad);\n }\n\n function transferFrom(address src, address dst, uint wad)\n public\n returns (bool)\n {\n require(balanceOf[src] >= wad);\n\n if (src != msg.sender && allowance[src][msg.sender] != uint(-1)) {\n require(allowance[src][msg.sender] >= wad);\n allowance[src][msg.sender] -= wad;\n }\n\n balanceOf[src] -= wad;\n balanceOf[dst] += wad;\n\n Transfer(src, dst, wad);\n\n return true;\n }\n}\n\n\n/*\n GNU GENERAL PUBLIC LICENSE\n Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n Preamble\n\n The GNU General Public License is a free, copyleft license for\nsoftware and other kinds of works.\n\n The licenses for most software and other practical works are designed\nto take away your freedom to share and change the works. By contrast,\nthe GNU General Public License is intended to guarantee your freedom to\nshare and change all versions of a program--to make sure it remains free\nsoftware for all its users. We, the Free Software Foundation, use the\nGNU General Public License for most of our software; it applies also to\nany other work released this way by its authors. You can apply it to\nyour programs, too.\n\n When we speak of free software, we are referring to freedom, not\nprice. Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthem if you wish), that you receive source code or can get it if you\nwant it, that you can change the software or use pieces of it in new\nfree programs, and that you know you can do these things.\n\n To protect your rights, we need to prevent others from denying you\nthese rights or asking you to surrender the rights. Therefore, you have\ncertain responsibilities if you distribute copies of the software, or if\nyou modify it: responsibilities to respect the freedom of others.\n\n For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must pass on to the recipients the same\nfreedoms that you received. You must make sure that they, too, receive\nor can get the source code. And you must show them these terms so they\nknow their rights.\n\n Developers that use the GNU GPL protect your rights with two steps:\n(1) assert copyright on the software, and (2) offer you this License\ngiving you legal permission to copy, distribute and/or modify it.\n\n For the developers' and authors' protection, the GPL clearly explains\nthat there is no warranty for this free software. For both users' and\nauthors' sake, the GPL requires that modified versions be marked as\nchanged, so that their problems will not be attributed erroneously to\nauthors of previous versions.\n\n Some devices are designed to deny users access to install or run\nmodified versions of the software inside them, although the manufacturer\ncan do so. This is fundamentally incompatible with the aim of\nprotecting users' freedom to change the software. The systematic\npattern of such abuse occurs in the area of products for individuals to\nuse, which is precisely where it is most unacceptable. Therefore, we\nhave designed this version of the GPL to prohibit the practice for those\nproducts. If such problems arise substantially in other domains, we\nstand ready to extend this provision to those domains in future versions\nof the GPL, as needed to protect the freedom of users.\n\n Finally, every program is threatened constantly by software patents.\nStates should not allow patents to restrict development and use of\nsoftware on general-purpose computers, but in those that do, we wish to\navoid the special danger that patents applied to a free program could\nmake it effectively proprietary. To prevent this, the GPL assures that\npatents cannot be used to render the program non-free.\n\n The precise terms and conditions for copying, distribution and\nmodification follow.\n\n TERMS AND CONDITIONS\n\n 0. Definitions.\n\n \"This License\" refers to version 3 of the GNU General Public License.\n\n \"Copyright\" also means copyright-like laws that apply to other kinds of\nworks, such as semiconductor masks.\n\n \"The Program\" refers to any copyrightable work licensed under this\nLicense. Each licensee is addressed as \"you\". \"Licensees\" and\n\"recipients\" may be individuals or organizations.\n\n To \"modify\" a work means to copy from or adapt all or part of the work\nin a fashion requiring copyright permission, other than the making of an\nexact copy. The resulting work is called a \"modified version\" of the\nearlier work or a work \"based on\" the earlier work.\n\n A \"covered work\" means either the unmodified Program or a work based\non the Program.\n\n To \"propagate\" a work means to do anything with it that, without\npermission, would make you directly or secondarily liable for\ninfringement under applicable copyright law, except executing it on a\ncomputer or modifying a private copy. Propagation includes copying,\ndistribution (with or without modification), making available to the\npublic, and in some countries other activities as well.\n\n To \"convey\" a work means any kind of propagation that enables other\nparties to make or receive copies. Mere interaction with a user through\na computer network, with no transfer of a copy, is not conveying.\n\n An interactive user interface displays \"Appropriate Legal Notices\"\nto the extent that it includes a convenient and prominently visible\nfeature that (1) displays an appropriate copyright notice, and (2)\ntells the user that there is no warranty for the work (except to the\nextent that warranties are provided), that licensees may convey the\nwork under this License, and how to view a copy of this License. If\nthe interface presents a list of user commands or options, such as a\nmenu, a prominent item in the list meets this criterion.\n\n 1. Source Code.\n\n The \"source code\" for a work means the preferred form of the work\nfor making modifications to it. \"Object code\" means any non-source\nform of a work.\n\n A \"Standard Interface\" means an interface that either is an official\nstandard defined by a recognized standards body, or, in the case of\ninterfaces specified for a particular programming language, one that\nis widely used among developers working in that language.\n\n The \"System Libraries\" of an executable work include anything, other\nthan the work as a whole, that (a) is included in the normal form of\npackaging a Major Component, but which is not part of that Major\nComponent, and (b) serves only to enable use of the work with that\nMajor Component, or to implement a Standard Interface for which an\nimplementation is available to the public in source code form. A\n\"Major Component\", in this context, means a major essential component\n(kernel, window system, and so on) of the specific operating system\n(if any) on which the executable work runs, or a compiler used to\nproduce the work, or an object code interpreter used to run it.\n\n The \"Corresponding Source\" for a work in object code form means all\nthe source code needed to generate, install, and (for an executable\nwork) run the object code and to modify the work, including scripts to\ncontrol those activities. However, it does not include the work's\nSystem Libraries, or general-purpose tools or generally available free\nprograms which are used unmodified in performing those activities but\nwhich are not part of the work. For example, Corresponding Source\nincludes interface definition files associated with source files for\nthe work, and the source code for shared libraries and dynamically\nlinked subprograms that the work is specifically designed to require,\nsuch as by intimate data communication or control flow between those\nsubprograms and other parts of the work.\n\n The Corresponding Source need not include anything that users\ncan regenerate automatically from other parts of the Corresponding\nSource.\n\n The Corresponding Source for a work in source code form is that\nsame work.\n\n 2. Basic Permissions.\n\n All rights granted under this License are granted for the term of\ncopyright on the Program, and are irrevocable provided the stated\nconditions are met. This License explicitly affirms your unlimited\npermission to run the unmodified Program. The output from running a\ncovered work is covered by this License only if the output, given its\ncontent, constitutes a covered work. This License acknowledges your\nrights of fair use or other equivalent, as provided by copyright law.\n\n You may make, run and propagate covered works that you do not\nconvey, without conditions so long as your license otherwise remains\nin force. You may convey covered works to others for the sole purpose\nof having them make modifications exclusively for you, or provide you\nwith facilities for running those works, provided that you comply with\nthe terms of this License in conveying all material for which you do\nnot control copyright. Those thus making or running the covered works\nfor you must do so exclusively on your behalf, under your direction\nand control, on terms that prohibit them from making any copies of\nyour copyrighted material outside their relationship with you.\n\n Conveying under any other circumstances is permitted solely under\nthe conditions stated below. Sublicensing is not allowed; section 10\nmakes it unnecessary.\n\n 3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n\n No covered work shall be deemed part of an effective technological\nmeasure under any applicable law fulfilling obligations under article\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\nsimilar laws prohibiting or restricting circumvention of such\nmeasures.\n\n When you convey a covered work, you waive any legal power to forbid\ncircumvention of technological measures to the extent such circumvention\nis effected by exercising rights under this License with respect to\nthe covered work, and you disclaim any intention to limit operation or\nmodification of the work as a means of enforcing, against the work's\nusers, your or third parties' legal rights to forbid circumvention of\ntechnological measures.\n\n 4. Conveying Verbatim Copies.\n\n You may convey verbatim copies of the Program's source code as you\nreceive it, in any medium, provided that you conspicuously and\nappropriately publish on each copy an appropriate copyright notice;\nkeep intact all notices stating that this License and any\nnon-permissive terms added in accord with section 7 apply to the code;\nkeep intact all notices of the absence of any warranty; and give all\nrecipients a copy of this License along with the Program.\n\n You may charge any price or no price for each copy that you convey,\nand you may offer support or warranty protection for a fee.\n\n 5. Conveying Modified Source Versions.\n\n You may convey a work based on the Program, or the modifications to\nproduce it from the Program, in the form of source code under the\nterms of section 4, provided that you also meet all of these conditions:\n\n a) The work must carry prominent notices stating that you modified\n it, and giving a relevant date.\n\n b) The work must carry prominent notices stating that it is\n released under this License and any conditions added under section\n 7. This requirement modifies the requirement in section 4 to\n \"keep intact all notices\".\n\n c) You must license the entire work, as a whole, under this\n License to anyone who comes into possession of a copy. This\n License will therefore apply, along with any applicable section 7\n additional terms, to the whole of the work, and all its parts,\n regardless of how they are packaged. This License gives no\n permission to license the work in any other way, but it does not\n invalidate such permission if you have separately received it.\n\n d) If the work has interactive user interfaces, each must display\n Appropriate Legal Notices; however, if the Program has interactive\n interfaces that do not display Appropriate Legal Notices, your\n work need not make them do so.\n\n A compilation of a covered work with other separate and independent\nworks, which are not by their nature extensions of the covered work,\nand which are not combined with it such as to form a larger program,\nin or on a volume of a storage or distribution medium, is called an\n\"aggregate\" if the compilation and its resulting copyright are not\nused to limit the access or legal rights of the compilation's users\nbeyond what the individual works permit. Inclusion of a covered work\nin an aggregate does not cause this License to apply to the other\nparts of the aggregate.\n\n 6. Conveying Non-Source Forms.\n\n You may convey a covered work in object code form under the terms\nof sections 4 and 5, provided that you also convey the\nmachine-readable Corresponding Source under the terms of this License,\nin one of these ways:\n\n a) Convey the object code in, or embodied in, a physical product\n (including a physical distribution medium), accompanied by the\n Corresponding Source fixed on a durable physical medium\n customarily used for software interchange.\n\n b) Convey the object code in, or embodied in, a physical product\n (including a physical distribution medium), accompanied by a\n written offer, valid for at least three years and valid for as\n long as you offer spare parts or customer support for that product\n model, to give anyone who possesses the object code either (1) a\n copy of the Corresponding Source for all the software in the\n product that is covered by this License, on a durable physical\n medium customarily used for software interchange, for a price no\n more than your reasonable cost of physically performing this\n conveying of source, or (2) access to copy the\n Corresponding Source from a network server at no charge.\n\n c) Convey individual copies of the object code with a copy of the\n written offer to provide the Corresponding Source. This\n alternative is allowed only occasionally and noncommercially, and\n only if you received the object code with such an offer, in accord\n with subsection 6b.\n\n d) Convey the object code by offering access from a designated\n place (gratis or for a charge), and offer equivalent access to the\n Corresponding Source in the same way through the same place at no\n further charge. You need not require recipients to copy the\n Corresponding Source along with the object code. If the place to\n copy the object code is a network server, the Corresponding Source\n may be on a different server (operated by you or a third party)\n that supports equivalent copying facilities, provided you maintain\n clear directions next to the object code saying where to find the\n Corresponding Source. Regardless of what server hosts the\n Corresponding Source, you remain obligated to ensure that it is\n available for as long as needed to satisfy these requirements.\n\n e) Convey the object code using peer-to-peer transmission, provided\n you inform other peers where the object code and Corresponding\n Source of the work are being offered to the general public at no\n charge under subsection 6d.\n\n A separable portion of the object code, whose source code is excluded\nfrom the Corresponding Source as a System Library, need not be\nincluded in conveying the object code work.\n\n A \"User Product\" is either (1) a \"consumer product\", which means any\ntangible personal property which is normally used for personal, family,\nor household purposes, or (2) anything designed or sold for incorporation\ninto a dwelling. In determining whether a product is a consumer product,\ndoubtful cases shall be resolved in favor of coverage. For a particular\nproduct received by a particular user, \"normally used\" refers to a\ntypical or common use of that class of product, regardless of the status\nof the particular user or of the way in which the particular user\nactually uses, or expects or is expected to use, the product. A product\nis a consumer product regardless of whether the product has substantial\ncommercial, industrial or non-consumer uses, unless such uses represent\nthe only significant mode of use of the product.\n\n \"Installation Information\" for a User Product means any methods,\nprocedures, authorization keys, or other information required to install\nand execute modified versions of a covered work in that User Product from\na modified version of its Corresponding Source. The information must\nsuffice to ensure that the continued functioning of the modified object\ncode is in no case prevented or interfered with solely because\nmodification has been made.\n\n If you convey an object code work under this section in, or with, or\nspecifically for use in, a User Product, and the conveying occurs as\npart of a transaction in which the right of possession and use of the\nUser Product is transferred to the recipient in perpetuity or for a\nfixed term (regardless of how the transaction is characterized), the\nCorresponding Source conveyed under this section must be accompanied\nby the Installation Information. But this requirement does not apply\nif neither you nor any third party retains the ability to install\nmodified object code on the User Product (for example, the work has\nbeen installed in ROM).\n\n The requirement to provide Installation Information does not include a\nrequirement to continue to provide support service, warranty, or updates\nfor a work that has been modified or installed by the recipient, or for\nthe User Product in which it has been modified or installed. Access to a\nnetwork may be denied when the modification itself materially and\nadversely affects the operation of the network or violates the rules and\nprotocols for communication across the network.\n\n Corresponding Source conveyed, and Installation Information provided,\nin accord with this section must be in a format that is publicly\ndocumented (and with an implementation available to the public in\nsource code form), and must require no special password or key for\nunpacking, reading or copying.\n\n 7. Additional Terms.\n\n \"Additional permissions\" are terms that supplement the terms of this\nLicense by making exceptions from one or more of its conditions.\nAdditional permissions that are applicable to the entire Program shall\nbe treated as though they were included in this License, to the extent\nthat they are valid under applicable law. If additional permissions\napply only to part of the Program, that part may be used separately\nunder those permissions, but the entire Program remains governed by\nthis License without regard to the additional permissions.\n\n When you convey a copy of a covered work, you may at your option\nremove any additional permissions from that copy, or from any part of\nit. (Additional permissions may be written to require their own\nremoval in certain cases when you modify the work.) You may place\nadditional permissions on material, added by you to a covered work,\nfor which you have or can give appropriate copyright permission.\n\n Notwithstanding any other provision of this License, for material you\nadd to a covered work, you may (if authorized by the copyright holders of\nthat material) supplement the terms of this License with terms:\n\n a) Disclaiming warranty or limiting liability differently from the\n terms of sections 15 and 16 of this License; or\n\n b) Requiring preservation of specified reasonable legal notices or\n author attributions in that material or in the Appropriate Legal\n Notices displayed by works containing it; or\n\n c) Prohibiting misrepresentation of the origin of that material, or\n requiring that modified versions of such material be marked in\n reasonable ways as different from the original version; or\n\n d) Limiting the use for publicity purposes of names of licensors or\n authors of the material; or\n\n e) Declining to grant rights under trademark law for use of some\n trade names, trademarks, or service marks; or\n\n f) Requiring indemnification of licensors and authors of that\n material by anyone who conveys the material (or modified versions of\n it) with contractual assumptions of liability to the recipient, for\n any liability that these contractual assumptions directly impose on\n those licensors and authors.\n\n All other non-permissive additional terms are considered \"further\nrestrictions\" within the meaning of section 10. If the Program as you\nreceived it, or any part of it, contains a notice stating that it is\ngoverned by this License along with a term that is a further\nrestriction, you may remove that term. If a license document contains\na further restriction but permits relicensing or conveying under this\nLicense, you may add to a covered work material governed by the terms\nof that license document, provided that the further restriction does\nnot survive such relicensing or conveying.\n\n If you add terms to a covered work in accord with this section, you\nmust place, in the relevant source files, a statement of the\nadditional terms that apply to those files, or a notice indicating\nwhere to find the applicable terms.\n\n Additional terms, permissive or non-permissive, may be stated in the\nform of a separately written license, or stated as exceptions;\nthe above requirements apply either way.\n\n 8. Termination.\n\n You may not propagate or modify a covered work except as expressly\nprovided under this License. Any attempt otherwise to propagate or\nmodify it is void, and will automatically terminate your rights under\nthis License (including any patent licenses granted under the third\nparagraph of section 11).\n\n However, if you cease all violation of this License, then your\nlicense from a particular copyright holder is reinstated (a)\nprovisionally, unless and until the copyright holder explicitly and\nfinally terminates your license, and (b) permanently, if the copyright\nholder fails to notify you of the violation by some reasonable means\nprior to 60 days after the cessation.\n\n Moreover, your license from a particular copyright holder is\nreinstated permanently if the copyright holder notifies you of the\nviolation by some reasonable means, this is the first time you have\nreceived notice of violation of this License (for any work) from that\ncopyright holder, and you cure the violation prior to 30 days after\nyour receipt of the notice.\n\n Termination of your rights under this section does not terminate the\nlicenses of parties who have received copies or rights from you under\nthis License. If your rights have been terminated and not permanently\nreinstated, you do not qualify to receive new licenses for the same\nmaterial under section 10.\n\n 9. Acceptance Not Required for Having Copies.\n\n You are not required to accept this License in order to receive or\nrun a copy of the Program. Ancillary propagation of a covered work\noccurring solely as a consequence of using peer-to-peer transmission\nto receive a copy likewise does not require acceptance. However,\nnothing other than this License grants you permission to propagate or\nmodify any covered work. These actions infringe copyright if you do\nnot accept this License. Therefore, by modifying or propagating a\ncovered work, you indicate your acceptance of this License to do so.\n\n 10. Automatic Licensing of Downstream Recipients.\n\n Each time you convey a covered work, the recipient automatically\nreceives a license from the original licensors, to run, modify and\npropagate that work, subject to this License. You are not responsible\nfor enforcing compliance by third parties with this License.\n\n An \"entity transaction\" is a transaction transferring control of an\norganization, or substantially all assets of one, or subdividing an\norganization, or merging organizations. If propagation of a covered\nwork results from an entity transaction, each party to that\ntransaction who receives a copy of the work also receives whatever\nlicenses to the work the party's predecessor in interest had or could\ngive under the previous paragraph, plus a right to possession of the\nCorresponding Source of the work from the predecessor in interest, if\nthe predecessor has it or can get it with reasonable efforts.\n\n You may not impose any further restrictions on the exercise of the\nrights granted or affirmed under this License. For example, you may\nnot impose a license fee, royalty, or other charge for exercise of\nrights granted under this License, and you may not initiate litigation\n(including a cross-claim or counterclaim in a lawsuit) alleging that\nany patent claim is infringed by making, using, selling, offering for\nsale, or importing the Program or any portion of it.\n\n 11. Patents.\n\n A \"contributor\" is a copyright holder who authorizes use under this\nLicense of the Program or a work on which the Program is based. The\nwork thus licensed is called the contributor's \"contributor version\".\n\n A contributor's \"essential patent claims\" are all patent claims\nowned or controlled by the contributor, whether already acquired or\nhereafter acquired, that would be infringed by some manner, permitted\nby this License, of making, using, or selling its contributor version,\nbut do not include claims that would be infringed only as a\nconsequence of further modification of the contributor version. For\npurposes of this definition, \"control\" includes the right to grant\npatent sublicenses in a manner consistent with the requirements of\nthis License.\n\n Each contributor grants you a non-exclusive, worldwide, royalty-free\npatent license under the contributor's essential patent claims, to\nmake, use, sell, offer for sale, import and otherwise run, modify and\npropagate the contents of its contributor version.\n\n In the following three paragraphs, a \"patent license\" is any express\nagreement or commitment, however denominated, not to enforce a patent\n(such as an express permission to practice a patent or covenant not to\nsue for patent infringement). To \"grant\" such a patent license to a\nparty means to make such an agreement or commitment not to enforce a\npatent against the party.\n\n If you convey a covered work, knowingly relying on a patent license,\nand the Corresponding Source of the work is not available for anyone\nto copy, free of charge and under the terms of this License, through a\npublicly available network server or other readily accessible means,\nthen you must either (1) cause the Corresponding Source to be so\navailable, or (2) arrange to deprive yourself of the benefit of the\npatent license for this particular work, or (3) arrange, in a manner\nconsistent with the requirements of this License, to extend the patent\nlicense to downstream recipients. \"Knowingly relying\" means you have\nactual knowledge that, but for the patent license, your conveying the\ncovered work in a country, or your recipient's use of the covered work\nin a country, would infringe one or more identifiable patents in that\ncountry that you have reason to believe are valid.\n\n If, pursuant to or in connection with a single transaction or\narrangement, you convey, or propagate by procuring conveyance of, a\ncovered work, and grant a patent license to some of the parties\nreceiving the covered work authorizing them to use, propagate, modify\nor convey a specific copy of the covered work, then the patent license\nyou grant is automatically extended to all recipients of the covered\nwork and works based on it.\n\n A patent license is \"discriminatory\" if it does not include within\nthe scope of its coverage, prohibits the exercise of, or is\nconditioned on the non-exercise of one or more of the rights that are\nspecifically granted under this License. You may not convey a covered\nwork if you are a party to an arrangement with a third party that is\nin the business of distributing software, under which you make payment\nto the third party based on the extent of your activity of conveying\nthe work, and under which the third party grants, to any of the\nparties who would receive the covered work from you, a discriminatory\npatent license (a) in connection with copies of the covered work\nconveyed by you (or copies made from those copies), or (b) primarily\nfor and in connection with specific products or compilations that\ncontain the covered work, unless you entered into that arrangement,\nor that patent license was granted, prior to 28 March 2007.\n\n Nothing in this License shall be construed as excluding or limiting\nany implied license or other defenses to infringement that may\notherwise be available to you under applicable patent law.\n\n 12. No Surrender of Others' Freedom.\n\n If conditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License. If you cannot convey a\ncovered work so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you may\nnot convey it at all. For example, if you agree to terms that obligate you\nto collect a royalty for further conveying from those to whom you convey\nthe Program, the only way you could satisfy both those terms and this\nLicense would be to refrain entirely from conveying the Program.\n\n 13. Use with the GNU Affero General Public License.\n\n Notwithstanding any other provision of this License, you have\npermission to link or combine any covered work with a work licensed\nunder version 3 of the GNU Affero General Public License into a single\ncombined work, and to convey the resulting work. The terms of this\nLicense will continue to apply to the part which is the covered work,\nbut the special requirements of the GNU Affero General Public License,\nsection 13, concerning interaction through a network will apply to the\ncombination as such.\n\n 14. Revised Versions of this License.\n\n The Free Software Foundation may publish revised and/or new versions of\nthe GNU General Public License from time to time. Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\n Each version is given a distinguishing version number. If the\nProgram specifies that a certain numbered version of the GNU General\nPublic License \"or any later version\" applies to it, you have the\noption of following the terms and conditions either of that numbered\nversion or of any later version published by the Free Software\nFoundation. If the Program does not specify a version number of the\nGNU General Public License, you may choose any version ever published\nby the Free Software Foundation.\n\n If the Program specifies that a proxy can decide which future\nversions of the GNU General Public License can be used, that proxy's\npublic statement of acceptance of a version permanently authorizes you\nto choose that version for the Program.\n\n Later license versions may give you additional or different\npermissions. However, no additional obligations are imposed on any\nauthor or copyright holder as a result of your choosing to follow a\nlater version.\n\n 15. Disclaimer of Warranty.\n\n THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\nAPPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\nIS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n 16. Limitation of Liability.\n\n IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGES.\n\n 17. Interpretation of Sections 15 and 16.\n\n If the disclaimer of warranty and limitation of liability provided\nabove cannot be given local legal effect according to their terms,\nreviewing courts shall apply local law that most closely approximates\nan absolute waiver of all civil liability in connection with the\nProgram, unless a warranty or assumption of liability accompanies a\ncopy of the Program in return for a fee.\n\n END OF TERMS AND CONDITIONS\n\n How to Apply These Terms to Your New Programs\n\n If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n To do so, attach the following notices to the program. It is safest\nto attach them to the start of each source file to most effectively\nstate the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n <one line to give the program's name and a brief idea of what it does.>\n Copyright (C) <year> <name of author>\n\n This program is free software: you can redistribute it and/or modify\n it under the terms of the GNU General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n This program is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License\n along with this program. If not, see <http://www.gnu.org/licenses/>.\n\nAlso add information on how to contact you by electronic and paper mail.\n\n If the program does terminal interaction, make it output a short\nnotice like this when it starts in an interactive mode:\n\n <program> Copyright (C) <year> <name of author>\n This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n This is free software, and you are welcome to redistribute it\n under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate\nparts of the General Public License. Of course, your program's commands\nmight be different; for a GUI interface, you would use an \"about box\".\n\n You should also get your employer (if you work as a programmer) or school,\nif any, to sign a \"copyright disclaimer\" for the program, if necessary.\nFor more information on this, and how to apply and follow the GNU GPL, see\n<http://www.gnu.org/licenses/>.\n\n The GNU General Public License does not permit incorporating your program\ninto proprietary programs. If your program is a subroutine library, you\nmay consider it more useful to permit linking proprietary applications with\nthe library. If this is what you want to do, use the GNU Lesser General\nPublic License instead of this License. But first, please read\n<http://www.gnu.org/philosophy/why-not-lgpl.html>.\n\n*/\n",
- "2.0.0/utils/LibBytes/LibBytes.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.24;\n\nlibrary LibBytes {\n\n using LibBytes for bytes;\n\n /// @dev Gets the memory address for a byte array.\n /// @param input Byte array to lookup.\n /// @return memoryAddress Memory address of byte array. This\n /// points to the header of the byte array which contains\n /// the length.\n function rawAddress(bytes memory input)\n internal\n pure\n returns (uint256 memoryAddress)\n {\n assembly {\n memoryAddress := input\n }\n return memoryAddress;\n }\n \n /// @dev Gets the memory address for the contents of a byte array.\n /// @param input Byte array to lookup.\n /// @return memoryAddress Memory address of the contents of the byte array.\n function contentAddress(bytes memory input)\n internal\n pure\n returns (uint256 memoryAddress)\n {\n assembly {\n memoryAddress := add(input, 32)\n }\n return memoryAddress;\n }\n\n /// @dev Copies `length` bytes from memory location `source` to `dest`.\n /// @param dest memory address to copy bytes to.\n /// @param source memory address to copy bytes from.\n /// @param length number of bytes to copy.\n function memCopy(\n uint256 dest,\n uint256 source,\n uint256 length\n )\n internal\n pure\n {\n if (length < 32) {\n // Handle a partial word by reading destination and masking\n // off the bits we are interested in.\n // This correctly handles overlap, zero lengths and source == dest\n assembly {\n let mask := sub(exp(256, sub(32, length)), 1)\n let s := and(mload(source), not(mask))\n let d := and(mload(dest), mask)\n mstore(dest, or(s, d))\n }\n } else {\n // Skip the O(length) loop when source == dest.\n if (source == dest) {\n return;\n }\n\n // For large copies we copy whole words at a time. The final\n // word is aligned to the end of the range (instead of after the\n // previous) to handle partial words. So a copy will look like this:\n //\n // ####\n // ####\n // ####\n // ####\n //\n // We handle overlap in the source and destination range by\n // changing the copying direction. This prevents us from\n // overwriting parts of source that we still need to copy.\n //\n // This correctly handles source == dest\n //\n if (source > dest) {\n assembly {\n // We subtract 32 from `sEnd` and `dEnd` because it\n // is easier to compare with in the loop, and these\n // are also the addresses we need for copying the\n // last bytes.\n length := sub(length, 32)\n let sEnd := add(source, length)\n let dEnd := add(dest, length)\n\n // Remember the last 32 bytes of source\n // This needs to be done here and not after the loop\n // because we may have overwritten the last bytes in\n // source already due to overlap.\n let last := mload(sEnd)\n\n // Copy whole words front to back\n // Note: the first check is always true,\n // this could have been a do-while loop.\n for {} lt(source, sEnd) {} {\n mstore(dest, mload(source))\n source := add(source, 32)\n dest := add(dest, 32)\n }\n \n // Write the last 32 bytes\n mstore(dEnd, last)\n }\n } else {\n assembly {\n // We subtract 32 from `sEnd` and `dEnd` because those\n // are the starting points when copying a word at the end.\n length := sub(length, 32)\n let sEnd := add(source, length)\n let dEnd := add(dest, length)\n\n // Remember the first 32 bytes of source\n // This needs to be done here and not after the loop\n // because we may have overwritten the first bytes in\n // source already due to overlap.\n let first := mload(source)\n\n // Copy whole words back to front\n // We use a signed comparisson here to allow dEnd to become\n // negative (happens when source and dest < 32). Valid\n // addresses in local memory will never be larger than\n // 2**255, so they can be safely re-interpreted as signed.\n // Note: the first check is always true,\n // this could have been a do-while loop.\n for {} slt(dest, dEnd) {} {\n mstore(dEnd, mload(sEnd))\n sEnd := sub(sEnd, 32)\n dEnd := sub(dEnd, 32)\n }\n \n // Write the first 32 bytes\n mstore(dest, first)\n }\n }\n }\n }\n \n /// @dev Returns a slices from a byte array.\n /// @param b The byte array to take a slice from.\n /// @param from The starting index for the slice (inclusive).\n /// @param to The final index for the slice (exclusive).\n /// @return result The slice containing bytes at indices [from, to)\n function slice(bytes memory b, uint256 from, uint256 to)\n internal\n pure\n returns (bytes memory result)\n {\n require(\n from <= to,\n \"FROM_LESS_THAN_TO_REQUIRED\"\n );\n require(\n to < b.length,\n \"TO_LESS_THAN_LENGTH_REQUIRED\"\n );\n \n // Create a new bytes structure and copy contents\n result = new bytes(to - from);\n memCopy(\n result.contentAddress(),\n b.contentAddress() + from,\n result.length);\n return result;\n }\n \n /// @dev Returns a slice from a byte array without preserving the input.\n /// @param b The byte array to take a slice from. Will be destroyed in the process.\n /// @param from The starting index for the slice (inclusive).\n /// @param to The final index for the slice (exclusive).\n /// @return result The slice containing bytes at indices [from, to)\n /// @dev When `from == 0`, the original array will match the slice. In other cases its state will be corrupted.\n function sliceDestructive(bytes memory b, uint256 from, uint256 to)\n internal\n pure\n returns (bytes memory result)\n {\n require(\n from <= to,\n \"FROM_LESS_THAN_TO_REQUIRED\"\n );\n require(\n to < b.length,\n \"TO_LESS_THAN_LENGTH_REQUIRED\"\n );\n \n // Create a new bytes structure around [from, to) in-place.\n assembly {\n result := add(b, from)\n mstore(result, sub(to, from))\n }\n return result;\n }\n\n /// @dev Pops the last byte off of a byte array by modifying its length.\n /// @param b Byte array that will be modified.\n /// @return The byte that was popped off.\n function popLastByte(bytes memory b)\n internal\n pure\n returns (bytes1 result)\n {\n require(\n b.length > 0,\n \"GREATER_THAN_ZERO_LENGTH_REQUIRED\"\n );\n\n // Store last byte.\n result = b[b.length - 1];\n\n assembly {\n // Decrement length of byte array.\n let newLen := sub(mload(b), 1)\n mstore(b, newLen)\n }\n return result;\n }\n\n /// @dev Pops the last 20 bytes off of a byte array by modifying its length.\n /// @param b Byte array that will be modified.\n /// @return The 20 byte address that was popped off.\n function popLast20Bytes(bytes memory b)\n internal\n pure\n returns (address result)\n {\n require(\n b.length >= 20,\n \"GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\"\n );\n\n // Store last 20 bytes.\n result = readAddress(b, b.length - 20);\n\n assembly {\n // Subtract 20 from byte array length.\n let newLen := sub(mload(b), 20)\n mstore(b, newLen)\n }\n return result;\n }\n\n /// @dev Tests equality of two byte arrays.\n /// @param lhs First byte array to compare.\n /// @param rhs Second byte array to compare.\n /// @return True if arrays are the same. False otherwise.\n function equals(\n bytes memory lhs,\n bytes memory rhs\n )\n internal\n pure\n returns (bool equal)\n {\n // Keccak gas cost is 30 + numWords * 6. This is a cheap way to compare.\n // We early exit on unequal lengths, but keccak would also correctly\n // handle this.\n return lhs.length == rhs.length && keccak256(lhs) == keccak256(rhs);\n }\n\n /// @dev Reads an address from a position in a byte array.\n /// @param b Byte array containing an address.\n /// @param index Index in byte array of address.\n /// @return address from byte array.\n function readAddress(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (address result)\n {\n require(\n b.length >= index + 20, // 20 is length of address\n \"GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\"\n );\n\n // Add offset to index:\n // 1. Arrays are prefixed by 32-byte length parameter (add 32 to index)\n // 2. Account for size difference between address length and 32-byte storage word (subtract 12 from index)\n index += 20;\n\n // Read address from array memory\n assembly {\n // 1. Add index to address of bytes array\n // 2. Load 32-byte word from memory\n // 3. Apply 20-byte mask to obtain address\n result := and(mload(add(b, index)), 0xffffffffffffffffffffffffffffffffffffffff)\n }\n return result;\n }\n\n /// @dev Writes an address into a specific position in a byte array.\n /// @param b Byte array to insert address into.\n /// @param index Index in byte array of address.\n /// @param input Address to put into byte array.\n function writeAddress(\n bytes memory b,\n uint256 index,\n address input\n )\n internal\n pure\n {\n require(\n b.length >= index + 20, // 20 is length of address\n \"GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\"\n );\n\n // Add offset to index:\n // 1. Arrays are prefixed by 32-byte length parameter (add 32 to index)\n // 2. Account for size difference between address length and 32-byte storage word (subtract 12 from index)\n index += 20;\n\n // Store address into array memory\n assembly {\n // The address occupies 20 bytes and mstore stores 32 bytes.\n // First fetch the 32-byte word where we'll be storing the address, then\n // apply a mask so we have only the bytes in the word that the address will not occupy.\n // Then combine these bytes with the address and store the 32 bytes back to memory with mstore.\n\n // 1. Add index to address of bytes array\n // 2. Load 32-byte word from memory\n // 3. Apply 12-byte mask to obtain extra bytes occupying word of memory where we'll store the address\n let neighbors := and(mload(add(b, index)), 0xffffffffffffffffffffffff0000000000000000000000000000000000000000)\n \n // Make sure input address is clean.\n // (Solidity does not guarantee this)\n input := and(input, 0xffffffffffffffffffffffffffffffffffffffff)\n\n // Store the neighbors and address into memory\n mstore(add(b, index), xor(input, neighbors))\n }\n }\n\n /// @dev Reads a bytes32 value from a position in a byte array.\n /// @param b Byte array containing a bytes32 value.\n /// @param index Index in byte array of bytes32 value.\n /// @return bytes32 value from byte array.\n function readBytes32(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (bytes32 result)\n {\n require(\n b.length >= index + 32,\n \"GREATER_OR_EQUAL_TO_32_LENGTH_REQUIRED\"\n );\n\n // Arrays are prefixed by a 256 bit length parameter\n index += 32;\n\n // Read the bytes32 from array memory\n assembly {\n result := mload(add(b, index))\n }\n return result;\n }\n\n /// @dev Writes a bytes32 into a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input bytes32 to put into byte array.\n function writeBytes32(\n bytes memory b,\n uint256 index,\n bytes32 input\n )\n internal\n pure\n {\n require(\n b.length >= index + 32,\n \"GREATER_OR_EQUAL_TO_32_LENGTH_REQUIRED\"\n );\n\n // Arrays are prefixed by a 256 bit length parameter\n index += 32;\n\n // Read the bytes32 from array memory\n assembly {\n mstore(add(b, index), input)\n }\n }\n\n /// @dev Reads a uint256 value from a position in a byte array.\n /// @param b Byte array containing a uint256 value.\n /// @param index Index in byte array of uint256 value.\n /// @return uint256 value from byte array.\n function readUint256(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (uint256 result)\n {\n return uint256(readBytes32(b, index));\n }\n\n /// @dev Writes a uint256 into a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input uint256 to put into byte array.\n function writeUint256(\n bytes memory b,\n uint256 index,\n uint256 input\n )\n internal\n pure\n {\n writeBytes32(b, index, bytes32(input));\n }\n\n /// @dev Reads an unpadded bytes4 value from a position in a byte array.\n /// @param b Byte array containing a bytes4 value.\n /// @param index Index in byte array of bytes4 value.\n /// @return bytes4 value from byte array.\n function readBytes4(\n bytes memory b,\n uint256 index)\n internal\n pure\n returns (bytes4 result)\n {\n require(\n b.length >= index + 4,\n \"GREATER_OR_EQUAL_TO_4_LENGTH_REQUIRED\"\n );\n assembly {\n result := mload(add(b, 32))\n // Solidity does not require us to clean the trailing bytes.\n // We do it anyway\n result := and(result, 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000)\n }\n return result;\n }\n\n /// @dev Reads nested bytes from a specific position.\n /// @dev NOTE: the returned value overlaps with the input value.\n /// Both should be treated as immutable.\n /// @param b Byte array containing nested bytes.\n /// @param index Index of nested bytes.\n /// @return result Nested bytes.\n function readBytesWithLength(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (bytes memory result)\n {\n // Read length of nested bytes\n uint256 nestedBytesLength = readUint256(b, index);\n index += 32;\n\n // Assert length of <b> is valid, given\n // length of nested bytes\n require(\n b.length >= index + nestedBytesLength,\n \"GREATER_OR_EQUAL_TO_NESTED_BYTES_LENGTH_REQUIRED\"\n );\n \n // Return a pointer to the byte array as it exists inside `b`\n assembly {\n result := add(b, index)\n }\n return result;\n }\n\n /// @dev Inserts bytes at a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input bytes to insert.\n function writeBytesWithLength(\n bytes memory b,\n uint256 index,\n bytes memory input\n )\n internal\n pure\n {\n // Assert length of <b> is valid, given\n // length of input\n require(\n b.length >= index + 32 /* 32 bytes to store length */ + input.length,\n \"GREATER_OR_EQUAL_TO_NESTED_BYTES_LENGTH_REQUIRED\"\n );\n\n // Copy <input> into <b>\n memCopy(\n b.contentAddress() + index,\n input.rawAddress(), // includes length of <input>\n input.length + 32 // +32 bytes to store <input> length\n );\n }\n\n /// @dev Performs a deep copy of a byte array onto another byte array of greater than or equal length.\n /// @param dest Byte array that will be overwritten with source bytes.\n /// @param source Byte array to copy onto dest bytes.\n function deepCopyBytes(\n bytes memory dest,\n bytes memory source\n )\n internal\n pure\n {\n uint256 sourceLen = source.length;\n // Dest length must be >= source length, or some bytes would not be copied.\n require(\n dest.length >= sourceLen,\n \"GREATER_OR_EQUAL_TO_SOURCE_BYTES_LENGTH_REQUIRED\"\n );\n memCopy(\n dest.contentAddress(),\n source.contentAddress(),\n sourceLen\n );\n }\n}\n",
- "2.0.0/utils/Ownable/IOwnable.sol": "pragma solidity ^0.4.24;\npragma experimental ABIEncoderV2;\n\n/*\n * Ownable\n *\n * Base contract with an owner.\n * Provides onlyOwner modifier, which prevents function from running if it is called by anyone other than the owner.\n */\n\ncontract IOwnable {\n function transferOwnership(address newOwner)\n public;\n}\n",
- "2.0.0/utils/Ownable/Ownable.sol": "pragma solidity ^0.4.24;\npragma experimental ABIEncoderV2;\n\n/*\n * Ownable\n *\n * Base contract with an owner.\n * Provides onlyOwner modifier, which prevents function from running if it is called by anyone other than the owner.\n */\n\nimport \"./IOwnable.sol\";\n\ncontract Ownable is IOwnable {\n address public owner;\n\n constructor ()\n public\n {\n owner = msg.sender;\n }\n\n modifier onlyOwner() {\n require(\n msg.sender == owner,\n \"ONLY_CONTRACT_OWNER\"\n );\n _;\n }\n\n function transferOwnership(address newOwner)\n public\n onlyOwner\n {\n if (newOwner != address(0)) {\n owner = newOwner;\n }\n }\n}\n",
- "2.0.0/utils/SafeMath/SafeMath.sol": "pragma solidity ^0.4.24;\npragma experimental ABIEncoderV2;\n\ncontract SafeMath {\n function safeMul(uint a, uint b)\n internal\n pure\n returns (uint256)\n {\n uint c = a * b;\n assert(a == 0 || c / a == b);\n return c;\n }\n\n function safeDiv(uint a, uint b)\n internal\n pure\n returns (uint256)\n {\n uint c = a / b;\n return c;\n }\n\n function safeSub(uint a, uint b)\n internal\n pure\n returns (uint256)\n {\n assert(b <= a);\n return a - b;\n }\n\n function safeAdd(uint a, uint b)\n internal\n pure\n returns (uint256)\n {\n uint c = a + b;\n assert(c >= a);\n return c;\n }\n\n function max64(uint64 a, uint64 b)\n internal\n pure\n returns (uint256)\n {\n return a >= b ? a : b;\n }\n\n function min64(uint64 a, uint64 b)\n internal\n pure\n returns (uint256)\n {\n return a < b ? a : b;\n }\n\n function max256(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n return a >= b ? a : b;\n }\n\n function min256(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n return a < b ? a : b;\n }\n}\n"
+ "2.0.0/forwarder/Forwarder.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"./MixinFees.sol\";\nimport \"./MixinForwarderCore.sol\";\nimport \"./MixinConstants.sol\";\nimport \"./MixinMarketBuyZrx.sol\";\nimport \"./MixinExpectedResults.sol\";\nimport \"./MixinTransfer.sol\";\n\n\ncontract Forwarder is\n MixinConstants,\n MixinExpectedResults,\n MixinFees,\n MixinMarketBuyZrx,\n MixinTransfer,\n MixinForwarderCore\n{\n\n constructor (\n address _exchange,\n address _etherToken,\n address _zrxToken,\n bytes memory _zrxAssetData,\n bytes memory _wethAssetData\n )\n public\n MixinConstants(\n _exchange,\n _etherToken,\n _zrxToken,\n _zrxAssetData,\n _wethAssetData\n )\n MixinForwarderCore()\n {}\n}\n",
+ "2.0.0/forwarder/MixinConstants.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.24;\n\nimport \"./mixins/MConstants.sol\";\n\n\ncontract MixinConstants is\n MConstants\n{\n\n constructor (\n address _exchange,\n address _etherToken,\n address _zrxToken,\n bytes memory _zrxAssetData,\n bytes memory _wethAssetData\n )\n public\n {\n EXCHANGE = IExchange(_exchange);\n ETHER_TOKEN = IEtherToken(_etherToken);\n ZRX_TOKEN = IERC20Token(_zrxToken);\n ZRX_ASSET_DATA = _zrxAssetData;\n WETH_ASSET_DATA = _wethAssetData;\n }\n}\n",
+ "2.0.0/forwarder/MixinExpectedResults.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../utils/LibBytes/LibBytes.sol\";\nimport \"../protocol/Exchange/libs/LibFillResults.sol\";\nimport \"../protocol/Exchange/libs/LibMath.sol\";\nimport \"../protocol/Exchange/libs/LibOrder.sol\";\nimport \"./mixins/MConstants.sol\";\nimport \"./mixins/MExpectedResults.sol\";\n\n\ncontract MixinExpectedResults is\n LibMath,\n LibFillResults,\n MConstants,\n MExpectedResults\n{\n\n /// @dev Calculates a total FillResults for buying makerAssetFillAmount over all orders.\n /// Including the fees required to be paid. \n /// @param orders An array of Order struct containing order specifications.\n /// @param makerAssetFillAmount A number representing the amount of this order to fill.\n /// @return totalFillResults Amounts filled and fees paid by maker and taker.\n function calculateMarketBuyResults(\n LibOrder.Order[] memory orders,\n uint256 makerAssetFillAmount\n )\n public\n view\n returns (FillResults memory totalFillResults)\n {\n for (uint256 i = 0; i < orders.length; i++) {\n uint256 remainingMakerAssetFillAmount = safeSub(makerAssetFillAmount, totalFillResults.makerAssetFilledAmount);\n uint256 remainingTakerAssetFillAmount = getPartialAmount(\n orders[i].takerAssetAmount,\n orders[i].makerAssetAmount,\n remainingMakerAssetFillAmount\n );\n FillResults memory singleFillResult = calculateFillResults(orders[i], remainingTakerAssetFillAmount);\n addFillResults(totalFillResults, singleFillResult);\n if (totalFillResults.makerAssetFilledAmount == makerAssetFillAmount) {\n break;\n }\n }\n return totalFillResults;\n }\n\n /// @dev Calculates a FillResults total for selling takerAssetFillAmount over all orders. \n /// Including the fees required to be paid. \n /// @param orders An array of Order struct containing order specifications.\n /// @param takerAssetFillAmount A number representing the amount of this order to fill.\n /// @return totalFillResults Amounts filled and fees paid by maker and taker.\n function calculateMarketSellResults(\n LibOrder.Order[] memory orders,\n uint256 takerAssetFillAmount\n )\n public\n view\n returns (FillResults memory totalFillResults)\n {\n for (uint256 i = 0; i < orders.length; i++) {\n uint256 remainingTakerAssetFillAmount = safeSub(takerAssetFillAmount, totalFillResults.takerAssetFilledAmount);\n FillResults memory singleFillResult = calculateFillResults(orders[i], remainingTakerAssetFillAmount);\n addFillResults(totalFillResults, singleFillResult);\n if (totalFillResults.takerAssetFilledAmount == takerAssetFillAmount) {\n break;\n }\n }\n return totalFillResults;\n }\n\n /// @dev Calculates fill results for buyFeeTokens. This handles fees on buying ZRX\n /// so the end result is the expected amount of ZRX (not less after fees).\n /// @param orders An array of Order struct containing order specifications.\n /// @param zrxFillAmount A number representing the amount zrx to buy\n /// @return totalFillResults Expected fill result amounts from buying fees\n function calculateMarketBuyZrxResults(\n LibOrder.Order[] memory orders,\n uint256 zrxFillAmount\n )\n public\n view\n returns (FillResults memory totalFillResults)\n {\n for (uint256 i = 0; i < orders.length; i++) {\n uint256 remainingZrxFillAmount = safeSub(zrxFillAmount, totalFillResults.makerAssetFilledAmount);\n // Convert the remaining amount of makerToken to buy into remaining amount\n // of takerToken to sell, assuming entire amount can be sold in the current order\n uint256 remainingWethSellAmount = getPartialAmount(\n orders[i].takerAssetAmount,\n safeSub(orders[i].makerAssetAmount, orders[i].takerFee), // our exchange rate after fees \n remainingZrxFillAmount\n );\n FillResults memory singleFillResult = calculateFillResults(orders[i], safeAdd(remainingWethSellAmount, 1));\n\n singleFillResult.makerAssetFilledAmount = safeSub(singleFillResult.makerAssetFilledAmount, singleFillResult.takerFeePaid);\n addFillResults(totalFillResults, singleFillResult);\n // As we compensate for the rounding issue above have slightly more ZRX than the requested zrxFillAmount\n if (totalFillResults.makerAssetFilledAmount >= zrxFillAmount) {\n break;\n }\n }\n return totalFillResults;\n }\n\n /// @dev Simulates the 0x Exchange fillOrder validation and calculations, without performing any state changes.\n /// @param order An Order struct containing order specifications.\n /// @param takerAssetFillAmount A number representing the amount of this order to fill.\n /// @return fillResults Amounts filled and fees paid by maker and taker.\n function calculateFillResults(\n LibOrder.Order memory order,\n uint256 takerAssetFillAmount\n )\n internal\n view\n returns (FillResults memory fillResults)\n {\n LibOrder.OrderInfo memory orderInfo = EXCHANGE.getOrderInfo(order);\n if (orderInfo.orderStatus != uint8(LibOrder.OrderStatus.FILLABLE)) {\n return fillResults;\n }\n uint256 remainingTakerAssetAmount = safeSub(order.takerAssetAmount, orderInfo.orderTakerAssetFilledAmount);\n uint256 takerAssetFilledAmount = min256(takerAssetFillAmount, remainingTakerAssetAmount);\n\n fillResults.takerAssetFilledAmount = takerAssetFilledAmount;\n fillResults.makerAssetFilledAmount = getPartialAmount(\n takerAssetFilledAmount,\n order.takerAssetAmount,\n order.makerAssetAmount\n );\n fillResults.makerFeePaid = getPartialAmount(\n takerAssetFilledAmount,\n order.takerAssetAmount,\n order.makerFee\n );\n fillResults.takerFeePaid = getPartialAmount(\n takerAssetFilledAmount,\n order.takerAssetAmount,\n order.takerFee\n );\n return fillResults;\n }\n}\n",
+ "2.0.0/forwarder/MixinFees.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.24;\n\nimport \"../protocol/Exchange/libs/LibMath.sol\";\nimport \"./mixins/MConstants.sol\";\nimport \"./mixins/MFees.sol\";\n\n\ncontract MixinFees is\n LibMath,\n MConstants,\n MFees\n{\n\n uint16 constant public PERCENTAGE_DENOMINATOR = 10000; // 9800 == 98%, 10000 == 100%\n uint16 constant public MAX_FEE = 1000; // 10%\n uint16 constant public ALLOWABLE_EXCHANGE_PERCENTAGE = 9500; // 95%\n\n /// @dev Default payabale function, this allows us to withdraw WETH\n function ()\n public\n payable\n {\n require(\n msg.sender == address(ETHER_TOKEN),\n \"DEFAULT_FUNCTION_WETH_CONTRACT_ONLY\"\n );\n }\n\n /// @dev Pays the feeRecipient feeProportion of the total takerEthAmount, denominated in ETH\n /// @param takerEthAmount The total amount that was transacted in WETH, fees are calculated from this value.\n /// @param feeProportion The proportion of fees\n /// @param feeRecipient The recipient of the fees\n /// @return ethFeeAmount Amount of ETH paid to feeRecipient as fee.\n function payEthFee(\n uint256 takerEthAmount,\n uint16 feeProportion,\n address feeRecipient\n )\n internal\n returns (uint256 ethFeeAmount)\n {\n if (feeProportion > 0 && feeRecipient != address(0)) {\n require(\n feeProportion <= MAX_FEE,\n \"FEE_PROPORTION_TOO_LARGE\"\n );\n // 1.5% is 150, allowing for 2 decimal precision, i.e 0.05% is 5\n ethFeeAmount = getPartialAmount(\n feeProportion,\n PERCENTAGE_DENOMINATOR,\n takerEthAmount\n );\n feeRecipient.transfer(ethFeeAmount);\n }\n return ethFeeAmount;\n }\n\n /// @dev Withdraws the remaining WETH, deduct and pay fees from this amount based on the takerTokenAmount to the feeRecipient.\n /// If a user overpaid ETH initially, the fees are calculated from the amount traded and deducted from withdrawAmount.\n /// Any remaining ETH is sent back to the user.\n /// @param ethWithdrawAmount The amount to withdraw from the WETH contract.\n /// @param wethAmountSold The total amount that was transacted in WETH, fees are calculated from this value.\n /// @param feeProportion The proportion of fees\n /// @param feeRecipient The recipient of the fees\n function withdrawPayAndDeductEthFee(\n uint256 ethWithdrawAmount,\n uint256 wethAmountSold,\n uint16 feeProportion,\n address feeRecipient\n )\n internal\n {\n // Return all of the excess WETH if any after deducting fees on the amount\n if (ethWithdrawAmount > 0) {\n ETHER_TOKEN.withdraw(ethWithdrawAmount);\n // Fees proportional to the amount traded\n uint256 ethFeeAmount = payEthFee(\n wethAmountSold,\n feeProportion,\n feeRecipient\n );\n uint256 unspentEthAmount = safeSub(ethWithdrawAmount, ethFeeAmount);\n if (unspentEthAmount > 0) {\n msg.sender.transfer(unspentEthAmount);\n }\n }\n }\n\n /// @dev Checks whether the amount of tokens sold against the amount of tokens requested\n /// is within a certain threshold. This ensures the caller gets a fair deal when\n /// performing any token fee abstraction. Threshold is 95%. If fee abstraction costs more than\n /// 5% of the total transaction, we return false.\n /// @param requestedSellAmount The amount the user requested, or sent in to a payable function\n /// @param tokenAmountSold The amount of the token that was sold after fee abstraction\n /// @return bool of whether this is within an acceptable threshold\n function isAcceptableThreshold(uint256 requestedSellAmount, uint256 tokenAmountSold)\n internal\n pure\n returns (bool)\n {\n uint256 acceptableSellAmount = getPartialAmount(\n ALLOWABLE_EXCHANGE_PERCENTAGE,\n PERCENTAGE_DENOMINATOR,\n requestedSellAmount\n );\n return tokenAmountSold >= acceptableSellAmount;\n }\n}\n",
+ "2.0.0/forwarder/MixinForwarderCore.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../utils/LibBytes/LibBytes.sol\";\nimport \"./mixins/MFees.sol\";\nimport \"./mixins/MMarketBuyZrx.sol\";\nimport \"./mixins/MExpectedResults.sol\";\nimport \"./mixins/MTransfer.sol\";\nimport \"./mixins/MConstants.sol\";\nimport \"./mixins/MForwarderCore.sol\";\nimport \"../protocol/Exchange/libs/LibOrder.sol\";\nimport \"../protocol/Exchange/libs/LibFillResults.sol\";\n\n\ncontract MixinForwarderCore is\n LibFillResults,\n MConstants,\n MExpectedResults,\n MFees,\n MMarketBuyZrx,\n MTransfer,\n MForwarderCore\n{\n bytes4 constant internal ERC20_DATA_ID = bytes4(keccak256(\"ERC20Token(address)\"));\n bytes4 constant internal ERC721_DATA_ID = bytes4(keccak256(\"ERC721Token(address,uint256,bytes)\"));\n uint256 constant internal MAX_UINT = 2**256 - 1;\n\n constructor ()\n public\n {\n address proxyAddress = EXCHANGE.getAssetProxy(ERC20_DATA_ID);\n if (proxyAddress != address(0)) {\n ETHER_TOKEN.approve(proxyAddress, MAX_UINT);\n ZRX_TOKEN.approve(proxyAddress, MAX_UINT);\n }\n }\n\n /// @dev Market sells ETH for ERC20 tokens, performing fee abstraction if required. This does not support ERC721 tokens. This function is payable\n /// and will convert all incoming ETH into WETH and perform the trade on behalf of the caller.\n /// This function allows for a deduction of a proportion of incoming ETH sent to the feeRecipient.\n /// The caller is sent all tokens from the operation.\n /// If the purchased token amount does not meet an acceptable threshold then this function reverts.\n /// @param orders An array of Order struct containing order specifications.\n /// @param signatures An array of Proof that order has been created by maker.\n /// @param feeOrders An array of Order struct containing order specifications for fees.\n /// @param feeSignatures An array of Proof that order has been created by maker for the fee orders.\n /// @param feeProportion A proportion deducted off the incoming ETH and sent to feeRecipient. The maximum value for this\n /// is 1000, aka 10%. Supports up to 2 decimal places. I.e 0.59% is 59.\n /// @param feeRecipient An address of the fee recipient whom receives feeProportion of ETH.\n /// @return FillResults amounts filled and fees paid by maker and taker.\n function marketSellEthForERC20(\n LibOrder.Order[] memory orders,\n bytes[] memory signatures,\n LibOrder.Order[] memory feeOrders,\n bytes[] memory feeSignatures,\n uint16 feeProportion,\n address feeRecipient\n )\n public\n payable\n returns (FillResults memory totalFillResults)\n {\n uint256 takerEthAmount = msg.value;\n require(\n takerEthAmount > 0,\n \"VALUE_GREATER_THAN_ZERO\"\n );\n // Deduct the fee from the total amount of ETH sent in\n uint256 ethFeeAmount = payEthFee(\n takerEthAmount,\n feeProportion,\n feeRecipient\n );\n uint256 wethSellAmount = safeSub(takerEthAmount, ethFeeAmount);\n\n // Deposit the remaining to be used for trading\n ETHER_TOKEN.deposit.value(wethSellAmount)();\n // Populate the known assetData, as it is always WETH the caller can provide null bytes to save gas\n // marketSellOrders fills the remaining\n address makerTokenAddress = LibBytes.readAddress(orders[0].makerAssetData, 16);\n orders[0].takerAssetData = WETH_ASSET_DATA;\n if (makerTokenAddress == address(ZRX_TOKEN)) {\n // If this is ZRX then we market sell from the orders, rather than a 2 step of buying ZRX fees from feeOrders\n // then buying ZRX from orders\n totalFillResults = marketSellEthForZRXInternal(\n orders,\n signatures,\n wethSellAmount\n );\n } else {\n totalFillResults = marketSellEthForERC20Internal(\n orders,\n signatures,\n feeOrders,\n feeSignatures,\n wethSellAmount\n );\n }\n // Prevent accidental WETH owned by this contract and it being spent\n require(\n takerEthAmount >= totalFillResults.takerAssetFilledAmount,\n \"INVALID_MSG_VALUE\"\n );\n // Ensure no WETH is left in this contract\n require(\n wethSellAmount == totalFillResults.takerAssetFilledAmount,\n \"UNACCEPTABLE_THRESHOLD\"\n );\n // Transfer all tokens to msg.sender\n transferERC20Token(\n makerTokenAddress,\n msg.sender,\n totalFillResults.makerAssetFilledAmount\n );\n return totalFillResults;\n }\n\n /// @dev Buys the exact amount of assets (ERC20 and ERC721), performing fee abstraction if required.\n /// All order assets must be of the same type. Deducts a proportional fee to fee recipient.\n /// This function is payable and will convert all incoming ETH into WETH and perform the trade on behalf of the caller.\n /// The caller is sent all assets from the fill of orders. This function will revert unless the requested amount of assets are purchased.\n /// Any excess ETH sent will be returned to the caller\n /// @param orders An array of Order struct containing order specifications.\n /// @param signatures An array of Proof that order has been created by maker.\n /// @param feeOrders An array of Order struct containing order specifications for fees.\n /// @param makerTokenFillAmount The amount of maker asset to buy.\n /// @param feeSignatures An array of Proof that order has been created by maker for the fee orders.\n /// @param feeProportion A proportion deducted off the ETH spent and sent to feeRecipient. The maximum value for this\n /// is 1000, aka 10%. Supports up to 2 decimal places. I.e 0.59% is 59.\n /// @param feeRecipient An address of the fee recipient whom receives feeProportion of ETH.\n /// @return FillResults amounts filled and fees paid by maker and taker.\n function marketBuyTokensWithEth(\n LibOrder.Order[] memory orders,\n bytes[] memory signatures,\n LibOrder.Order[] memory feeOrders,\n bytes[] memory feeSignatures,\n uint256 makerTokenFillAmount,\n uint16 feeProportion,\n address feeRecipient\n )\n public\n payable\n returns (FillResults memory totalFillResults)\n {\n uint256 takerEthAmount = msg.value;\n require(\n takerEthAmount > 0,\n \"VALUE_GREATER_THAN_ZERO\"\n );\n require(\n makerTokenFillAmount > 0,\n \"VALUE_GREATER_THAN_ZERO\"\n );\n bytes4 assetDataId = LibBytes.readBytes4(orders[0].makerAssetData, 0);\n require(\n assetDataId == ERC20_DATA_ID || assetDataId == ERC721_DATA_ID,\n \"UNSUPPORTED_TOKEN_PROXY\"\n );\n\n ETHER_TOKEN.deposit.value(takerEthAmount)();\n if (assetDataId == ERC20_DATA_ID) {\n totalFillResults = marketBuyERC20TokensInternal(\n orders,\n signatures,\n feeOrders,\n feeSignatures,\n makerTokenFillAmount\n );\n } else if (assetDataId == ERC721_DATA_ID) {\n totalFillResults = batchBuyERC721TokensInternal(\n orders,\n signatures,\n feeOrders,\n feeSignatures\n );\n }\n // Prevent accidental WETH owned by this contract and it being spent\n require(\n takerEthAmount >= totalFillResults.takerAssetFilledAmount,\n \"INVALID_MSG_VALUE\"\n );\n withdrawPayAndDeductEthFee(\n safeSub(takerEthAmount, totalFillResults.takerAssetFilledAmount),\n totalFillResults.takerAssetFilledAmount,\n feeProportion,\n feeRecipient\n );\n return totalFillResults;\n }\n\n /// @dev Market sells WETH for ERC20 tokens.\n /// @param orders An array of Order struct containing order specifications.\n /// @param signatures An array of Proof that order has been created by maker.\n /// @param feeOrders An array of Order struct containing order specifications for fees.\n /// @param feeSignatures An array of Proof that order has been created by maker for the fee orders.\n /// @param wethSellAmount The amount of WETH to sell.\n /// @return FillResults amounts filled and fees paid by maker and taker.\n function marketSellEthForERC20Internal(\n LibOrder.Order[] memory orders,\n bytes[] memory signatures,\n LibOrder.Order[] memory feeOrders,\n bytes[] memory feeSignatures,\n uint256 wethSellAmount\n )\n internal\n returns (FillResults memory totalFillResults)\n {\n uint256 remainingWethSellAmount = wethSellAmount;\n FillResults memory calculatedMarketSellResults = calculateMarketSellResults(orders, wethSellAmount);\n if (calculatedMarketSellResults.takerFeePaid > 0) {\n // Fees are required for these orders. Buy enough ZRX to cover the future market buy\n FillResults memory feeTokensResults = marketBuyZrxInternal(\n feeOrders,\n feeSignatures,\n calculatedMarketSellResults.takerFeePaid\n );\n // Ensure the token abstraction was fair if fees were proportionally too high, we fail\n require(\n isAcceptableThreshold(\n wethSellAmount,\n safeSub(wethSellAmount, feeTokensResults.takerAssetFilledAmount)\n ),\n \"UNACCEPTABLE_THRESHOLD\"\n );\n remainingWethSellAmount = safeSub(remainingWethSellAmount, feeTokensResults.takerAssetFilledAmount);\n totalFillResults.takerFeePaid = feeTokensResults.takerFeePaid;\n totalFillResults.takerAssetFilledAmount = feeTokensResults.takerAssetFilledAmount;\n }\n // Make our market sell to buy the requested tokens with the remaining balance\n FillResults memory requestedTokensResults = EXCHANGE.marketSellOrders(\n orders,\n remainingWethSellAmount,\n signatures\n );\n // Update our return FillResult with the market sell\n addFillResults(totalFillResults, requestedTokensResults);\n return totalFillResults;\n }\n\n /// @dev Market sells WETH for ZRX tokens.\n /// @param orders An array of Order struct containing order specifications.\n /// @param signatures An array of Proof that order has been created by maker.\n /// @param wethSellAmount The amount of WETH to sell.\n /// @return FillResults amounts filled and fees paid by maker and taker.\n function marketSellEthForZRXInternal(\n LibOrder.Order[] memory orders,\n bytes[] memory signatures,\n uint256 wethSellAmount\n )\n internal\n returns (FillResults memory totalFillResults)\n {\n // Make our market sell to buy the requested tokens with the remaining balance\n totalFillResults = EXCHANGE.marketSellOrders(\n orders,\n wethSellAmount,\n signatures\n );\n // Exchange does not special case ZRX in the makerAssetFilledAmount, if fees were deducted then using this amount\n // for future transfers is invalid.\n uint256 zrxAmountBought = safeSub(totalFillResults.makerAssetFilledAmount, totalFillResults.takerFeePaid);\n require(\n isAcceptableThreshold(totalFillResults.makerAssetFilledAmount, zrxAmountBought),\n \"UNACCEPTABLE_THRESHOLD\"\n );\n totalFillResults.makerAssetFilledAmount = zrxAmountBought;\n return totalFillResults;\n }\n\n /// @dev Buys an exact amount of an ERC20 token using WETH.\n /// @param orders Orders to fill. The maker asset is the ERC20 token to buy. The taker asset is WETH.\n /// @param signatures Proof that the orders were created by their respective makers.\n /// @param feeOrders to fill. The maker asset is ZRX and the taker asset is WETH.\n /// @param feeSignatures Proof that the feeOrders were created by their respective makers.\n /// @param makerTokenFillAmount Amount of the ERC20 token to buy.\n /// @return totalFillResults Aggregated fill results of buying the ERC20 and ZRX tokens.\n function marketBuyERC20TokensInternal(\n LibOrder.Order[] memory orders,\n bytes[] memory signatures,\n LibOrder.Order[] memory feeOrders,\n bytes[] memory feeSignatures,\n uint256 makerTokenFillAmount\n )\n internal\n returns (LibFillResults.FillResults memory totalFillResults)\n {\n // We read the maker token address to check if it is ZRX and later use it for transfer\n address makerTokenAddress = LibBytes.readAddress(orders[0].makerAssetData, 16);\n // We assume that asset being bought by taker is the same for each order.\n // Rather than passing this in as calldata, we copy the makerAssetData from the first order onto all later orders.\n orders[0].takerAssetData = WETH_ASSET_DATA;\n // We can short cut here for effeciency and use buyFeeTokensInternal if maker asset token is ZRX\n // this buys us exactly that amount taking into account the fees. This saves gas and calculates the rate correctly\n FillResults memory marketBuyResults;\n if (makerTokenAddress == address(ZRX_TOKEN)) {\n marketBuyResults = marketBuyZrxInternal(\n orders,\n signatures,\n makerTokenFillAmount\n );\n // When buying ZRX we round up which can result in a small margin excess\n require(\n marketBuyResults.makerAssetFilledAmount >= makerTokenFillAmount,\n \"UNACCEPTABLE_THRESHOLD\"\n );\n addFillResults(totalFillResults, marketBuyResults);\n require(\n isAcceptableThreshold(\n safeAdd(totalFillResults.makerAssetFilledAmount, totalFillResults.takerFeePaid), // Total ZRX\n totalFillResults.makerAssetFilledAmount // amount going to msg.sender\n ),\n \"UNACCEPTABLE_THRESHOLD\"\n );\n } else {\n FillResults memory calculatedMarketBuyResults = calculateMarketBuyResults(orders, makerTokenFillAmount);\n if (calculatedMarketBuyResults.takerFeePaid > 0) {\n // Fees are required for these orders. Buy enough ZRX to cover the future market buy\n FillResults memory zrxMarketBuyResults = marketBuyZrxInternal(\n feeOrders,\n feeSignatures,\n calculatedMarketBuyResults.takerFeePaid\n );\n totalFillResults.takerAssetFilledAmount = zrxMarketBuyResults.takerAssetFilledAmount;\n totalFillResults.takerFeePaid = zrxMarketBuyResults.takerFeePaid;\n }\n // Make our market buy of the requested tokens with the remaining balance\n marketBuyResults = EXCHANGE.marketBuyOrders(\n orders,\n makerTokenFillAmount,\n signatures\n );\n require(\n marketBuyResults.makerAssetFilledAmount == makerTokenFillAmount,\n \"UNACCEPTABLE_THRESHOLD\"\n );\n addFillResults(totalFillResults, marketBuyResults);\n require(\n isAcceptableThreshold(\n totalFillResults.takerAssetFilledAmount,\n marketBuyResults.takerAssetFilledAmount\n ),\n \"UNACCEPTABLE_THRESHOLD\"\n );\n }\n // Transfer all purchased tokens to msg.sender\n transferERC20Token(\n makerTokenAddress,\n msg.sender,\n marketBuyResults.makerAssetFilledAmount\n );\n return totalFillResults;\n }\n\n /// @dev Buys an all of the ERC721 tokens in the orders.\n /// @param orders Orders to fill. The maker asset is the ERC721 token to buy. The taker asset is WETH.\n /// @param signatures Proof that the orders were created by their respective makers.\n /// @param feeOrders to fill. The maker asset is ZRX and the taker asset is WETH.\n /// @param feeSignatures Proof that the feeOrders were created by their respective makers.\n /// @return totalFillResults Aggregated fill results of buying the ERC721 tokens and ZRX tokens.\n function batchBuyERC721TokensInternal(\n LibOrder.Order[] memory orders,\n bytes[] memory signatures,\n LibOrder.Order[] memory feeOrders,\n bytes[] memory feeSignatures\n )\n internal\n returns (LibFillResults.FillResults memory totalFillResults)\n {\n uint256 totalZrxFeeAmount;\n uint256 ordersLength = orders.length;\n uint256[] memory takerAssetFillAmounts = new uint256[](ordersLength);\n for (uint256 i = 0; i < ordersLength; i++) {\n // Total up the fees\n totalZrxFeeAmount = safeAdd(totalZrxFeeAmount, orders[i].takerFee);\n // We assume that asset being bought by taker is the same for each order.\n // Rather than passing this in as calldata, we set the takerAssetData as WETH asset data\n orders[i].takerAssetData = WETH_ASSET_DATA;\n // Populate takerAssetFillAmounts for later batchFill\n takerAssetFillAmounts[i] = orders[i].takerAssetAmount;\n }\n if (totalZrxFeeAmount > 0) {\n // Fees are required for these orders. Buy enough ZRX to cover the future fill\n FillResults memory zrxMarketBuyResults = marketBuyZrxInternal(\n feeOrders,\n feeSignatures,\n totalZrxFeeAmount\n );\n totalFillResults.takerFeePaid = zrxMarketBuyResults.takerFeePaid;\n totalFillResults.takerAssetFilledAmount = zrxMarketBuyResults.takerAssetFilledAmount;\n }\n FillResults memory batchFillResults = EXCHANGE.batchFillOrKillOrders(\n orders,\n takerAssetFillAmounts,\n signatures\n );\n addFillResults(totalFillResults, batchFillResults);\n require(\n isAcceptableThreshold(\n totalFillResults.takerAssetFilledAmount,\n batchFillResults.takerAssetFilledAmount\n ),\n \"UNACCEPTABLE_THRESHOLD\"\n );\n // Transfer all of the tokens filled from the batchFill\n for (i = 0; i < ordersLength; i++) {\n transferERC721Token(\n orders[i].makerAssetData,\n msg.sender\n );\n }\n return totalFillResults;\n }\n}\n",
+ "2.0.0/forwarder/MixinMarketBuyZrx.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../protocol/Exchange/libs/LibFillResults.sol\";\nimport \"../protocol/Exchange/libs/LibOrder.sol\";\nimport \"../protocol/Exchange/libs/LibMath.sol\";\nimport \"./mixins/MConstants.sol\";\nimport \"./mixins/MMarketBuyZrx.sol\";\n\n\ncontract MixinMarketBuyZrx is\n LibMath,\n LibFillResults,\n MConstants,\n MMarketBuyZrx\n{\n\n /// @dev Buys zrxBuyAmount of ZRX fee tokens, taking into account the fees on buying fee tokens. This will guarantee\n /// At least zrxBuyAmount of ZRX fee tokens are purchased (sometimes slightly over due to rounding issues).\n /// It is possible that a request to buy 200 ZRX fee tokens will require purchasing 202 ZRX tokens\n /// As 2 ZRX is required to purchase the 200 ZRX fee tokens. This guarantees at least 200 ZRX for future purchases.\n /// @param orders An array of Order struct containing order specifications for fees.\n /// @param signatures An array of Proof that order has been created by maker for the fee orders.\n /// @param zrxBuyAmount The number of requested ZRX fee tokens.\n /// @return totalFillResults Amounts filled and fees paid by maker and taker. makerTokenAmount is the zrx amount deducted of fees\n function marketBuyZrxInternal(\n LibOrder.Order[] memory orders,\n bytes[] memory signatures,\n uint256 zrxBuyAmount\n )\n internal\n returns (FillResults memory totalFillResults)\n {\n for (uint256 i = 0; i < orders.length; i++) {\n // All of these are ZRX/WETH, we can drop the respective assetData from callData\n orders[i].makerAssetData = ZRX_ASSET_DATA;\n orders[i].takerAssetData = WETH_ASSET_DATA;\n // Calculate the remaining amount of makerToken to buy\n uint256 remainingZrxBuyAmount = safeSub(zrxBuyAmount, totalFillResults.makerAssetFilledAmount);\n // Convert the remaining amount of makerToken to buy into remaining amount\n // of takerToken to sell, assuming entire amount can be sold in the current order\n uint256 remainingWethSellAmount = getPartialAmount(\n orders[i].takerAssetAmount,\n safeSub(orders[i].makerAssetAmount, orders[i].takerFee), // our exchange rate after fees \n remainingZrxBuyAmount\n );\n // Attempt to sell the remaining amount of takerToken\n // Round up the amount to ensure we don't under buy by a fractional amount\n FillResults memory singleFillResult = EXCHANGE.fillOrder(\n orders[i],\n safeAdd(remainingWethSellAmount, 1),\n signatures[i]\n );\n // We didn't buy the full amount when buying ZRX as some were taken for fees\n singleFillResult.makerAssetFilledAmount = safeSub(singleFillResult.makerAssetFilledAmount, singleFillResult.takerFeePaid);\n // Update amounts filled and fees paid by maker and taker\n addFillResults(totalFillResults, singleFillResult);\n // Stop execution if the entire amount of makerToken has been bought\n if (totalFillResults.makerAssetFilledAmount >= zrxBuyAmount) {\n break;\n }\n }\n return totalFillResults;\n }\n}\n",
+ "2.0.0/forwarder/MixinTransfer.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.24;\n\nimport \"../utils/LibBytes/LibBytes.sol\";\nimport \"../tokens/ERC721Token/IERC721Token.sol\";\nimport \"./mixins/MTransfer.sol\";\n\n\ncontract MixinTransfer is\n MTransfer\n{\n\n using LibBytes for bytes;\n\n bytes4 constant internal ERC20_TRANSFER_SELECTOR = bytes4(keccak256(\"transfer(address,uint256)\"));\n bytes4 constant internal ERC721_RECEIVED = bytes4(keccak256(\"onERC721Received(address,uint256,bytes)\"));\n bytes4 constant internal ERC721_RECEIVED_OPERATOR = bytes4(keccak256(\"onERC721Received(address,address,uint256,bytes)\"));\n\n function onERC721Received(\n address,\n uint256,\n bytes memory\n )\n public\n pure\n returns(bytes4)\n {\n return ERC721_RECEIVED;\n }\n\n function onERC721Received(\n address,\n address,\n uint256,\n bytes memory\n )\n public\n pure\n returns(bytes4)\n {\n return ERC721_RECEIVED_OPERATOR;\n }\n\n function transferERC20Token(\n address token,\n address to,\n uint256 amount\n )\n internal\n {\n // Transfer tokens.\n // We do a raw call so we can check the success separate\n // from the return data.\n bool success = token.call(abi.encodeWithSelector(\n ERC20_TRANSFER_SELECTOR,\n to,\n amount\n ));\n require(\n success,\n \"TRANSFER_FAILED\"\n );\n \n // Check return data.\n // If there is no return data, we assume the token incorrectly\n // does not return a bool. In this case we expect it to revert\n // on failure, which was handled above.\n // If the token does return data, we require that it is a single\n // value that evaluates to true.\n assembly {\n if returndatasize {\n success := 0\n if eq(returndatasize, 32) {\n // First 64 bytes of memory are reserved scratch space\n returndatacopy(0, 0, 32)\n success := mload(0)\n }\n }\n }\n require(\n success,\n \"TRANSFER_FAILED\"\n );\n }\n\n function transferERC721Token(\n bytes memory assetData,\n address to\n )\n internal\n {\n // Decode asset data.\n address token = assetData.readAddress(16);\n uint256 tokenId = assetData.readUint256(36);\n bytes memory receiverData = assetData.readBytesWithLength(100);\n IERC721Token(token).safeTransferFrom(\n address(this),\n to,\n tokenId,\n receiverData\n );\n }\n}\n",
+ "2.0.0/forwarder/interfaces/IExpectedResults.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../../protocol/Exchange/libs/LibFillResults.sol\";\nimport \"../../protocol/Exchange/libs/LibOrder.sol\";\n\n\ncontract IExpectedResults {\n\n /// @dev Calculates a total FillResults for buying makerAssetFillAmount over all orders.\n /// Including the fees required to be paid. \n /// @param orders An array of Order struct containing order specifications.\n /// @param makerAssetFillAmount A number representing the amount of this order to fill.\n /// @return totalFillResults Amounts filled and fees paid by maker and taker.\n function calculateMarketBuyResults(\n LibOrder.Order[] memory orders,\n uint256 makerAssetFillAmount\n )\n public\n view\n returns (LibFillResults.FillResults memory totalFillResults);\n\n /// @dev Calculates a FillResults total for selling takerAssetFillAmount over all orders. \n /// Including the fees required to be paid. \n /// @param orders An array of Order struct containing order specifications.\n /// @param takerAssetFillAmount A number representing the amount of this order to fill.\n /// @return totalFillResults Amounts filled and fees paid by maker and taker.\n function calculateMarketSellResults(\n LibOrder.Order[] memory orders,\n uint256 takerAssetFillAmount\n )\n public\n view\n returns (LibFillResults.FillResults memory totalFillResults);\n\n /// @dev Calculates fill results for buyFeeTokens. This handles fees on buying ZRX\n /// so the end result is the expected amount of ZRX (not less after fees).\n /// @param orders An array of Order struct containing order specifications.\n /// @param zrxFillAmount A number representing the amount zrx to buy\n /// @return totalFillResults Expected fill result amounts from buying fees\n function calculateMarketBuyZrxResults(\n LibOrder.Order[] memory orders,\n uint256 zrxFillAmount\n )\n public\n view\n returns (LibFillResults.FillResults memory totalFillResults);\n}\n",
+ "2.0.0/forwarder/interfaces/IForwarderCore.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../../protocol/Exchange/libs/LibOrder.sol\";\nimport \"../../protocol/Exchange/libs/LibFillResults.sol\";\n\n\ncontract IForwarderCore {\n\n /// @dev Market sells ETH for ERC20 tokens, performing fee abstraction if required. This does not support ERC721 tokens. This function is payable\n /// and will convert all incoming ETH into WETH and perform the trade on behalf of the caller.\n /// This function allows for a deduction of a proportion of incoming ETH sent to the feeRecipient.\n /// The caller is sent all tokens from the operation.\n /// If the purchased token amount does not meet an acceptable threshold then this function reverts.\n /// @param orders An array of Order struct containing order specifications.\n /// @param signatures An array of Proof that order has been created by maker.\n /// @param feeOrders An array of Order struct containing order specifications for fees.\n /// @param feeSignatures An array of Proof that order has been created by maker for the fee orders.\n /// @param feeProportion A proportion deducted off the incoming ETH and sent to feeRecipient. The maximum value for this\n /// is 1000, aka 10%. Supports up to 2 decimal places. I.e 0.59% is 59.\n /// @param feeRecipient An address of the fee recipient whom receives feeProportion of ETH.\n /// @return FillResults amounts filled and fees paid by maker and taker.\n function marketSellEthForERC20(\n LibOrder.Order[] memory orders,\n bytes[] memory signatures,\n LibOrder.Order[] memory feeOrders,\n bytes[] memory feeSignatures,\n uint16 feeProportion,\n address feeRecipient\n )\n public\n payable\n returns (LibFillResults.FillResults memory totalFillResults);\n\n /// @dev Buys the exact amount of assets (ERC20 and ERC721), performing fee abstraction if required.\n /// All order assets must be of the same type. Deducts a proportional fee to fee recipient.\n /// This function is payable and will convert all incoming ETH into WETH and perform the trade on behalf of the caller.\n /// The caller is sent all assets from the fill of orders. This function will revert unless the requested amount of assets are purchased.\n /// Any excess ETH sent will be returned to the caller\n /// @param orders An array of Order struct containing order specifications.\n /// @param signatures An array of Proof that order has been created by maker.\n /// @param feeOrders An array of Order struct containing order specifications for fees.\n /// @param makerTokenFillAmount The amount of maker asset to buy.\n /// @param feeSignatures An array of Proof that order has been created by maker for the fee orders.\n /// @param feeProportion A proportion deducted off the ETH spent and sent to feeRecipient. The maximum value for this\n /// is 1000, aka 10%. Supports up to 2 decimal places. I.e 0.59% is 59.\n /// @param feeRecipient An address of the fee recipient whom receives feeProportion of ETH.\n /// @return FillResults amounts filled and fees paid by maker and taker.\n function marketBuyTokensWithEth(\n LibOrder.Order[] memory orders,\n bytes[] memory signatures,\n LibOrder.Order[] memory feeOrders,\n bytes[] memory feeSignatures,\n uint256 makerTokenFillAmount,\n uint16 feeProportion,\n address feeRecipient\n )\n public\n payable\n returns (LibFillResults.FillResults memory totalFillResults);\n}\n",
+ "2.0.0/forwarder/mixins/MConstants.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.24;\n\nimport \"../../protocol/Exchange/interfaces/IExchange.sol\";\nimport \"../../tokens/EtherToken/IEtherToken.sol\";\nimport \"../../tokens/ERC20Token/IERC20Token.sol\";\n\n\ncontract MConstants {\n\n // solhint-disable var-name-mixedcase\n IExchange internal EXCHANGE;\n IEtherToken internal ETHER_TOKEN;\n IERC20Token internal ZRX_TOKEN;\n bytes internal ZRX_ASSET_DATA;\n bytes internal WETH_ASSET_DATA;\n // solhint-enable var-name-mixedcase\n}\n",
+ "2.0.0/forwarder/mixins/MExpectedResults.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../../protocol/Exchange/libs/LibFillResults.sol\";\nimport \"../../protocol/Exchange/libs/LibOrder.sol\";\nimport \"../interfaces/IExpectedResults.sol\";\n\n\ncontract MExpectedResults is\n IExpectedResults\n{\n\n /// @dev Simulates the 0x Exchange fillOrder validation and calculations, without performing any state changes.\n /// @param order An Order struct containing order specifications.\n /// @param takerAssetFillAmount A number representing the amount of this order to fill.\n /// @return fillResults Amounts filled and fees paid by maker and taker.\n function calculateFillResults(\n LibOrder.Order memory order,\n uint256 takerAssetFillAmount\n )\n internal\n view\n returns (LibFillResults.FillResults memory fillResults);\n}\n",
+ "2.0.0/forwarder/mixins/MFees.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.24;\n\n\ncontract MFees {\n\n /// @dev Pays the feeRecipient feeProportion of the total takerEthAmount, denominated in ETH\n /// @param takerEthAmount The total amount that was transacted in WETH, fees are calculated from this value.\n /// @param feeProportion The proportion of fees\n /// @param feeRecipient The recipient of the fees\n /// @return ethFeeAmount Amount of ETH paid to feeRecipient as fee.\n function payEthFee(\n uint256 takerEthAmount,\n uint16 feeProportion,\n address feeRecipient\n )\n internal\n returns (uint256 ethFeeAmount);\n\n /// @dev Withdraws the remaining WETH, deduct and pay fees from this amount based on the takerTokenAmount to the feeRecipient.\n /// If a user overpaid ETH initially, the fees are calculated from the amount traded and deducted from withdrawAmount.\n /// Any remaining ETH is sent back to the user.\n /// @param ethWithdrawAmount The amount to withdraw from the WETH contract.\n /// @param wethAmountSold The total amount that was transacted in WETH, fees are calculated from this value.\n /// @param feeProportion The proportion of fees\n /// @param feeRecipient The recipient of the fees\n function withdrawPayAndDeductEthFee(\n uint256 ethWithdrawAmount,\n uint256 wethAmountSold,\n uint16 feeProportion,\n address feeRecipient\n )\n internal;\n\n /// @dev Checks whether the amount of tokens sold against the amount of tokens requested\n /// is within a certain threshold. This ensures the caller gets a fair deal when\n /// performing any token fee abstraction. Threshold is 95%. If fee abstraction costs more than\n /// 5% of the total transaction, we return false.\n /// @param requestedSellAmount The amount the user requested, or sent in to a payable function\n /// @param tokenAmountSold The amount of the token that was sold after fee abstraction\n /// @return bool of whether this is within an acceptable threshold\n function isAcceptableThreshold(uint256 requestedSellAmount, uint256 tokenAmountSold)\n internal\n pure\n returns (bool);\n}\n",
+ "2.0.0/forwarder/mixins/MForwarderCore.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../../protocol/Exchange/libs/LibOrder.sol\";\nimport \"../../protocol/Exchange/libs/LibFillResults.sol\";\nimport \"../interfaces/IForwarderCore.sol\";\n\n\ncontract MForwarderCore is\n IForwarderCore\n{\n\n /// @dev Market sells WETH for ERC20 tokens.\n /// @param orders An array of Order struct containing order specifications.\n /// @param signatures An array of Proof that order has been created by maker.\n /// @param feeOrders An array of Order struct containing order specifications for fees.\n /// @param feeSignatures An array of Proof that order has been created by maker for the fee orders.\n /// @param wethSellAmount The amount of WETH to sell.\n /// @return FillResults amounts filled and fees paid by maker and taker.\n function marketSellEthForERC20Internal(\n LibOrder.Order[] memory orders,\n bytes[] memory signatures,\n LibOrder.Order[] memory feeOrders,\n bytes[] memory feeSignatures,\n uint256 wethSellAmount\n )\n internal\n returns (LibFillResults.FillResults memory totalFillResults);\n\n /// @dev Market sells WETH for ZRX tokens.\n /// @param orders An array of Order struct containing order specifications.\n /// @param signatures An array of Proof that order has been created by maker.\n /// @param wethSellAmount The amount of WETH to sell.\n /// @return FillResults amounts filled and fees paid by maker and taker.\n function marketSellEthForZRXInternal(\n LibOrder.Order[] memory orders,\n bytes[] memory signatures,\n uint256 wethSellAmount\n )\n internal\n returns (LibFillResults.FillResults memory totalFillResults);\n\n /// @dev Buys an exact amount of an ERC20 token using WETH.\n /// @param orders Orders to fill. The maker asset is the ERC20 token to buy. The taker asset is WETH.\n /// @param signatures Proof that the orders were created by their respective makers.\n /// @param feeOrders to fill. The maker asset is ZRX and the taker asset is WETH.\n /// @param feeSignatures Proof that the feeOrders were created by their respective makers.\n /// @param makerTokenFillAmount Amount of the ERC20 token to buy.\n /// @return totalFillResults Aggregated fill results of buying the ERC20 and ZRX tokens.\n function marketBuyERC20TokensInternal(\n LibOrder.Order[] memory orders,\n bytes[] memory signatures,\n LibOrder.Order[] memory feeOrders,\n bytes[] memory feeSignatures,\n uint256 makerTokenFillAmount\n )\n internal\n returns (LibFillResults.FillResults memory totalFillResults);\n\n /// @dev Buys an all of the ERC721 tokens in the orders.\n /// @param orders Orders to fill. The maker asset is the ERC721 token to buy. The taker asset is WETH.\n /// @param signatures Proof that the orders were created by their respective makers.\n /// @param feeOrders to fill. The maker asset is ZRX and the taker asset is WETH.\n /// @param feeSignatures Proof that the feeOrders were created by their respective makers.\n /// @return totalFillResults Aggregated fill results of buying the ERC721 tokens and ZRX tokens.\n function batchBuyERC721TokensInternal(\n LibOrder.Order[] memory orders,\n bytes[] memory signatures,\n LibOrder.Order[] memory feeOrders,\n bytes[] memory feeSignatures\n )\n internal\n returns (LibFillResults.FillResults memory totalFillResults);\n}\n",
+ "2.0.0/forwarder/mixins/MMarketBuyZrx.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.24;\n\nimport \"../../protocol/Exchange/libs/LibFillResults.sol\";\nimport \"../../protocol/Exchange/libs/LibOrder.sol\";\n\n\ncontract MMarketBuyZrx {\n\n /// @dev Buys zrxBuyAmount of ZRX fee tokens, taking into account the fees on buying fee tokens. This will guarantee\n /// At least zrxBuyAmount of ZRX fee tokens are purchased (sometimes slightly over due to rounding issues).\n /// It is possible that a request to buy 200 ZRX fee tokens will require purchasing 202 ZRX tokens\n /// As 2 ZRX is required to purchase the 200 ZRX fee tokens. This guarantees at least 200 ZRX for future purchases.\n /// @param orders An array of Order struct containing order specifications for fees.\n /// @param signatures An array of Proof that order has been created by maker for the fee orders.\n /// @param zrxBuyAmount The number of requested ZRX fee tokens.\n /// @return totalFillResults Amounts filled and fees paid by maker and taker. makerTokenAmount is the zrx amount deducted of fees\n function marketBuyZrxInternal(\n LibOrder.Order[] memory orders,\n bytes[] memory signatures,\n uint256 zrxBuyAmount\n )\n internal\n returns (LibFillResults.FillResults memory totalFillResults);\n}\n",
+ "2.0.0/forwarder/mixins/MTransfer.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.24;\n\n\ncontract MTransfer {\n\n function onERC721Received(address, uint256, bytes memory)\n public\n pure\n returns(bytes4);\n\n function onERC721Received(address, address, uint256, bytes memory)\n public\n pure\n returns(bytes4);\n \n function transferERC20Token(\n address token,\n address to,\n uint256 amount\n )\n internal;\n\n function transferERC721Token(\n bytes memory assetData,\n address to\n )\n internal;\n}\n",
+ "2.0.0/protocol/Exchange/interfaces/IAssetProxyDispatcher.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.24;\n\n\ncontract IAssetProxyDispatcher {\n\n /// @dev Registers an asset proxy to its asset proxy id.\n /// Once an asset proxy is registered, it cannot be unregistered.\n /// @param assetProxy Address of new asset proxy to register.\n function registerAssetProxy(address assetProxy)\n external;\n\n /// @dev Gets an asset proxy.\n /// @param assetProxyId Id of the asset proxy.\n /// @return The asset proxy registered to assetProxyId. Returns 0x0 if no proxy is registered.\n function getAssetProxy(bytes4 assetProxyId)\n external\n view\n returns (address);\n}\n",
+ "2.0.0/protocol/Exchange/interfaces/IExchange.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"./IExchangeCore.sol\";\nimport \"./IMatchOrders.sol\";\nimport \"./ISignatureValidator.sol\";\nimport \"./ITransactions.sol\";\nimport \"./IAssetProxyDispatcher.sol\";\nimport \"./IWrapperFunctions.sol\";\n\n\n// solhint-disable no-empty-blocks\ncontract IExchange is\n IExchangeCore,\n IMatchOrders,\n ISignatureValidator,\n ITransactions,\n IAssetProxyDispatcher,\n IWrapperFunctions\n{}\n",
+ "2.0.0/protocol/Exchange/interfaces/IExchangeCore.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../libs/LibOrder.sol\";\nimport \"../libs/LibFillResults.sol\";\n\n\ncontract IExchangeCore {\n\n /// @dev Cancels all orders created by makerAddress with a salt less than or equal to the targetOrderEpoch\n /// and senderAddress equal to msg.sender (or null address if msg.sender == makerAddress).\n /// @param targetOrderEpoch Orders created with a salt less or equal to this value will be cancelled.\n function cancelOrdersUpTo(uint256 targetOrderEpoch)\n external;\n\n /// @dev Fills the input order.\n /// @param order Order struct containing order specifications.\n /// @param takerAssetFillAmount Desired amount of takerAsset to sell.\n /// @param signature Proof that order has been created by maker.\n /// @return Amounts filled and fees paid by maker and taker.\n function fillOrder(\n LibOrder.Order memory order,\n uint256 takerAssetFillAmount,\n bytes memory signature\n )\n public\n returns (LibFillResults.FillResults memory fillResults);\n\n /// @dev After calling, the order can not be filled anymore.\n /// @param order Order struct containing order specifications.\n function cancelOrder(LibOrder.Order memory order)\n public;\n\n /// @dev Gets information about an order: status, hash, and amount filled.\n /// @param order Order to gather information on.\n /// @return OrderInfo Information about the order and its state.\n /// See LibOrder.OrderInfo for a complete description.\n function getOrderInfo(LibOrder.Order memory order)\n public\n view\n returns (LibOrder.OrderInfo memory orderInfo);\n}\n",
+ "2.0.0/protocol/Exchange/interfaces/IMatchOrders.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*/\npragma solidity 0.4.24;\npragma experimental ABIEncoderV2;\n\nimport \"../libs/LibOrder.sol\";\nimport \"../libs/LibFillResults.sol\";\n\n\ncontract IMatchOrders {\n\n /// @dev Match two complementary orders that have a profitable spread.\n /// Each order is filled at their respective price point. However, the calculations are\n /// carried out as though the orders are both being filled at the right order's price point.\n /// The profit made by the left order goes to the taker (who matched the two orders).\n /// @param leftOrder First order to match.\n /// @param rightOrder Second order to match.\n /// @param leftSignature Proof that order was created by the left maker.\n /// @param rightSignature Proof that order was created by the right maker.\n /// @return matchedFillResults Amounts filled and fees paid by maker and taker of matched orders.\n function matchOrders(\n LibOrder.Order memory leftOrder,\n LibOrder.Order memory rightOrder,\n bytes memory leftSignature,\n bytes memory rightSignature\n )\n public\n returns (LibFillResults.MatchedFillResults memory matchedFillResults);\n}\n",
+ "2.0.0/protocol/Exchange/interfaces/ISignatureValidator.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.24;\n\n\ncontract ISignatureValidator {\n\n /// @dev Approves a hash on-chain using any valid signature type.\n /// After presigning a hash, the preSign signature type will become valid for that hash and signer.\n /// @param signerAddress Address that should have signed the given hash.\n /// @param signature Proof that the hash has been signed by signer.\n function preSign(\n bytes32 hash,\n address signerAddress,\n bytes signature\n )\n external;\n \n /// @dev Approves/unnapproves a Validator contract to verify signatures on signer's behalf.\n /// @param validatorAddress Address of Validator contract.\n /// @param approval Approval or disapproval of Validator contract.\n function setSignatureValidatorApproval(\n address validatorAddress,\n bool approval\n )\n external;\n\n /// @dev Verifies that a signature is valid.\n /// @param hash Message hash that is signed.\n /// @param signerAddress Address of signer.\n /// @param signature Proof of signing.\n /// @return Validity of order signature.\n function isValidSignature(\n bytes32 hash,\n address signerAddress,\n bytes memory signature\n )\n public\n view\n returns (bool isValid);\n}\n",
+ "2.0.0/protocol/Exchange/interfaces/ITransactions.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*/\npragma solidity 0.4.24;\n\n\ncontract ITransactions {\n\n /// @dev Executes an exchange method call in the context of signer.\n /// @param salt Arbitrary number to ensure uniqueness of transaction hash.\n /// @param signerAddress Address of transaction signer.\n /// @param data AbiV2 encoded calldata.\n /// @param signature Proof of signer transaction by signer.\n function executeTransaction(\n uint256 salt,\n address signerAddress,\n bytes data,\n bytes signature\n )\n external;\n}\n",
+ "2.0.0/protocol/Exchange/interfaces/IWrapperFunctions.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../libs/LibOrder.sol\";\nimport \"../libs/LibFillResults.sol\";\n\n\ncontract IWrapperFunctions {\n\n /// @dev Fills the input order. Reverts if exact takerAssetFillAmount not filled.\n /// @param order LibOrder.Order struct containing order specifications.\n /// @param takerAssetFillAmount Desired amount of takerAsset to sell.\n /// @param signature Proof that order has been created by maker.\n function fillOrKillOrder(\n LibOrder.Order memory order,\n uint256 takerAssetFillAmount,\n bytes memory signature\n )\n public\n returns (LibFillResults.FillResults memory fillResults);\n\n /// @dev Fills an order with specified parameters and ECDSA signature.\n /// Returns false if the transaction would otherwise revert.\n /// @param order LibOrder.Order struct containing order specifications.\n /// @param takerAssetFillAmount Desired amount of takerAsset to sell.\n /// @param signature Proof that order has been created by maker.\n /// @return Amounts filled and fees paid by maker and taker.\n function fillOrderNoThrow(\n LibOrder.Order memory order,\n uint256 takerAssetFillAmount,\n bytes memory signature\n )\n public\n returns (LibFillResults.FillResults memory fillResults);\n\n /// @dev Synchronously executes multiple calls of fillOrder.\n /// @param orders Array of order specifications.\n /// @param takerAssetFillAmounts Array of desired amounts of takerAsset to sell in orders.\n /// @param signatures Proofs that orders have been created by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n function batchFillOrders(\n LibOrder.Order[] memory orders,\n uint256[] memory takerAssetFillAmounts,\n bytes[] memory signatures\n )\n public\n returns (LibFillResults.FillResults memory totalFillResults);\n\n /// @dev Synchronously executes multiple calls of fillOrKill.\n /// @param orders Array of order specifications.\n /// @param takerAssetFillAmounts Array of desired amounts of takerAsset to sell in orders.\n /// @param signatures Proofs that orders have been created by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n function batchFillOrKillOrders(\n LibOrder.Order[] memory orders,\n uint256[] memory takerAssetFillAmounts,\n bytes[] memory signatures\n )\n public\n returns (LibFillResults.FillResults memory totalFillResults);\n\n /// @dev Fills an order with specified parameters and ECDSA signature.\n /// Returns false if the transaction would otherwise revert.\n /// @param orders Array of order specifications.\n /// @param takerAssetFillAmounts Array of desired amounts of takerAsset to sell in orders.\n /// @param signatures Proofs that orders have been created by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n function batchFillOrdersNoThrow(\n LibOrder.Order[] memory orders,\n uint256[] memory takerAssetFillAmounts,\n bytes[] memory signatures\n )\n public\n returns (LibFillResults.FillResults memory totalFillResults);\n\n /// @dev Synchronously executes multiple calls of fillOrder until total amount of takerAsset is sold by taker.\n /// @param orders Array of order specifications.\n /// @param takerAssetFillAmount Desired amount of takerAsset to sell.\n /// @param signatures Proofs that orders have been created by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n function marketSellOrders(\n LibOrder.Order[] memory orders,\n uint256 takerAssetFillAmount,\n bytes[] memory signatures\n )\n public\n returns (LibFillResults.FillResults memory totalFillResults);\n\n /// @dev Synchronously executes multiple calls of fillOrder until total amount of takerAsset is sold by taker.\n /// Returns false if the transaction would otherwise revert.\n /// @param orders Array of order specifications.\n /// @param takerAssetFillAmount Desired amount of takerAsset to sell.\n /// @param signatures Proofs that orders have been signed by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n function marketSellOrdersNoThrow(\n LibOrder.Order[] memory orders,\n uint256 takerAssetFillAmount,\n bytes[] memory signatures\n )\n public\n returns (LibFillResults.FillResults memory totalFillResults);\n\n /// @dev Synchronously executes multiple calls of fillOrder until total amount of makerAsset is bought by taker.\n /// @param orders Array of order specifications.\n /// @param makerAssetFillAmount Desired amount of makerAsset to buy.\n /// @param signatures Proofs that orders have been signed by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n function marketBuyOrders(\n LibOrder.Order[] memory orders,\n uint256 makerAssetFillAmount,\n bytes[] memory signatures\n )\n public\n returns (LibFillResults.FillResults memory totalFillResults);\n\n /// @dev Synchronously executes multiple fill orders in a single transaction until total amount is bought by taker.\n /// Returns false if the transaction would otherwise revert.\n /// @param orders Array of order specifications.\n /// @param makerAssetFillAmount Desired amount of makerAsset to buy.\n /// @param signatures Proofs that orders have been signed by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n function marketBuyOrdersNoThrow(\n LibOrder.Order[] memory orders,\n uint256 makerAssetFillAmount,\n bytes[] memory signatures\n )\n public\n returns (LibFillResults.FillResults memory totalFillResults);\n\n /// @dev Synchronously cancels multiple orders in a single transaction.\n /// @param orders Array of order specifications.\n function batchCancelOrders(LibOrder.Order[] memory orders)\n public;\n\n /// @dev Fetches information for all passed in orders\n /// @param orders Array of order specifications.\n /// @return Array of OrderInfo instances that correspond to each order.\n function getOrdersInfo(LibOrder.Order[] memory orders)\n public\n view\n returns (LibOrder.OrderInfo[] memory);\n}\n",
+ "2.0.0/protocol/Exchange/libs/LibEIP712.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.24;\n\n\ncontract LibEIP712 {\n // EIP191 header for EIP712 prefix\n string constant internal EIP191_HEADER = \"\\x19\\x01\";\n\n // EIP712 Domain Name value\n string constant internal EIP712_DOMAIN_NAME = \"0x Protocol\";\n\n // EIP712 Domain Version value\n string constant internal EIP712_DOMAIN_VERSION = \"2\";\n\n // Hash of the EIP712 Domain Separator Schema\n bytes32 public constant EIP712_DOMAIN_SEPARATOR_SCHEMA_HASH = keccak256(abi.encodePacked(\n \"EIP712Domain(\",\n \"string name,\",\n \"string version,\",\n \"address verifyingContract\",\n \")\"\n ));\n\n // Hash of the EIP712 Domain Separator data\n // solhint-disable-next-line var-name-mixedcase\n bytes32 public EIP712_DOMAIN_HASH;\n\n constructor ()\n public\n {\n EIP712_DOMAIN_HASH = keccak256(abi.encode(\n EIP712_DOMAIN_SEPARATOR_SCHEMA_HASH,\n keccak256(bytes(EIP712_DOMAIN_NAME)),\n keccak256(bytes(EIP712_DOMAIN_VERSION)),\n address(this)\n ));\n }\n\n /// @dev Calculates EIP712 encoding for a hash struct in this EIP712 Domain.\n /// @param hashStruct The EIP712 hash struct.\n /// @return EIP712 hash applied to this EIP712 Domain.\n function hashEIP712Message(bytes32 hashStruct)\n internal\n view\n returns (bytes32)\n {\n return keccak256(abi.encodePacked(EIP191_HEADER, EIP712_DOMAIN_HASH, hashStruct));\n }\n}\n",
+ "2.0.0/protocol/Exchange/libs/LibFillResults.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.24;\n\nimport \"../../../utils/SafeMath/SafeMath.sol\";\n\n\ncontract LibFillResults is\n SafeMath\n{\n\n struct FillResults {\n uint256 makerAssetFilledAmount; // Total amount of makerAsset(s) filled.\n uint256 takerAssetFilledAmount; // Total amount of takerAsset(s) filled.\n uint256 makerFeePaid; // Total amount of ZRX paid by maker(s) to feeRecipient(s).\n uint256 takerFeePaid; // Total amount of ZRX paid by taker to feeRecipients(s).\n }\n\n struct MatchedFillResults {\n FillResults left; // Amounts filled and fees paid of left order.\n FillResults right; // Amounts filled and fees paid of right order.\n uint256 leftMakerAssetSpreadAmount; // Spread between price of left and right order, denominated in the left order's makerAsset, paid to taker.\n }\n\n /// @dev Adds properties of both FillResults instances.\n /// Modifies the first FillResults instance specified.\n /// @param totalFillResults Fill results instance that will be added onto.\n /// @param singleFillResults Fill results instance that will be added to totalFillResults.\n function addFillResults(FillResults memory totalFillResults, FillResults memory singleFillResults)\n internal\n pure\n {\n totalFillResults.makerAssetFilledAmount = safeAdd(totalFillResults.makerAssetFilledAmount, singleFillResults.makerAssetFilledAmount);\n totalFillResults.takerAssetFilledAmount = safeAdd(totalFillResults.takerAssetFilledAmount, singleFillResults.takerAssetFilledAmount);\n totalFillResults.makerFeePaid = safeAdd(totalFillResults.makerFeePaid, singleFillResults.makerFeePaid);\n totalFillResults.takerFeePaid = safeAdd(totalFillResults.takerFeePaid, singleFillResults.takerFeePaid);\n }\n}\n",
+ "2.0.0/protocol/Exchange/libs/LibMath.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.24;\n\nimport \"../../../utils/SafeMath/SafeMath.sol\";\n\n\ncontract LibMath is\n SafeMath\n{\n\n /// @dev Calculates partial value given a numerator and denominator.\n /// @param numerator Numerator.\n /// @param denominator Denominator.\n /// @param target Value to calculate partial of.\n /// @return Partial value of target.\n function getPartialAmount(\n uint256 numerator,\n uint256 denominator,\n uint256 target)\n internal\n pure\n returns (uint256 partialAmount)\n {\n partialAmount = safeDiv(\n safeMul(numerator, target),\n denominator\n );\n return partialAmount;\n }\n\n /// @dev Checks if rounding error > 0.1%.\n /// @param numerator Numerator.\n /// @param denominator Denominator.\n /// @param target Value to multiply with numerator/denominator.\n /// @return Rounding error is present.\n function isRoundingError(\n uint256 numerator,\n uint256 denominator,\n uint256 target)\n internal\n pure\n returns (bool isError)\n {\n uint256 remainder = mulmod(target, numerator, denominator);\n if (remainder == 0) {\n return false; // No rounding error.\n }\n\n uint256 errPercentageTimes1000000 = safeDiv(\n safeMul(remainder, 1000000),\n safeMul(numerator, target)\n );\n isError = errPercentageTimes1000000 > 1000;\n return isError;\n }\n}\n",
+ "2.0.0/protocol/Exchange/libs/LibOrder.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.24;\n\nimport \"./LibEIP712.sol\";\n\n\ncontract LibOrder is\n LibEIP712\n{\n\n // Hash for the EIP712 Order Schema\n bytes32 constant internal EIP712_ORDER_SCHEMA_HASH = keccak256(abi.encodePacked(\n \"Order(\",\n \"address makerAddress,\",\n \"address takerAddress,\",\n \"address feeRecipientAddress,\",\n \"address senderAddress,\",\n \"uint256 makerAssetAmount,\",\n \"uint256 takerAssetAmount,\",\n \"uint256 makerFee,\",\n \"uint256 takerFee,\",\n \"uint256 expirationTimeSeconds,\",\n \"uint256 salt,\",\n \"bytes makerAssetData,\",\n \"bytes takerAssetData\",\n \")\"\n ));\n\n // A valid order remains fillable until it is expired, fully filled, or cancelled.\n // An order's state is unaffected by external factors, like account balances.\n enum OrderStatus {\n INVALID, // Default value\n INVALID_MAKER_ASSET_AMOUNT, // Order does not have a valid maker asset amount\n INVALID_TAKER_ASSET_AMOUNT, // Order does not have a valid taker asset amount\n FILLABLE, // Order is fillable\n EXPIRED, // Order has already expired\n FULLY_FILLED, // Order is fully filled\n CANCELLED // Order has been cancelled\n }\n\n // solhint-disable max-line-length\n struct Order {\n address makerAddress; // Address that created the order. \n address takerAddress; // Address that is allowed to fill the order. If set to 0, any address is allowed to fill the order. \n address feeRecipientAddress; // Address that will recieve fees when order is filled. \n address senderAddress; // Address that is allowed to call Exchange contract methods that affect this order. If set to 0, any address is allowed to call these methods.\n uint256 makerAssetAmount; // Amount of makerAsset being offered by maker. Must be greater than 0. \n uint256 takerAssetAmount; // Amount of takerAsset being bid on by maker. Must be greater than 0. \n uint256 makerFee; // Amount of ZRX paid to feeRecipient by maker when order is filled. If set to 0, no transfer of ZRX from maker to feeRecipient will be attempted.\n uint256 takerFee; // Amount of ZRX paid to feeRecipient by taker when order is filled. If set to 0, no transfer of ZRX from taker to feeRecipient will be attempted.\n uint256 expirationTimeSeconds; // Timestamp in seconds at which order expires. \n uint256 salt; // Arbitrary number to facilitate uniqueness of the order's hash. \n bytes makerAssetData; // Encoded data that can be decoded by a specified proxy contract when transferring makerAsset. The last byte references the id of this proxy.\n bytes takerAssetData; // Encoded data that can be decoded by a specified proxy contract when transferring takerAsset. The last byte references the id of this proxy.\n }\n // solhint-enable max-line-length\n\n struct OrderInfo {\n uint8 orderStatus; // Status that describes order's validity and fillability.\n bytes32 orderHash; // EIP712 hash of the order (see LibOrder.getOrderHash).\n uint256 orderTakerAssetFilledAmount; // Amount of order that has already been filled.\n }\n\n /// @dev Calculates Keccak-256 hash of the order.\n /// @param order The order structure.\n /// @return Keccak-256 EIP712 hash of the order.\n function getOrderHash(Order memory order)\n internal\n view\n returns (bytes32 orderHash)\n {\n orderHash = hashEIP712Message(hashOrder(order));\n return orderHash;\n }\n\n /// @dev Calculates EIP712 hash of the order.\n /// @param order The order structure.\n /// @return EIP712 hash of the order.\n function hashOrder(Order memory order)\n internal\n pure\n returns (bytes32 result)\n {\n bytes32 schemaHash = EIP712_ORDER_SCHEMA_HASH;\n bytes32 makerAssetDataHash = keccak256(order.makerAssetData);\n bytes32 takerAssetDataHash = keccak256(order.takerAssetData);\n\n // Assembly for more efficiently computing:\n // keccak256(abi.encode(\n // order.makerAddress,\n // order.takerAddress,\n // order.feeRecipientAddress,\n // order.senderAddress,\n // order.makerAssetAmount,\n // order.takerAssetAmount,\n // order.makerFee,\n // order.takerFee,\n // order.expirationTimeSeconds,\n // order.salt,\n // keccak256(order.makerAssetData),\n // keccak256(order.takerAssetData)\n // ));\n\n assembly {\n // Backup\n // solhint-disable-next-line space-after-comma\n let temp1 := mload(sub(order, 32))\n let temp2 := mload(add(order, 320))\n let temp3 := mload(add(order, 352))\n \n // Hash in place\n // solhint-disable-next-line space-after-comma\n mstore(sub(order, 32), schemaHash)\n mstore(add(order, 320), makerAssetDataHash)\n mstore(add(order, 352), takerAssetDataHash)\n result := keccak256(sub(order, 32), 416)\n \n // Restore\n // solhint-disable-next-line space-after-comma\n mstore(sub(order, 32), temp1)\n mstore(add(order, 320), temp2)\n mstore(add(order, 352), temp3)\n }\n return result;\n }\n}\n",
+ "2.0.0/tokens/ERC20Token/IERC20Token.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.24;\n\n\ncontract IERC20Token {\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, uint256 _value)\n public\n returns (bool);\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, uint256 _value)\n public\n returns (bool);\n \n /// @notice `msg.sender` approves `_spender` 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, uint256 _value)\n public\n returns (bool);\n\n /// @param _owner The address from which the balance will be retrieved\n /// @return The balance\n function balanceOf(address _owner)\n public view\n returns (uint256);\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)\n public view\n returns (uint256);\n\n // solhint-disable-next-line no-simple-event-func-name\n event Transfer(\n address indexed _from,\n address indexed _to,\n uint256 _value\n );\n \n event Approval(\n address indexed _owner,\n address indexed _spender,\n uint256 _value\n );\n}\n",
+ "2.0.0/tokens/ERC721Token/IERC721Token.sol": "/*\nThe MIT License (MIT)\n\nCopyright (c) 2016 Smart Contract Solutions, Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be included\nin all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\npragma solidity 0.4.24;\n\n\n/**\n * @title ERC721 Non-Fungible Token Standard basic interface\n * @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md\n * Modified from https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/token/ERC721/ERC721Basic.sol\n */\ncontract IERC721Token {\n string internal name_;\n string internal symbol_;\n\n event Transfer(\n address indexed _from,\n address indexed _to,\n uint256 _tokenId\n );\n\n event Approval(\n address indexed _owner,\n address indexed _approved,\n uint256 _tokenId\n );\n\n event ApprovalForAll(\n address indexed _owner,\n address indexed _operator,\n bool _approved\n );\n\n function name()\n public\n view\n returns (string);\n\n function symbol()\n public\n view\n returns (string);\n\n function balanceOf(address _owner)\n public\n view\n returns (uint256 _balance);\n\n function ownerOf(uint256 _tokenId)\n public\n view\n returns (address _owner);\n\n function exists(uint256 _tokenId)\n public\n view\n returns (bool _exists);\n\n function approve(address _to, uint256 _tokenId)\n public;\n\n function getApproved(uint256 _tokenId)\n public\n view\n returns (address _operator);\n\n function setApprovalForAll(address _operator, bool _approved)\n public;\n\n function isApprovedForAll(address _owner, address _operator)\n public\n view\n returns (bool);\n\n function transferFrom(\n address _from,\n address _to,\n uint256 _tokenId\n )\n public;\n\n function safeTransferFrom(\n address _from,\n address _to,\n uint256 _tokenId\n )\n public;\n\n function safeTransferFrom(\n address _from,\n address _to,\n uint256 _tokenId,\n bytes _data\n )\n public;\n}\n",
+ "2.0.0/tokens/EtherToken/IEtherToken.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.24;\n\nimport \"../ERC20Token/IERC20Token.sol\";\n\n\ncontract IEtherToken is\n IERC20Token\n{\n function deposit()\n public\n payable;\n \n function withdraw(uint256 amount)\n public;\n}\n",
+ "2.0.0/utils/LibBytes/LibBytes.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.24;\n\n\nlibrary LibBytes {\n\n using LibBytes for bytes;\n\n /// @dev Gets the memory address for a byte array.\n /// @param input Byte array to lookup.\n /// @return memoryAddress Memory address of byte array. This\n /// points to the header of the byte array which contains\n /// the length.\n function rawAddress(bytes memory input)\n internal\n pure\n returns (uint256 memoryAddress)\n {\n assembly {\n memoryAddress := input\n }\n return memoryAddress;\n }\n \n /// @dev Gets the memory address for the contents of a byte array.\n /// @param input Byte array to lookup.\n /// @return memoryAddress Memory address of the contents of the byte array.\n function contentAddress(bytes memory input)\n internal\n pure\n returns (uint256 memoryAddress)\n {\n assembly {\n memoryAddress := add(input, 32)\n }\n return memoryAddress;\n }\n\n /// @dev Copies `length` bytes from memory location `source` to `dest`.\n /// @param dest memory address to copy bytes to.\n /// @param source memory address to copy bytes from.\n /// @param length number of bytes to copy.\n function memCopy(\n uint256 dest,\n uint256 source,\n uint256 length\n )\n internal\n pure\n {\n if (length < 32) {\n // Handle a partial word by reading destination and masking\n // off the bits we are interested in.\n // This correctly handles overlap, zero lengths and source == dest\n assembly {\n let mask := sub(exp(256, sub(32, length)), 1)\n let s := and(mload(source), not(mask))\n let d := and(mload(dest), mask)\n mstore(dest, or(s, d))\n }\n } else {\n // Skip the O(length) loop when source == dest.\n if (source == dest) {\n return;\n }\n\n // For large copies we copy whole words at a time. The final\n // word is aligned to the end of the range (instead of after the\n // previous) to handle partial words. So a copy will look like this:\n //\n // ####\n // ####\n // ####\n // ####\n //\n // We handle overlap in the source and destination range by\n // changing the copying direction. This prevents us from\n // overwriting parts of source that we still need to copy.\n //\n // This correctly handles source == dest\n //\n if (source > dest) {\n assembly {\n // We subtract 32 from `sEnd` and `dEnd` because it\n // is easier to compare with in the loop, and these\n // are also the addresses we need for copying the\n // last bytes.\n length := sub(length, 32)\n let sEnd := add(source, length)\n let dEnd := add(dest, length)\n\n // Remember the last 32 bytes of source\n // This needs to be done here and not after the loop\n // because we may have overwritten the last bytes in\n // source already due to overlap.\n let last := mload(sEnd)\n\n // Copy whole words front to back\n // Note: the first check is always true,\n // this could have been a do-while loop.\n // solhint-disable-next-line no-empty-blocks\n for {} lt(source, sEnd) {} {\n mstore(dest, mload(source))\n source := add(source, 32)\n dest := add(dest, 32)\n }\n \n // Write the last 32 bytes\n mstore(dEnd, last)\n }\n } else {\n assembly {\n // We subtract 32 from `sEnd` and `dEnd` because those\n // are the starting points when copying a word at the end.\n length := sub(length, 32)\n let sEnd := add(source, length)\n let dEnd := add(dest, length)\n\n // Remember the first 32 bytes of source\n // This needs to be done here and not after the loop\n // because we may have overwritten the first bytes in\n // source already due to overlap.\n let first := mload(source)\n\n // Copy whole words back to front\n // We use a signed comparisson here to allow dEnd to become\n // negative (happens when source and dest < 32). Valid\n // addresses in local memory will never be larger than\n // 2**255, so they can be safely re-interpreted as signed.\n // Note: the first check is always true,\n // this could have been a do-while loop.\n // solhint-disable-next-line no-empty-blocks\n for {} slt(dest, dEnd) {} {\n mstore(dEnd, mload(sEnd))\n sEnd := sub(sEnd, 32)\n dEnd := sub(dEnd, 32)\n }\n \n // Write the first 32 bytes\n mstore(dest, first)\n }\n }\n }\n }\n\n /// @dev Returns a slices from a byte array.\n /// @param b The byte array to take a slice from.\n /// @param from The starting index for the slice (inclusive).\n /// @param to The final index for the slice (exclusive).\n /// @return result The slice containing bytes at indices [from, to)\n function slice(\n bytes memory b,\n uint256 from,\n uint256 to\n )\n internal\n pure\n returns (bytes memory result)\n {\n require(\n from <= to,\n \"FROM_LESS_THAN_TO_REQUIRED\"\n );\n require(\n to < b.length,\n \"TO_LESS_THAN_LENGTH_REQUIRED\"\n );\n \n // Create a new bytes structure and copy contents\n result = new bytes(to - from);\n memCopy(\n result.contentAddress(),\n b.contentAddress() + from,\n result.length);\n return result;\n }\n \n /// @dev Returns a slice from a byte array without preserving the input.\n /// @param b The byte array to take a slice from. Will be destroyed in the process.\n /// @param from The starting index for the slice (inclusive).\n /// @param to The final index for the slice (exclusive).\n /// @return result The slice containing bytes at indices [from, to)\n /// @dev When `from == 0`, the original array will match the slice. In other cases its state will be corrupted.\n function sliceDestructive(\n bytes memory b,\n uint256 from,\n uint256 to\n )\n internal\n pure\n returns (bytes memory result)\n {\n require(\n from <= to,\n \"FROM_LESS_THAN_TO_REQUIRED\"\n );\n require(\n to < b.length,\n \"TO_LESS_THAN_LENGTH_REQUIRED\"\n );\n \n // Create a new bytes structure around [from, to) in-place.\n assembly {\n result := add(b, from)\n mstore(result, sub(to, from))\n }\n return result;\n }\n\n /// @dev Pops the last byte off of a byte array by modifying its length.\n /// @param b Byte array that will be modified.\n /// @return The byte that was popped off.\n function popLastByte(bytes memory b)\n internal\n pure\n returns (bytes1 result)\n {\n require(\n b.length > 0,\n \"GREATER_THAN_ZERO_LENGTH_REQUIRED\"\n );\n\n // Store last byte.\n result = b[b.length - 1];\n\n assembly {\n // Decrement length of byte array.\n let newLen := sub(mload(b), 1)\n mstore(b, newLen)\n }\n return result;\n }\n\n /// @dev Pops the last 20 bytes off of a byte array by modifying its length.\n /// @param b Byte array that will be modified.\n /// @return The 20 byte address that was popped off.\n function popLast20Bytes(bytes memory b)\n internal\n pure\n returns (address result)\n {\n require(\n b.length >= 20,\n \"GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\"\n );\n\n // Store last 20 bytes.\n result = readAddress(b, b.length - 20);\n\n assembly {\n // Subtract 20 from byte array length.\n let newLen := sub(mload(b), 20)\n mstore(b, newLen)\n }\n return result;\n }\n\n /// @dev Tests equality of two byte arrays.\n /// @param lhs First byte array to compare.\n /// @param rhs Second byte array to compare.\n /// @return True if arrays are the same. False otherwise.\n function equals(\n bytes memory lhs,\n bytes memory rhs\n )\n internal\n pure\n returns (bool equal)\n {\n // Keccak gas cost is 30 + numWords * 6. This is a cheap way to compare.\n // We early exit on unequal lengths, but keccak would also correctly\n // handle this.\n return lhs.length == rhs.length && keccak256(lhs) == keccak256(rhs);\n }\n\n /// @dev Reads an address from a position in a byte array.\n /// @param b Byte array containing an address.\n /// @param index Index in byte array of address.\n /// @return address from byte array.\n function readAddress(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (address result)\n {\n require(\n b.length >= index + 20, // 20 is length of address\n \"GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\"\n );\n\n // Add offset to index:\n // 1. Arrays are prefixed by 32-byte length parameter (add 32 to index)\n // 2. Account for size difference between address length and 32-byte storage word (subtract 12 from index)\n index += 20;\n\n // Read address from array memory\n assembly {\n // 1. Add index to address of bytes array\n // 2. Load 32-byte word from memory\n // 3. Apply 20-byte mask to obtain address\n result := and(mload(add(b, index)), 0xffffffffffffffffffffffffffffffffffffffff)\n }\n return result;\n }\n\n /// @dev Writes an address into a specific position in a byte array.\n /// @param b Byte array to insert address into.\n /// @param index Index in byte array of address.\n /// @param input Address to put into byte array.\n function writeAddress(\n bytes memory b,\n uint256 index,\n address input\n )\n internal\n pure\n {\n require(\n b.length >= index + 20, // 20 is length of address\n \"GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\"\n );\n\n // Add offset to index:\n // 1. Arrays are prefixed by 32-byte length parameter (add 32 to index)\n // 2. Account for size difference between address length and 32-byte storage word (subtract 12 from index)\n index += 20;\n\n // Store address into array memory\n assembly {\n // The address occupies 20 bytes and mstore stores 32 bytes.\n // First fetch the 32-byte word where we'll be storing the address, then\n // apply a mask so we have only the bytes in the word that the address will not occupy.\n // Then combine these bytes with the address and store the 32 bytes back to memory with mstore.\n\n // 1. Add index to address of bytes array\n // 2. Load 32-byte word from memory\n // 3. Apply 12-byte mask to obtain extra bytes occupying word of memory where we'll store the address\n let neighbors := and(\n mload(add(b, index)),\n 0xffffffffffffffffffffffff0000000000000000000000000000000000000000\n )\n \n // Make sure input address is clean.\n // (Solidity does not guarantee this)\n input := and(input, 0xffffffffffffffffffffffffffffffffffffffff)\n\n // Store the neighbors and address into memory\n mstore(add(b, index), xor(input, neighbors))\n }\n }\n\n /// @dev Reads a bytes32 value from a position in a byte array.\n /// @param b Byte array containing a bytes32 value.\n /// @param index Index in byte array of bytes32 value.\n /// @return bytes32 value from byte array.\n function readBytes32(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (bytes32 result)\n {\n require(\n b.length >= index + 32,\n \"GREATER_OR_EQUAL_TO_32_LENGTH_REQUIRED\"\n );\n\n // Arrays are prefixed by a 256 bit length parameter\n index += 32;\n\n // Read the bytes32 from array memory\n assembly {\n result := mload(add(b, index))\n }\n return result;\n }\n\n /// @dev Writes a bytes32 into a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input bytes32 to put into byte array.\n function writeBytes32(\n bytes memory b,\n uint256 index,\n bytes32 input\n )\n internal\n pure\n {\n require(\n b.length >= index + 32,\n \"GREATER_OR_EQUAL_TO_32_LENGTH_REQUIRED\"\n );\n\n // Arrays are prefixed by a 256 bit length parameter\n index += 32;\n\n // Read the bytes32 from array memory\n assembly {\n mstore(add(b, index), input)\n }\n }\n\n /// @dev Reads a uint256 value from a position in a byte array.\n /// @param b Byte array containing a uint256 value.\n /// @param index Index in byte array of uint256 value.\n /// @return uint256 value from byte array.\n function readUint256(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (uint256 result)\n {\n return uint256(readBytes32(b, index));\n }\n\n /// @dev Writes a uint256 into a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input uint256 to put into byte array.\n function writeUint256(\n bytes memory b,\n uint256 index,\n uint256 input\n )\n internal\n pure\n {\n writeBytes32(b, index, bytes32(input));\n }\n\n /// @dev Reads an unpadded bytes4 value from a position in a byte array.\n /// @param b Byte array containing a bytes4 value.\n /// @param index Index in byte array of bytes4 value.\n /// @return bytes4 value from byte array.\n function readBytes4(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (bytes4 result)\n {\n require(\n b.length >= index + 4,\n \"GREATER_OR_EQUAL_TO_4_LENGTH_REQUIRED\"\n );\n assembly {\n result := mload(add(b, 32))\n // Solidity does not require us to clean the trailing bytes.\n // We do it anyway\n result := and(result, 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000)\n }\n return result;\n }\n\n /// @dev Reads nested bytes from a specific position.\n /// @dev NOTE: the returned value overlaps with the input value.\n /// Both should be treated as immutable.\n /// @param b Byte array containing nested bytes.\n /// @param index Index of nested bytes.\n /// @return result Nested bytes.\n function readBytesWithLength(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (bytes memory result)\n {\n // Read length of nested bytes\n uint256 nestedBytesLength = readUint256(b, index);\n index += 32;\n\n // Assert length of <b> is valid, given\n // length of nested bytes\n require(\n b.length >= index + nestedBytesLength,\n \"GREATER_OR_EQUAL_TO_NESTED_BYTES_LENGTH_REQUIRED\"\n );\n \n // Return a pointer to the byte array as it exists inside `b`\n assembly {\n result := add(b, index)\n }\n return result;\n }\n\n /// @dev Inserts bytes at a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input bytes to insert.\n function writeBytesWithLength(\n bytes memory b,\n uint256 index,\n bytes memory input\n )\n internal\n pure\n {\n // Assert length of <b> is valid, given\n // length of input\n require(\n b.length >= index + 32 + input.length, // 32 bytes to store length\n \"GREATER_OR_EQUAL_TO_NESTED_BYTES_LENGTH_REQUIRED\"\n );\n\n // Copy <input> into <b>\n memCopy(\n b.contentAddress() + index,\n input.rawAddress(), // includes length of <input>\n input.length + 32 // +32 bytes to store <input> length\n );\n }\n\n /// @dev Performs a deep copy of a byte array onto another byte array of greater than or equal length.\n /// @param dest Byte array that will be overwritten with source bytes.\n /// @param source Byte array to copy onto dest bytes.\n function deepCopyBytes(\n bytes memory dest,\n bytes memory source\n )\n internal\n pure\n {\n uint256 sourceLen = source.length;\n // Dest length must be >= source length, or some bytes would not be copied.\n require(\n dest.length >= sourceLen,\n \"GREATER_OR_EQUAL_TO_SOURCE_BYTES_LENGTH_REQUIRED\"\n );\n memCopy(\n dest.contentAddress(),\n source.contentAddress(),\n sourceLen\n );\n }\n}\n",
+ "2.0.0/utils/SafeMath/SafeMath.sol": "pragma solidity 0.4.24;\n\n\ncontract SafeMath {\n function safeMul(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n if (a == 0) {\n return 0;\n }\n uint256 c = a * b;\n require(\n c / a == b,\n \"UINT256_OVERFLOW\"\n );\n return c;\n }\n\n function safeDiv(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n uint256 c = a / b;\n return c;\n }\n\n function safeSub(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n require(\n b <= a,\n \"UINT256_OVERFLOW\"\n );\n return a - b;\n }\n\n function safeAdd(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n uint256 c = a + b;\n require(\n c >= a,\n \"UINT256_OVERFLOW\"\n );\n return c;\n }\n\n function max64(uint64 a, uint64 b)\n internal\n pure\n returns (uint256)\n {\n return a >= b ? a : b;\n }\n\n function min64(uint64 a, uint64 b)\n internal\n pure\n returns (uint256)\n {\n return a < b ? a : b;\n }\n\n function max256(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n return a >= b ? a : b;\n }\n\n function min256(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n return a < b ? a : b;\n }\n}\n"
},
- "sourceTreeHashHex": "0x9db1fea357d8344a687da4bec67291f43cafe64ec20255f96248c2e180279382",
+ "sourceTreeHashHex": "0xe5560a5c22d8ed65136ac6d596bd8540f0c92f2a0b1e192720af2ab8dd3fca8b",
"compiler": {
"name": "solc",
"version": "soljson-v0.4.24+commit.e67f0147.js",
@@ -923,5 +892,11 @@
}
}
},
- "networks": {}
+ "networks": {
+ "50": {
+ "address": "0xb69e673309512a9d726f87304c6984054f87a93b",
+ "links": {},
+ "constructorArgs": "[\"0x48bacb9266a570d521063ef5dd96e61686dbe788\",\"0x0b1ba0af832d7c05fd64161e0db78e85978e8082\",\"0x871dd7c2b4b25e1aa18728e9d5f2af4c4e431f5c\",\"0xf47261b0000000000000000000000000871dd7c2b4b25e1aa18728e9d5f2af4c4e431f5c\",\"0xf47261b00000000000000000000000000b1ba0af832d7c05fd64161e0db78e85978e8082\"]"
+ }
+ }
} \ No newline at end of file
diff --git a/packages/migrations/artifacts/2.0.0/IAssetData.json b/packages/migrations/artifacts/2.0.0/IAssetData.json
index f8d59aca5..f4352ca96 100644
--- a/packages/migrations/artifacts/2.0.0/IAssetData.json
+++ b/packages/migrations/artifacts/2.0.0/IAssetData.json
@@ -61,9 +61,9 @@
}
},
"sourceCodes": {
- "2.0.0/protocol/AssetProxy/interfaces/IAssetData.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.23;\n\n// @dev Interface of the asset proxy's assetData.\n// The asset proxies take an ABI encoded `bytes assetData` as argument.\n// This argument is ABI encoded as one of the methods of this interface.\ninterface IAssetData {\n \n function ERC20Token(address tokenContract)\n external\n pure;\n \n function ERC721Token(\n address tokenContract,\n uint256 tokenId,\n bytes receiverData\n )\n external\n pure;\n \n}\n"
+ "2.0.0/protocol/AssetProxy/interfaces/IAssetData.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\n// solhint-disable\npragma solidity 0.4.24;\n\n\n// @dev Interface of the asset proxy's assetData.\n// The asset proxies take an ABI encoded `bytes assetData` as argument.\n// This argument is ABI encoded as one of the methods of this interface.\ninterface IAssetData {\n\n function ERC20Token(address tokenContract)\n external\n pure;\n \n function ERC721Token(\n address tokenContract,\n uint256 tokenId,\n bytes receiverData\n )\n external\n pure;\n \n}\n"
},
- "sourceTreeHashHex": "0x19de523e9107bb1fa80426061fb9362b2b947cc98d17788a8ccaca6cb2a229f8",
+ "sourceTreeHashHex": "0x10f0df50f72cf7bac6d3719d59a2653e09ef05b38f349efd7d9417e844e165ca",
"compiler": {
"name": "solc",
"version": "soljson-v0.4.24+commit.e67f0147.js",
diff --git a/packages/migrations/artifacts/2.0.0/IAssetProxy.json b/packages/migrations/artifacts/2.0.0/IAssetProxy.json
index 8055b33d2..2959c35b8 100644
--- a/packages/migrations/artifacts/2.0.0/IAssetProxy.json
+++ b/packages/migrations/artifacts/2.0.0/IAssetProxy.json
@@ -145,11 +145,11 @@
}
},
"sourceCodes": {
- "2.0.0/protocol/AssetProxy/interfaces/IAssetProxy.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"./IAuthorizable.sol\";\n\ncontract IAssetProxy is\n IAuthorizable\n{\n\n /// @dev Transfers assets. Either succeeds or throws.\n /// @param assetData Byte array encoded for the respective asset proxy.\n /// @param from Address to transfer asset from.\n /// @param to Address to transfer asset to.\n /// @param amount Amount of asset to transfer.\n function transferFrom(\n bytes assetData,\n address from,\n address to,\n uint256 amount\n )\n external;\n \n /// @dev Gets the proxy id associated with the proxy address.\n /// @return Proxy id.\n function getProxyId()\n external\n pure\n returns (bytes4);\n}\n",
- "2.0.0/protocol/AssetProxy/interfaces/IAuthorizable.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../../../utils/Ownable/IOwnable.sol\";\n\ncontract IAuthorizable is\n IOwnable\n{\n\n /// @dev Gets all authorized addresses.\n /// @return Array of authorized addresses.\n function getAuthorizedAddresses()\n external\n view\n returns (address[]);\n\n /// @dev Authorizes an address.\n /// @param target Address to authorize.\n function addAuthorizedAddress(address target)\n external;\n\n /// @dev Removes authorizion of an address.\n /// @param target Address to remove authorization from.\n function removeAuthorizedAddress(address target)\n external;\n\n /// @dev Removes authorizion of an address.\n /// @param target Address to remove authorization from.\n /// @param index Index of target in authorities array.\n function removeAuthorizedAddressAtIndex(\n address target,\n uint256 index\n )\n external;\n}\n",
- "2.0.0/utils/Ownable/IOwnable.sol": "pragma solidity ^0.4.24;\npragma experimental ABIEncoderV2;\n\n/*\n * Ownable\n *\n * Base contract with an owner.\n * Provides onlyOwner modifier, which prevents function from running if it is called by anyone other than the owner.\n */\n\ncontract IOwnable {\n function transferOwnership(address newOwner)\n public;\n}\n"
+ "2.0.0/protocol/AssetProxy/interfaces/IAssetProxy.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.24;\n\nimport \"./IAuthorizable.sol\";\n\n\ncontract IAssetProxy is\n IAuthorizable\n{\n\n /// @dev Transfers assets. Either succeeds or throws.\n /// @param assetData Byte array encoded for the respective asset proxy.\n /// @param from Address to transfer asset from.\n /// @param to Address to transfer asset to.\n /// @param amount Amount of asset to transfer.\n function transferFrom(\n bytes assetData,\n address from,\n address to,\n uint256 amount\n )\n external;\n \n /// @dev Gets the proxy id associated with the proxy address.\n /// @return Proxy id.\n function getProxyId()\n external\n pure\n returns (bytes4);\n}\n",
+ "2.0.0/protocol/AssetProxy/interfaces/IAuthorizable.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.24;\n\nimport \"../../../utils/Ownable/IOwnable.sol\";\n\n\ncontract IAuthorizable is\n IOwnable\n{\n\n /// @dev Authorizes an address.\n /// @param target Address to authorize.\n function addAuthorizedAddress(address target)\n external;\n\n /// @dev Removes authorizion of an address.\n /// @param target Address to remove authorization from.\n function removeAuthorizedAddress(address target)\n external;\n\n /// @dev Removes authorizion of an address.\n /// @param target Address to remove authorization from.\n /// @param index Index of target in authorities array.\n function removeAuthorizedAddressAtIndex(\n address target,\n uint256 index\n )\n external;\n \n /// @dev Gets all authorized addresses.\n /// @return Array of authorized addresses.\n function getAuthorizedAddresses()\n external\n view\n returns (address[] memory);\n}\n",
+ "2.0.0/utils/Ownable/IOwnable.sol": "pragma solidity 0.4.24;\n\n/*\n * Ownable\n *\n * Base contract with an owner.\n * Provides onlyOwner modifier, which prevents function from running if it is called by anyone other than the owner.\n */\n\ncontract IOwnable {\n function transferOwnership(address newOwner)\n public;\n}\n"
},
- "sourceTreeHashHex": "0x0552ebe81e07bd947eb25ed7e5a599e57931257a383a9e8644f5a73ec5e6facf",
+ "sourceTreeHashHex": "0x436aae2314863ac0046cc1462a09e9aca7bf9a8b8eb9ac172bd86e74c38ce802",
"compiler": {
"name": "solc",
"version": "soljson-v0.4.24+commit.e67f0147.js",
diff --git a/packages/migrations/artifacts/2.0.0/IValidator.json b/packages/migrations/artifacts/2.0.0/IValidator.json
index 0c89f777e..1a8c45a00 100644
--- a/packages/migrations/artifacts/2.0.0/IValidator.json
+++ b/packages/migrations/artifacts/2.0.0/IValidator.json
@@ -47,14 +47,14 @@
}
},
"sources": {
- "current/protocol/Exchange/interfaces/IValidator.sol": {
+ "2.0.0/protocol/Exchange/interfaces/IValidator.sol": {
"id": 0
}
},
"sourceCodes": {
- "current/protocol/Exchange/interfaces/IValidator.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.23;\n\ncontract IValidator {\n\n /// @dev Verifies that a signature is valid.\n /// @param hash Message hash that is signed.\n /// @param signerAddress Address that should have signed the given hash.\n /// @param signature Proof of signing.\n /// @return Validity of order signature.\n function isValidSignature(\n bytes32 hash,\n address signerAddress,\n bytes signature\n )\n external\n view\n returns (bool isValid);\n}\n"
+ "2.0.0/protocol/Exchange/interfaces/IValidator.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.24;\n\n\ncontract IValidator {\n\n /// @dev Verifies that a signature is valid.\n /// @param hash Message hash that is signed.\n /// @param signerAddress Address that should have signed the given hash.\n /// @param signature Proof of signing.\n /// @return Validity of order signature.\n function isValidSignature(\n bytes32 hash,\n address signerAddress,\n bytes signature\n )\n external\n view\n returns (bool isValid);\n}\n"
},
- "sourceTreeHashHex": "0x8758ec813f96db27c00c4d79efb69f440b34062c5f298ed09863a2b697af0422",
+ "sourceTreeHashHex": "0x560b257f8a4e1420a4586d5ba0c40e74042ef5af0f53aad412951444ea710a7e",
"compiler": {
"name": "solc",
"version": "soljson-v0.4.24+commit.e67f0147.js",
diff --git a/packages/migrations/artifacts/2.0.0/IWallet.json b/packages/migrations/artifacts/2.0.0/IWallet.json
index b66f3f19f..56ac59331 100644
--- a/packages/migrations/artifacts/2.0.0/IWallet.json
+++ b/packages/migrations/artifacts/2.0.0/IWallet.json
@@ -43,14 +43,14 @@
}
},
"sources": {
- "current/protocol/Exchange/interfaces/IWallet.sol": {
+ "2.0.0/protocol/Exchange/interfaces/IWallet.sol": {
"id": 0
}
},
"sourceCodes": {
- "current/protocol/Exchange/interfaces/IWallet.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.24;\n\ncontract IWallet {\n\n /// @dev Verifies that a signature is valid.\n /// @param hash Message hash that is signed.\n /// @param signature Proof of signing.\n /// @return Validity of order signature.\n function isValidSignature(\n bytes32 hash,\n bytes signature\n )\n external\n view\n returns (bool isValid);\n}\n"
+ "2.0.0/protocol/Exchange/interfaces/IWallet.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.24;\n\n\ncontract IWallet {\n\n /// @dev Verifies that a signature is valid.\n /// @param hash Message hash that is signed.\n /// @param signature Proof of signing.\n /// @return Validity of order signature.\n function isValidSignature(\n bytes32 hash,\n bytes signature\n )\n external\n view\n returns (bool isValid);\n}\n"
},
- "sourceTreeHashHex": "0x86b701eae05b54e6e83ae81e518db9b84b28a8d6c33c8b5ae8a89ff78c61f732",
+ "sourceTreeHashHex": "0x70b7d3c15ab87e6b4b1011d194282163232dfd88486038e4120d6bf245d58e44",
"compiler": {
"name": "solc",
"version": "soljson-v0.4.24+commit.e67f0147.js",
diff --git a/packages/migrations/artifacts/2.0.0/MixinAuthorizable.json b/packages/migrations/artifacts/2.0.0/MixinAuthorizable.json
index 5d2ebacc6..a65e3829c 100644
--- a/packages/migrations/artifacts/2.0.0/MixinAuthorizable.json
+++ b/packages/migrations/artifacts/2.0.0/MixinAuthorizable.json
@@ -167,43 +167,43 @@
"evm": {
"bytecode": {
"linkReferences": {},
- "object": "0x608060405260008054600160a060020a03191633179055610d58806100256000396000f30060806040526004361061008d5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166342f1181e8114610092578063494503d4146100b457806370712939146100ea5780638da5cb5b1461010a5780639ad267441461011f578063b91816111461013f578063d39de6e91461016c578063f2fde38b1461018e575b600080fd5b34801561009e57600080fd5b506100b26100ad366004610a96565b6101ae565b005b3480156100c057600080fd5b506100d46100cf366004610af6565b610339565b6040516100e19190610c73565b60405180910390f35b3480156100f657600080fd5b506100b2610105366004610a96565b61036e565b34801561011657600080fd5b506100d46105fd565b34801561012b57600080fd5b506100b261013a366004610abc565b610619565b34801561014b57600080fd5b5061015f61015a366004610a96565b6108fa565b6040516100e19190610c98565b34801561017857600080fd5b5061018161090f565b6040516100e19190610c87565b34801561019a57600080fd5b506100b26101a9366004610a96565b61097f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610208576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101ff90610ce6565b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff1615610268576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101ff90610cc6565b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055513392917f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c91a350565b600280548290811061034757fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6000805473ffffffffffffffffffffffffffffffffffffffff1633146103c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101ff90610ce6565b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff161515610421576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101ff90610ca6565b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260016020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b6002548110156105b6578173ffffffffffffffffffffffffffffffffffffffff1660028281548110151561049e57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614156105ae57600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019081106104f657fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff909216918390811061052957fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01906105a89082610a30565b506105b6565b60010161046e565b604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff16331461066a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101ff90610ce6565b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff1615156106cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101ff90610ca6565b6002548110610706576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101ff90610cd6565b8173ffffffffffffffffffffffffffffffffffffffff1660028281548110151561072c57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614610785576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101ff90610cb6565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061080057fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff909216918390811061083357fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01906108b29082610a30565b50604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b60016020526000908152604090205460ff1681565b6060600280548060200260200160405190810160405280929190818152602001828054801561097457602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610949575b505050505090505b90565b60005473ffffffffffffffffffffffffffffffffffffffff1633146109d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101ff90610ce6565b73ffffffffffffffffffffffffffffffffffffffff811615610a2d57600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b815481835581811115610a5457600083815260209020610a54918101908301610a59565b505050565b61097c91905b80821115610a735760008155600101610a5f565b5090565b6000610a838235610d00565b9392505050565b6000610a83823561097c565b600060208284031215610aa857600080fd5b6000610ab48484610a77565b949350505050565b60008060408385031215610acf57600080fd5b6000610adb8585610a77565b9250506020610aec85828601610a8a565b9150509250929050565b600060208284031215610b0857600080fd5b6000610ab48484610a8a565b610b1d81610d00565b82525050565b6000610b2e82610cfc565b808452602084019350610b4083610cf6565b60005b82811015610b7057610b56868351610b14565b610b5f82610cf6565b602096909601959150600101610b43565b5093949350505050565b610b1d81610d19565b601581527f5441524745545f4e4f545f415554484f52495a45440000000000000000000000602082015260400190565b601b81527f415554484f52495a45445f414444524553535f4d49534d415443480000000000602082015260400190565b601981527f5441524745545f414c52454144595f415554484f52495a454400000000000000602082015260400190565b601381527f494e4445585f4f55545f4f465f424f554e445300000000000000000000000000602082015260400190565b601381527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000602082015260400190565b60208101610c818284610b14565b92915050565b60208082528101610a838184610b23565b60208101610c818284610b7a565b60208082528101610c8181610b83565b60208082528101610c8181610bb3565b60208082528101610c8181610be3565b60208082528101610c8181610c13565b60208082528101610c8181610c43565b60200190565b5190565b73ffffffffffffffffffffffffffffffffffffffff1690565b1515905600a265627a7a72305820a60fa86ec600d98d37678d280dacffb5666f49e7d0e5c7c919d17546f8fe2dee6c6578706572696d656e74616cf50037",
- "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB NOT AND CALLER OR SWAP1 SSTORE PUSH2 0xD58 DUP1 PUSH2 0x25 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x8D JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x42F1181E DUP2 EQ PUSH2 0x92 JUMPI DUP1 PUSH4 0x494503D4 EQ PUSH2 0xB4 JUMPI DUP1 PUSH4 0x70712939 EQ PUSH2 0xEA JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x10A JUMPI DUP1 PUSH4 0x9AD26744 EQ PUSH2 0x11F JUMPI DUP1 PUSH4 0xB9181611 EQ PUSH2 0x13F JUMPI DUP1 PUSH4 0xD39DE6E9 EQ PUSH2 0x16C JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x18E JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x9E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB2 PUSH2 0xAD CALLDATASIZE PUSH1 0x4 PUSH2 0xA96 JUMP JUMPDEST PUSH2 0x1AE JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD4 PUSH2 0xCF CALLDATASIZE PUSH1 0x4 PUSH2 0xAF6 JUMP JUMPDEST PUSH2 0x339 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xE1 SWAP2 SWAP1 PUSH2 0xC73 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB2 PUSH2 0x105 CALLDATASIZE PUSH1 0x4 PUSH2 0xA96 JUMP JUMPDEST PUSH2 0x36E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x116 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD4 PUSH2 0x5FD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x12B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB2 PUSH2 0x13A CALLDATASIZE PUSH1 0x4 PUSH2 0xABC JUMP JUMPDEST PUSH2 0x619 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x14B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x15F PUSH2 0x15A CALLDATASIZE PUSH1 0x4 PUSH2 0xA96 JUMP JUMPDEST PUSH2 0x8FA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xE1 SWAP2 SWAP1 PUSH2 0xC98 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x178 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x181 PUSH2 0x90F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xE1 SWAP2 SWAP1 PUSH2 0xC87 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x19A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB2 PUSH2 0x1A9 CALLDATASIZE PUSH1 0x4 PUSH2 0xA96 JUMP JUMPDEST PUSH2 0x97F JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x208 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1FF SWAP1 PUSH2 0xCE6 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x268 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1FF SWAP1 PUSH2 0xCC6 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP4 OR SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD SWAP3 DUP4 ADD DUP2 SSTORE DUP4 MSTORE PUSH32 0x405787FA12A823E0F2B7631CC41B3BA8828B3321CA811111FA75CD3AA3BB5ACE SWAP1 SWAP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND DUP5 OR SWAP1 SSTORE MLOAD CALLER SWAP3 SWAP2 PUSH32 0x3147867C59D17E8FA9D522465651D44AAE0A9E38F902F3475B97E58072F0ED4C SWAP2 LOG3 POP JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD DUP3 SWAP1 DUP2 LT PUSH2 0x347 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x3C0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1FF SWAP1 PUSH2 0xCE6 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x421 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1FF SWAP1 PUSH2 0xCA6 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST PUSH1 0x2 SLOAD DUP2 LT ISZERO PUSH2 0x5B6 JUMPI DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 DUP3 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x49E JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x5AE JUMPI PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0x4F6 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x2 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 DUP4 SWAP1 DUP2 LT PUSH2 0x529 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 PUSH2 0x5A8 SWAP1 DUP3 PUSH2 0xA30 JUMP JUMPDEST POP PUSH2 0x5B6 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x46E JUMP JUMPDEST PUSH1 0x40 MLOAD CALLER SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH32 0x1F32C1B084E2DE0713B8FB16BD46BB9DF710A3DBEAE2F3CA93AF46E016DCC6B0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x66A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1FF SWAP1 PUSH2 0xCE6 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x6CB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1FF SWAP1 PUSH2 0xCA6 JUMP JUMPDEST PUSH1 0x2 SLOAD DUP2 LT PUSH2 0x706 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1FF SWAP1 PUSH2 0xCD6 JUMP JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 DUP3 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x72C JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x785 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1FF SWAP1 PUSH2 0xCB6 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0x800 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x2 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 DUP4 SWAP1 DUP2 LT PUSH2 0x833 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 PUSH2 0x8B2 SWAP1 DUP3 PUSH2 0xA30 JUMP JUMPDEST POP PUSH1 0x40 MLOAD CALLER SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH32 0x1F32C1B084E2DE0713B8FB16BD46BB9DF710A3DBEAE2F3CA93AF46E016DCC6B0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x2 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x974 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x949 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x9D0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1FF SWAP1 PUSH2 0xCE6 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0xA2D JUMPI PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND OR SWAP1 SSTORE JUMPDEST POP JUMP JUMPDEST DUP2 SLOAD DUP2 DUP4 SSTORE DUP2 DUP2 GT ISZERO PUSH2 0xA54 JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 PUSH2 0xA54 SWAP2 DUP2 ADD SWAP1 DUP4 ADD PUSH2 0xA59 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x97C SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0xA73 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0xA5F JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA83 DUP3 CALLDATALOAD PUSH2 0xD00 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA83 DUP3 CALLDATALOAD PUSH2 0x97C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xAA8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xAB4 DUP5 DUP5 PUSH2 0xA77 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xACF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xADB DUP6 DUP6 PUSH2 0xA77 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0xAEC DUP6 DUP3 DUP7 ADD PUSH2 0xA8A JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xB08 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xAB4 DUP5 DUP5 PUSH2 0xA8A JUMP JUMPDEST PUSH2 0xB1D DUP2 PUSH2 0xD00 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB2E DUP3 PUSH2 0xCFC JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH2 0xB40 DUP4 PUSH2 0xCF6 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0xB70 JUMPI PUSH2 0xB56 DUP7 DUP4 MLOAD PUSH2 0xB14 JUMP JUMPDEST PUSH2 0xB5F DUP3 PUSH2 0xCF6 JUMP JUMPDEST PUSH1 0x20 SWAP7 SWAP1 SWAP7 ADD SWAP6 SWAP2 POP PUSH1 0x1 ADD PUSH2 0xB43 JUMP JUMPDEST POP SWAP4 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0xB1D DUP2 PUSH2 0xD19 JUMP JUMPDEST PUSH1 0x15 DUP2 MSTORE PUSH32 0x5441524745545F4E4F545F415554484F52495A45440000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1B DUP2 MSTORE PUSH32 0x415554484F52495A45445F414444524553535F4D49534D415443480000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x19 DUP2 MSTORE PUSH32 0x5441524745545F414C52454144595F415554484F52495A454400000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x13 DUP2 MSTORE PUSH32 0x494E4445585F4F55545F4F465F424F554E445300000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x13 DUP2 MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xC81 DUP3 DUP5 PUSH2 0xB14 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xA83 DUP2 DUP5 PUSH2 0xB23 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xC81 DUP3 DUP5 PUSH2 0xB7A JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xC81 DUP2 PUSH2 0xB83 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xC81 DUP2 PUSH2 0xBB3 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xC81 DUP2 PUSH2 0xBE3 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xC81 DUP2 PUSH2 0xC13 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xC81 DUP2 PUSH2 0xC43 JUMP JUMPDEST PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST ISZERO ISZERO SWAP1 JUMP STOP LOG2 PUSH6 0x627A7A723058 KECCAK256 0xa6 0xf 0xa8 PUSH15 0xC600D98D37678D280DACFFB5666F49 0xe7 0xd0 0xe5 0xc7 0xc9 NOT 0xd1 PUSH22 0x46F8FE2DEE6C6578706572696D656E74616CF5003700 ",
- "sourceMap": "720:2494:0:-;;;363:5:4;:18;;-1:-1:-1;;;;;;363:18:4;371:10;363:18;;;720:2494:0;;;;;;"
+ "object": "0x608060405260008054600160a060020a03191633179055610d15806100256000396000f30060806040526004361061008d5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166342f1181e8114610092578063494503d4146100c257806370712939146101035780638da5cb5b146101315780639ad2674414610146578063b918161114610177578063d39de6e9146101b9578063f2fde38b1461021e575b600080fd5b34801561009e57600080fd5b506100c073ffffffffffffffffffffffffffffffffffffffff6004351661024c565b005b3480156100ce57600080fd5b506100da600435610438565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561010f57600080fd5b506100c073ffffffffffffffffffffffffffffffffffffffff6004351661046d565b34801561013d57600080fd5b506100da610766565b34801561015257600080fd5b506100c073ffffffffffffffffffffffffffffffffffffffff60043516602435610782565b34801561018357600080fd5b506101a573ffffffffffffffffffffffffffffffffffffffff60043516610b37565b604080519115158252519081900360200190f35b3480156101c557600080fd5b506101ce610b4c565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561020a5781810151838201526020016101f2565b505050509050019250505060405180910390f35b34801561022a57600080fd5b506100c073ffffffffffffffffffffffffffffffffffffffff60043516610bbc565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102d257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff161561036757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f5441524745545f414c52454144595f415554484f52495a454400000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055513392917f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c91a350565b600280548290811061044657fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6000805473ffffffffffffffffffffffffffffffffffffffff1633146104f457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff16151561058a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5441524745545f4e4f545f415554484f52495a45440000000000000000000000604482015290519081900360640190fd5b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260016020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b60025481101561071f578173ffffffffffffffffffffffffffffffffffffffff1660028281548110151561060757fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561071757600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061065f57fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff909216918390811061069257fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01906107119082610ca2565b5061071f565b6001016105d7565b604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff16331461080857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff16151561089e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5441524745545f4e4f545f415554484f52495a45440000000000000000000000604482015290519081900360640190fd5b600254811061090e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f494e4445585f4f55545f4f465f424f554e445300000000000000000000000000604482015290519081900360640190fd5b8173ffffffffffffffffffffffffffffffffffffffff1660028281548110151561093457fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16146109c257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f415554484f52495a45445f414444524553535f4d49534d415443480000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908110610a3d57fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff9092169183908110610a7057fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190610aef9082610ca2565b50604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b60016020526000908152604090205460ff1681565b60606002805480602002602001604051908101604052809291908181526020018280548015610bb157602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610b86575b505050505090505b90565b60005473ffffffffffffffffffffffffffffffffffffffff163314610c4257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811615610c9f57600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b815481835581811115610cc657600083815260209020610cc6918101908301610ccb565b505050565b610bb991905b80821115610ce55760008155600101610cd1565b50905600a165627a7a7230582078a6c5c2f156cb91e8d2ce89507c3ff742d2b051d7da72f7f48e985d643986c70029",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB NOT AND CALLER OR SWAP1 SSTORE PUSH2 0xD15 DUP1 PUSH2 0x25 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x8D JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x42F1181E DUP2 EQ PUSH2 0x92 JUMPI DUP1 PUSH4 0x494503D4 EQ PUSH2 0xC2 JUMPI DUP1 PUSH4 0x70712939 EQ PUSH2 0x103 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x131 JUMPI DUP1 PUSH4 0x9AD26744 EQ PUSH2 0x146 JUMPI DUP1 PUSH4 0xB9181611 EQ PUSH2 0x177 JUMPI DUP1 PUSH4 0xD39DE6E9 EQ PUSH2 0x1B9 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x21E JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x9E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xC0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x24C JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xDA PUSH1 0x4 CALLDATALOAD PUSH2 0x438 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x10F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xC0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x46D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x13D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xDA PUSH2 0x766 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x152 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xC0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD PUSH2 0x782 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x183 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0xB37 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1CE PUSH2 0xB4C 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 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x20A JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1F2 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x22A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xC0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0xBBC JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x2D2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x367 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5441524745545F414C52454144595F415554484F52495A454400000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP4 OR SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD SWAP3 DUP4 ADD DUP2 SSTORE DUP4 MSTORE PUSH32 0x405787FA12A823E0F2B7631CC41B3BA8828B3321CA811111FA75CD3AA3BB5ACE SWAP1 SWAP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND DUP5 OR SWAP1 SSTORE MLOAD CALLER SWAP3 SWAP2 PUSH32 0x3147867C59D17E8FA9D522465651D44AAE0A9E38F902F3475B97E58072F0ED4C SWAP2 LOG3 POP JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD DUP3 SWAP1 DUP2 LT PUSH2 0x446 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x4F4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x58A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5441524745545F4E4F545F415554484F52495A45440000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST PUSH1 0x2 SLOAD DUP2 LT ISZERO PUSH2 0x71F JUMPI DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 DUP3 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x607 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x717 JUMPI PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0x65F JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x2 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 DUP4 SWAP1 DUP2 LT PUSH2 0x692 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 PUSH2 0x711 SWAP1 DUP3 PUSH2 0xCA2 JUMP JUMPDEST POP PUSH2 0x71F JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x5D7 JUMP JUMPDEST PUSH1 0x40 MLOAD CALLER SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH32 0x1F32C1B084E2DE0713B8FB16BD46BB9DF710A3DBEAE2F3CA93AF46E016DCC6B0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x808 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x89E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5441524745545F4E4F545F415554484F52495A45440000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD DUP2 LT PUSH2 0x90E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E4445585F4F55545F4F465F424F554E445300000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 DUP3 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x934 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x9C2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x415554484F52495A45445F414444524553535F4D49534D415443480000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0xA3D JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x2 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 DUP4 SWAP1 DUP2 LT PUSH2 0xA70 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 PUSH2 0xAEF SWAP1 DUP3 PUSH2 0xCA2 JUMP JUMPDEST POP PUSH1 0x40 MLOAD CALLER SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH32 0x1F32C1B084E2DE0713B8FB16BD46BB9DF710A3DBEAE2F3CA93AF46E016DCC6B0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x2 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0xBB1 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xB86 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xC42 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0xC9F JUMPI PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND OR SWAP1 SSTORE JUMPDEST POP JUMP JUMPDEST DUP2 SLOAD DUP2 DUP4 SSTORE DUP2 DUP2 GT ISZERO PUSH2 0xCC6 JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 PUSH2 0xCC6 SWAP2 DUP2 ADD SWAP1 DUP4 ADD PUSH2 0xCCB JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0xBB9 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0xCE5 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0xCD1 JUMP JUMPDEST POP SWAP1 JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 PUSH25 0xA6C5C2F156CB91E8D2CE89507C3FF742D2B051D7DA72F7F48E SWAP9 0x5d PUSH5 0x3986C70029 ",
+ "sourceMap": "686:2494:0:-;;;329:5:4;:18;;-1:-1:-1;;;;;;329:18:4;337:10;329:18;;;686:2494:0;;;;;;"
},
"deployedBytecode": {
"linkReferences": {},
- "object": "0x60806040526004361061008d5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166342f1181e8114610092578063494503d4146100b457806370712939146100ea5780638da5cb5b1461010a5780639ad267441461011f578063b91816111461013f578063d39de6e91461016c578063f2fde38b1461018e575b600080fd5b34801561009e57600080fd5b506100b26100ad366004610a96565b6101ae565b005b3480156100c057600080fd5b506100d46100cf366004610af6565b610339565b6040516100e19190610c73565b60405180910390f35b3480156100f657600080fd5b506100b2610105366004610a96565b61036e565b34801561011657600080fd5b506100d46105fd565b34801561012b57600080fd5b506100b261013a366004610abc565b610619565b34801561014b57600080fd5b5061015f61015a366004610a96565b6108fa565b6040516100e19190610c98565b34801561017857600080fd5b5061018161090f565b6040516100e19190610c87565b34801561019a57600080fd5b506100b26101a9366004610a96565b61097f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610208576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101ff90610ce6565b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff1615610268576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101ff90610cc6565b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055513392917f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c91a350565b600280548290811061034757fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6000805473ffffffffffffffffffffffffffffffffffffffff1633146103c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101ff90610ce6565b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff161515610421576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101ff90610ca6565b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260016020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b6002548110156105b6578173ffffffffffffffffffffffffffffffffffffffff1660028281548110151561049e57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614156105ae57600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019081106104f657fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff909216918390811061052957fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01906105a89082610a30565b506105b6565b60010161046e565b604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff16331461066a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101ff90610ce6565b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff1615156106cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101ff90610ca6565b6002548110610706576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101ff90610cd6565b8173ffffffffffffffffffffffffffffffffffffffff1660028281548110151561072c57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614610785576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101ff90610cb6565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061080057fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff909216918390811061083357fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01906108b29082610a30565b50604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b60016020526000908152604090205460ff1681565b6060600280548060200260200160405190810160405280929190818152602001828054801561097457602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610949575b505050505090505b90565b60005473ffffffffffffffffffffffffffffffffffffffff1633146109d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101ff90610ce6565b73ffffffffffffffffffffffffffffffffffffffff811615610a2d57600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b815481835581811115610a5457600083815260209020610a54918101908301610a59565b505050565b61097c91905b80821115610a735760008155600101610a5f565b5090565b6000610a838235610d00565b9392505050565b6000610a83823561097c565b600060208284031215610aa857600080fd5b6000610ab48484610a77565b949350505050565b60008060408385031215610acf57600080fd5b6000610adb8585610a77565b9250506020610aec85828601610a8a565b9150509250929050565b600060208284031215610b0857600080fd5b6000610ab48484610a8a565b610b1d81610d00565b82525050565b6000610b2e82610cfc565b808452602084019350610b4083610cf6565b60005b82811015610b7057610b56868351610b14565b610b5f82610cf6565b602096909601959150600101610b43565b5093949350505050565b610b1d81610d19565b601581527f5441524745545f4e4f545f415554484f52495a45440000000000000000000000602082015260400190565b601b81527f415554484f52495a45445f414444524553535f4d49534d415443480000000000602082015260400190565b601981527f5441524745545f414c52454144595f415554484f52495a454400000000000000602082015260400190565b601381527f494e4445585f4f55545f4f465f424f554e445300000000000000000000000000602082015260400190565b601381527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000602082015260400190565b60208101610c818284610b14565b92915050565b60208082528101610a838184610b23565b60208101610c818284610b7a565b60208082528101610c8181610b83565b60208082528101610c8181610bb3565b60208082528101610c8181610be3565b60208082528101610c8181610c13565b60208082528101610c8181610c43565b60200190565b5190565b73ffffffffffffffffffffffffffffffffffffffff1690565b1515905600a265627a7a72305820a60fa86ec600d98d37678d280dacffb5666f49e7d0e5c7c919d17546f8fe2dee6c6578706572696d656e74616cf50037",
- "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x8D JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x42F1181E DUP2 EQ PUSH2 0x92 JUMPI DUP1 PUSH4 0x494503D4 EQ PUSH2 0xB4 JUMPI DUP1 PUSH4 0x70712939 EQ PUSH2 0xEA JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x10A JUMPI DUP1 PUSH4 0x9AD26744 EQ PUSH2 0x11F JUMPI DUP1 PUSH4 0xB9181611 EQ PUSH2 0x13F JUMPI DUP1 PUSH4 0xD39DE6E9 EQ PUSH2 0x16C JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x18E JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x9E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB2 PUSH2 0xAD CALLDATASIZE PUSH1 0x4 PUSH2 0xA96 JUMP JUMPDEST PUSH2 0x1AE JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD4 PUSH2 0xCF CALLDATASIZE PUSH1 0x4 PUSH2 0xAF6 JUMP JUMPDEST PUSH2 0x339 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xE1 SWAP2 SWAP1 PUSH2 0xC73 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB2 PUSH2 0x105 CALLDATASIZE PUSH1 0x4 PUSH2 0xA96 JUMP JUMPDEST PUSH2 0x36E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x116 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD4 PUSH2 0x5FD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x12B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB2 PUSH2 0x13A CALLDATASIZE PUSH1 0x4 PUSH2 0xABC JUMP JUMPDEST PUSH2 0x619 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x14B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x15F PUSH2 0x15A CALLDATASIZE PUSH1 0x4 PUSH2 0xA96 JUMP JUMPDEST PUSH2 0x8FA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xE1 SWAP2 SWAP1 PUSH2 0xC98 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x178 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x181 PUSH2 0x90F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xE1 SWAP2 SWAP1 PUSH2 0xC87 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x19A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB2 PUSH2 0x1A9 CALLDATASIZE PUSH1 0x4 PUSH2 0xA96 JUMP JUMPDEST PUSH2 0x97F JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x208 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1FF SWAP1 PUSH2 0xCE6 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x268 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1FF SWAP1 PUSH2 0xCC6 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP4 OR SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD SWAP3 DUP4 ADD DUP2 SSTORE DUP4 MSTORE PUSH32 0x405787FA12A823E0F2B7631CC41B3BA8828B3321CA811111FA75CD3AA3BB5ACE SWAP1 SWAP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND DUP5 OR SWAP1 SSTORE MLOAD CALLER SWAP3 SWAP2 PUSH32 0x3147867C59D17E8FA9D522465651D44AAE0A9E38F902F3475B97E58072F0ED4C SWAP2 LOG3 POP JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD DUP3 SWAP1 DUP2 LT PUSH2 0x347 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x3C0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1FF SWAP1 PUSH2 0xCE6 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x421 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1FF SWAP1 PUSH2 0xCA6 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST PUSH1 0x2 SLOAD DUP2 LT ISZERO PUSH2 0x5B6 JUMPI DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 DUP3 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x49E JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x5AE JUMPI PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0x4F6 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x2 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 DUP4 SWAP1 DUP2 LT PUSH2 0x529 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 PUSH2 0x5A8 SWAP1 DUP3 PUSH2 0xA30 JUMP JUMPDEST POP PUSH2 0x5B6 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x46E JUMP JUMPDEST PUSH1 0x40 MLOAD CALLER SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH32 0x1F32C1B084E2DE0713B8FB16BD46BB9DF710A3DBEAE2F3CA93AF46E016DCC6B0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x66A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1FF SWAP1 PUSH2 0xCE6 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x6CB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1FF SWAP1 PUSH2 0xCA6 JUMP JUMPDEST PUSH1 0x2 SLOAD DUP2 LT PUSH2 0x706 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1FF SWAP1 PUSH2 0xCD6 JUMP JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 DUP3 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x72C JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x785 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1FF SWAP1 PUSH2 0xCB6 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0x800 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x2 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 DUP4 SWAP1 DUP2 LT PUSH2 0x833 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 PUSH2 0x8B2 SWAP1 DUP3 PUSH2 0xA30 JUMP JUMPDEST POP PUSH1 0x40 MLOAD CALLER SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH32 0x1F32C1B084E2DE0713B8FB16BD46BB9DF710A3DBEAE2F3CA93AF46E016DCC6B0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x2 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x974 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x949 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x9D0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1FF SWAP1 PUSH2 0xCE6 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0xA2D JUMPI PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND OR SWAP1 SSTORE JUMPDEST POP JUMP JUMPDEST DUP2 SLOAD DUP2 DUP4 SSTORE DUP2 DUP2 GT ISZERO PUSH2 0xA54 JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 PUSH2 0xA54 SWAP2 DUP2 ADD SWAP1 DUP4 ADD PUSH2 0xA59 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x97C SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0xA73 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0xA5F JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA83 DUP3 CALLDATALOAD PUSH2 0xD00 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA83 DUP3 CALLDATALOAD PUSH2 0x97C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xAA8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xAB4 DUP5 DUP5 PUSH2 0xA77 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xACF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xADB DUP6 DUP6 PUSH2 0xA77 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0xAEC DUP6 DUP3 DUP7 ADD PUSH2 0xA8A JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xB08 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xAB4 DUP5 DUP5 PUSH2 0xA8A JUMP JUMPDEST PUSH2 0xB1D DUP2 PUSH2 0xD00 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB2E DUP3 PUSH2 0xCFC JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH2 0xB40 DUP4 PUSH2 0xCF6 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0xB70 JUMPI PUSH2 0xB56 DUP7 DUP4 MLOAD PUSH2 0xB14 JUMP JUMPDEST PUSH2 0xB5F DUP3 PUSH2 0xCF6 JUMP JUMPDEST PUSH1 0x20 SWAP7 SWAP1 SWAP7 ADD SWAP6 SWAP2 POP PUSH1 0x1 ADD PUSH2 0xB43 JUMP JUMPDEST POP SWAP4 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0xB1D DUP2 PUSH2 0xD19 JUMP JUMPDEST PUSH1 0x15 DUP2 MSTORE PUSH32 0x5441524745545F4E4F545F415554484F52495A45440000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1B DUP2 MSTORE PUSH32 0x415554484F52495A45445F414444524553535F4D49534D415443480000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x19 DUP2 MSTORE PUSH32 0x5441524745545F414C52454144595F415554484F52495A454400000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x13 DUP2 MSTORE PUSH32 0x494E4445585F4F55545F4F465F424F554E445300000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x13 DUP2 MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xC81 DUP3 DUP5 PUSH2 0xB14 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xA83 DUP2 DUP5 PUSH2 0xB23 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xC81 DUP3 DUP5 PUSH2 0xB7A JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xC81 DUP2 PUSH2 0xB83 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xC81 DUP2 PUSH2 0xBB3 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xC81 DUP2 PUSH2 0xBE3 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xC81 DUP2 PUSH2 0xC13 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xC81 DUP2 PUSH2 0xC43 JUMP JUMPDEST PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST ISZERO ISZERO SWAP1 JUMP STOP LOG2 PUSH6 0x627A7A723058 KECCAK256 0xa6 0xf 0xa8 PUSH15 0xC600D98D37678D280DACFFB5666F49 0xe7 0xd0 0xe5 0xc7 0xc9 NOT 0xd1 PUSH22 0x46F8FE2DEE6C6578706572696D656E74616CF5003700 ",
- "sourceMap": "720:2494:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1180:320;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1180:320:0;;;;;;;;;;;1065:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1065:28:0;;;;;;;;;;;;;;;;;;;;;;;;;1614:547;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1614:547:0;;;;;;;;;292:20:4;;8:9:-1;5:2;;;30:1;27;20:12;5:2;292:20:4;;;;2334:643:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2334:643:0;;;;;;;;;1016:43;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1016:43:0;;;;;;;;;;;;;;;;;3074:138;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3074:138:0;;;;;;;;;;;;534:167:4;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;534:167:4;;;;;;;;;1180:320:0;460:5:4;;;;446:10;:19;425:85;;;;;;;;;;;;;;;;;;;;;;1297:18:0;;;;;;;:10;:18;;;;;;;;1296:19;1275:91;;;;;;;;;;;;;;1377:18;;;;;;;1398:4;1377:18;;;;;;;;:25;;;;;;;;1412:11;27:10:-1;;23:18;;;45:23;;1412:24:0;;;;;;;;;;;;;;1451:42;1482:10;;1377:18;1451:42;;;1180:320;:::o;1065:28::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1065:28:0;:::o;1614:547::-;1849:9;460:5:4;;;;446:10;:19;425:85;;;;;;;;;;;;;;1733:18:0;;;;;;;:10;:18;;;;;;;;1712:86;;;;;;;;;;;;;;;;-1:-1:-1;1816:18:0;;;;;;;:10;:18;;;;;1809:25;;;;;;1844:252;1868:11;:18;1864:22;;1844:252;;;1929:6;1911:24;;:11;1923:1;1911:14;;;;;;;;;;;;;;;;;;;;;;:24;1907:179;;;1972:11;1984:18;;:22;;;;1972:35;;;;;;;;;;;;;;;;1955:11;:14;;1972:35;;;;;1967:1;;1955:14;;;;;;;;;;;;;;;:52;;;;;;;;;;;;;;;2025:11;:23;;;;;;;;;:::i;:::-;;2066:5;;1907:179;1888:3;;1844:252;;;2110:44;;2143:10;;2110:44;;;;;;;;;1614:547;;:::o;292:20:4:-;;;;;;:::o;2334:643:0:-;460:5:4;;;;446:10;:19;425:85;;;;;;;;;;;;;;2497:18:0;;;;;;;:10;:18;;;;;;;;2476:86;;;;;;;;;;;;;;;;2601:11;:18;2593:26;;2572:92;;;;;;;;;;;;;;2717:6;2695:28;;:11;2707:5;2695:18;;;;;;;;;;;;;;;;;;;;;;:28;2674:102;;;;;;;;;;;;;;2794:18;;;;;;;:10;:18;;;;;2787:25;;;;;;2843:11;2855:18;;:22;;;;2843:35;;;;;;;;;;;;;;;;2822:11;:18;;2843:35;;;;;2834:5;;2822:18;;;;;;;;;;;;;;;:56;;;;;;;;;;;;;;;2888:11;:23;;;;;;;;;:::i;:::-;-1:-1:-1;2926:44:0;;2959:10;;2926:44;;;;;;;;;2334:643;;:::o;1016:43::-;;;;;;;;;;;;;;;:::o;3074:138::-;3155:9;3194:11;3187:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3074:138;;:::o;534:167:4:-;460:5;;;;446:10;:19;425:85;;;;;;;;;;;;;;630:22;;;;626:69;;668:5;:16;;;;;;;;;;626:69;534:167;:::o;720:2494:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;5:118:-1;;72:46;110:6;97:20;72:46;;;63:55;57:66;-1:-1;;;57:66;130:118;;197:46;235:6;222:20;197:46;;255:241;;359:2;347:9;338:7;334:23;330:32;327:2;;;375:1;372;365:12;327:2;410:1;427:53;472:7;452:9;427:53;;;417:63;321:175;-1:-1;;;;321:175;503:366;;;624:2;612:9;603:7;599:23;595:32;592:2;;;640:1;637;630:12;592:2;675:1;692:53;737:7;717:9;692:53;;;682:63;;654:97;782:2;800:53;845:7;836:6;825:9;821:22;800:53;;;790:63;;761:98;586:283;;;;;;876:241;;980:2;968:9;959:7;955:23;951:32;948:2;;;996:1;993;986:12;948:2;1031:1;1048:53;1093:7;1073:9;1048:53;;1124:110;1197:31;1222:5;1197:31;;;1192:3;1185:44;1179:55;;;1272:590;;1407:54;1455:5;1407:54;;;1479:6;1474:3;1467:19;1503:4;1498:3;1494:14;1487:21;;1548:56;1598:5;1548:56;;;1625:1;1610:230;1635:6;1632:1;1629:13;1610:230;;;1675:53;1724:3;1715:6;1709:13;1675:53;;;1745:60;1798:6;1745:60;;;1828:4;1819:14;;;;;1735:70;-1:-1;1657:1;1650:9;1610:230;;;-1:-1;1853:3;;1386:476;-1:-1;;;;1386:476;1870:101;1937:28;1959:5;1937:28;;1979:296;2134:2;2122:15;;2171:66;2166:2;2157:12;;2150:88;2266:2;2257:12;;2115:160;2284:296;2439:2;2427:15;;2476:66;2471:2;2462:12;;2455:88;2571:2;2562:12;;2420:160;2589:296;2744:2;2732:15;;2781:66;2776:2;2767:12;;2760:88;2876:2;2867:12;;2725:160;2894:296;3049:2;3037:15;;3086:66;3081:2;3072:12;;3065:88;3181:2;3172:12;;3030:160;3199:296;3354:2;3342:15;;3391:66;3386:2;3377:12;;3370:88;3486:2;3477:12;;3335:160;3503:193;3611:2;3596:18;;3625:61;3600:9;3659:6;3625:61;;;3582:114;;;;;3703:341;3861:2;3875:47;;;3846:18;;3936:98;3846:18;4020:6;3936:98;;4051:181;4153:2;4138:18;;4167:55;4142:9;4195:6;4167:55;;4239:387;4420:2;4434:47;;;4405:18;;4495:121;4405:18;4495:121;;4633:387;4814:2;4828:47;;;4799:18;;4889:121;4799:18;4889:121;;5027:387;5208:2;5222:47;;;5193:18;;5283:121;5193:18;5283:121;;5421:387;5602:2;5616:47;;;5587:18;;5677:121;5587:18;5677:121;;5815:387;5996:2;6010:47;;;5981:18;;6071:121;5981:18;6071:121;;6211;6320:4;6308:17;;6289:43;6341:107;6431:12;;6415:33;6586:128;6666:42;6655:54;;6638:76;6721:92;6794:13;6787:21;;6770:43"
+ "object": "0x60806040526004361061008d5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166342f1181e8114610092578063494503d4146100c257806370712939146101035780638da5cb5b146101315780639ad2674414610146578063b918161114610177578063d39de6e9146101b9578063f2fde38b1461021e575b600080fd5b34801561009e57600080fd5b506100c073ffffffffffffffffffffffffffffffffffffffff6004351661024c565b005b3480156100ce57600080fd5b506100da600435610438565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561010f57600080fd5b506100c073ffffffffffffffffffffffffffffffffffffffff6004351661046d565b34801561013d57600080fd5b506100da610766565b34801561015257600080fd5b506100c073ffffffffffffffffffffffffffffffffffffffff60043516602435610782565b34801561018357600080fd5b506101a573ffffffffffffffffffffffffffffffffffffffff60043516610b37565b604080519115158252519081900360200190f35b3480156101c557600080fd5b506101ce610b4c565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561020a5781810151838201526020016101f2565b505050509050019250505060405180910390f35b34801561022a57600080fd5b506100c073ffffffffffffffffffffffffffffffffffffffff60043516610bbc565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102d257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff161561036757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f5441524745545f414c52454144595f415554484f52495a454400000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055513392917f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c91a350565b600280548290811061044657fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6000805473ffffffffffffffffffffffffffffffffffffffff1633146104f457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff16151561058a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5441524745545f4e4f545f415554484f52495a45440000000000000000000000604482015290519081900360640190fd5b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260016020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b60025481101561071f578173ffffffffffffffffffffffffffffffffffffffff1660028281548110151561060757fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561071757600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061065f57fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff909216918390811061069257fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01906107119082610ca2565b5061071f565b6001016105d7565b604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff16331461080857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff16151561089e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5441524745545f4e4f545f415554484f52495a45440000000000000000000000604482015290519081900360640190fd5b600254811061090e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f494e4445585f4f55545f4f465f424f554e445300000000000000000000000000604482015290519081900360640190fd5b8173ffffffffffffffffffffffffffffffffffffffff1660028281548110151561093457fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16146109c257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f415554484f52495a45445f414444524553535f4d49534d415443480000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908110610a3d57fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff9092169183908110610a7057fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190610aef9082610ca2565b50604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b60016020526000908152604090205460ff1681565b60606002805480602002602001604051908101604052809291908181526020018280548015610bb157602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610b86575b505050505090505b90565b60005473ffffffffffffffffffffffffffffffffffffffff163314610c4257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811615610c9f57600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b815481835581811115610cc657600083815260209020610cc6918101908301610ccb565b505050565b610bb991905b80821115610ce55760008155600101610cd1565b50905600a165627a7a7230582078a6c5c2f156cb91e8d2ce89507c3ff742d2b051d7da72f7f48e985d643986c70029",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x8D JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x42F1181E DUP2 EQ PUSH2 0x92 JUMPI DUP1 PUSH4 0x494503D4 EQ PUSH2 0xC2 JUMPI DUP1 PUSH4 0x70712939 EQ PUSH2 0x103 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x131 JUMPI DUP1 PUSH4 0x9AD26744 EQ PUSH2 0x146 JUMPI DUP1 PUSH4 0xB9181611 EQ PUSH2 0x177 JUMPI DUP1 PUSH4 0xD39DE6E9 EQ PUSH2 0x1B9 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x21E JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x9E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xC0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x24C JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xDA PUSH1 0x4 CALLDATALOAD PUSH2 0x438 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x10F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xC0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x46D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x13D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xDA PUSH2 0x766 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x152 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xC0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD PUSH2 0x782 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x183 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0xB37 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1CE PUSH2 0xB4C 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 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x20A JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1F2 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x22A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xC0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0xBBC JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x2D2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x367 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5441524745545F414C52454144595F415554484F52495A454400000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP4 OR SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD SWAP3 DUP4 ADD DUP2 SSTORE DUP4 MSTORE PUSH32 0x405787FA12A823E0F2B7631CC41B3BA8828B3321CA811111FA75CD3AA3BB5ACE SWAP1 SWAP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND DUP5 OR SWAP1 SSTORE MLOAD CALLER SWAP3 SWAP2 PUSH32 0x3147867C59D17E8FA9D522465651D44AAE0A9E38F902F3475B97E58072F0ED4C SWAP2 LOG3 POP JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD DUP3 SWAP1 DUP2 LT PUSH2 0x446 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x4F4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x58A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5441524745545F4E4F545F415554484F52495A45440000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST PUSH1 0x2 SLOAD DUP2 LT ISZERO PUSH2 0x71F JUMPI DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 DUP3 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x607 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x717 JUMPI PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0x65F JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x2 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 DUP4 SWAP1 DUP2 LT PUSH2 0x692 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 PUSH2 0x711 SWAP1 DUP3 PUSH2 0xCA2 JUMP JUMPDEST POP PUSH2 0x71F JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x5D7 JUMP JUMPDEST PUSH1 0x40 MLOAD CALLER SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH32 0x1F32C1B084E2DE0713B8FB16BD46BB9DF710A3DBEAE2F3CA93AF46E016DCC6B0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x808 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x89E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5441524745545F4E4F545F415554484F52495A45440000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD DUP2 LT PUSH2 0x90E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E4445585F4F55545F4F465F424F554E445300000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 DUP3 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x934 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x9C2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x415554484F52495A45445F414444524553535F4D49534D415443480000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0xA3D JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x2 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 DUP4 SWAP1 DUP2 LT PUSH2 0xA70 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 PUSH2 0xAEF SWAP1 DUP3 PUSH2 0xCA2 JUMP JUMPDEST POP PUSH1 0x40 MLOAD CALLER SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH32 0x1F32C1B084E2DE0713B8FB16BD46BB9DF710A3DBEAE2F3CA93AF46E016DCC6B0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x2 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0xBB1 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xB86 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xC42 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0xC9F JUMPI PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND OR SWAP1 SSTORE JUMPDEST POP JUMP JUMPDEST DUP2 SLOAD DUP2 DUP4 SSTORE DUP2 DUP2 GT ISZERO PUSH2 0xCC6 JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 PUSH2 0xCC6 SWAP2 DUP2 ADD SWAP1 DUP4 ADD PUSH2 0xCCB JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0xBB9 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0xCE5 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0xCD1 JUMP JUMPDEST POP SWAP1 JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 PUSH25 0xA6C5C2F156CB91E8D2CE89507C3FF742D2B051D7DA72F7F48E SWAP9 0x5d PUSH5 0x3986C70029 ",
+ "sourceMap": "686:2494:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1146:320;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1146:320:0;;;;;;;;;1031:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1031:28:0;;;;;;;;;;;;;;;;;;;;;;;;1580:547;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1580:547:0;;;;;;;258:20:4;;8:9:-1;5:2;;;30:1;27;20:12;5:2;258:20:4;;;;2300:643:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2300:643:0;;;;;;;;;982:43;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;982:43:0;;;;;;;;;;;;;;;;;;;;;;;;;3040:138;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3040:138:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;3040:138:0;;;;;;;;;;;;;;;;;500:167:4;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;500:167:4;;;;;;;1146:320:0;426:5:4;;;;412:10;:19;391:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1263:18:0;;;;;;;:10;:18;;;;;;;;1262:19;1241:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1343:18;;;;;;;1364:4;1343:18;;;;;;;;:25;;;;;;;;1378:11;27:10:-1;;23:18;;;45:23;;1378:24:0;;;;;;;;;;;;;;1417:42;1448:10;;1343:18;1417:42;;;1146:320;:::o;1031:28::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1031:28:0;:::o;1580:547::-;1815:9;426:5:4;;;;412:10;:19;391:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1699:18:0;;;;;;;:10;:18;;;;;;;;1678:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1782:18:0;;;;;;;:10;:18;;;;;1775:25;;;;;;1810:252;1834:11;:18;1830:22;;1810:252;;;1895:6;1877:24;;:11;1889:1;1877:14;;;;;;;;;;;;;;;;;;;;;;:24;1873:179;;;1938:11;1950:18;;:22;;;;1938:35;;;;;;;;;;;;;;;;1921:11;:14;;1938:35;;;;;1933:1;;1921:14;;;;;;;;;;;;;;;:52;;;;;;;;;;;;;;;1991:11;:23;;;;;;;;;:::i;:::-;;2032:5;;1873:179;1854:3;;1810:252;;;2076:44;;2109:10;;2076:44;;;;;;;;;1580:547;;:::o;258:20:4:-;;;;;;:::o;2300:643:0:-;426:5:4;;;;412:10;:19;391:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2463:18:0;;;;;;;:10;:18;;;;;;;;2442:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2567:11;:18;2559:26;;2538:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2683:6;2661:28;;:11;2673:5;2661:18;;;;;;;;;;;;;;;;;;;;;;:28;2640:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2760:18;;;;;;;:10;:18;;;;;2753:25;;;;;;2809:11;2821:18;;:22;;;;2809:35;;;;;;;;;;;;;;;;2788:11;:18;;2809:35;;;;;2800:5;;2788:18;;;;;;;;;;;;;;;:56;;;;;;;;;;;;;;;2854:11;:23;;;;;;;;;:::i;:::-;-1:-1:-1;2892:44:0;;2925:10;;2892:44;;;;;;;;;2300:643;;:::o;982:43::-;;;;;;;;;;;;;;;:::o;3040:138::-;3121:9;3160:11;3153:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3040:138;;:::o;500:167:4:-;426:5;;;;412:10;:19;391:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;596:22;;;;592:69;;634:5;:16;;;;;;;;;;592:69;500:167;:::o;686:2494:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;"
}
}
},
"sources": {
- "current/protocol/AssetProxy/MixinAuthorizable.sol": {
+ "2.0.0/protocol/AssetProxy/MixinAuthorizable.sol": {
"id": 0
},
- "current/protocol/AssetProxy/interfaces/IAuthorizable.sol": {
+ "2.0.0/protocol/AssetProxy/interfaces/IAuthorizable.sol": {
"id": 1
},
- "current/protocol/AssetProxy/mixins/MAuthorizable.sol": {
+ "2.0.0/protocol/AssetProxy/mixins/MAuthorizable.sol": {
"id": 2
},
- "current/utils/Ownable/IOwnable.sol": {
+ "2.0.0/utils/Ownable/IOwnable.sol": {
"id": 3
},
- "current/utils/Ownable/Ownable.sol": {
+ "2.0.0/utils/Ownable/Ownable.sol": {
"id": 4
}
},
"sourceCodes": {
- "current/protocol/AssetProxy/MixinAuthorizable.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../../utils/Ownable/Ownable.sol\";\nimport \"./mixins/MAuthorizable.sol\";\n\ncontract MixinAuthorizable is\n Ownable,\n MAuthorizable\n{\n\n /// @dev Only authorized addresses can invoke functions with this modifier.\n modifier onlyAuthorized {\n require(\n authorized[msg.sender],\n \"SENDER_NOT_AUTHORIZED\"\n );\n _;\n }\n\n mapping (address => bool) public authorized;\n address[] public authorities;\n\n /// @dev Authorizes an address.\n /// @param target Address to authorize.\n function addAuthorizedAddress(address target)\n external\n onlyOwner\n {\n require(\n !authorized[target],\n \"TARGET_ALREADY_AUTHORIZED\"\n );\n\n authorized[target] = true;\n authorities.push(target);\n emit AuthorizedAddressAdded(target, msg.sender);\n }\n\n /// @dev Removes authorizion of an address.\n /// @param target Address to remove authorization from.\n function removeAuthorizedAddress(address target)\n external\n onlyOwner\n {\n require(\n authorized[target],\n \"TARGET_NOT_AUTHORIZED\"\n );\n\n delete authorized[target];\n for (uint256 i = 0; i < authorities.length; i++) {\n if (authorities[i] == target) {\n authorities[i] = authorities[authorities.length - 1];\n authorities.length -= 1;\n break;\n }\n }\n emit AuthorizedAddressRemoved(target, msg.sender);\n }\n\n /// @dev Removes authorizion of an address.\n /// @param target Address to remove authorization from.\n /// @param index Index of target in authorities array.\n function removeAuthorizedAddressAtIndex(\n address target,\n uint256 index\n )\n external\n onlyOwner\n {\n require(\n authorized[target],\n \"TARGET_NOT_AUTHORIZED\"\n );\n require(\n index < authorities.length,\n \"INDEX_OUT_OF_BOUNDS\"\n );\n require(\n authorities[index] == target,\n \"AUTHORIZED_ADDRESS_MISMATCH\"\n );\n\n delete authorized[target];\n authorities[index] = authorities[authorities.length - 1];\n authorities.length -= 1;\n emit AuthorizedAddressRemoved(target, msg.sender);\n }\n\n /// @dev Gets all authorized addresses.\n /// @return Array of authorized addresses.\n function getAuthorizedAddresses()\n external\n view\n returns (address[] memory)\n {\n return authorities;\n }\n}\n",
- "current/protocol/AssetProxy/interfaces/IAuthorizable.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../../../utils/Ownable/IOwnable.sol\";\n\ncontract IAuthorizable is\n IOwnable\n{\n\n /// @dev Gets all authorized addresses.\n /// @return Array of authorized addresses.\n function getAuthorizedAddresses()\n external\n view\n returns (address[]);\n\n /// @dev Authorizes an address.\n /// @param target Address to authorize.\n function addAuthorizedAddress(address target)\n external;\n\n /// @dev Removes authorizion of an address.\n /// @param target Address to remove authorization from.\n function removeAuthorizedAddress(address target)\n external;\n\n /// @dev Removes authorizion of an address.\n /// @param target Address to remove authorization from.\n /// @param index Index of target in authorities array.\n function removeAuthorizedAddressAtIndex(\n address target,\n uint256 index\n )\n external;\n}\n",
- "current/protocol/AssetProxy/mixins/MAuthorizable.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../interfaces/IAuthorizable.sol\";\n\ncontract MAuthorizable is\n IAuthorizable\n{\n\n // Event logged when a new address is authorized.\n event AuthorizedAddressAdded(\n address indexed target,\n address indexed caller\n );\n\n // Event logged when a currently authorized address is unauthorized.\n event AuthorizedAddressRemoved(\n address indexed target,\n address indexed caller\n );\n\n /// @dev Only authorized addresses can invoke functions with this modifier.\n modifier onlyAuthorized { revert(); _; }\n}\n",
- "current/utils/Ownable/IOwnable.sol": "pragma solidity ^0.4.24;\npragma experimental ABIEncoderV2;\n\n/*\n * Ownable\n *\n * Base contract with an owner.\n * Provides onlyOwner modifier, which prevents function from running if it is called by anyone other than the owner.\n */\n\ncontract IOwnable {\n function transferOwnership(address newOwner)\n public;\n}\n",
- "current/utils/Ownable/Ownable.sol": "pragma solidity ^0.4.24;\npragma experimental ABIEncoderV2;\n\n/*\n * Ownable\n *\n * Base contract with an owner.\n * Provides onlyOwner modifier, which prevents function from running if it is called by anyone other than the owner.\n */\n\nimport \"./IOwnable.sol\";\n\ncontract Ownable is IOwnable {\n address public owner;\n\n constructor ()\n public\n {\n owner = msg.sender;\n }\n\n modifier onlyOwner() {\n require(\n msg.sender == owner,\n \"ONLY_CONTRACT_OWNER\"\n );\n _;\n }\n\n function transferOwnership(address newOwner)\n public\n onlyOwner\n {\n if (newOwner != address(0)) {\n owner = newOwner;\n }\n }\n}\n"
+ "2.0.0/protocol/AssetProxy/MixinAuthorizable.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.24;\n\nimport \"../../utils/Ownable/Ownable.sol\";\nimport \"./mixins/MAuthorizable.sol\";\n\n\ncontract MixinAuthorizable is\n Ownable,\n MAuthorizable\n{\n\n /// @dev Only authorized addresses can invoke functions with this modifier.\n modifier onlyAuthorized {\n require(\n authorized[msg.sender],\n \"SENDER_NOT_AUTHORIZED\"\n );\n _;\n }\n\n mapping (address => bool) public authorized;\n address[] public authorities;\n\n /// @dev Authorizes an address.\n /// @param target Address to authorize.\n function addAuthorizedAddress(address target)\n external\n onlyOwner\n {\n require(\n !authorized[target],\n \"TARGET_ALREADY_AUTHORIZED\"\n );\n\n authorized[target] = true;\n authorities.push(target);\n emit AuthorizedAddressAdded(target, msg.sender);\n }\n\n /// @dev Removes authorizion of an address.\n /// @param target Address to remove authorization from.\n function removeAuthorizedAddress(address target)\n external\n onlyOwner\n {\n require(\n authorized[target],\n \"TARGET_NOT_AUTHORIZED\"\n );\n\n delete authorized[target];\n for (uint256 i = 0; i < authorities.length; i++) {\n if (authorities[i] == target) {\n authorities[i] = authorities[authorities.length - 1];\n authorities.length -= 1;\n break;\n }\n }\n emit AuthorizedAddressRemoved(target, msg.sender);\n }\n\n /// @dev Removes authorizion of an address.\n /// @param target Address to remove authorization from.\n /// @param index Index of target in authorities array.\n function removeAuthorizedAddressAtIndex(\n address target,\n uint256 index\n )\n external\n onlyOwner\n {\n require(\n authorized[target],\n \"TARGET_NOT_AUTHORIZED\"\n );\n require(\n index < authorities.length,\n \"INDEX_OUT_OF_BOUNDS\"\n );\n require(\n authorities[index] == target,\n \"AUTHORIZED_ADDRESS_MISMATCH\"\n );\n\n delete authorized[target];\n authorities[index] = authorities[authorities.length - 1];\n authorities.length -= 1;\n emit AuthorizedAddressRemoved(target, msg.sender);\n }\n\n /// @dev Gets all authorized addresses.\n /// @return Array of authorized addresses.\n function getAuthorizedAddresses()\n external\n view\n returns (address[] memory)\n {\n return authorities;\n }\n}\n",
+ "2.0.0/protocol/AssetProxy/interfaces/IAuthorizable.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.24;\n\nimport \"../../../utils/Ownable/IOwnable.sol\";\n\n\ncontract IAuthorizable is\n IOwnable\n{\n\n /// @dev Authorizes an address.\n /// @param target Address to authorize.\n function addAuthorizedAddress(address target)\n external;\n\n /// @dev Removes authorizion of an address.\n /// @param target Address to remove authorization from.\n function removeAuthorizedAddress(address target)\n external;\n\n /// @dev Removes authorizion of an address.\n /// @param target Address to remove authorization from.\n /// @param index Index of target in authorities array.\n function removeAuthorizedAddressAtIndex(\n address target,\n uint256 index\n )\n external;\n \n /// @dev Gets all authorized addresses.\n /// @return Array of authorized addresses.\n function getAuthorizedAddresses()\n external\n view\n returns (address[] memory);\n}\n",
+ "2.0.0/protocol/AssetProxy/mixins/MAuthorizable.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.24;\n\nimport \"../interfaces/IAuthorizable.sol\";\n\n\ncontract MAuthorizable is\n IAuthorizable\n{\n\n // Event logged when a new address is authorized.\n event AuthorizedAddressAdded(\n address indexed target,\n address indexed caller\n );\n\n // Event logged when a currently authorized address is unauthorized.\n event AuthorizedAddressRemoved(\n address indexed target,\n address indexed caller\n );\n\n /// @dev Only authorized addresses can invoke functions with this modifier.\n modifier onlyAuthorized { revert(); _; }\n}\n",
+ "2.0.0/utils/Ownable/IOwnable.sol": "pragma solidity 0.4.24;\n\n/*\n * Ownable\n *\n * Base contract with an owner.\n * Provides onlyOwner modifier, which prevents function from running if it is called by anyone other than the owner.\n */\n\ncontract IOwnable {\n function transferOwnership(address newOwner)\n public;\n}\n",
+ "2.0.0/utils/Ownable/Ownable.sol": "pragma solidity 0.4.24;\n\n/*\n * Ownable\n *\n * Base contract with an owner.\n * Provides onlyOwner modifier, which prevents function from running if it is called by anyone other than the owner.\n */\n\nimport \"./IOwnable.sol\";\n\n\ncontract Ownable is IOwnable {\n address public owner;\n\n constructor ()\n public\n {\n owner = msg.sender;\n }\n\n modifier onlyOwner() {\n require(\n msg.sender == owner,\n \"ONLY_CONTRACT_OWNER\"\n );\n _;\n }\n\n function transferOwnership(address newOwner)\n public\n onlyOwner\n {\n if (newOwner != address(0)) {\n owner = newOwner;\n }\n }\n}\n"
},
- "sourceTreeHashHex": "0x62f76f2406b31c812b4e1b01c87945bd28ef1e657e6a39a61e722d94ef8937cd",
+ "sourceTreeHashHex": "0x72b8e85e9acb373c8213b2247c5e8811ac500e4a23abc5fa67b7a9d018d7e356",
"compiler": {
"name": "solc",
"version": "soljson-v0.4.24+commit.e67f0147.js",
diff --git a/packages/migrations/artifacts/2.0.0/MultiSigWallet.json b/packages/migrations/artifacts/2.0.0/MultiSigWallet.json
index 7f8ae54e2..22657f3f6 100644
--- a/packages/migrations/artifacts/2.0.0/MultiSigWallet.json
+++ b/packages/migrations/artifacts/2.0.0/MultiSigWallet.json
@@ -538,27 +538,27 @@
"evm": {
"bytecode": {
"linkReferences": {},
- "object": "0x60806040523480156200001157600080fd5b50604051620019e2380380620019e28339810160405280516020820151910180519091906000908260328211806200004857508181115b8062000052575080155b806200005c575081155b156200006757600080fd5b600092505b84518310156200013b576002600086858151811015156200008957fe5b6020908102909101810151600160a060020a031682528101919091526040016000205460ff1680620000dc57508483815181101515620000c557fe5b90602001906020020151600160a060020a03166000145b15620000e757600080fd5b6001600260008786815181101515620000fc57fe5b602090810291909101810151600160a060020a03168252810191909152604001600020805460ff1916911515919091179055600192909201916200006c565b84516200015090600390602088019062000162565b50505060049190915550620001f69050565b828054828255906000526020600020908101928215620001ba579160200282015b82811115620001ba5782518254600160a060020a031916600160a060020a0390911617825560209092019160019091019062000183565b50620001c8929150620001cc565b5090565b620001f391905b80821115620001c8578054600160a060020a0319168155600101620001d3565b90565b6117dc80620002066000396000f30060806040526004361061011c5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663025e7c27811461015e578063173825d91461019f57806320ea8d86146101cd5780632f54bf6e146101e55780633411c81c1461022757806354741525146102585780637065cb4814610289578063784547a7146102b75780638b51d13f146102cf5780639ace38c2146102e7578063a0e67e2b146103bc578063a8abe69a14610421578063b5dc40c314610446578063b77bf6001461045e578063ba51a6df14610473578063c01a8c841461048b578063c6427474146104a3578063d74f8edd14610519578063dc8452cd1461052e578063e20056e614610543578063ee22610b14610577575b600034111561015c5760408051348152905133917fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c919081900360200190a25b005b34801561016a57600080fd5b5061017660043561058f565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156101ab57600080fd5b5061015c73ffffffffffffffffffffffffffffffffffffffff600435166105c4565b3480156101d957600080fd5b5061015c60043561081b565b3480156101f157600080fd5b5061021373ffffffffffffffffffffffffffffffffffffffff600435166108f3565b604080519115158252519081900360200190f35b34801561023357600080fd5b5061021360043573ffffffffffffffffffffffffffffffffffffffff60243516610908565b34801561026457600080fd5b5061027760043515156024351515610928565b60408051918252519081900360200190f35b34801561029557600080fd5b5061015c73ffffffffffffffffffffffffffffffffffffffff60043516610994565b3480156102c357600080fd5b50610213600435610b01565b3480156102db57600080fd5b50610277600435610b92565b3480156102f357600080fd5b506102ff600435610c0e565b604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018060200183151515158152602001828103825284818151815260200191508051906020019080838360005b8381101561037e578181015183820152602001610366565b50505050905090810190601f1680156103ab5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b3480156103c857600080fd5b506103d1610cf7565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561040d5781810151838201526020016103f5565b505050509050019250505060405180910390f35b34801561042d57600080fd5b506103d160043560243560443515156064351515610d67565b34801561045257600080fd5b506103d1600435610ea0565b34801561046a57600080fd5b5061027761104d565b34801561047f57600080fd5b5061015c600435611053565b34801561049757600080fd5b5061015c6004356110ca565b3480156104af57600080fd5b50604080516020600460443581810135601f810184900484028501840190955284845261027794823573ffffffffffffffffffffffffffffffffffffffff169460248035953695946064949201919081908401838280828437509497506111c09650505050505050565b34801561052557600080fd5b506102776111df565b34801561053a57600080fd5b506102776111e4565b34801561054f57600080fd5b5061015c73ffffffffffffffffffffffffffffffffffffffff600435811690602435166111ea565b34801561058357600080fd5b5061015c6004356113fa565b600380548290811061059d57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b60003330146105d257600080fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020526040902054829060ff16151561060857600080fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260026020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905591505b6003547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0182101561078b578273ffffffffffffffffffffffffffffffffffffffff166003838154811015156106a857fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561078057600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061070057fe5b6000918252602090912001546003805473ffffffffffffffffffffffffffffffffffffffff909216918490811061073357fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061078b565b600190910190610656565b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01906107bc90826116f4565b5060035460045411156107d5576003546107d590611053565b60405173ffffffffffffffffffffffffffffffffffffffff8416907f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9090600090a2505050565b3360008181526002602052604090205460ff16151561083957600080fd5b60008281526001602090815260408083203380855292529091205483919060ff16151561086557600080fd5b600084815260208190526040902060030154849060ff161561088657600080fd5b600085815260016020908152604080832033808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555187927ff6a317157440607f36269043eb55f1287a5a19ba2216afeab88cd46cbcfb88e991a35050505050565b60026020526000908152604090205460ff1681565b600160209081526000928352604080842090915290825290205460ff1681565b6000805b60055481101561098d57838015610955575060008181526020819052604090206003015460ff16155b806109795750828015610979575060008181526020819052604090206003015460ff165b15610985576001820191505b60010161092c565b5092915050565b3330146109a057600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116600090815260026020526040902054819060ff16156109d557600080fd5b8173ffffffffffffffffffffffffffffffffffffffff811615156109f857600080fd5b6003805490506001016004546032821180610a1257508181115b80610a1b575080155b80610a24575081155b15610a2e57600080fd5b73ffffffffffffffffffffffffffffffffffffffff851660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915560038054918201815583527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055517ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d9190a25050505050565b600080805b600354811015610b8b5760008481526001602052604081206003805491929184908110610b2f57fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400190205460ff1615610b70576001820191505b600454821415610b835760019250610b8b565b600101610b06565b5050919050565b6000805b600354811015610c085760008381526001602052604081206003805491929184908110610bbf57fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400190205460ff1615610c00576001820191505b600101610b96565b50919050565b60006020818152918152604090819020805460018083015460028085018054875161010095821615959095027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691909104601f810188900488028401880190965285835273ffffffffffffffffffffffffffffffffffffffff90931695909491929190830182828015610ce45780601f10610cb957610100808354040283529160200191610ce4565b820191906000526020600020905b815481529060010190602001808311610cc757829003601f168201915b5050506003909301549192505060ff1684565b60606003805480602002602001604051908101604052809291908181526020018280548015610d5c57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610d31575b505050505090505b90565b606080600080600554604051908082528060200260200182016040528015610d99578160200160208202803883390190505b50925060009150600090505b600554811015610e2057858015610dce575060008181526020819052604090206003015460ff16155b80610df25750848015610df2575060008181526020819052604090206003015460ff165b15610e1857808383815181101515610e0657fe5b60209081029091010152600191909101905b600101610da5565b878703604051908082528060200260200182016040528015610e4c578160200160208202803883390190505b5093508790505b86811015610e95578281815181101515610e6957fe5b9060200190602002015184898303815181101515610e8357fe5b60209081029091010152600101610e53565b505050949350505050565b606080600080600380549050604051908082528060200260200182016040528015610ed5578160200160208202803883390190505b50925060009150600090505b600354811015610fb95760008581526001602052604081206003805491929184908110610f0a57fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400190205460ff1615610fb1576003805482908110610f5257fe5b600091825260209091200154835173ffffffffffffffffffffffffffffffffffffffff90911690849084908110610f8557fe5b73ffffffffffffffffffffffffffffffffffffffff909216602092830290910190910152600191909101905b600101610ee1565b81604051908082528060200260200182016040528015610fe3578160200160208202803883390190505b509350600090505b8181101561104557828181518110151561100157fe5b90602001906020020151848281518110151561101957fe5b73ffffffffffffffffffffffffffffffffffffffff909216602092830290910190910152600101610feb565b505050919050565b60055481565b33301461105f57600080fd5b60035481603282118061107157508181115b8061107a575080155b80611083575081155b1561108d57600080fd5b60048390556040805184815290517fa3f1ee9126a074d9326c682f561767f710e927faa811f7a99829d49dc421797a9181900360200190a1505050565b3360008181526002602052604090205460ff1615156110e857600080fd5b600082815260208190526040902054829073ffffffffffffffffffffffffffffffffffffffff16151561111a57600080fd5b60008381526001602090815260408083203380855292529091205484919060ff161561114557600080fd5b600085815260016020818152604080842033808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909317909255905187927f4a504a94899432a9846e1aa406dceb1bcfd538bb839071d49d1e5e23f5be30ef91a36111b9856113fa565b5050505050565b60006111cd8484846115c1565b90506111d8816110ca565b9392505050565b603281565b60045481565b60003330146111f857600080fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260026020526040902054839060ff16151561122e57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260026020526040902054839060ff161561126357600080fd5b600092505b600354831015611328578473ffffffffffffffffffffffffffffffffffffffff1660038481548110151561129857fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561131d57836003848154811015156112d057fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611328565b600190920191611268565b73ffffffffffffffffffffffffffffffffffffffff80861660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090811690915593881682528082208054909416600117909355915190917f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9091a260405173ffffffffffffffffffffffffffffffffffffffff8516907ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d90600090a25050505050565b600081815260208190526040812060030154829060ff161561141b57600080fd5b61142483610b01565b156115bc57600083815260208190526040908190206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915581548183015493516002808501805495985073ffffffffffffffffffffffffffffffffffffffff909316959492939192839285927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91831615610100029190910190911604801561151b5780601f106114f05761010080835404028352916020019161151b565b820191906000526020600020905b8154815290600101906020018083116114fe57829003601f168201915b505091505060006040518083038185875af192505050156115665760405183907f33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed7590600090a26115bc565b60405183907f526441bb6c1aba3c9a4a6ca1d6545da9c2333c8c48343ef398eb858d72b7923690600090a26003820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b505050565b60008373ffffffffffffffffffffffffffffffffffffffff811615156115e657600080fd5b6005546040805160808101825273ffffffffffffffffffffffffffffffffffffffff8881168252602080830189815283850189815260006060860181905287815280845295909520845181547fffffffffffffffffffffffff0000000000000000000000000000000000000000169416939093178355516001830155925180519496509193909261167e926002850192910190611718565b5060609190910151600390910180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905560058054600101905560405182907fc0ba8fe4b176c1714197d43b9cc6bcf797a4a7461c5fe8d0ef6e184ae7601e5190600090a2509392505050565b8154818355818111156115bc576000838152602090206115bc918101908301611796565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061175957805160ff1916838001178555611786565b82800160010185558215611786579182015b8281111561178657825182559160200191906001019061176b565b50611792929150611796565b5090565b610d6491905b80821115611792576000815560010161179c5600a165627a7a72305820b784d4aa81d4315a2dd128ba81f43375b85b97e17b5e9efa504e0a862f590f360029",
- "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x19E2 CODESIZE SUB DUP1 PUSH3 0x19E2 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 MSTORE DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD SWAP2 ADD DUP1 MLOAD SWAP1 SWAP2 SWAP1 PUSH1 0x0 SWAP1 DUP3 PUSH1 0x32 DUP3 GT DUP1 PUSH3 0x48 JUMPI POP DUP2 DUP2 GT JUMPDEST DUP1 PUSH3 0x52 JUMPI POP DUP1 ISZERO JUMPDEST DUP1 PUSH3 0x5C JUMPI POP DUP2 ISZERO JUMPDEST ISZERO PUSH3 0x67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP3 POP JUMPDEST DUP5 MLOAD DUP4 LT ISZERO PUSH3 0x13B JUMPI PUSH1 0x2 PUSH1 0x0 DUP7 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH3 0x89 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND DUP3 MSTORE DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0xFF AND DUP1 PUSH3 0xDC JUMPI POP DUP5 DUP4 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH3 0xC5 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x0 EQ JUMPDEST ISZERO PUSH3 0xE7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x2 PUSH1 0x0 DUP8 DUP7 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH3 0xFC JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND DUP3 MSTORE DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x1 SWAP3 SWAP1 SWAP3 ADD SWAP2 PUSH3 0x6C JUMP JUMPDEST DUP5 MLOAD PUSH3 0x150 SWAP1 PUSH1 0x3 SWAP1 PUSH1 0x20 DUP9 ADD SWAP1 PUSH3 0x162 JUMP JUMPDEST POP POP POP PUSH1 0x4 SWAP2 SWAP1 SWAP2 SSTORE POP PUSH3 0x1F6 SWAP1 POP JUMP JUMPDEST DUP3 DUP1 SLOAD DUP3 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP3 DUP3 ISZERO PUSH3 0x1BA JUMPI SWAP2 PUSH1 0x20 MUL DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x1BA JUMPI DUP3 MLOAD DUP3 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB NOT AND PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP1 SWAP2 AND OR DUP3 SSTORE PUSH1 0x20 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH3 0x183 JUMP JUMPDEST POP PUSH3 0x1C8 SWAP3 SWAP2 POP PUSH3 0x1CC JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH3 0x1F3 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x1C8 JUMPI DUP1 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB NOT AND DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x1D3 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0x17DC DUP1 PUSH3 0x206 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x11C JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x25E7C27 DUP2 EQ PUSH2 0x15E JUMPI DUP1 PUSH4 0x173825D9 EQ PUSH2 0x19F JUMPI DUP1 PUSH4 0x20EA8D86 EQ PUSH2 0x1CD JUMPI DUP1 PUSH4 0x2F54BF6E EQ PUSH2 0x1E5 JUMPI DUP1 PUSH4 0x3411C81C EQ PUSH2 0x227 JUMPI DUP1 PUSH4 0x54741525 EQ PUSH2 0x258 JUMPI DUP1 PUSH4 0x7065CB48 EQ PUSH2 0x289 JUMPI DUP1 PUSH4 0x784547A7 EQ PUSH2 0x2B7 JUMPI DUP1 PUSH4 0x8B51D13F EQ PUSH2 0x2CF JUMPI DUP1 PUSH4 0x9ACE38C2 EQ PUSH2 0x2E7 JUMPI DUP1 PUSH4 0xA0E67E2B EQ PUSH2 0x3BC JUMPI DUP1 PUSH4 0xA8ABE69A EQ PUSH2 0x421 JUMPI DUP1 PUSH4 0xB5DC40C3 EQ PUSH2 0x446 JUMPI DUP1 PUSH4 0xB77BF600 EQ PUSH2 0x45E JUMPI DUP1 PUSH4 0xBA51A6DF EQ PUSH2 0x473 JUMPI DUP1 PUSH4 0xC01A8C84 EQ PUSH2 0x48B JUMPI DUP1 PUSH4 0xC6427474 EQ PUSH2 0x4A3 JUMPI DUP1 PUSH4 0xD74F8EDD EQ PUSH2 0x519 JUMPI DUP1 PUSH4 0xDC8452CD EQ PUSH2 0x52E JUMPI DUP1 PUSH4 0xE20056E6 EQ PUSH2 0x543 JUMPI DUP1 PUSH4 0xEE22610B EQ PUSH2 0x577 JUMPI JUMPDEST PUSH1 0x0 CALLVALUE GT ISZERO PUSH2 0x15C JUMPI PUSH1 0x40 DUP1 MLOAD CALLVALUE DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0xE1FFFCC4923D04B559F4D29A8BFC6CDA04EB5B0D3C460751C2402C5C5CC9109C SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x16A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x176 PUSH1 0x4 CALLDATALOAD PUSH2 0x58F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x15C PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x5C4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x15C PUSH1 0x4 CALLDATALOAD PUSH2 0x81B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x213 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x8F3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x233 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x213 PUSH1 0x4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD AND PUSH2 0x908 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x264 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x277 PUSH1 0x4 CALLDATALOAD ISZERO ISZERO PUSH1 0x24 CALLDATALOAD ISZERO ISZERO PUSH2 0x928 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x295 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x15C PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x994 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x213 PUSH1 0x4 CALLDATALOAD PUSH2 0xB01 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x277 PUSH1 0x4 CALLDATALOAD PUSH2 0xB92 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2FF PUSH1 0x4 CALLDATALOAD PUSH2 0xC0E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 ISZERO ISZERO ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x37E JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x366 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x3AB 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 SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D1 PUSH2 0xCF7 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 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x40D JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3F5 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x42D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D1 PUSH1 0x4 CALLDATALOAD PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD ISZERO ISZERO PUSH1 0x64 CALLDATALOAD ISZERO ISZERO PUSH2 0xD67 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x452 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D1 PUSH1 0x4 CALLDATALOAD PUSH2 0xEA0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x46A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x277 PUSH2 0x104D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x47F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x15C PUSH1 0x4 CALLDATALOAD PUSH2 0x1053 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x497 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x15C PUSH1 0x4 CALLDATALOAD PUSH2 0x10CA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 PUSH1 0x44 CALLDATALOAD DUP2 DUP2 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x277 SWAP5 DUP3 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP5 PUSH1 0x24 DUP1 CALLDATALOAD SWAP6 CALLDATASIZE SWAP6 SWAP5 PUSH1 0x64 SWAP5 SWAP3 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x11C0 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x525 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x277 PUSH2 0x11DF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x53A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x277 PUSH2 0x11E4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x54F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x15C PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH2 0x11EA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x583 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x15C PUSH1 0x4 CALLDATALOAD PUSH2 0x13FA JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD DUP3 SWAP1 DUP2 LT PUSH2 0x59D JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x0 CALLER ADDRESS EQ PUSH2 0x5D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x608 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE SWAP2 POP JUMPDEST PUSH1 0x3 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP3 LT ISZERO PUSH2 0x78B JUMPI DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x3 DUP4 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x6A8 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x780 JUMPI PUSH1 0x3 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0x700 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x3 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x733 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0x78B JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x656 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 PUSH2 0x7BC SWAP1 DUP3 PUSH2 0x16F4 JUMP JUMPDEST POP PUSH1 0x3 SLOAD PUSH1 0x4 SLOAD GT ISZERO PUSH2 0x7D5 JUMPI PUSH1 0x3 SLOAD PUSH2 0x7D5 SWAP1 PUSH2 0x1053 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH32 0x8001553A916EF2F495D26A907CC54D96ED840D7BDA71E73194BF5A9DF7A76B90 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x839 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD DUP4 SWAP2 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x865 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD DUP5 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x886 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE MLOAD DUP8 SWAP3 PUSH32 0xF6A317157440607F36269043EB55F1287A5A19BA2216AFEAB88CD46CBCFB88E9 SWAP2 LOG3 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST PUSH1 0x5 SLOAD DUP2 LT ISZERO PUSH2 0x98D JUMPI DUP4 DUP1 ISZERO PUSH2 0x955 JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND ISZERO JUMPDEST DUP1 PUSH2 0x979 JUMPI POP DUP3 DUP1 ISZERO PUSH2 0x979 JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND JUMPDEST ISZERO PUSH2 0x985 JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x1 ADD PUSH2 0x92C JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0x9A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x9D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO ISZERO PUSH2 0x9F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3 DUP1 SLOAD SWAP1 POP PUSH1 0x1 ADD PUSH1 0x4 SLOAD PUSH1 0x32 DUP3 GT DUP1 PUSH2 0xA12 JUMPI POP DUP2 DUP2 GT JUMPDEST DUP1 PUSH2 0xA1B JUMPI POP DUP1 ISZERO JUMPDEST DUP1 PUSH2 0xA24 JUMPI POP DUP2 ISZERO JUMPDEST ISZERO PUSH2 0xA2E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x3 DUP1 SLOAD SWAP2 DUP3 ADD DUP2 SSTORE DUP4 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND DUP5 OR SWAP1 SSTORE MLOAD PUSH32 0xF39E6E1EB0EDCF53C221607B54B00CD28F3196FED0A24994DC308B8F611B682D SWAP2 SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 JUMPDEST PUSH1 0x3 SLOAD DUP2 LT ISZERO PUSH2 0xB8B JUMPI PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 DUP1 SLOAD SWAP2 SWAP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0xB2F JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xB70 JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x4 SLOAD DUP3 EQ ISZERO PUSH2 0xB83 JUMPI PUSH1 0x1 SWAP3 POP PUSH2 0xB8B JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0xB06 JUMP JUMPDEST POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST PUSH1 0x3 SLOAD DUP2 LT ISZERO PUSH2 0xC08 JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 DUP1 SLOAD SWAP2 SWAP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0xBBF JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xC00 JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x1 ADD PUSH2 0xB96 JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP2 DUP2 MSTORE SWAP2 DUP2 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP1 DUP4 ADD SLOAD PUSH1 0x2 DUP1 DUP6 ADD DUP1 SLOAD DUP8 MLOAD PUSH2 0x100 SWAP6 DUP3 AND ISZERO SWAP6 SWAP1 SWAP6 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD AND SWAP2 SWAP1 SWAP2 DIV PUSH1 0x1F DUP2 ADD DUP9 SWAP1 DIV DUP9 MUL DUP5 ADD DUP9 ADD SWAP1 SWAP7 MSTORE DUP6 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND SWAP6 SWAP1 SWAP5 SWAP2 SWAP3 SWAP2 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xCE4 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xCB9 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xCE4 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xCC7 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP PUSH1 0x3 SWAP1 SWAP4 ADD SLOAD SWAP2 SWAP3 POP POP PUSH1 0xFF AND DUP5 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0xD5C JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xD31 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x0 DUP1 PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xD99 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 SWAP2 POP PUSH1 0x0 SWAP1 POP JUMPDEST PUSH1 0x5 SLOAD DUP2 LT ISZERO PUSH2 0xE20 JUMPI DUP6 DUP1 ISZERO PUSH2 0xDCE JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND ISZERO JUMPDEST DUP1 PUSH2 0xDF2 JUMPI POP DUP5 DUP1 ISZERO PUSH2 0xDF2 JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND JUMPDEST ISZERO PUSH2 0xE18 JUMPI DUP1 DUP4 DUP4 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xE06 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SWAP1 JUMPDEST PUSH1 0x1 ADD PUSH2 0xDA5 JUMP JUMPDEST DUP8 DUP8 SUB PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xE4C JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP DUP8 SWAP1 POP JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0xE95 JUMPI DUP3 DUP2 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xE69 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP5 DUP10 DUP4 SUB DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xE83 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0xE53 JUMP JUMPDEST POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x0 DUP1 PUSH1 0x3 DUP1 SLOAD SWAP1 POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xED5 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 SWAP2 POP PUSH1 0x0 SWAP1 POP JUMPDEST PUSH1 0x3 SLOAD DUP2 LT ISZERO PUSH2 0xFB9 JUMPI PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 DUP1 SLOAD SWAP2 SWAP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0xF0A JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xFB1 JUMPI PUSH1 0x3 DUP1 SLOAD DUP3 SWAP1 DUP2 LT PUSH2 0xF52 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 DUP5 SWAP1 DUP5 SWAP1 DUP2 LT PUSH2 0xF85 JUMPI INVALID JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SWAP1 JUMPDEST PUSH1 0x1 ADD PUSH2 0xEE1 JUMP JUMPDEST DUP2 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xFE3 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP PUSH1 0x0 SWAP1 POP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1045 JUMPI DUP3 DUP2 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1001 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP5 DUP3 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1019 JUMPI INVALID JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 ADD PUSH2 0xFEB JUMP JUMPDEST POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0x105F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3 SLOAD DUP2 PUSH1 0x32 DUP3 GT DUP1 PUSH2 0x1071 JUMPI POP DUP2 DUP2 GT JUMPDEST DUP1 PUSH2 0x107A JUMPI POP DUP1 ISZERO JUMPDEST DUP1 PUSH2 0x1083 JUMPI POP DUP2 ISZERO JUMPDEST ISZERO PUSH2 0x108D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x4 DUP4 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xA3F1EE9126A074D9326C682F561767F710E927FAA811F7A99829D49DC421797A SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x10E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO ISZERO PUSH2 0x111A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD DUP5 SWAP2 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x1145 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 CALLER DUP1 DUP7 MSTORE SWAP3 MSTORE DUP1 DUP5 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SWAP4 OR SWAP1 SWAP3 SSTORE SWAP1 MLOAD DUP8 SWAP3 PUSH32 0x4A504A94899432A9846E1AA406DCEB1BCFD538BB839071D49D1E5E23F5BE30EF SWAP2 LOG3 PUSH2 0x11B9 DUP6 PUSH2 0x13FA JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x11CD DUP5 DUP5 DUP5 PUSH2 0x15C1 JUMP JUMPDEST SWAP1 POP PUSH2 0x11D8 DUP2 PUSH2 0x10CA JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x32 DUP2 JUMP JUMPDEST PUSH1 0x4 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 CALLER ADDRESS EQ PUSH2 0x11F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x122E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x1263 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP3 POP JUMPDEST PUSH1 0x3 SLOAD DUP4 LT ISZERO PUSH2 0x1328 JUMPI DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x3 DUP5 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1298 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x131D JUMPI DUP4 PUSH1 0x3 DUP5 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x12D0 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0x1328 JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 PUSH2 0x1268 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 SWAP1 DUP2 AND SWAP1 SWAP2 SSTORE SWAP4 DUP9 AND DUP3 MSTORE DUP1 DUP3 KECCAK256 DUP1 SLOAD SWAP1 SWAP5 AND PUSH1 0x1 OR SWAP1 SWAP4 SSTORE SWAP2 MLOAD SWAP1 SWAP2 PUSH32 0x8001553A916EF2F495D26A907CC54D96ED840D7BDA71E73194BF5A9DF7A76B90 SWAP2 LOG2 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP1 PUSH32 0xF39E6E1EB0EDCF53C221607B54B00CD28F3196FED0A24994DC308B8F611B682D SWAP1 PUSH1 0x0 SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 ADD SLOAD DUP3 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x141B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1424 DUP4 PUSH2 0xB01 JUMP JUMPDEST ISZERO PUSH2 0x15BC JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x3 DUP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP2 SLOAD DUP2 DUP4 ADD SLOAD SWAP4 MLOAD PUSH1 0x2 DUP1 DUP6 ADD DUP1 SLOAD SWAP6 SWAP9 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND SWAP6 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 DUP4 SWAP3 DUP6 SWAP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP4 AND ISZERO PUSH2 0x100 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 AND DIV DUP1 ISZERO PUSH2 0x151B JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x14F0 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x151B JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x14FE JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP ISZERO PUSH2 0x1566 JUMPI PUSH1 0x40 MLOAD DUP4 SWAP1 PUSH32 0x33E13ECB54C3076D8E8BB8C2881800A4D972B792045FFAE98FDF46DF365FED75 SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH2 0x15BC JUMP JUMPDEST PUSH1 0x40 MLOAD DUP4 SWAP1 PUSH32 0x526441BB6C1ABA3C9A4A6CA1D6545DA9C2333C8C48343EF398EB858D72B79236 SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH1 0x3 DUP3 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO ISZERO PUSH2 0x15E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x80 DUP2 ADD DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD DUP10 DUP2 MSTORE DUP4 DUP6 ADD DUP10 DUP2 MSTORE PUSH1 0x0 PUSH1 0x60 DUP7 ADD DUP2 SWAP1 MSTORE DUP8 DUP2 MSTORE DUP1 DUP5 MSTORE SWAP6 SWAP1 SWAP6 KECCAK256 DUP5 MLOAD DUP2 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP5 AND SWAP4 SWAP1 SWAP4 OR DUP4 SSTORE MLOAD PUSH1 0x1 DUP4 ADD SSTORE SWAP3 MLOAD DUP1 MLOAD SWAP5 SWAP7 POP SWAP2 SWAP4 SWAP1 SWAP3 PUSH2 0x167E SWAP3 PUSH1 0x2 DUP6 ADD SWAP3 SWAP2 ADD SWAP1 PUSH2 0x1718 JUMP JUMPDEST POP PUSH1 0x60 SWAP2 SWAP1 SWAP2 ADD MLOAD PUSH1 0x3 SWAP1 SWAP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x5 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE PUSH1 0x40 MLOAD DUP3 SWAP1 PUSH32 0xC0BA8FE4B176C1714197D43B9CC6BCF797A4A7461C5FE8D0EF6E184AE7601E51 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 SLOAD DUP2 DUP4 SSTORE DUP2 DUP2 GT ISZERO PUSH2 0x15BC JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 PUSH2 0x15BC SWAP2 DUP2 ADD SWAP1 DUP4 ADD PUSH2 0x1796 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0x1759 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x1786 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x1786 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x1786 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x176B JUMP JUMPDEST POP PUSH2 0x1792 SWAP3 SWAP2 POP PUSH2 0x1796 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0xD64 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1792 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x179C JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 0xb7 DUP5 0xd4 0xaa DUP2 0xd4 BALANCE GAS 0x2d 0xd1 0x28 0xba DUP2 DELEGATECALL CALLER PUSH22 0xB85B97E17B5E9EFA504E0A862F590F36002900000000 ",
- "sourceMap": "186:11249:0:-;;;2814:370;8:9:-1;5:2;;;30:1;27;20:12;5:2;2814:370:0;;;;;;;;;;;;;;;;;;;;;;2913:14;;2814:370;;;2959:6;;2814:370;256:2;2236:28;;;:66;;;2292:10;2280:9;:22;2236:66;:96;;;-1:-1:-1;2318:14:0;;2236:96;:127;;;-1:-1:-1;2348:15:0;;2236:127;2229:153;;;2377:5;;;2229:153;2966:1;2959:8;;2954:168;2971:7;:14;2969:1;:16;2954:168;;;3010:7;:19;3018:7;3026:1;3018:10;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3010:19:0;;;;;;;;;;;-1:-1:-1;3010:19:0;;;;;:38;;;3033:7;3041:1;3033:10;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3033:15:0;3047:1;3033:15;3010:38;3006:65;;;3066:5;;;3006:65;3107:4;3085:7;:19;3093:7;3101:1;3093:10;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3085:19:0;;;;;;;;;;;-1:-1:-1;3085:19:0;:26;;-1:-1:-1;;3085:26:0;;;;;;;;;;-1:-1:-1;2987:3:0;;;;;2954:168;;;3131:16;;;;:6;;:16;;;;;:::i;:::-;-1:-1:-1;;;3157:8:0;:20;;;;-1:-1:-1;186:11249:0;;-1:-1:-1;186:11249:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;186:11249:0;-1:-1:-1;;;;;186:11249:0;;;;;;;;;;;-1:-1:-1;186:11249:0;;;;;;;-1:-1:-1;186:11249:0;;;-1:-1:-1;186:11249:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;;186:11249:0;;;;;;;;;:::o;:::-;;;;;;;"
+ "object": "0x60806040523480156200001157600080fd5b50604051620019e2380380620019e28339810160405280516020820151910180519091906000908260328211806200004857508181115b8062000052575080155b806200005c575081155b156200006757600080fd5b600092505b84518310156200013b576002600086858151811015156200008957fe5b6020908102909101810151600160a060020a031682528101919091526040016000205460ff1680620000dc57508483815181101515620000c557fe5b90602001906020020151600160a060020a03166000145b15620000e757600080fd5b6001600260008786815181101515620000fc57fe5b602090810291909101810151600160a060020a03168252810191909152604001600020805460ff1916911515919091179055600192909201916200006c565b84516200015090600390602088019062000162565b50505060049190915550620001f69050565b828054828255906000526020600020908101928215620001ba579160200282015b82811115620001ba5782518254600160a060020a031916600160a060020a0390911617825560209092019160019091019062000183565b50620001c8929150620001cc565b5090565b620001f391905b80821115620001c8578054600160a060020a0319168155600101620001d3565b90565b6117dc80620002066000396000f30060806040526004361061011c5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663025e7c27811461015e578063173825d91461019f57806320ea8d86146101cd5780632f54bf6e146101e55780633411c81c1461022757806354741525146102585780637065cb4814610289578063784547a7146102b75780638b51d13f146102cf5780639ace38c2146102e7578063a0e67e2b146103bc578063a8abe69a14610421578063b5dc40c314610446578063b77bf6001461045e578063ba51a6df14610473578063c01a8c841461048b578063c6427474146104a3578063d74f8edd14610519578063dc8452cd1461052e578063e20056e614610543578063ee22610b14610577575b600034111561015c5760408051348152905133917fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c919081900360200190a25b005b34801561016a57600080fd5b5061017660043561058f565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156101ab57600080fd5b5061015c73ffffffffffffffffffffffffffffffffffffffff600435166105c4565b3480156101d957600080fd5b5061015c60043561081b565b3480156101f157600080fd5b5061021373ffffffffffffffffffffffffffffffffffffffff600435166108f3565b604080519115158252519081900360200190f35b34801561023357600080fd5b5061021360043573ffffffffffffffffffffffffffffffffffffffff60243516610908565b34801561026457600080fd5b5061027760043515156024351515610928565b60408051918252519081900360200190f35b34801561029557600080fd5b5061015c73ffffffffffffffffffffffffffffffffffffffff60043516610994565b3480156102c357600080fd5b50610213600435610b01565b3480156102db57600080fd5b50610277600435610b92565b3480156102f357600080fd5b506102ff600435610c0e565b604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018060200183151515158152602001828103825284818151815260200191508051906020019080838360005b8381101561037e578181015183820152602001610366565b50505050905090810190601f1680156103ab5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b3480156103c857600080fd5b506103d1610cf7565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561040d5781810151838201526020016103f5565b505050509050019250505060405180910390f35b34801561042d57600080fd5b506103d160043560243560443515156064351515610d67565b34801561045257600080fd5b506103d1600435610ea0565b34801561046a57600080fd5b5061027761104d565b34801561047f57600080fd5b5061015c600435611053565b34801561049757600080fd5b5061015c6004356110ca565b3480156104af57600080fd5b50604080516020600460443581810135601f810184900484028501840190955284845261027794823573ffffffffffffffffffffffffffffffffffffffff169460248035953695946064949201919081908401838280828437509497506111c09650505050505050565b34801561052557600080fd5b506102776111df565b34801561053a57600080fd5b506102776111e4565b34801561054f57600080fd5b5061015c73ffffffffffffffffffffffffffffffffffffffff600435811690602435166111ea565b34801561058357600080fd5b5061015c6004356113fa565b600380548290811061059d57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b60003330146105d257600080fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020526040902054829060ff16151561060857600080fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260026020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905591505b6003547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0182101561078b578273ffffffffffffffffffffffffffffffffffffffff166003838154811015156106a857fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561078057600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061070057fe5b6000918252602090912001546003805473ffffffffffffffffffffffffffffffffffffffff909216918490811061073357fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061078b565b600190910190610656565b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01906107bc90826116f4565b5060035460045411156107d5576003546107d590611053565b60405173ffffffffffffffffffffffffffffffffffffffff8416907f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9090600090a2505050565b3360008181526002602052604090205460ff16151561083957600080fd5b60008281526001602090815260408083203380855292529091205483919060ff16151561086557600080fd5b600084815260208190526040902060030154849060ff161561088657600080fd5b600085815260016020908152604080832033808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555187927ff6a317157440607f36269043eb55f1287a5a19ba2216afeab88cd46cbcfb88e991a35050505050565b60026020526000908152604090205460ff1681565b600160209081526000928352604080842090915290825290205460ff1681565b6000805b60055481101561098d57838015610955575060008181526020819052604090206003015460ff16155b806109795750828015610979575060008181526020819052604090206003015460ff165b15610985576001820191505b60010161092c565b5092915050565b3330146109a057600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116600090815260026020526040902054819060ff16156109d557600080fd5b8173ffffffffffffffffffffffffffffffffffffffff811615156109f857600080fd5b6003805490506001016004546032821180610a1257508181115b80610a1b575080155b80610a24575081155b15610a2e57600080fd5b73ffffffffffffffffffffffffffffffffffffffff851660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915560038054918201815583527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055517ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d9190a25050505050565b600080805b600354811015610b8b5760008481526001602052604081206003805491929184908110610b2f57fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400190205460ff1615610b70576001820191505b600454821415610b835760019250610b8b565b600101610b06565b5050919050565b6000805b600354811015610c085760008381526001602052604081206003805491929184908110610bbf57fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400190205460ff1615610c00576001820191505b600101610b96565b50919050565b60006020818152918152604090819020805460018083015460028085018054875161010095821615959095027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691909104601f810188900488028401880190965285835273ffffffffffffffffffffffffffffffffffffffff90931695909491929190830182828015610ce45780601f10610cb957610100808354040283529160200191610ce4565b820191906000526020600020905b815481529060010190602001808311610cc757829003601f168201915b5050506003909301549192505060ff1684565b60606003805480602002602001604051908101604052809291908181526020018280548015610d5c57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610d31575b505050505090505b90565b606080600080600554604051908082528060200260200182016040528015610d99578160200160208202803883390190505b50925060009150600090505b600554811015610e2057858015610dce575060008181526020819052604090206003015460ff16155b80610df25750848015610df2575060008181526020819052604090206003015460ff165b15610e1857808383815181101515610e0657fe5b60209081029091010152600191909101905b600101610da5565b878703604051908082528060200260200182016040528015610e4c578160200160208202803883390190505b5093508790505b86811015610e95578281815181101515610e6957fe5b9060200190602002015184898303815181101515610e8357fe5b60209081029091010152600101610e53565b505050949350505050565b606080600080600380549050604051908082528060200260200182016040528015610ed5578160200160208202803883390190505b50925060009150600090505b600354811015610fb95760008581526001602052604081206003805491929184908110610f0a57fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400190205460ff1615610fb1576003805482908110610f5257fe5b600091825260209091200154835173ffffffffffffffffffffffffffffffffffffffff90911690849084908110610f8557fe5b73ffffffffffffffffffffffffffffffffffffffff909216602092830290910190910152600191909101905b600101610ee1565b81604051908082528060200260200182016040528015610fe3578160200160208202803883390190505b509350600090505b8181101561104557828181518110151561100157fe5b90602001906020020151848281518110151561101957fe5b73ffffffffffffffffffffffffffffffffffffffff909216602092830290910190910152600101610feb565b505050919050565b60055481565b33301461105f57600080fd5b60035481603282118061107157508181115b8061107a575080155b80611083575081155b1561108d57600080fd5b60048390556040805184815290517fa3f1ee9126a074d9326c682f561767f710e927faa811f7a99829d49dc421797a9181900360200190a1505050565b3360008181526002602052604090205460ff1615156110e857600080fd5b600082815260208190526040902054829073ffffffffffffffffffffffffffffffffffffffff16151561111a57600080fd5b60008381526001602090815260408083203380855292529091205484919060ff161561114557600080fd5b600085815260016020818152604080842033808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909317909255905187927f4a504a94899432a9846e1aa406dceb1bcfd538bb839071d49d1e5e23f5be30ef91a36111b9856113fa565b5050505050565b60006111cd8484846115c1565b90506111d8816110ca565b9392505050565b603281565b60045481565b60003330146111f857600080fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260026020526040902054839060ff16151561122e57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260026020526040902054839060ff161561126357600080fd5b600092505b600354831015611328578473ffffffffffffffffffffffffffffffffffffffff1660038481548110151561129857fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561131d57836003848154811015156112d057fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611328565b600190920191611268565b73ffffffffffffffffffffffffffffffffffffffff80861660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090811690915593881682528082208054909416600117909355915190917f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9091a260405173ffffffffffffffffffffffffffffffffffffffff8516907ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d90600090a25050505050565b600081815260208190526040812060030154829060ff161561141b57600080fd5b61142483610b01565b156115bc57600083815260208190526040908190206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915581548183015493516002808501805495985073ffffffffffffffffffffffffffffffffffffffff909316959492939192839285927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91831615610100029190910190911604801561151b5780601f106114f05761010080835404028352916020019161151b565b820191906000526020600020905b8154815290600101906020018083116114fe57829003601f168201915b505091505060006040518083038185875af192505050156115665760405183907f33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed7590600090a26115bc565b60405183907f526441bb6c1aba3c9a4a6ca1d6545da9c2333c8c48343ef398eb858d72b7923690600090a26003820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b505050565b60008373ffffffffffffffffffffffffffffffffffffffff811615156115e657600080fd5b6005546040805160808101825273ffffffffffffffffffffffffffffffffffffffff8881168252602080830189815283850189815260006060860181905287815280845295909520845181547fffffffffffffffffffffffff0000000000000000000000000000000000000000169416939093178355516001830155925180519496509193909261167e926002850192910190611718565b5060609190910151600390910180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905560058054600101905560405182907fc0ba8fe4b176c1714197d43b9cc6bcf797a4a7461c5fe8d0ef6e184ae7601e5190600090a2509392505050565b8154818355818111156115bc576000838152602090206115bc918101908301611796565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061175957805160ff1916838001178555611786565b82800160010185558215611786579182015b8281111561178657825182559160200191906001019061176b565b50611792929150611796565b5090565b610d6491905b80821115611792576000815560010161179c5600a165627a7a723058203dd9c866dd08e918bf5ffe8aa4a81cf2983a2a3ea0aff84e121fc918035e54be0029",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x19E2 CODESIZE SUB DUP1 PUSH3 0x19E2 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 MSTORE DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD SWAP2 ADD DUP1 MLOAD SWAP1 SWAP2 SWAP1 PUSH1 0x0 SWAP1 DUP3 PUSH1 0x32 DUP3 GT DUP1 PUSH3 0x48 JUMPI POP DUP2 DUP2 GT JUMPDEST DUP1 PUSH3 0x52 JUMPI POP DUP1 ISZERO JUMPDEST DUP1 PUSH3 0x5C JUMPI POP DUP2 ISZERO JUMPDEST ISZERO PUSH3 0x67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP3 POP JUMPDEST DUP5 MLOAD DUP4 LT ISZERO PUSH3 0x13B JUMPI PUSH1 0x2 PUSH1 0x0 DUP7 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH3 0x89 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND DUP3 MSTORE DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0xFF AND DUP1 PUSH3 0xDC JUMPI POP DUP5 DUP4 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH3 0xC5 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x0 EQ JUMPDEST ISZERO PUSH3 0xE7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x2 PUSH1 0x0 DUP8 DUP7 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH3 0xFC JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND DUP3 MSTORE DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x1 SWAP3 SWAP1 SWAP3 ADD SWAP2 PUSH3 0x6C JUMP JUMPDEST DUP5 MLOAD PUSH3 0x150 SWAP1 PUSH1 0x3 SWAP1 PUSH1 0x20 DUP9 ADD SWAP1 PUSH3 0x162 JUMP JUMPDEST POP POP POP PUSH1 0x4 SWAP2 SWAP1 SWAP2 SSTORE POP PUSH3 0x1F6 SWAP1 POP JUMP JUMPDEST DUP3 DUP1 SLOAD DUP3 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP3 DUP3 ISZERO PUSH3 0x1BA JUMPI SWAP2 PUSH1 0x20 MUL DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x1BA JUMPI DUP3 MLOAD DUP3 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB NOT AND PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP1 SWAP2 AND OR DUP3 SSTORE PUSH1 0x20 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH3 0x183 JUMP JUMPDEST POP PUSH3 0x1C8 SWAP3 SWAP2 POP PUSH3 0x1CC JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH3 0x1F3 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x1C8 JUMPI DUP1 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB NOT AND DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x1D3 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0x17DC DUP1 PUSH3 0x206 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x11C JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x25E7C27 DUP2 EQ PUSH2 0x15E JUMPI DUP1 PUSH4 0x173825D9 EQ PUSH2 0x19F JUMPI DUP1 PUSH4 0x20EA8D86 EQ PUSH2 0x1CD JUMPI DUP1 PUSH4 0x2F54BF6E EQ PUSH2 0x1E5 JUMPI DUP1 PUSH4 0x3411C81C EQ PUSH2 0x227 JUMPI DUP1 PUSH4 0x54741525 EQ PUSH2 0x258 JUMPI DUP1 PUSH4 0x7065CB48 EQ PUSH2 0x289 JUMPI DUP1 PUSH4 0x784547A7 EQ PUSH2 0x2B7 JUMPI DUP1 PUSH4 0x8B51D13F EQ PUSH2 0x2CF JUMPI DUP1 PUSH4 0x9ACE38C2 EQ PUSH2 0x2E7 JUMPI DUP1 PUSH4 0xA0E67E2B EQ PUSH2 0x3BC JUMPI DUP1 PUSH4 0xA8ABE69A EQ PUSH2 0x421 JUMPI DUP1 PUSH4 0xB5DC40C3 EQ PUSH2 0x446 JUMPI DUP1 PUSH4 0xB77BF600 EQ PUSH2 0x45E JUMPI DUP1 PUSH4 0xBA51A6DF EQ PUSH2 0x473 JUMPI DUP1 PUSH4 0xC01A8C84 EQ PUSH2 0x48B JUMPI DUP1 PUSH4 0xC6427474 EQ PUSH2 0x4A3 JUMPI DUP1 PUSH4 0xD74F8EDD EQ PUSH2 0x519 JUMPI DUP1 PUSH4 0xDC8452CD EQ PUSH2 0x52E JUMPI DUP1 PUSH4 0xE20056E6 EQ PUSH2 0x543 JUMPI DUP1 PUSH4 0xEE22610B EQ PUSH2 0x577 JUMPI JUMPDEST PUSH1 0x0 CALLVALUE GT ISZERO PUSH2 0x15C JUMPI PUSH1 0x40 DUP1 MLOAD CALLVALUE DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0xE1FFFCC4923D04B559F4D29A8BFC6CDA04EB5B0D3C460751C2402C5C5CC9109C SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x16A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x176 PUSH1 0x4 CALLDATALOAD PUSH2 0x58F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x15C PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x5C4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x15C PUSH1 0x4 CALLDATALOAD PUSH2 0x81B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x213 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x8F3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x233 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x213 PUSH1 0x4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD AND PUSH2 0x908 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x264 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x277 PUSH1 0x4 CALLDATALOAD ISZERO ISZERO PUSH1 0x24 CALLDATALOAD ISZERO ISZERO PUSH2 0x928 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x295 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x15C PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x994 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x213 PUSH1 0x4 CALLDATALOAD PUSH2 0xB01 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x277 PUSH1 0x4 CALLDATALOAD PUSH2 0xB92 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2FF PUSH1 0x4 CALLDATALOAD PUSH2 0xC0E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 ISZERO ISZERO ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x37E JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x366 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x3AB 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 SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D1 PUSH2 0xCF7 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 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x40D JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3F5 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x42D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D1 PUSH1 0x4 CALLDATALOAD PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD ISZERO ISZERO PUSH1 0x64 CALLDATALOAD ISZERO ISZERO PUSH2 0xD67 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x452 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D1 PUSH1 0x4 CALLDATALOAD PUSH2 0xEA0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x46A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x277 PUSH2 0x104D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x47F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x15C PUSH1 0x4 CALLDATALOAD PUSH2 0x1053 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x497 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x15C PUSH1 0x4 CALLDATALOAD PUSH2 0x10CA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 PUSH1 0x44 CALLDATALOAD DUP2 DUP2 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x277 SWAP5 DUP3 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP5 PUSH1 0x24 DUP1 CALLDATALOAD SWAP6 CALLDATASIZE SWAP6 SWAP5 PUSH1 0x64 SWAP5 SWAP3 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x11C0 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x525 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x277 PUSH2 0x11DF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x53A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x277 PUSH2 0x11E4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x54F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x15C PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH2 0x11EA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x583 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x15C PUSH1 0x4 CALLDATALOAD PUSH2 0x13FA JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD DUP3 SWAP1 DUP2 LT PUSH2 0x59D JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x0 CALLER ADDRESS EQ PUSH2 0x5D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x608 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE SWAP2 POP JUMPDEST PUSH1 0x3 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP3 LT ISZERO PUSH2 0x78B JUMPI DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x3 DUP4 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x6A8 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x780 JUMPI PUSH1 0x3 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0x700 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x3 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x733 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0x78B JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x656 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 PUSH2 0x7BC SWAP1 DUP3 PUSH2 0x16F4 JUMP JUMPDEST POP PUSH1 0x3 SLOAD PUSH1 0x4 SLOAD GT ISZERO PUSH2 0x7D5 JUMPI PUSH1 0x3 SLOAD PUSH2 0x7D5 SWAP1 PUSH2 0x1053 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH32 0x8001553A916EF2F495D26A907CC54D96ED840D7BDA71E73194BF5A9DF7A76B90 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x839 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD DUP4 SWAP2 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x865 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD DUP5 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x886 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE MLOAD DUP8 SWAP3 PUSH32 0xF6A317157440607F36269043EB55F1287A5A19BA2216AFEAB88CD46CBCFB88E9 SWAP2 LOG3 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST PUSH1 0x5 SLOAD DUP2 LT ISZERO PUSH2 0x98D JUMPI DUP4 DUP1 ISZERO PUSH2 0x955 JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND ISZERO JUMPDEST DUP1 PUSH2 0x979 JUMPI POP DUP3 DUP1 ISZERO PUSH2 0x979 JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND JUMPDEST ISZERO PUSH2 0x985 JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x1 ADD PUSH2 0x92C JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0x9A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x9D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO ISZERO PUSH2 0x9F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3 DUP1 SLOAD SWAP1 POP PUSH1 0x1 ADD PUSH1 0x4 SLOAD PUSH1 0x32 DUP3 GT DUP1 PUSH2 0xA12 JUMPI POP DUP2 DUP2 GT JUMPDEST DUP1 PUSH2 0xA1B JUMPI POP DUP1 ISZERO JUMPDEST DUP1 PUSH2 0xA24 JUMPI POP DUP2 ISZERO JUMPDEST ISZERO PUSH2 0xA2E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x3 DUP1 SLOAD SWAP2 DUP3 ADD DUP2 SSTORE DUP4 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND DUP5 OR SWAP1 SSTORE MLOAD PUSH32 0xF39E6E1EB0EDCF53C221607B54B00CD28F3196FED0A24994DC308B8F611B682D SWAP2 SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 JUMPDEST PUSH1 0x3 SLOAD DUP2 LT ISZERO PUSH2 0xB8B JUMPI PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 DUP1 SLOAD SWAP2 SWAP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0xB2F JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xB70 JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x4 SLOAD DUP3 EQ ISZERO PUSH2 0xB83 JUMPI PUSH1 0x1 SWAP3 POP PUSH2 0xB8B JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0xB06 JUMP JUMPDEST POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST PUSH1 0x3 SLOAD DUP2 LT ISZERO PUSH2 0xC08 JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 DUP1 SLOAD SWAP2 SWAP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0xBBF JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xC00 JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x1 ADD PUSH2 0xB96 JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP2 DUP2 MSTORE SWAP2 DUP2 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP1 DUP4 ADD SLOAD PUSH1 0x2 DUP1 DUP6 ADD DUP1 SLOAD DUP8 MLOAD PUSH2 0x100 SWAP6 DUP3 AND ISZERO SWAP6 SWAP1 SWAP6 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD AND SWAP2 SWAP1 SWAP2 DIV PUSH1 0x1F DUP2 ADD DUP9 SWAP1 DIV DUP9 MUL DUP5 ADD DUP9 ADD SWAP1 SWAP7 MSTORE DUP6 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND SWAP6 SWAP1 SWAP5 SWAP2 SWAP3 SWAP2 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xCE4 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xCB9 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xCE4 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xCC7 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP PUSH1 0x3 SWAP1 SWAP4 ADD SLOAD SWAP2 SWAP3 POP POP PUSH1 0xFF AND DUP5 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0xD5C JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xD31 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x0 DUP1 PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xD99 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 SWAP2 POP PUSH1 0x0 SWAP1 POP JUMPDEST PUSH1 0x5 SLOAD DUP2 LT ISZERO PUSH2 0xE20 JUMPI DUP6 DUP1 ISZERO PUSH2 0xDCE JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND ISZERO JUMPDEST DUP1 PUSH2 0xDF2 JUMPI POP DUP5 DUP1 ISZERO PUSH2 0xDF2 JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND JUMPDEST ISZERO PUSH2 0xE18 JUMPI DUP1 DUP4 DUP4 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xE06 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SWAP1 JUMPDEST PUSH1 0x1 ADD PUSH2 0xDA5 JUMP JUMPDEST DUP8 DUP8 SUB PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xE4C JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP DUP8 SWAP1 POP JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0xE95 JUMPI DUP3 DUP2 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xE69 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP5 DUP10 DUP4 SUB DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xE83 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0xE53 JUMP JUMPDEST POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x0 DUP1 PUSH1 0x3 DUP1 SLOAD SWAP1 POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xED5 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 SWAP2 POP PUSH1 0x0 SWAP1 POP JUMPDEST PUSH1 0x3 SLOAD DUP2 LT ISZERO PUSH2 0xFB9 JUMPI PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 DUP1 SLOAD SWAP2 SWAP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0xF0A JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xFB1 JUMPI PUSH1 0x3 DUP1 SLOAD DUP3 SWAP1 DUP2 LT PUSH2 0xF52 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 DUP5 SWAP1 DUP5 SWAP1 DUP2 LT PUSH2 0xF85 JUMPI INVALID JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SWAP1 JUMPDEST PUSH1 0x1 ADD PUSH2 0xEE1 JUMP JUMPDEST DUP2 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xFE3 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP PUSH1 0x0 SWAP1 POP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1045 JUMPI DUP3 DUP2 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1001 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP5 DUP3 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1019 JUMPI INVALID JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 ADD PUSH2 0xFEB JUMP JUMPDEST POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0x105F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3 SLOAD DUP2 PUSH1 0x32 DUP3 GT DUP1 PUSH2 0x1071 JUMPI POP DUP2 DUP2 GT JUMPDEST DUP1 PUSH2 0x107A JUMPI POP DUP1 ISZERO JUMPDEST DUP1 PUSH2 0x1083 JUMPI POP DUP2 ISZERO JUMPDEST ISZERO PUSH2 0x108D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x4 DUP4 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xA3F1EE9126A074D9326C682F561767F710E927FAA811F7A99829D49DC421797A SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x10E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO ISZERO PUSH2 0x111A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD DUP5 SWAP2 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x1145 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 CALLER DUP1 DUP7 MSTORE SWAP3 MSTORE DUP1 DUP5 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SWAP4 OR SWAP1 SWAP3 SSTORE SWAP1 MLOAD DUP8 SWAP3 PUSH32 0x4A504A94899432A9846E1AA406DCEB1BCFD538BB839071D49D1E5E23F5BE30EF SWAP2 LOG3 PUSH2 0x11B9 DUP6 PUSH2 0x13FA JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x11CD DUP5 DUP5 DUP5 PUSH2 0x15C1 JUMP JUMPDEST SWAP1 POP PUSH2 0x11D8 DUP2 PUSH2 0x10CA JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x32 DUP2 JUMP JUMPDEST PUSH1 0x4 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 CALLER ADDRESS EQ PUSH2 0x11F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x122E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x1263 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP3 POP JUMPDEST PUSH1 0x3 SLOAD DUP4 LT ISZERO PUSH2 0x1328 JUMPI DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x3 DUP5 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1298 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x131D JUMPI DUP4 PUSH1 0x3 DUP5 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x12D0 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0x1328 JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 PUSH2 0x1268 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 SWAP1 DUP2 AND SWAP1 SWAP2 SSTORE SWAP4 DUP9 AND DUP3 MSTORE DUP1 DUP3 KECCAK256 DUP1 SLOAD SWAP1 SWAP5 AND PUSH1 0x1 OR SWAP1 SWAP4 SSTORE SWAP2 MLOAD SWAP1 SWAP2 PUSH32 0x8001553A916EF2F495D26A907CC54D96ED840D7BDA71E73194BF5A9DF7A76B90 SWAP2 LOG2 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP1 PUSH32 0xF39E6E1EB0EDCF53C221607B54B00CD28F3196FED0A24994DC308B8F611B682D SWAP1 PUSH1 0x0 SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 ADD SLOAD DUP3 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x141B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1424 DUP4 PUSH2 0xB01 JUMP JUMPDEST ISZERO PUSH2 0x15BC JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x3 DUP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP2 SLOAD DUP2 DUP4 ADD SLOAD SWAP4 MLOAD PUSH1 0x2 DUP1 DUP6 ADD DUP1 SLOAD SWAP6 SWAP9 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND SWAP6 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 DUP4 SWAP3 DUP6 SWAP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP4 AND ISZERO PUSH2 0x100 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 AND DIV DUP1 ISZERO PUSH2 0x151B JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x14F0 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x151B JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x14FE JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP ISZERO PUSH2 0x1566 JUMPI PUSH1 0x40 MLOAD DUP4 SWAP1 PUSH32 0x33E13ECB54C3076D8E8BB8C2881800A4D972B792045FFAE98FDF46DF365FED75 SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH2 0x15BC JUMP JUMPDEST PUSH1 0x40 MLOAD DUP4 SWAP1 PUSH32 0x526441BB6C1ABA3C9A4A6CA1D6545DA9C2333C8C48343EF398EB858D72B79236 SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH1 0x3 DUP3 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO ISZERO PUSH2 0x15E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x80 DUP2 ADD DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD DUP10 DUP2 MSTORE DUP4 DUP6 ADD DUP10 DUP2 MSTORE PUSH1 0x0 PUSH1 0x60 DUP7 ADD DUP2 SWAP1 MSTORE DUP8 DUP2 MSTORE DUP1 DUP5 MSTORE SWAP6 SWAP1 SWAP6 KECCAK256 DUP5 MLOAD DUP2 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP5 AND SWAP4 SWAP1 SWAP4 OR DUP4 SSTORE MLOAD PUSH1 0x1 DUP4 ADD SSTORE SWAP3 MLOAD DUP1 MLOAD SWAP5 SWAP7 POP SWAP2 SWAP4 SWAP1 SWAP3 PUSH2 0x167E SWAP3 PUSH1 0x2 DUP6 ADD SWAP3 SWAP2 ADD SWAP1 PUSH2 0x1718 JUMP JUMPDEST POP PUSH1 0x60 SWAP2 SWAP1 SWAP2 ADD MLOAD PUSH1 0x3 SWAP1 SWAP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x5 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE PUSH1 0x40 MLOAD DUP3 SWAP1 PUSH32 0xC0BA8FE4B176C1714197D43B9CC6BCF797A4A7461C5FE8D0EF6E184AE7601E51 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 SLOAD DUP2 DUP4 SSTORE DUP2 DUP2 GT ISZERO PUSH2 0x15BC JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 PUSH2 0x15BC SWAP2 DUP2 ADD SWAP1 DUP4 ADD PUSH2 0x1796 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0x1759 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x1786 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x1786 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x1786 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x176B JUMP JUMPDEST POP PUSH2 0x1792 SWAP3 SWAP2 POP PUSH2 0x1796 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0xD64 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1792 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x179C JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 RETURNDATASIZE 0xd9 0xc8 PUSH7 0xDD08E918BF5FFE DUP11 LOG4 0xa8 SHR CALLCODE SWAP9 GASPRICE 0x2a RETURNDATACOPY LOG0 0xaf 0xf8 0x4e SLT 0x1f 0xc9 XOR SUB 0x5e SLOAD 0xbe STOP 0x29 ",
+ "sourceMap": "206:11249:0:-;;;2834:370;8:9:-1;5:2;;;30:1;27;20:12;5:2;2834:370:0;;;;;;;;;;;;;;;;;;;;;;2933:14;;2834:370;;;2979:6;;2834:370;276:2;2256:28;;;:66;;;2312:10;2300:9;:22;2256:66;:96;;;-1:-1:-1;2338:14:0;;2256:96;:127;;;-1:-1:-1;2368:15:0;;2256:127;2249:153;;;2397:5;;;2249:153;2986:1;2979:8;;2974:168;2991:7;:14;2989:1;:16;2974:168;;;3030:7;:19;3038:7;3046:1;3038:10;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3030:19:0;;;;;;;;;;;-1:-1:-1;3030:19:0;;;;;:38;;;3053:7;3061:1;3053:10;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3053:15:0;3067:1;3053:15;3030:38;3026:65;;;3086:5;;;3026:65;3127:4;3105:7;:19;3113:7;3121:1;3113:10;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3105:19:0;;;;;;;;;;;-1:-1:-1;3105:19:0;:26;;-1:-1:-1;;3105:26:0;;;;;;;;;;-1:-1:-1;3007:3:0;;;;;2974:168;;;3151:16;;;;:6;;:16;;;;;:::i;:::-;-1:-1:-1;;;3177:8:0;:20;;;;-1:-1:-1;206:11249:0;;-1:-1:-1;206:11249:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;206:11249:0;-1:-1:-1;;;;;206:11249:0;;;;;;;;;;;-1:-1:-1;206:11249:0;;;;;;;-1:-1:-1;206:11249:0;;;-1:-1:-1;206:11249:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;;206:11249:0;;;;;;;;;:::o;:::-;;;;;;;"
},
"deployedBytecode": {
"linkReferences": {},
- "object": "0x60806040526004361061011c5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663025e7c27811461015e578063173825d91461019f57806320ea8d86146101cd5780632f54bf6e146101e55780633411c81c1461022757806354741525146102585780637065cb4814610289578063784547a7146102b75780638b51d13f146102cf5780639ace38c2146102e7578063a0e67e2b146103bc578063a8abe69a14610421578063b5dc40c314610446578063b77bf6001461045e578063ba51a6df14610473578063c01a8c841461048b578063c6427474146104a3578063d74f8edd14610519578063dc8452cd1461052e578063e20056e614610543578063ee22610b14610577575b600034111561015c5760408051348152905133917fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c919081900360200190a25b005b34801561016a57600080fd5b5061017660043561058f565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156101ab57600080fd5b5061015c73ffffffffffffffffffffffffffffffffffffffff600435166105c4565b3480156101d957600080fd5b5061015c60043561081b565b3480156101f157600080fd5b5061021373ffffffffffffffffffffffffffffffffffffffff600435166108f3565b604080519115158252519081900360200190f35b34801561023357600080fd5b5061021360043573ffffffffffffffffffffffffffffffffffffffff60243516610908565b34801561026457600080fd5b5061027760043515156024351515610928565b60408051918252519081900360200190f35b34801561029557600080fd5b5061015c73ffffffffffffffffffffffffffffffffffffffff60043516610994565b3480156102c357600080fd5b50610213600435610b01565b3480156102db57600080fd5b50610277600435610b92565b3480156102f357600080fd5b506102ff600435610c0e565b604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018060200183151515158152602001828103825284818151815260200191508051906020019080838360005b8381101561037e578181015183820152602001610366565b50505050905090810190601f1680156103ab5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b3480156103c857600080fd5b506103d1610cf7565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561040d5781810151838201526020016103f5565b505050509050019250505060405180910390f35b34801561042d57600080fd5b506103d160043560243560443515156064351515610d67565b34801561045257600080fd5b506103d1600435610ea0565b34801561046a57600080fd5b5061027761104d565b34801561047f57600080fd5b5061015c600435611053565b34801561049757600080fd5b5061015c6004356110ca565b3480156104af57600080fd5b50604080516020600460443581810135601f810184900484028501840190955284845261027794823573ffffffffffffffffffffffffffffffffffffffff169460248035953695946064949201919081908401838280828437509497506111c09650505050505050565b34801561052557600080fd5b506102776111df565b34801561053a57600080fd5b506102776111e4565b34801561054f57600080fd5b5061015c73ffffffffffffffffffffffffffffffffffffffff600435811690602435166111ea565b34801561058357600080fd5b5061015c6004356113fa565b600380548290811061059d57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b60003330146105d257600080fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020526040902054829060ff16151561060857600080fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260026020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905591505b6003547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0182101561078b578273ffffffffffffffffffffffffffffffffffffffff166003838154811015156106a857fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561078057600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061070057fe5b6000918252602090912001546003805473ffffffffffffffffffffffffffffffffffffffff909216918490811061073357fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061078b565b600190910190610656565b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01906107bc90826116f4565b5060035460045411156107d5576003546107d590611053565b60405173ffffffffffffffffffffffffffffffffffffffff8416907f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9090600090a2505050565b3360008181526002602052604090205460ff16151561083957600080fd5b60008281526001602090815260408083203380855292529091205483919060ff16151561086557600080fd5b600084815260208190526040902060030154849060ff161561088657600080fd5b600085815260016020908152604080832033808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555187927ff6a317157440607f36269043eb55f1287a5a19ba2216afeab88cd46cbcfb88e991a35050505050565b60026020526000908152604090205460ff1681565b600160209081526000928352604080842090915290825290205460ff1681565b6000805b60055481101561098d57838015610955575060008181526020819052604090206003015460ff16155b806109795750828015610979575060008181526020819052604090206003015460ff165b15610985576001820191505b60010161092c565b5092915050565b3330146109a057600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116600090815260026020526040902054819060ff16156109d557600080fd5b8173ffffffffffffffffffffffffffffffffffffffff811615156109f857600080fd5b6003805490506001016004546032821180610a1257508181115b80610a1b575080155b80610a24575081155b15610a2e57600080fd5b73ffffffffffffffffffffffffffffffffffffffff851660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915560038054918201815583527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055517ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d9190a25050505050565b600080805b600354811015610b8b5760008481526001602052604081206003805491929184908110610b2f57fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400190205460ff1615610b70576001820191505b600454821415610b835760019250610b8b565b600101610b06565b5050919050565b6000805b600354811015610c085760008381526001602052604081206003805491929184908110610bbf57fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400190205460ff1615610c00576001820191505b600101610b96565b50919050565b60006020818152918152604090819020805460018083015460028085018054875161010095821615959095027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691909104601f810188900488028401880190965285835273ffffffffffffffffffffffffffffffffffffffff90931695909491929190830182828015610ce45780601f10610cb957610100808354040283529160200191610ce4565b820191906000526020600020905b815481529060010190602001808311610cc757829003601f168201915b5050506003909301549192505060ff1684565b60606003805480602002602001604051908101604052809291908181526020018280548015610d5c57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610d31575b505050505090505b90565b606080600080600554604051908082528060200260200182016040528015610d99578160200160208202803883390190505b50925060009150600090505b600554811015610e2057858015610dce575060008181526020819052604090206003015460ff16155b80610df25750848015610df2575060008181526020819052604090206003015460ff165b15610e1857808383815181101515610e0657fe5b60209081029091010152600191909101905b600101610da5565b878703604051908082528060200260200182016040528015610e4c578160200160208202803883390190505b5093508790505b86811015610e95578281815181101515610e6957fe5b9060200190602002015184898303815181101515610e8357fe5b60209081029091010152600101610e53565b505050949350505050565b606080600080600380549050604051908082528060200260200182016040528015610ed5578160200160208202803883390190505b50925060009150600090505b600354811015610fb95760008581526001602052604081206003805491929184908110610f0a57fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400190205460ff1615610fb1576003805482908110610f5257fe5b600091825260209091200154835173ffffffffffffffffffffffffffffffffffffffff90911690849084908110610f8557fe5b73ffffffffffffffffffffffffffffffffffffffff909216602092830290910190910152600191909101905b600101610ee1565b81604051908082528060200260200182016040528015610fe3578160200160208202803883390190505b509350600090505b8181101561104557828181518110151561100157fe5b90602001906020020151848281518110151561101957fe5b73ffffffffffffffffffffffffffffffffffffffff909216602092830290910190910152600101610feb565b505050919050565b60055481565b33301461105f57600080fd5b60035481603282118061107157508181115b8061107a575080155b80611083575081155b1561108d57600080fd5b60048390556040805184815290517fa3f1ee9126a074d9326c682f561767f710e927faa811f7a99829d49dc421797a9181900360200190a1505050565b3360008181526002602052604090205460ff1615156110e857600080fd5b600082815260208190526040902054829073ffffffffffffffffffffffffffffffffffffffff16151561111a57600080fd5b60008381526001602090815260408083203380855292529091205484919060ff161561114557600080fd5b600085815260016020818152604080842033808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909317909255905187927f4a504a94899432a9846e1aa406dceb1bcfd538bb839071d49d1e5e23f5be30ef91a36111b9856113fa565b5050505050565b60006111cd8484846115c1565b90506111d8816110ca565b9392505050565b603281565b60045481565b60003330146111f857600080fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260026020526040902054839060ff16151561122e57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260026020526040902054839060ff161561126357600080fd5b600092505b600354831015611328578473ffffffffffffffffffffffffffffffffffffffff1660038481548110151561129857fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561131d57836003848154811015156112d057fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611328565b600190920191611268565b73ffffffffffffffffffffffffffffffffffffffff80861660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090811690915593881682528082208054909416600117909355915190917f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9091a260405173ffffffffffffffffffffffffffffffffffffffff8516907ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d90600090a25050505050565b600081815260208190526040812060030154829060ff161561141b57600080fd5b61142483610b01565b156115bc57600083815260208190526040908190206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915581548183015493516002808501805495985073ffffffffffffffffffffffffffffffffffffffff909316959492939192839285927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91831615610100029190910190911604801561151b5780601f106114f05761010080835404028352916020019161151b565b820191906000526020600020905b8154815290600101906020018083116114fe57829003601f168201915b505091505060006040518083038185875af192505050156115665760405183907f33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed7590600090a26115bc565b60405183907f526441bb6c1aba3c9a4a6ca1d6545da9c2333c8c48343ef398eb858d72b7923690600090a26003820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b505050565b60008373ffffffffffffffffffffffffffffffffffffffff811615156115e657600080fd5b6005546040805160808101825273ffffffffffffffffffffffffffffffffffffffff8881168252602080830189815283850189815260006060860181905287815280845295909520845181547fffffffffffffffffffffffff0000000000000000000000000000000000000000169416939093178355516001830155925180519496509193909261167e926002850192910190611718565b5060609190910151600390910180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905560058054600101905560405182907fc0ba8fe4b176c1714197d43b9cc6bcf797a4a7461c5fe8d0ef6e184ae7601e5190600090a2509392505050565b8154818355818111156115bc576000838152602090206115bc918101908301611796565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061175957805160ff1916838001178555611786565b82800160010185558215611786579182015b8281111561178657825182559160200191906001019061176b565b50611792929150611796565b5090565b610d6491905b80821115611792576000815560010161179c5600a165627a7a72305820b784d4aa81d4315a2dd128ba81f43375b85b97e17b5e9efa504e0a862f590f360029",
- "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x11C JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x25E7C27 DUP2 EQ PUSH2 0x15E JUMPI DUP1 PUSH4 0x173825D9 EQ PUSH2 0x19F JUMPI DUP1 PUSH4 0x20EA8D86 EQ PUSH2 0x1CD JUMPI DUP1 PUSH4 0x2F54BF6E EQ PUSH2 0x1E5 JUMPI DUP1 PUSH4 0x3411C81C EQ PUSH2 0x227 JUMPI DUP1 PUSH4 0x54741525 EQ PUSH2 0x258 JUMPI DUP1 PUSH4 0x7065CB48 EQ PUSH2 0x289 JUMPI DUP1 PUSH4 0x784547A7 EQ PUSH2 0x2B7 JUMPI DUP1 PUSH4 0x8B51D13F EQ PUSH2 0x2CF JUMPI DUP1 PUSH4 0x9ACE38C2 EQ PUSH2 0x2E7 JUMPI DUP1 PUSH4 0xA0E67E2B EQ PUSH2 0x3BC JUMPI DUP1 PUSH4 0xA8ABE69A EQ PUSH2 0x421 JUMPI DUP1 PUSH4 0xB5DC40C3 EQ PUSH2 0x446 JUMPI DUP1 PUSH4 0xB77BF600 EQ PUSH2 0x45E JUMPI DUP1 PUSH4 0xBA51A6DF EQ PUSH2 0x473 JUMPI DUP1 PUSH4 0xC01A8C84 EQ PUSH2 0x48B JUMPI DUP1 PUSH4 0xC6427474 EQ PUSH2 0x4A3 JUMPI DUP1 PUSH4 0xD74F8EDD EQ PUSH2 0x519 JUMPI DUP1 PUSH4 0xDC8452CD EQ PUSH2 0x52E JUMPI DUP1 PUSH4 0xE20056E6 EQ PUSH2 0x543 JUMPI DUP1 PUSH4 0xEE22610B EQ PUSH2 0x577 JUMPI JUMPDEST PUSH1 0x0 CALLVALUE GT ISZERO PUSH2 0x15C JUMPI PUSH1 0x40 DUP1 MLOAD CALLVALUE DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0xE1FFFCC4923D04B559F4D29A8BFC6CDA04EB5B0D3C460751C2402C5C5CC9109C SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x16A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x176 PUSH1 0x4 CALLDATALOAD PUSH2 0x58F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x15C PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x5C4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x15C PUSH1 0x4 CALLDATALOAD PUSH2 0x81B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x213 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x8F3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x233 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x213 PUSH1 0x4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD AND PUSH2 0x908 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x264 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x277 PUSH1 0x4 CALLDATALOAD ISZERO ISZERO PUSH1 0x24 CALLDATALOAD ISZERO ISZERO PUSH2 0x928 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x295 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x15C PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x994 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x213 PUSH1 0x4 CALLDATALOAD PUSH2 0xB01 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x277 PUSH1 0x4 CALLDATALOAD PUSH2 0xB92 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2FF PUSH1 0x4 CALLDATALOAD PUSH2 0xC0E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 ISZERO ISZERO ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x37E JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x366 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x3AB 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 SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D1 PUSH2 0xCF7 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 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x40D JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3F5 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x42D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D1 PUSH1 0x4 CALLDATALOAD PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD ISZERO ISZERO PUSH1 0x64 CALLDATALOAD ISZERO ISZERO PUSH2 0xD67 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x452 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D1 PUSH1 0x4 CALLDATALOAD PUSH2 0xEA0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x46A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x277 PUSH2 0x104D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x47F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x15C PUSH1 0x4 CALLDATALOAD PUSH2 0x1053 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x497 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x15C PUSH1 0x4 CALLDATALOAD PUSH2 0x10CA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 PUSH1 0x44 CALLDATALOAD DUP2 DUP2 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x277 SWAP5 DUP3 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP5 PUSH1 0x24 DUP1 CALLDATALOAD SWAP6 CALLDATASIZE SWAP6 SWAP5 PUSH1 0x64 SWAP5 SWAP3 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x11C0 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x525 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x277 PUSH2 0x11DF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x53A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x277 PUSH2 0x11E4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x54F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x15C PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH2 0x11EA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x583 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x15C PUSH1 0x4 CALLDATALOAD PUSH2 0x13FA JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD DUP3 SWAP1 DUP2 LT PUSH2 0x59D JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x0 CALLER ADDRESS EQ PUSH2 0x5D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x608 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE SWAP2 POP JUMPDEST PUSH1 0x3 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP3 LT ISZERO PUSH2 0x78B JUMPI DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x3 DUP4 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x6A8 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x780 JUMPI PUSH1 0x3 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0x700 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x3 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x733 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0x78B JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x656 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 PUSH2 0x7BC SWAP1 DUP3 PUSH2 0x16F4 JUMP JUMPDEST POP PUSH1 0x3 SLOAD PUSH1 0x4 SLOAD GT ISZERO PUSH2 0x7D5 JUMPI PUSH1 0x3 SLOAD PUSH2 0x7D5 SWAP1 PUSH2 0x1053 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH32 0x8001553A916EF2F495D26A907CC54D96ED840D7BDA71E73194BF5A9DF7A76B90 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x839 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD DUP4 SWAP2 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x865 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD DUP5 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x886 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE MLOAD DUP8 SWAP3 PUSH32 0xF6A317157440607F36269043EB55F1287A5A19BA2216AFEAB88CD46CBCFB88E9 SWAP2 LOG3 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST PUSH1 0x5 SLOAD DUP2 LT ISZERO PUSH2 0x98D JUMPI DUP4 DUP1 ISZERO PUSH2 0x955 JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND ISZERO JUMPDEST DUP1 PUSH2 0x979 JUMPI POP DUP3 DUP1 ISZERO PUSH2 0x979 JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND JUMPDEST ISZERO PUSH2 0x985 JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x1 ADD PUSH2 0x92C JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0x9A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x9D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO ISZERO PUSH2 0x9F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3 DUP1 SLOAD SWAP1 POP PUSH1 0x1 ADD PUSH1 0x4 SLOAD PUSH1 0x32 DUP3 GT DUP1 PUSH2 0xA12 JUMPI POP DUP2 DUP2 GT JUMPDEST DUP1 PUSH2 0xA1B JUMPI POP DUP1 ISZERO JUMPDEST DUP1 PUSH2 0xA24 JUMPI POP DUP2 ISZERO JUMPDEST ISZERO PUSH2 0xA2E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x3 DUP1 SLOAD SWAP2 DUP3 ADD DUP2 SSTORE DUP4 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND DUP5 OR SWAP1 SSTORE MLOAD PUSH32 0xF39E6E1EB0EDCF53C221607B54B00CD28F3196FED0A24994DC308B8F611B682D SWAP2 SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 JUMPDEST PUSH1 0x3 SLOAD DUP2 LT ISZERO PUSH2 0xB8B JUMPI PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 DUP1 SLOAD SWAP2 SWAP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0xB2F JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xB70 JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x4 SLOAD DUP3 EQ ISZERO PUSH2 0xB83 JUMPI PUSH1 0x1 SWAP3 POP PUSH2 0xB8B JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0xB06 JUMP JUMPDEST POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST PUSH1 0x3 SLOAD DUP2 LT ISZERO PUSH2 0xC08 JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 DUP1 SLOAD SWAP2 SWAP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0xBBF JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xC00 JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x1 ADD PUSH2 0xB96 JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP2 DUP2 MSTORE SWAP2 DUP2 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP1 DUP4 ADD SLOAD PUSH1 0x2 DUP1 DUP6 ADD DUP1 SLOAD DUP8 MLOAD PUSH2 0x100 SWAP6 DUP3 AND ISZERO SWAP6 SWAP1 SWAP6 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD AND SWAP2 SWAP1 SWAP2 DIV PUSH1 0x1F DUP2 ADD DUP9 SWAP1 DIV DUP9 MUL DUP5 ADD DUP9 ADD SWAP1 SWAP7 MSTORE DUP6 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND SWAP6 SWAP1 SWAP5 SWAP2 SWAP3 SWAP2 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xCE4 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xCB9 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xCE4 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xCC7 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP PUSH1 0x3 SWAP1 SWAP4 ADD SLOAD SWAP2 SWAP3 POP POP PUSH1 0xFF AND DUP5 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0xD5C JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xD31 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x0 DUP1 PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xD99 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 SWAP2 POP PUSH1 0x0 SWAP1 POP JUMPDEST PUSH1 0x5 SLOAD DUP2 LT ISZERO PUSH2 0xE20 JUMPI DUP6 DUP1 ISZERO PUSH2 0xDCE JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND ISZERO JUMPDEST DUP1 PUSH2 0xDF2 JUMPI POP DUP5 DUP1 ISZERO PUSH2 0xDF2 JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND JUMPDEST ISZERO PUSH2 0xE18 JUMPI DUP1 DUP4 DUP4 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xE06 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SWAP1 JUMPDEST PUSH1 0x1 ADD PUSH2 0xDA5 JUMP JUMPDEST DUP8 DUP8 SUB PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xE4C JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP DUP8 SWAP1 POP JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0xE95 JUMPI DUP3 DUP2 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xE69 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP5 DUP10 DUP4 SUB DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xE83 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0xE53 JUMP JUMPDEST POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x0 DUP1 PUSH1 0x3 DUP1 SLOAD SWAP1 POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xED5 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 SWAP2 POP PUSH1 0x0 SWAP1 POP JUMPDEST PUSH1 0x3 SLOAD DUP2 LT ISZERO PUSH2 0xFB9 JUMPI PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 DUP1 SLOAD SWAP2 SWAP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0xF0A JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xFB1 JUMPI PUSH1 0x3 DUP1 SLOAD DUP3 SWAP1 DUP2 LT PUSH2 0xF52 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 DUP5 SWAP1 DUP5 SWAP1 DUP2 LT PUSH2 0xF85 JUMPI INVALID JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SWAP1 JUMPDEST PUSH1 0x1 ADD PUSH2 0xEE1 JUMP JUMPDEST DUP2 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xFE3 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP PUSH1 0x0 SWAP1 POP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1045 JUMPI DUP3 DUP2 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1001 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP5 DUP3 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1019 JUMPI INVALID JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 ADD PUSH2 0xFEB JUMP JUMPDEST POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0x105F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3 SLOAD DUP2 PUSH1 0x32 DUP3 GT DUP1 PUSH2 0x1071 JUMPI POP DUP2 DUP2 GT JUMPDEST DUP1 PUSH2 0x107A JUMPI POP DUP1 ISZERO JUMPDEST DUP1 PUSH2 0x1083 JUMPI POP DUP2 ISZERO JUMPDEST ISZERO PUSH2 0x108D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x4 DUP4 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xA3F1EE9126A074D9326C682F561767F710E927FAA811F7A99829D49DC421797A SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x10E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO ISZERO PUSH2 0x111A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD DUP5 SWAP2 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x1145 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 CALLER DUP1 DUP7 MSTORE SWAP3 MSTORE DUP1 DUP5 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SWAP4 OR SWAP1 SWAP3 SSTORE SWAP1 MLOAD DUP8 SWAP3 PUSH32 0x4A504A94899432A9846E1AA406DCEB1BCFD538BB839071D49D1E5E23F5BE30EF SWAP2 LOG3 PUSH2 0x11B9 DUP6 PUSH2 0x13FA JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x11CD DUP5 DUP5 DUP5 PUSH2 0x15C1 JUMP JUMPDEST SWAP1 POP PUSH2 0x11D8 DUP2 PUSH2 0x10CA JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x32 DUP2 JUMP JUMPDEST PUSH1 0x4 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 CALLER ADDRESS EQ PUSH2 0x11F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x122E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x1263 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP3 POP JUMPDEST PUSH1 0x3 SLOAD DUP4 LT ISZERO PUSH2 0x1328 JUMPI DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x3 DUP5 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1298 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x131D JUMPI DUP4 PUSH1 0x3 DUP5 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x12D0 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0x1328 JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 PUSH2 0x1268 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 SWAP1 DUP2 AND SWAP1 SWAP2 SSTORE SWAP4 DUP9 AND DUP3 MSTORE DUP1 DUP3 KECCAK256 DUP1 SLOAD SWAP1 SWAP5 AND PUSH1 0x1 OR SWAP1 SWAP4 SSTORE SWAP2 MLOAD SWAP1 SWAP2 PUSH32 0x8001553A916EF2F495D26A907CC54D96ED840D7BDA71E73194BF5A9DF7A76B90 SWAP2 LOG2 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP1 PUSH32 0xF39E6E1EB0EDCF53C221607B54B00CD28F3196FED0A24994DC308B8F611B682D SWAP1 PUSH1 0x0 SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 ADD SLOAD DUP3 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x141B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1424 DUP4 PUSH2 0xB01 JUMP JUMPDEST ISZERO PUSH2 0x15BC JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x3 DUP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP2 SLOAD DUP2 DUP4 ADD SLOAD SWAP4 MLOAD PUSH1 0x2 DUP1 DUP6 ADD DUP1 SLOAD SWAP6 SWAP9 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND SWAP6 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 DUP4 SWAP3 DUP6 SWAP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP4 AND ISZERO PUSH2 0x100 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 AND DIV DUP1 ISZERO PUSH2 0x151B JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x14F0 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x151B JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x14FE JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP ISZERO PUSH2 0x1566 JUMPI PUSH1 0x40 MLOAD DUP4 SWAP1 PUSH32 0x33E13ECB54C3076D8E8BB8C2881800A4D972B792045FFAE98FDF46DF365FED75 SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH2 0x15BC JUMP JUMPDEST PUSH1 0x40 MLOAD DUP4 SWAP1 PUSH32 0x526441BB6C1ABA3C9A4A6CA1D6545DA9C2333C8C48343EF398EB858D72B79236 SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH1 0x3 DUP3 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO ISZERO PUSH2 0x15E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x80 DUP2 ADD DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD DUP10 DUP2 MSTORE DUP4 DUP6 ADD DUP10 DUP2 MSTORE PUSH1 0x0 PUSH1 0x60 DUP7 ADD DUP2 SWAP1 MSTORE DUP8 DUP2 MSTORE DUP1 DUP5 MSTORE SWAP6 SWAP1 SWAP6 KECCAK256 DUP5 MLOAD DUP2 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP5 AND SWAP4 SWAP1 SWAP4 OR DUP4 SSTORE MLOAD PUSH1 0x1 DUP4 ADD SSTORE SWAP3 MLOAD DUP1 MLOAD SWAP5 SWAP7 POP SWAP2 SWAP4 SWAP1 SWAP3 PUSH2 0x167E SWAP3 PUSH1 0x2 DUP6 ADD SWAP3 SWAP2 ADD SWAP1 PUSH2 0x1718 JUMP JUMPDEST POP PUSH1 0x60 SWAP2 SWAP1 SWAP2 ADD MLOAD PUSH1 0x3 SWAP1 SWAP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x5 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE PUSH1 0x40 MLOAD DUP3 SWAP1 PUSH32 0xC0BA8FE4B176C1714197D43B9CC6BCF797A4A7461C5FE8D0EF6E184AE7601E51 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 SLOAD DUP2 DUP4 SSTORE DUP2 DUP2 GT ISZERO PUSH2 0x15BC JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 PUSH2 0x15BC SWAP2 DUP2 ADD SWAP1 DUP4 ADD PUSH2 0x1796 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0x1759 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x1786 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x1786 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x1786 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x176B JUMP JUMPDEST POP PUSH2 0x1792 SWAP3 SWAP2 POP PUSH2 0x1796 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0xD64 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1792 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x179C JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 0xb7 DUP5 0xd4 0xaa DUP2 0xd4 BALANCE GAS 0x2d 0xd1 0x28 0xba DUP2 DELEGATECALL CALLER PUSH22 0xB85B97E17B5E9EFA504E0A862F590F36002900000000 ",
- "sourceMap": "186:11249:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2519:1;2507:9;:13;2503:61;;;2534:30;;;2554:9;2534:30;;;;2542:10;;2534:30;;;;;;;;;;2503:61;186:11249;936:23;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;936:23:0;;;;;;;;;;;;;;;;;;;;;;;;3711:460;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3711:460:0;;;;;;;6274:291;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6274:291:0;;;;;890:40;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;890:40:0;;;;;;;;;;;;;;;;;;;;;;;;;820:64;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;820:64:0;;;;;;;;;9136:319;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9136:319:0;;;;;;;;;;;;;;;;;;;;;;;;;;;3311:277;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3311:277:0;;;;;;;7304:337;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7304:337:0;;;;;8622:252;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8622:252:0;;;;;765:49;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;765:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;765:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9539:115;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9539:115:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;9539:115:0;;;;;;;;;;;;;;;;;10757:676;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10757:676:0;;;;;;;;;;;;;;;9833:575;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9833:575:0;;;;;991:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;991:28:0;;;;4990:207;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4990:207:0;;;;;5806:344;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5806:344:0;;;;;5456:244;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5456:244:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5456:244:0;;-1:-1:-1;5456:244:0;;-1:-1:-1;;;;;;;5456:244:0;217:41;;8:9:-1;5:2;;;30:1;27;20:12;5:2;217:41:0;;;;965:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;965:20:0;;;;4370:449;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4370:449:0;;;;;;;;;;;;6679:474;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6679:474:0;;;;;936:23;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;936:23:0;:::o;3711:460::-;3859:6;1186:10;1208:4;1186:27;1182:50;;1227:5;;;1182:50;1420:14;;;;;;;:7;:14;;;;;;3801:5;;1420:14;;1419:15;1415:38;;;1448:5;;;1415:38;3822:14;;;3839:5;3822:14;;;:7;:14;;;;;:22;;;;;;3839:5;-1:-1:-1;3854:170:0;3871:6;:13;:17;;3869:19;;3854:170;;;3924:5;3911:18;;:6;3918:1;3911:9;;;;;;;;;;;;;;;;;;;;;;:18;3907:117;;;3961:6;3968:13;;:17;;;;3961:25;;;;;;;;;;;;;;;;3949:6;:9;;3961:25;;;;;3956:1;;3949:9;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;4004:5;;3907:117;3890:3;;;;;3854:170;;;4033:6;:18;;;;;;;;;:::i;:::-;-1:-1:-1;4076:6:0;:13;4065:8;;:24;4061:74;;;4121:6;:13;4103:32;;:17;:32::i;:::-;4145:19;;;;;;;;;;;1242:1;3711:460;;:::o;6274:291::-;6357:10;1420:14;;;;:7;:14;;;;;;;;1419:15;1415:38;;;1448:5;;;1415:38;1694:28;;;;:13;:28;;;;;;;;6402:10;1694:35;;;;;;;;;6387:13;;6402:10;1694:35;;1693:36;1689:59;;;1743:5;;;1689:59;1976:12;:27;;;;;;;;;;:36;;;6434:13;;1976:36;;1972:59;;;2026:5;;;1972:59;6506:5;6463:28;;;:13;:28;;;;;;;;6492:10;6463:40;;;;;;;;:48;;;;;;6521:37;6477:13;;6521:37;;;1758:1;1463;;6274:291;;:::o;890:40::-;;;;;;;;;;;;;;;:::o;820:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9136:319::-;9243:10;;9269:179;9286:16;;9284:1;:18;9269:179;;;9328:7;:36;;;;-1:-1:-1;9340:12:0;:15;;;;;;;;;;:24;;;;;9339:25;9328:36;:92;;;;9384:8;:36;;;;-1:-1:-1;9396:12:0;:15;;;;;;;;;;:24;;;;;9384:36;9321:127;;;9447:1;9438:10;;;;9321:127;9304:3;;9269:179;;;9136:319;;;;;:::o;3311:277::-;1186:10;1208:4;1186:27;1182:50;;1227:5;;;1182:50;1312:14;;;;;;;:7;:14;;;;;;3404:5;;1312:14;;1308:37;;;1340:5;;;1308:37;3427:5;2104:13;;;;2100:36;;;2131:5;;;2100:36;3459:6;:13;;;;3475:1;3459:17;3478:8;;256:2;2236:10;:28;:66;;;;2292:10;2280:9;:22;2236:66;:96;;;-1:-1:-1;2318:14:0;;2236:96;:127;;;-1:-1:-1;2348:15:0;;2236:127;2229:153;;;2377:5;;;2229:153;3502:14;;;;;;;:7;:14;;;;;;:21;;;;3519:4;3502:21;;;;;;3533:6;27:10:-1;;23:18;;;45:23;;3533:18:0;;;;;;;;;;;;3561:20;;;3502:14;3561:20;2146:1;;1355;1242;3311:277;:::o;7304:337::-;7394:4;;;7438:197;7455:6;:13;7453:15;;7438:197;;;7493:28;;;;:13;:28;;;;;7522:6;:9;;7493:28;;;7529:1;;7522:9;;;;;;;;;;;;;;;;;;;;7493:39;;;;;;;;;;;;;;;7489:71;;;7559:1;7550:10;;;;7489:71;7587:8;;7578:5;:17;7574:50;;;7620:4;7613:11;;;;7574:50;7470:3;;7438:197;;;7304:337;;;;;:::o;8622:252::-;8721:10;;8747:120;8764:6;:13;8762:15;;8747:120;;;8800:28;;;;:13;:28;;;;;8829:6;:9;;8800:28;;;8836:1;;8829:9;;;;;;;;;;;;;;;;;;;;8800:39;;;;;;;;;;;;;;;8796:71;;;8866:1;8857:10;;;;8796:71;8779:3;;8747:120;;;8622:252;;;;:::o;765:49::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;765:49:0;;;;;;;-1:-1:-1;;765:49:0;;;:::o;9539:115::-;9609:9;9641:6;9634:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9539:115;;:::o;10757:676::-;10882:22;10920:32;10993:10;11017:6;10966:16;;10955:28;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;10955:28:0;;10920:63;;11006:1;10993:14;;11040:1;11038:3;;11033:250;11045:16;;11043:1;:18;11033:250;;;11087:7;:36;;;;-1:-1:-1;11099:12:0;:15;;;;;;;;;;:24;;;;;11098:25;11087:36;:92;;;;11143:8;:36;;;;-1:-1:-1;11155:12:0;:15;;;;;;;;;;:24;;;;;11143:36;11080:203;;;11239:1;11211:18;11230:5;11211:25;;;;;;;;;;;;;;;;;;:29;11267:1;11258:10;;;;;11080:203;11063:3;;11033:250;;;11326:4;11321:2;:9;11310:21;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;11310:21:0;;11292:39;;11348:4;11346:6;;11341:85;11356:2;11354:1;:4;11341:85;;;11405:18;11424:1;11405:21;;;;;;;;;;;;;;;;;;11377:15;11397:4;11393:1;:8;11377:25;;;;;;;;;;;;;;;;;;:49;11360:3;;11341:85;;;10757:676;;;;;;;;;:::o;9833:575::-;9928:24;9968:34;10043:10;10067:6;10019;:13;;;;10005:28;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;10005:28:0;;9968:65;;10056:1;10043:14;;10090:1;10088:3;;10083:186;10095:6;:13;10093:15;;10083:186;;;10131:28;;;;:13;:28;;;;;10160:6;:9;;10131:28;;;10167:1;;10160:9;;;;;;;;;;;;;;;;;;;;10131:39;;;;;;;;;;;;;;;10127:142;;;10217:6;:9;;10224:1;;10217:9;;;;;;;;;;;;;;;;10190:24;;10217:9;;;;;10190:17;;10208:5;;10190:24;;;;;;:36;;;;:24;;;;;;;;;;:36;10253:1;10244:10;;;;;10127:142;10110:3;;10083:186;;;10309:5;10295:20;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;10295:20:0;;10278:37;;10332:1;10330:3;;10325:76;10337:5;10335:1;:7;10325:76;;;10381:17;10399:1;10381:20;;;;;;;;;;;;;;;;;;10361:14;10376:1;10361:17;;;;;;;;;;:40;;;;:17;;;;;;;;;;:40;10344:3;;10325:76;;;9833:575;;;;;;:::o;991:28::-;;;;:::o;4990:207::-;1186:10;1208:4;1186:27;1182:50;;1227:5;;;1182:50;5092:6;:13;5107:9;256:2;2236:28;;;:66;;;2292:10;2280:9;:22;2236:66;:96;;;-1:-1:-1;2318:14:0;;2236:96;:127;;;-1:-1:-1;2348:15:0;;2236:127;2229:153;;;2377:5;;;2229:153;5132:8;:20;;;5162:28;;;;;;;;;;;;;;;;;1242:1;;4990:207;:::o;5806:344::-;5889:10;1420:14;;;;:7;:14;;;;;;;;1419:15;1415:38;;;1448:5;;;1415:38;1538:12;:27;;;;;;;;;;:39;5927:13;;1538:39;;:44;1534:67;;;1596:5;;;1534:67;1843:28;;;;:13;:28;;;;;;;;5978:10;1843:35;;;;;;;;;5963:13;;5978:10;1843:35;;1839:58;;;1892:5;;;1839:58;6004:28;;;;6047:4;6004:28;;;;;;;;6033:10;6004:40;;;;;;;;:47;;;;;;;;;;6061:39;;6018:13;;6061:39;;;6110:33;6129:13;6110:18;:33::i;:::-;1611:1;;1463;5806:344;;:::o;5456:244::-;5560:18;5610:40;5625:11;5638:5;5645:4;5610:14;:40::i;:::-;5594:56;;5660:33;5679:13;5660:18;:33::i;:::-;5456:244;;;;;:::o;217:41::-;256:2;217:41;:::o;965:20::-;;;;:::o;4370:449::-;4541:6;1186:10;1208:4;1186:27;1182:50;;1227:5;;;1182:50;1420:14;;;;;;;:7;:14;;;;;;4479:5;;1420:14;;1419:15;1415:38;;;1448:5;;;1415:38;1312:14;;;;;;;:7;:14;;;;;;4512:8;;1312:14;;1308:37;;;1340:5;;;1308:37;4548:1;4541:8;;4536:149;4553:6;:13;4551:15;;4536:149;;;4602:5;4589:18;;:6;4596:1;4589:9;;;;;;;;;;;;;;;;;;;;;;:18;4585:100;;;4639:8;4627:6;4634:1;4627:9;;;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;4665:5;;4585:100;4568:3;;;;;4536:149;;;4694:14;;;;4711:5;4694:14;;;:7;:14;;;;;;:22;;;;;;;;;4726:17;;;;;;;;:24;;;;;4694:22;4726:24;;;;4760:19;;4694:14;;4760:19;;;4789:23;;;;;;;;;;;1463:1;1242;4370:449;;;:::o;6679:474::-;6837:14;1976:27;;;;;;;;;;:36;;;6762:13;;1976:36;;1972:59;;;2026:5;;;1972:59;6795:26;6807:13;6795:11;:26::i;:::-;6791:356;;;6854:12;:27;;;;;;;;;;;;6895:11;;;:18;;;;6909:4;6895:18;;;;;;6931:14;;6957:8;;;;6931:44;;6967:7;;;;6931:44;;6854:27;;-1:-1:-1;6931:14:0;;;;;6957:8;6967:7;;6931:44;;;;6967:7;;6931:44;;;;;6895:18;6931:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6927:210;;;6993:24;;7003:13;;6993:24;;;;;6927:210;;;7054:31;;7071:13;;7054:31;;;;;7103:11;;;:19;;;;;;6927:210;6679:474;;;:::o;7974:451::-;8106:18;8076:11;2104:13;;;;2100:36;;;2131:5;;;2100:36;8156:16;;8212:140;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8212:140:0;;;;;;8182:27;;;;;;;;;;:170;;;;;;;;;;;;;;;-1:-1:-1;8182:170:0;;;;;;;8156:16;;-1:-1:-1;8212:140:0;;8182:27;;:170;;;;;;;;;;:::i;:::-;-1:-1:-1;8182:170:0;;;;;;;;;;;;;;;;;;;;;;;8362:16;:21;;-1:-1:-1;8362:21:0;;;8393:25;;8404:13;;8393:25;;-1:-1:-1;;8393:25:0;7974:451;;;;;;:::o;186:11249::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;186:11249:0;;;-1:-1:-1;186:11249:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;"
+ "object": "0x60806040526004361061011c5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663025e7c27811461015e578063173825d91461019f57806320ea8d86146101cd5780632f54bf6e146101e55780633411c81c1461022757806354741525146102585780637065cb4814610289578063784547a7146102b75780638b51d13f146102cf5780639ace38c2146102e7578063a0e67e2b146103bc578063a8abe69a14610421578063b5dc40c314610446578063b77bf6001461045e578063ba51a6df14610473578063c01a8c841461048b578063c6427474146104a3578063d74f8edd14610519578063dc8452cd1461052e578063e20056e614610543578063ee22610b14610577575b600034111561015c5760408051348152905133917fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c919081900360200190a25b005b34801561016a57600080fd5b5061017660043561058f565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156101ab57600080fd5b5061015c73ffffffffffffffffffffffffffffffffffffffff600435166105c4565b3480156101d957600080fd5b5061015c60043561081b565b3480156101f157600080fd5b5061021373ffffffffffffffffffffffffffffffffffffffff600435166108f3565b604080519115158252519081900360200190f35b34801561023357600080fd5b5061021360043573ffffffffffffffffffffffffffffffffffffffff60243516610908565b34801561026457600080fd5b5061027760043515156024351515610928565b60408051918252519081900360200190f35b34801561029557600080fd5b5061015c73ffffffffffffffffffffffffffffffffffffffff60043516610994565b3480156102c357600080fd5b50610213600435610b01565b3480156102db57600080fd5b50610277600435610b92565b3480156102f357600080fd5b506102ff600435610c0e565b604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018060200183151515158152602001828103825284818151815260200191508051906020019080838360005b8381101561037e578181015183820152602001610366565b50505050905090810190601f1680156103ab5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b3480156103c857600080fd5b506103d1610cf7565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561040d5781810151838201526020016103f5565b505050509050019250505060405180910390f35b34801561042d57600080fd5b506103d160043560243560443515156064351515610d67565b34801561045257600080fd5b506103d1600435610ea0565b34801561046a57600080fd5b5061027761104d565b34801561047f57600080fd5b5061015c600435611053565b34801561049757600080fd5b5061015c6004356110ca565b3480156104af57600080fd5b50604080516020600460443581810135601f810184900484028501840190955284845261027794823573ffffffffffffffffffffffffffffffffffffffff169460248035953695946064949201919081908401838280828437509497506111c09650505050505050565b34801561052557600080fd5b506102776111df565b34801561053a57600080fd5b506102776111e4565b34801561054f57600080fd5b5061015c73ffffffffffffffffffffffffffffffffffffffff600435811690602435166111ea565b34801561058357600080fd5b5061015c6004356113fa565b600380548290811061059d57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b60003330146105d257600080fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020526040902054829060ff16151561060857600080fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260026020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905591505b6003547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0182101561078b578273ffffffffffffffffffffffffffffffffffffffff166003838154811015156106a857fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561078057600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061070057fe5b6000918252602090912001546003805473ffffffffffffffffffffffffffffffffffffffff909216918490811061073357fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061078b565b600190910190610656565b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01906107bc90826116f4565b5060035460045411156107d5576003546107d590611053565b60405173ffffffffffffffffffffffffffffffffffffffff8416907f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9090600090a2505050565b3360008181526002602052604090205460ff16151561083957600080fd5b60008281526001602090815260408083203380855292529091205483919060ff16151561086557600080fd5b600084815260208190526040902060030154849060ff161561088657600080fd5b600085815260016020908152604080832033808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555187927ff6a317157440607f36269043eb55f1287a5a19ba2216afeab88cd46cbcfb88e991a35050505050565b60026020526000908152604090205460ff1681565b600160209081526000928352604080842090915290825290205460ff1681565b6000805b60055481101561098d57838015610955575060008181526020819052604090206003015460ff16155b806109795750828015610979575060008181526020819052604090206003015460ff165b15610985576001820191505b60010161092c565b5092915050565b3330146109a057600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116600090815260026020526040902054819060ff16156109d557600080fd5b8173ffffffffffffffffffffffffffffffffffffffff811615156109f857600080fd5b6003805490506001016004546032821180610a1257508181115b80610a1b575080155b80610a24575081155b15610a2e57600080fd5b73ffffffffffffffffffffffffffffffffffffffff851660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915560038054918201815583527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055517ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d9190a25050505050565b600080805b600354811015610b8b5760008481526001602052604081206003805491929184908110610b2f57fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400190205460ff1615610b70576001820191505b600454821415610b835760019250610b8b565b600101610b06565b5050919050565b6000805b600354811015610c085760008381526001602052604081206003805491929184908110610bbf57fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400190205460ff1615610c00576001820191505b600101610b96565b50919050565b60006020818152918152604090819020805460018083015460028085018054875161010095821615959095027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691909104601f810188900488028401880190965285835273ffffffffffffffffffffffffffffffffffffffff90931695909491929190830182828015610ce45780601f10610cb957610100808354040283529160200191610ce4565b820191906000526020600020905b815481529060010190602001808311610cc757829003601f168201915b5050506003909301549192505060ff1684565b60606003805480602002602001604051908101604052809291908181526020018280548015610d5c57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610d31575b505050505090505b90565b606080600080600554604051908082528060200260200182016040528015610d99578160200160208202803883390190505b50925060009150600090505b600554811015610e2057858015610dce575060008181526020819052604090206003015460ff16155b80610df25750848015610df2575060008181526020819052604090206003015460ff165b15610e1857808383815181101515610e0657fe5b60209081029091010152600191909101905b600101610da5565b878703604051908082528060200260200182016040528015610e4c578160200160208202803883390190505b5093508790505b86811015610e95578281815181101515610e6957fe5b9060200190602002015184898303815181101515610e8357fe5b60209081029091010152600101610e53565b505050949350505050565b606080600080600380549050604051908082528060200260200182016040528015610ed5578160200160208202803883390190505b50925060009150600090505b600354811015610fb95760008581526001602052604081206003805491929184908110610f0a57fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400190205460ff1615610fb1576003805482908110610f5257fe5b600091825260209091200154835173ffffffffffffffffffffffffffffffffffffffff90911690849084908110610f8557fe5b73ffffffffffffffffffffffffffffffffffffffff909216602092830290910190910152600191909101905b600101610ee1565b81604051908082528060200260200182016040528015610fe3578160200160208202803883390190505b509350600090505b8181101561104557828181518110151561100157fe5b90602001906020020151848281518110151561101957fe5b73ffffffffffffffffffffffffffffffffffffffff909216602092830290910190910152600101610feb565b505050919050565b60055481565b33301461105f57600080fd5b60035481603282118061107157508181115b8061107a575080155b80611083575081155b1561108d57600080fd5b60048390556040805184815290517fa3f1ee9126a074d9326c682f561767f710e927faa811f7a99829d49dc421797a9181900360200190a1505050565b3360008181526002602052604090205460ff1615156110e857600080fd5b600082815260208190526040902054829073ffffffffffffffffffffffffffffffffffffffff16151561111a57600080fd5b60008381526001602090815260408083203380855292529091205484919060ff161561114557600080fd5b600085815260016020818152604080842033808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909317909255905187927f4a504a94899432a9846e1aa406dceb1bcfd538bb839071d49d1e5e23f5be30ef91a36111b9856113fa565b5050505050565b60006111cd8484846115c1565b90506111d8816110ca565b9392505050565b603281565b60045481565b60003330146111f857600080fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260026020526040902054839060ff16151561122e57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260026020526040902054839060ff161561126357600080fd5b600092505b600354831015611328578473ffffffffffffffffffffffffffffffffffffffff1660038481548110151561129857fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561131d57836003848154811015156112d057fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611328565b600190920191611268565b73ffffffffffffffffffffffffffffffffffffffff80861660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090811690915593881682528082208054909416600117909355915190917f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9091a260405173ffffffffffffffffffffffffffffffffffffffff8516907ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d90600090a25050505050565b600081815260208190526040812060030154829060ff161561141b57600080fd5b61142483610b01565b156115bc57600083815260208190526040908190206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915581548183015493516002808501805495985073ffffffffffffffffffffffffffffffffffffffff909316959492939192839285927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91831615610100029190910190911604801561151b5780601f106114f05761010080835404028352916020019161151b565b820191906000526020600020905b8154815290600101906020018083116114fe57829003601f168201915b505091505060006040518083038185875af192505050156115665760405183907f33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed7590600090a26115bc565b60405183907f526441bb6c1aba3c9a4a6ca1d6545da9c2333c8c48343ef398eb858d72b7923690600090a26003820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b505050565b60008373ffffffffffffffffffffffffffffffffffffffff811615156115e657600080fd5b6005546040805160808101825273ffffffffffffffffffffffffffffffffffffffff8881168252602080830189815283850189815260006060860181905287815280845295909520845181547fffffffffffffffffffffffff0000000000000000000000000000000000000000169416939093178355516001830155925180519496509193909261167e926002850192910190611718565b5060609190910151600390910180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905560058054600101905560405182907fc0ba8fe4b176c1714197d43b9cc6bcf797a4a7461c5fe8d0ef6e184ae7601e5190600090a2509392505050565b8154818355818111156115bc576000838152602090206115bc918101908301611796565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061175957805160ff1916838001178555611786565b82800160010185558215611786579182015b8281111561178657825182559160200191906001019061176b565b50611792929150611796565b5090565b610d6491905b80821115611792576000815560010161179c5600a165627a7a723058203dd9c866dd08e918bf5ffe8aa4a81cf2983a2a3ea0aff84e121fc918035e54be0029",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x11C JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x25E7C27 DUP2 EQ PUSH2 0x15E JUMPI DUP1 PUSH4 0x173825D9 EQ PUSH2 0x19F JUMPI DUP1 PUSH4 0x20EA8D86 EQ PUSH2 0x1CD JUMPI DUP1 PUSH4 0x2F54BF6E EQ PUSH2 0x1E5 JUMPI DUP1 PUSH4 0x3411C81C EQ PUSH2 0x227 JUMPI DUP1 PUSH4 0x54741525 EQ PUSH2 0x258 JUMPI DUP1 PUSH4 0x7065CB48 EQ PUSH2 0x289 JUMPI DUP1 PUSH4 0x784547A7 EQ PUSH2 0x2B7 JUMPI DUP1 PUSH4 0x8B51D13F EQ PUSH2 0x2CF JUMPI DUP1 PUSH4 0x9ACE38C2 EQ PUSH2 0x2E7 JUMPI DUP1 PUSH4 0xA0E67E2B EQ PUSH2 0x3BC JUMPI DUP1 PUSH4 0xA8ABE69A EQ PUSH2 0x421 JUMPI DUP1 PUSH4 0xB5DC40C3 EQ PUSH2 0x446 JUMPI DUP1 PUSH4 0xB77BF600 EQ PUSH2 0x45E JUMPI DUP1 PUSH4 0xBA51A6DF EQ PUSH2 0x473 JUMPI DUP1 PUSH4 0xC01A8C84 EQ PUSH2 0x48B JUMPI DUP1 PUSH4 0xC6427474 EQ PUSH2 0x4A3 JUMPI DUP1 PUSH4 0xD74F8EDD EQ PUSH2 0x519 JUMPI DUP1 PUSH4 0xDC8452CD EQ PUSH2 0x52E JUMPI DUP1 PUSH4 0xE20056E6 EQ PUSH2 0x543 JUMPI DUP1 PUSH4 0xEE22610B EQ PUSH2 0x577 JUMPI JUMPDEST PUSH1 0x0 CALLVALUE GT ISZERO PUSH2 0x15C JUMPI PUSH1 0x40 DUP1 MLOAD CALLVALUE DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0xE1FFFCC4923D04B559F4D29A8BFC6CDA04EB5B0D3C460751C2402C5C5CC9109C SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x16A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x176 PUSH1 0x4 CALLDATALOAD PUSH2 0x58F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x15C PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x5C4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x15C PUSH1 0x4 CALLDATALOAD PUSH2 0x81B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x213 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x8F3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x233 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x213 PUSH1 0x4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD AND PUSH2 0x908 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x264 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x277 PUSH1 0x4 CALLDATALOAD ISZERO ISZERO PUSH1 0x24 CALLDATALOAD ISZERO ISZERO PUSH2 0x928 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x295 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x15C PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x994 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x213 PUSH1 0x4 CALLDATALOAD PUSH2 0xB01 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x277 PUSH1 0x4 CALLDATALOAD PUSH2 0xB92 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2FF PUSH1 0x4 CALLDATALOAD PUSH2 0xC0E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 ISZERO ISZERO ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x37E JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x366 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x3AB 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 SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D1 PUSH2 0xCF7 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 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x40D JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3F5 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x42D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D1 PUSH1 0x4 CALLDATALOAD PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD ISZERO ISZERO PUSH1 0x64 CALLDATALOAD ISZERO ISZERO PUSH2 0xD67 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x452 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D1 PUSH1 0x4 CALLDATALOAD PUSH2 0xEA0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x46A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x277 PUSH2 0x104D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x47F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x15C PUSH1 0x4 CALLDATALOAD PUSH2 0x1053 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x497 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x15C PUSH1 0x4 CALLDATALOAD PUSH2 0x10CA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 PUSH1 0x44 CALLDATALOAD DUP2 DUP2 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x277 SWAP5 DUP3 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP5 PUSH1 0x24 DUP1 CALLDATALOAD SWAP6 CALLDATASIZE SWAP6 SWAP5 PUSH1 0x64 SWAP5 SWAP3 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x11C0 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x525 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x277 PUSH2 0x11DF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x53A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x277 PUSH2 0x11E4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x54F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x15C PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH2 0x11EA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x583 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x15C PUSH1 0x4 CALLDATALOAD PUSH2 0x13FA JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD DUP3 SWAP1 DUP2 LT PUSH2 0x59D JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x0 CALLER ADDRESS EQ PUSH2 0x5D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x608 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE SWAP2 POP JUMPDEST PUSH1 0x3 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP3 LT ISZERO PUSH2 0x78B JUMPI DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x3 DUP4 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x6A8 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x780 JUMPI PUSH1 0x3 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0x700 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x3 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x733 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0x78B JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x656 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 PUSH2 0x7BC SWAP1 DUP3 PUSH2 0x16F4 JUMP JUMPDEST POP PUSH1 0x3 SLOAD PUSH1 0x4 SLOAD GT ISZERO PUSH2 0x7D5 JUMPI PUSH1 0x3 SLOAD PUSH2 0x7D5 SWAP1 PUSH2 0x1053 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH32 0x8001553A916EF2F495D26A907CC54D96ED840D7BDA71E73194BF5A9DF7A76B90 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x839 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD DUP4 SWAP2 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x865 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD DUP5 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x886 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE MLOAD DUP8 SWAP3 PUSH32 0xF6A317157440607F36269043EB55F1287A5A19BA2216AFEAB88CD46CBCFB88E9 SWAP2 LOG3 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST PUSH1 0x5 SLOAD DUP2 LT ISZERO PUSH2 0x98D JUMPI DUP4 DUP1 ISZERO PUSH2 0x955 JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND ISZERO JUMPDEST DUP1 PUSH2 0x979 JUMPI POP DUP3 DUP1 ISZERO PUSH2 0x979 JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND JUMPDEST ISZERO PUSH2 0x985 JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x1 ADD PUSH2 0x92C JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0x9A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x9D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO ISZERO PUSH2 0x9F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3 DUP1 SLOAD SWAP1 POP PUSH1 0x1 ADD PUSH1 0x4 SLOAD PUSH1 0x32 DUP3 GT DUP1 PUSH2 0xA12 JUMPI POP DUP2 DUP2 GT JUMPDEST DUP1 PUSH2 0xA1B JUMPI POP DUP1 ISZERO JUMPDEST DUP1 PUSH2 0xA24 JUMPI POP DUP2 ISZERO JUMPDEST ISZERO PUSH2 0xA2E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x3 DUP1 SLOAD SWAP2 DUP3 ADD DUP2 SSTORE DUP4 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND DUP5 OR SWAP1 SSTORE MLOAD PUSH32 0xF39E6E1EB0EDCF53C221607B54B00CD28F3196FED0A24994DC308B8F611B682D SWAP2 SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 JUMPDEST PUSH1 0x3 SLOAD DUP2 LT ISZERO PUSH2 0xB8B JUMPI PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 DUP1 SLOAD SWAP2 SWAP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0xB2F JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xB70 JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x4 SLOAD DUP3 EQ ISZERO PUSH2 0xB83 JUMPI PUSH1 0x1 SWAP3 POP PUSH2 0xB8B JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0xB06 JUMP JUMPDEST POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST PUSH1 0x3 SLOAD DUP2 LT ISZERO PUSH2 0xC08 JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 DUP1 SLOAD SWAP2 SWAP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0xBBF JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xC00 JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x1 ADD PUSH2 0xB96 JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP2 DUP2 MSTORE SWAP2 DUP2 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP1 DUP4 ADD SLOAD PUSH1 0x2 DUP1 DUP6 ADD DUP1 SLOAD DUP8 MLOAD PUSH2 0x100 SWAP6 DUP3 AND ISZERO SWAP6 SWAP1 SWAP6 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD AND SWAP2 SWAP1 SWAP2 DIV PUSH1 0x1F DUP2 ADD DUP9 SWAP1 DIV DUP9 MUL DUP5 ADD DUP9 ADD SWAP1 SWAP7 MSTORE DUP6 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND SWAP6 SWAP1 SWAP5 SWAP2 SWAP3 SWAP2 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xCE4 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xCB9 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xCE4 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xCC7 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP PUSH1 0x3 SWAP1 SWAP4 ADD SLOAD SWAP2 SWAP3 POP POP PUSH1 0xFF AND DUP5 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0xD5C JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xD31 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x0 DUP1 PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xD99 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 SWAP2 POP PUSH1 0x0 SWAP1 POP JUMPDEST PUSH1 0x5 SLOAD DUP2 LT ISZERO PUSH2 0xE20 JUMPI DUP6 DUP1 ISZERO PUSH2 0xDCE JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND ISZERO JUMPDEST DUP1 PUSH2 0xDF2 JUMPI POP DUP5 DUP1 ISZERO PUSH2 0xDF2 JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND JUMPDEST ISZERO PUSH2 0xE18 JUMPI DUP1 DUP4 DUP4 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xE06 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SWAP1 JUMPDEST PUSH1 0x1 ADD PUSH2 0xDA5 JUMP JUMPDEST DUP8 DUP8 SUB PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xE4C JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP DUP8 SWAP1 POP JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0xE95 JUMPI DUP3 DUP2 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xE69 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP5 DUP10 DUP4 SUB DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xE83 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0xE53 JUMP JUMPDEST POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x0 DUP1 PUSH1 0x3 DUP1 SLOAD SWAP1 POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xED5 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 SWAP2 POP PUSH1 0x0 SWAP1 POP JUMPDEST PUSH1 0x3 SLOAD DUP2 LT ISZERO PUSH2 0xFB9 JUMPI PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 DUP1 SLOAD SWAP2 SWAP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0xF0A JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xFB1 JUMPI PUSH1 0x3 DUP1 SLOAD DUP3 SWAP1 DUP2 LT PUSH2 0xF52 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 DUP5 SWAP1 DUP5 SWAP1 DUP2 LT PUSH2 0xF85 JUMPI INVALID JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SWAP1 JUMPDEST PUSH1 0x1 ADD PUSH2 0xEE1 JUMP JUMPDEST DUP2 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xFE3 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP PUSH1 0x0 SWAP1 POP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1045 JUMPI DUP3 DUP2 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1001 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP5 DUP3 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1019 JUMPI INVALID JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 ADD PUSH2 0xFEB JUMP JUMPDEST POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0x105F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3 SLOAD DUP2 PUSH1 0x32 DUP3 GT DUP1 PUSH2 0x1071 JUMPI POP DUP2 DUP2 GT JUMPDEST DUP1 PUSH2 0x107A JUMPI POP DUP1 ISZERO JUMPDEST DUP1 PUSH2 0x1083 JUMPI POP DUP2 ISZERO JUMPDEST ISZERO PUSH2 0x108D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x4 DUP4 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xA3F1EE9126A074D9326C682F561767F710E927FAA811F7A99829D49DC421797A SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x10E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO ISZERO PUSH2 0x111A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD DUP5 SWAP2 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x1145 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 CALLER DUP1 DUP7 MSTORE SWAP3 MSTORE DUP1 DUP5 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SWAP4 OR SWAP1 SWAP3 SSTORE SWAP1 MLOAD DUP8 SWAP3 PUSH32 0x4A504A94899432A9846E1AA406DCEB1BCFD538BB839071D49D1E5E23F5BE30EF SWAP2 LOG3 PUSH2 0x11B9 DUP6 PUSH2 0x13FA JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x11CD DUP5 DUP5 DUP5 PUSH2 0x15C1 JUMP JUMPDEST SWAP1 POP PUSH2 0x11D8 DUP2 PUSH2 0x10CA JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x32 DUP2 JUMP JUMPDEST PUSH1 0x4 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 CALLER ADDRESS EQ PUSH2 0x11F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x122E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x1263 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP3 POP JUMPDEST PUSH1 0x3 SLOAD DUP4 LT ISZERO PUSH2 0x1328 JUMPI DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x3 DUP5 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1298 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x131D JUMPI DUP4 PUSH1 0x3 DUP5 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x12D0 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0x1328 JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 PUSH2 0x1268 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 SWAP1 DUP2 AND SWAP1 SWAP2 SSTORE SWAP4 DUP9 AND DUP3 MSTORE DUP1 DUP3 KECCAK256 DUP1 SLOAD SWAP1 SWAP5 AND PUSH1 0x1 OR SWAP1 SWAP4 SSTORE SWAP2 MLOAD SWAP1 SWAP2 PUSH32 0x8001553A916EF2F495D26A907CC54D96ED840D7BDA71E73194BF5A9DF7A76B90 SWAP2 LOG2 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP1 PUSH32 0xF39E6E1EB0EDCF53C221607B54B00CD28F3196FED0A24994DC308B8F611B682D SWAP1 PUSH1 0x0 SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 ADD SLOAD DUP3 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x141B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1424 DUP4 PUSH2 0xB01 JUMP JUMPDEST ISZERO PUSH2 0x15BC JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x3 DUP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP2 SLOAD DUP2 DUP4 ADD SLOAD SWAP4 MLOAD PUSH1 0x2 DUP1 DUP6 ADD DUP1 SLOAD SWAP6 SWAP9 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND SWAP6 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 DUP4 SWAP3 DUP6 SWAP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP4 AND ISZERO PUSH2 0x100 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 AND DIV DUP1 ISZERO PUSH2 0x151B JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x14F0 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x151B JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x14FE JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP ISZERO PUSH2 0x1566 JUMPI PUSH1 0x40 MLOAD DUP4 SWAP1 PUSH32 0x33E13ECB54C3076D8E8BB8C2881800A4D972B792045FFAE98FDF46DF365FED75 SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH2 0x15BC JUMP JUMPDEST PUSH1 0x40 MLOAD DUP4 SWAP1 PUSH32 0x526441BB6C1ABA3C9A4A6CA1D6545DA9C2333C8C48343EF398EB858D72B79236 SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH1 0x3 DUP3 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO ISZERO PUSH2 0x15E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x80 DUP2 ADD DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD DUP10 DUP2 MSTORE DUP4 DUP6 ADD DUP10 DUP2 MSTORE PUSH1 0x0 PUSH1 0x60 DUP7 ADD DUP2 SWAP1 MSTORE DUP8 DUP2 MSTORE DUP1 DUP5 MSTORE SWAP6 SWAP1 SWAP6 KECCAK256 DUP5 MLOAD DUP2 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP5 AND SWAP4 SWAP1 SWAP4 OR DUP4 SSTORE MLOAD PUSH1 0x1 DUP4 ADD SSTORE SWAP3 MLOAD DUP1 MLOAD SWAP5 SWAP7 POP SWAP2 SWAP4 SWAP1 SWAP3 PUSH2 0x167E SWAP3 PUSH1 0x2 DUP6 ADD SWAP3 SWAP2 ADD SWAP1 PUSH2 0x1718 JUMP JUMPDEST POP PUSH1 0x60 SWAP2 SWAP1 SWAP2 ADD MLOAD PUSH1 0x3 SWAP1 SWAP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x5 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE PUSH1 0x40 MLOAD DUP3 SWAP1 PUSH32 0xC0BA8FE4B176C1714197D43B9CC6BCF797A4A7461C5FE8D0EF6E184AE7601E51 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 SLOAD DUP2 DUP4 SSTORE DUP2 DUP2 GT ISZERO PUSH2 0x15BC JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 PUSH2 0x15BC SWAP2 DUP2 ADD SWAP1 DUP4 ADD PUSH2 0x1796 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0x1759 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x1786 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x1786 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x1786 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x176B JUMP JUMPDEST POP PUSH2 0x1792 SWAP3 SWAP2 POP PUSH2 0x1796 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0xD64 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1792 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x179C JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 RETURNDATASIZE 0xd9 0xc8 PUSH7 0xDD08E918BF5FFE DUP11 LOG4 0xa8 SHR CALLCODE SWAP9 GASPRICE 0x2a RETURNDATACOPY LOG0 0xaf 0xf8 0x4e SLT 0x1f 0xc9 XOR SUB 0x5e SLOAD 0xbe STOP 0x29 ",
+ "sourceMap": "206:11249:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2539:1;2527:9;:13;2523:61;;;2554:30;;;2574:9;2554:30;;;;2562:10;;2554:30;;;;;;;;;;2523:61;206:11249;956:23;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;956:23:0;;;;;;;;;;;;;;;;;;;;;;;;3731:460;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3731:460:0;;;;;;;6294:291;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6294:291:0;;;;;910:40;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;910:40:0;;;;;;;;;;;;;;;;;;;;;;;;;840:64;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;840:64:0;;;;;;;;;9156:319;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9156:319:0;;;;;;;;;;;;;;;;;;;;;;;;;;;3331:277;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3331:277:0;;;;;;;7324:337;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7324:337:0;;;;;8642:252;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8642:252:0;;;;;785:49;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;785:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;785:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9559:115;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9559:115:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;9559:115:0;;;;;;;;;;;;;;;;;10777:676;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10777:676:0;;;;;;;;;;;;;;;9853:575;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9853:575:0;;;;;1011:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1011:28:0;;;;5010:207;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5010:207:0;;;;;5826:344;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5826:344:0;;;;;5476:244;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5476:244:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5476:244:0;;-1:-1:-1;5476:244:0;;-1:-1:-1;;;;;;;5476:244:0;237:41;;8:9:-1;5:2;;;30:1;27;20:12;5:2;237:41:0;;;;985:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;985:20:0;;;;4390:449;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4390:449:0;;;;;;;;;;;;6699:474;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6699:474:0;;;;;956:23;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;956:23:0;:::o;3731:460::-;3879:6;1206:10;1228:4;1206:27;1202:50;;1247:5;;;1202:50;1440:14;;;;;;;:7;:14;;;;;;3821:5;;1440:14;;1439:15;1435:38;;;1468:5;;;1435:38;3842:14;;;3859:5;3842:14;;;:7;:14;;;;;:22;;;;;;3859:5;-1:-1:-1;3874:170:0;3891:6;:13;:17;;3889:19;;3874:170;;;3944:5;3931:18;;:6;3938:1;3931:9;;;;;;;;;;;;;;;;;;;;;;:18;3927:117;;;3981:6;3988:13;;:17;;;;3981:25;;;;;;;;;;;;;;;;3969:6;:9;;3981:25;;;;;3976:1;;3969:9;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;4024:5;;3927:117;3910:3;;;;;3874:170;;;4053:6;:18;;;;;;;;;:::i;:::-;-1:-1:-1;4096:6:0;:13;4085:8;;:24;4081:74;;;4141:6;:13;4123:32;;:17;:32::i;:::-;4165:19;;;;;;;;;;;1262:1;3731:460;;:::o;6294:291::-;6377:10;1440:14;;;;:7;:14;;;;;;;;1439:15;1435:38;;;1468:5;;;1435:38;1714:28;;;;:13;:28;;;;;;;;6422:10;1714:35;;;;;;;;;6407:13;;6422:10;1714:35;;1713:36;1709:59;;;1763:5;;;1709:59;1996:12;:27;;;;;;;;;;:36;;;6454:13;;1996:36;;1992:59;;;2046:5;;;1992:59;6526:5;6483:28;;;:13;:28;;;;;;;;6512:10;6483:40;;;;;;;;:48;;;;;;6541:37;6497:13;;6541:37;;;1778:1;1483;;6294:291;;:::o;910:40::-;;;;;;;;;;;;;;;:::o;840:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9156:319::-;9263:10;;9289:179;9306:16;;9304:1;:18;9289:179;;;9348:7;:36;;;;-1:-1:-1;9360:12:0;:15;;;;;;;;;;:24;;;;;9359:25;9348:36;:92;;;;9404:8;:36;;;;-1:-1:-1;9416:12:0;:15;;;;;;;;;;:24;;;;;9404:36;9341:127;;;9467:1;9458:10;;;;9341:127;9324:3;;9289:179;;;9156:319;;;;;:::o;3331:277::-;1206:10;1228:4;1206:27;1202:50;;1247:5;;;1202:50;1332:14;;;;;;;:7;:14;;;;;;3424:5;;1332:14;;1328:37;;;1360:5;;;1328:37;3447:5;2124:13;;;;2120:36;;;2151:5;;;2120:36;3479:6;:13;;;;3495:1;3479:17;3498:8;;276:2;2256:10;:28;:66;;;;2312:10;2300:9;:22;2256:66;:96;;;-1:-1:-1;2338:14:0;;2256:96;:127;;;-1:-1:-1;2368:15:0;;2256:127;2249:153;;;2397:5;;;2249:153;3522:14;;;;;;;:7;:14;;;;;;:21;;;;3539:4;3522:21;;;;;;3553:6;27:10:-1;;23:18;;;45:23;;3553:18:0;;;;;;;;;;;;3581:20;;;3522:14;3581:20;2166:1;;1375;1262;3331:277;:::o;7324:337::-;7414:4;;;7458:197;7475:6;:13;7473:15;;7458:197;;;7513:28;;;;:13;:28;;;;;7542:6;:9;;7513:28;;;7549:1;;7542:9;;;;;;;;;;;;;;;;;;;;7513:39;;;;;;;;;;;;;;;7509:71;;;7579:1;7570:10;;;;7509:71;7607:8;;7598:5;:17;7594:50;;;7640:4;7633:11;;;;7594:50;7490:3;;7458:197;;;7324:337;;;;;:::o;8642:252::-;8741:10;;8767:120;8784:6;:13;8782:15;;8767:120;;;8820:28;;;;:13;:28;;;;;8849:6;:9;;8820:28;;;8856:1;;8849:9;;;;;;;;;;;;;;;;;;;;8820:39;;;;;;;;;;;;;;;8816:71;;;8886:1;8877:10;;;;8816:71;8799:3;;8767:120;;;8642:252;;;;:::o;785:49::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;785:49:0;;;;;;;-1:-1:-1;;785:49:0;;;:::o;9559:115::-;9629:9;9661:6;9654:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9559:115;;:::o;10777:676::-;10902:22;10940:32;11013:10;11037:6;10986:16;;10975:28;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;10975:28:0;;10940:63;;11026:1;11013:14;;11060:1;11058:3;;11053:250;11065:16;;11063:1;:18;11053:250;;;11107:7;:36;;;;-1:-1:-1;11119:12:0;:15;;;;;;;;;;:24;;;;;11118:25;11107:36;:92;;;;11163:8;:36;;;;-1:-1:-1;11175:12:0;:15;;;;;;;;;;:24;;;;;11163:36;11100:203;;;11259:1;11231:18;11250:5;11231:25;;;;;;;;;;;;;;;;;;:29;11287:1;11278:10;;;;;11100:203;11083:3;;11053:250;;;11346:4;11341:2;:9;11330:21;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;11330:21:0;;11312:39;;11368:4;11366:6;;11361:85;11376:2;11374:1;:4;11361:85;;;11425:18;11444:1;11425:21;;;;;;;;;;;;;;;;;;11397:15;11417:4;11413:1;:8;11397:25;;;;;;;;;;;;;;;;;;:49;11380:3;;11361:85;;;10777:676;;;;;;;;;:::o;9853:575::-;9948:24;9988:34;10063:10;10087:6;10039;:13;;;;10025:28;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;10025:28:0;;9988:65;;10076:1;10063:14;;10110:1;10108:3;;10103:186;10115:6;:13;10113:15;;10103:186;;;10151:28;;;;:13;:28;;;;;10180:6;:9;;10151:28;;;10187:1;;10180:9;;;;;;;;;;;;;;;;;;;;10151:39;;;;;;;;;;;;;;;10147:142;;;10237:6;:9;;10244:1;;10237:9;;;;;;;;;;;;;;;;10210:24;;10237:9;;;;;10210:17;;10228:5;;10210:24;;;;;;:36;;;;:24;;;;;;;;;;:36;10273:1;10264:10;;;;;10147:142;10130:3;;10103:186;;;10329:5;10315:20;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;10315:20:0;;10298:37;;10352:1;10350:3;;10345:76;10357:5;10355:1;:7;10345:76;;;10401:17;10419:1;10401:20;;;;;;;;;;;;;;;;;;10381:14;10396:1;10381:17;;;;;;;;;;:40;;;;:17;;;;;;;;;;:40;10364:3;;10345:76;;;9853:575;;;;;;:::o;1011:28::-;;;;:::o;5010:207::-;1206:10;1228:4;1206:27;1202:50;;1247:5;;;1202:50;5112:6;:13;5127:9;276:2;2256:28;;;:66;;;2312:10;2300:9;:22;2256:66;:96;;;-1:-1:-1;2338:14:0;;2256:96;:127;;;-1:-1:-1;2368:15:0;;2256:127;2249:153;;;2397:5;;;2249:153;5152:8;:20;;;5182:28;;;;;;;;;;;;;;;;;1262:1;;5010:207;:::o;5826:344::-;5909:10;1440:14;;;;:7;:14;;;;;;;;1439:15;1435:38;;;1468:5;;;1435:38;1558:12;:27;;;;;;;;;;:39;5947:13;;1558:39;;:44;1554:67;;;1616:5;;;1554:67;1863:28;;;;:13;:28;;;;;;;;5998:10;1863:35;;;;;;;;;5983:13;;5998:10;1863:35;;1859:58;;;1912:5;;;1859:58;6024:28;;;;6067:4;6024:28;;;;;;;;6053:10;6024:40;;;;;;;;:47;;;;;;;;;;6081:39;;6038:13;;6081:39;;;6130:33;6149:13;6130:18;:33::i;:::-;1631:1;;1483;5826:344;;:::o;5476:244::-;5580:18;5630:40;5645:11;5658:5;5665:4;5630:14;:40::i;:::-;5614:56;;5680:33;5699:13;5680:18;:33::i;:::-;5476:244;;;;;:::o;237:41::-;276:2;237:41;:::o;985:20::-;;;;:::o;4390:449::-;4561:6;1206:10;1228:4;1206:27;1202:50;;1247:5;;;1202:50;1440:14;;;;;;;:7;:14;;;;;;4499:5;;1440:14;;1439:15;1435:38;;;1468:5;;;1435:38;1332:14;;;;;;;:7;:14;;;;;;4532:8;;1332:14;;1328:37;;;1360:5;;;1328:37;4568:1;4561:8;;4556:149;4573:6;:13;4571:15;;4556:149;;;4622:5;4609:18;;:6;4616:1;4609:9;;;;;;;;;;;;;;;;;;;;;;:18;4605:100;;;4659:8;4647:6;4654:1;4647:9;;;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;4685:5;;4605:100;4588:3;;;;;4556:149;;;4714:14;;;;4731:5;4714:14;;;:7;:14;;;;;;:22;;;;;;;;;4746:17;;;;;;;;:24;;;;;4714:22;4746:24;;;;4780:19;;4714:14;;4780:19;;;4809:23;;;;;;;;;;;1483:1;1262;4390:449;;;:::o;6699:474::-;6857:14;1996:27;;;;;;;;;;:36;;;6782:13;;1996:36;;1992:59;;;2046:5;;;1992:59;6815:26;6827:13;6815:11;:26::i;:::-;6811:356;;;6874:12;:27;;;;;;;;;;;;6915:11;;;:18;;;;6929:4;6915:18;;;;;;6951:14;;6977:8;;;;6951:44;;6987:7;;;;6951:44;;6874:27;;-1:-1:-1;6951:14:0;;;;;6977:8;6987:7;;6951:44;;;;6987:7;;6951:44;;;;;6915:18;6951:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6947:210;;;7013:24;;7023:13;;7013:24;;;;;6947:210;;;7074:31;;7091:13;;7074:31;;;;;7123:11;;;:19;;;;;;6947:210;6699:474;;;:::o;7994:451::-;8126:18;8096:11;2124:13;;;;2120:36;;;2151:5;;;2120:36;8176:16;;8232:140;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8232:140:0;;;;;;8202:27;;;;;;;;;;:170;;;;;;;;;;;;;;;-1:-1:-1;8202:170:0;;;;;;;8176:16;;-1:-1:-1;8232:140:0;;8202:27;;:170;;;;;;;;;;:::i;:::-;-1:-1:-1;8202:170:0;;;;;;;;;;;;;;;;;;;;;;;8382:16;:21;;-1:-1:-1;8382:21:0;;;8413:25;;8424:13;;8413:25;;-1:-1:-1;;8413:25:0;7994:451;;;;;;:::o;206:11249::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;206:11249:0;;;-1:-1:-1;206:11249:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;"
}
}
},
"sources": {
- "current/multisig/MultiSigWallet.sol": {
+ "2.0.0/multisig/MultiSigWallet.sol": {
"id": 0
}
},
"sourceCodes": {
- "current/multisig/MultiSigWallet.sol": "pragma solidity ^0.4.10;\n\n/// @title Multisignature wallet - Allows multiple parties to agree on transactions before execution.\n/// @author Stefan George - <stefan.george@consensys.net>\ncontract MultiSigWallet {\n\n uint constant public MAX_OWNER_COUNT = 50;\n\n event Confirmation(address indexed sender, uint indexed transactionId);\n event Revocation(address indexed sender, uint indexed transactionId);\n event Submission(uint indexed transactionId);\n event Execution(uint indexed transactionId);\n event ExecutionFailure(uint indexed transactionId);\n event Deposit(address indexed sender, uint value);\n event OwnerAddition(address indexed owner);\n event OwnerRemoval(address indexed owner);\n event RequirementChange(uint required);\n\n mapping (uint => Transaction) public transactions;\n mapping (uint => mapping (address => bool)) public confirmations;\n mapping (address => bool) public isOwner;\n address[] public owners;\n uint public required;\n uint public transactionCount;\n\n struct Transaction {\n address destination;\n uint value;\n bytes data;\n bool executed;\n }\n\n modifier onlyWallet() {\n if (msg.sender != address(this))\n throw;\n _;\n }\n\n modifier ownerDoesNotExist(address owner) {\n if (isOwner[owner])\n throw;\n _;\n }\n\n modifier ownerExists(address owner) {\n if (!isOwner[owner])\n throw;\n _;\n }\n\n modifier transactionExists(uint transactionId) {\n if (transactions[transactionId].destination == 0)\n throw;\n _;\n }\n\n modifier confirmed(uint transactionId, address owner) {\n if (!confirmations[transactionId][owner])\n throw;\n _;\n }\n\n modifier notConfirmed(uint transactionId, address owner) {\n if (confirmations[transactionId][owner])\n throw;\n _;\n }\n\n modifier notExecuted(uint transactionId) {\n if (transactions[transactionId].executed)\n throw;\n _;\n }\n\n modifier notNull(address _address) {\n if (_address == 0)\n throw;\n _;\n }\n\n modifier validRequirement(uint ownerCount, uint _required) {\n if ( ownerCount > MAX_OWNER_COUNT\n || _required > ownerCount\n || _required == 0\n || ownerCount == 0)\n throw;\n _;\n }\n\n /// @dev Fallback function allows to deposit ether.\n function()\n payable\n {\n if (msg.value > 0)\n Deposit(msg.sender, msg.value);\n }\n\n /*\n * Public functions\n */\n /// @dev Contract constructor sets initial owners and required number of confirmations.\n /// @param _owners List of initial owners.\n /// @param _required Number of required confirmations.\n function MultiSigWallet(address[] _owners, uint _required)\n public\n validRequirement(_owners.length, _required)\n {\n for (uint i=0; i<_owners.length; i++) {\n if (isOwner[_owners[i]] || _owners[i] == 0)\n throw;\n isOwner[_owners[i]] = true;\n }\n owners = _owners;\n required = _required;\n }\n\n /// @dev Allows to add a new owner. Transaction has to be sent by wallet.\n /// @param owner Address of new owner.\n function addOwner(address owner)\n public\n onlyWallet\n ownerDoesNotExist(owner)\n notNull(owner)\n validRequirement(owners.length + 1, required)\n {\n isOwner[owner] = true;\n owners.push(owner);\n OwnerAddition(owner);\n }\n\n /// @dev Allows to remove an owner. Transaction has to be sent by wallet.\n /// @param owner Address of owner.\n function removeOwner(address owner)\n public\n onlyWallet\n ownerExists(owner)\n {\n isOwner[owner] = false;\n for (uint i=0; i<owners.length - 1; i++)\n if (owners[i] == owner) {\n owners[i] = owners[owners.length - 1];\n break;\n }\n owners.length -= 1;\n if (required > owners.length)\n changeRequirement(owners.length);\n OwnerRemoval(owner);\n }\n\n /// @dev Allows to replace an owner with a new owner. Transaction has to be sent by wallet.\n /// @param owner Address of owner to be replaced.\n /// @param owner Address of new owner.\n function replaceOwner(address owner, address newOwner)\n public\n onlyWallet\n ownerExists(owner)\n ownerDoesNotExist(newOwner)\n {\n for (uint i=0; i<owners.length; i++)\n if (owners[i] == owner) {\n owners[i] = newOwner;\n break;\n }\n isOwner[owner] = false;\n isOwner[newOwner] = true;\n OwnerRemoval(owner);\n OwnerAddition(newOwner);\n }\n\n /// @dev Allows to change the number of required confirmations. Transaction has to be sent by wallet.\n /// @param _required Number of required confirmations.\n function changeRequirement(uint _required)\n public\n onlyWallet\n validRequirement(owners.length, _required)\n {\n required = _required;\n RequirementChange(_required);\n }\n\n /// @dev Allows an owner to submit and confirm a transaction.\n /// @param destination Transaction target address.\n /// @param value Transaction ether value.\n /// @param data Transaction data payload.\n /// @return Returns transaction ID.\n function submitTransaction(address destination, uint value, bytes data)\n public\n returns (uint transactionId)\n {\n transactionId = addTransaction(destination, value, data);\n confirmTransaction(transactionId);\n }\n\n /// @dev Allows an owner to confirm a transaction.\n /// @param transactionId Transaction ID.\n function confirmTransaction(uint transactionId)\n public\n ownerExists(msg.sender)\n transactionExists(transactionId)\n notConfirmed(transactionId, msg.sender)\n {\n confirmations[transactionId][msg.sender] = true;\n Confirmation(msg.sender, transactionId);\n executeTransaction(transactionId);\n }\n\n /// @dev Allows an owner to revoke a confirmation for a transaction.\n /// @param transactionId Transaction ID.\n function revokeConfirmation(uint transactionId)\n public\n ownerExists(msg.sender)\n confirmed(transactionId, msg.sender)\n notExecuted(transactionId)\n {\n confirmations[transactionId][msg.sender] = false;\n Revocation(msg.sender, transactionId);\n }\n\n /// @dev Allows anyone to execute a confirmed transaction.\n /// @param transactionId Transaction ID.\n function executeTransaction(uint transactionId)\n public\n notExecuted(transactionId)\n {\n if (isConfirmed(transactionId)) {\n Transaction tx = transactions[transactionId];\n tx.executed = true;\n if (tx.destination.call.value(tx.value)(tx.data))\n Execution(transactionId);\n else {\n ExecutionFailure(transactionId);\n tx.executed = false;\n }\n }\n }\n\n /// @dev Returns the confirmation status of a transaction.\n /// @param transactionId Transaction ID.\n /// @return Confirmation status.\n function isConfirmed(uint transactionId)\n public\n constant\n returns (bool)\n {\n uint count = 0;\n for (uint i=0; i<owners.length; i++) {\n if (confirmations[transactionId][owners[i]])\n count += 1;\n if (count == required)\n return true;\n }\n }\n\n /*\n * Internal functions\n */\n /// @dev Adds a new transaction to the transaction mapping, if transaction does not exist yet.\n /// @param destination Transaction target address.\n /// @param value Transaction ether value.\n /// @param data Transaction data payload.\n /// @return Returns transaction ID.\n function addTransaction(address destination, uint value, bytes data)\n internal\n notNull(destination)\n returns (uint transactionId)\n {\n transactionId = transactionCount;\n transactions[transactionId] = Transaction({\n destination: destination,\n value: value,\n data: data,\n executed: false\n });\n transactionCount += 1;\n Submission(transactionId);\n }\n\n /*\n * Web3 call functions\n */\n /// @dev Returns number of confirmations of a transaction.\n /// @param transactionId Transaction ID.\n /// @return Number of confirmations.\n function getConfirmationCount(uint transactionId)\n public\n constant\n returns (uint count)\n {\n for (uint i=0; i<owners.length; i++)\n if (confirmations[transactionId][owners[i]])\n count += 1;\n }\n\n /// @dev Returns total number of transactions after filers are applied.\n /// @param pending Include pending transactions.\n /// @param executed Include executed transactions.\n /// @return Total number of transactions after filters are applied.\n function getTransactionCount(bool pending, bool executed)\n public\n constant\n returns (uint count)\n {\n for (uint i=0; i<transactionCount; i++)\n if ( pending && !transactions[i].executed\n || executed && transactions[i].executed)\n count += 1;\n }\n\n /// @dev Returns list of owners.\n /// @return List of owner addresses.\n function getOwners()\n public\n constant\n returns (address[])\n {\n return owners;\n }\n\n /// @dev Returns array with owner addresses, which confirmed transaction.\n /// @param transactionId Transaction ID.\n /// @return Returns array of owner addresses.\n function getConfirmations(uint transactionId)\n public\n constant\n returns (address[] _confirmations)\n {\n address[] memory confirmationsTemp = new address[](owners.length);\n uint count = 0;\n uint i;\n for (i=0; i<owners.length; i++)\n if (confirmations[transactionId][owners[i]]) {\n confirmationsTemp[count] = owners[i];\n count += 1;\n }\n _confirmations = new address[](count);\n for (i=0; i<count; i++)\n _confirmations[i] = confirmationsTemp[i];\n }\n\n /// @dev Returns list of transaction IDs in defined range.\n /// @param from Index start position of transaction array.\n /// @param to Index end position of transaction array.\n /// @param pending Include pending transactions.\n /// @param executed Include executed transactions.\n /// @return Returns array of transaction IDs.\n function getTransactionIds(uint from, uint to, bool pending, bool executed)\n public\n constant\n returns (uint[] _transactionIds)\n {\n uint[] memory transactionIdsTemp = new uint[](transactionCount);\n uint count = 0;\n uint i;\n for (i=0; i<transactionCount; i++)\n if ( pending && !transactions[i].executed\n || executed && transactions[i].executed)\n {\n transactionIdsTemp[count] = i;\n count += 1;\n }\n _transactionIds = new uint[](to - from);\n for (i=from; i<to; i++)\n _transactionIds[i - from] = transactionIdsTemp[i];\n }\n}\n"
+ "2.0.0/multisig/MultiSigWallet.sol": "// solhint-disable\npragma solidity ^0.4.10;\n\n\n/// @title Multisignature wallet - Allows multiple parties to agree on transactions before execution.\n/// @author Stefan George - <stefan.george@consensys.net>\ncontract MultiSigWallet {\n\n uint constant public MAX_OWNER_COUNT = 50;\n\n event Confirmation(address indexed sender, uint indexed transactionId);\n event Revocation(address indexed sender, uint indexed transactionId);\n event Submission(uint indexed transactionId);\n event Execution(uint indexed transactionId);\n event ExecutionFailure(uint indexed transactionId);\n event Deposit(address indexed sender, uint value);\n event OwnerAddition(address indexed owner);\n event OwnerRemoval(address indexed owner);\n event RequirementChange(uint required);\n\n mapping (uint => Transaction) public transactions;\n mapping (uint => mapping (address => bool)) public confirmations;\n mapping (address => bool) public isOwner;\n address[] public owners;\n uint public required;\n uint public transactionCount;\n\n struct Transaction {\n address destination;\n uint value;\n bytes data;\n bool executed;\n }\n\n modifier onlyWallet() {\n if (msg.sender != address(this))\n throw;\n _;\n }\n\n modifier ownerDoesNotExist(address owner) {\n if (isOwner[owner])\n throw;\n _;\n }\n\n modifier ownerExists(address owner) {\n if (!isOwner[owner])\n throw;\n _;\n }\n\n modifier transactionExists(uint transactionId) {\n if (transactions[transactionId].destination == 0)\n throw;\n _;\n }\n\n modifier confirmed(uint transactionId, address owner) {\n if (!confirmations[transactionId][owner])\n throw;\n _;\n }\n\n modifier notConfirmed(uint transactionId, address owner) {\n if (confirmations[transactionId][owner])\n throw;\n _;\n }\n\n modifier notExecuted(uint transactionId) {\n if (transactions[transactionId].executed)\n throw;\n _;\n }\n\n modifier notNull(address _address) {\n if (_address == 0)\n throw;\n _;\n }\n\n modifier validRequirement(uint ownerCount, uint _required) {\n if ( ownerCount > MAX_OWNER_COUNT\n || _required > ownerCount\n || _required == 0\n || ownerCount == 0)\n throw;\n _;\n }\n\n /// @dev Fallback function allows to deposit ether.\n function()\n payable\n {\n if (msg.value > 0)\n Deposit(msg.sender, msg.value);\n }\n\n /*\n * Public functions\n */\n /// @dev Contract constructor sets initial owners and required number of confirmations.\n /// @param _owners List of initial owners.\n /// @param _required Number of required confirmations.\n function MultiSigWallet(address[] _owners, uint _required)\n public\n validRequirement(_owners.length, _required)\n {\n for (uint i=0; i<_owners.length; i++) {\n if (isOwner[_owners[i]] || _owners[i] == 0)\n throw;\n isOwner[_owners[i]] = true;\n }\n owners = _owners;\n required = _required;\n }\n\n /// @dev Allows to add a new owner. Transaction has to be sent by wallet.\n /// @param owner Address of new owner.\n function addOwner(address owner)\n public\n onlyWallet\n ownerDoesNotExist(owner)\n notNull(owner)\n validRequirement(owners.length + 1, required)\n {\n isOwner[owner] = true;\n owners.push(owner);\n OwnerAddition(owner);\n }\n\n /// @dev Allows to remove an owner. Transaction has to be sent by wallet.\n /// @param owner Address of owner.\n function removeOwner(address owner)\n public\n onlyWallet\n ownerExists(owner)\n {\n isOwner[owner] = false;\n for (uint i=0; i<owners.length - 1; i++)\n if (owners[i] == owner) {\n owners[i] = owners[owners.length - 1];\n break;\n }\n owners.length -= 1;\n if (required > owners.length)\n changeRequirement(owners.length);\n OwnerRemoval(owner);\n }\n\n /// @dev Allows to replace an owner with a new owner. Transaction has to be sent by wallet.\n /// @param owner Address of owner to be replaced.\n /// @param owner Address of new owner.\n function replaceOwner(address owner, address newOwner)\n public\n onlyWallet\n ownerExists(owner)\n ownerDoesNotExist(newOwner)\n {\n for (uint i=0; i<owners.length; i++)\n if (owners[i] == owner) {\n owners[i] = newOwner;\n break;\n }\n isOwner[owner] = false;\n isOwner[newOwner] = true;\n OwnerRemoval(owner);\n OwnerAddition(newOwner);\n }\n\n /// @dev Allows to change the number of required confirmations. Transaction has to be sent by wallet.\n /// @param _required Number of required confirmations.\n function changeRequirement(uint _required)\n public\n onlyWallet\n validRequirement(owners.length, _required)\n {\n required = _required;\n RequirementChange(_required);\n }\n\n /// @dev Allows an owner to submit and confirm a transaction.\n /// @param destination Transaction target address.\n /// @param value Transaction ether value.\n /// @param data Transaction data payload.\n /// @return Returns transaction ID.\n function submitTransaction(address destination, uint value, bytes data)\n public\n returns (uint transactionId)\n {\n transactionId = addTransaction(destination, value, data);\n confirmTransaction(transactionId);\n }\n\n /// @dev Allows an owner to confirm a transaction.\n /// @param transactionId Transaction ID.\n function confirmTransaction(uint transactionId)\n public\n ownerExists(msg.sender)\n transactionExists(transactionId)\n notConfirmed(transactionId, msg.sender)\n {\n confirmations[transactionId][msg.sender] = true;\n Confirmation(msg.sender, transactionId);\n executeTransaction(transactionId);\n }\n\n /// @dev Allows an owner to revoke a confirmation for a transaction.\n /// @param transactionId Transaction ID.\n function revokeConfirmation(uint transactionId)\n public\n ownerExists(msg.sender)\n confirmed(transactionId, msg.sender)\n notExecuted(transactionId)\n {\n confirmations[transactionId][msg.sender] = false;\n Revocation(msg.sender, transactionId);\n }\n\n /// @dev Allows anyone to execute a confirmed transaction.\n /// @param transactionId Transaction ID.\n function executeTransaction(uint transactionId)\n public\n notExecuted(transactionId)\n {\n if (isConfirmed(transactionId)) {\n Transaction tx = transactions[transactionId];\n tx.executed = true;\n if (tx.destination.call.value(tx.value)(tx.data))\n Execution(transactionId);\n else {\n ExecutionFailure(transactionId);\n tx.executed = false;\n }\n }\n }\n\n /// @dev Returns the confirmation status of a transaction.\n /// @param transactionId Transaction ID.\n /// @return Confirmation status.\n function isConfirmed(uint transactionId)\n public\n constant\n returns (bool)\n {\n uint count = 0;\n for (uint i=0; i<owners.length; i++) {\n if (confirmations[transactionId][owners[i]])\n count += 1;\n if (count == required)\n return true;\n }\n }\n\n /*\n * Internal functions\n */\n /// @dev Adds a new transaction to the transaction mapping, if transaction does not exist yet.\n /// @param destination Transaction target address.\n /// @param value Transaction ether value.\n /// @param data Transaction data payload.\n /// @return Returns transaction ID.\n function addTransaction(address destination, uint value, bytes data)\n internal\n notNull(destination)\n returns (uint transactionId)\n {\n transactionId = transactionCount;\n transactions[transactionId] = Transaction({\n destination: destination,\n value: value,\n data: data,\n executed: false\n });\n transactionCount += 1;\n Submission(transactionId);\n }\n\n /*\n * Web3 call functions\n */\n /// @dev Returns number of confirmations of a transaction.\n /// @param transactionId Transaction ID.\n /// @return Number of confirmations.\n function getConfirmationCount(uint transactionId)\n public\n constant\n returns (uint count)\n {\n for (uint i=0; i<owners.length; i++)\n if (confirmations[transactionId][owners[i]])\n count += 1;\n }\n\n /// @dev Returns total number of transactions after filers are applied.\n /// @param pending Include pending transactions.\n /// @param executed Include executed transactions.\n /// @return Total number of transactions after filters are applied.\n function getTransactionCount(bool pending, bool executed)\n public\n constant\n returns (uint count)\n {\n for (uint i=0; i<transactionCount; i++)\n if ( pending && !transactions[i].executed\n || executed && transactions[i].executed)\n count += 1;\n }\n\n /// @dev Returns list of owners.\n /// @return List of owner addresses.\n function getOwners()\n public\n constant\n returns (address[])\n {\n return owners;\n }\n\n /// @dev Returns array with owner addresses, which confirmed transaction.\n /// @param transactionId Transaction ID.\n /// @return Returns array of owner addresses.\n function getConfirmations(uint transactionId)\n public\n constant\n returns (address[] _confirmations)\n {\n address[] memory confirmationsTemp = new address[](owners.length);\n uint count = 0;\n uint i;\n for (i=0; i<owners.length; i++)\n if (confirmations[transactionId][owners[i]]) {\n confirmationsTemp[count] = owners[i];\n count += 1;\n }\n _confirmations = new address[](count);\n for (i=0; i<count; i++)\n _confirmations[i] = confirmationsTemp[i];\n }\n\n /// @dev Returns list of transaction IDs in defined range.\n /// @param from Index start position of transaction array.\n /// @param to Index end position of transaction array.\n /// @param pending Include pending transactions.\n /// @param executed Include executed transactions.\n /// @return Returns array of transaction IDs.\n function getTransactionIds(uint from, uint to, bool pending, bool executed)\n public\n constant\n returns (uint[] _transactionIds)\n {\n uint[] memory transactionIdsTemp = new uint[](transactionCount);\n uint count = 0;\n uint i;\n for (i=0; i<transactionCount; i++)\n if ( pending && !transactions[i].executed\n || executed && transactions[i].executed)\n {\n transactionIdsTemp[count] = i;\n count += 1;\n }\n _transactionIds = new uint[](to - from);\n for (i=from; i<to; i++)\n _transactionIds[i - from] = transactionIdsTemp[i];\n }\n}\n"
},
- "sourceTreeHashHex": "0xe4dcaad5ebc708ef4258ff1a4152c7b94956a61f99db39fb7ae3003cc7087234",
+ "sourceTreeHashHex": "0x5ad0f32801e51d60f02235477477b56ff9ccd727d6d2646d7efb84d1ffbd7bff",
"compiler": {
"name": "solc",
"version": "soljson-v0.4.24+commit.e67f0147.js",
diff --git a/packages/migrations/artifacts/2.0.0/MultiSigWalletWithTimeLock.json b/packages/migrations/artifacts/2.0.0/MultiSigWalletWithTimeLock.json
index 876a957ad..86a4b44b0 100644
--- a/packages/migrations/artifacts/2.0.0/MultiSigWalletWithTimeLock.json
+++ b/packages/migrations/artifacts/2.0.0/MultiSigWalletWithTimeLock.json
@@ -618,31 +618,31 @@
"evm": {
"bytecode": {
"linkReferences": {},
- "object": "0x60806040523480156200001157600080fd5b5060405162001b6938038062001b69833981016040908152815160208301519183015192018051909290839083906000908260328211806200005257508181115b806200005c575080155b8062000066575081155b156200007157600080fd5b600092505b845183101562000145576002600086858151811015156200009357fe5b6020908102909101810151600160a060020a031682528101919091526040016000205460ff1680620000e657508483815181101515620000cf57fe5b90602001906020020151600160a060020a03166000145b15620000f157600080fd5b60016002600087868151811015156200010657fe5b602090810291909101810151600160a060020a03168252810191909152604001600020805460ff19169115159190911790556001929092019162000076565b84516200015a90600390602088019062000171565b505050600491909155505060065550620002059050565b828054828255906000526020600020908101928215620001c9579160200282015b82811115620001c95782518254600160a060020a031916600160a060020a0390911617825560209092019160019091019062000192565b50620001d7929150620001db565b5090565b6200020291905b80821115620001d7578054600160a060020a0319168155600101620001e2565b90565b61195480620002156000396000f30060806040526004361061013d5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663025e7c27811461017f578063173825d9146101c057806320ea8d86146101ee5780632f54bf6e146102065780633411c81c1461024857806337bd78a01461027957806354741525146102a05780637065cb48146102bf578063784547a7146102ed5780637ad28c51146103055780638b51d13f1461031d5780639ace38c214610335578063a0e67e2b1461040a578063a8abe69a1461046f578063b5dc40c314610494578063b77bf600146104ac578063ba51a6df146104c1578063c01a8c84146104d9578063c6427474146104f1578063d38f2d8214610567578063d74f8edd1461057f578063dc8452cd14610594578063e20056e6146105a9578063ee22610b146105dd575b600034111561017d5760408051348152905133917fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c919081900360200190a25b005b34801561018b57600080fd5b506101976004356105f5565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156101cc57600080fd5b5061017d73ffffffffffffffffffffffffffffffffffffffff6004351661062a565b3480156101fa57600080fd5b5061017d600435610881565b34801561021257600080fd5b5061023473ffffffffffffffffffffffffffffffffffffffff6004351661096e565b604080519115158252519081900360200190f35b34801561025457600080fd5b5061023460043573ffffffffffffffffffffffffffffffffffffffff60243516610983565b34801561028557600080fd5b5061028e6109a3565b60408051918252519081900360200190f35b3480156102ac57600080fd5b5061028e600435151560243515156109a9565b3480156102cb57600080fd5b5061017d73ffffffffffffffffffffffffffffffffffffffff60043516610a15565b3480156102f957600080fd5b50610234600435610b82565b34801561031157600080fd5b5061017d600435610c13565b34801561032957600080fd5b5061028e600435610c5a565b34801561034157600080fd5b5061034d600435610cd6565b604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018060200183151515158152602001828103825284818151815260200191508051906020019080838360005b838110156103cc5781810151838201526020016103b4565b50505050905090810190601f1680156103f95780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b34801561041657600080fd5b5061041f610dbf565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561045b578181015183820152602001610443565b505050509050019250505060405180910390f35b34801561047b57600080fd5b5061041f60043560243560443515156064351515610e2f565b3480156104a057600080fd5b5061041f600435610f68565b3480156104b857600080fd5b5061028e611115565b3480156104cd57600080fd5b5061017d60043561111b565b3480156104e557600080fd5b5061017d600435611192565b3480156104fd57600080fd5b50604080516020600460443581810135601f810184900484028501840190955284845261028e94823573ffffffffffffffffffffffffffffffffffffffff169460248035953695946064949201919081908401838280828437509497506112ac9650505050505050565b34801561057357600080fd5b5061028e6004356112cb565b34801561058b57600080fd5b5061028e6112dd565b3480156105a057600080fd5b5061028e6112e2565b3480156105b557600080fd5b5061017d73ffffffffffffffffffffffffffffffffffffffff600435811690602435166112e8565b3480156105e957600080fd5b5061017d6004356114f8565b600380548290811061060357fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b600033301461063857600080fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020526040902054829060ff16151561066e57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260026020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905591505b6003547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018210156107f1578273ffffffffffffffffffffffffffffffffffffffff1660038381548110151561070e57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614156107e657600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061076657fe5b6000918252602090912001546003805473ffffffffffffffffffffffffffffffffffffffff909216918490811061079957fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506107f1565b6001909101906106bc565b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01906108229082611867565b50600354600454111561083b5760035461083b9061111b565b60405173ffffffffffffffffffffffffffffffffffffffff8416907f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9090600090a2505050565b3360008181526002602052604090205460ff16151561089f57600080fd5b60008281526001602090815260408083203380855292529091205483919060ff1615156108cb57600080fd5b600084815260208190526040902060030154849060ff16156108ec57600080fd5b846108f681610b82565b1561090057600080fd5b600086815260016020908152604080832033808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555188927ff6a317157440607f36269043eb55f1287a5a19ba2216afeab88cd46cbcfb88e991a3505050505050565b60026020526000908152604090205460ff1681565b600160209081526000928352604080842090915290825290205460ff1681565b60065481565b6000805b600554811015610a0e578380156109d6575060008181526020819052604090206003015460ff16155b806109fa57508280156109fa575060008181526020819052604090206003015460ff165b15610a06576001820191505b6001016109ad565b5092915050565b333014610a2157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116600090815260026020526040902054819060ff1615610a5657600080fd5b8173ffffffffffffffffffffffffffffffffffffffff81161515610a7957600080fd5b6003805490506001016004546032821180610a9357508181115b80610a9c575080155b80610aa5575081155b15610aaf57600080fd5b73ffffffffffffffffffffffffffffffffffffffff851660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915560038054918201815583527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055517ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d9190a25050505050565b600080805b600354811015610c0c5760008481526001602052604081206003805491929184908110610bb057fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400190205460ff1615610bf1576001820191505b600454821415610c045760019250610c0c565b600101610b87565b5050919050565b333014610c1f57600080fd5b60068190556040805182815290517fd1c9101a34feff75cccef14a28785a0279cb0b49c1f321f21f5f422e746b43779181900360200190a150565b6000805b600354811015610cd05760008381526001602052604081206003805491929184908110610c8757fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400190205460ff1615610cc8576001820191505b600101610c5e565b50919050565b60006020818152918152604090819020805460018083015460028085018054875161010095821615959095027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691909104601f810188900488028401880190965285835273ffffffffffffffffffffffffffffffffffffffff90931695909491929190830182828015610dac5780601f10610d8157610100808354040283529160200191610dac565b820191906000526020600020905b815481529060010190602001808311610d8f57829003601f168201915b5050506003909301549192505060ff1684565b60606003805480602002602001604051908101604052809291908181526020018280548015610e2457602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610df9575b505050505090505b90565b606080600080600554604051908082528060200260200182016040528015610e61578160200160208202803883390190505b50925060009150600090505b600554811015610ee857858015610e96575060008181526020819052604090206003015460ff16155b80610eba5750848015610eba575060008181526020819052604090206003015460ff165b15610ee057808383815181101515610ece57fe5b60209081029091010152600191909101905b600101610e6d565b878703604051908082528060200260200182016040528015610f14578160200160208202803883390190505b5093508790505b86811015610f5d578281815181101515610f3157fe5b9060200190602002015184898303815181101515610f4b57fe5b60209081029091010152600101610f1b565b505050949350505050565b606080600080600380549050604051908082528060200260200182016040528015610f9d578160200160208202803883390190505b50925060009150600090505b6003548110156110815760008581526001602052604081206003805491929184908110610fd257fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400190205460ff161561107957600380548290811061101a57fe5b600091825260209091200154835173ffffffffffffffffffffffffffffffffffffffff9091169084908490811061104d57fe5b73ffffffffffffffffffffffffffffffffffffffff909216602092830290910190910152600191909101905b600101610fa9565b816040519080825280602002602001820160405280156110ab578160200160208202803883390190505b509350600090505b8181101561110d5782818151811015156110c957fe5b9060200190602002015184828151811015156110e157fe5b73ffffffffffffffffffffffffffffffffffffffff9092166020928302909101909101526001016110b3565b505050919050565b60055481565b33301461112757600080fd5b60035481603282118061113957508181115b80611142575080155b8061114b575081155b1561115557600080fd5b60048390556040805184815290517fa3f1ee9126a074d9326c682f561767f710e927faa811f7a99829d49dc421797a9181900360200190a1505050565b3360008181526002602052604090205460ff1615156111b057600080fd5b600082815260208190526040902054829073ffffffffffffffffffffffffffffffffffffffff1615156111e257600080fd5b60008381526001602090815260408083203380855292529091205484919060ff161561120d57600080fd5b8461121781610b82565b1561122157600080fd5b600086815260016020818152604080842033808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909317909255905188927f4a504a94899432a9846e1aa406dceb1bcfd538bb839071d49d1e5e23f5be30ef91a361129586610b82565b156112a4576112a486426116e9565b505050505050565b60006112b9848484611734565b90506112c481611192565b9392505050565b60076020526000908152604090205481565b603281565b60045481565b60003330146112f657600080fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260026020526040902054839060ff16151561132c57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260026020526040902054839060ff161561136157600080fd5b600092505b600354831015611426578473ffffffffffffffffffffffffffffffffffffffff1660038481548110151561139657fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561141b57836003848154811015156113ce57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611426565b600190920191611366565b73ffffffffffffffffffffffffffffffffffffffff80861660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090811690915593881682528082208054909416600117909355915190917f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9091a260405173ffffffffffffffffffffffffffffffffffffffff8516907ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d90600090a25050505050565b600081815260208190526040812060030154829060ff161561151957600080fd5b8261152381610b82565b151561152e57600080fd5b60065460008581526007602052604090205485910142101561154f57600080fd5b600085815260208190526040908190206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117909155815481830154935160028085018054959a5073ffffffffffffffffffffffffffffffffffffffff909316959492939192839285927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9183161561010002919091019091160480156116415780601f1061161657610100808354040283529160200191611641565b820191906000526020600020905b81548152906001019060200180831161162457829003601f168201915b505091505060006040518083038185875af1925050501561168c5760405185907f33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed7590600090a26116e2565b60405185907f526441bb6c1aba3c9a4a6ca1d6545da9c2333c8c48343ef398eb858d72b7923690600090a26003840180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b5050505050565b6000828152600760209081526040918290208390558151838152915184927f0b237afe65f1514fd7ea3f923ea4fe792bdd07000a912b6cd1602a8e7f573c8d92908290030190a25050565b60008373ffffffffffffffffffffffffffffffffffffffff8116151561175957600080fd5b6005546040805160808101825273ffffffffffffffffffffffffffffffffffffffff8881168252602080830189815283850189815260006060860181905287815280845295909520845181547fffffffffffffffffffffffff000000000000000000000000000000000000000016941693909317835551600183015592518051949650919390926117f1926002850192910190611890565b5060609190910151600390910180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905560058054600101905560405182907fc0ba8fe4b176c1714197d43b9cc6bcf797a4a7461c5fe8d0ef6e184ae7601e5190600090a2509392505050565b81548183558181111561188b5760008381526020902061188b91810190830161190e565b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106118d157805160ff19168380011785556118fe565b828001600101855582156118fe579182015b828111156118fe5782518255916020019190600101906118e3565b5061190a92915061190e565b5090565b610e2c91905b8082111561190a57600081556001016119145600a165627a7a7230582032663da11665281958bf4f86df7e5a131dea532ff7f9e56c9d822e0c0d68c98a0029",
- "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x1B69 CODESIZE SUB DUP1 PUSH3 0x1B69 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 SWAP1 DUP2 MSTORE DUP2 MLOAD PUSH1 0x20 DUP4 ADD MLOAD SWAP2 DUP4 ADD MLOAD SWAP3 ADD DUP1 MLOAD SWAP1 SWAP3 SWAP1 DUP4 SWAP1 DUP4 SWAP1 PUSH1 0x0 SWAP1 DUP3 PUSH1 0x32 DUP3 GT DUP1 PUSH3 0x52 JUMPI POP DUP2 DUP2 GT JUMPDEST DUP1 PUSH3 0x5C JUMPI POP DUP1 ISZERO JUMPDEST DUP1 PUSH3 0x66 JUMPI POP DUP2 ISZERO JUMPDEST ISZERO PUSH3 0x71 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP3 POP JUMPDEST DUP5 MLOAD DUP4 LT ISZERO PUSH3 0x145 JUMPI PUSH1 0x2 PUSH1 0x0 DUP7 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH3 0x93 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND DUP3 MSTORE DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0xFF AND DUP1 PUSH3 0xE6 JUMPI POP DUP5 DUP4 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH3 0xCF JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x0 EQ JUMPDEST ISZERO PUSH3 0xF1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x2 PUSH1 0x0 DUP8 DUP7 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH3 0x106 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND DUP3 MSTORE DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x1 SWAP3 SWAP1 SWAP3 ADD SWAP2 PUSH3 0x76 JUMP JUMPDEST DUP5 MLOAD PUSH3 0x15A SWAP1 PUSH1 0x3 SWAP1 PUSH1 0x20 DUP9 ADD SWAP1 PUSH3 0x171 JUMP JUMPDEST POP POP POP PUSH1 0x4 SWAP2 SWAP1 SWAP2 SSTORE POP POP PUSH1 0x6 SSTORE POP PUSH3 0x205 SWAP1 POP JUMP JUMPDEST DUP3 DUP1 SLOAD DUP3 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP3 DUP3 ISZERO PUSH3 0x1C9 JUMPI SWAP2 PUSH1 0x20 MUL DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x1C9 JUMPI DUP3 MLOAD DUP3 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB NOT AND PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP1 SWAP2 AND OR DUP3 SSTORE PUSH1 0x20 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH3 0x192 JUMP JUMPDEST POP PUSH3 0x1D7 SWAP3 SWAP2 POP PUSH3 0x1DB JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH3 0x202 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x1D7 JUMPI DUP1 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB NOT AND DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x1E2 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0x1954 DUP1 PUSH3 0x215 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x13D JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x25E7C27 DUP2 EQ PUSH2 0x17F JUMPI DUP1 PUSH4 0x173825D9 EQ PUSH2 0x1C0 JUMPI DUP1 PUSH4 0x20EA8D86 EQ PUSH2 0x1EE JUMPI DUP1 PUSH4 0x2F54BF6E EQ PUSH2 0x206 JUMPI DUP1 PUSH4 0x3411C81C EQ PUSH2 0x248 JUMPI DUP1 PUSH4 0x37BD78A0 EQ PUSH2 0x279 JUMPI DUP1 PUSH4 0x54741525 EQ PUSH2 0x2A0 JUMPI DUP1 PUSH4 0x7065CB48 EQ PUSH2 0x2BF JUMPI DUP1 PUSH4 0x784547A7 EQ PUSH2 0x2ED JUMPI DUP1 PUSH4 0x7AD28C51 EQ PUSH2 0x305 JUMPI DUP1 PUSH4 0x8B51D13F EQ PUSH2 0x31D JUMPI DUP1 PUSH4 0x9ACE38C2 EQ PUSH2 0x335 JUMPI DUP1 PUSH4 0xA0E67E2B EQ PUSH2 0x40A JUMPI DUP1 PUSH4 0xA8ABE69A EQ PUSH2 0x46F JUMPI DUP1 PUSH4 0xB5DC40C3 EQ PUSH2 0x494 JUMPI DUP1 PUSH4 0xB77BF600 EQ PUSH2 0x4AC JUMPI DUP1 PUSH4 0xBA51A6DF EQ PUSH2 0x4C1 JUMPI DUP1 PUSH4 0xC01A8C84 EQ PUSH2 0x4D9 JUMPI DUP1 PUSH4 0xC6427474 EQ PUSH2 0x4F1 JUMPI DUP1 PUSH4 0xD38F2D82 EQ PUSH2 0x567 JUMPI DUP1 PUSH4 0xD74F8EDD EQ PUSH2 0x57F JUMPI DUP1 PUSH4 0xDC8452CD EQ PUSH2 0x594 JUMPI DUP1 PUSH4 0xE20056E6 EQ PUSH2 0x5A9 JUMPI DUP1 PUSH4 0xEE22610B EQ PUSH2 0x5DD JUMPI JUMPDEST PUSH1 0x0 CALLVALUE GT ISZERO PUSH2 0x17D JUMPI PUSH1 0x40 DUP1 MLOAD CALLVALUE DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0xE1FFFCC4923D04B559F4D29A8BFC6CDA04EB5B0D3C460751C2402C5C5CC9109C SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x18B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x197 PUSH1 0x4 CALLDATALOAD PUSH2 0x5F5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17D PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x62A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17D PUSH1 0x4 CALLDATALOAD PUSH2 0x881 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x212 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x234 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x96E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x254 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x234 PUSH1 0x4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD AND PUSH2 0x983 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x285 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28E PUSH2 0x9A3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28E PUSH1 0x4 CALLDATALOAD ISZERO ISZERO PUSH1 0x24 CALLDATALOAD ISZERO ISZERO PUSH2 0x9A9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17D PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0xA15 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x234 PUSH1 0x4 CALLDATALOAD PUSH2 0xB82 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x311 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17D PUSH1 0x4 CALLDATALOAD PUSH2 0xC13 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x329 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28E PUSH1 0x4 CALLDATALOAD PUSH2 0xC5A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x341 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x34D PUSH1 0x4 CALLDATALOAD PUSH2 0xCD6 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 ISZERO ISZERO ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3CC JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3B4 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x3F9 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 SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x416 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x41F PUSH2 0xDBF 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 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x45B JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x443 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x47B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x41F PUSH1 0x4 CALLDATALOAD PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD ISZERO ISZERO PUSH1 0x64 CALLDATALOAD ISZERO ISZERO PUSH2 0xE2F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x41F PUSH1 0x4 CALLDATALOAD PUSH2 0xF68 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28E PUSH2 0x1115 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17D PUSH1 0x4 CALLDATALOAD PUSH2 0x111B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17D PUSH1 0x4 CALLDATALOAD PUSH2 0x1192 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 PUSH1 0x44 CALLDATALOAD DUP2 DUP2 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x28E SWAP5 DUP3 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP5 PUSH1 0x24 DUP1 CALLDATALOAD SWAP6 CALLDATASIZE SWAP6 SWAP5 PUSH1 0x64 SWAP5 SWAP3 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x12AC SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x573 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28E PUSH1 0x4 CALLDATALOAD PUSH2 0x12CB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x58B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28E PUSH2 0x12DD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28E PUSH2 0x12E2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17D PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH2 0x12E8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17D PUSH1 0x4 CALLDATALOAD PUSH2 0x14F8 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD DUP3 SWAP1 DUP2 LT PUSH2 0x603 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x0 CALLER ADDRESS EQ PUSH2 0x638 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x66E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE SWAP2 POP JUMPDEST PUSH1 0x3 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP3 LT ISZERO PUSH2 0x7F1 JUMPI DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x3 DUP4 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x70E JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x7E6 JUMPI PUSH1 0x3 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0x766 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x3 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x799 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0x7F1 JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x6BC JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 PUSH2 0x822 SWAP1 DUP3 PUSH2 0x1867 JUMP JUMPDEST POP PUSH1 0x3 SLOAD PUSH1 0x4 SLOAD GT ISZERO PUSH2 0x83B JUMPI PUSH1 0x3 SLOAD PUSH2 0x83B SWAP1 PUSH2 0x111B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH32 0x8001553A916EF2F495D26A907CC54D96ED840D7BDA71E73194BF5A9DF7A76B90 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x89F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD DUP4 SWAP2 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x8CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD DUP5 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x8EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 PUSH2 0x8F6 DUP2 PUSH2 0xB82 JUMP JUMPDEST ISZERO PUSH2 0x900 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE MLOAD DUP9 SWAP3 PUSH32 0xF6A317157440607F36269043EB55F1287A5A19BA2216AFEAB88CD46CBCFB88E9 SWAP2 LOG3 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x6 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST PUSH1 0x5 SLOAD DUP2 LT ISZERO PUSH2 0xA0E JUMPI DUP4 DUP1 ISZERO PUSH2 0x9D6 JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND ISZERO JUMPDEST DUP1 PUSH2 0x9FA JUMPI POP DUP3 DUP1 ISZERO PUSH2 0x9FA JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND JUMPDEST ISZERO PUSH2 0xA06 JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x1 ADD PUSH2 0x9AD JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0xA21 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0xA56 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO ISZERO PUSH2 0xA79 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3 DUP1 SLOAD SWAP1 POP PUSH1 0x1 ADD PUSH1 0x4 SLOAD PUSH1 0x32 DUP3 GT DUP1 PUSH2 0xA93 JUMPI POP DUP2 DUP2 GT JUMPDEST DUP1 PUSH2 0xA9C JUMPI POP DUP1 ISZERO JUMPDEST DUP1 PUSH2 0xAA5 JUMPI POP DUP2 ISZERO JUMPDEST ISZERO PUSH2 0xAAF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x3 DUP1 SLOAD SWAP2 DUP3 ADD DUP2 SSTORE DUP4 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND DUP5 OR SWAP1 SSTORE MLOAD PUSH32 0xF39E6E1EB0EDCF53C221607B54B00CD28F3196FED0A24994DC308B8F611B682D SWAP2 SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 JUMPDEST PUSH1 0x3 SLOAD DUP2 LT ISZERO PUSH2 0xC0C JUMPI PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 DUP1 SLOAD SWAP2 SWAP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0xBB0 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xBF1 JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x4 SLOAD DUP3 EQ ISZERO PUSH2 0xC04 JUMPI PUSH1 0x1 SWAP3 POP PUSH2 0xC0C JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0xB87 JUMP JUMPDEST POP POP SWAP2 SWAP1 POP JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0xC1F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x6 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xD1C9101A34FEFF75CCCEF14A28785A0279CB0B49C1F321F21F5F422E746B4377 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST PUSH1 0x3 SLOAD DUP2 LT ISZERO PUSH2 0xCD0 JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 DUP1 SLOAD SWAP2 SWAP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0xC87 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xCC8 JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x1 ADD PUSH2 0xC5E JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP2 DUP2 MSTORE SWAP2 DUP2 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP1 DUP4 ADD SLOAD PUSH1 0x2 DUP1 DUP6 ADD DUP1 SLOAD DUP8 MLOAD PUSH2 0x100 SWAP6 DUP3 AND ISZERO SWAP6 SWAP1 SWAP6 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD AND SWAP2 SWAP1 SWAP2 DIV PUSH1 0x1F DUP2 ADD DUP9 SWAP1 DIV DUP9 MUL DUP5 ADD DUP9 ADD SWAP1 SWAP7 MSTORE DUP6 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND SWAP6 SWAP1 SWAP5 SWAP2 SWAP3 SWAP2 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xDAC JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xD81 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xDAC JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xD8F JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP PUSH1 0x3 SWAP1 SWAP4 ADD SLOAD SWAP2 SWAP3 POP POP PUSH1 0xFF AND DUP5 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0xE24 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xDF9 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x0 DUP1 PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xE61 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 SWAP2 POP PUSH1 0x0 SWAP1 POP JUMPDEST PUSH1 0x5 SLOAD DUP2 LT ISZERO PUSH2 0xEE8 JUMPI DUP6 DUP1 ISZERO PUSH2 0xE96 JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND ISZERO JUMPDEST DUP1 PUSH2 0xEBA JUMPI POP DUP5 DUP1 ISZERO PUSH2 0xEBA JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND JUMPDEST ISZERO PUSH2 0xEE0 JUMPI DUP1 DUP4 DUP4 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xECE JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SWAP1 JUMPDEST PUSH1 0x1 ADD PUSH2 0xE6D JUMP JUMPDEST DUP8 DUP8 SUB PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xF14 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP DUP8 SWAP1 POP JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0xF5D JUMPI DUP3 DUP2 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xF31 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP5 DUP10 DUP4 SUB DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xF4B JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0xF1B JUMP JUMPDEST POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x0 DUP1 PUSH1 0x3 DUP1 SLOAD SWAP1 POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xF9D JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 SWAP2 POP PUSH1 0x0 SWAP1 POP JUMPDEST PUSH1 0x3 SLOAD DUP2 LT ISZERO PUSH2 0x1081 JUMPI PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 DUP1 SLOAD SWAP2 SWAP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0xFD2 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1079 JUMPI PUSH1 0x3 DUP1 SLOAD DUP3 SWAP1 DUP2 LT PUSH2 0x101A JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 DUP5 SWAP1 DUP5 SWAP1 DUP2 LT PUSH2 0x104D JUMPI INVALID JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SWAP1 JUMPDEST PUSH1 0x1 ADD PUSH2 0xFA9 JUMP JUMPDEST DUP2 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x10AB JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP PUSH1 0x0 SWAP1 POP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x110D JUMPI DUP3 DUP2 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x10C9 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP5 DUP3 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x10E1 JUMPI INVALID JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 ADD PUSH2 0x10B3 JUMP JUMPDEST POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0x1127 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3 SLOAD DUP2 PUSH1 0x32 DUP3 GT DUP1 PUSH2 0x1139 JUMPI POP DUP2 DUP2 GT JUMPDEST DUP1 PUSH2 0x1142 JUMPI POP DUP1 ISZERO JUMPDEST DUP1 PUSH2 0x114B JUMPI POP DUP2 ISZERO JUMPDEST ISZERO PUSH2 0x1155 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x4 DUP4 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xA3F1EE9126A074D9326C682F561767F710E927FAA811F7A99829D49DC421797A SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x11B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO ISZERO PUSH2 0x11E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD DUP5 SWAP2 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x120D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 PUSH2 0x1217 DUP2 PUSH2 0xB82 JUMP JUMPDEST ISZERO PUSH2 0x1221 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 CALLER DUP1 DUP7 MSTORE SWAP3 MSTORE DUP1 DUP5 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SWAP4 OR SWAP1 SWAP3 SSTORE SWAP1 MLOAD DUP9 SWAP3 PUSH32 0x4A504A94899432A9846E1AA406DCEB1BCFD538BB839071D49D1E5E23F5BE30EF SWAP2 LOG3 PUSH2 0x1295 DUP7 PUSH2 0xB82 JUMP JUMPDEST ISZERO PUSH2 0x12A4 JUMPI PUSH2 0x12A4 DUP7 TIMESTAMP PUSH2 0x16E9 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x12B9 DUP5 DUP5 DUP5 PUSH2 0x1734 JUMP JUMPDEST SWAP1 POP PUSH2 0x12C4 DUP2 PUSH2 0x1192 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x32 DUP2 JUMP JUMPDEST PUSH1 0x4 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 CALLER ADDRESS EQ PUSH2 0x12F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x132C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x1361 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP3 POP JUMPDEST PUSH1 0x3 SLOAD DUP4 LT ISZERO PUSH2 0x1426 JUMPI DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x3 DUP5 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1396 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x141B JUMPI DUP4 PUSH1 0x3 DUP5 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x13CE JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0x1426 JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 PUSH2 0x1366 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 SWAP1 DUP2 AND SWAP1 SWAP2 SSTORE SWAP4 DUP9 AND DUP3 MSTORE DUP1 DUP3 KECCAK256 DUP1 SLOAD SWAP1 SWAP5 AND PUSH1 0x1 OR SWAP1 SWAP4 SSTORE SWAP2 MLOAD SWAP1 SWAP2 PUSH32 0x8001553A916EF2F495D26A907CC54D96ED840D7BDA71E73194BF5A9DF7A76B90 SWAP2 LOG2 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP1 PUSH32 0xF39E6E1EB0EDCF53C221607B54B00CD28F3196FED0A24994DC308B8F611B682D SWAP1 PUSH1 0x0 SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 ADD SLOAD DUP3 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x1519 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH2 0x1523 DUP2 PUSH2 0xB82 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x152E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP6 SWAP2 ADD TIMESTAMP LT ISZERO PUSH2 0x154F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x3 DUP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP2 SLOAD DUP2 DUP4 ADD SLOAD SWAP4 MLOAD PUSH1 0x2 DUP1 DUP6 ADD DUP1 SLOAD SWAP6 SWAP11 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND SWAP6 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 DUP4 SWAP3 DUP6 SWAP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP4 AND ISZERO PUSH2 0x100 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 AND DIV DUP1 ISZERO PUSH2 0x1641 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1616 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1641 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1624 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP ISZERO PUSH2 0x168C JUMPI PUSH1 0x40 MLOAD DUP6 SWAP1 PUSH32 0x33E13ECB54C3076D8E8BB8C2881800A4D972B792045FFAE98FDF46DF365FED75 SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH2 0x16E2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP6 SWAP1 PUSH32 0x526441BB6C1ABA3C9A4A6CA1D6545DA9C2333C8C48343EF398EB858D72B79236 SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH1 0x3 DUP5 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 SWAP1 SSTORE DUP2 MLOAD DUP4 DUP2 MSTORE SWAP2 MLOAD DUP5 SWAP3 PUSH32 0xB237AFE65F1514FD7EA3F923EA4FE792BDD07000A912B6CD1602A8E7F573C8D SWAP3 SWAP1 DUP3 SWAP1 SUB ADD SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO ISZERO PUSH2 0x1759 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x80 DUP2 ADD DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD DUP10 DUP2 MSTORE DUP4 DUP6 ADD DUP10 DUP2 MSTORE PUSH1 0x0 PUSH1 0x60 DUP7 ADD DUP2 SWAP1 MSTORE DUP8 DUP2 MSTORE DUP1 DUP5 MSTORE SWAP6 SWAP1 SWAP6 KECCAK256 DUP5 MLOAD DUP2 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP5 AND SWAP4 SWAP1 SWAP4 OR DUP4 SSTORE MLOAD PUSH1 0x1 DUP4 ADD SSTORE SWAP3 MLOAD DUP1 MLOAD SWAP5 SWAP7 POP SWAP2 SWAP4 SWAP1 SWAP3 PUSH2 0x17F1 SWAP3 PUSH1 0x2 DUP6 ADD SWAP3 SWAP2 ADD SWAP1 PUSH2 0x1890 JUMP JUMPDEST POP PUSH1 0x60 SWAP2 SWAP1 SWAP2 ADD MLOAD PUSH1 0x3 SWAP1 SWAP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x5 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE PUSH1 0x40 MLOAD DUP3 SWAP1 PUSH32 0xC0BA8FE4B176C1714197D43B9CC6BCF797A4A7461C5FE8D0EF6E184AE7601E51 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 SLOAD DUP2 DUP4 SSTORE DUP2 DUP2 GT ISZERO PUSH2 0x188B JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 PUSH2 0x188B SWAP2 DUP2 ADD SWAP1 DUP4 ADD PUSH2 0x190E JUMP JUMPDEST POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0x18D1 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x18FE JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x18FE JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x18FE JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x18E3 JUMP JUMPDEST POP PUSH2 0x190A SWAP3 SWAP2 POP PUSH2 0x190E JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0xE2C SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x190A JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x1914 JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 ORIGIN PUSH7 0x3DA11665281958 0xbf 0x4f DUP7 0xdf PUSH31 0x5A131DEA532FF7F9E56C9D822E0C0D68C98A00290000000000000000000000 ",
- "sourceMap": "815:3594:1:-;;;1864:213;8:9:-1;5:2;;;30:1;27;20:12;5:2;1864:213:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;2913:14:0;;1864:213:1;;;;;;;2959:6:0;;1864:213:1;256:2:0;2236:28;;;:66;;;2292:10;2280:9;:22;2236:66;:96;;;-1:-1:-1;2318:14:0;;2236:96;:127;;;-1:-1:-1;2348:15:0;;2236:127;2229:153;;;2377:5;;;2229:153;2966:1;2959:8;;2954:168;2971:7;:14;2969:1;:16;2954:168;;;3010:7;:19;3018:7;3026:1;3018:10;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3010:19:0;;;;;;;;;;;-1:-1:-1;3010:19:0;;;;;:38;;;3033:7;3041:1;3033:10;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3033:15:0;3047:1;3033:15;3010:38;3006:65;;;3066:5;;;3006:65;3107:4;3085:7;:19;3093:7;3101:1;3093:10;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3085:19:0;;;;;;;;;;;-1:-1:-1;3085:19:0;:26;;-1:-1:-1;;3085:26:0;;;;;;;;;;-1:-1:-1;2987:3:0;;;;;2954:168;;;3131:16;;;;:6;;:16;;;;;:::i;:::-;-1:-1:-1;;;3157:8:0;:20;;;;-1:-1:-1;;2032:17:1;:38;-1:-1:-1;815:3594:1;;-1:-1:-1;815:3594:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;815:3594:1;-1:-1:-1;;;;;815:3594:1;;;;;;;;;;;-1:-1:-1;815:3594:1;;;;;;;-1:-1:-1;815:3594:1;;;-1:-1:-1;815:3594:1;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;;815:3594:1;;;;;;;;;:::o;:::-;;;;;;;"
+ "object": "0x60806040523480156200001157600080fd5b5060405162001b6938038062001b69833981016040908152815160208301519183015192018051909290839083906000908260328211806200005257508181115b806200005c575080155b8062000066575081155b156200007157600080fd5b600092505b845183101562000145576002600086858151811015156200009357fe5b6020908102909101810151600160a060020a031682528101919091526040016000205460ff1680620000e657508483815181101515620000cf57fe5b90602001906020020151600160a060020a03166000145b15620000f157600080fd5b60016002600087868151811015156200010657fe5b602090810291909101810151600160a060020a03168252810191909152604001600020805460ff19169115159190911790556001929092019162000076565b84516200015a90600390602088019062000171565b505050600491909155505060065550620002059050565b828054828255906000526020600020908101928215620001c9579160200282015b82811115620001c95782518254600160a060020a031916600160a060020a0390911617825560209092019160019091019062000192565b50620001d7929150620001db565b5090565b6200020291905b80821115620001d7578054600160a060020a0319168155600101620001e2565b90565b61195480620002156000396000f30060806040526004361061013d5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663025e7c27811461017f578063173825d9146101c057806320ea8d86146101ee5780632f54bf6e146102065780633411c81c1461024857806337bd78a01461027957806354741525146102a05780637065cb48146102bf578063784547a7146102ed5780637ad28c51146103055780638b51d13f1461031d5780639ace38c214610335578063a0e67e2b1461040a578063a8abe69a1461046f578063b5dc40c314610494578063b77bf600146104ac578063ba51a6df146104c1578063c01a8c84146104d9578063c6427474146104f1578063d38f2d8214610567578063d74f8edd1461057f578063dc8452cd14610594578063e20056e6146105a9578063ee22610b146105dd575b600034111561017d5760408051348152905133917fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c919081900360200190a25b005b34801561018b57600080fd5b506101976004356105f5565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156101cc57600080fd5b5061017d73ffffffffffffffffffffffffffffffffffffffff6004351661062a565b3480156101fa57600080fd5b5061017d600435610881565b34801561021257600080fd5b5061023473ffffffffffffffffffffffffffffffffffffffff6004351661096e565b604080519115158252519081900360200190f35b34801561025457600080fd5b5061023460043573ffffffffffffffffffffffffffffffffffffffff60243516610983565b34801561028557600080fd5b5061028e6109a3565b60408051918252519081900360200190f35b3480156102ac57600080fd5b5061028e600435151560243515156109a9565b3480156102cb57600080fd5b5061017d73ffffffffffffffffffffffffffffffffffffffff60043516610a15565b3480156102f957600080fd5b50610234600435610b82565b34801561031157600080fd5b5061017d600435610c13565b34801561032957600080fd5b5061028e600435610c5a565b34801561034157600080fd5b5061034d600435610cd6565b604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018060200183151515158152602001828103825284818151815260200191508051906020019080838360005b838110156103cc5781810151838201526020016103b4565b50505050905090810190601f1680156103f95780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b34801561041657600080fd5b5061041f610dbf565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561045b578181015183820152602001610443565b505050509050019250505060405180910390f35b34801561047b57600080fd5b5061041f60043560243560443515156064351515610e2f565b3480156104a057600080fd5b5061041f600435610f68565b3480156104b857600080fd5b5061028e611115565b3480156104cd57600080fd5b5061017d60043561111b565b3480156104e557600080fd5b5061017d600435611192565b3480156104fd57600080fd5b50604080516020600460443581810135601f810184900484028501840190955284845261028e94823573ffffffffffffffffffffffffffffffffffffffff169460248035953695946064949201919081908401838280828437509497506112ac9650505050505050565b34801561057357600080fd5b5061028e6004356112cb565b34801561058b57600080fd5b5061028e6112dd565b3480156105a057600080fd5b5061028e6112e2565b3480156105b557600080fd5b5061017d73ffffffffffffffffffffffffffffffffffffffff600435811690602435166112e8565b3480156105e957600080fd5b5061017d6004356114f8565b600380548290811061060357fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b600033301461063857600080fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020526040902054829060ff16151561066e57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260026020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905591505b6003547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018210156107f1578273ffffffffffffffffffffffffffffffffffffffff1660038381548110151561070e57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614156107e657600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061076657fe5b6000918252602090912001546003805473ffffffffffffffffffffffffffffffffffffffff909216918490811061079957fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506107f1565b6001909101906106bc565b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01906108229082611867565b50600354600454111561083b5760035461083b9061111b565b60405173ffffffffffffffffffffffffffffffffffffffff8416907f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9090600090a2505050565b3360008181526002602052604090205460ff16151561089f57600080fd5b60008281526001602090815260408083203380855292529091205483919060ff1615156108cb57600080fd5b600084815260208190526040902060030154849060ff16156108ec57600080fd5b846108f681610b82565b1561090057600080fd5b600086815260016020908152604080832033808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555188927ff6a317157440607f36269043eb55f1287a5a19ba2216afeab88cd46cbcfb88e991a3505050505050565b60026020526000908152604090205460ff1681565b600160209081526000928352604080842090915290825290205460ff1681565b60065481565b6000805b600554811015610a0e578380156109d6575060008181526020819052604090206003015460ff16155b806109fa57508280156109fa575060008181526020819052604090206003015460ff165b15610a06576001820191505b6001016109ad565b5092915050565b333014610a2157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116600090815260026020526040902054819060ff1615610a5657600080fd5b8173ffffffffffffffffffffffffffffffffffffffff81161515610a7957600080fd5b6003805490506001016004546032821180610a9357508181115b80610a9c575080155b80610aa5575081155b15610aaf57600080fd5b73ffffffffffffffffffffffffffffffffffffffff851660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915560038054918201815583527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055517ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d9190a25050505050565b600080805b600354811015610c0c5760008481526001602052604081206003805491929184908110610bb057fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400190205460ff1615610bf1576001820191505b600454821415610c045760019250610c0c565b600101610b87565b5050919050565b333014610c1f57600080fd5b60068190556040805182815290517fd1c9101a34feff75cccef14a28785a0279cb0b49c1f321f21f5f422e746b43779181900360200190a150565b6000805b600354811015610cd05760008381526001602052604081206003805491929184908110610c8757fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400190205460ff1615610cc8576001820191505b600101610c5e565b50919050565b60006020818152918152604090819020805460018083015460028085018054875161010095821615959095027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691909104601f810188900488028401880190965285835273ffffffffffffffffffffffffffffffffffffffff90931695909491929190830182828015610dac5780601f10610d8157610100808354040283529160200191610dac565b820191906000526020600020905b815481529060010190602001808311610d8f57829003601f168201915b5050506003909301549192505060ff1684565b60606003805480602002602001604051908101604052809291908181526020018280548015610e2457602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610df9575b505050505090505b90565b606080600080600554604051908082528060200260200182016040528015610e61578160200160208202803883390190505b50925060009150600090505b600554811015610ee857858015610e96575060008181526020819052604090206003015460ff16155b80610eba5750848015610eba575060008181526020819052604090206003015460ff165b15610ee057808383815181101515610ece57fe5b60209081029091010152600191909101905b600101610e6d565b878703604051908082528060200260200182016040528015610f14578160200160208202803883390190505b5093508790505b86811015610f5d578281815181101515610f3157fe5b9060200190602002015184898303815181101515610f4b57fe5b60209081029091010152600101610f1b565b505050949350505050565b606080600080600380549050604051908082528060200260200182016040528015610f9d578160200160208202803883390190505b50925060009150600090505b6003548110156110815760008581526001602052604081206003805491929184908110610fd257fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400190205460ff161561107957600380548290811061101a57fe5b600091825260209091200154835173ffffffffffffffffffffffffffffffffffffffff9091169084908490811061104d57fe5b73ffffffffffffffffffffffffffffffffffffffff909216602092830290910190910152600191909101905b600101610fa9565b816040519080825280602002602001820160405280156110ab578160200160208202803883390190505b509350600090505b8181101561110d5782818151811015156110c957fe5b9060200190602002015184828151811015156110e157fe5b73ffffffffffffffffffffffffffffffffffffffff9092166020928302909101909101526001016110b3565b505050919050565b60055481565b33301461112757600080fd5b60035481603282118061113957508181115b80611142575080155b8061114b575081155b1561115557600080fd5b60048390556040805184815290517fa3f1ee9126a074d9326c682f561767f710e927faa811f7a99829d49dc421797a9181900360200190a1505050565b3360008181526002602052604090205460ff1615156111b057600080fd5b600082815260208190526040902054829073ffffffffffffffffffffffffffffffffffffffff1615156111e257600080fd5b60008381526001602090815260408083203380855292529091205484919060ff161561120d57600080fd5b8461121781610b82565b1561122157600080fd5b600086815260016020818152604080842033808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909317909255905188927f4a504a94899432a9846e1aa406dceb1bcfd538bb839071d49d1e5e23f5be30ef91a361129586610b82565b156112a4576112a486426116e9565b505050505050565b60006112b9848484611734565b90506112c481611192565b9392505050565b60076020526000908152604090205481565b603281565b60045481565b60003330146112f657600080fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260026020526040902054839060ff16151561132c57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260026020526040902054839060ff161561136157600080fd5b600092505b600354831015611426578473ffffffffffffffffffffffffffffffffffffffff1660038481548110151561139657fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561141b57836003848154811015156113ce57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611426565b600190920191611366565b73ffffffffffffffffffffffffffffffffffffffff80861660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090811690915593881682528082208054909416600117909355915190917f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9091a260405173ffffffffffffffffffffffffffffffffffffffff8516907ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d90600090a25050505050565b600081815260208190526040812060030154829060ff161561151957600080fd5b8261152381610b82565b151561152e57600080fd5b60065460008581526007602052604090205485910142101561154f57600080fd5b600085815260208190526040908190206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117909155815481830154935160028085018054959a5073ffffffffffffffffffffffffffffffffffffffff909316959492939192839285927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9183161561010002919091019091160480156116415780601f1061161657610100808354040283529160200191611641565b820191906000526020600020905b81548152906001019060200180831161162457829003601f168201915b505091505060006040518083038185875af1925050501561168c5760405185907f33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed7590600090a26116e2565b60405185907f526441bb6c1aba3c9a4a6ca1d6545da9c2333c8c48343ef398eb858d72b7923690600090a26003840180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b5050505050565b6000828152600760209081526040918290208390558151838152915184927f0b237afe65f1514fd7ea3f923ea4fe792bdd07000a912b6cd1602a8e7f573c8d92908290030190a25050565b60008373ffffffffffffffffffffffffffffffffffffffff8116151561175957600080fd5b6005546040805160808101825273ffffffffffffffffffffffffffffffffffffffff8881168252602080830189815283850189815260006060860181905287815280845295909520845181547fffffffffffffffffffffffff000000000000000000000000000000000000000016941693909317835551600183015592518051949650919390926117f1926002850192910190611890565b5060609190910151600390910180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905560058054600101905560405182907fc0ba8fe4b176c1714197d43b9cc6bcf797a4a7461c5fe8d0ef6e184ae7601e5190600090a2509392505050565b81548183558181111561188b5760008381526020902061188b91810190830161190e565b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106118d157805160ff19168380011785556118fe565b828001600101855582156118fe579182015b828111156118fe5782518255916020019190600101906118e3565b5061190a92915061190e565b5090565b610e2c91905b8082111561190a57600081556001016119145600a165627a7a72305820c3cbdcf5873ca37a59e5bce3ab44fcb6c9e7906844f91bde08e3829c3403baa40029",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x1B69 CODESIZE SUB DUP1 PUSH3 0x1B69 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 SWAP1 DUP2 MSTORE DUP2 MLOAD PUSH1 0x20 DUP4 ADD MLOAD SWAP2 DUP4 ADD MLOAD SWAP3 ADD DUP1 MLOAD SWAP1 SWAP3 SWAP1 DUP4 SWAP1 DUP4 SWAP1 PUSH1 0x0 SWAP1 DUP3 PUSH1 0x32 DUP3 GT DUP1 PUSH3 0x52 JUMPI POP DUP2 DUP2 GT JUMPDEST DUP1 PUSH3 0x5C JUMPI POP DUP1 ISZERO JUMPDEST DUP1 PUSH3 0x66 JUMPI POP DUP2 ISZERO JUMPDEST ISZERO PUSH3 0x71 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP3 POP JUMPDEST DUP5 MLOAD DUP4 LT ISZERO PUSH3 0x145 JUMPI PUSH1 0x2 PUSH1 0x0 DUP7 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH3 0x93 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND DUP3 MSTORE DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0xFF AND DUP1 PUSH3 0xE6 JUMPI POP DUP5 DUP4 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH3 0xCF JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x0 EQ JUMPDEST ISZERO PUSH3 0xF1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x2 PUSH1 0x0 DUP8 DUP7 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH3 0x106 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND DUP3 MSTORE DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x1 SWAP3 SWAP1 SWAP3 ADD SWAP2 PUSH3 0x76 JUMP JUMPDEST DUP5 MLOAD PUSH3 0x15A SWAP1 PUSH1 0x3 SWAP1 PUSH1 0x20 DUP9 ADD SWAP1 PUSH3 0x171 JUMP JUMPDEST POP POP POP PUSH1 0x4 SWAP2 SWAP1 SWAP2 SSTORE POP POP PUSH1 0x6 SSTORE POP PUSH3 0x205 SWAP1 POP JUMP JUMPDEST DUP3 DUP1 SLOAD DUP3 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP3 DUP3 ISZERO PUSH3 0x1C9 JUMPI SWAP2 PUSH1 0x20 MUL DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x1C9 JUMPI DUP3 MLOAD DUP3 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB NOT AND PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP1 SWAP2 AND OR DUP3 SSTORE PUSH1 0x20 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH3 0x192 JUMP JUMPDEST POP PUSH3 0x1D7 SWAP3 SWAP2 POP PUSH3 0x1DB JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH3 0x202 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x1D7 JUMPI DUP1 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB NOT AND DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x1E2 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0x1954 DUP1 PUSH3 0x215 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x13D JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x25E7C27 DUP2 EQ PUSH2 0x17F JUMPI DUP1 PUSH4 0x173825D9 EQ PUSH2 0x1C0 JUMPI DUP1 PUSH4 0x20EA8D86 EQ PUSH2 0x1EE JUMPI DUP1 PUSH4 0x2F54BF6E EQ PUSH2 0x206 JUMPI DUP1 PUSH4 0x3411C81C EQ PUSH2 0x248 JUMPI DUP1 PUSH4 0x37BD78A0 EQ PUSH2 0x279 JUMPI DUP1 PUSH4 0x54741525 EQ PUSH2 0x2A0 JUMPI DUP1 PUSH4 0x7065CB48 EQ PUSH2 0x2BF JUMPI DUP1 PUSH4 0x784547A7 EQ PUSH2 0x2ED JUMPI DUP1 PUSH4 0x7AD28C51 EQ PUSH2 0x305 JUMPI DUP1 PUSH4 0x8B51D13F EQ PUSH2 0x31D JUMPI DUP1 PUSH4 0x9ACE38C2 EQ PUSH2 0x335 JUMPI DUP1 PUSH4 0xA0E67E2B EQ PUSH2 0x40A JUMPI DUP1 PUSH4 0xA8ABE69A EQ PUSH2 0x46F JUMPI DUP1 PUSH4 0xB5DC40C3 EQ PUSH2 0x494 JUMPI DUP1 PUSH4 0xB77BF600 EQ PUSH2 0x4AC JUMPI DUP1 PUSH4 0xBA51A6DF EQ PUSH2 0x4C1 JUMPI DUP1 PUSH4 0xC01A8C84 EQ PUSH2 0x4D9 JUMPI DUP1 PUSH4 0xC6427474 EQ PUSH2 0x4F1 JUMPI DUP1 PUSH4 0xD38F2D82 EQ PUSH2 0x567 JUMPI DUP1 PUSH4 0xD74F8EDD EQ PUSH2 0x57F JUMPI DUP1 PUSH4 0xDC8452CD EQ PUSH2 0x594 JUMPI DUP1 PUSH4 0xE20056E6 EQ PUSH2 0x5A9 JUMPI DUP1 PUSH4 0xEE22610B EQ PUSH2 0x5DD JUMPI JUMPDEST PUSH1 0x0 CALLVALUE GT ISZERO PUSH2 0x17D JUMPI PUSH1 0x40 DUP1 MLOAD CALLVALUE DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0xE1FFFCC4923D04B559F4D29A8BFC6CDA04EB5B0D3C460751C2402C5C5CC9109C SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x18B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x197 PUSH1 0x4 CALLDATALOAD PUSH2 0x5F5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17D PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x62A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17D PUSH1 0x4 CALLDATALOAD PUSH2 0x881 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x212 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x234 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x96E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x254 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x234 PUSH1 0x4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD AND PUSH2 0x983 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x285 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28E PUSH2 0x9A3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28E PUSH1 0x4 CALLDATALOAD ISZERO ISZERO PUSH1 0x24 CALLDATALOAD ISZERO ISZERO PUSH2 0x9A9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17D PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0xA15 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x234 PUSH1 0x4 CALLDATALOAD PUSH2 0xB82 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x311 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17D PUSH1 0x4 CALLDATALOAD PUSH2 0xC13 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x329 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28E PUSH1 0x4 CALLDATALOAD PUSH2 0xC5A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x341 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x34D PUSH1 0x4 CALLDATALOAD PUSH2 0xCD6 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 ISZERO ISZERO ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3CC JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3B4 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x3F9 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 SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x416 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x41F PUSH2 0xDBF 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 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x45B JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x443 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x47B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x41F PUSH1 0x4 CALLDATALOAD PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD ISZERO ISZERO PUSH1 0x64 CALLDATALOAD ISZERO ISZERO PUSH2 0xE2F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x41F PUSH1 0x4 CALLDATALOAD PUSH2 0xF68 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28E PUSH2 0x1115 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17D PUSH1 0x4 CALLDATALOAD PUSH2 0x111B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17D PUSH1 0x4 CALLDATALOAD PUSH2 0x1192 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 PUSH1 0x44 CALLDATALOAD DUP2 DUP2 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x28E SWAP5 DUP3 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP5 PUSH1 0x24 DUP1 CALLDATALOAD SWAP6 CALLDATASIZE SWAP6 SWAP5 PUSH1 0x64 SWAP5 SWAP3 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x12AC SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x573 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28E PUSH1 0x4 CALLDATALOAD PUSH2 0x12CB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x58B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28E PUSH2 0x12DD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28E PUSH2 0x12E2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17D PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH2 0x12E8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17D PUSH1 0x4 CALLDATALOAD PUSH2 0x14F8 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD DUP3 SWAP1 DUP2 LT PUSH2 0x603 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x0 CALLER ADDRESS EQ PUSH2 0x638 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x66E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE SWAP2 POP JUMPDEST PUSH1 0x3 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP3 LT ISZERO PUSH2 0x7F1 JUMPI DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x3 DUP4 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x70E JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x7E6 JUMPI PUSH1 0x3 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0x766 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x3 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x799 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0x7F1 JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x6BC JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 PUSH2 0x822 SWAP1 DUP3 PUSH2 0x1867 JUMP JUMPDEST POP PUSH1 0x3 SLOAD PUSH1 0x4 SLOAD GT ISZERO PUSH2 0x83B JUMPI PUSH1 0x3 SLOAD PUSH2 0x83B SWAP1 PUSH2 0x111B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH32 0x8001553A916EF2F495D26A907CC54D96ED840D7BDA71E73194BF5A9DF7A76B90 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x89F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD DUP4 SWAP2 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x8CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD DUP5 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x8EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 PUSH2 0x8F6 DUP2 PUSH2 0xB82 JUMP JUMPDEST ISZERO PUSH2 0x900 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE MLOAD DUP9 SWAP3 PUSH32 0xF6A317157440607F36269043EB55F1287A5A19BA2216AFEAB88CD46CBCFB88E9 SWAP2 LOG3 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x6 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST PUSH1 0x5 SLOAD DUP2 LT ISZERO PUSH2 0xA0E JUMPI DUP4 DUP1 ISZERO PUSH2 0x9D6 JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND ISZERO JUMPDEST DUP1 PUSH2 0x9FA JUMPI POP DUP3 DUP1 ISZERO PUSH2 0x9FA JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND JUMPDEST ISZERO PUSH2 0xA06 JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x1 ADD PUSH2 0x9AD JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0xA21 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0xA56 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO ISZERO PUSH2 0xA79 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3 DUP1 SLOAD SWAP1 POP PUSH1 0x1 ADD PUSH1 0x4 SLOAD PUSH1 0x32 DUP3 GT DUP1 PUSH2 0xA93 JUMPI POP DUP2 DUP2 GT JUMPDEST DUP1 PUSH2 0xA9C JUMPI POP DUP1 ISZERO JUMPDEST DUP1 PUSH2 0xAA5 JUMPI POP DUP2 ISZERO JUMPDEST ISZERO PUSH2 0xAAF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x3 DUP1 SLOAD SWAP2 DUP3 ADD DUP2 SSTORE DUP4 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND DUP5 OR SWAP1 SSTORE MLOAD PUSH32 0xF39E6E1EB0EDCF53C221607B54B00CD28F3196FED0A24994DC308B8F611B682D SWAP2 SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 JUMPDEST PUSH1 0x3 SLOAD DUP2 LT ISZERO PUSH2 0xC0C JUMPI PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 DUP1 SLOAD SWAP2 SWAP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0xBB0 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xBF1 JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x4 SLOAD DUP3 EQ ISZERO PUSH2 0xC04 JUMPI PUSH1 0x1 SWAP3 POP PUSH2 0xC0C JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0xB87 JUMP JUMPDEST POP POP SWAP2 SWAP1 POP JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0xC1F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x6 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xD1C9101A34FEFF75CCCEF14A28785A0279CB0B49C1F321F21F5F422E746B4377 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST PUSH1 0x3 SLOAD DUP2 LT ISZERO PUSH2 0xCD0 JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 DUP1 SLOAD SWAP2 SWAP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0xC87 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xCC8 JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x1 ADD PUSH2 0xC5E JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP2 DUP2 MSTORE SWAP2 DUP2 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP1 DUP4 ADD SLOAD PUSH1 0x2 DUP1 DUP6 ADD DUP1 SLOAD DUP8 MLOAD PUSH2 0x100 SWAP6 DUP3 AND ISZERO SWAP6 SWAP1 SWAP6 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD AND SWAP2 SWAP1 SWAP2 DIV PUSH1 0x1F DUP2 ADD DUP9 SWAP1 DIV DUP9 MUL DUP5 ADD DUP9 ADD SWAP1 SWAP7 MSTORE DUP6 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND SWAP6 SWAP1 SWAP5 SWAP2 SWAP3 SWAP2 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xDAC JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xD81 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xDAC JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xD8F JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP PUSH1 0x3 SWAP1 SWAP4 ADD SLOAD SWAP2 SWAP3 POP POP PUSH1 0xFF AND DUP5 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0xE24 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xDF9 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x0 DUP1 PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xE61 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 SWAP2 POP PUSH1 0x0 SWAP1 POP JUMPDEST PUSH1 0x5 SLOAD DUP2 LT ISZERO PUSH2 0xEE8 JUMPI DUP6 DUP1 ISZERO PUSH2 0xE96 JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND ISZERO JUMPDEST DUP1 PUSH2 0xEBA JUMPI POP DUP5 DUP1 ISZERO PUSH2 0xEBA JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND JUMPDEST ISZERO PUSH2 0xEE0 JUMPI DUP1 DUP4 DUP4 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xECE JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SWAP1 JUMPDEST PUSH1 0x1 ADD PUSH2 0xE6D JUMP JUMPDEST DUP8 DUP8 SUB PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xF14 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP DUP8 SWAP1 POP JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0xF5D JUMPI DUP3 DUP2 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xF31 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP5 DUP10 DUP4 SUB DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xF4B JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0xF1B JUMP JUMPDEST POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x0 DUP1 PUSH1 0x3 DUP1 SLOAD SWAP1 POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xF9D JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 SWAP2 POP PUSH1 0x0 SWAP1 POP JUMPDEST PUSH1 0x3 SLOAD DUP2 LT ISZERO PUSH2 0x1081 JUMPI PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 DUP1 SLOAD SWAP2 SWAP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0xFD2 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1079 JUMPI PUSH1 0x3 DUP1 SLOAD DUP3 SWAP1 DUP2 LT PUSH2 0x101A JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 DUP5 SWAP1 DUP5 SWAP1 DUP2 LT PUSH2 0x104D JUMPI INVALID JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SWAP1 JUMPDEST PUSH1 0x1 ADD PUSH2 0xFA9 JUMP JUMPDEST DUP2 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x10AB JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP PUSH1 0x0 SWAP1 POP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x110D JUMPI DUP3 DUP2 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x10C9 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP5 DUP3 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x10E1 JUMPI INVALID JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 ADD PUSH2 0x10B3 JUMP JUMPDEST POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0x1127 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3 SLOAD DUP2 PUSH1 0x32 DUP3 GT DUP1 PUSH2 0x1139 JUMPI POP DUP2 DUP2 GT JUMPDEST DUP1 PUSH2 0x1142 JUMPI POP DUP1 ISZERO JUMPDEST DUP1 PUSH2 0x114B JUMPI POP DUP2 ISZERO JUMPDEST ISZERO PUSH2 0x1155 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x4 DUP4 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xA3F1EE9126A074D9326C682F561767F710E927FAA811F7A99829D49DC421797A SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x11B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO ISZERO PUSH2 0x11E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD DUP5 SWAP2 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x120D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 PUSH2 0x1217 DUP2 PUSH2 0xB82 JUMP JUMPDEST ISZERO PUSH2 0x1221 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 CALLER DUP1 DUP7 MSTORE SWAP3 MSTORE DUP1 DUP5 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SWAP4 OR SWAP1 SWAP3 SSTORE SWAP1 MLOAD DUP9 SWAP3 PUSH32 0x4A504A94899432A9846E1AA406DCEB1BCFD538BB839071D49D1E5E23F5BE30EF SWAP2 LOG3 PUSH2 0x1295 DUP7 PUSH2 0xB82 JUMP JUMPDEST ISZERO PUSH2 0x12A4 JUMPI PUSH2 0x12A4 DUP7 TIMESTAMP PUSH2 0x16E9 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x12B9 DUP5 DUP5 DUP5 PUSH2 0x1734 JUMP JUMPDEST SWAP1 POP PUSH2 0x12C4 DUP2 PUSH2 0x1192 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x32 DUP2 JUMP JUMPDEST PUSH1 0x4 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 CALLER ADDRESS EQ PUSH2 0x12F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x132C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x1361 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP3 POP JUMPDEST PUSH1 0x3 SLOAD DUP4 LT ISZERO PUSH2 0x1426 JUMPI DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x3 DUP5 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1396 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x141B JUMPI DUP4 PUSH1 0x3 DUP5 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x13CE JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0x1426 JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 PUSH2 0x1366 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 SWAP1 DUP2 AND SWAP1 SWAP2 SSTORE SWAP4 DUP9 AND DUP3 MSTORE DUP1 DUP3 KECCAK256 DUP1 SLOAD SWAP1 SWAP5 AND PUSH1 0x1 OR SWAP1 SWAP4 SSTORE SWAP2 MLOAD SWAP1 SWAP2 PUSH32 0x8001553A916EF2F495D26A907CC54D96ED840D7BDA71E73194BF5A9DF7A76B90 SWAP2 LOG2 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP1 PUSH32 0xF39E6E1EB0EDCF53C221607B54B00CD28F3196FED0A24994DC308B8F611B682D SWAP1 PUSH1 0x0 SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 ADD SLOAD DUP3 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x1519 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH2 0x1523 DUP2 PUSH2 0xB82 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x152E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP6 SWAP2 ADD TIMESTAMP LT ISZERO PUSH2 0x154F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x3 DUP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP2 SLOAD DUP2 DUP4 ADD SLOAD SWAP4 MLOAD PUSH1 0x2 DUP1 DUP6 ADD DUP1 SLOAD SWAP6 SWAP11 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND SWAP6 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 DUP4 SWAP3 DUP6 SWAP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP4 AND ISZERO PUSH2 0x100 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 AND DIV DUP1 ISZERO PUSH2 0x1641 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1616 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1641 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1624 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP ISZERO PUSH2 0x168C JUMPI PUSH1 0x40 MLOAD DUP6 SWAP1 PUSH32 0x33E13ECB54C3076D8E8BB8C2881800A4D972B792045FFAE98FDF46DF365FED75 SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH2 0x16E2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP6 SWAP1 PUSH32 0x526441BB6C1ABA3C9A4A6CA1D6545DA9C2333C8C48343EF398EB858D72B79236 SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH1 0x3 DUP5 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 SWAP1 SSTORE DUP2 MLOAD DUP4 DUP2 MSTORE SWAP2 MLOAD DUP5 SWAP3 PUSH32 0xB237AFE65F1514FD7EA3F923EA4FE792BDD07000A912B6CD1602A8E7F573C8D SWAP3 SWAP1 DUP3 SWAP1 SUB ADD SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO ISZERO PUSH2 0x1759 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x80 DUP2 ADD DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD DUP10 DUP2 MSTORE DUP4 DUP6 ADD DUP10 DUP2 MSTORE PUSH1 0x0 PUSH1 0x60 DUP7 ADD DUP2 SWAP1 MSTORE DUP8 DUP2 MSTORE DUP1 DUP5 MSTORE SWAP6 SWAP1 SWAP6 KECCAK256 DUP5 MLOAD DUP2 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP5 AND SWAP4 SWAP1 SWAP4 OR DUP4 SSTORE MLOAD PUSH1 0x1 DUP4 ADD SSTORE SWAP3 MLOAD DUP1 MLOAD SWAP5 SWAP7 POP SWAP2 SWAP4 SWAP1 SWAP3 PUSH2 0x17F1 SWAP3 PUSH1 0x2 DUP6 ADD SWAP3 SWAP2 ADD SWAP1 PUSH2 0x1890 JUMP JUMPDEST POP PUSH1 0x60 SWAP2 SWAP1 SWAP2 ADD MLOAD PUSH1 0x3 SWAP1 SWAP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x5 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE PUSH1 0x40 MLOAD DUP3 SWAP1 PUSH32 0xC0BA8FE4B176C1714197D43B9CC6BCF797A4A7461C5FE8D0EF6E184AE7601E51 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 SLOAD DUP2 DUP4 SSTORE DUP2 DUP2 GT ISZERO PUSH2 0x188B JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 PUSH2 0x188B SWAP2 DUP2 ADD SWAP1 DUP4 ADD PUSH2 0x190E JUMP JUMPDEST POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0x18D1 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x18FE JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x18FE JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x18FE JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x18E3 JUMP JUMPDEST POP PUSH2 0x190A SWAP3 SWAP2 POP PUSH2 0x190E JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0xE2C SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x190A JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x1914 JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 0xc3 0xcb 0xdc 0xf5 DUP8 EXTCODECOPY LOG3 PUSH27 0x59E5BCE3AB44FCB6C9E7906844F91BDE08E3829C3403BAA4002900 ",
+ "sourceMap": "835:3594:1:-;;;1884:213;8:9:-1;5:2;;;30:1;27;20:12;5:2;1884:213:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;2933:14:0;;1884:213:1;;;;;;;2979:6:0;;1884:213:1;276:2:0;2256:28;;;:66;;;2312:10;2300:9;:22;2256:66;:96;;;-1:-1:-1;2338:14:0;;2256:96;:127;;;-1:-1:-1;2368:15:0;;2256:127;2249:153;;;2397:5;;;2249:153;2986:1;2979:8;;2974:168;2991:7;:14;2989:1;:16;2974:168;;;3030:7;:19;3038:7;3046:1;3038:10;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3030:19:0;;;;;;;;;;;-1:-1:-1;3030:19:0;;;;;:38;;;3053:7;3061:1;3053:10;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3053:15:0;3067:1;3053:15;3030:38;3026:65;;;3086:5;;;3026:65;3127:4;3105:7;:19;3113:7;3121:1;3113:10;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3105:19:0;;;;;;;;;;;-1:-1:-1;3105:19:0;:26;;-1:-1:-1;;3105:26:0;;;;;;;;;;-1:-1:-1;3007:3:0;;;;;2974:168;;;3151:16;;;;:6;;:16;;;;;:::i;:::-;-1:-1:-1;;;3177:8:0;:20;;;;-1:-1:-1;;2052:17:1;:38;-1:-1:-1;835:3594:1;;-1:-1:-1;835:3594:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;835:3594:1;-1:-1:-1;;;;;835:3594:1;;;;;;;;;;;-1:-1:-1;835:3594:1;;;;;;;-1:-1:-1;835:3594:1;;;-1:-1:-1;835:3594:1;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;;835:3594:1;;;;;;;;;:::o;:::-;;;;;;;"
},
"deployedBytecode": {
"linkReferences": {},
- "object": "0x60806040526004361061013d5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663025e7c27811461017f578063173825d9146101c057806320ea8d86146101ee5780632f54bf6e146102065780633411c81c1461024857806337bd78a01461027957806354741525146102a05780637065cb48146102bf578063784547a7146102ed5780637ad28c51146103055780638b51d13f1461031d5780639ace38c214610335578063a0e67e2b1461040a578063a8abe69a1461046f578063b5dc40c314610494578063b77bf600146104ac578063ba51a6df146104c1578063c01a8c84146104d9578063c6427474146104f1578063d38f2d8214610567578063d74f8edd1461057f578063dc8452cd14610594578063e20056e6146105a9578063ee22610b146105dd575b600034111561017d5760408051348152905133917fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c919081900360200190a25b005b34801561018b57600080fd5b506101976004356105f5565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156101cc57600080fd5b5061017d73ffffffffffffffffffffffffffffffffffffffff6004351661062a565b3480156101fa57600080fd5b5061017d600435610881565b34801561021257600080fd5b5061023473ffffffffffffffffffffffffffffffffffffffff6004351661096e565b604080519115158252519081900360200190f35b34801561025457600080fd5b5061023460043573ffffffffffffffffffffffffffffffffffffffff60243516610983565b34801561028557600080fd5b5061028e6109a3565b60408051918252519081900360200190f35b3480156102ac57600080fd5b5061028e600435151560243515156109a9565b3480156102cb57600080fd5b5061017d73ffffffffffffffffffffffffffffffffffffffff60043516610a15565b3480156102f957600080fd5b50610234600435610b82565b34801561031157600080fd5b5061017d600435610c13565b34801561032957600080fd5b5061028e600435610c5a565b34801561034157600080fd5b5061034d600435610cd6565b604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018060200183151515158152602001828103825284818151815260200191508051906020019080838360005b838110156103cc5781810151838201526020016103b4565b50505050905090810190601f1680156103f95780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b34801561041657600080fd5b5061041f610dbf565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561045b578181015183820152602001610443565b505050509050019250505060405180910390f35b34801561047b57600080fd5b5061041f60043560243560443515156064351515610e2f565b3480156104a057600080fd5b5061041f600435610f68565b3480156104b857600080fd5b5061028e611115565b3480156104cd57600080fd5b5061017d60043561111b565b3480156104e557600080fd5b5061017d600435611192565b3480156104fd57600080fd5b50604080516020600460443581810135601f810184900484028501840190955284845261028e94823573ffffffffffffffffffffffffffffffffffffffff169460248035953695946064949201919081908401838280828437509497506112ac9650505050505050565b34801561057357600080fd5b5061028e6004356112cb565b34801561058b57600080fd5b5061028e6112dd565b3480156105a057600080fd5b5061028e6112e2565b3480156105b557600080fd5b5061017d73ffffffffffffffffffffffffffffffffffffffff600435811690602435166112e8565b3480156105e957600080fd5b5061017d6004356114f8565b600380548290811061060357fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b600033301461063857600080fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020526040902054829060ff16151561066e57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260026020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905591505b6003547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018210156107f1578273ffffffffffffffffffffffffffffffffffffffff1660038381548110151561070e57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614156107e657600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061076657fe5b6000918252602090912001546003805473ffffffffffffffffffffffffffffffffffffffff909216918490811061079957fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506107f1565b6001909101906106bc565b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01906108229082611867565b50600354600454111561083b5760035461083b9061111b565b60405173ffffffffffffffffffffffffffffffffffffffff8416907f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9090600090a2505050565b3360008181526002602052604090205460ff16151561089f57600080fd5b60008281526001602090815260408083203380855292529091205483919060ff1615156108cb57600080fd5b600084815260208190526040902060030154849060ff16156108ec57600080fd5b846108f681610b82565b1561090057600080fd5b600086815260016020908152604080832033808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555188927ff6a317157440607f36269043eb55f1287a5a19ba2216afeab88cd46cbcfb88e991a3505050505050565b60026020526000908152604090205460ff1681565b600160209081526000928352604080842090915290825290205460ff1681565b60065481565b6000805b600554811015610a0e578380156109d6575060008181526020819052604090206003015460ff16155b806109fa57508280156109fa575060008181526020819052604090206003015460ff165b15610a06576001820191505b6001016109ad565b5092915050565b333014610a2157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116600090815260026020526040902054819060ff1615610a5657600080fd5b8173ffffffffffffffffffffffffffffffffffffffff81161515610a7957600080fd5b6003805490506001016004546032821180610a9357508181115b80610a9c575080155b80610aa5575081155b15610aaf57600080fd5b73ffffffffffffffffffffffffffffffffffffffff851660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915560038054918201815583527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055517ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d9190a25050505050565b600080805b600354811015610c0c5760008481526001602052604081206003805491929184908110610bb057fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400190205460ff1615610bf1576001820191505b600454821415610c045760019250610c0c565b600101610b87565b5050919050565b333014610c1f57600080fd5b60068190556040805182815290517fd1c9101a34feff75cccef14a28785a0279cb0b49c1f321f21f5f422e746b43779181900360200190a150565b6000805b600354811015610cd05760008381526001602052604081206003805491929184908110610c8757fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400190205460ff1615610cc8576001820191505b600101610c5e565b50919050565b60006020818152918152604090819020805460018083015460028085018054875161010095821615959095027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691909104601f810188900488028401880190965285835273ffffffffffffffffffffffffffffffffffffffff90931695909491929190830182828015610dac5780601f10610d8157610100808354040283529160200191610dac565b820191906000526020600020905b815481529060010190602001808311610d8f57829003601f168201915b5050506003909301549192505060ff1684565b60606003805480602002602001604051908101604052809291908181526020018280548015610e2457602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610df9575b505050505090505b90565b606080600080600554604051908082528060200260200182016040528015610e61578160200160208202803883390190505b50925060009150600090505b600554811015610ee857858015610e96575060008181526020819052604090206003015460ff16155b80610eba5750848015610eba575060008181526020819052604090206003015460ff165b15610ee057808383815181101515610ece57fe5b60209081029091010152600191909101905b600101610e6d565b878703604051908082528060200260200182016040528015610f14578160200160208202803883390190505b5093508790505b86811015610f5d578281815181101515610f3157fe5b9060200190602002015184898303815181101515610f4b57fe5b60209081029091010152600101610f1b565b505050949350505050565b606080600080600380549050604051908082528060200260200182016040528015610f9d578160200160208202803883390190505b50925060009150600090505b6003548110156110815760008581526001602052604081206003805491929184908110610fd257fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400190205460ff161561107957600380548290811061101a57fe5b600091825260209091200154835173ffffffffffffffffffffffffffffffffffffffff9091169084908490811061104d57fe5b73ffffffffffffffffffffffffffffffffffffffff909216602092830290910190910152600191909101905b600101610fa9565b816040519080825280602002602001820160405280156110ab578160200160208202803883390190505b509350600090505b8181101561110d5782818151811015156110c957fe5b9060200190602002015184828151811015156110e157fe5b73ffffffffffffffffffffffffffffffffffffffff9092166020928302909101909101526001016110b3565b505050919050565b60055481565b33301461112757600080fd5b60035481603282118061113957508181115b80611142575080155b8061114b575081155b1561115557600080fd5b60048390556040805184815290517fa3f1ee9126a074d9326c682f561767f710e927faa811f7a99829d49dc421797a9181900360200190a1505050565b3360008181526002602052604090205460ff1615156111b057600080fd5b600082815260208190526040902054829073ffffffffffffffffffffffffffffffffffffffff1615156111e257600080fd5b60008381526001602090815260408083203380855292529091205484919060ff161561120d57600080fd5b8461121781610b82565b1561122157600080fd5b600086815260016020818152604080842033808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909317909255905188927f4a504a94899432a9846e1aa406dceb1bcfd538bb839071d49d1e5e23f5be30ef91a361129586610b82565b156112a4576112a486426116e9565b505050505050565b60006112b9848484611734565b90506112c481611192565b9392505050565b60076020526000908152604090205481565b603281565b60045481565b60003330146112f657600080fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260026020526040902054839060ff16151561132c57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260026020526040902054839060ff161561136157600080fd5b600092505b600354831015611426578473ffffffffffffffffffffffffffffffffffffffff1660038481548110151561139657fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561141b57836003848154811015156113ce57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611426565b600190920191611366565b73ffffffffffffffffffffffffffffffffffffffff80861660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090811690915593881682528082208054909416600117909355915190917f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9091a260405173ffffffffffffffffffffffffffffffffffffffff8516907ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d90600090a25050505050565b600081815260208190526040812060030154829060ff161561151957600080fd5b8261152381610b82565b151561152e57600080fd5b60065460008581526007602052604090205485910142101561154f57600080fd5b600085815260208190526040908190206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117909155815481830154935160028085018054959a5073ffffffffffffffffffffffffffffffffffffffff909316959492939192839285927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9183161561010002919091019091160480156116415780601f1061161657610100808354040283529160200191611641565b820191906000526020600020905b81548152906001019060200180831161162457829003601f168201915b505091505060006040518083038185875af1925050501561168c5760405185907f33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed7590600090a26116e2565b60405185907f526441bb6c1aba3c9a4a6ca1d6545da9c2333c8c48343ef398eb858d72b7923690600090a26003840180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b5050505050565b6000828152600760209081526040918290208390558151838152915184927f0b237afe65f1514fd7ea3f923ea4fe792bdd07000a912b6cd1602a8e7f573c8d92908290030190a25050565b60008373ffffffffffffffffffffffffffffffffffffffff8116151561175957600080fd5b6005546040805160808101825273ffffffffffffffffffffffffffffffffffffffff8881168252602080830189815283850189815260006060860181905287815280845295909520845181547fffffffffffffffffffffffff000000000000000000000000000000000000000016941693909317835551600183015592518051949650919390926117f1926002850192910190611890565b5060609190910151600390910180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905560058054600101905560405182907fc0ba8fe4b176c1714197d43b9cc6bcf797a4a7461c5fe8d0ef6e184ae7601e5190600090a2509392505050565b81548183558181111561188b5760008381526020902061188b91810190830161190e565b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106118d157805160ff19168380011785556118fe565b828001600101855582156118fe579182015b828111156118fe5782518255916020019190600101906118e3565b5061190a92915061190e565b5090565b610e2c91905b8082111561190a57600081556001016119145600a165627a7a7230582032663da11665281958bf4f86df7e5a131dea532ff7f9e56c9d822e0c0d68c98a0029",
- "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x13D JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x25E7C27 DUP2 EQ PUSH2 0x17F JUMPI DUP1 PUSH4 0x173825D9 EQ PUSH2 0x1C0 JUMPI DUP1 PUSH4 0x20EA8D86 EQ PUSH2 0x1EE JUMPI DUP1 PUSH4 0x2F54BF6E EQ PUSH2 0x206 JUMPI DUP1 PUSH4 0x3411C81C EQ PUSH2 0x248 JUMPI DUP1 PUSH4 0x37BD78A0 EQ PUSH2 0x279 JUMPI DUP1 PUSH4 0x54741525 EQ PUSH2 0x2A0 JUMPI DUP1 PUSH4 0x7065CB48 EQ PUSH2 0x2BF JUMPI DUP1 PUSH4 0x784547A7 EQ PUSH2 0x2ED JUMPI DUP1 PUSH4 0x7AD28C51 EQ PUSH2 0x305 JUMPI DUP1 PUSH4 0x8B51D13F EQ PUSH2 0x31D JUMPI DUP1 PUSH4 0x9ACE38C2 EQ PUSH2 0x335 JUMPI DUP1 PUSH4 0xA0E67E2B EQ PUSH2 0x40A JUMPI DUP1 PUSH4 0xA8ABE69A EQ PUSH2 0x46F JUMPI DUP1 PUSH4 0xB5DC40C3 EQ PUSH2 0x494 JUMPI DUP1 PUSH4 0xB77BF600 EQ PUSH2 0x4AC JUMPI DUP1 PUSH4 0xBA51A6DF EQ PUSH2 0x4C1 JUMPI DUP1 PUSH4 0xC01A8C84 EQ PUSH2 0x4D9 JUMPI DUP1 PUSH4 0xC6427474 EQ PUSH2 0x4F1 JUMPI DUP1 PUSH4 0xD38F2D82 EQ PUSH2 0x567 JUMPI DUP1 PUSH4 0xD74F8EDD EQ PUSH2 0x57F JUMPI DUP1 PUSH4 0xDC8452CD EQ PUSH2 0x594 JUMPI DUP1 PUSH4 0xE20056E6 EQ PUSH2 0x5A9 JUMPI DUP1 PUSH4 0xEE22610B EQ PUSH2 0x5DD JUMPI JUMPDEST PUSH1 0x0 CALLVALUE GT ISZERO PUSH2 0x17D JUMPI PUSH1 0x40 DUP1 MLOAD CALLVALUE DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0xE1FFFCC4923D04B559F4D29A8BFC6CDA04EB5B0D3C460751C2402C5C5CC9109C SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x18B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x197 PUSH1 0x4 CALLDATALOAD PUSH2 0x5F5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17D PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x62A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17D PUSH1 0x4 CALLDATALOAD PUSH2 0x881 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x212 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x234 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x96E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x254 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x234 PUSH1 0x4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD AND PUSH2 0x983 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x285 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28E PUSH2 0x9A3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28E PUSH1 0x4 CALLDATALOAD ISZERO ISZERO PUSH1 0x24 CALLDATALOAD ISZERO ISZERO PUSH2 0x9A9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17D PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0xA15 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x234 PUSH1 0x4 CALLDATALOAD PUSH2 0xB82 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x311 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17D PUSH1 0x4 CALLDATALOAD PUSH2 0xC13 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x329 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28E PUSH1 0x4 CALLDATALOAD PUSH2 0xC5A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x341 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x34D PUSH1 0x4 CALLDATALOAD PUSH2 0xCD6 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 ISZERO ISZERO ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3CC JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3B4 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x3F9 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 SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x416 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x41F PUSH2 0xDBF 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 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x45B JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x443 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x47B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x41F PUSH1 0x4 CALLDATALOAD PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD ISZERO ISZERO PUSH1 0x64 CALLDATALOAD ISZERO ISZERO PUSH2 0xE2F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x41F PUSH1 0x4 CALLDATALOAD PUSH2 0xF68 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28E PUSH2 0x1115 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17D PUSH1 0x4 CALLDATALOAD PUSH2 0x111B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17D PUSH1 0x4 CALLDATALOAD PUSH2 0x1192 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 PUSH1 0x44 CALLDATALOAD DUP2 DUP2 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x28E SWAP5 DUP3 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP5 PUSH1 0x24 DUP1 CALLDATALOAD SWAP6 CALLDATASIZE SWAP6 SWAP5 PUSH1 0x64 SWAP5 SWAP3 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x12AC SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x573 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28E PUSH1 0x4 CALLDATALOAD PUSH2 0x12CB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x58B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28E PUSH2 0x12DD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28E PUSH2 0x12E2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17D PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH2 0x12E8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17D PUSH1 0x4 CALLDATALOAD PUSH2 0x14F8 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD DUP3 SWAP1 DUP2 LT PUSH2 0x603 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x0 CALLER ADDRESS EQ PUSH2 0x638 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x66E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE SWAP2 POP JUMPDEST PUSH1 0x3 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP3 LT ISZERO PUSH2 0x7F1 JUMPI DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x3 DUP4 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x70E JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x7E6 JUMPI PUSH1 0x3 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0x766 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x3 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x799 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0x7F1 JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x6BC JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 PUSH2 0x822 SWAP1 DUP3 PUSH2 0x1867 JUMP JUMPDEST POP PUSH1 0x3 SLOAD PUSH1 0x4 SLOAD GT ISZERO PUSH2 0x83B JUMPI PUSH1 0x3 SLOAD PUSH2 0x83B SWAP1 PUSH2 0x111B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH32 0x8001553A916EF2F495D26A907CC54D96ED840D7BDA71E73194BF5A9DF7A76B90 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x89F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD DUP4 SWAP2 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x8CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD DUP5 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x8EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 PUSH2 0x8F6 DUP2 PUSH2 0xB82 JUMP JUMPDEST ISZERO PUSH2 0x900 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE MLOAD DUP9 SWAP3 PUSH32 0xF6A317157440607F36269043EB55F1287A5A19BA2216AFEAB88CD46CBCFB88E9 SWAP2 LOG3 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x6 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST PUSH1 0x5 SLOAD DUP2 LT ISZERO PUSH2 0xA0E JUMPI DUP4 DUP1 ISZERO PUSH2 0x9D6 JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND ISZERO JUMPDEST DUP1 PUSH2 0x9FA JUMPI POP DUP3 DUP1 ISZERO PUSH2 0x9FA JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND JUMPDEST ISZERO PUSH2 0xA06 JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x1 ADD PUSH2 0x9AD JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0xA21 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0xA56 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO ISZERO PUSH2 0xA79 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3 DUP1 SLOAD SWAP1 POP PUSH1 0x1 ADD PUSH1 0x4 SLOAD PUSH1 0x32 DUP3 GT DUP1 PUSH2 0xA93 JUMPI POP DUP2 DUP2 GT JUMPDEST DUP1 PUSH2 0xA9C JUMPI POP DUP1 ISZERO JUMPDEST DUP1 PUSH2 0xAA5 JUMPI POP DUP2 ISZERO JUMPDEST ISZERO PUSH2 0xAAF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x3 DUP1 SLOAD SWAP2 DUP3 ADD DUP2 SSTORE DUP4 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND DUP5 OR SWAP1 SSTORE MLOAD PUSH32 0xF39E6E1EB0EDCF53C221607B54B00CD28F3196FED0A24994DC308B8F611B682D SWAP2 SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 JUMPDEST PUSH1 0x3 SLOAD DUP2 LT ISZERO PUSH2 0xC0C JUMPI PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 DUP1 SLOAD SWAP2 SWAP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0xBB0 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xBF1 JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x4 SLOAD DUP3 EQ ISZERO PUSH2 0xC04 JUMPI PUSH1 0x1 SWAP3 POP PUSH2 0xC0C JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0xB87 JUMP JUMPDEST POP POP SWAP2 SWAP1 POP JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0xC1F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x6 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xD1C9101A34FEFF75CCCEF14A28785A0279CB0B49C1F321F21F5F422E746B4377 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST PUSH1 0x3 SLOAD DUP2 LT ISZERO PUSH2 0xCD0 JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 DUP1 SLOAD SWAP2 SWAP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0xC87 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xCC8 JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x1 ADD PUSH2 0xC5E JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP2 DUP2 MSTORE SWAP2 DUP2 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP1 DUP4 ADD SLOAD PUSH1 0x2 DUP1 DUP6 ADD DUP1 SLOAD DUP8 MLOAD PUSH2 0x100 SWAP6 DUP3 AND ISZERO SWAP6 SWAP1 SWAP6 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD AND SWAP2 SWAP1 SWAP2 DIV PUSH1 0x1F DUP2 ADD DUP9 SWAP1 DIV DUP9 MUL DUP5 ADD DUP9 ADD SWAP1 SWAP7 MSTORE DUP6 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND SWAP6 SWAP1 SWAP5 SWAP2 SWAP3 SWAP2 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xDAC JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xD81 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xDAC JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xD8F JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP PUSH1 0x3 SWAP1 SWAP4 ADD SLOAD SWAP2 SWAP3 POP POP PUSH1 0xFF AND DUP5 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0xE24 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xDF9 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x0 DUP1 PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xE61 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 SWAP2 POP PUSH1 0x0 SWAP1 POP JUMPDEST PUSH1 0x5 SLOAD DUP2 LT ISZERO PUSH2 0xEE8 JUMPI DUP6 DUP1 ISZERO PUSH2 0xE96 JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND ISZERO JUMPDEST DUP1 PUSH2 0xEBA JUMPI POP DUP5 DUP1 ISZERO PUSH2 0xEBA JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND JUMPDEST ISZERO PUSH2 0xEE0 JUMPI DUP1 DUP4 DUP4 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xECE JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SWAP1 JUMPDEST PUSH1 0x1 ADD PUSH2 0xE6D JUMP JUMPDEST DUP8 DUP8 SUB PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xF14 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP DUP8 SWAP1 POP JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0xF5D JUMPI DUP3 DUP2 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xF31 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP5 DUP10 DUP4 SUB DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xF4B JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0xF1B JUMP JUMPDEST POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x0 DUP1 PUSH1 0x3 DUP1 SLOAD SWAP1 POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xF9D JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 SWAP2 POP PUSH1 0x0 SWAP1 POP JUMPDEST PUSH1 0x3 SLOAD DUP2 LT ISZERO PUSH2 0x1081 JUMPI PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 DUP1 SLOAD SWAP2 SWAP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0xFD2 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1079 JUMPI PUSH1 0x3 DUP1 SLOAD DUP3 SWAP1 DUP2 LT PUSH2 0x101A JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 DUP5 SWAP1 DUP5 SWAP1 DUP2 LT PUSH2 0x104D JUMPI INVALID JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SWAP1 JUMPDEST PUSH1 0x1 ADD PUSH2 0xFA9 JUMP JUMPDEST DUP2 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x10AB JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP PUSH1 0x0 SWAP1 POP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x110D JUMPI DUP3 DUP2 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x10C9 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP5 DUP3 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x10E1 JUMPI INVALID JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 ADD PUSH2 0x10B3 JUMP JUMPDEST POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0x1127 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3 SLOAD DUP2 PUSH1 0x32 DUP3 GT DUP1 PUSH2 0x1139 JUMPI POP DUP2 DUP2 GT JUMPDEST DUP1 PUSH2 0x1142 JUMPI POP DUP1 ISZERO JUMPDEST DUP1 PUSH2 0x114B JUMPI POP DUP2 ISZERO JUMPDEST ISZERO PUSH2 0x1155 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x4 DUP4 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xA3F1EE9126A074D9326C682F561767F710E927FAA811F7A99829D49DC421797A SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x11B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO ISZERO PUSH2 0x11E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD DUP5 SWAP2 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x120D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 PUSH2 0x1217 DUP2 PUSH2 0xB82 JUMP JUMPDEST ISZERO PUSH2 0x1221 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 CALLER DUP1 DUP7 MSTORE SWAP3 MSTORE DUP1 DUP5 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SWAP4 OR SWAP1 SWAP3 SSTORE SWAP1 MLOAD DUP9 SWAP3 PUSH32 0x4A504A94899432A9846E1AA406DCEB1BCFD538BB839071D49D1E5E23F5BE30EF SWAP2 LOG3 PUSH2 0x1295 DUP7 PUSH2 0xB82 JUMP JUMPDEST ISZERO PUSH2 0x12A4 JUMPI PUSH2 0x12A4 DUP7 TIMESTAMP PUSH2 0x16E9 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x12B9 DUP5 DUP5 DUP5 PUSH2 0x1734 JUMP JUMPDEST SWAP1 POP PUSH2 0x12C4 DUP2 PUSH2 0x1192 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x32 DUP2 JUMP JUMPDEST PUSH1 0x4 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 CALLER ADDRESS EQ PUSH2 0x12F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x132C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x1361 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP3 POP JUMPDEST PUSH1 0x3 SLOAD DUP4 LT ISZERO PUSH2 0x1426 JUMPI DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x3 DUP5 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1396 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x141B JUMPI DUP4 PUSH1 0x3 DUP5 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x13CE JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0x1426 JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 PUSH2 0x1366 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 SWAP1 DUP2 AND SWAP1 SWAP2 SSTORE SWAP4 DUP9 AND DUP3 MSTORE DUP1 DUP3 KECCAK256 DUP1 SLOAD SWAP1 SWAP5 AND PUSH1 0x1 OR SWAP1 SWAP4 SSTORE SWAP2 MLOAD SWAP1 SWAP2 PUSH32 0x8001553A916EF2F495D26A907CC54D96ED840D7BDA71E73194BF5A9DF7A76B90 SWAP2 LOG2 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP1 PUSH32 0xF39E6E1EB0EDCF53C221607B54B00CD28F3196FED0A24994DC308B8F611B682D SWAP1 PUSH1 0x0 SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 ADD SLOAD DUP3 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x1519 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH2 0x1523 DUP2 PUSH2 0xB82 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x152E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP6 SWAP2 ADD TIMESTAMP LT ISZERO PUSH2 0x154F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x3 DUP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP2 SLOAD DUP2 DUP4 ADD SLOAD SWAP4 MLOAD PUSH1 0x2 DUP1 DUP6 ADD DUP1 SLOAD SWAP6 SWAP11 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND SWAP6 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 DUP4 SWAP3 DUP6 SWAP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP4 AND ISZERO PUSH2 0x100 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 AND DIV DUP1 ISZERO PUSH2 0x1641 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1616 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1641 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1624 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP ISZERO PUSH2 0x168C JUMPI PUSH1 0x40 MLOAD DUP6 SWAP1 PUSH32 0x33E13ECB54C3076D8E8BB8C2881800A4D972B792045FFAE98FDF46DF365FED75 SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH2 0x16E2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP6 SWAP1 PUSH32 0x526441BB6C1ABA3C9A4A6CA1D6545DA9C2333C8C48343EF398EB858D72B79236 SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH1 0x3 DUP5 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 SWAP1 SSTORE DUP2 MLOAD DUP4 DUP2 MSTORE SWAP2 MLOAD DUP5 SWAP3 PUSH32 0xB237AFE65F1514FD7EA3F923EA4FE792BDD07000A912B6CD1602A8E7F573C8D SWAP3 SWAP1 DUP3 SWAP1 SUB ADD SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO ISZERO PUSH2 0x1759 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x80 DUP2 ADD DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD DUP10 DUP2 MSTORE DUP4 DUP6 ADD DUP10 DUP2 MSTORE PUSH1 0x0 PUSH1 0x60 DUP7 ADD DUP2 SWAP1 MSTORE DUP8 DUP2 MSTORE DUP1 DUP5 MSTORE SWAP6 SWAP1 SWAP6 KECCAK256 DUP5 MLOAD DUP2 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP5 AND SWAP4 SWAP1 SWAP4 OR DUP4 SSTORE MLOAD PUSH1 0x1 DUP4 ADD SSTORE SWAP3 MLOAD DUP1 MLOAD SWAP5 SWAP7 POP SWAP2 SWAP4 SWAP1 SWAP3 PUSH2 0x17F1 SWAP3 PUSH1 0x2 DUP6 ADD SWAP3 SWAP2 ADD SWAP1 PUSH2 0x1890 JUMP JUMPDEST POP PUSH1 0x60 SWAP2 SWAP1 SWAP2 ADD MLOAD PUSH1 0x3 SWAP1 SWAP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x5 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE PUSH1 0x40 MLOAD DUP3 SWAP1 PUSH32 0xC0BA8FE4B176C1714197D43B9CC6BCF797A4A7461C5FE8D0EF6E184AE7601E51 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 SLOAD DUP2 DUP4 SSTORE DUP2 DUP2 GT ISZERO PUSH2 0x188B JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 PUSH2 0x188B SWAP2 DUP2 ADD SWAP1 DUP4 ADD PUSH2 0x190E JUMP JUMPDEST POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0x18D1 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x18FE JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x18FE JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x18FE JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x18E3 JUMP JUMPDEST POP PUSH2 0x190A SWAP3 SWAP2 POP PUSH2 0x190E JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0xE2C SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x190A JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x1914 JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 ORIGIN PUSH7 0x3DA11665281958 0xbf 0x4f DUP7 0xdf PUSH31 0x5A131DEA532FF7F9E56C9D822E0C0D68C98A00290000000000000000000000 ",
- "sourceMap": "815:3594:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2519:1:0;2507:9;:13;2503:61;;;2534:30;;;2554:9;2534:30;;;;2542:10;;2534:30;;;;;;;;;;2503:61;815:3594:1;936:23:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;936:23:0;;;;;;;;;;;;;;;;;;;;;;;;3711:460;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3711:460:0;;;;;;;3156:332:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3156:332:1;;;;;890:40:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;890:40:0;;;;;;;;;;;;;;;;;;;;;;;;;820:64;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;820:64:0;;;;;;;;;1009:29:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1009:29:1;;;;;;;;;;;;;;;;;;;;9136:319:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9136:319:0;;;;;;;;;;;3311:277;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3311:277:0;;;;;;;7304:337;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7304:337:0;;;;;2281:186:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2281:186:1;;;;;8622:252:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8622:252:0;;;;;765:49;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;765:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;765:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9539:115;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9539:115:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;9539:115:0;;;;;;;;;;;;;;;;;10757:676;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10757:676:0;;;;;;;;;;;;;;;9833:575;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9833:575:0;;;;;991:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;991:28:0;;;;4990:207;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4990:207:0;;;;;2573:459:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2573:459:1;;;;;5456:244:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5456:244:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5456:244:0;;-1:-1:-1;5456:244:0;;-1:-1:-1;;;;;;;5456:244:0;1045:47:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1045:47:1;;;;;217:41:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;217:41:0;;;;965:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;965:20:0;;;;4370:449;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4370:449:0;;;;;;;;;;;;3602:472:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3602:472:1;;;;;936:23:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;936:23:0;:::o;3711:460::-;3859:6;1186:10;1208:4;1186:27;1182:50;;1227:5;;;1182:50;1420:14;;;;;;;:7;:14;;;;;;3801:5;;1420:14;;1419:15;1415:38;;;1448:5;;;1415:38;3822:14;;;3839:5;3822:14;;;:7;:14;;;;;:22;;;;;;3839:5;-1:-1:-1;3854:170:0;3871:6;:13;:17;;3869:19;;3854:170;;;3924:5;3911:18;;:6;3918:1;3911:9;;;;;;;;;;;;;;;;;;;;;;:18;3907:117;;;3961:6;3968:13;;:17;;;;3961:25;;;;;;;;;;;;;;;;3949:6;:9;;3961:25;;;;;3956:1;;3949:9;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;4004:5;;3907:117;3890:3;;;;;3854:170;;;4033:6;:18;;;;;;;;;:::i;:::-;-1:-1:-1;4076:6:0;:13;4065:8;;:24;4061:74;;;4121:6;:13;4103:32;;:17;:32::i;:::-;4145:19;;;;;;;;;;;1242:1;3711:460;;:::o;3156:332:1:-;3239:10;1420:14:0;;;;:7;:14;;;;;;;;1419:15;1415:38;;;1448:5;;;1415:38;1694:28;;;;:13;:28;;;;;;;;3284:10:1;1694:35:0;;;;;;;;;3269:13:1;;3284:10;1694:35:0;;1693:36;1689:59;;;1743:5;;;1689:59;1976:12;:27;;;;;;;;;;:36;;;3316:13:1;;1976:36:0;;1972:59;;;2026:5;;;1972:59;3357:13:1;1165:26;1177:13;1165:11;:26::i;:::-;1164:27;1156:36;;;;;;3429:5;3386:28;;;:13;:28;;;;;;;;3415:10;3386:40;;;;;;;;:48;;;;;;3444:37;3400:13;;3444:37;;;2041:1:0;1758;1463;;3156:332:1;;:::o;890:40:0:-;;;;;;;;;;;;;;;:::o;820:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1009:29:1:-;;;;:::o;9136:319:0:-;9243:10;;9269:179;9286:16;;9284:1;:18;9269:179;;;9328:7;:36;;;;-1:-1:-1;9340:12:0;:15;;;;;;;;;;:24;;;;;9339:25;9328:36;:92;;;;9384:8;:36;;;;-1:-1:-1;9396:12:0;:15;;;;;;;;;;:24;;;;;9384:36;9321:127;;;9447:1;9438:10;;;;9321:127;9304:3;;9269:179;;;9136:319;;;;;:::o;3311:277::-;1186:10;1208:4;1186:27;1182:50;;1227:5;;;1182:50;1312:14;;;;;;;:7;:14;;;;;;3404:5;;1312:14;;1308:37;;;1340:5;;;1308:37;3427:5;2104:13;;;;2100:36;;;2131:5;;;2100:36;3459:6;:13;;;;3475:1;3459:17;3478:8;;256:2;2236:10;:28;:66;;;;2292:10;2280:9;:22;2236:66;:96;;;-1:-1:-1;2318:14:0;;2236:96;:127;;;-1:-1:-1;2348:15:0;;2236:127;2229:153;;;2377:5;;;2229:153;3502:14;;;;;;;:7;:14;;;;;;:21;;;;3519:4;3502:21;;;;;;3533:6;27:10:-1;;23:18;;;45:23;;3533:18:0;;;;;;;;;;;;3561:20;;;3502:14;3561:20;2146:1;;1355;1242;3311:277;:::o;7304:337::-;7394:4;;;7438:197;7455:6;:13;7453:15;;7438:197;;;7493:28;;;;:13;:28;;;;;7522:6;:9;;7493:28;;;7529:1;;7522:9;;;;;;;;;;;;;;;;;;;;7493:39;;;;;;;;;;;;;;;7489:71;;;7559:1;7550:10;;;;7489:71;7587:8;;7578:5;:17;7574:50;;;7620:4;7613:11;;;;7574:50;7470:3;;7438:197;;;7304:337;;;;;:::o;2281:186:1:-;1186:10:0;1208:4;1186:27;1182:50;;1227:5;;;1182:50;2378:17:1;:38;;;2426:34;;;;;;;;;;;;;;;;;2281:186;:::o;8622:252:0:-;8721:10;;8747:120;8764:6;:13;8762:15;;8747:120;;;8800:28;;;;:13;:28;;;;;8829:6;:9;;8800:28;;;8836:1;;8829:9;;;;;;;;;;;;;;;;;;;;8800:39;;;;;;;;;;;;;;;8796:71;;;8866:1;8857:10;;;;8796:71;8779:3;;8747:120;;;8622:252;;;;:::o;765:49::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;765:49:0;;;;;;;-1:-1:-1;;765:49:0;;;:::o;9539:115::-;9609:9;9641:6;9634:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9539:115;;:::o;10757:676::-;10882:22;10920:32;10993:10;11017:6;10966:16;;10955:28;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;10955:28:0;;10920:63;;11006:1;10993:14;;11040:1;11038:3;;11033:250;11045:16;;11043:1;:18;11033:250;;;11087:7;:36;;;;-1:-1:-1;11099:12:0;:15;;;;;;;;;;:24;;;;;11098:25;11087:36;:92;;;;11143:8;:36;;;;-1:-1:-1;11155:12:0;:15;;;;;;;;;;:24;;;;;11143:36;11080:203;;;11239:1;11211:18;11230:5;11211:25;;;;;;;;;;;;;;;;;;:29;11267:1;11258:10;;;;;11080:203;11063:3;;11033:250;;;11326:4;11321:2;:9;11310:21;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;11310:21:0;;11292:39;;11348:4;11346:6;;11341:85;11356:2;11354:1;:4;11341:85;;;11405:18;11424:1;11405:21;;;;;;;;;;;;;;;;;;11377:15;11397:4;11393:1;:8;11377:25;;;;;;;;;;;;;;;;;;:49;11360:3;;11341:85;;;10757:676;;;;;;;;;:::o;9833:575::-;9928:24;9968:34;10043:10;10067:6;10019;:13;;;;10005:28;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;10005:28:0;;9968:65;;10056:1;10043:14;;10090:1;10088:3;;10083:186;10095:6;:13;10093:15;;10083:186;;;10131:28;;;;:13;:28;;;;;10160:6;:9;;10131:28;;;10167:1;;10160:9;;;;;;;;;;;;;;;;;;;;10131:39;;;;;;;;;;;;;;;10127:142;;;10217:6;:9;;10224:1;;10217:9;;;;;;;;;;;;;;;;10190:24;;10217:9;;;;;10190:17;;10208:5;;10190:24;;;;;;:36;;;;:24;;;;;;;;;;:36;10253:1;10244:10;;;;;10127:142;10110:3;;10083:186;;;10309:5;10295:20;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;10295:20:0;;10278:37;;10332:1;10330:3;;10325:76;10337:5;10335:1;:7;10325:76;;;10381:17;10399:1;10381:20;;;;;;;;;;;;;;;;;;10361:14;10376:1;10361:17;;;;;;;;;;:40;;;;:17;;;;;;;;;;:40;10344:3;;10325:76;;;9833:575;;;;;;:::o;991:28::-;;;;:::o;4990:207::-;1186:10;1208:4;1186:27;1182:50;;1227:5;;;1182:50;5092:6;:13;5107:9;256:2;2236:28;;;:66;;;2292:10;2280:9;:22;2236:66;:96;;;-1:-1:-1;2318:14:0;;2236:96;:127;;;-1:-1:-1;2348:15:0;;2236:127;2229:153;;;2377:5;;;2229:153;5132:8;:20;;;5162:28;;;;;;;;;;;;;;;;;1242:1;;4990:207;:::o;2573:459:1:-;2656:10;1420:14:0;;;;:7;:14;;;;;;;;1419:15;1415:38;;;1448:5;;;1415:38;1538:12;:27;;;;;;;;;;:39;2694:13:1;;1538:39:0;;:44;1534:67;;;1596:5;;;1534:67;1843:28;;;;:13;:28;;;;;;;;2745:10:1;1843:35:0;;;;;;;;;2730:13:1;;2745:10;1843:35:0;;1839:58;;;1892:5;;;1839:58;2783:13:1;1165:26;1177:13;1165:11;:26::i;:::-;1164:27;1156:36;;;;;;2812:28;;;;2855:4;2812:28;;;;;;;;2841:10;2812:40;;;;;;;;:47;;;;;;;;;;2869:39;;2826:13;;2869:39;;;2922:26;2934:13;2922:11;:26::i;:::-;2918:108;;;2964:51;2984:13;2999:15;2964:19;:51::i;:::-;1907:1:0;1611;;1463;2573:459:1;;:::o;5456:244:0:-;5560:18;5610:40;5625:11;5638:5;5645:4;5610:14;:40::i;:::-;5594:56;;5660:33;5679:13;5660:18;:33::i;:::-;5456:244;;;;;:::o;1045:47:1:-;;;;;;;;;;;;;:::o;217:41:0:-;256:2;217:41;:::o;965:20::-;;;;:::o;4370:449::-;4541:6;1186:10;1208:4;1186:27;1182:50;;1227:5;;;1182:50;1420:14;;;;;;;:7;:14;;;;;;4479:5;;1420:14;;1419:15;1415:38;;;1448:5;;;1415:38;1312:14;;;;;;;:7;:14;;;;;;4512:8;;1312:14;;1308:37;;;1340:5;;;1308:37;4548:1;4541:8;;4536:149;4553:6;:13;4551:15;;4536:149;;;4602:5;4589:18;;:6;4596:1;4589:9;;;;;;;;;;;;;;;;;;;;;;:18;4585:100;;;4639:8;4627:6;4634:1;4627:9;;;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;4665:5;;4585:100;4568:3;;;;;4536:149;;;4694:14;;;;4711:5;4694:14;;;:7;:14;;;;;;:22;;;;;;;;;4726:17;;;;;;;;:24;;;;;4694:22;4726:24;;;;4760:19;;4694:14;;4760:19;;;4789:23;;;;;;;;;;;1463:1;1242;4370:449;;;:::o;3602:472:1:-;3788:22;1976:27:0;;;;;;;;;;:36;;;3685:13:1;;1976:36:0;;1972:59;;;2026:5;;;1972:59;3723:13:1;1278:26;1290:13;1278:11;:26::i;:::-;1270:35;;;;;;;;1443:17;;1408:32;;;;:17;:32;;;;;;3759:13;;1408:52;1389:15;:71;;1381:80;;;;;;3813:12;:27;;;;;;;;;;;;3850:11;;;:18;;;;3864:4;3850:18;;;;;;3882:14;;3908:8;;;;3882:44;;3918:7;;;;3882:44;;3813:27;;-1:-1:-1;3882:14:1;;;;;3908:8;3918:7;;3882:44;;;;3918:7;;3882:44;;;;;3850:18;3882:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3878:190;;;3940:24;;3950:13;;3940:24;;;;;3878:190;;;3993:31;;4010:13;;3993:31;;;;;4038:11;;;:19;;;;;;3878:190;1315:1;2041::0;3602:472:1;;;:::o;4184:223::-;4287:32;;;;:17;:32;;;;;;;;;:51;;;4348:52;;;;;;;4305:13;;4348:52;;;;;;;;;4184:223;;:::o;7974:451:0:-;8106:18;8076:11;2104:13;;;;2100:36;;;2131:5;;;2100:36;8156:16;;8212:140;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8212:140:0;;;;;;8182:27;;;;;;;;;;:170;;;;;;;;;;;;;;;-1:-1:-1;8182:170:0;;;;;;;8156:16;;-1:-1:-1;8212:140:0;;8182:27;;:170;;;;;;;;;;:::i;:::-;-1:-1:-1;8182:170:0;;;;;;;;;;;;;;;;;;;;;;;8362:16;:21;;-1:-1:-1;8362:21:0;;;8393:25;;8404:13;;8393:25;;-1:-1:-1;;8393:25:0;7974:451;;;;;;:::o;815:3594:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;815:3594:1;;;-1:-1:-1;815:3594:1;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;"
+ "object": "0x60806040526004361061013d5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663025e7c27811461017f578063173825d9146101c057806320ea8d86146101ee5780632f54bf6e146102065780633411c81c1461024857806337bd78a01461027957806354741525146102a05780637065cb48146102bf578063784547a7146102ed5780637ad28c51146103055780638b51d13f1461031d5780639ace38c214610335578063a0e67e2b1461040a578063a8abe69a1461046f578063b5dc40c314610494578063b77bf600146104ac578063ba51a6df146104c1578063c01a8c84146104d9578063c6427474146104f1578063d38f2d8214610567578063d74f8edd1461057f578063dc8452cd14610594578063e20056e6146105a9578063ee22610b146105dd575b600034111561017d5760408051348152905133917fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c919081900360200190a25b005b34801561018b57600080fd5b506101976004356105f5565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156101cc57600080fd5b5061017d73ffffffffffffffffffffffffffffffffffffffff6004351661062a565b3480156101fa57600080fd5b5061017d600435610881565b34801561021257600080fd5b5061023473ffffffffffffffffffffffffffffffffffffffff6004351661096e565b604080519115158252519081900360200190f35b34801561025457600080fd5b5061023460043573ffffffffffffffffffffffffffffffffffffffff60243516610983565b34801561028557600080fd5b5061028e6109a3565b60408051918252519081900360200190f35b3480156102ac57600080fd5b5061028e600435151560243515156109a9565b3480156102cb57600080fd5b5061017d73ffffffffffffffffffffffffffffffffffffffff60043516610a15565b3480156102f957600080fd5b50610234600435610b82565b34801561031157600080fd5b5061017d600435610c13565b34801561032957600080fd5b5061028e600435610c5a565b34801561034157600080fd5b5061034d600435610cd6565b604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018060200183151515158152602001828103825284818151815260200191508051906020019080838360005b838110156103cc5781810151838201526020016103b4565b50505050905090810190601f1680156103f95780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b34801561041657600080fd5b5061041f610dbf565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561045b578181015183820152602001610443565b505050509050019250505060405180910390f35b34801561047b57600080fd5b5061041f60043560243560443515156064351515610e2f565b3480156104a057600080fd5b5061041f600435610f68565b3480156104b857600080fd5b5061028e611115565b3480156104cd57600080fd5b5061017d60043561111b565b3480156104e557600080fd5b5061017d600435611192565b3480156104fd57600080fd5b50604080516020600460443581810135601f810184900484028501840190955284845261028e94823573ffffffffffffffffffffffffffffffffffffffff169460248035953695946064949201919081908401838280828437509497506112ac9650505050505050565b34801561057357600080fd5b5061028e6004356112cb565b34801561058b57600080fd5b5061028e6112dd565b3480156105a057600080fd5b5061028e6112e2565b3480156105b557600080fd5b5061017d73ffffffffffffffffffffffffffffffffffffffff600435811690602435166112e8565b3480156105e957600080fd5b5061017d6004356114f8565b600380548290811061060357fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b600033301461063857600080fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020526040902054829060ff16151561066e57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260026020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905591505b6003547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018210156107f1578273ffffffffffffffffffffffffffffffffffffffff1660038381548110151561070e57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614156107e657600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061076657fe5b6000918252602090912001546003805473ffffffffffffffffffffffffffffffffffffffff909216918490811061079957fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506107f1565b6001909101906106bc565b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01906108229082611867565b50600354600454111561083b5760035461083b9061111b565b60405173ffffffffffffffffffffffffffffffffffffffff8416907f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9090600090a2505050565b3360008181526002602052604090205460ff16151561089f57600080fd5b60008281526001602090815260408083203380855292529091205483919060ff1615156108cb57600080fd5b600084815260208190526040902060030154849060ff16156108ec57600080fd5b846108f681610b82565b1561090057600080fd5b600086815260016020908152604080832033808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555188927ff6a317157440607f36269043eb55f1287a5a19ba2216afeab88cd46cbcfb88e991a3505050505050565b60026020526000908152604090205460ff1681565b600160209081526000928352604080842090915290825290205460ff1681565b60065481565b6000805b600554811015610a0e578380156109d6575060008181526020819052604090206003015460ff16155b806109fa57508280156109fa575060008181526020819052604090206003015460ff165b15610a06576001820191505b6001016109ad565b5092915050565b333014610a2157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116600090815260026020526040902054819060ff1615610a5657600080fd5b8173ffffffffffffffffffffffffffffffffffffffff81161515610a7957600080fd5b6003805490506001016004546032821180610a9357508181115b80610a9c575080155b80610aa5575081155b15610aaf57600080fd5b73ffffffffffffffffffffffffffffffffffffffff851660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915560038054918201815583527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055517ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d9190a25050505050565b600080805b600354811015610c0c5760008481526001602052604081206003805491929184908110610bb057fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400190205460ff1615610bf1576001820191505b600454821415610c045760019250610c0c565b600101610b87565b5050919050565b333014610c1f57600080fd5b60068190556040805182815290517fd1c9101a34feff75cccef14a28785a0279cb0b49c1f321f21f5f422e746b43779181900360200190a150565b6000805b600354811015610cd05760008381526001602052604081206003805491929184908110610c8757fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400190205460ff1615610cc8576001820191505b600101610c5e565b50919050565b60006020818152918152604090819020805460018083015460028085018054875161010095821615959095027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691909104601f810188900488028401880190965285835273ffffffffffffffffffffffffffffffffffffffff90931695909491929190830182828015610dac5780601f10610d8157610100808354040283529160200191610dac565b820191906000526020600020905b815481529060010190602001808311610d8f57829003601f168201915b5050506003909301549192505060ff1684565b60606003805480602002602001604051908101604052809291908181526020018280548015610e2457602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610df9575b505050505090505b90565b606080600080600554604051908082528060200260200182016040528015610e61578160200160208202803883390190505b50925060009150600090505b600554811015610ee857858015610e96575060008181526020819052604090206003015460ff16155b80610eba5750848015610eba575060008181526020819052604090206003015460ff165b15610ee057808383815181101515610ece57fe5b60209081029091010152600191909101905b600101610e6d565b878703604051908082528060200260200182016040528015610f14578160200160208202803883390190505b5093508790505b86811015610f5d578281815181101515610f3157fe5b9060200190602002015184898303815181101515610f4b57fe5b60209081029091010152600101610f1b565b505050949350505050565b606080600080600380549050604051908082528060200260200182016040528015610f9d578160200160208202803883390190505b50925060009150600090505b6003548110156110815760008581526001602052604081206003805491929184908110610fd257fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400190205460ff161561107957600380548290811061101a57fe5b600091825260209091200154835173ffffffffffffffffffffffffffffffffffffffff9091169084908490811061104d57fe5b73ffffffffffffffffffffffffffffffffffffffff909216602092830290910190910152600191909101905b600101610fa9565b816040519080825280602002602001820160405280156110ab578160200160208202803883390190505b509350600090505b8181101561110d5782818151811015156110c957fe5b9060200190602002015184828151811015156110e157fe5b73ffffffffffffffffffffffffffffffffffffffff9092166020928302909101909101526001016110b3565b505050919050565b60055481565b33301461112757600080fd5b60035481603282118061113957508181115b80611142575080155b8061114b575081155b1561115557600080fd5b60048390556040805184815290517fa3f1ee9126a074d9326c682f561767f710e927faa811f7a99829d49dc421797a9181900360200190a1505050565b3360008181526002602052604090205460ff1615156111b057600080fd5b600082815260208190526040902054829073ffffffffffffffffffffffffffffffffffffffff1615156111e257600080fd5b60008381526001602090815260408083203380855292529091205484919060ff161561120d57600080fd5b8461121781610b82565b1561122157600080fd5b600086815260016020818152604080842033808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909317909255905188927f4a504a94899432a9846e1aa406dceb1bcfd538bb839071d49d1e5e23f5be30ef91a361129586610b82565b156112a4576112a486426116e9565b505050505050565b60006112b9848484611734565b90506112c481611192565b9392505050565b60076020526000908152604090205481565b603281565b60045481565b60003330146112f657600080fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260026020526040902054839060ff16151561132c57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260026020526040902054839060ff161561136157600080fd5b600092505b600354831015611426578473ffffffffffffffffffffffffffffffffffffffff1660038481548110151561139657fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561141b57836003848154811015156113ce57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611426565b600190920191611366565b73ffffffffffffffffffffffffffffffffffffffff80861660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090811690915593881682528082208054909416600117909355915190917f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9091a260405173ffffffffffffffffffffffffffffffffffffffff8516907ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d90600090a25050505050565b600081815260208190526040812060030154829060ff161561151957600080fd5b8261152381610b82565b151561152e57600080fd5b60065460008581526007602052604090205485910142101561154f57600080fd5b600085815260208190526040908190206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117909155815481830154935160028085018054959a5073ffffffffffffffffffffffffffffffffffffffff909316959492939192839285927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9183161561010002919091019091160480156116415780601f1061161657610100808354040283529160200191611641565b820191906000526020600020905b81548152906001019060200180831161162457829003601f168201915b505091505060006040518083038185875af1925050501561168c5760405185907f33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed7590600090a26116e2565b60405185907f526441bb6c1aba3c9a4a6ca1d6545da9c2333c8c48343ef398eb858d72b7923690600090a26003840180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b5050505050565b6000828152600760209081526040918290208390558151838152915184927f0b237afe65f1514fd7ea3f923ea4fe792bdd07000a912b6cd1602a8e7f573c8d92908290030190a25050565b60008373ffffffffffffffffffffffffffffffffffffffff8116151561175957600080fd5b6005546040805160808101825273ffffffffffffffffffffffffffffffffffffffff8881168252602080830189815283850189815260006060860181905287815280845295909520845181547fffffffffffffffffffffffff000000000000000000000000000000000000000016941693909317835551600183015592518051949650919390926117f1926002850192910190611890565b5060609190910151600390910180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905560058054600101905560405182907fc0ba8fe4b176c1714197d43b9cc6bcf797a4a7461c5fe8d0ef6e184ae7601e5190600090a2509392505050565b81548183558181111561188b5760008381526020902061188b91810190830161190e565b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106118d157805160ff19168380011785556118fe565b828001600101855582156118fe579182015b828111156118fe5782518255916020019190600101906118e3565b5061190a92915061190e565b5090565b610e2c91905b8082111561190a57600081556001016119145600a165627a7a72305820c3cbdcf5873ca37a59e5bce3ab44fcb6c9e7906844f91bde08e3829c3403baa40029",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x13D JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x25E7C27 DUP2 EQ PUSH2 0x17F JUMPI DUP1 PUSH4 0x173825D9 EQ PUSH2 0x1C0 JUMPI DUP1 PUSH4 0x20EA8D86 EQ PUSH2 0x1EE JUMPI DUP1 PUSH4 0x2F54BF6E EQ PUSH2 0x206 JUMPI DUP1 PUSH4 0x3411C81C EQ PUSH2 0x248 JUMPI DUP1 PUSH4 0x37BD78A0 EQ PUSH2 0x279 JUMPI DUP1 PUSH4 0x54741525 EQ PUSH2 0x2A0 JUMPI DUP1 PUSH4 0x7065CB48 EQ PUSH2 0x2BF JUMPI DUP1 PUSH4 0x784547A7 EQ PUSH2 0x2ED JUMPI DUP1 PUSH4 0x7AD28C51 EQ PUSH2 0x305 JUMPI DUP1 PUSH4 0x8B51D13F EQ PUSH2 0x31D JUMPI DUP1 PUSH4 0x9ACE38C2 EQ PUSH2 0x335 JUMPI DUP1 PUSH4 0xA0E67E2B EQ PUSH2 0x40A JUMPI DUP1 PUSH4 0xA8ABE69A EQ PUSH2 0x46F JUMPI DUP1 PUSH4 0xB5DC40C3 EQ PUSH2 0x494 JUMPI DUP1 PUSH4 0xB77BF600 EQ PUSH2 0x4AC JUMPI DUP1 PUSH4 0xBA51A6DF EQ PUSH2 0x4C1 JUMPI DUP1 PUSH4 0xC01A8C84 EQ PUSH2 0x4D9 JUMPI DUP1 PUSH4 0xC6427474 EQ PUSH2 0x4F1 JUMPI DUP1 PUSH4 0xD38F2D82 EQ PUSH2 0x567 JUMPI DUP1 PUSH4 0xD74F8EDD EQ PUSH2 0x57F JUMPI DUP1 PUSH4 0xDC8452CD EQ PUSH2 0x594 JUMPI DUP1 PUSH4 0xE20056E6 EQ PUSH2 0x5A9 JUMPI DUP1 PUSH4 0xEE22610B EQ PUSH2 0x5DD JUMPI JUMPDEST PUSH1 0x0 CALLVALUE GT ISZERO PUSH2 0x17D JUMPI PUSH1 0x40 DUP1 MLOAD CALLVALUE DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0xE1FFFCC4923D04B559F4D29A8BFC6CDA04EB5B0D3C460751C2402C5C5CC9109C SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x18B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x197 PUSH1 0x4 CALLDATALOAD PUSH2 0x5F5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17D PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x62A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17D PUSH1 0x4 CALLDATALOAD PUSH2 0x881 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x212 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x234 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x96E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x254 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x234 PUSH1 0x4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD AND PUSH2 0x983 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x285 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28E PUSH2 0x9A3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28E PUSH1 0x4 CALLDATALOAD ISZERO ISZERO PUSH1 0x24 CALLDATALOAD ISZERO ISZERO PUSH2 0x9A9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17D PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0xA15 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x234 PUSH1 0x4 CALLDATALOAD PUSH2 0xB82 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x311 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17D PUSH1 0x4 CALLDATALOAD PUSH2 0xC13 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x329 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28E PUSH1 0x4 CALLDATALOAD PUSH2 0xC5A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x341 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x34D PUSH1 0x4 CALLDATALOAD PUSH2 0xCD6 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 ISZERO ISZERO ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3CC JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3B4 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x3F9 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 SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x416 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x41F PUSH2 0xDBF 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 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x45B JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x443 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x47B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x41F PUSH1 0x4 CALLDATALOAD PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD ISZERO ISZERO PUSH1 0x64 CALLDATALOAD ISZERO ISZERO PUSH2 0xE2F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x41F PUSH1 0x4 CALLDATALOAD PUSH2 0xF68 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28E PUSH2 0x1115 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17D PUSH1 0x4 CALLDATALOAD PUSH2 0x111B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17D PUSH1 0x4 CALLDATALOAD PUSH2 0x1192 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 PUSH1 0x44 CALLDATALOAD DUP2 DUP2 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x28E SWAP5 DUP3 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP5 PUSH1 0x24 DUP1 CALLDATALOAD SWAP6 CALLDATASIZE SWAP6 SWAP5 PUSH1 0x64 SWAP5 SWAP3 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x12AC SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x573 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28E PUSH1 0x4 CALLDATALOAD PUSH2 0x12CB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x58B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28E PUSH2 0x12DD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x28E PUSH2 0x12E2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17D PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH2 0x12E8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17D PUSH1 0x4 CALLDATALOAD PUSH2 0x14F8 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD DUP3 SWAP1 DUP2 LT PUSH2 0x603 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x0 CALLER ADDRESS EQ PUSH2 0x638 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x66E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE SWAP2 POP JUMPDEST PUSH1 0x3 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP3 LT ISZERO PUSH2 0x7F1 JUMPI DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x3 DUP4 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x70E JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x7E6 JUMPI PUSH1 0x3 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0x766 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x3 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x799 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0x7F1 JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x6BC JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 PUSH2 0x822 SWAP1 DUP3 PUSH2 0x1867 JUMP JUMPDEST POP PUSH1 0x3 SLOAD PUSH1 0x4 SLOAD GT ISZERO PUSH2 0x83B JUMPI PUSH1 0x3 SLOAD PUSH2 0x83B SWAP1 PUSH2 0x111B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH32 0x8001553A916EF2F495D26A907CC54D96ED840D7BDA71E73194BF5A9DF7A76B90 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x89F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD DUP4 SWAP2 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x8CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD DUP5 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x8EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 PUSH2 0x8F6 DUP2 PUSH2 0xB82 JUMP JUMPDEST ISZERO PUSH2 0x900 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE MLOAD DUP9 SWAP3 PUSH32 0xF6A317157440607F36269043EB55F1287A5A19BA2216AFEAB88CD46CBCFB88E9 SWAP2 LOG3 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x6 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST PUSH1 0x5 SLOAD DUP2 LT ISZERO PUSH2 0xA0E JUMPI DUP4 DUP1 ISZERO PUSH2 0x9D6 JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND ISZERO JUMPDEST DUP1 PUSH2 0x9FA JUMPI POP DUP3 DUP1 ISZERO PUSH2 0x9FA JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND JUMPDEST ISZERO PUSH2 0xA06 JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x1 ADD PUSH2 0x9AD JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0xA21 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0xA56 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO ISZERO PUSH2 0xA79 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3 DUP1 SLOAD SWAP1 POP PUSH1 0x1 ADD PUSH1 0x4 SLOAD PUSH1 0x32 DUP3 GT DUP1 PUSH2 0xA93 JUMPI POP DUP2 DUP2 GT JUMPDEST DUP1 PUSH2 0xA9C JUMPI POP DUP1 ISZERO JUMPDEST DUP1 PUSH2 0xAA5 JUMPI POP DUP2 ISZERO JUMPDEST ISZERO PUSH2 0xAAF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x3 DUP1 SLOAD SWAP2 DUP3 ADD DUP2 SSTORE DUP4 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND DUP5 OR SWAP1 SSTORE MLOAD PUSH32 0xF39E6E1EB0EDCF53C221607B54B00CD28F3196FED0A24994DC308B8F611B682D SWAP2 SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 JUMPDEST PUSH1 0x3 SLOAD DUP2 LT ISZERO PUSH2 0xC0C JUMPI PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 DUP1 SLOAD SWAP2 SWAP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0xBB0 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xBF1 JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x4 SLOAD DUP3 EQ ISZERO PUSH2 0xC04 JUMPI PUSH1 0x1 SWAP3 POP PUSH2 0xC0C JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0xB87 JUMP JUMPDEST POP POP SWAP2 SWAP1 POP JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0xC1F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x6 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xD1C9101A34FEFF75CCCEF14A28785A0279CB0B49C1F321F21F5F422E746B4377 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST PUSH1 0x3 SLOAD DUP2 LT ISZERO PUSH2 0xCD0 JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 DUP1 SLOAD SWAP2 SWAP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0xC87 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xCC8 JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x1 ADD PUSH2 0xC5E JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP2 DUP2 MSTORE SWAP2 DUP2 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP1 DUP4 ADD SLOAD PUSH1 0x2 DUP1 DUP6 ADD DUP1 SLOAD DUP8 MLOAD PUSH2 0x100 SWAP6 DUP3 AND ISZERO SWAP6 SWAP1 SWAP6 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD AND SWAP2 SWAP1 SWAP2 DIV PUSH1 0x1F DUP2 ADD DUP9 SWAP1 DIV DUP9 MUL DUP5 ADD DUP9 ADD SWAP1 SWAP7 MSTORE DUP6 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND SWAP6 SWAP1 SWAP5 SWAP2 SWAP3 SWAP2 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xDAC JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xD81 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xDAC JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xD8F JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP PUSH1 0x3 SWAP1 SWAP4 ADD SLOAD SWAP2 SWAP3 POP POP PUSH1 0xFF AND DUP5 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0xE24 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xDF9 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x0 DUP1 PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xE61 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 SWAP2 POP PUSH1 0x0 SWAP1 POP JUMPDEST PUSH1 0x5 SLOAD DUP2 LT ISZERO PUSH2 0xEE8 JUMPI DUP6 DUP1 ISZERO PUSH2 0xE96 JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND ISZERO JUMPDEST DUP1 PUSH2 0xEBA JUMPI POP DUP5 DUP1 ISZERO PUSH2 0xEBA JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND JUMPDEST ISZERO PUSH2 0xEE0 JUMPI DUP1 DUP4 DUP4 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xECE JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SWAP1 JUMPDEST PUSH1 0x1 ADD PUSH2 0xE6D JUMP JUMPDEST DUP8 DUP8 SUB PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xF14 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP DUP8 SWAP1 POP JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0xF5D JUMPI DUP3 DUP2 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xF31 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP5 DUP10 DUP4 SUB DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xF4B JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0xF1B JUMP JUMPDEST POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x0 DUP1 PUSH1 0x3 DUP1 SLOAD SWAP1 POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xF9D JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 SWAP2 POP PUSH1 0x0 SWAP1 POP JUMPDEST PUSH1 0x3 SLOAD DUP2 LT ISZERO PUSH2 0x1081 JUMPI PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 DUP1 SLOAD SWAP2 SWAP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0xFD2 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1079 JUMPI PUSH1 0x3 DUP1 SLOAD DUP3 SWAP1 DUP2 LT PUSH2 0x101A JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 DUP5 SWAP1 DUP5 SWAP1 DUP2 LT PUSH2 0x104D JUMPI INVALID JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SWAP1 JUMPDEST PUSH1 0x1 ADD PUSH2 0xFA9 JUMP JUMPDEST DUP2 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x10AB JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP PUSH1 0x0 SWAP1 POP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x110D JUMPI DUP3 DUP2 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x10C9 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP5 DUP3 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x10E1 JUMPI INVALID JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 ADD PUSH2 0x10B3 JUMP JUMPDEST POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0x1127 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3 SLOAD DUP2 PUSH1 0x32 DUP3 GT DUP1 PUSH2 0x1139 JUMPI POP DUP2 DUP2 GT JUMPDEST DUP1 PUSH2 0x1142 JUMPI POP DUP1 ISZERO JUMPDEST DUP1 PUSH2 0x114B JUMPI POP DUP2 ISZERO JUMPDEST ISZERO PUSH2 0x1155 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x4 DUP4 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xA3F1EE9126A074D9326C682F561767F710E927FAA811F7A99829D49DC421797A SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x11B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO ISZERO PUSH2 0x11E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD DUP5 SWAP2 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x120D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 PUSH2 0x1217 DUP2 PUSH2 0xB82 JUMP JUMPDEST ISZERO PUSH2 0x1221 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 CALLER DUP1 DUP7 MSTORE SWAP3 MSTORE DUP1 DUP5 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SWAP4 OR SWAP1 SWAP3 SSTORE SWAP1 MLOAD DUP9 SWAP3 PUSH32 0x4A504A94899432A9846E1AA406DCEB1BCFD538BB839071D49D1E5E23F5BE30EF SWAP2 LOG3 PUSH2 0x1295 DUP7 PUSH2 0xB82 JUMP JUMPDEST ISZERO PUSH2 0x12A4 JUMPI PUSH2 0x12A4 DUP7 TIMESTAMP PUSH2 0x16E9 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x12B9 DUP5 DUP5 DUP5 PUSH2 0x1734 JUMP JUMPDEST SWAP1 POP PUSH2 0x12C4 DUP2 PUSH2 0x1192 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x32 DUP2 JUMP JUMPDEST PUSH1 0x4 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 CALLER ADDRESS EQ PUSH2 0x12F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x132C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x1361 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP3 POP JUMPDEST PUSH1 0x3 SLOAD DUP4 LT ISZERO PUSH2 0x1426 JUMPI DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x3 DUP5 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1396 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x141B JUMPI DUP4 PUSH1 0x3 DUP5 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x13CE JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0x1426 JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 PUSH2 0x1366 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 SWAP1 DUP2 AND SWAP1 SWAP2 SSTORE SWAP4 DUP9 AND DUP3 MSTORE DUP1 DUP3 KECCAK256 DUP1 SLOAD SWAP1 SWAP5 AND PUSH1 0x1 OR SWAP1 SWAP4 SSTORE SWAP2 MLOAD SWAP1 SWAP2 PUSH32 0x8001553A916EF2F495D26A907CC54D96ED840D7BDA71E73194BF5A9DF7A76B90 SWAP2 LOG2 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP1 PUSH32 0xF39E6E1EB0EDCF53C221607B54B00CD28F3196FED0A24994DC308B8F611B682D SWAP1 PUSH1 0x0 SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 ADD SLOAD DUP3 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x1519 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH2 0x1523 DUP2 PUSH2 0xB82 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x152E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP6 SWAP2 ADD TIMESTAMP LT ISZERO PUSH2 0x154F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x3 DUP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP2 SLOAD DUP2 DUP4 ADD SLOAD SWAP4 MLOAD PUSH1 0x2 DUP1 DUP6 ADD DUP1 SLOAD SWAP6 SWAP11 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND SWAP6 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 DUP4 SWAP3 DUP6 SWAP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP4 AND ISZERO PUSH2 0x100 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 AND DIV DUP1 ISZERO PUSH2 0x1641 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1616 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1641 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1624 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP ISZERO PUSH2 0x168C JUMPI PUSH1 0x40 MLOAD DUP6 SWAP1 PUSH32 0x33E13ECB54C3076D8E8BB8C2881800A4D972B792045FFAE98FDF46DF365FED75 SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH2 0x16E2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP6 SWAP1 PUSH32 0x526441BB6C1ABA3C9A4A6CA1D6545DA9C2333C8C48343EF398EB858D72B79236 SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH1 0x3 DUP5 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 SWAP1 SSTORE DUP2 MLOAD DUP4 DUP2 MSTORE SWAP2 MLOAD DUP5 SWAP3 PUSH32 0xB237AFE65F1514FD7EA3F923EA4FE792BDD07000A912B6CD1602A8E7F573C8D SWAP3 SWAP1 DUP3 SWAP1 SUB ADD SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO ISZERO PUSH2 0x1759 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x80 DUP2 ADD DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD DUP10 DUP2 MSTORE DUP4 DUP6 ADD DUP10 DUP2 MSTORE PUSH1 0x0 PUSH1 0x60 DUP7 ADD DUP2 SWAP1 MSTORE DUP8 DUP2 MSTORE DUP1 DUP5 MSTORE SWAP6 SWAP1 SWAP6 KECCAK256 DUP5 MLOAD DUP2 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP5 AND SWAP4 SWAP1 SWAP4 OR DUP4 SSTORE MLOAD PUSH1 0x1 DUP4 ADD SSTORE SWAP3 MLOAD DUP1 MLOAD SWAP5 SWAP7 POP SWAP2 SWAP4 SWAP1 SWAP3 PUSH2 0x17F1 SWAP3 PUSH1 0x2 DUP6 ADD SWAP3 SWAP2 ADD SWAP1 PUSH2 0x1890 JUMP JUMPDEST POP PUSH1 0x60 SWAP2 SWAP1 SWAP2 ADD MLOAD PUSH1 0x3 SWAP1 SWAP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x5 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE PUSH1 0x40 MLOAD DUP3 SWAP1 PUSH32 0xC0BA8FE4B176C1714197D43B9CC6BCF797A4A7461C5FE8D0EF6E184AE7601E51 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 SLOAD DUP2 DUP4 SSTORE DUP2 DUP2 GT ISZERO PUSH2 0x188B JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 PUSH2 0x188B SWAP2 DUP2 ADD SWAP1 DUP4 ADD PUSH2 0x190E JUMP JUMPDEST POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0x18D1 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x18FE JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x18FE JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x18FE JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x18E3 JUMP JUMPDEST POP PUSH2 0x190A SWAP3 SWAP2 POP PUSH2 0x190E JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0xE2C SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x190A JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x1914 JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 0xc3 0xcb 0xdc 0xf5 DUP8 EXTCODECOPY LOG3 PUSH27 0x59E5BCE3AB44FCB6C9E7906844F91BDE08E3829C3403BAA4002900 ",
+ "sourceMap": "835:3594:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2539:1:0;2527:9;:13;2523:61;;;2554:30;;;2574:9;2554:30;;;;2562:10;;2554:30;;;;;;;;;;2523:61;835:3594:1;956:23:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;956:23:0;;;;;;;;;;;;;;;;;;;;;;;;3731:460;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3731:460:0;;;;;;;3176:332:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3176:332:1;;;;;910:40:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;910:40:0;;;;;;;;;;;;;;;;;;;;;;;;;840:64;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;840:64:0;;;;;;;;;1029:29:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1029:29:1;;;;;;;;;;;;;;;;;;;;9156:319:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9156:319:0;;;;;;;;;;;3331:277;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3331:277:0;;;;;;;7324:337;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7324:337:0;;;;;2301:186:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2301:186:1;;;;;8642:252:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8642:252:0;;;;;785:49;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;785:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;785:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9559:115;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9559:115:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;9559:115:0;;;;;;;;;;;;;;;;;10777:676;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10777:676:0;;;;;;;;;;;;;;;9853:575;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9853:575:0;;;;;1011:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1011:28:0;;;;5010:207;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5010:207:0;;;;;2593:459:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2593:459:1;;;;;5476:244:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5476:244:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5476:244:0;;-1:-1:-1;5476:244:0;;-1:-1:-1;;;;;;;5476:244:0;1065:47:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1065:47:1;;;;;237:41:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;237:41:0;;;;985:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;985:20:0;;;;4390:449;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4390:449:0;;;;;;;;;;;;3622:472:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3622:472:1;;;;;956:23:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;956:23:0;:::o;3731:460::-;3879:6;1206:10;1228:4;1206:27;1202:50;;1247:5;;;1202:50;1440:14;;;;;;;:7;:14;;;;;;3821:5;;1440:14;;1439:15;1435:38;;;1468:5;;;1435:38;3842:14;;;3859:5;3842:14;;;:7;:14;;;;;:22;;;;;;3859:5;-1:-1:-1;3874:170:0;3891:6;:13;:17;;3889:19;;3874:170;;;3944:5;3931:18;;:6;3938:1;3931:9;;;;;;;;;;;;;;;;;;;;;;:18;3927:117;;;3981:6;3988:13;;:17;;;;3981:25;;;;;;;;;;;;;;;;3969:6;:9;;3981:25;;;;;3976:1;;3969:9;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;4024:5;;3927:117;3910:3;;;;;3874:170;;;4053:6;:18;;;;;;;;;:::i;:::-;-1:-1:-1;4096:6:0;:13;4085:8;;:24;4081:74;;;4141:6;:13;4123:32;;:17;:32::i;:::-;4165:19;;;;;;;;;;;1262:1;3731:460;;:::o;3176:332:1:-;3259:10;1440:14:0;;;;:7;:14;;;;;;;;1439:15;1435:38;;;1468:5;;;1435:38;1714:28;;;;:13;:28;;;;;;;;3304:10:1;1714:35:0;;;;;;;;;3289:13:1;;3304:10;1714:35:0;;1713:36;1709:59;;;1763:5;;;1709:59;1996:12;:27;;;;;;;;;;:36;;;3336:13:1;;1996:36:0;;1992:59;;;2046:5;;;1992:59;3377:13:1;1185:26;1197:13;1185:11;:26::i;:::-;1184:27;1176:36;;;;;;3449:5;3406:28;;;:13;:28;;;;;;;;3435:10;3406:40;;;;;;;;:48;;;;;;3464:37;3420:13;;3464:37;;;2061:1:0;1778;1483;;3176:332:1;;:::o;910:40:0:-;;;;;;;;;;;;;;;:::o;840:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1029:29:1:-;;;;:::o;9156:319:0:-;9263:10;;9289:179;9306:16;;9304:1;:18;9289:179;;;9348:7;:36;;;;-1:-1:-1;9360:12:0;:15;;;;;;;;;;:24;;;;;9359:25;9348:36;:92;;;;9404:8;:36;;;;-1:-1:-1;9416:12:0;:15;;;;;;;;;;:24;;;;;9404:36;9341:127;;;9467:1;9458:10;;;;9341:127;9324:3;;9289:179;;;9156:319;;;;;:::o;3331:277::-;1206:10;1228:4;1206:27;1202:50;;1247:5;;;1202:50;1332:14;;;;;;;:7;:14;;;;;;3424:5;;1332:14;;1328:37;;;1360:5;;;1328:37;3447:5;2124:13;;;;2120:36;;;2151:5;;;2120:36;3479:6;:13;;;;3495:1;3479:17;3498:8;;276:2;2256:10;:28;:66;;;;2312:10;2300:9;:22;2256:66;:96;;;-1:-1:-1;2338:14:0;;2256:96;:127;;;-1:-1:-1;2368:15:0;;2256:127;2249:153;;;2397:5;;;2249:153;3522:14;;;;;;;:7;:14;;;;;;:21;;;;3539:4;3522:21;;;;;;3553:6;27:10:-1;;23:18;;;45:23;;3553:18:0;;;;;;;;;;;;3581:20;;;3522:14;3581:20;2166:1;;1375;1262;3331:277;:::o;7324:337::-;7414:4;;;7458:197;7475:6;:13;7473:15;;7458:197;;;7513:28;;;;:13;:28;;;;;7542:6;:9;;7513:28;;;7549:1;;7542:9;;;;;;;;;;;;;;;;;;;;7513:39;;;;;;;;;;;;;;;7509:71;;;7579:1;7570:10;;;;7509:71;7607:8;;7598:5;:17;7594:50;;;7640:4;7633:11;;;;7594:50;7490:3;;7458:197;;;7324:337;;;;;:::o;2301:186:1:-;1206:10:0;1228:4;1206:27;1202:50;;1247:5;;;1202:50;2398:17:1;:38;;;2446:34;;;;;;;;;;;;;;;;;2301:186;:::o;8642:252:0:-;8741:10;;8767:120;8784:6;:13;8782:15;;8767:120;;;8820:28;;;;:13;:28;;;;;8849:6;:9;;8820:28;;;8856:1;;8849:9;;;;;;;;;;;;;;;;;;;;8820:39;;;;;;;;;;;;;;;8816:71;;;8886:1;8877:10;;;;8816:71;8799:3;;8767:120;;;8642:252;;;;:::o;785:49::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;785:49:0;;;;;;;-1:-1:-1;;785:49:0;;;:::o;9559:115::-;9629:9;9661:6;9654:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9559:115;;:::o;10777:676::-;10902:22;10940:32;11013:10;11037:6;10986:16;;10975:28;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;10975:28:0;;10940:63;;11026:1;11013:14;;11060:1;11058:3;;11053:250;11065:16;;11063:1;:18;11053:250;;;11107:7;:36;;;;-1:-1:-1;11119:12:0;:15;;;;;;;;;;:24;;;;;11118:25;11107:36;:92;;;;11163:8;:36;;;;-1:-1:-1;11175:12:0;:15;;;;;;;;;;:24;;;;;11163:36;11100:203;;;11259:1;11231:18;11250:5;11231:25;;;;;;;;;;;;;;;;;;:29;11287:1;11278:10;;;;;11100:203;11083:3;;11053:250;;;11346:4;11341:2;:9;11330:21;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;11330:21:0;;11312:39;;11368:4;11366:6;;11361:85;11376:2;11374:1;:4;11361:85;;;11425:18;11444:1;11425:21;;;;;;;;;;;;;;;;;;11397:15;11417:4;11413:1;:8;11397:25;;;;;;;;;;;;;;;;;;:49;11380:3;;11361:85;;;10777:676;;;;;;;;;:::o;9853:575::-;9948:24;9988:34;10063:10;10087:6;10039;:13;;;;10025:28;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;10025:28:0;;9988:65;;10076:1;10063:14;;10110:1;10108:3;;10103:186;10115:6;:13;10113:15;;10103:186;;;10151:28;;;;:13;:28;;;;;10180:6;:9;;10151:28;;;10187:1;;10180:9;;;;;;;;;;;;;;;;;;;;10151:39;;;;;;;;;;;;;;;10147:142;;;10237:6;:9;;10244:1;;10237:9;;;;;;;;;;;;;;;;10210:24;;10237:9;;;;;10210:17;;10228:5;;10210:24;;;;;;:36;;;;:24;;;;;;;;;;:36;10273:1;10264:10;;;;;10147:142;10130:3;;10103:186;;;10329:5;10315:20;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;10315:20:0;;10298:37;;10352:1;10350:3;;10345:76;10357:5;10355:1;:7;10345:76;;;10401:17;10419:1;10401:20;;;;;;;;;;;;;;;;;;10381:14;10396:1;10381:17;;;;;;;;;;:40;;;;:17;;;;;;;;;;:40;10364:3;;10345:76;;;9853:575;;;;;;:::o;1011:28::-;;;;:::o;5010:207::-;1206:10;1228:4;1206:27;1202:50;;1247:5;;;1202:50;5112:6;:13;5127:9;276:2;2256:28;;;:66;;;2312:10;2300:9;:22;2256:66;:96;;;-1:-1:-1;2338:14:0;;2256:96;:127;;;-1:-1:-1;2368:15:0;;2256:127;2249:153;;;2397:5;;;2249:153;5152:8;:20;;;5182:28;;;;;;;;;;;;;;;;;1262:1;;5010:207;:::o;2593:459:1:-;2676:10;1440:14:0;;;;:7;:14;;;;;;;;1439:15;1435:38;;;1468:5;;;1435:38;1558:12;:27;;;;;;;;;;:39;2714:13:1;;1558:39:0;;:44;1554:67;;;1616:5;;;1554:67;1863:28;;;;:13;:28;;;;;;;;2765:10:1;1863:35:0;;;;;;;;;2750:13:1;;2765:10;1863:35:0;;1859:58;;;1912:5;;;1859:58;2803:13:1;1185:26;1197:13;1185:11;:26::i;:::-;1184:27;1176:36;;;;;;2832:28;;;;2875:4;2832:28;;;;;;;;2861:10;2832:40;;;;;;;;:47;;;;;;;;;;2889:39;;2846:13;;2889:39;;;2942:26;2954:13;2942:11;:26::i;:::-;2938:108;;;2984:51;3004:13;3019:15;2984:19;:51::i;:::-;1927:1:0;1631;;1483;2593:459:1;;:::o;5476:244:0:-;5580:18;5630:40;5645:11;5658:5;5665:4;5630:14;:40::i;:::-;5614:56;;5680:33;5699:13;5680:18;:33::i;:::-;5476:244;;;;;:::o;1065:47:1:-;;;;;;;;;;;;;:::o;237:41:0:-;276:2;237:41;:::o;985:20::-;;;;:::o;4390:449::-;4561:6;1206:10;1228:4;1206:27;1202:50;;1247:5;;;1202:50;1440:14;;;;;;;:7;:14;;;;;;4499:5;;1440:14;;1439:15;1435:38;;;1468:5;;;1435:38;1332:14;;;;;;;:7;:14;;;;;;4532:8;;1332:14;;1328:37;;;1360:5;;;1328:37;4568:1;4561:8;;4556:149;4573:6;:13;4571:15;;4556:149;;;4622:5;4609:18;;:6;4616:1;4609:9;;;;;;;;;;;;;;;;;;;;;;:18;4605:100;;;4659:8;4647:6;4654:1;4647:9;;;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;4685:5;;4605:100;4588:3;;;;;4556:149;;;4714:14;;;;4731:5;4714:14;;;:7;:14;;;;;;:22;;;;;;;;;4746:17;;;;;;;;:24;;;;;4714:22;4746:24;;;;4780:19;;4714:14;;4780:19;;;4809:23;;;;;;;;;;;1483:1;1262;4390:449;;;:::o;3622:472:1:-;3808:22;1996:27:0;;;;;;;;;;:36;;;3705:13:1;;1996:36:0;;1992:59;;;2046:5;;;1992:59;3743:13:1;1298:26;1310:13;1298:11;:26::i;:::-;1290:35;;;;;;;;1463:17;;1428:32;;;;:17;:32;;;;;;3779:13;;1428:52;1409:15;:71;;1401:80;;;;;;3833:12;:27;;;;;;;;;;;;3870:11;;;:18;;;;3884:4;3870:18;;;;;;3902:14;;3928:8;;;;3902:44;;3938:7;;;;3902:44;;3833:27;;-1:-1:-1;3902:14:1;;;;;3928:8;3938:7;;3902:44;;;;3938:7;;3902:44;;;;;3870:18;3902:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3898:190;;;3960:24;;3970:13;;3960:24;;;;;3898:190;;;4013:31;;4030:13;;4013:31;;;;;4058:11;;;:19;;;;;;3898:190;1335:1;2061::0;3622:472:1;;;:::o;4204:223::-;4307:32;;;;:17;:32;;;;;;;;;:51;;;4368:52;;;;;;;4325:13;;4368:52;;;;;;;;;4204:223;;:::o;7994:451:0:-;8126:18;8096:11;2124:13;;;;2120:36;;;2151:5;;;2120:36;8176:16;;8232:140;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8232:140:0;;;;;;8202:27;;;;;;;;;;:170;;;;;;;;;;;;;;;-1:-1:-1;8202:170:0;;;;;;;8176:16;;-1:-1:-1;8232:140:0;;8202:27;;:170;;;;;;;;;;:::i;:::-;-1:-1:-1;8202:170:0;;;;;;;;;;;;;;;;;;;;;;;8382:16;:21;;-1:-1:-1;8382:21:0;;;8413:25;;8424:13;;8413:25;;-1:-1:-1;;8413:25:0;7994:451;;;;;;:::o;835:3594:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;835:3594:1;;;-1:-1:-1;835:3594:1;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;"
}
}
},
"sources": {
- "current/multisig/MultiSigWallet.sol": {
+ "2.0.0/multisig/MultiSigWallet.sol": {
"id": 0
},
- "current/multisig/MultiSigWalletWithTimeLock.sol": {
+ "2.0.0/multisig/MultiSigWalletWithTimeLock.sol": {
"id": 1
}
},
"sourceCodes": {
- "current/multisig/MultiSigWallet.sol": "pragma solidity ^0.4.10;\n\n/// @title Multisignature wallet - Allows multiple parties to agree on transactions before execution.\n/// @author Stefan George - <stefan.george@consensys.net>\ncontract MultiSigWallet {\n\n uint constant public MAX_OWNER_COUNT = 50;\n\n event Confirmation(address indexed sender, uint indexed transactionId);\n event Revocation(address indexed sender, uint indexed transactionId);\n event Submission(uint indexed transactionId);\n event Execution(uint indexed transactionId);\n event ExecutionFailure(uint indexed transactionId);\n event Deposit(address indexed sender, uint value);\n event OwnerAddition(address indexed owner);\n event OwnerRemoval(address indexed owner);\n event RequirementChange(uint required);\n\n mapping (uint => Transaction) public transactions;\n mapping (uint => mapping (address => bool)) public confirmations;\n mapping (address => bool) public isOwner;\n address[] public owners;\n uint public required;\n uint public transactionCount;\n\n struct Transaction {\n address destination;\n uint value;\n bytes data;\n bool executed;\n }\n\n modifier onlyWallet() {\n if (msg.sender != address(this))\n throw;\n _;\n }\n\n modifier ownerDoesNotExist(address owner) {\n if (isOwner[owner])\n throw;\n _;\n }\n\n modifier ownerExists(address owner) {\n if (!isOwner[owner])\n throw;\n _;\n }\n\n modifier transactionExists(uint transactionId) {\n if (transactions[transactionId].destination == 0)\n throw;\n _;\n }\n\n modifier confirmed(uint transactionId, address owner) {\n if (!confirmations[transactionId][owner])\n throw;\n _;\n }\n\n modifier notConfirmed(uint transactionId, address owner) {\n if (confirmations[transactionId][owner])\n throw;\n _;\n }\n\n modifier notExecuted(uint transactionId) {\n if (transactions[transactionId].executed)\n throw;\n _;\n }\n\n modifier notNull(address _address) {\n if (_address == 0)\n throw;\n _;\n }\n\n modifier validRequirement(uint ownerCount, uint _required) {\n if ( ownerCount > MAX_OWNER_COUNT\n || _required > ownerCount\n || _required == 0\n || ownerCount == 0)\n throw;\n _;\n }\n\n /// @dev Fallback function allows to deposit ether.\n function()\n payable\n {\n if (msg.value > 0)\n Deposit(msg.sender, msg.value);\n }\n\n /*\n * Public functions\n */\n /// @dev Contract constructor sets initial owners and required number of confirmations.\n /// @param _owners List of initial owners.\n /// @param _required Number of required confirmations.\n function MultiSigWallet(address[] _owners, uint _required)\n public\n validRequirement(_owners.length, _required)\n {\n for (uint i=0; i<_owners.length; i++) {\n if (isOwner[_owners[i]] || _owners[i] == 0)\n throw;\n isOwner[_owners[i]] = true;\n }\n owners = _owners;\n required = _required;\n }\n\n /// @dev Allows to add a new owner. Transaction has to be sent by wallet.\n /// @param owner Address of new owner.\n function addOwner(address owner)\n public\n onlyWallet\n ownerDoesNotExist(owner)\n notNull(owner)\n validRequirement(owners.length + 1, required)\n {\n isOwner[owner] = true;\n owners.push(owner);\n OwnerAddition(owner);\n }\n\n /// @dev Allows to remove an owner. Transaction has to be sent by wallet.\n /// @param owner Address of owner.\n function removeOwner(address owner)\n public\n onlyWallet\n ownerExists(owner)\n {\n isOwner[owner] = false;\n for (uint i=0; i<owners.length - 1; i++)\n if (owners[i] == owner) {\n owners[i] = owners[owners.length - 1];\n break;\n }\n owners.length -= 1;\n if (required > owners.length)\n changeRequirement(owners.length);\n OwnerRemoval(owner);\n }\n\n /// @dev Allows to replace an owner with a new owner. Transaction has to be sent by wallet.\n /// @param owner Address of owner to be replaced.\n /// @param owner Address of new owner.\n function replaceOwner(address owner, address newOwner)\n public\n onlyWallet\n ownerExists(owner)\n ownerDoesNotExist(newOwner)\n {\n for (uint i=0; i<owners.length; i++)\n if (owners[i] == owner) {\n owners[i] = newOwner;\n break;\n }\n isOwner[owner] = false;\n isOwner[newOwner] = true;\n OwnerRemoval(owner);\n OwnerAddition(newOwner);\n }\n\n /// @dev Allows to change the number of required confirmations. Transaction has to be sent by wallet.\n /// @param _required Number of required confirmations.\n function changeRequirement(uint _required)\n public\n onlyWallet\n validRequirement(owners.length, _required)\n {\n required = _required;\n RequirementChange(_required);\n }\n\n /// @dev Allows an owner to submit and confirm a transaction.\n /// @param destination Transaction target address.\n /// @param value Transaction ether value.\n /// @param data Transaction data payload.\n /// @return Returns transaction ID.\n function submitTransaction(address destination, uint value, bytes data)\n public\n returns (uint transactionId)\n {\n transactionId = addTransaction(destination, value, data);\n confirmTransaction(transactionId);\n }\n\n /// @dev Allows an owner to confirm a transaction.\n /// @param transactionId Transaction ID.\n function confirmTransaction(uint transactionId)\n public\n ownerExists(msg.sender)\n transactionExists(transactionId)\n notConfirmed(transactionId, msg.sender)\n {\n confirmations[transactionId][msg.sender] = true;\n Confirmation(msg.sender, transactionId);\n executeTransaction(transactionId);\n }\n\n /// @dev Allows an owner to revoke a confirmation for a transaction.\n /// @param transactionId Transaction ID.\n function revokeConfirmation(uint transactionId)\n public\n ownerExists(msg.sender)\n confirmed(transactionId, msg.sender)\n notExecuted(transactionId)\n {\n confirmations[transactionId][msg.sender] = false;\n Revocation(msg.sender, transactionId);\n }\n\n /// @dev Allows anyone to execute a confirmed transaction.\n /// @param transactionId Transaction ID.\n function executeTransaction(uint transactionId)\n public\n notExecuted(transactionId)\n {\n if (isConfirmed(transactionId)) {\n Transaction tx = transactions[transactionId];\n tx.executed = true;\n if (tx.destination.call.value(tx.value)(tx.data))\n Execution(transactionId);\n else {\n ExecutionFailure(transactionId);\n tx.executed = false;\n }\n }\n }\n\n /// @dev Returns the confirmation status of a transaction.\n /// @param transactionId Transaction ID.\n /// @return Confirmation status.\n function isConfirmed(uint transactionId)\n public\n constant\n returns (bool)\n {\n uint count = 0;\n for (uint i=0; i<owners.length; i++) {\n if (confirmations[transactionId][owners[i]])\n count += 1;\n if (count == required)\n return true;\n }\n }\n\n /*\n * Internal functions\n */\n /// @dev Adds a new transaction to the transaction mapping, if transaction does not exist yet.\n /// @param destination Transaction target address.\n /// @param value Transaction ether value.\n /// @param data Transaction data payload.\n /// @return Returns transaction ID.\n function addTransaction(address destination, uint value, bytes data)\n internal\n notNull(destination)\n returns (uint transactionId)\n {\n transactionId = transactionCount;\n transactions[transactionId] = Transaction({\n destination: destination,\n value: value,\n data: data,\n executed: false\n });\n transactionCount += 1;\n Submission(transactionId);\n }\n\n /*\n * Web3 call functions\n */\n /// @dev Returns number of confirmations of a transaction.\n /// @param transactionId Transaction ID.\n /// @return Number of confirmations.\n function getConfirmationCount(uint transactionId)\n public\n constant\n returns (uint count)\n {\n for (uint i=0; i<owners.length; i++)\n if (confirmations[transactionId][owners[i]])\n count += 1;\n }\n\n /// @dev Returns total number of transactions after filers are applied.\n /// @param pending Include pending transactions.\n /// @param executed Include executed transactions.\n /// @return Total number of transactions after filters are applied.\n function getTransactionCount(bool pending, bool executed)\n public\n constant\n returns (uint count)\n {\n for (uint i=0; i<transactionCount; i++)\n if ( pending && !transactions[i].executed\n || executed && transactions[i].executed)\n count += 1;\n }\n\n /// @dev Returns list of owners.\n /// @return List of owner addresses.\n function getOwners()\n public\n constant\n returns (address[])\n {\n return owners;\n }\n\n /// @dev Returns array with owner addresses, which confirmed transaction.\n /// @param transactionId Transaction ID.\n /// @return Returns array of owner addresses.\n function getConfirmations(uint transactionId)\n public\n constant\n returns (address[] _confirmations)\n {\n address[] memory confirmationsTemp = new address[](owners.length);\n uint count = 0;\n uint i;\n for (i=0; i<owners.length; i++)\n if (confirmations[transactionId][owners[i]]) {\n confirmationsTemp[count] = owners[i];\n count += 1;\n }\n _confirmations = new address[](count);\n for (i=0; i<count; i++)\n _confirmations[i] = confirmationsTemp[i];\n }\n\n /// @dev Returns list of transaction IDs in defined range.\n /// @param from Index start position of transaction array.\n /// @param to Index end position of transaction array.\n /// @param pending Include pending transactions.\n /// @param executed Include executed transactions.\n /// @return Returns array of transaction IDs.\n function getTransactionIds(uint from, uint to, bool pending, bool executed)\n public\n constant\n returns (uint[] _transactionIds)\n {\n uint[] memory transactionIdsTemp = new uint[](transactionCount);\n uint count = 0;\n uint i;\n for (i=0; i<transactionCount; i++)\n if ( pending && !transactions[i].executed\n || executed && transactions[i].executed)\n {\n transactionIdsTemp[count] = i;\n count += 1;\n }\n _transactionIds = new uint[](to - from);\n for (i=from; i<to; i++)\n _transactionIds[i - from] = transactionIdsTemp[i];\n }\n}\n",
- "current/multisig/MultiSigWalletWithTimeLock.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.10;\n\nimport \"./MultiSigWallet.sol\";\n\n/// @title Multisignature wallet with time lock- Allows multiple parties to execute a transaction after a time lock has passed.\n/// @author Amir Bandeali - <amir@0xProject.com>\ncontract MultiSigWalletWithTimeLock is MultiSigWallet {\n\n event ConfirmationTimeSet(uint indexed transactionId, uint confirmationTime);\n event TimeLockChange(uint secondsTimeLocked);\n\n uint public secondsTimeLocked;\n\n mapping (uint => uint) public confirmationTimes;\n\n modifier notFullyConfirmed(uint transactionId) {\n require(!isConfirmed(transactionId));\n _;\n }\n\n modifier fullyConfirmed(uint transactionId) {\n require(isConfirmed(transactionId));\n _;\n }\n\n modifier pastTimeLock(uint transactionId) {\n require(block.timestamp >= confirmationTimes[transactionId] + secondsTimeLocked);\n _;\n }\n\n /*\n * Public functions\n */\n\n /// @dev Contract constructor sets initial owners, required number of confirmations, and time lock.\n /// @param _owners List of initial owners.\n /// @param _required Number of required confirmations.\n /// @param _secondsTimeLocked Duration needed after a transaction is confirmed and before it becomes executable, in seconds.\n function MultiSigWalletWithTimeLock(address[] _owners, uint _required, uint _secondsTimeLocked)\n public\n MultiSigWallet(_owners, _required)\n {\n secondsTimeLocked = _secondsTimeLocked;\n }\n\n /// @dev Changes the duration of the time lock for transactions.\n /// @param _secondsTimeLocked Duration needed after a transaction is confirmed and before it becomes executable, in seconds.\n function changeTimeLock(uint _secondsTimeLocked)\n public\n onlyWallet\n {\n secondsTimeLocked = _secondsTimeLocked;\n TimeLockChange(_secondsTimeLocked);\n }\n\n /// @dev Allows an owner to confirm a transaction.\n /// @param transactionId Transaction ID.\n function confirmTransaction(uint transactionId)\n public\n ownerExists(msg.sender)\n transactionExists(transactionId)\n notConfirmed(transactionId, msg.sender)\n notFullyConfirmed(transactionId)\n {\n confirmations[transactionId][msg.sender] = true;\n Confirmation(msg.sender, transactionId);\n if (isConfirmed(transactionId)) {\n setConfirmationTime(transactionId, block.timestamp);\n }\n }\n\n /// @dev Allows an owner to revoke a confirmation for a transaction.\n /// @param transactionId Transaction ID.\n function revokeConfirmation(uint transactionId)\n public\n ownerExists(msg.sender)\n confirmed(transactionId, msg.sender)\n notExecuted(transactionId)\n notFullyConfirmed(transactionId)\n {\n confirmations[transactionId][msg.sender] = false;\n Revocation(msg.sender, transactionId);\n }\n\n /// @dev Allows anyone to execute a confirmed transaction.\n /// @param transactionId Transaction ID.\n function executeTransaction(uint transactionId)\n public\n notExecuted(transactionId)\n fullyConfirmed(transactionId)\n pastTimeLock(transactionId)\n {\n Transaction storage tx = transactions[transactionId];\n tx.executed = true;\n if (tx.destination.call.value(tx.value)(tx.data))\n Execution(transactionId);\n else {\n ExecutionFailure(transactionId);\n tx.executed = false;\n }\n }\n\n /*\n * Internal functions\n */\n\n /// @dev Sets the time of when a submission first passed.\n function setConfirmationTime(uint transactionId, uint confirmationTime)\n internal\n {\n confirmationTimes[transactionId] = confirmationTime;\n ConfirmationTimeSet(transactionId, confirmationTime);\n }\n}\n"
+ "2.0.0/multisig/MultiSigWallet.sol": "// solhint-disable\npragma solidity ^0.4.10;\n\n\n/// @title Multisignature wallet - Allows multiple parties to agree on transactions before execution.\n/// @author Stefan George - <stefan.george@consensys.net>\ncontract MultiSigWallet {\n\n uint constant public MAX_OWNER_COUNT = 50;\n\n event Confirmation(address indexed sender, uint indexed transactionId);\n event Revocation(address indexed sender, uint indexed transactionId);\n event Submission(uint indexed transactionId);\n event Execution(uint indexed transactionId);\n event ExecutionFailure(uint indexed transactionId);\n event Deposit(address indexed sender, uint value);\n event OwnerAddition(address indexed owner);\n event OwnerRemoval(address indexed owner);\n event RequirementChange(uint required);\n\n mapping (uint => Transaction) public transactions;\n mapping (uint => mapping (address => bool)) public confirmations;\n mapping (address => bool) public isOwner;\n address[] public owners;\n uint public required;\n uint public transactionCount;\n\n struct Transaction {\n address destination;\n uint value;\n bytes data;\n bool executed;\n }\n\n modifier onlyWallet() {\n if (msg.sender != address(this))\n throw;\n _;\n }\n\n modifier ownerDoesNotExist(address owner) {\n if (isOwner[owner])\n throw;\n _;\n }\n\n modifier ownerExists(address owner) {\n if (!isOwner[owner])\n throw;\n _;\n }\n\n modifier transactionExists(uint transactionId) {\n if (transactions[transactionId].destination == 0)\n throw;\n _;\n }\n\n modifier confirmed(uint transactionId, address owner) {\n if (!confirmations[transactionId][owner])\n throw;\n _;\n }\n\n modifier notConfirmed(uint transactionId, address owner) {\n if (confirmations[transactionId][owner])\n throw;\n _;\n }\n\n modifier notExecuted(uint transactionId) {\n if (transactions[transactionId].executed)\n throw;\n _;\n }\n\n modifier notNull(address _address) {\n if (_address == 0)\n throw;\n _;\n }\n\n modifier validRequirement(uint ownerCount, uint _required) {\n if ( ownerCount > MAX_OWNER_COUNT\n || _required > ownerCount\n || _required == 0\n || ownerCount == 0)\n throw;\n _;\n }\n\n /// @dev Fallback function allows to deposit ether.\n function()\n payable\n {\n if (msg.value > 0)\n Deposit(msg.sender, msg.value);\n }\n\n /*\n * Public functions\n */\n /// @dev Contract constructor sets initial owners and required number of confirmations.\n /// @param _owners List of initial owners.\n /// @param _required Number of required confirmations.\n function MultiSigWallet(address[] _owners, uint _required)\n public\n validRequirement(_owners.length, _required)\n {\n for (uint i=0; i<_owners.length; i++) {\n if (isOwner[_owners[i]] || _owners[i] == 0)\n throw;\n isOwner[_owners[i]] = true;\n }\n owners = _owners;\n required = _required;\n }\n\n /// @dev Allows to add a new owner. Transaction has to be sent by wallet.\n /// @param owner Address of new owner.\n function addOwner(address owner)\n public\n onlyWallet\n ownerDoesNotExist(owner)\n notNull(owner)\n validRequirement(owners.length + 1, required)\n {\n isOwner[owner] = true;\n owners.push(owner);\n OwnerAddition(owner);\n }\n\n /// @dev Allows to remove an owner. Transaction has to be sent by wallet.\n /// @param owner Address of owner.\n function removeOwner(address owner)\n public\n onlyWallet\n ownerExists(owner)\n {\n isOwner[owner] = false;\n for (uint i=0; i<owners.length - 1; i++)\n if (owners[i] == owner) {\n owners[i] = owners[owners.length - 1];\n break;\n }\n owners.length -= 1;\n if (required > owners.length)\n changeRequirement(owners.length);\n OwnerRemoval(owner);\n }\n\n /// @dev Allows to replace an owner with a new owner. Transaction has to be sent by wallet.\n /// @param owner Address of owner to be replaced.\n /// @param owner Address of new owner.\n function replaceOwner(address owner, address newOwner)\n public\n onlyWallet\n ownerExists(owner)\n ownerDoesNotExist(newOwner)\n {\n for (uint i=0; i<owners.length; i++)\n if (owners[i] == owner) {\n owners[i] = newOwner;\n break;\n }\n isOwner[owner] = false;\n isOwner[newOwner] = true;\n OwnerRemoval(owner);\n OwnerAddition(newOwner);\n }\n\n /// @dev Allows to change the number of required confirmations. Transaction has to be sent by wallet.\n /// @param _required Number of required confirmations.\n function changeRequirement(uint _required)\n public\n onlyWallet\n validRequirement(owners.length, _required)\n {\n required = _required;\n RequirementChange(_required);\n }\n\n /// @dev Allows an owner to submit and confirm a transaction.\n /// @param destination Transaction target address.\n /// @param value Transaction ether value.\n /// @param data Transaction data payload.\n /// @return Returns transaction ID.\n function submitTransaction(address destination, uint value, bytes data)\n public\n returns (uint transactionId)\n {\n transactionId = addTransaction(destination, value, data);\n confirmTransaction(transactionId);\n }\n\n /// @dev Allows an owner to confirm a transaction.\n /// @param transactionId Transaction ID.\n function confirmTransaction(uint transactionId)\n public\n ownerExists(msg.sender)\n transactionExists(transactionId)\n notConfirmed(transactionId, msg.sender)\n {\n confirmations[transactionId][msg.sender] = true;\n Confirmation(msg.sender, transactionId);\n executeTransaction(transactionId);\n }\n\n /// @dev Allows an owner to revoke a confirmation for a transaction.\n /// @param transactionId Transaction ID.\n function revokeConfirmation(uint transactionId)\n public\n ownerExists(msg.sender)\n confirmed(transactionId, msg.sender)\n notExecuted(transactionId)\n {\n confirmations[transactionId][msg.sender] = false;\n Revocation(msg.sender, transactionId);\n }\n\n /// @dev Allows anyone to execute a confirmed transaction.\n /// @param transactionId Transaction ID.\n function executeTransaction(uint transactionId)\n public\n notExecuted(transactionId)\n {\n if (isConfirmed(transactionId)) {\n Transaction tx = transactions[transactionId];\n tx.executed = true;\n if (tx.destination.call.value(tx.value)(tx.data))\n Execution(transactionId);\n else {\n ExecutionFailure(transactionId);\n tx.executed = false;\n }\n }\n }\n\n /// @dev Returns the confirmation status of a transaction.\n /// @param transactionId Transaction ID.\n /// @return Confirmation status.\n function isConfirmed(uint transactionId)\n public\n constant\n returns (bool)\n {\n uint count = 0;\n for (uint i=0; i<owners.length; i++) {\n if (confirmations[transactionId][owners[i]])\n count += 1;\n if (count == required)\n return true;\n }\n }\n\n /*\n * Internal functions\n */\n /// @dev Adds a new transaction to the transaction mapping, if transaction does not exist yet.\n /// @param destination Transaction target address.\n /// @param value Transaction ether value.\n /// @param data Transaction data payload.\n /// @return Returns transaction ID.\n function addTransaction(address destination, uint value, bytes data)\n internal\n notNull(destination)\n returns (uint transactionId)\n {\n transactionId = transactionCount;\n transactions[transactionId] = Transaction({\n destination: destination,\n value: value,\n data: data,\n executed: false\n });\n transactionCount += 1;\n Submission(transactionId);\n }\n\n /*\n * Web3 call functions\n */\n /// @dev Returns number of confirmations of a transaction.\n /// @param transactionId Transaction ID.\n /// @return Number of confirmations.\n function getConfirmationCount(uint transactionId)\n public\n constant\n returns (uint count)\n {\n for (uint i=0; i<owners.length; i++)\n if (confirmations[transactionId][owners[i]])\n count += 1;\n }\n\n /// @dev Returns total number of transactions after filers are applied.\n /// @param pending Include pending transactions.\n /// @param executed Include executed transactions.\n /// @return Total number of transactions after filters are applied.\n function getTransactionCount(bool pending, bool executed)\n public\n constant\n returns (uint count)\n {\n for (uint i=0; i<transactionCount; i++)\n if ( pending && !transactions[i].executed\n || executed && transactions[i].executed)\n count += 1;\n }\n\n /// @dev Returns list of owners.\n /// @return List of owner addresses.\n function getOwners()\n public\n constant\n returns (address[])\n {\n return owners;\n }\n\n /// @dev Returns array with owner addresses, which confirmed transaction.\n /// @param transactionId Transaction ID.\n /// @return Returns array of owner addresses.\n function getConfirmations(uint transactionId)\n public\n constant\n returns (address[] _confirmations)\n {\n address[] memory confirmationsTemp = new address[](owners.length);\n uint count = 0;\n uint i;\n for (i=0; i<owners.length; i++)\n if (confirmations[transactionId][owners[i]]) {\n confirmationsTemp[count] = owners[i];\n count += 1;\n }\n _confirmations = new address[](count);\n for (i=0; i<count; i++)\n _confirmations[i] = confirmationsTemp[i];\n }\n\n /// @dev Returns list of transaction IDs in defined range.\n /// @param from Index start position of transaction array.\n /// @param to Index end position of transaction array.\n /// @param pending Include pending transactions.\n /// @param executed Include executed transactions.\n /// @return Returns array of transaction IDs.\n function getTransactionIds(uint from, uint to, bool pending, bool executed)\n public\n constant\n returns (uint[] _transactionIds)\n {\n uint[] memory transactionIdsTemp = new uint[](transactionCount);\n uint count = 0;\n uint i;\n for (i=0; i<transactionCount; i++)\n if ( pending && !transactions[i].executed\n || executed && transactions[i].executed)\n {\n transactionIdsTemp[count] = i;\n count += 1;\n }\n _transactionIds = new uint[](to - from);\n for (i=from; i<to; i++)\n _transactionIds[i - from] = transactionIdsTemp[i];\n }\n}\n",
+ "2.0.0/multisig/MultiSigWalletWithTimeLock.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\n// solhint-disable\npragma solidity ^0.4.10;\n\nimport \"./MultiSigWallet.sol\";\n\n\n/// @title Multisignature wallet with time lock- Allows multiple parties to execute a transaction after a time lock has passed.\n/// @author Amir Bandeali - <amir@0xProject.com>\ncontract MultiSigWalletWithTimeLock is MultiSigWallet {\n\n event ConfirmationTimeSet(uint indexed transactionId, uint confirmationTime);\n event TimeLockChange(uint secondsTimeLocked);\n\n uint public secondsTimeLocked;\n\n mapping (uint => uint) public confirmationTimes;\n\n modifier notFullyConfirmed(uint transactionId) {\n require(!isConfirmed(transactionId));\n _;\n }\n\n modifier fullyConfirmed(uint transactionId) {\n require(isConfirmed(transactionId));\n _;\n }\n\n modifier pastTimeLock(uint transactionId) {\n require(block.timestamp >= confirmationTimes[transactionId] + secondsTimeLocked);\n _;\n }\n\n /*\n * Public functions\n */\n\n /// @dev Contract constructor sets initial owners, required number of confirmations, and time lock.\n /// @param _owners List of initial owners.\n /// @param _required Number of required confirmations.\n /// @param _secondsTimeLocked Duration needed after a transaction is confirmed and before it becomes executable, in seconds.\n function MultiSigWalletWithTimeLock(address[] _owners, uint _required, uint _secondsTimeLocked)\n public\n MultiSigWallet(_owners, _required)\n {\n secondsTimeLocked = _secondsTimeLocked;\n }\n\n /// @dev Changes the duration of the time lock for transactions.\n /// @param _secondsTimeLocked Duration needed after a transaction is confirmed and before it becomes executable, in seconds.\n function changeTimeLock(uint _secondsTimeLocked)\n public\n onlyWallet\n {\n secondsTimeLocked = _secondsTimeLocked;\n TimeLockChange(_secondsTimeLocked);\n }\n\n /// @dev Allows an owner to confirm a transaction.\n /// @param transactionId Transaction ID.\n function confirmTransaction(uint transactionId)\n public\n ownerExists(msg.sender)\n transactionExists(transactionId)\n notConfirmed(transactionId, msg.sender)\n notFullyConfirmed(transactionId)\n {\n confirmations[transactionId][msg.sender] = true;\n Confirmation(msg.sender, transactionId);\n if (isConfirmed(transactionId)) {\n setConfirmationTime(transactionId, block.timestamp);\n }\n }\n\n /// @dev Allows an owner to revoke a confirmation for a transaction.\n /// @param transactionId Transaction ID.\n function revokeConfirmation(uint transactionId)\n public\n ownerExists(msg.sender)\n confirmed(transactionId, msg.sender)\n notExecuted(transactionId)\n notFullyConfirmed(transactionId)\n {\n confirmations[transactionId][msg.sender] = false;\n Revocation(msg.sender, transactionId);\n }\n\n /// @dev Allows anyone to execute a confirmed transaction.\n /// @param transactionId Transaction ID.\n function executeTransaction(uint transactionId)\n public\n notExecuted(transactionId)\n fullyConfirmed(transactionId)\n pastTimeLock(transactionId)\n {\n Transaction storage tx = transactions[transactionId];\n tx.executed = true;\n if (tx.destination.call.value(tx.value)(tx.data))\n Execution(transactionId);\n else {\n ExecutionFailure(transactionId);\n tx.executed = false;\n }\n }\n\n /*\n * Internal functions\n */\n\n /// @dev Sets the time of when a submission first passed.\n function setConfirmationTime(uint transactionId, uint confirmationTime)\n internal\n {\n confirmationTimes[transactionId] = confirmationTime;\n ConfirmationTimeSet(transactionId, confirmationTime);\n }\n}\n"
},
- "sourceTreeHashHex": "0xb1c108274967b21ed6a0c50ffb9f886603c70629312431a3d4689923478b39f5",
+ "sourceTreeHashHex": "0x063c8a81961942475e9c72a548f59309c9ce033f04d738fbba4b4f3133d39e0f",
"compiler": {
"name": "solc",
"version": "soljson-v0.4.24+commit.e67f0147.js",
diff --git a/packages/migrations/artifacts/2.0.0/MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress.json b/packages/migrations/artifacts/2.0.0/MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress.json
deleted file mode 100644
index a034dab36..000000000
--- a/packages/migrations/artifacts/2.0.0/MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress.json
+++ /dev/null
@@ -1,723 +0,0 @@
-{
- "schemaVersion": "2.0.0",
- "contractName": "MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress",
- "compilerOutput": {
- "abi": [
- {
- "constant": true,
- "inputs": [
- {
- "name": "",
- "type": "uint256"
- }
- ],
- "name": "owners",
- "outputs": [
- {
- "name": "",
- "type": "address"
- }
- ],
- "payable": false,
- "stateMutability": "view",
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "name": "owner",
- "type": "address"
- }
- ],
- "name": "removeOwner",
- "outputs": [],
- "payable": false,
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "name": "transactionId",
- "type": "uint256"
- }
- ],
- "name": "revokeConfirmation",
- "outputs": [],
- "payable": false,
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "name": "",
- "type": "address"
- }
- ],
- "name": "isOwner",
- "outputs": [
- {
- "name": "",
- "type": "bool"
- }
- ],
- "payable": false,
- "stateMutability": "view",
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "name": "",
- "type": "uint256"
- },
- {
- "name": "",
- "type": "address"
- }
- ],
- "name": "confirmations",
- "outputs": [
- {
- "name": "",
- "type": "bool"
- }
- ],
- "payable": false,
- "stateMutability": "view",
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [],
- "name": "secondsTimeLocked",
- "outputs": [
- {
- "name": "",
- "type": "uint256"
- }
- ],
- "payable": false,
- "stateMutability": "view",
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "name": "pending",
- "type": "bool"
- },
- {
- "name": "executed",
- "type": "bool"
- }
- ],
- "name": "getTransactionCount",
- "outputs": [
- {
- "name": "count",
- "type": "uint256"
- }
- ],
- "payable": false,
- "stateMutability": "view",
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "name": "data",
- "type": "bytes"
- }
- ],
- "name": "isFunctionRemoveAuthorizedAddress",
- "outputs": [
- {
- "name": "",
- "type": "bool"
- }
- ],
- "payable": false,
- "stateMutability": "view",
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "name": "transactionId",
- "type": "uint256"
- }
- ],
- "name": "executeRemoveAuthorizedAddress",
- "outputs": [],
- "payable": false,
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "name": "owner",
- "type": "address"
- }
- ],
- "name": "addOwner",
- "outputs": [],
- "payable": false,
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "name": "transactionId",
- "type": "uint256"
- }
- ],
- "name": "isConfirmed",
- "outputs": [
- {
- "name": "",
- "type": "bool"
- }
- ],
- "payable": false,
- "stateMutability": "view",
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "name": "_secondsTimeLocked",
- "type": "uint256"
- }
- ],
- "name": "changeTimeLock",
- "outputs": [],
- "payable": false,
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "name": "transactionId",
- "type": "uint256"
- }
- ],
- "name": "getConfirmationCount",
- "outputs": [
- {
- "name": "count",
- "type": "uint256"
- }
- ],
- "payable": false,
- "stateMutability": "view",
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "name": "",
- "type": "uint256"
- }
- ],
- "name": "transactions",
- "outputs": [
- {
- "name": "destination",
- "type": "address"
- },
- {
- "name": "value",
- "type": "uint256"
- },
- {
- "name": "data",
- "type": "bytes"
- },
- {
- "name": "executed",
- "type": "bool"
- }
- ],
- "payable": false,
- "stateMutability": "view",
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [],
- "name": "getOwners",
- "outputs": [
- {
- "name": "",
- "type": "address[]"
- }
- ],
- "payable": false,
- "stateMutability": "view",
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "name": "from",
- "type": "uint256"
- },
- {
- "name": "to",
- "type": "uint256"
- },
- {
- "name": "pending",
- "type": "bool"
- },
- {
- "name": "executed",
- "type": "bool"
- }
- ],
- "name": "getTransactionIds",
- "outputs": [
- {
- "name": "_transactionIds",
- "type": "uint256[]"
- }
- ],
- "payable": false,
- "stateMutability": "view",
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [],
- "name": "TOKEN_TRANSFER_PROXY_CONTRACT",
- "outputs": [
- {
- "name": "",
- "type": "address"
- }
- ],
- "payable": false,
- "stateMutability": "view",
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "name": "transactionId",
- "type": "uint256"
- }
- ],
- "name": "getConfirmations",
- "outputs": [
- {
- "name": "_confirmations",
- "type": "address[]"
- }
- ],
- "payable": false,
- "stateMutability": "view",
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [],
- "name": "transactionCount",
- "outputs": [
- {
- "name": "",
- "type": "uint256"
- }
- ],
- "payable": false,
- "stateMutability": "view",
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "name": "_required",
- "type": "uint256"
- }
- ],
- "name": "changeRequirement",
- "outputs": [],
- "payable": false,
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "name": "transactionId",
- "type": "uint256"
- }
- ],
- "name": "confirmTransaction",
- "outputs": [],
- "payable": false,
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "name": "destination",
- "type": "address"
- },
- {
- "name": "value",
- "type": "uint256"
- },
- {
- "name": "data",
- "type": "bytes"
- }
- ],
- "name": "submitTransaction",
- "outputs": [
- {
- "name": "transactionId",
- "type": "uint256"
- }
- ],
- "payable": false,
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "name": "",
- "type": "uint256"
- }
- ],
- "name": "confirmationTimes",
- "outputs": [
- {
- "name": "",
- "type": "uint256"
- }
- ],
- "payable": false,
- "stateMutability": "view",
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [],
- "name": "MAX_OWNER_COUNT",
- "outputs": [
- {
- "name": "",
- "type": "uint256"
- }
- ],
- "payable": false,
- "stateMutability": "view",
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [],
- "name": "required",
- "outputs": [
- {
- "name": "",
- "type": "uint256"
- }
- ],
- "payable": false,
- "stateMutability": "view",
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "name": "owner",
- "type": "address"
- },
- {
- "name": "newOwner",
- "type": "address"
- }
- ],
- "name": "replaceOwner",
- "outputs": [],
- "payable": false,
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "name": "transactionId",
- "type": "uint256"
- }
- ],
- "name": "executeTransaction",
- "outputs": [],
- "payable": false,
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "name": "_owners",
- "type": "address[]"
- },
- {
- "name": "_required",
- "type": "uint256"
- },
- {
- "name": "_secondsTimeLocked",
- "type": "uint256"
- },
- {
- "name": "_tokenTransferProxy",
- "type": "address"
- }
- ],
- "payable": false,
- "stateMutability": "nonpayable",
- "type": "constructor"
- },
- {
- "payable": true,
- "stateMutability": "payable",
- "type": "fallback"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "name": "transactionId",
- "type": "uint256"
- },
- {
- "indexed": false,
- "name": "confirmationTime",
- "type": "uint256"
- }
- ],
- "name": "ConfirmationTimeSet",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": false,
- "name": "secondsTimeLocked",
- "type": "uint256"
- }
- ],
- "name": "TimeLockChange",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "name": "sender",
- "type": "address"
- },
- {
- "indexed": true,
- "name": "transactionId",
- "type": "uint256"
- }
- ],
- "name": "Confirmation",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "name": "sender",
- "type": "address"
- },
- {
- "indexed": true,
- "name": "transactionId",
- "type": "uint256"
- }
- ],
- "name": "Revocation",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "name": "transactionId",
- "type": "uint256"
- }
- ],
- "name": "Submission",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "name": "transactionId",
- "type": "uint256"
- }
- ],
- "name": "Execution",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "name": "transactionId",
- "type": "uint256"
- }
- ],
- "name": "ExecutionFailure",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "name": "sender",
- "type": "address"
- },
- {
- "indexed": false,
- "name": "value",
- "type": "uint256"
- }
- ],
- "name": "Deposit",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "name": "owner",
- "type": "address"
- }
- ],
- "name": "OwnerAddition",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "name": "owner",
- "type": "address"
- }
- ],
- "name": "OwnerRemoval",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": false,
- "name": "required",
- "type": "uint256"
- }
- ],
- "name": "RequirementChange",
- "type": "event"
- }
- ],
- "evm": {
- "bytecode": {
- "linkReferences": {},
- "object": "0x60806040523480156200001157600080fd5b5060405162002022380380620020228339810160409081528151602083015191830151606084015191909301805190939190849084908490839083906000908260328211806200006057508181115b806200006a575080155b8062000074575081155b156200007f57600080fd5b600092505b84518310156200015357600260008685815181101515620000a157fe5b6020908102909101810151600160a060020a031682528101919091526040016000205460ff1680620000f457508483815181101515620000dd57fe5b90602001906020020151600160a060020a03166000145b15620000ff57600080fd5b60016002600087868151811015156200011457fe5b602090810291909101810151600160a060020a03168252810191909152604001600020805460ff19169115159190911790556001929092019162000084565b845162000168906003906020880190620001a2565b5050506004919091555050600655505060088054600160a060020a031916600160a060020a03929092169190911790555062000236915050565b828054828255906000526020600020908101928215620001fa579160200282015b82811115620001fa5782518254600160a060020a031916600160a060020a03909116178255602090920191600190910190620001c3565b50620002089291506200020c565b5090565b6200023391905b8082111562000208578054600160a060020a031916815560010162000213565b90565b611ddc80620002466000396000f30060806040526004361061015e5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663025e7c2781146101a0578063173825d9146101e157806320ea8d861461020f5780632f54bf6e146102275780633411c81c1461026957806337bd78a01461029a57806354741525146102c1578063553a48fd146102e05780635711b311146103395780637065cb4814610351578063784547a71461037f5780637ad28c51146103975780638b51d13f146103af5780639ace38c2146103c7578063a0e67e2b1461049c578063a8abe69a14610501578063add1cbc514610526578063b5dc40c31461053b578063b77bf60014610553578063ba51a6df14610568578063c01a8c8414610580578063c642747414610598578063d38f2d821461060e578063d74f8edd14610626578063dc8452cd1461063b578063e20056e614610650578063ee22610b14610684575b600034111561019e5760408051348152905133917fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c919081900360200190a25b005b3480156101ac57600080fd5b506101b860043561069c565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156101ed57600080fd5b5061019e73ffffffffffffffffffffffffffffffffffffffff600435166106d1565b34801561021b57600080fd5b5061019e600435610928565b34801561023357600080fd5b5061025573ffffffffffffffffffffffffffffffffffffffff60043516610a15565b604080519115158252519081900360200190f35b34801561027557600080fd5b5061025560043573ffffffffffffffffffffffffffffffffffffffff60243516610a2a565b3480156102a657600080fd5b506102af610a4a565b60408051918252519081900360200190f35b3480156102cd57600080fd5b506102af60043515156024351515610a50565b3480156102ec57600080fd5b506040805160206004803580820135601f8101849004840285018401909552848452610255943694929360249392840191908190840183828082843750949750610abc9650505050505050565b34801561034557600080fd5b5061019e600435610bc7565b34801561035d57600080fd5b5061019e73ffffffffffffffffffffffffffffffffffffffff60043516610e90565b34801561038b57600080fd5b50610255600435610ffd565b3480156103a357600080fd5b5061019e600435611087565b3480156103bb57600080fd5b506102af6004356110ce565b3480156103d357600080fd5b506103df60043561114a565b604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018060200183151515158152602001828103825284818151815260200191508051906020019080838360005b8381101561045e578181015183820152602001610446565b50505050905090810190601f16801561048b5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b3480156104a857600080fd5b506104b1611233565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156104ed5781810151838201526020016104d5565b505050509050019250505060405180910390f35b34801561050d57600080fd5b506104b1600435602435604435151560643515156112a3565b34801561053257600080fd5b506101b86113dc565b34801561054757600080fd5b506104b16004356113f8565b34801561055f57600080fd5b506102af6115a5565b34801561057457600080fd5b5061019e6004356115ab565b34801561058c57600080fd5b5061019e600435611622565b3480156105a457600080fd5b50604080516020600460443581810135601f81018490048402850184019095528484526102af94823573ffffffffffffffffffffffffffffffffffffffff169460248035953695946064949201919081908401838280828437509497506117349650505050505050565b34801561061a57600080fd5b506102af600435611753565b34801561063257600080fd5b506102af611765565b34801561064757600080fd5b506102af61176a565b34801561065c57600080fd5b5061019e73ffffffffffffffffffffffffffffffffffffffff60043581169060243516611770565b34801561069057600080fd5b5061019e600435611980565b60038054829081106106aa57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b60003330146106df57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020526040902054829060ff16151561071557600080fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260026020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905591505b6003547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01821015610898578273ffffffffffffffffffffffffffffffffffffffff166003838154811015156107b557fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561088d57600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061080d57fe5b6000918252602090912001546003805473ffffffffffffffffffffffffffffffffffffffff909216918490811061084057fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610898565b600190910190610763565b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01906108c99082611cef565b5060035460045411156108e2576003546108e2906115ab565b60405173ffffffffffffffffffffffffffffffffffffffff8416907f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9090600090a2505050565b3360008181526002602052604090205460ff16151561094657600080fd5b60008281526001602090815260408083203380855292529091205483919060ff16151561097257600080fd5b600084815260208190526040902060030154849060ff161561099357600080fd5b8461099d81610ffd565b156109a757600080fd5b600086815260016020908152604080832033808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555188927ff6a317157440607f36269043eb55f1287a5a19ba2216afeab88cd46cbcfb88e991a3505050505050565b60026020526000908152604090205460ff1681565b600160209081526000928352604080842090915290825290205460ff1681565b60065481565b6000805b600554811015610ab557838015610a7d575060008181526020819052604090206003015460ff16155b80610aa15750828015610aa1575060008181526020819052604090206003015460ff165b15610aad576001820191505b600101610a54565b5092915050565b604080517f72656d6f7665417574686f72697a65644164647265737328616464726573732981529051908190036020019020600090815b6004811015610bbb57818160048110610b0857fe5b1a7f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168482815181101515610b5b57fe5b6020910101517f010000000000000000000000000000000000000000000000000000000000000090819004027fff000000000000000000000000000000000000000000000000000000000000001614610bb357600080fd5b600101610af3565b600192505b5050919050565b600081815260208190526040812060030154829060ff1615610be857600080fd5b82610bf281610ffd565b1515610bfd57600080fd5b6000848152602081905260409020600854815486929173ffffffffffffffffffffffffffffffffffffffff918216911614610c3757600080fd5b600281810180546040805160206001841615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190931694909404601f8101839004830285018301909152808452610cea939291830182828015610ce05780601f10610cb557610100808354040283529160200191610ce0565b820191906000526020600020905b815481529060010190602001808311610cc357829003601f168201915b5050505050610abc565b1515610cf557600080fd5b600086815260208190526040908190206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117909155815481830154935160028085018054959b5073ffffffffffffffffffffffffffffffffffffffff909316959492939192839285927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff918316156101000291909101909116048015610de75780601f10610dbc57610100808354040283529160200191610de7565b820191906000526020600020905b815481529060010190602001808311610dca57829003601f168201915b505091505060006040518083038185875af19250505015610e325760405186907f33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed7590600090a2610e88565b60405186907f526441bb6c1aba3c9a4a6ca1d6545da9c2333c8c48343ef398eb858d72b7923690600090a26003850180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b505050505050565b333014610e9c57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116600090815260026020526040902054819060ff1615610ed157600080fd5b8173ffffffffffffffffffffffffffffffffffffffff81161515610ef457600080fd5b6003805490506001016004546032821180610f0e57508181115b80610f17575080155b80610f20575081155b15610f2a57600080fd5b73ffffffffffffffffffffffffffffffffffffffff851660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915560038054918201815583527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055517ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d9190a25050505050565b600080805b600354811015610bc0576000848152600160205260408120600380549192918490811061102b57fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400190205460ff161561106c576001820191505b60045482141561107f5760019250610bc0565b600101611002565b33301461109357600080fd5b60068190556040805182815290517fd1c9101a34feff75cccef14a28785a0279cb0b49c1f321f21f5f422e746b43779181900360200190a150565b6000805b60035481101561114457600083815260016020526040812060038054919291849081106110fb57fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400190205460ff161561113c576001820191505b6001016110d2565b50919050565b60006020818152918152604090819020805460018083015460028085018054875161010095821615959095027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691909104601f810188900488028401880190965285835273ffffffffffffffffffffffffffffffffffffffff909316959094919291908301828280156112205780601f106111f557610100808354040283529160200191611220565b820191906000526020600020905b81548152906001019060200180831161120357829003601f168201915b5050506003909301549192505060ff1684565b6060600380548060200260200160405190810160405280929190818152602001828054801561129857602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161126d575b505050505090505b90565b6060806000806005546040519080825280602002602001820160405280156112d5578160200160208202803883390190505b50925060009150600090505b60055481101561135c5785801561130a575060008181526020819052604090206003015460ff16155b8061132e575084801561132e575060008181526020819052604090206003015460ff165b156113545780838381518110151561134257fe5b60209081029091010152600191909101905b6001016112e1565b878703604051908082528060200260200182016040528015611388578160200160208202803883390190505b5093508790505b868110156113d15782818151811015156113a557fe5b90602001906020020151848983038151811015156113bf57fe5b6020908102909101015260010161138f565b505050949350505050565b60085473ffffffffffffffffffffffffffffffffffffffff1681565b60608060008060038054905060405190808252806020026020018201604052801561142d578160200160208202803883390190505b50925060009150600090505b600354811015611511576000858152600160205260408120600380549192918490811061146257fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400190205460ff16156115095760038054829081106114aa57fe5b600091825260209091200154835173ffffffffffffffffffffffffffffffffffffffff909116908490849081106114dd57fe5b73ffffffffffffffffffffffffffffffffffffffff909216602092830290910190910152600191909101905b600101611439565b8160405190808252806020026020018201604052801561153b578160200160208202803883390190505b509350600090505b8181101561159d57828181518110151561155957fe5b90602001906020020151848281518110151561157157fe5b73ffffffffffffffffffffffffffffffffffffffff909216602092830290910190910152600101611543565b505050919050565b60055481565b3330146115b757600080fd5b6003548160328211806115c957508181115b806115d2575080155b806115db575081155b156115e557600080fd5b60048390556040805184815290517fa3f1ee9126a074d9326c682f561767f710e927faa811f7a99829d49dc421797a9181900360200190a1505050565b3360008181526002602052604090205460ff16151561164057600080fd5b600082815260208190526040902054829073ffffffffffffffffffffffffffffffffffffffff16151561167257600080fd5b60008381526001602090815260408083203380855292529091205484919060ff161561169d57600080fd5b846116a781610ffd565b156116b157600080fd5b600086815260016020818152604080842033808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909317909255905188927f4a504a94899432a9846e1aa406dceb1bcfd538bb839071d49d1e5e23f5be30ef91a361172586610ffd565b15610e8857610e888642611b71565b6000611741848484611bbc565b905061174c81611622565b9392505050565b60076020526000908152604090205481565b603281565b60045481565b600033301461177e57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260026020526040902054839060ff1615156117b457600080fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260026020526040902054839060ff16156117e957600080fd5b600092505b6003548310156118ae578473ffffffffffffffffffffffffffffffffffffffff1660038481548110151561181e57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614156118a3578360038481548110151561185657fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506118ae565b6001909201916117ee565b73ffffffffffffffffffffffffffffffffffffffff80861660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090811690915593881682528082208054909416600117909355915190917f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9091a260405173ffffffffffffffffffffffffffffffffffffffff8516907ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d90600090a25050505050565b600081815260208190526040812060030154829060ff16156119a157600080fd5b826119ab81610ffd565b15156119b657600080fd5b6006546000858152600760205260409020548591014210156119d757600080fd5b600085815260208190526040908190206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117909155815481830154935160028085018054959a5073ffffffffffffffffffffffffffffffffffffffff909316959492939192839285927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff918316156101000291909101909116048015611ac95780601f10611a9e57610100808354040283529160200191611ac9565b820191906000526020600020905b815481529060010190602001808311611aac57829003601f168201915b505091505060006040518083038185875af19250505015611b145760405185907f33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed7590600090a2611b6a565b60405185907f526441bb6c1aba3c9a4a6ca1d6545da9c2333c8c48343ef398eb858d72b7923690600090a26003840180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b5050505050565b6000828152600760209081526040918290208390558151838152915184927f0b237afe65f1514fd7ea3f923ea4fe792bdd07000a912b6cd1602a8e7f573c8d92908290030190a25050565b60008373ffffffffffffffffffffffffffffffffffffffff81161515611be157600080fd5b6005546040805160808101825273ffffffffffffffffffffffffffffffffffffffff8881168252602080830189815283850189815260006060860181905287815280845295909520845181547fffffffffffffffffffffffff00000000000000000000000000000000000000001694169390931783555160018301559251805194965091939092611c79926002850192910190611d18565b5060609190910151600390910180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905560058054600101905560405182907fc0ba8fe4b176c1714197d43b9cc6bcf797a4a7461c5fe8d0ef6e184ae7601e5190600090a2509392505050565b815481835581811115611d1357600083815260209020611d13918101908301611d96565b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611d5957805160ff1916838001178555611d86565b82800160010185558215611d86579182015b82811115611d86578251825591602001919060010190611d6b565b50611d92929150611d96565b5090565b6112a091905b80821115611d925760008155600101611d9c5600a165627a7a72305820c81714a70282119c05387ce5b5ac99a4ae80fd3927672ef71a91cf576988fa3b0029",
- "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x2022 CODESIZE SUB DUP1 PUSH3 0x2022 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 SWAP1 DUP2 MSTORE DUP2 MLOAD PUSH1 0x20 DUP4 ADD MLOAD SWAP2 DUP4 ADD MLOAD PUSH1 0x60 DUP5 ADD MLOAD SWAP2 SWAP1 SWAP4 ADD DUP1 MLOAD SWAP1 SWAP4 SWAP2 SWAP1 DUP5 SWAP1 DUP5 SWAP1 DUP5 SWAP1 DUP4 SWAP1 DUP4 SWAP1 PUSH1 0x0 SWAP1 DUP3 PUSH1 0x32 DUP3 GT DUP1 PUSH3 0x60 JUMPI POP DUP2 DUP2 GT JUMPDEST DUP1 PUSH3 0x6A JUMPI POP DUP1 ISZERO JUMPDEST DUP1 PUSH3 0x74 JUMPI POP DUP2 ISZERO JUMPDEST ISZERO PUSH3 0x7F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP3 POP JUMPDEST DUP5 MLOAD DUP4 LT ISZERO PUSH3 0x153 JUMPI PUSH1 0x2 PUSH1 0x0 DUP7 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH3 0xA1 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND DUP3 MSTORE DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0xFF AND DUP1 PUSH3 0xF4 JUMPI POP DUP5 DUP4 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH3 0xDD JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x0 EQ JUMPDEST ISZERO PUSH3 0xFF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x2 PUSH1 0x0 DUP8 DUP7 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH3 0x114 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND DUP3 MSTORE DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x1 SWAP3 SWAP1 SWAP3 ADD SWAP2 PUSH3 0x84 JUMP JUMPDEST DUP5 MLOAD PUSH3 0x168 SWAP1 PUSH1 0x3 SWAP1 PUSH1 0x20 DUP9 ADD SWAP1 PUSH3 0x1A2 JUMP JUMPDEST POP POP POP PUSH1 0x4 SWAP2 SWAP1 SWAP2 SSTORE POP POP PUSH1 0x6 SSTORE POP POP PUSH1 0x8 DUP1 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB NOT AND PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP PUSH3 0x236 SWAP2 POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD DUP3 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP3 DUP3 ISZERO PUSH3 0x1FA JUMPI SWAP2 PUSH1 0x20 MUL DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x1FA JUMPI DUP3 MLOAD DUP3 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB NOT AND PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP1 SWAP2 AND OR DUP3 SSTORE PUSH1 0x20 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH3 0x1C3 JUMP JUMPDEST POP PUSH3 0x208 SWAP3 SWAP2 POP PUSH3 0x20C JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH3 0x233 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x208 JUMPI DUP1 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB NOT AND DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x213 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0x1DDC DUP1 PUSH3 0x246 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x15E JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x25E7C27 DUP2 EQ PUSH2 0x1A0 JUMPI DUP1 PUSH4 0x173825D9 EQ PUSH2 0x1E1 JUMPI DUP1 PUSH4 0x20EA8D86 EQ PUSH2 0x20F JUMPI DUP1 PUSH4 0x2F54BF6E EQ PUSH2 0x227 JUMPI DUP1 PUSH4 0x3411C81C EQ PUSH2 0x269 JUMPI DUP1 PUSH4 0x37BD78A0 EQ PUSH2 0x29A JUMPI DUP1 PUSH4 0x54741525 EQ PUSH2 0x2C1 JUMPI DUP1 PUSH4 0x553A48FD EQ PUSH2 0x2E0 JUMPI DUP1 PUSH4 0x5711B311 EQ PUSH2 0x339 JUMPI DUP1 PUSH4 0x7065CB48 EQ PUSH2 0x351 JUMPI DUP1 PUSH4 0x784547A7 EQ PUSH2 0x37F JUMPI DUP1 PUSH4 0x7AD28C51 EQ PUSH2 0x397 JUMPI DUP1 PUSH4 0x8B51D13F EQ PUSH2 0x3AF JUMPI DUP1 PUSH4 0x9ACE38C2 EQ PUSH2 0x3C7 JUMPI DUP1 PUSH4 0xA0E67E2B EQ PUSH2 0x49C JUMPI DUP1 PUSH4 0xA8ABE69A EQ PUSH2 0x501 JUMPI DUP1 PUSH4 0xADD1CBC5 EQ PUSH2 0x526 JUMPI DUP1 PUSH4 0xB5DC40C3 EQ PUSH2 0x53B JUMPI DUP1 PUSH4 0xB77BF600 EQ PUSH2 0x553 JUMPI DUP1 PUSH4 0xBA51A6DF EQ PUSH2 0x568 JUMPI DUP1 PUSH4 0xC01A8C84 EQ PUSH2 0x580 JUMPI DUP1 PUSH4 0xC6427474 EQ PUSH2 0x598 JUMPI DUP1 PUSH4 0xD38F2D82 EQ PUSH2 0x60E JUMPI DUP1 PUSH4 0xD74F8EDD EQ PUSH2 0x626 JUMPI DUP1 PUSH4 0xDC8452CD EQ PUSH2 0x63B JUMPI DUP1 PUSH4 0xE20056E6 EQ PUSH2 0x650 JUMPI DUP1 PUSH4 0xEE22610B EQ PUSH2 0x684 JUMPI JUMPDEST PUSH1 0x0 CALLVALUE GT ISZERO PUSH2 0x19E JUMPI PUSH1 0x40 DUP1 MLOAD CALLVALUE DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0xE1FFFCC4923D04B559F4D29A8BFC6CDA04EB5B0D3C460751C2402C5C5CC9109C SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B8 PUSH1 0x4 CALLDATALOAD PUSH2 0x69C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19E PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x6D1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x21B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19E PUSH1 0x4 CALLDATALOAD PUSH2 0x928 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x233 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x255 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0xA15 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x275 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x255 PUSH1 0x4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD AND PUSH2 0xA2A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AF PUSH2 0xA4A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AF PUSH1 0x4 CALLDATALOAD ISZERO ISZERO PUSH1 0x24 CALLDATALOAD ISZERO ISZERO PUSH2 0xA50 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 DUP1 CALLDATALOAD DUP1 DUP3 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x255 SWAP5 CALLDATASIZE SWAP5 SWAP3 SWAP4 PUSH1 0x24 SWAP4 SWAP3 DUP5 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0xABC SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x345 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19E PUSH1 0x4 CALLDATALOAD PUSH2 0xBC7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x35D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19E PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0xE90 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x38B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x255 PUSH1 0x4 CALLDATALOAD PUSH2 0xFFD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19E PUSH1 0x4 CALLDATALOAD PUSH2 0x1087 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AF PUSH1 0x4 CALLDATALOAD PUSH2 0x10CE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3DF PUSH1 0x4 CALLDATALOAD PUSH2 0x114A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 ISZERO ISZERO ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x45E JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x446 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x48B 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 SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4B1 PUSH2 0x1233 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 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4ED JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x4D5 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x50D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4B1 PUSH1 0x4 CALLDATALOAD PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD ISZERO ISZERO PUSH1 0x64 CALLDATALOAD ISZERO ISZERO PUSH2 0x12A3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x532 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B8 PUSH2 0x13DC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x547 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4B1 PUSH1 0x4 CALLDATALOAD PUSH2 0x13F8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x55F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AF PUSH2 0x15A5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x574 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19E PUSH1 0x4 CALLDATALOAD PUSH2 0x15AB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x58C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19E PUSH1 0x4 CALLDATALOAD PUSH2 0x1622 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 PUSH1 0x44 CALLDATALOAD DUP2 DUP2 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x2AF SWAP5 DUP3 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP5 PUSH1 0x24 DUP1 CALLDATALOAD SWAP6 CALLDATASIZE SWAP6 SWAP5 PUSH1 0x64 SWAP5 SWAP3 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x1734 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x61A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AF PUSH1 0x4 CALLDATALOAD PUSH2 0x1753 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x632 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AF PUSH2 0x1765 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x647 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AF PUSH2 0x176A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x65C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19E PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH2 0x1770 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x690 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19E PUSH1 0x4 CALLDATALOAD PUSH2 0x1980 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD DUP3 SWAP1 DUP2 LT PUSH2 0x6AA JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x0 CALLER ADDRESS EQ PUSH2 0x6DF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x715 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE SWAP2 POP JUMPDEST PUSH1 0x3 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP3 LT ISZERO PUSH2 0x898 JUMPI DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x3 DUP4 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x7B5 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x88D JUMPI PUSH1 0x3 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0x80D JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x3 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x840 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0x898 JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x763 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 PUSH2 0x8C9 SWAP1 DUP3 PUSH2 0x1CEF JUMP JUMPDEST POP PUSH1 0x3 SLOAD PUSH1 0x4 SLOAD GT ISZERO PUSH2 0x8E2 JUMPI PUSH1 0x3 SLOAD PUSH2 0x8E2 SWAP1 PUSH2 0x15AB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH32 0x8001553A916EF2F495D26A907CC54D96ED840D7BDA71E73194BF5A9DF7A76B90 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x946 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD DUP4 SWAP2 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x972 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD DUP5 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x993 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 PUSH2 0x99D DUP2 PUSH2 0xFFD JUMP JUMPDEST ISZERO PUSH2 0x9A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE MLOAD DUP9 SWAP3 PUSH32 0xF6A317157440607F36269043EB55F1287A5A19BA2216AFEAB88CD46CBCFB88E9 SWAP2 LOG3 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x6 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST PUSH1 0x5 SLOAD DUP2 LT ISZERO PUSH2 0xAB5 JUMPI DUP4 DUP1 ISZERO PUSH2 0xA7D JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND ISZERO JUMPDEST DUP1 PUSH2 0xAA1 JUMPI POP DUP3 DUP1 ISZERO PUSH2 0xAA1 JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND JUMPDEST ISZERO PUSH2 0xAAD JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x1 ADD PUSH2 0xA54 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x72656D6F7665417574686F72697A656441646472657373286164647265737329 DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 KECCAK256 PUSH1 0x0 SWAP1 DUP2 JUMPDEST PUSH1 0x4 DUP2 LT ISZERO PUSH2 0xBBB JUMPI DUP2 DUP2 PUSH1 0x4 DUP2 LT PUSH2 0xB08 JUMPI INVALID JUMPDEST BYTE PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 MUL PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP5 DUP3 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xB5B JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP2 ADD ADD MLOAD PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV MUL PUSH32 0xFF00000000000000000000000000000000000000000000000000000000000000 AND EQ PUSH2 0xBB3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 ADD PUSH2 0xAF3 JUMP JUMPDEST PUSH1 0x1 SWAP3 POP JUMPDEST POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 ADD SLOAD DUP3 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0xBE8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH2 0xBF2 DUP2 PUSH2 0xFFD JUMP JUMPDEST ISZERO ISZERO PUSH2 0xBFD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x8 SLOAD DUP2 SLOAD DUP7 SWAP3 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND SWAP2 AND EQ PUSH2 0xC37 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x2 DUP2 DUP2 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1 DUP5 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP4 AND SWAP5 SWAP1 SWAP5 DIV PUSH1 0x1F DUP2 ADD DUP4 SWAP1 DIV DUP4 MUL DUP6 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP1 DUP5 MSTORE PUSH2 0xCEA SWAP4 SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xCE0 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xCB5 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xCE0 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xCC3 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP PUSH2 0xABC JUMP JUMPDEST ISZERO ISZERO PUSH2 0xCF5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x3 DUP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP2 SLOAD DUP2 DUP4 ADD SLOAD SWAP4 MLOAD PUSH1 0x2 DUP1 DUP6 ADD DUP1 SLOAD SWAP6 SWAP12 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND SWAP6 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 DUP4 SWAP3 DUP6 SWAP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP4 AND ISZERO PUSH2 0x100 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 AND DIV DUP1 ISZERO PUSH2 0xDE7 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xDBC JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xDE7 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xDCA JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP ISZERO PUSH2 0xE32 JUMPI PUSH1 0x40 MLOAD DUP7 SWAP1 PUSH32 0x33E13ECB54C3076D8E8BB8C2881800A4D972B792045FFAE98FDF46DF365FED75 SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH2 0xE88 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP7 SWAP1 PUSH32 0x526441BB6C1ABA3C9A4A6CA1D6545DA9C2333C8C48343EF398EB858D72B79236 SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH1 0x3 DUP6 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0xE9C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0xED1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO ISZERO PUSH2 0xEF4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3 DUP1 SLOAD SWAP1 POP PUSH1 0x1 ADD PUSH1 0x4 SLOAD PUSH1 0x32 DUP3 GT DUP1 PUSH2 0xF0E JUMPI POP DUP2 DUP2 GT JUMPDEST DUP1 PUSH2 0xF17 JUMPI POP DUP1 ISZERO JUMPDEST DUP1 PUSH2 0xF20 JUMPI POP DUP2 ISZERO JUMPDEST ISZERO PUSH2 0xF2A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x3 DUP1 SLOAD SWAP2 DUP3 ADD DUP2 SSTORE DUP4 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND DUP5 OR SWAP1 SSTORE MLOAD PUSH32 0xF39E6E1EB0EDCF53C221607B54B00CD28F3196FED0A24994DC308B8F611B682D SWAP2 SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 JUMPDEST PUSH1 0x3 SLOAD DUP2 LT ISZERO PUSH2 0xBC0 JUMPI PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 DUP1 SLOAD SWAP2 SWAP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x102B JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x106C JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x4 SLOAD DUP3 EQ ISZERO PUSH2 0x107F JUMPI PUSH1 0x1 SWAP3 POP PUSH2 0xBC0 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x1002 JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0x1093 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x6 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xD1C9101A34FEFF75CCCEF14A28785A0279CB0B49C1F321F21F5F422E746B4377 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST PUSH1 0x3 SLOAD DUP2 LT ISZERO PUSH2 0x1144 JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 DUP1 SLOAD SWAP2 SWAP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x10FB JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x113C JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x1 ADD PUSH2 0x10D2 JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP2 DUP2 MSTORE SWAP2 DUP2 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP1 DUP4 ADD SLOAD PUSH1 0x2 DUP1 DUP6 ADD DUP1 SLOAD DUP8 MLOAD PUSH2 0x100 SWAP6 DUP3 AND ISZERO SWAP6 SWAP1 SWAP6 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD AND SWAP2 SWAP1 SWAP2 DIV PUSH1 0x1F DUP2 ADD DUP9 SWAP1 DIV DUP9 MUL DUP5 ADD DUP9 ADD SWAP1 SWAP7 MSTORE DUP6 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND SWAP6 SWAP1 SWAP5 SWAP2 SWAP3 SWAP2 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x1220 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x11F5 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1220 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1203 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP PUSH1 0x3 SWAP1 SWAP4 ADD SLOAD SWAP2 SWAP3 POP POP PUSH1 0xFF AND DUP5 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x1298 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x126D JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x0 DUP1 PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x12D5 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 SWAP2 POP PUSH1 0x0 SWAP1 POP JUMPDEST PUSH1 0x5 SLOAD DUP2 LT ISZERO PUSH2 0x135C JUMPI DUP6 DUP1 ISZERO PUSH2 0x130A JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND ISZERO JUMPDEST DUP1 PUSH2 0x132E JUMPI POP DUP5 DUP1 ISZERO PUSH2 0x132E JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND JUMPDEST ISZERO PUSH2 0x1354 JUMPI DUP1 DUP4 DUP4 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1342 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SWAP1 JUMPDEST PUSH1 0x1 ADD PUSH2 0x12E1 JUMP JUMPDEST DUP8 DUP8 SUB PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1388 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP DUP8 SWAP1 POP JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x13D1 JUMPI DUP3 DUP2 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x13A5 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP5 DUP10 DUP4 SUB DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x13BF JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x138F JUMP JUMPDEST POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x0 DUP1 PUSH1 0x3 DUP1 SLOAD SWAP1 POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x142D JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 SWAP2 POP PUSH1 0x0 SWAP1 POP JUMPDEST PUSH1 0x3 SLOAD DUP2 LT ISZERO PUSH2 0x1511 JUMPI PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 DUP1 SLOAD SWAP2 SWAP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x1462 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1509 JUMPI PUSH1 0x3 DUP1 SLOAD DUP3 SWAP1 DUP2 LT PUSH2 0x14AA JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 DUP5 SWAP1 DUP5 SWAP1 DUP2 LT PUSH2 0x14DD JUMPI INVALID JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SWAP1 JUMPDEST PUSH1 0x1 ADD PUSH2 0x1439 JUMP JUMPDEST DUP2 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x153B JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP PUSH1 0x0 SWAP1 POP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x159D JUMPI DUP3 DUP2 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1559 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP5 DUP3 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1571 JUMPI INVALID JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 ADD PUSH2 0x1543 JUMP JUMPDEST POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0x15B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3 SLOAD DUP2 PUSH1 0x32 DUP3 GT DUP1 PUSH2 0x15C9 JUMPI POP DUP2 DUP2 GT JUMPDEST DUP1 PUSH2 0x15D2 JUMPI POP DUP1 ISZERO JUMPDEST DUP1 PUSH2 0x15DB JUMPI POP DUP2 ISZERO JUMPDEST ISZERO PUSH2 0x15E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x4 DUP4 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xA3F1EE9126A074D9326C682F561767F710E927FAA811F7A99829D49DC421797A SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x1640 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO ISZERO PUSH2 0x1672 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD DUP5 SWAP2 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x169D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 PUSH2 0x16A7 DUP2 PUSH2 0xFFD JUMP JUMPDEST ISZERO PUSH2 0x16B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 CALLER DUP1 DUP7 MSTORE SWAP3 MSTORE DUP1 DUP5 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SWAP4 OR SWAP1 SWAP3 SSTORE SWAP1 MLOAD DUP9 SWAP3 PUSH32 0x4A504A94899432A9846E1AA406DCEB1BCFD538BB839071D49D1E5E23F5BE30EF SWAP2 LOG3 PUSH2 0x1725 DUP7 PUSH2 0xFFD JUMP JUMPDEST ISZERO PUSH2 0xE88 JUMPI PUSH2 0xE88 DUP7 TIMESTAMP PUSH2 0x1B71 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1741 DUP5 DUP5 DUP5 PUSH2 0x1BBC JUMP JUMPDEST SWAP1 POP PUSH2 0x174C DUP2 PUSH2 0x1622 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x32 DUP2 JUMP JUMPDEST PUSH1 0x4 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 CALLER ADDRESS EQ PUSH2 0x177E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x17B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x17E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP3 POP JUMPDEST PUSH1 0x3 SLOAD DUP4 LT ISZERO PUSH2 0x18AE JUMPI DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x3 DUP5 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x181E JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x18A3 JUMPI DUP4 PUSH1 0x3 DUP5 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1856 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0x18AE JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 PUSH2 0x17EE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 SWAP1 DUP2 AND SWAP1 SWAP2 SSTORE SWAP4 DUP9 AND DUP3 MSTORE DUP1 DUP3 KECCAK256 DUP1 SLOAD SWAP1 SWAP5 AND PUSH1 0x1 OR SWAP1 SWAP4 SSTORE SWAP2 MLOAD SWAP1 SWAP2 PUSH32 0x8001553A916EF2F495D26A907CC54D96ED840D7BDA71E73194BF5A9DF7A76B90 SWAP2 LOG2 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP1 PUSH32 0xF39E6E1EB0EDCF53C221607B54B00CD28F3196FED0A24994DC308B8F611B682D SWAP1 PUSH1 0x0 SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 ADD SLOAD DUP3 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x19A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH2 0x19AB DUP2 PUSH2 0xFFD JUMP JUMPDEST ISZERO ISZERO PUSH2 0x19B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP6 SWAP2 ADD TIMESTAMP LT ISZERO PUSH2 0x19D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x3 DUP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP2 SLOAD DUP2 DUP4 ADD SLOAD SWAP4 MLOAD PUSH1 0x2 DUP1 DUP6 ADD DUP1 SLOAD SWAP6 SWAP11 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND SWAP6 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 DUP4 SWAP3 DUP6 SWAP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP4 AND ISZERO PUSH2 0x100 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 AND DIV DUP1 ISZERO PUSH2 0x1AC9 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1A9E JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1AC9 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1AAC JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP ISZERO PUSH2 0x1B14 JUMPI PUSH1 0x40 MLOAD DUP6 SWAP1 PUSH32 0x33E13ECB54C3076D8E8BB8C2881800A4D972B792045FFAE98FDF46DF365FED75 SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH2 0x1B6A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP6 SWAP1 PUSH32 0x526441BB6C1ABA3C9A4A6CA1D6545DA9C2333C8C48343EF398EB858D72B79236 SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH1 0x3 DUP5 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 SWAP1 SSTORE DUP2 MLOAD DUP4 DUP2 MSTORE SWAP2 MLOAD DUP5 SWAP3 PUSH32 0xB237AFE65F1514FD7EA3F923EA4FE792BDD07000A912B6CD1602A8E7F573C8D SWAP3 SWAP1 DUP3 SWAP1 SUB ADD SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO ISZERO PUSH2 0x1BE1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x80 DUP2 ADD DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD DUP10 DUP2 MSTORE DUP4 DUP6 ADD DUP10 DUP2 MSTORE PUSH1 0x0 PUSH1 0x60 DUP7 ADD DUP2 SWAP1 MSTORE DUP8 DUP2 MSTORE DUP1 DUP5 MSTORE SWAP6 SWAP1 SWAP6 KECCAK256 DUP5 MLOAD DUP2 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP5 AND SWAP4 SWAP1 SWAP4 OR DUP4 SSTORE MLOAD PUSH1 0x1 DUP4 ADD SSTORE SWAP3 MLOAD DUP1 MLOAD SWAP5 SWAP7 POP SWAP2 SWAP4 SWAP1 SWAP3 PUSH2 0x1C79 SWAP3 PUSH1 0x2 DUP6 ADD SWAP3 SWAP2 ADD SWAP1 PUSH2 0x1D18 JUMP JUMPDEST POP PUSH1 0x60 SWAP2 SWAP1 SWAP2 ADD MLOAD PUSH1 0x3 SWAP1 SWAP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x5 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE PUSH1 0x40 MLOAD DUP3 SWAP1 PUSH32 0xC0BA8FE4B176C1714197D43B9CC6BCF797A4A7461C5FE8D0EF6E184AE7601E51 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 SLOAD DUP2 DUP4 SSTORE DUP2 DUP2 GT ISZERO PUSH2 0x1D13 JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 PUSH2 0x1D13 SWAP2 DUP2 ADD SWAP1 DUP4 ADD PUSH2 0x1D96 JUMP JUMPDEST POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0x1D59 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x1D86 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x1D86 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x1D86 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x1D6B JUMP JUMPDEST POP PUSH2 0x1D92 SWAP3 SWAP2 POP PUSH2 0x1D96 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0x12A0 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1D92 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x1D9C JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 0xc8 OR EQ 0xa7 MUL DUP3 GT SWAP13 SDIV CODESIZE PUSH29 0xE5B5AC99A4AE80FD3927672EF71A91CF576988FA3B0029000000000000 ",
- "sourceMap": "671:2422:2:-;;;1539:349;8:9:-1;5:2;;;30:1;27;20:12;5:2;1539:349:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2913:14:0;;1539:349:2;;;;;;;;;;;;;;2959:6:0;;1539:349:2;256:2:0;2236:28;;;:66;;;2292:10;2280:9;:22;2236:66;:96;;;-1:-1:-1;2318:14:0;;2236:96;:127;;;-1:-1:-1;2348:15:0;;2236:127;2229:153;;;2377:5;;;2229:153;2966:1;2959:8;;2954:168;2971:7;:14;2969:1;:16;2954:168;;;3010:7;:19;3018:7;3026:1;3018:10;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3010:19:0;;;;;;;;;;;-1:-1:-1;3010:19:0;;;;;:38;;;3033:7;3041:1;3033:10;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3033:15:0;3047:1;3033:15;3010:38;3006:65;;;3066:5;;;3006:65;3107:4;3085:7;:19;3093:7;3101:1;3093:10;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3085:19:0;;;;;;;;;;;-1:-1:-1;3085:19:0;:26;;-1:-1:-1;;3085:26:0;;;;;;;;;;-1:-1:-1;2987:3:0;;;;;2954:168;;;3131:16;;;;:6;;:16;;;;;:::i;:::-;-1:-1:-1;;;3157:8:0;:20;;;;-1:-1:-1;;2032:17:1;:38;-1:-1:-1;;1830:29:2;:51;;-1:-1:-1;;;;;;1830:51:2;-1:-1:-1;;;;;1830:51:2;;;;;;;;;;-1:-1:-1;671:2422:2;;-1:-1:-1;;671:2422:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;671:2422:2;-1:-1:-1;;;;;671:2422:2;;;;;;;;;;;-1:-1:-1;671:2422:2;;;;;;;-1:-1:-1;671:2422:2;;;-1:-1:-1;671:2422:2;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;;671:2422:2;;;;;;;;;:::o;:::-;;;;;;;"
- },
- "deployedBytecode": {
- "linkReferences": {},
- "object": "0x60806040526004361061015e5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663025e7c2781146101a0578063173825d9146101e157806320ea8d861461020f5780632f54bf6e146102275780633411c81c1461026957806337bd78a01461029a57806354741525146102c1578063553a48fd146102e05780635711b311146103395780637065cb4814610351578063784547a71461037f5780637ad28c51146103975780638b51d13f146103af5780639ace38c2146103c7578063a0e67e2b1461049c578063a8abe69a14610501578063add1cbc514610526578063b5dc40c31461053b578063b77bf60014610553578063ba51a6df14610568578063c01a8c8414610580578063c642747414610598578063d38f2d821461060e578063d74f8edd14610626578063dc8452cd1461063b578063e20056e614610650578063ee22610b14610684575b600034111561019e5760408051348152905133917fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c919081900360200190a25b005b3480156101ac57600080fd5b506101b860043561069c565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156101ed57600080fd5b5061019e73ffffffffffffffffffffffffffffffffffffffff600435166106d1565b34801561021b57600080fd5b5061019e600435610928565b34801561023357600080fd5b5061025573ffffffffffffffffffffffffffffffffffffffff60043516610a15565b604080519115158252519081900360200190f35b34801561027557600080fd5b5061025560043573ffffffffffffffffffffffffffffffffffffffff60243516610a2a565b3480156102a657600080fd5b506102af610a4a565b60408051918252519081900360200190f35b3480156102cd57600080fd5b506102af60043515156024351515610a50565b3480156102ec57600080fd5b506040805160206004803580820135601f8101849004840285018401909552848452610255943694929360249392840191908190840183828082843750949750610abc9650505050505050565b34801561034557600080fd5b5061019e600435610bc7565b34801561035d57600080fd5b5061019e73ffffffffffffffffffffffffffffffffffffffff60043516610e90565b34801561038b57600080fd5b50610255600435610ffd565b3480156103a357600080fd5b5061019e600435611087565b3480156103bb57600080fd5b506102af6004356110ce565b3480156103d357600080fd5b506103df60043561114a565b604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018060200183151515158152602001828103825284818151815260200191508051906020019080838360005b8381101561045e578181015183820152602001610446565b50505050905090810190601f16801561048b5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b3480156104a857600080fd5b506104b1611233565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156104ed5781810151838201526020016104d5565b505050509050019250505060405180910390f35b34801561050d57600080fd5b506104b1600435602435604435151560643515156112a3565b34801561053257600080fd5b506101b86113dc565b34801561054757600080fd5b506104b16004356113f8565b34801561055f57600080fd5b506102af6115a5565b34801561057457600080fd5b5061019e6004356115ab565b34801561058c57600080fd5b5061019e600435611622565b3480156105a457600080fd5b50604080516020600460443581810135601f81018490048402850184019095528484526102af94823573ffffffffffffffffffffffffffffffffffffffff169460248035953695946064949201919081908401838280828437509497506117349650505050505050565b34801561061a57600080fd5b506102af600435611753565b34801561063257600080fd5b506102af611765565b34801561064757600080fd5b506102af61176a565b34801561065c57600080fd5b5061019e73ffffffffffffffffffffffffffffffffffffffff60043581169060243516611770565b34801561069057600080fd5b5061019e600435611980565b60038054829081106106aa57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b60003330146106df57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020526040902054829060ff16151561071557600080fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260026020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905591505b6003547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01821015610898578273ffffffffffffffffffffffffffffffffffffffff166003838154811015156107b557fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561088d57600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061080d57fe5b6000918252602090912001546003805473ffffffffffffffffffffffffffffffffffffffff909216918490811061084057fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610898565b600190910190610763565b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01906108c99082611cef565b5060035460045411156108e2576003546108e2906115ab565b60405173ffffffffffffffffffffffffffffffffffffffff8416907f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9090600090a2505050565b3360008181526002602052604090205460ff16151561094657600080fd5b60008281526001602090815260408083203380855292529091205483919060ff16151561097257600080fd5b600084815260208190526040902060030154849060ff161561099357600080fd5b8461099d81610ffd565b156109a757600080fd5b600086815260016020908152604080832033808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555188927ff6a317157440607f36269043eb55f1287a5a19ba2216afeab88cd46cbcfb88e991a3505050505050565b60026020526000908152604090205460ff1681565b600160209081526000928352604080842090915290825290205460ff1681565b60065481565b6000805b600554811015610ab557838015610a7d575060008181526020819052604090206003015460ff16155b80610aa15750828015610aa1575060008181526020819052604090206003015460ff165b15610aad576001820191505b600101610a54565b5092915050565b604080517f72656d6f7665417574686f72697a65644164647265737328616464726573732981529051908190036020019020600090815b6004811015610bbb57818160048110610b0857fe5b1a7f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168482815181101515610b5b57fe5b6020910101517f010000000000000000000000000000000000000000000000000000000000000090819004027fff000000000000000000000000000000000000000000000000000000000000001614610bb357600080fd5b600101610af3565b600192505b5050919050565b600081815260208190526040812060030154829060ff1615610be857600080fd5b82610bf281610ffd565b1515610bfd57600080fd5b6000848152602081905260409020600854815486929173ffffffffffffffffffffffffffffffffffffffff918216911614610c3757600080fd5b600281810180546040805160206001841615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190931694909404601f8101839004830285018301909152808452610cea939291830182828015610ce05780601f10610cb557610100808354040283529160200191610ce0565b820191906000526020600020905b815481529060010190602001808311610cc357829003601f168201915b5050505050610abc565b1515610cf557600080fd5b600086815260208190526040908190206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117909155815481830154935160028085018054959b5073ffffffffffffffffffffffffffffffffffffffff909316959492939192839285927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff918316156101000291909101909116048015610de75780601f10610dbc57610100808354040283529160200191610de7565b820191906000526020600020905b815481529060010190602001808311610dca57829003601f168201915b505091505060006040518083038185875af19250505015610e325760405186907f33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed7590600090a2610e88565b60405186907f526441bb6c1aba3c9a4a6ca1d6545da9c2333c8c48343ef398eb858d72b7923690600090a26003850180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b505050505050565b333014610e9c57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116600090815260026020526040902054819060ff1615610ed157600080fd5b8173ffffffffffffffffffffffffffffffffffffffff81161515610ef457600080fd5b6003805490506001016004546032821180610f0e57508181115b80610f17575080155b80610f20575081155b15610f2a57600080fd5b73ffffffffffffffffffffffffffffffffffffffff851660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915560038054918201815583527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055517ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d9190a25050505050565b600080805b600354811015610bc0576000848152600160205260408120600380549192918490811061102b57fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400190205460ff161561106c576001820191505b60045482141561107f5760019250610bc0565b600101611002565b33301461109357600080fd5b60068190556040805182815290517fd1c9101a34feff75cccef14a28785a0279cb0b49c1f321f21f5f422e746b43779181900360200190a150565b6000805b60035481101561114457600083815260016020526040812060038054919291849081106110fb57fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400190205460ff161561113c576001820191505b6001016110d2565b50919050565b60006020818152918152604090819020805460018083015460028085018054875161010095821615959095027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691909104601f810188900488028401880190965285835273ffffffffffffffffffffffffffffffffffffffff909316959094919291908301828280156112205780601f106111f557610100808354040283529160200191611220565b820191906000526020600020905b81548152906001019060200180831161120357829003601f168201915b5050506003909301549192505060ff1684565b6060600380548060200260200160405190810160405280929190818152602001828054801561129857602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161126d575b505050505090505b90565b6060806000806005546040519080825280602002602001820160405280156112d5578160200160208202803883390190505b50925060009150600090505b60055481101561135c5785801561130a575060008181526020819052604090206003015460ff16155b8061132e575084801561132e575060008181526020819052604090206003015460ff165b156113545780838381518110151561134257fe5b60209081029091010152600191909101905b6001016112e1565b878703604051908082528060200260200182016040528015611388578160200160208202803883390190505b5093508790505b868110156113d15782818151811015156113a557fe5b90602001906020020151848983038151811015156113bf57fe5b6020908102909101015260010161138f565b505050949350505050565b60085473ffffffffffffffffffffffffffffffffffffffff1681565b60608060008060038054905060405190808252806020026020018201604052801561142d578160200160208202803883390190505b50925060009150600090505b600354811015611511576000858152600160205260408120600380549192918490811061146257fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400190205460ff16156115095760038054829081106114aa57fe5b600091825260209091200154835173ffffffffffffffffffffffffffffffffffffffff909116908490849081106114dd57fe5b73ffffffffffffffffffffffffffffffffffffffff909216602092830290910190910152600191909101905b600101611439565b8160405190808252806020026020018201604052801561153b578160200160208202803883390190505b509350600090505b8181101561159d57828181518110151561155957fe5b90602001906020020151848281518110151561157157fe5b73ffffffffffffffffffffffffffffffffffffffff909216602092830290910190910152600101611543565b505050919050565b60055481565b3330146115b757600080fd5b6003548160328211806115c957508181115b806115d2575080155b806115db575081155b156115e557600080fd5b60048390556040805184815290517fa3f1ee9126a074d9326c682f561767f710e927faa811f7a99829d49dc421797a9181900360200190a1505050565b3360008181526002602052604090205460ff16151561164057600080fd5b600082815260208190526040902054829073ffffffffffffffffffffffffffffffffffffffff16151561167257600080fd5b60008381526001602090815260408083203380855292529091205484919060ff161561169d57600080fd5b846116a781610ffd565b156116b157600080fd5b600086815260016020818152604080842033808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909317909255905188927f4a504a94899432a9846e1aa406dceb1bcfd538bb839071d49d1e5e23f5be30ef91a361172586610ffd565b15610e8857610e888642611b71565b6000611741848484611bbc565b905061174c81611622565b9392505050565b60076020526000908152604090205481565b603281565b60045481565b600033301461177e57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260026020526040902054839060ff1615156117b457600080fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260026020526040902054839060ff16156117e957600080fd5b600092505b6003548310156118ae578473ffffffffffffffffffffffffffffffffffffffff1660038481548110151561181e57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614156118a3578360038481548110151561185657fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506118ae565b6001909201916117ee565b73ffffffffffffffffffffffffffffffffffffffff80861660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090811690915593881682528082208054909416600117909355915190917f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9091a260405173ffffffffffffffffffffffffffffffffffffffff8516907ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d90600090a25050505050565b600081815260208190526040812060030154829060ff16156119a157600080fd5b826119ab81610ffd565b15156119b657600080fd5b6006546000858152600760205260409020548591014210156119d757600080fd5b600085815260208190526040908190206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117909155815481830154935160028085018054959a5073ffffffffffffffffffffffffffffffffffffffff909316959492939192839285927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff918316156101000291909101909116048015611ac95780601f10611a9e57610100808354040283529160200191611ac9565b820191906000526020600020905b815481529060010190602001808311611aac57829003601f168201915b505091505060006040518083038185875af19250505015611b145760405185907f33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed7590600090a2611b6a565b60405185907f526441bb6c1aba3c9a4a6ca1d6545da9c2333c8c48343ef398eb858d72b7923690600090a26003840180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b5050505050565b6000828152600760209081526040918290208390558151838152915184927f0b237afe65f1514fd7ea3f923ea4fe792bdd07000a912b6cd1602a8e7f573c8d92908290030190a25050565b60008373ffffffffffffffffffffffffffffffffffffffff81161515611be157600080fd5b6005546040805160808101825273ffffffffffffffffffffffffffffffffffffffff8881168252602080830189815283850189815260006060860181905287815280845295909520845181547fffffffffffffffffffffffff00000000000000000000000000000000000000001694169390931783555160018301559251805194965091939092611c79926002850192910190611d18565b5060609190910151600390910180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905560058054600101905560405182907fc0ba8fe4b176c1714197d43b9cc6bcf797a4a7461c5fe8d0ef6e184ae7601e5190600090a2509392505050565b815481835581811115611d1357600083815260209020611d13918101908301611d96565b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611d5957805160ff1916838001178555611d86565b82800160010185558215611d86579182015b82811115611d86578251825591602001919060010190611d6b565b50611d92929150611d96565b5090565b6112a091905b80821115611d925760008155600101611d9c5600a165627a7a72305820c81714a70282119c05387ce5b5ac99a4ae80fd3927672ef71a91cf576988fa3b0029",
- "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x15E JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x25E7C27 DUP2 EQ PUSH2 0x1A0 JUMPI DUP1 PUSH4 0x173825D9 EQ PUSH2 0x1E1 JUMPI DUP1 PUSH4 0x20EA8D86 EQ PUSH2 0x20F JUMPI DUP1 PUSH4 0x2F54BF6E EQ PUSH2 0x227 JUMPI DUP1 PUSH4 0x3411C81C EQ PUSH2 0x269 JUMPI DUP1 PUSH4 0x37BD78A0 EQ PUSH2 0x29A JUMPI DUP1 PUSH4 0x54741525 EQ PUSH2 0x2C1 JUMPI DUP1 PUSH4 0x553A48FD EQ PUSH2 0x2E0 JUMPI DUP1 PUSH4 0x5711B311 EQ PUSH2 0x339 JUMPI DUP1 PUSH4 0x7065CB48 EQ PUSH2 0x351 JUMPI DUP1 PUSH4 0x784547A7 EQ PUSH2 0x37F JUMPI DUP1 PUSH4 0x7AD28C51 EQ PUSH2 0x397 JUMPI DUP1 PUSH4 0x8B51D13F EQ PUSH2 0x3AF JUMPI DUP1 PUSH4 0x9ACE38C2 EQ PUSH2 0x3C7 JUMPI DUP1 PUSH4 0xA0E67E2B EQ PUSH2 0x49C JUMPI DUP1 PUSH4 0xA8ABE69A EQ PUSH2 0x501 JUMPI DUP1 PUSH4 0xADD1CBC5 EQ PUSH2 0x526 JUMPI DUP1 PUSH4 0xB5DC40C3 EQ PUSH2 0x53B JUMPI DUP1 PUSH4 0xB77BF600 EQ PUSH2 0x553 JUMPI DUP1 PUSH4 0xBA51A6DF EQ PUSH2 0x568 JUMPI DUP1 PUSH4 0xC01A8C84 EQ PUSH2 0x580 JUMPI DUP1 PUSH4 0xC6427474 EQ PUSH2 0x598 JUMPI DUP1 PUSH4 0xD38F2D82 EQ PUSH2 0x60E JUMPI DUP1 PUSH4 0xD74F8EDD EQ PUSH2 0x626 JUMPI DUP1 PUSH4 0xDC8452CD EQ PUSH2 0x63B JUMPI DUP1 PUSH4 0xE20056E6 EQ PUSH2 0x650 JUMPI DUP1 PUSH4 0xEE22610B EQ PUSH2 0x684 JUMPI JUMPDEST PUSH1 0x0 CALLVALUE GT ISZERO PUSH2 0x19E JUMPI PUSH1 0x40 DUP1 MLOAD CALLVALUE DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0xE1FFFCC4923D04B559F4D29A8BFC6CDA04EB5B0D3C460751C2402C5C5CC9109C SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B8 PUSH1 0x4 CALLDATALOAD PUSH2 0x69C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19E PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x6D1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x21B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19E PUSH1 0x4 CALLDATALOAD PUSH2 0x928 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x233 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x255 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0xA15 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x275 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x255 PUSH1 0x4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD AND PUSH2 0xA2A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AF PUSH2 0xA4A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AF PUSH1 0x4 CALLDATALOAD ISZERO ISZERO PUSH1 0x24 CALLDATALOAD ISZERO ISZERO PUSH2 0xA50 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 DUP1 CALLDATALOAD DUP1 DUP3 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x255 SWAP5 CALLDATASIZE SWAP5 SWAP3 SWAP4 PUSH1 0x24 SWAP4 SWAP3 DUP5 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0xABC SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x345 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19E PUSH1 0x4 CALLDATALOAD PUSH2 0xBC7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x35D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19E PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0xE90 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x38B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x255 PUSH1 0x4 CALLDATALOAD PUSH2 0xFFD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19E PUSH1 0x4 CALLDATALOAD PUSH2 0x1087 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AF PUSH1 0x4 CALLDATALOAD PUSH2 0x10CE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3DF PUSH1 0x4 CALLDATALOAD PUSH2 0x114A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 ISZERO ISZERO ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x45E JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x446 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x48B 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 SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4B1 PUSH2 0x1233 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 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4ED JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x4D5 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x50D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4B1 PUSH1 0x4 CALLDATALOAD PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD ISZERO ISZERO PUSH1 0x64 CALLDATALOAD ISZERO ISZERO PUSH2 0x12A3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x532 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B8 PUSH2 0x13DC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x547 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4B1 PUSH1 0x4 CALLDATALOAD PUSH2 0x13F8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x55F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AF PUSH2 0x15A5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x574 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19E PUSH1 0x4 CALLDATALOAD PUSH2 0x15AB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x58C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19E PUSH1 0x4 CALLDATALOAD PUSH2 0x1622 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 PUSH1 0x44 CALLDATALOAD DUP2 DUP2 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x2AF SWAP5 DUP3 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP5 PUSH1 0x24 DUP1 CALLDATALOAD SWAP6 CALLDATASIZE SWAP6 SWAP5 PUSH1 0x64 SWAP5 SWAP3 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x1734 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x61A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AF PUSH1 0x4 CALLDATALOAD PUSH2 0x1753 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x632 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AF PUSH2 0x1765 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x647 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AF PUSH2 0x176A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x65C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19E PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH2 0x1770 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x690 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19E PUSH1 0x4 CALLDATALOAD PUSH2 0x1980 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD DUP3 SWAP1 DUP2 LT PUSH2 0x6AA JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x0 CALLER ADDRESS EQ PUSH2 0x6DF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x715 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE SWAP2 POP JUMPDEST PUSH1 0x3 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP3 LT ISZERO PUSH2 0x898 JUMPI DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x3 DUP4 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x7B5 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x88D JUMPI PUSH1 0x3 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0x80D JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x3 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x840 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0x898 JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x763 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 PUSH2 0x8C9 SWAP1 DUP3 PUSH2 0x1CEF JUMP JUMPDEST POP PUSH1 0x3 SLOAD PUSH1 0x4 SLOAD GT ISZERO PUSH2 0x8E2 JUMPI PUSH1 0x3 SLOAD PUSH2 0x8E2 SWAP1 PUSH2 0x15AB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH32 0x8001553A916EF2F495D26A907CC54D96ED840D7BDA71E73194BF5A9DF7A76B90 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x946 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD DUP4 SWAP2 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x972 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD DUP5 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x993 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 PUSH2 0x99D DUP2 PUSH2 0xFFD JUMP JUMPDEST ISZERO PUSH2 0x9A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE MLOAD DUP9 SWAP3 PUSH32 0xF6A317157440607F36269043EB55F1287A5A19BA2216AFEAB88CD46CBCFB88E9 SWAP2 LOG3 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x6 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST PUSH1 0x5 SLOAD DUP2 LT ISZERO PUSH2 0xAB5 JUMPI DUP4 DUP1 ISZERO PUSH2 0xA7D JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND ISZERO JUMPDEST DUP1 PUSH2 0xAA1 JUMPI POP DUP3 DUP1 ISZERO PUSH2 0xAA1 JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND JUMPDEST ISZERO PUSH2 0xAAD JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x1 ADD PUSH2 0xA54 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x72656D6F7665417574686F72697A656441646472657373286164647265737329 DUP2 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 KECCAK256 PUSH1 0x0 SWAP1 DUP2 JUMPDEST PUSH1 0x4 DUP2 LT ISZERO PUSH2 0xBBB JUMPI DUP2 DUP2 PUSH1 0x4 DUP2 LT PUSH2 0xB08 JUMPI INVALID JUMPDEST BYTE PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 MUL PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP5 DUP3 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xB5B JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP2 ADD ADD MLOAD PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV MUL PUSH32 0xFF00000000000000000000000000000000000000000000000000000000000000 AND EQ PUSH2 0xBB3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 ADD PUSH2 0xAF3 JUMP JUMPDEST PUSH1 0x1 SWAP3 POP JUMPDEST POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 ADD SLOAD DUP3 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0xBE8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH2 0xBF2 DUP2 PUSH2 0xFFD JUMP JUMPDEST ISZERO ISZERO PUSH2 0xBFD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x8 SLOAD DUP2 SLOAD DUP7 SWAP3 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND SWAP2 AND EQ PUSH2 0xC37 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x2 DUP2 DUP2 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1 DUP5 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP4 AND SWAP5 SWAP1 SWAP5 DIV PUSH1 0x1F DUP2 ADD DUP4 SWAP1 DIV DUP4 MUL DUP6 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP1 DUP5 MSTORE PUSH2 0xCEA SWAP4 SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xCE0 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xCB5 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xCE0 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xCC3 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP PUSH2 0xABC JUMP JUMPDEST ISZERO ISZERO PUSH2 0xCF5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x3 DUP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP2 SLOAD DUP2 DUP4 ADD SLOAD SWAP4 MLOAD PUSH1 0x2 DUP1 DUP6 ADD DUP1 SLOAD SWAP6 SWAP12 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND SWAP6 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 DUP4 SWAP3 DUP6 SWAP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP4 AND ISZERO PUSH2 0x100 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 AND DIV DUP1 ISZERO PUSH2 0xDE7 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xDBC JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xDE7 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xDCA JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP ISZERO PUSH2 0xE32 JUMPI PUSH1 0x40 MLOAD DUP7 SWAP1 PUSH32 0x33E13ECB54C3076D8E8BB8C2881800A4D972B792045FFAE98FDF46DF365FED75 SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH2 0xE88 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP7 SWAP1 PUSH32 0x526441BB6C1ABA3C9A4A6CA1D6545DA9C2333C8C48343EF398EB858D72B79236 SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH1 0x3 DUP6 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0xE9C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0xED1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO ISZERO PUSH2 0xEF4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3 DUP1 SLOAD SWAP1 POP PUSH1 0x1 ADD PUSH1 0x4 SLOAD PUSH1 0x32 DUP3 GT DUP1 PUSH2 0xF0E JUMPI POP DUP2 DUP2 GT JUMPDEST DUP1 PUSH2 0xF17 JUMPI POP DUP1 ISZERO JUMPDEST DUP1 PUSH2 0xF20 JUMPI POP DUP2 ISZERO JUMPDEST ISZERO PUSH2 0xF2A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x3 DUP1 SLOAD SWAP2 DUP3 ADD DUP2 SSTORE DUP4 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND DUP5 OR SWAP1 SSTORE MLOAD PUSH32 0xF39E6E1EB0EDCF53C221607B54B00CD28F3196FED0A24994DC308B8F611B682D SWAP2 SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 JUMPDEST PUSH1 0x3 SLOAD DUP2 LT ISZERO PUSH2 0xBC0 JUMPI PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 DUP1 SLOAD SWAP2 SWAP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x102B JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x106C JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x4 SLOAD DUP3 EQ ISZERO PUSH2 0x107F JUMPI PUSH1 0x1 SWAP3 POP PUSH2 0xBC0 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x1002 JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0x1093 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x6 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xD1C9101A34FEFF75CCCEF14A28785A0279CB0B49C1F321F21F5F422E746B4377 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST PUSH1 0x3 SLOAD DUP2 LT ISZERO PUSH2 0x1144 JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 DUP1 SLOAD SWAP2 SWAP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x10FB JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x113C JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x1 ADD PUSH2 0x10D2 JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP2 DUP2 MSTORE SWAP2 DUP2 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP1 DUP4 ADD SLOAD PUSH1 0x2 DUP1 DUP6 ADD DUP1 SLOAD DUP8 MLOAD PUSH2 0x100 SWAP6 DUP3 AND ISZERO SWAP6 SWAP1 SWAP6 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD AND SWAP2 SWAP1 SWAP2 DIV PUSH1 0x1F DUP2 ADD DUP9 SWAP1 DIV DUP9 MUL DUP5 ADD DUP9 ADD SWAP1 SWAP7 MSTORE DUP6 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND SWAP6 SWAP1 SWAP5 SWAP2 SWAP3 SWAP2 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x1220 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x11F5 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1220 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1203 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP PUSH1 0x3 SWAP1 SWAP4 ADD SLOAD SWAP2 SWAP3 POP POP PUSH1 0xFF AND DUP5 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x1298 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x126D JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x0 DUP1 PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x12D5 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 SWAP2 POP PUSH1 0x0 SWAP1 POP JUMPDEST PUSH1 0x5 SLOAD DUP2 LT ISZERO PUSH2 0x135C JUMPI DUP6 DUP1 ISZERO PUSH2 0x130A JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND ISZERO JUMPDEST DUP1 PUSH2 0x132E JUMPI POP DUP5 DUP1 ISZERO PUSH2 0x132E JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND JUMPDEST ISZERO PUSH2 0x1354 JUMPI DUP1 DUP4 DUP4 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1342 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SWAP1 JUMPDEST PUSH1 0x1 ADD PUSH2 0x12E1 JUMP JUMPDEST DUP8 DUP8 SUB PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1388 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP DUP8 SWAP1 POP JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x13D1 JUMPI DUP3 DUP2 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x13A5 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP5 DUP10 DUP4 SUB DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x13BF JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x138F JUMP JUMPDEST POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x0 DUP1 PUSH1 0x3 DUP1 SLOAD SWAP1 POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x142D JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 SWAP2 POP PUSH1 0x0 SWAP1 POP JUMPDEST PUSH1 0x3 SLOAD DUP2 LT ISZERO PUSH2 0x1511 JUMPI PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 DUP1 SLOAD SWAP2 SWAP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x1462 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1509 JUMPI PUSH1 0x3 DUP1 SLOAD DUP3 SWAP1 DUP2 LT PUSH2 0x14AA JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 DUP5 SWAP1 DUP5 SWAP1 DUP2 LT PUSH2 0x14DD JUMPI INVALID JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SWAP1 JUMPDEST PUSH1 0x1 ADD PUSH2 0x1439 JUMP JUMPDEST DUP2 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x153B JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP PUSH1 0x0 SWAP1 POP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x159D JUMPI DUP3 DUP2 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1559 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP5 DUP3 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1571 JUMPI INVALID JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 ADD PUSH2 0x1543 JUMP JUMPDEST POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0x15B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3 SLOAD DUP2 PUSH1 0x32 DUP3 GT DUP1 PUSH2 0x15C9 JUMPI POP DUP2 DUP2 GT JUMPDEST DUP1 PUSH2 0x15D2 JUMPI POP DUP1 ISZERO JUMPDEST DUP1 PUSH2 0x15DB JUMPI POP DUP2 ISZERO JUMPDEST ISZERO PUSH2 0x15E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x4 DUP4 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xA3F1EE9126A074D9326C682F561767F710E927FAA811F7A99829D49DC421797A SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x1640 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO ISZERO PUSH2 0x1672 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD DUP5 SWAP2 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x169D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 PUSH2 0x16A7 DUP2 PUSH2 0xFFD JUMP JUMPDEST ISZERO PUSH2 0x16B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 CALLER DUP1 DUP7 MSTORE SWAP3 MSTORE DUP1 DUP5 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SWAP4 OR SWAP1 SWAP3 SSTORE SWAP1 MLOAD DUP9 SWAP3 PUSH32 0x4A504A94899432A9846E1AA406DCEB1BCFD538BB839071D49D1E5E23F5BE30EF SWAP2 LOG3 PUSH2 0x1725 DUP7 PUSH2 0xFFD JUMP JUMPDEST ISZERO PUSH2 0xE88 JUMPI PUSH2 0xE88 DUP7 TIMESTAMP PUSH2 0x1B71 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1741 DUP5 DUP5 DUP5 PUSH2 0x1BBC JUMP JUMPDEST SWAP1 POP PUSH2 0x174C DUP2 PUSH2 0x1622 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x32 DUP2 JUMP JUMPDEST PUSH1 0x4 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 CALLER ADDRESS EQ PUSH2 0x177E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x17B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x17E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP3 POP JUMPDEST PUSH1 0x3 SLOAD DUP4 LT ISZERO PUSH2 0x18AE JUMPI DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x3 DUP5 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x181E JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x18A3 JUMPI DUP4 PUSH1 0x3 DUP5 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1856 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0x18AE JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 PUSH2 0x17EE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 SWAP1 DUP2 AND SWAP1 SWAP2 SSTORE SWAP4 DUP9 AND DUP3 MSTORE DUP1 DUP3 KECCAK256 DUP1 SLOAD SWAP1 SWAP5 AND PUSH1 0x1 OR SWAP1 SWAP4 SSTORE SWAP2 MLOAD SWAP1 SWAP2 PUSH32 0x8001553A916EF2F495D26A907CC54D96ED840D7BDA71E73194BF5A9DF7A76B90 SWAP2 LOG2 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP1 PUSH32 0xF39E6E1EB0EDCF53C221607B54B00CD28F3196FED0A24994DC308B8F611B682D SWAP1 PUSH1 0x0 SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 ADD SLOAD DUP3 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x19A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH2 0x19AB DUP2 PUSH2 0xFFD JUMP JUMPDEST ISZERO ISZERO PUSH2 0x19B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP6 SWAP2 ADD TIMESTAMP LT ISZERO PUSH2 0x19D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x3 DUP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP2 SLOAD DUP2 DUP4 ADD SLOAD SWAP4 MLOAD PUSH1 0x2 DUP1 DUP6 ADD DUP1 SLOAD SWAP6 SWAP11 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND SWAP6 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 DUP4 SWAP3 DUP6 SWAP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP4 AND ISZERO PUSH2 0x100 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 AND DIV DUP1 ISZERO PUSH2 0x1AC9 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1A9E JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1AC9 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1AAC JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP ISZERO PUSH2 0x1B14 JUMPI PUSH1 0x40 MLOAD DUP6 SWAP1 PUSH32 0x33E13ECB54C3076D8E8BB8C2881800A4D972B792045FFAE98FDF46DF365FED75 SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH2 0x1B6A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP6 SWAP1 PUSH32 0x526441BB6C1ABA3C9A4A6CA1D6545DA9C2333C8C48343EF398EB858D72B79236 SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH1 0x3 DUP5 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 SWAP1 SSTORE DUP2 MLOAD DUP4 DUP2 MSTORE SWAP2 MLOAD DUP5 SWAP3 PUSH32 0xB237AFE65F1514FD7EA3F923EA4FE792BDD07000A912B6CD1602A8E7F573C8D SWAP3 SWAP1 DUP3 SWAP1 SUB ADD SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO ISZERO PUSH2 0x1BE1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x80 DUP2 ADD DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD DUP10 DUP2 MSTORE DUP4 DUP6 ADD DUP10 DUP2 MSTORE PUSH1 0x0 PUSH1 0x60 DUP7 ADD DUP2 SWAP1 MSTORE DUP8 DUP2 MSTORE DUP1 DUP5 MSTORE SWAP6 SWAP1 SWAP6 KECCAK256 DUP5 MLOAD DUP2 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP5 AND SWAP4 SWAP1 SWAP4 OR DUP4 SSTORE MLOAD PUSH1 0x1 DUP4 ADD SSTORE SWAP3 MLOAD DUP1 MLOAD SWAP5 SWAP7 POP SWAP2 SWAP4 SWAP1 SWAP3 PUSH2 0x1C79 SWAP3 PUSH1 0x2 DUP6 ADD SWAP3 SWAP2 ADD SWAP1 PUSH2 0x1D18 JUMP JUMPDEST POP PUSH1 0x60 SWAP2 SWAP1 SWAP2 ADD MLOAD PUSH1 0x3 SWAP1 SWAP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x5 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE PUSH1 0x40 MLOAD DUP3 SWAP1 PUSH32 0xC0BA8FE4B176C1714197D43B9CC6BCF797A4A7461C5FE8D0EF6E184AE7601E51 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 SLOAD DUP2 DUP4 SSTORE DUP2 DUP2 GT ISZERO PUSH2 0x1D13 JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 PUSH2 0x1D13 SWAP2 DUP2 ADD SWAP1 DUP4 ADD PUSH2 0x1D96 JUMP JUMPDEST POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0x1D59 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x1D86 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x1D86 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x1D86 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x1D6B JUMP JUMPDEST POP PUSH2 0x1D92 SWAP3 SWAP2 POP PUSH2 0x1D96 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0x12A0 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1D92 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x1D9C JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 0xc8 OR EQ 0xa7 MUL DUP3 GT SWAP13 SDIV CODESIZE PUSH29 0xE5B5AC99A4AE80FD3927672EF71A91CF576988FA3B0029000000000000 ",
- "sourceMap": "671:2422:2:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2519:1:0;2507:9;:13;2503:61;;;2534:30;;;2554:9;2534:30;;;;2542:10;;2534:30;;;;;;;;;;2503:61;671:2422:2;936:23:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;936:23:0;;;;;;;;;;;;;;;;;;;;;;;;3711:460;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3711:460:0;;;;;;;3156:332:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3156:332:1;;;;;890:40:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;890:40:0;;;;;;;;;;;;;;;;;;;;;;;;;820:64;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;820:64:0;;;;;;;;;1009:29:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1009:29:1;;;;;;;;;;;;;;;;;;;;9136:319:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9136:319:0;;;;;;;;;;;2731:360:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2731:360:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2731:360:2;;-1:-1:-1;2731:360:2;;-1:-1:-1;;;;;;;2731:360:2;2015:502;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2015:502:2;;;;;3311:277:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3311:277:0;;;;;;;7304:337;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7304:337:0;;;;;2281:186:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2281:186:1;;;;;8622:252:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8622:252:0;;;;;765:49;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;765:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;765:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9539:115;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9539:115:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;9539:115:0;;;;;;;;;;;;;;;;;10757:676;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10757:676:0;;;;;;;;;;;;;;;773:44:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;773:44:2;;;;9833:575:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9833:575:0;;;;;991:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;991:28:0;;;;4990:207;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4990:207:0;;;;;2573:459:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2573:459:1;;;;;5456:244:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5456:244:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5456:244:0;;-1:-1:-1;5456:244:0;;-1:-1:-1;;;;;;;5456:244:0;1045:47:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1045:47:1;;;;;217:41:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;217:41:0;;;;965:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;965:20:0;;;;4370:449;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4370:449:0;;;;;;;;;;;;3602:472:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3602:472:1;;;;;936:23:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;936:23:0;:::o;3711:460::-;3859:6;1186:10;1208:4;1186:27;1182:50;;1227:5;;;1182:50;1420:14;;;;;;;:7;:14;;;;;;3801:5;;1420:14;;1419:15;1415:38;;;1448:5;;;1415:38;3822:14;;;3839:5;3822:14;;;:7;:14;;;;;:22;;;;;;3839:5;-1:-1:-1;3854:170:0;3871:6;:13;:17;;3869:19;;3854:170;;;3924:5;3911:18;;:6;3918:1;3911:9;;;;;;;;;;;;;;;;;;;;;;:18;3907:117;;;3961:6;3968:13;;:17;;;;3961:25;;;;;;;;;;;;;;;;3949:6;:9;;3961:25;;;;;3956:1;;3949:9;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;4004:5;;3907:117;3890:3;;;;;3854:170;;;4033:6;:18;;;;;;;;;:::i;:::-;-1:-1:-1;4076:6:0;:13;4065:8;;:24;4061:74;;;4121:6;:13;4103:32;;:17;:32::i;:::-;4145:19;;;;;;;;;;;1242:1;3711:460;;:::o;3156:332:1:-;3239:10;1420:14:0;;;;:7;:14;;;;;;;;1419:15;1415:38;;;1448:5;;;1415:38;1694:28;;;;:13;:28;;;;;;;;3284:10:1;1694:35:0;;;;;;;;;3269:13:1;;3284:10;1694:35:0;;1693:36;1689:59;;;1743:5;;;1689:59;1976:12;:27;;;;;;;;;;:36;;;3316:13:1;;1976:36:0;;1972:59;;;2026:5;;;1972:59;3357:13:1;1165:26;1177:13;1165:11;:26::i;:::-;1164:27;1156:36;;;;;;3429:5;3386:28;;;:13;:28;;;;;;;;3415:10;3386:40;;;;;;;;:48;;;;;;3444:37;3400:13;;3444:37;;;2041:1:0;1758;1463;;3156:332:1;;:::o;890:40:0:-;;;;;;;;;;;;;;;:::o;820:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1009:29:1:-;;;;:::o;9136:319:0:-;9243:10;;9269:179;9286:16;;9284:1;:18;9269:179;;;9328:7;:36;;;;-1:-1:-1;9340:12:0;:15;;;;;;;;;;:24;;;;;9339:25;9328:36;:92;;;;9384:8;:36;;;;-1:-1:-1;9396:12:0;:15;;;;;;;;;;:24;;;;;9384:36;9321:127;;;9447:1;9438:10;;;;9321:127;9304:3;;9269:179;;;9136:319;;;;;:::o;2731:360:2:-;2904:40;;;;;;;;;;;;;;;;2835:4;;;2955:109;2976:1;2972;:5;2955:109;;;3017:32;3050:1;3017:35;;;;;;;;;;3006:46;;;:4;3011:1;3006:7;;;;;;;;;;;;;;;;;;;;;:46;;;2998:55;;;;;;2979:3;;2955:109;;;3080:4;3073:11;;2731:360;;;;;;:::o;2015:502::-;2231:22;1976:27:0;;;;;;;;;;:36;;;2110:13:2;;1976:36:0;;1972:59;;;2026:5;;;1972:59;2148:13:2;1278:26:1;1290:13;1278:11;:26::i;:::-;1270:35;;;;;;;;894:22:2;919:27;;;;;;;;;;982:29;;964:14;;2202:13;;919:27;982:29;964:14;;;982:29;;964:47;956:56;;;;;;1064:7;;;;1030:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1064:7;1030:42;;1064:7;1030:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:33;:42::i;:::-;1022:51;;;;;;;;2256:12;:27;;;;;;;;;;;;2293:11;;;:18;;;;2307:4;2293:18;;;;;;2325:14;;2351:8;;;;2325:44;;2361:7;;;;2325:44;;2256:27;;-1:-1:-1;2325:14:2;;;;;2351:8;2361:7;;2325:44;;;;2361:7;;2325:44;;;;;2293:18;2325:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2321:190;;;2383:24;;2393:13;;2383:24;;;;;2321:190;;;2436:31;;2453:13;;2436:31;;;;;2481:11;;;:19;;;;;;2321:190;1315:1:1;;2041::0;2015:502:2;;;:::o;3311:277:0:-;1186:10;1208:4;1186:27;1182:50;;1227:5;;;1182:50;1312:14;;;;;;;:7;:14;;;;;;3404:5;;1312:14;;1308:37;;;1340:5;;;1308:37;3427:5;2104:13;;;;2100:36;;;2131:5;;;2100:36;3459:6;:13;;;;3475:1;3459:17;3478:8;;256:2;2236:10;:28;:66;;;;2292:10;2280:9;:22;2236:66;:96;;;-1:-1:-1;2318:14:0;;2236:96;:127;;;-1:-1:-1;2348:15:0;;2236:127;2229:153;;;2377:5;;;2229:153;3502:14;;;;;;;:7;:14;;;;;;:21;;;;3519:4;3502:21;;;;;;3533:6;27:10:-1;;23:18;;;45:23;;3533:18:0;;;;;;;;;;;;3561:20;;;3502:14;3561:20;2146:1;;1355;1242;3311:277;:::o;7304:337::-;7394:4;;;7438:197;7455:6;:13;7453:15;;7438:197;;;7493:28;;;;:13;:28;;;;;7522:6;:9;;7493:28;;;7529:1;;7522:9;;;;;;;;;;;;;;;;;;;;7493:39;;;;;;;;;;;;;;;7489:71;;;7559:1;7550:10;;;;7489:71;7587:8;;7578:5;:17;7574:50;;;7620:4;7613:11;;;;7574:50;7470:3;;7438:197;;2281:186:1;1186:10:0;1208:4;1186:27;1182:50;;1227:5;;;1182:50;2378:17:1;:38;;;2426:34;;;;;;;;;;;;;;;;;2281:186;:::o;8622:252:0:-;8721:10;;8747:120;8764:6;:13;8762:15;;8747:120;;;8800:28;;;;:13;:28;;;;;8829:6;:9;;8800:28;;;8836:1;;8829:9;;;;;;;;;;;;;;;;;;;;8800:39;;;;;;;;;;;;;;;8796:71;;;8866:1;8857:10;;;;8796:71;8779:3;;8747:120;;;8622:252;;;;:::o;765:49::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;765:49:0;;;;;;;-1:-1:-1;;765:49:0;;;:::o;9539:115::-;9609:9;9641:6;9634:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9539:115;;:::o;10757:676::-;10882:22;10920:32;10993:10;11017:6;10966:16;;10955:28;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;10955:28:0;;10920:63;;11006:1;10993:14;;11040:1;11038:3;;11033:250;11045:16;;11043:1;:18;11033:250;;;11087:7;:36;;;;-1:-1:-1;11099:12:0;:15;;;;;;;;;;:24;;;;;11098:25;11087:36;:92;;;;11143:8;:36;;;;-1:-1:-1;11155:12:0;:15;;;;;;;;;;:24;;;;;11143:36;11080:203;;;11239:1;11211:18;11230:5;11211:25;;;;;;;;;;;;;;;;;;:29;11267:1;11258:10;;;;;11080:203;11063:3;;11033:250;;;11326:4;11321:2;:9;11310:21;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;11310:21:0;;11292:39;;11348:4;11346:6;;11341:85;11356:2;11354:1;:4;11341:85;;;11405:18;11424:1;11405:21;;;;;;;;;;;;;;;;;;11377:15;11397:4;11393:1;:8;11377:25;;;;;;;;;;;;;;;;;;:49;11360:3;;11341:85;;;10757:676;;;;;;;;;:::o;773:44:2:-;;;;;;:::o;9833:575:0:-;9928:24;9968:34;10043:10;10067:6;10019;:13;;;;10005:28;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;10005:28:0;;9968:65;;10056:1;10043:14;;10090:1;10088:3;;10083:186;10095:6;:13;10093:15;;10083:186;;;10131:28;;;;:13;:28;;;;;10160:6;:9;;10131:28;;;10167:1;;10160:9;;;;;;;;;;;;;;;;;;;;10131:39;;;;;;;;;;;;;;;10127:142;;;10217:6;:9;;10224:1;;10217:9;;;;;;;;;;;;;;;;10190:24;;10217:9;;;;;10190:17;;10208:5;;10190:24;;;;;;:36;;;;:24;;;;;;;;;;:36;10253:1;10244:10;;;;;10127:142;10110:3;;10083:186;;;10309:5;10295:20;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;10295:20:0;;10278:37;;10332:1;10330:3;;10325:76;10337:5;10335:1;:7;10325:76;;;10381:17;10399:1;10381:20;;;;;;;;;;;;;;;;;;10361:14;10376:1;10361:17;;;;;;;;;;:40;;;;:17;;;;;;;;;;:40;10344:3;;10325:76;;;9833:575;;;;;;:::o;991:28::-;;;;:::o;4990:207::-;1186:10;1208:4;1186:27;1182:50;;1227:5;;;1182:50;5092:6;:13;5107:9;256:2;2236:28;;;:66;;;2292:10;2280:9;:22;2236:66;:96;;;-1:-1:-1;2318:14:0;;2236:96;:127;;;-1:-1:-1;2348:15:0;;2236:127;2229:153;;;2377:5;;;2229:153;5132:8;:20;;;5162:28;;;;;;;;;;;;;;;;;1242:1;;4990:207;:::o;2573:459:1:-;2656:10;1420:14:0;;;;:7;:14;;;;;;;;1419:15;1415:38;;;1448:5;;;1415:38;1538:12;:27;;;;;;;;;;:39;2694:13:1;;1538:39:0;;:44;1534:67;;;1596:5;;;1534:67;1843:28;;;;:13;:28;;;;;;;;2745:10:1;1843:35:0;;;;;;;;;2730:13:1;;2745:10;1843:35:0;;1839:58;;;1892:5;;;1839:58;2783:13:1;1165:26;1177:13;1165:11;:26::i;:::-;1164:27;1156:36;;;;;;2812:28;;;;2855:4;2812:28;;;;;;;;2841:10;2812:40;;;;;;;;:47;;;;;;;;;;2869:39;;2826:13;;2869:39;;;2922:26;2934:13;2922:11;:26::i;:::-;2918:108;;;2964:51;2984:13;2999:15;2964:19;:51::i;5456:244:0:-;5560:18;5610:40;5625:11;5638:5;5645:4;5610:14;:40::i;:::-;5594:56;;5660:33;5679:13;5660:18;:33::i;:::-;5456:244;;;;;:::o;1045:47:1:-;;;;;;;;;;;;;:::o;217:41:0:-;256:2;217:41;:::o;965:20::-;;;;:::o;4370:449::-;4541:6;1186:10;1208:4;1186:27;1182:50;;1227:5;;;1182:50;1420:14;;;;;;;:7;:14;;;;;;4479:5;;1420:14;;1419:15;1415:38;;;1448:5;;;1415:38;1312:14;;;;;;;:7;:14;;;;;;4512:8;;1312:14;;1308:37;;;1340:5;;;1308:37;4548:1;4541:8;;4536:149;4553:6;:13;4551:15;;4536:149;;;4602:5;4589:18;;:6;4596:1;4589:9;;;;;;;;;;;;;;;;;;;;;;:18;4585:100;;;4639:8;4627:6;4634:1;4627:9;;;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;4665:5;;4585:100;4568:3;;;;;4536:149;;;4694:14;;;;4711:5;4694:14;;;:7;:14;;;;;;:22;;;;;;;;;4726:17;;;;;;;;:24;;;;;4694:22;4726:24;;;;4760:19;;4694:14;;4760:19;;;4789:23;;;;;;;;;;;1463:1;1242;4370:449;;;:::o;3602:472:1:-;3788:22;1976:27:0;;;;;;;;;;:36;;;3685:13:1;;1976:36:0;;1972:59;;;2026:5;;;1972:59;3723:13:1;1278:26;1290:13;1278:11;:26::i;:::-;1270:35;;;;;;;;1443:17;;1408:32;;;;:17;:32;;;;;;3759:13;;1408:52;1389:15;:71;;1381:80;;;;;;3813:12;:27;;;;;;;;;;;;3850:11;;;:18;;;;3864:4;3850:18;;;;;;3882:14;;3908:8;;;;3882:44;;3918:7;;;;3882:44;;3813:27;;-1:-1:-1;3882:14:1;;;;;3908:8;3918:7;;3882:44;;;;3918:7;;3882:44;;;;;3850:18;3882:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3878:190;;;3940:24;;3950:13;;3940:24;;;;;3878:190;;;3993:31;;4010:13;;3993:31;;;;;4038:11;;;:19;;;;;;3878:190;1315:1;2041::0;3602:472:1;;;:::o;4184:223::-;4287:32;;;;:17;:32;;;;;;;;;:51;;;4348:52;;;;;;;4305:13;;4348:52;;;;;;;;;4184:223;;:::o;7974:451:0:-;8106:18;8076:11;2104:13;;;;2100:36;;;2131:5;;;2100:36;8156:16;;8212:140;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8212:140:0;;;;;;8182:27;;;;;;;;;;:170;;;;;;;;;;;;;;;-1:-1:-1;8182:170:0;;;;;;;8156:16;;-1:-1:-1;8212:140:0;;8182:27;;:170;;;;;;;;;;:::i;:::-;-1:-1:-1;8182:170:0;;;;;;;;;;;;;;;;;;;;;;;8362:16;:21;;-1:-1:-1;8362:21:0;;;8393:25;;8404:13;;8393:25;;-1:-1:-1;;8393:25:0;7974:451;;;;;;:::o;671:2422:2:-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;671:2422:2;;;-1:-1:-1;671:2422:2;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;"
- }
- }
- },
- "sources": {
- "current/multisig/MultiSigWallet.sol": {
- "id": 0
- },
- "current/multisig/MultiSigWalletWithTimeLock.sol": {
- "id": 1
- },
- "previous/MultiSigWalletWithTImeLockExceptRemoveAuthorizedAddress/MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress.sol": {
- "id": 2
- }
- },
- "sourceCodes": {
- "current/multisig/MultiSigWallet.sol": "pragma solidity ^0.4.10;\n\n/// @title Multisignature wallet - Allows multiple parties to agree on transactions before execution.\n/// @author Stefan George - <stefan.george@consensys.net>\ncontract MultiSigWallet {\n\n uint constant public MAX_OWNER_COUNT = 50;\n\n event Confirmation(address indexed sender, uint indexed transactionId);\n event Revocation(address indexed sender, uint indexed transactionId);\n event Submission(uint indexed transactionId);\n event Execution(uint indexed transactionId);\n event ExecutionFailure(uint indexed transactionId);\n event Deposit(address indexed sender, uint value);\n event OwnerAddition(address indexed owner);\n event OwnerRemoval(address indexed owner);\n event RequirementChange(uint required);\n\n mapping (uint => Transaction) public transactions;\n mapping (uint => mapping (address => bool)) public confirmations;\n mapping (address => bool) public isOwner;\n address[] public owners;\n uint public required;\n uint public transactionCount;\n\n struct Transaction {\n address destination;\n uint value;\n bytes data;\n bool executed;\n }\n\n modifier onlyWallet() {\n if (msg.sender != address(this))\n throw;\n _;\n }\n\n modifier ownerDoesNotExist(address owner) {\n if (isOwner[owner])\n throw;\n _;\n }\n\n modifier ownerExists(address owner) {\n if (!isOwner[owner])\n throw;\n _;\n }\n\n modifier transactionExists(uint transactionId) {\n if (transactions[transactionId].destination == 0)\n throw;\n _;\n }\n\n modifier confirmed(uint transactionId, address owner) {\n if (!confirmations[transactionId][owner])\n throw;\n _;\n }\n\n modifier notConfirmed(uint transactionId, address owner) {\n if (confirmations[transactionId][owner])\n throw;\n _;\n }\n\n modifier notExecuted(uint transactionId) {\n if (transactions[transactionId].executed)\n throw;\n _;\n }\n\n modifier notNull(address _address) {\n if (_address == 0)\n throw;\n _;\n }\n\n modifier validRequirement(uint ownerCount, uint _required) {\n if ( ownerCount > MAX_OWNER_COUNT\n || _required > ownerCount\n || _required == 0\n || ownerCount == 0)\n throw;\n _;\n }\n\n /// @dev Fallback function allows to deposit ether.\n function()\n payable\n {\n if (msg.value > 0)\n Deposit(msg.sender, msg.value);\n }\n\n /*\n * Public functions\n */\n /// @dev Contract constructor sets initial owners and required number of confirmations.\n /// @param _owners List of initial owners.\n /// @param _required Number of required confirmations.\n function MultiSigWallet(address[] _owners, uint _required)\n public\n validRequirement(_owners.length, _required)\n {\n for (uint i=0; i<_owners.length; i++) {\n if (isOwner[_owners[i]] || _owners[i] == 0)\n throw;\n isOwner[_owners[i]] = true;\n }\n owners = _owners;\n required = _required;\n }\n\n /// @dev Allows to add a new owner. Transaction has to be sent by wallet.\n /// @param owner Address of new owner.\n function addOwner(address owner)\n public\n onlyWallet\n ownerDoesNotExist(owner)\n notNull(owner)\n validRequirement(owners.length + 1, required)\n {\n isOwner[owner] = true;\n owners.push(owner);\n OwnerAddition(owner);\n }\n\n /// @dev Allows to remove an owner. Transaction has to be sent by wallet.\n /// @param owner Address of owner.\n function removeOwner(address owner)\n public\n onlyWallet\n ownerExists(owner)\n {\n isOwner[owner] = false;\n for (uint i=0; i<owners.length - 1; i++)\n if (owners[i] == owner) {\n owners[i] = owners[owners.length - 1];\n break;\n }\n owners.length -= 1;\n if (required > owners.length)\n changeRequirement(owners.length);\n OwnerRemoval(owner);\n }\n\n /// @dev Allows to replace an owner with a new owner. Transaction has to be sent by wallet.\n /// @param owner Address of owner to be replaced.\n /// @param owner Address of new owner.\n function replaceOwner(address owner, address newOwner)\n public\n onlyWallet\n ownerExists(owner)\n ownerDoesNotExist(newOwner)\n {\n for (uint i=0; i<owners.length; i++)\n if (owners[i] == owner) {\n owners[i] = newOwner;\n break;\n }\n isOwner[owner] = false;\n isOwner[newOwner] = true;\n OwnerRemoval(owner);\n OwnerAddition(newOwner);\n }\n\n /// @dev Allows to change the number of required confirmations. Transaction has to be sent by wallet.\n /// @param _required Number of required confirmations.\n function changeRequirement(uint _required)\n public\n onlyWallet\n validRequirement(owners.length, _required)\n {\n required = _required;\n RequirementChange(_required);\n }\n\n /// @dev Allows an owner to submit and confirm a transaction.\n /// @param destination Transaction target address.\n /// @param value Transaction ether value.\n /// @param data Transaction data payload.\n /// @return Returns transaction ID.\n function submitTransaction(address destination, uint value, bytes data)\n public\n returns (uint transactionId)\n {\n transactionId = addTransaction(destination, value, data);\n confirmTransaction(transactionId);\n }\n\n /// @dev Allows an owner to confirm a transaction.\n /// @param transactionId Transaction ID.\n function confirmTransaction(uint transactionId)\n public\n ownerExists(msg.sender)\n transactionExists(transactionId)\n notConfirmed(transactionId, msg.sender)\n {\n confirmations[transactionId][msg.sender] = true;\n Confirmation(msg.sender, transactionId);\n executeTransaction(transactionId);\n }\n\n /// @dev Allows an owner to revoke a confirmation for a transaction.\n /// @param transactionId Transaction ID.\n function revokeConfirmation(uint transactionId)\n public\n ownerExists(msg.sender)\n confirmed(transactionId, msg.sender)\n notExecuted(transactionId)\n {\n confirmations[transactionId][msg.sender] = false;\n Revocation(msg.sender, transactionId);\n }\n\n /// @dev Allows anyone to execute a confirmed transaction.\n /// @param transactionId Transaction ID.\n function executeTransaction(uint transactionId)\n public\n notExecuted(transactionId)\n {\n if (isConfirmed(transactionId)) {\n Transaction tx = transactions[transactionId];\n tx.executed = true;\n if (tx.destination.call.value(tx.value)(tx.data))\n Execution(transactionId);\n else {\n ExecutionFailure(transactionId);\n tx.executed = false;\n }\n }\n }\n\n /// @dev Returns the confirmation status of a transaction.\n /// @param transactionId Transaction ID.\n /// @return Confirmation status.\n function isConfirmed(uint transactionId)\n public\n constant\n returns (bool)\n {\n uint count = 0;\n for (uint i=0; i<owners.length; i++) {\n if (confirmations[transactionId][owners[i]])\n count += 1;\n if (count == required)\n return true;\n }\n }\n\n /*\n * Internal functions\n */\n /// @dev Adds a new transaction to the transaction mapping, if transaction does not exist yet.\n /// @param destination Transaction target address.\n /// @param value Transaction ether value.\n /// @param data Transaction data payload.\n /// @return Returns transaction ID.\n function addTransaction(address destination, uint value, bytes data)\n internal\n notNull(destination)\n returns (uint transactionId)\n {\n transactionId = transactionCount;\n transactions[transactionId] = Transaction({\n destination: destination,\n value: value,\n data: data,\n executed: false\n });\n transactionCount += 1;\n Submission(transactionId);\n }\n\n /*\n * Web3 call functions\n */\n /// @dev Returns number of confirmations of a transaction.\n /// @param transactionId Transaction ID.\n /// @return Number of confirmations.\n function getConfirmationCount(uint transactionId)\n public\n constant\n returns (uint count)\n {\n for (uint i=0; i<owners.length; i++)\n if (confirmations[transactionId][owners[i]])\n count += 1;\n }\n\n /// @dev Returns total number of transactions after filers are applied.\n /// @param pending Include pending transactions.\n /// @param executed Include executed transactions.\n /// @return Total number of transactions after filters are applied.\n function getTransactionCount(bool pending, bool executed)\n public\n constant\n returns (uint count)\n {\n for (uint i=0; i<transactionCount; i++)\n if ( pending && !transactions[i].executed\n || executed && transactions[i].executed)\n count += 1;\n }\n\n /// @dev Returns list of owners.\n /// @return List of owner addresses.\n function getOwners()\n public\n constant\n returns (address[])\n {\n return owners;\n }\n\n /// @dev Returns array with owner addresses, which confirmed transaction.\n /// @param transactionId Transaction ID.\n /// @return Returns array of owner addresses.\n function getConfirmations(uint transactionId)\n public\n constant\n returns (address[] _confirmations)\n {\n address[] memory confirmationsTemp = new address[](owners.length);\n uint count = 0;\n uint i;\n for (i=0; i<owners.length; i++)\n if (confirmations[transactionId][owners[i]]) {\n confirmationsTemp[count] = owners[i];\n count += 1;\n }\n _confirmations = new address[](count);\n for (i=0; i<count; i++)\n _confirmations[i] = confirmationsTemp[i];\n }\n\n /// @dev Returns list of transaction IDs in defined range.\n /// @param from Index start position of transaction array.\n /// @param to Index end position of transaction array.\n /// @param pending Include pending transactions.\n /// @param executed Include executed transactions.\n /// @return Returns array of transaction IDs.\n function getTransactionIds(uint from, uint to, bool pending, bool executed)\n public\n constant\n returns (uint[] _transactionIds)\n {\n uint[] memory transactionIdsTemp = new uint[](transactionCount);\n uint count = 0;\n uint i;\n for (i=0; i<transactionCount; i++)\n if ( pending && !transactions[i].executed\n || executed && transactions[i].executed)\n {\n transactionIdsTemp[count] = i;\n count += 1;\n }\n _transactionIds = new uint[](to - from);\n for (i=from; i<to; i++)\n _transactionIds[i - from] = transactionIdsTemp[i];\n }\n}\n",
- "current/multisig/MultiSigWalletWithTimeLock.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.10;\n\nimport \"./MultiSigWallet.sol\";\n\n/// @title Multisignature wallet with time lock- Allows multiple parties to execute a transaction after a time lock has passed.\n/// @author Amir Bandeali - <amir@0xProject.com>\ncontract MultiSigWalletWithTimeLock is MultiSigWallet {\n\n event ConfirmationTimeSet(uint indexed transactionId, uint confirmationTime);\n event TimeLockChange(uint secondsTimeLocked);\n\n uint public secondsTimeLocked;\n\n mapping (uint => uint) public confirmationTimes;\n\n modifier notFullyConfirmed(uint transactionId) {\n require(!isConfirmed(transactionId));\n _;\n }\n\n modifier fullyConfirmed(uint transactionId) {\n require(isConfirmed(transactionId));\n _;\n }\n\n modifier pastTimeLock(uint transactionId) {\n require(block.timestamp >= confirmationTimes[transactionId] + secondsTimeLocked);\n _;\n }\n\n /*\n * Public functions\n */\n\n /// @dev Contract constructor sets initial owners, required number of confirmations, and time lock.\n /// @param _owners List of initial owners.\n /// @param _required Number of required confirmations.\n /// @param _secondsTimeLocked Duration needed after a transaction is confirmed and before it becomes executable, in seconds.\n function MultiSigWalletWithTimeLock(address[] _owners, uint _required, uint _secondsTimeLocked)\n public\n MultiSigWallet(_owners, _required)\n {\n secondsTimeLocked = _secondsTimeLocked;\n }\n\n /// @dev Changes the duration of the time lock for transactions.\n /// @param _secondsTimeLocked Duration needed after a transaction is confirmed and before it becomes executable, in seconds.\n function changeTimeLock(uint _secondsTimeLocked)\n public\n onlyWallet\n {\n secondsTimeLocked = _secondsTimeLocked;\n TimeLockChange(_secondsTimeLocked);\n }\n\n /// @dev Allows an owner to confirm a transaction.\n /// @param transactionId Transaction ID.\n function confirmTransaction(uint transactionId)\n public\n ownerExists(msg.sender)\n transactionExists(transactionId)\n notConfirmed(transactionId, msg.sender)\n notFullyConfirmed(transactionId)\n {\n confirmations[transactionId][msg.sender] = true;\n Confirmation(msg.sender, transactionId);\n if (isConfirmed(transactionId)) {\n setConfirmationTime(transactionId, block.timestamp);\n }\n }\n\n /// @dev Allows an owner to revoke a confirmation for a transaction.\n /// @param transactionId Transaction ID.\n function revokeConfirmation(uint transactionId)\n public\n ownerExists(msg.sender)\n confirmed(transactionId, msg.sender)\n notExecuted(transactionId)\n notFullyConfirmed(transactionId)\n {\n confirmations[transactionId][msg.sender] = false;\n Revocation(msg.sender, transactionId);\n }\n\n /// @dev Allows anyone to execute a confirmed transaction.\n /// @param transactionId Transaction ID.\n function executeTransaction(uint transactionId)\n public\n notExecuted(transactionId)\n fullyConfirmed(transactionId)\n pastTimeLock(transactionId)\n {\n Transaction storage tx = transactions[transactionId];\n tx.executed = true;\n if (tx.destination.call.value(tx.value)(tx.data))\n Execution(transactionId);\n else {\n ExecutionFailure(transactionId);\n tx.executed = false;\n }\n }\n\n /*\n * Internal functions\n */\n\n /// @dev Sets the time of when a submission first passed.\n function setConfirmationTime(uint transactionId, uint confirmationTime)\n internal\n {\n confirmationTimes[transactionId] = confirmationTime;\n ConfirmationTimeSet(transactionId, confirmationTime);\n }\n}\n",
- "previous/MultiSigWalletWithTImeLockExceptRemoveAuthorizedAddress/MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress.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.10;\n\nimport \"../../current/multisig/MultiSigWalletWithTimeLock.sol\";\n\ncontract MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress is MultiSigWalletWithTimeLock {\n\n address public TOKEN_TRANSFER_PROXY_CONTRACT;\n\n modifier validRemoveAuthorizedAddressTx(uint transactionId) {\n Transaction storage tx = transactions[transactionId];\n require(tx.destination == TOKEN_TRANSFER_PROXY_CONTRACT);\n require(isFunctionRemoveAuthorizedAddress(tx.data));\n _;\n }\n\n /// @dev Contract constructor sets initial owners, required number of confirmations, time lock, and tokenTransferProxy address.\n /// @param _owners List of initial owners.\n /// @param _required Number of required confirmations.\n /// @param _secondsTimeLocked Duration needed after a transaction is confirmed and before it becomes executable, in seconds.\n /// @param _tokenTransferProxy Address of TokenTransferProxy contract.\n function MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress(\n address[] _owners,\n uint _required,\n uint _secondsTimeLocked,\n address _tokenTransferProxy)\n public\n MultiSigWalletWithTimeLock(_owners, _required, _secondsTimeLocked)\n {\n TOKEN_TRANSFER_PROXY_CONTRACT = _tokenTransferProxy;\n }\n\n /// @dev Allows execution of removeAuthorizedAddress without time lock.\n /// @param transactionId Transaction ID.\n function executeRemoveAuthorizedAddress(uint transactionId)\n public\n notExecuted(transactionId)\n fullyConfirmed(transactionId)\n validRemoveAuthorizedAddressTx(transactionId)\n {\n Transaction storage tx = transactions[transactionId];\n tx.executed = true;\n if (tx.destination.call.value(tx.value)(tx.data))\n Execution(transactionId);\n else {\n ExecutionFailure(transactionId);\n tx.executed = false;\n }\n }\n\n /// @dev Compares first 4 bytes of byte array to removeAuthorizedAddress function signature.\n /// @param data Transaction data.\n /// @return Successful if data is a call to removeAuthorizedAddress.\n function isFunctionRemoveAuthorizedAddress(bytes data)\n public\n constant\n returns (bool)\n {\n bytes4 removeAuthorizedAddressSignature = bytes4(sha3(\"removeAuthorizedAddress(address)\"));\n for (uint i = 0; i < 4; i++) {\n require(data[i] == removeAuthorizedAddressSignature[i]);\n }\n return true;\n }\n}"
- },
- "sourceTreeHashHex": "0x573413fc71759cd8ee69df44c180fd3960f501349cf046e93ee8b239b4814d35",
- "compiler": {
- "name": "solc",
- "version": "soljson-v0.4.24+commit.e67f0147.js",
- "settings": {
- "optimizer": {
- "enabled": true,
- "runs": 1000000
- },
- "outputSelection": {
- "*": {
- "*": [
- "abi",
- "evm.bytecode.object",
- "evm.bytecode.sourceMap",
- "evm.deployedBytecode.object",
- "evm.deployedBytecode.sourceMap"
- ]
- }
- }
- }
- },
- "networks": {}
-} \ No newline at end of file
diff --git a/packages/migrations/artifacts/2.0.0/TestAssetProxyDispatcher.json b/packages/migrations/artifacts/2.0.0/TestAssetProxyDispatcher.json
index f0d10569b..ab1ee6500 100644
--- a/packages/migrations/artifacts/2.0.0/TestAssetProxyDispatcher.json
+++ b/packages/migrations/artifacts/2.0.0/TestAssetProxyDispatcher.json
@@ -130,15 +130,15 @@
"evm": {
"bytecode": {
"linkReferences": {},
- "object": "0x608060405260008054600160a060020a03191633179055610a2d806100256000396000f3006080604052600436106100775763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416633fd3c997811461007c57806360704108146100b2578063889b6d8d146100df5780638da5cb5b14610101578063c585bb9314610116578063f2fde38b14610136575b600080fd5b34801561008857600080fd5b5061009c61009736600461071c565b610156565b6040516100a991906108e0565b60405180910390f35b3480156100be57600080fd5b506100d26100cd36600461071c565b61017e565b6040516100a991906108b1565b3480156100eb57600080fd5b506100ff6100fa366004610758565b6101c8565b005b34801561010d57600080fd5b506100d26101da565b34801561012257600080fd5b506100ff6101313660046106f6565b6101f6565b34801561014257600080fd5b506100ff6101513660046106f6565b610428565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b7fffffffff000000000000000000000000000000000000000000000000000000001660009081526001602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6101d4848484846104d9565b50505050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b600080548190819073ffffffffffffffffffffffffffffffffffffffff163314610255576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161024c9061091e565b60405180910390fd5b8392508273ffffffffffffffffffffffffffffffffffffffff1663ae25532e6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156102bc57600080fd5b505af11580156102d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506102f4919081019061073a565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081526001602052604090205490925073ffffffffffffffffffffffffffffffffffffffff1690508015610379576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161024c906108ee565b7fffffffff0000000000000000000000000000000000000000000000000000000082166000908152600160205260409081902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8616179055517fd2c6b762299c609bdb96520b58a49bfb80186934d4f71a86a367571a15c031949061041a90849087906108c5565b60405180910390a150505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610479576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161024c9061091e565b73ffffffffffffffffffffffffffffffffffffffff8116156104d657600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b6000806000831115610663578551600310610520576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161024c9061090e565b50506020848101517fffffffff00000000000000000000000000000000000000000000000000000000166000818152600190925260409091205473ffffffffffffffffffffffffffffffffffffffff168015156105a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161024c906108fe565b604051660fffffffffffe0603f885101168060840182017fa85e59e40000000000000000000000000000000000000000000000000000000083526080600484015273ffffffffffffffffffffffffffffffffffffffff8816602484015273ffffffffffffffffffffffffffffffffffffffff87166044840152856064840152608483015b8181101561064557895181526020998a01990161062d565b61020084858403866000895af180151561065d573d85fd5b50505050505b505050505050565b6000610677823561099b565b9392505050565b600061067782356109b4565b600061067782516109b4565b6000601f820183136106a757600080fd5b81356106ba6106b582610955565b61092e565b915080825260208301602083018583830111156106d657600080fd5b6106e18382846109e7565b50505092915050565b600061067782356109d9565b60006020828403121561070857600080fd5b6000610714848461066b565b949350505050565b60006020828403121561072e57600080fd5b6000610714848461067e565b60006020828403121561074c57600080fd5b6000610714848461068a565b6000806000806080858703121561076e57600080fd5b843567ffffffffffffffff81111561078557600080fd5b61079187828801610696565b94505060206107a28782880161066b565b93505060406107b38782880161066b565b92505060606107c4878288016106ea565b91505092959194509250565b6107d98161099b565b82525050565b6107d9816109b4565b6107d9816109dc565b601a81527f41535345545f50524f58595f414c52454144595f455849535453000000000000602082015260400190565b601a81527f41535345545f50524f58595f444f45535f4e4f545f4558495354000000000000602082015260400190565b601e81527f4c454e4754485f475245415445525f5448414e5f335f52455155495245440000602082015260400190565b601381527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000602082015260400190565b602081016108bf82846107d0565b92915050565b604081016108d382856107df565b61067760208301846107d0565b602081016108bf82846107e8565b602080825281016108bf816107f1565b602080825281016108bf81610821565b602080825281016108bf81610851565b602080825281016108bf81610881565b60405181810167ffffffffffffffff8111828210171561094d57600080fd5b604052919050565b600067ffffffffffffffff82111561096c57600080fd5b506020601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160190565b73ffffffffffffffffffffffffffffffffffffffff1690565b7fffffffff000000000000000000000000000000000000000000000000000000001690565b90565b60006108bf8261099b565b828183375060009101525600a265627a7a723058207ded9dee5fd6dc82b6686f8a244f1c889b293ae91a5603a092fc7b3858c2537b6c6578706572696d656e74616cf50037",
- "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB NOT AND CALLER OR SWAP1 SSTORE PUSH2 0xA2D DUP1 PUSH2 0x25 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x77 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x3FD3C997 DUP2 EQ PUSH2 0x7C JUMPI DUP1 PUSH4 0x60704108 EQ PUSH2 0xB2 JUMPI DUP1 PUSH4 0x889B6D8D EQ PUSH2 0xDF JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x101 JUMPI DUP1 PUSH4 0xC585BB93 EQ PUSH2 0x116 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x136 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x88 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x9C PUSH2 0x97 CALLDATASIZE PUSH1 0x4 PUSH2 0x71C JUMP JUMPDEST PUSH2 0x156 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xA9 SWAP2 SWAP1 PUSH2 0x8E0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xBE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD2 PUSH2 0xCD CALLDATASIZE PUSH1 0x4 PUSH2 0x71C JUMP JUMPDEST PUSH2 0x17E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xA9 SWAP2 SWAP1 PUSH2 0x8B1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xEB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFF PUSH2 0xFA CALLDATASIZE PUSH1 0x4 PUSH2 0x758 JUMP JUMPDEST PUSH2 0x1C8 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x10D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD2 PUSH2 0x1DA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x122 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFF PUSH2 0x131 CALLDATASIZE PUSH1 0x4 PUSH2 0x6F6 JUMP JUMPDEST PUSH2 0x1F6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x142 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFF PUSH2 0x151 CALLDATASIZE PUSH1 0x4 PUSH2 0x6F6 JUMP JUMPDEST PUSH2 0x428 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x1D4 DUP5 DUP5 DUP5 DUP5 PUSH2 0x4D9 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD DUP2 SWAP1 DUP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x255 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x24C SWAP1 PUSH2 0x91E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP4 SWAP3 POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xAE25532E PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH29 0x100000000000000000000000000000000000000000000000000000000 MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2D0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0x2F4 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x73A JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP3 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP1 ISZERO PUSH2 0x379 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x24C SWAP1 PUSH2 0x8EE JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND OR SWAP1 SSTORE MLOAD PUSH32 0xD2C6B762299C609BDB96520B58A49BFB80186934D4F71A86A367571A15C03194 SWAP1 PUSH2 0x41A SWAP1 DUP5 SWAP1 DUP8 SWAP1 PUSH2 0x8C5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x479 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x24C SWAP1 PUSH2 0x91E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0x4D6 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND OR SWAP1 SSTORE JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 GT ISZERO PUSH2 0x663 JUMPI DUP6 MLOAD PUSH1 0x3 LT PUSH2 0x520 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x24C SWAP1 PUSH2 0x90E JUMP JUMPDEST POP POP PUSH1 0x20 DUP5 DUP2 ADD MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP3 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO ISZERO PUSH2 0x5A9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x24C SWAP1 PUSH2 0x8FE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH7 0xFFFFFFFFFFFE0 PUSH1 0x3F DUP9 MLOAD ADD AND DUP1 PUSH1 0x84 ADD DUP3 ADD PUSH32 0xA85E59E400000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x80 PUSH1 0x4 DUP5 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x24 DUP5 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x44 DUP5 ADD MSTORE DUP6 PUSH1 0x64 DUP5 ADD MSTORE PUSH1 0x84 DUP4 ADD JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x645 JUMPI DUP10 MLOAD DUP2 MSTORE PUSH1 0x20 SWAP10 DUP11 ADD SWAP10 ADD PUSH2 0x62D JUMP JUMPDEST PUSH2 0x200 DUP5 DUP6 DUP5 SUB DUP7 PUSH1 0x0 DUP10 GAS CALL DUP1 ISZERO ISZERO PUSH2 0x65D JUMPI RETURNDATASIZE DUP6 REVERT JUMPDEST POP POP POP POP POP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x677 DUP3 CALLDATALOAD PUSH2 0x99B JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x677 DUP3 CALLDATALOAD PUSH2 0x9B4 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x677 DUP3 MLOAD PUSH2 0x9B4 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0x6A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x6BA PUSH2 0x6B5 DUP3 PUSH2 0x955 JUMP JUMPDEST PUSH2 0x92E JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP4 ADD DUP6 DUP4 DUP4 ADD GT ISZERO PUSH2 0x6D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x6E1 DUP4 DUP3 DUP5 PUSH2 0x9E7 JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x677 DUP3 CALLDATALOAD PUSH2 0x9D9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x708 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x714 DUP5 DUP5 PUSH2 0x66B JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x72E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x714 DUP5 DUP5 PUSH2 0x67E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x74C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x714 DUP5 DUP5 PUSH2 0x68A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x76E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x785 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x791 DUP8 DUP3 DUP9 ADD PUSH2 0x696 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x7A2 DUP8 DUP3 DUP9 ADD PUSH2 0x66B JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 PUSH2 0x7B3 DUP8 DUP3 DUP9 ADD PUSH2 0x66B JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 PUSH2 0x7C4 DUP8 DUP3 DUP9 ADD PUSH2 0x6EA JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH2 0x7D9 DUP2 PUSH2 0x99B JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x7D9 DUP2 PUSH2 0x9B4 JUMP JUMPDEST PUSH2 0x7D9 DUP2 PUSH2 0x9DC JUMP JUMPDEST PUSH1 0x1A DUP2 MSTORE PUSH32 0x41535345545F50524F58595F414C52454144595F455849535453000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1A DUP2 MSTORE PUSH32 0x41535345545F50524F58595F444F45535F4E4F545F4558495354000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1E DUP2 MSTORE PUSH32 0x4C454E4754485F475245415445525F5448414E5F335F52455155495245440000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x13 DUP2 MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x8BF DUP3 DUP5 PUSH2 0x7D0 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x8D3 DUP3 DUP6 PUSH2 0x7DF JUMP JUMPDEST PUSH2 0x677 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x7D0 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x8BF DUP3 DUP5 PUSH2 0x7E8 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x8BF DUP2 PUSH2 0x7F1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x8BF DUP2 PUSH2 0x821 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x8BF DUP2 PUSH2 0x851 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x8BF DUP2 PUSH2 0x881 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x94D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x96C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x1F SWAP2 SWAP1 SWAP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8BF DUP3 PUSH2 0x99B JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP STOP LOG2 PUSH6 0x627A7A723058 KECCAK256 PUSH30 0xED9DEE5FD6DC82B6686F8A244F1C889B293AE91A5603A092FC7B3858C253 PUSH28 0x6C6578706572696D656E74616CF50037000000000000000000000000 ",
- "sourceMap": "705:291:5:-;;;363:5:8;:18;;-1:-1:-1;;;;;;363:18:8;371:10;363:18;;;705:291:5;;;;;;"
+ "object": "0x608060405260008054600160a060020a03191633179055610845806100256000396000f3006080604052600436106100775763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416633fd3c997811461007c57806360704108146100df578063889b6d8d146101195780638da5cb5b14610199578063c585bb93146101ae578063f2fde38b146101dc575b600080fd5b34801561008857600080fd5b506100b67fffffffff000000000000000000000000000000000000000000000000000000006004351661020a565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156100eb57600080fd5b506100b67fffffffff0000000000000000000000000000000000000000000000000000000060043516610232565b34801561012557600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526101979436949293602493928401919081908401838280828437509497505073ffffffffffffffffffffffffffffffffffffffff8535811696506020860135169460400135935061027c92505050565b005b3480156101a557600080fd5b506100b661028e565b3480156101ba57600080fd5b5061019773ffffffffffffffffffffffffffffffffffffffff600435166102aa565b3480156101e857600080fd5b5061019773ffffffffffffffffffffffffffffffffffffffff60043516610537565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b7fffffffff000000000000000000000000000000000000000000000000000000001660009081526001602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6102888484848461061d565b50505050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b600080548190819073ffffffffffffffffffffffffffffffffffffffff16331461033557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b8392508273ffffffffffffffffffffffffffffffffffffffff1663ae25532e6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561039c57600080fd5b505af11580156103b0573d6000803e3d6000fd5b505050506040513d60208110156103c657600080fd5b50517fffffffff00000000000000000000000000000000000000000000000000000000811660009081526001602052604090205490925073ffffffffffffffffffffffffffffffffffffffff169050801561048257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f41535345545f50524f58595f414c52454144595f455849535453000000000000604482015290519081900360640190fd5b7fffffffff00000000000000000000000000000000000000000000000000000000821660008181526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff88811691909117909155825193845287169083015280517fd2c6b762299c609bdb96520b58a49bfb80186934d4f71a86a367571a15c031949281900390910190a150505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105bd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81161561061a57600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b600080600083111561081157855160031061069957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4c454e4754485f475245415445525f5448414e5f335f52455155495245440000604482015290519081900360640190fd5b50506020848101517fffffffff00000000000000000000000000000000000000000000000000000000166000818152600190925260409091205473ffffffffffffffffffffffffffffffffffffffff1680151561075757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f41535345545f50524f58595f444f45535f4e4f545f4558495354000000000000604482015290519081900360640190fd5b604051660fffffffffffe0603f885101168060840182017fa85e59e40000000000000000000000000000000000000000000000000000000083526080600484015273ffffffffffffffffffffffffffffffffffffffff8816602484015273ffffffffffffffffffffffffffffffffffffffff87166044840152856064840152608483015b818110156107f357895181526020998a0199016107db565b61020084858403866000895af180151561080b573d85fd5b50505050505b5050505050505600a165627a7a72305820a10eb8f192e784fd32edf78f2d16f2af6599b60f706aef391d6b95dfa6dd8aea0029",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB NOT AND CALLER OR SWAP1 SSTORE PUSH2 0x845 DUP1 PUSH2 0x25 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x77 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x3FD3C997 DUP2 EQ PUSH2 0x7C JUMPI DUP1 PUSH4 0x60704108 EQ PUSH2 0xDF JUMPI DUP1 PUSH4 0x889B6D8D EQ PUSH2 0x119 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x199 JUMPI DUP1 PUSH4 0xC585BB93 EQ PUSH2 0x1AE JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x1DC JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x88 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB6 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x4 CALLDATALOAD AND PUSH2 0x20A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xEB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB6 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x4 CALLDATALOAD AND PUSH2 0x232 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x125 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 DUP1 CALLDATALOAD DUP1 DUP3 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x197 SWAP5 CALLDATASIZE SWAP5 SWAP3 SWAP4 PUSH1 0x24 SWAP4 SWAP3 DUP5 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 CALLDATALOAD DUP2 AND SWAP7 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD AND SWAP5 PUSH1 0x40 ADD CALLDATALOAD SWAP4 POP PUSH2 0x27C SWAP3 POP POP POP JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB6 PUSH2 0x28E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x197 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x2AA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x197 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x537 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x288 DUP5 DUP5 DUP5 DUP5 PUSH2 0x61D JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD DUP2 SWAP1 DUP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x335 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP4 SWAP3 POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xAE25532E PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH29 0x100000000000000000000000000000000000000000000000000000000 MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x39C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3B0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP3 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP1 ISZERO PUSH2 0x482 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x41535345545F50524F58595F414C52454144595F455849535453000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP2 SSTORE DUP3 MLOAD SWAP4 DUP5 MSTORE DUP8 AND SWAP1 DUP4 ADD MSTORE DUP1 MLOAD PUSH32 0xD2C6B762299C609BDB96520B58A49BFB80186934D4F71A86A367571A15C03194 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x5BD JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0x61A JUMPI PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND OR SWAP1 SSTORE JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 GT ISZERO PUSH2 0x811 JUMPI DUP6 MLOAD PUSH1 0x3 LT PUSH2 0x699 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C454E4754485F475245415445525F5448414E5F335F52455155495245440000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP PUSH1 0x20 DUP5 DUP2 ADD MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP3 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO ISZERO PUSH2 0x757 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x41535345545F50524F58595F444F45535F4E4F545F4558495354000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH7 0xFFFFFFFFFFFE0 PUSH1 0x3F DUP9 MLOAD ADD AND DUP1 PUSH1 0x84 ADD DUP3 ADD PUSH32 0xA85E59E400000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x80 PUSH1 0x4 DUP5 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x24 DUP5 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x44 DUP5 ADD MSTORE DUP6 PUSH1 0x64 DUP5 ADD MSTORE PUSH1 0x84 DUP4 ADD JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x7F3 JUMPI DUP10 MLOAD DUP2 MSTORE PUSH1 0x20 SWAP10 DUP11 ADD SWAP10 ADD PUSH2 0x7DB JUMP JUMPDEST PUSH2 0x200 DUP5 DUP6 DUP5 SUB DUP7 PUSH1 0x0 DUP10 GAS CALL DUP1 ISZERO ISZERO PUSH2 0x80B JUMPI RETURNDATASIZE DUP6 REVERT JUMPDEST POP POP POP POP POP JUMPDEST POP POP POP POP POP POP JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 LOG1 0xe 0xb8 CALL SWAP3 0xe7 DUP5 REVERT ORIGIN 0xed 0xf7 DUP16 0x2d AND CALLCODE 0xaf PUSH6 0x99B60F706AEF CODECOPY SAR PUSH12 0x95DFA6DD8AEA002900000000 ",
+ "sourceMap": "671:296:5:-;;;329:5:8;:18;;-1:-1:-1;;;;;;329:18:8;337:10;329:18;;;671:296:5;;;;;;"
},
"deployedBytecode": {
"linkReferences": {},
- "object": "0x6080604052600436106100775763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416633fd3c997811461007c57806360704108146100b2578063889b6d8d146100df5780638da5cb5b14610101578063c585bb9314610116578063f2fde38b14610136575b600080fd5b34801561008857600080fd5b5061009c61009736600461071c565b610156565b6040516100a991906108e0565b60405180910390f35b3480156100be57600080fd5b506100d26100cd36600461071c565b61017e565b6040516100a991906108b1565b3480156100eb57600080fd5b506100ff6100fa366004610758565b6101c8565b005b34801561010d57600080fd5b506100d26101da565b34801561012257600080fd5b506100ff6101313660046106f6565b6101f6565b34801561014257600080fd5b506100ff6101513660046106f6565b610428565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b7fffffffff000000000000000000000000000000000000000000000000000000001660009081526001602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6101d4848484846104d9565b50505050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b600080548190819073ffffffffffffffffffffffffffffffffffffffff163314610255576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161024c9061091e565b60405180910390fd5b8392508273ffffffffffffffffffffffffffffffffffffffff1663ae25532e6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156102bc57600080fd5b505af11580156102d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506102f4919081019061073a565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081526001602052604090205490925073ffffffffffffffffffffffffffffffffffffffff1690508015610379576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161024c906108ee565b7fffffffff0000000000000000000000000000000000000000000000000000000082166000908152600160205260409081902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8616179055517fd2c6b762299c609bdb96520b58a49bfb80186934d4f71a86a367571a15c031949061041a90849087906108c5565b60405180910390a150505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610479576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161024c9061091e565b73ffffffffffffffffffffffffffffffffffffffff8116156104d657600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b6000806000831115610663578551600310610520576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161024c9061090e565b50506020848101517fffffffff00000000000000000000000000000000000000000000000000000000166000818152600190925260409091205473ffffffffffffffffffffffffffffffffffffffff168015156105a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161024c906108fe565b604051660fffffffffffe0603f885101168060840182017fa85e59e40000000000000000000000000000000000000000000000000000000083526080600484015273ffffffffffffffffffffffffffffffffffffffff8816602484015273ffffffffffffffffffffffffffffffffffffffff87166044840152856064840152608483015b8181101561064557895181526020998a01990161062d565b61020084858403866000895af180151561065d573d85fd5b50505050505b505050505050565b6000610677823561099b565b9392505050565b600061067782356109b4565b600061067782516109b4565b6000601f820183136106a757600080fd5b81356106ba6106b582610955565b61092e565b915080825260208301602083018583830111156106d657600080fd5b6106e18382846109e7565b50505092915050565b600061067782356109d9565b60006020828403121561070857600080fd5b6000610714848461066b565b949350505050565b60006020828403121561072e57600080fd5b6000610714848461067e565b60006020828403121561074c57600080fd5b6000610714848461068a565b6000806000806080858703121561076e57600080fd5b843567ffffffffffffffff81111561078557600080fd5b61079187828801610696565b94505060206107a28782880161066b565b93505060406107b38782880161066b565b92505060606107c4878288016106ea565b91505092959194509250565b6107d98161099b565b82525050565b6107d9816109b4565b6107d9816109dc565b601a81527f41535345545f50524f58595f414c52454144595f455849535453000000000000602082015260400190565b601a81527f41535345545f50524f58595f444f45535f4e4f545f4558495354000000000000602082015260400190565b601e81527f4c454e4754485f475245415445525f5448414e5f335f52455155495245440000602082015260400190565b601381527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000602082015260400190565b602081016108bf82846107d0565b92915050565b604081016108d382856107df565b61067760208301846107d0565b602081016108bf82846107e8565b602080825281016108bf816107f1565b602080825281016108bf81610821565b602080825281016108bf81610851565b602080825281016108bf81610881565b60405181810167ffffffffffffffff8111828210171561094d57600080fd5b604052919050565b600067ffffffffffffffff82111561096c57600080fd5b506020601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160190565b73ffffffffffffffffffffffffffffffffffffffff1690565b7fffffffff000000000000000000000000000000000000000000000000000000001690565b90565b60006108bf8261099b565b828183375060009101525600a265627a7a723058207ded9dee5fd6dc82b6686f8a244f1c889b293ae91a5603a092fc7b3858c2537b6c6578706572696d656e74616cf50037",
- "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x77 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x3FD3C997 DUP2 EQ PUSH2 0x7C JUMPI DUP1 PUSH4 0x60704108 EQ PUSH2 0xB2 JUMPI DUP1 PUSH4 0x889B6D8D EQ PUSH2 0xDF JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x101 JUMPI DUP1 PUSH4 0xC585BB93 EQ PUSH2 0x116 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x136 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x88 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x9C PUSH2 0x97 CALLDATASIZE PUSH1 0x4 PUSH2 0x71C JUMP JUMPDEST PUSH2 0x156 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xA9 SWAP2 SWAP1 PUSH2 0x8E0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xBE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD2 PUSH2 0xCD CALLDATASIZE PUSH1 0x4 PUSH2 0x71C JUMP JUMPDEST PUSH2 0x17E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xA9 SWAP2 SWAP1 PUSH2 0x8B1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xEB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFF PUSH2 0xFA CALLDATASIZE PUSH1 0x4 PUSH2 0x758 JUMP JUMPDEST PUSH2 0x1C8 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x10D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD2 PUSH2 0x1DA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x122 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFF PUSH2 0x131 CALLDATASIZE PUSH1 0x4 PUSH2 0x6F6 JUMP JUMPDEST PUSH2 0x1F6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x142 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFF PUSH2 0x151 CALLDATASIZE PUSH1 0x4 PUSH2 0x6F6 JUMP JUMPDEST PUSH2 0x428 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x1D4 DUP5 DUP5 DUP5 DUP5 PUSH2 0x4D9 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD DUP2 SWAP1 DUP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x255 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x24C SWAP1 PUSH2 0x91E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP4 SWAP3 POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xAE25532E PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH29 0x100000000000000000000000000000000000000000000000000000000 MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2D0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0x2F4 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x73A JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP3 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP1 ISZERO PUSH2 0x379 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x24C SWAP1 PUSH2 0x8EE JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND OR SWAP1 SSTORE MLOAD PUSH32 0xD2C6B762299C609BDB96520B58A49BFB80186934D4F71A86A367571A15C03194 SWAP1 PUSH2 0x41A SWAP1 DUP5 SWAP1 DUP8 SWAP1 PUSH2 0x8C5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x479 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x24C SWAP1 PUSH2 0x91E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0x4D6 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND OR SWAP1 SSTORE JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 GT ISZERO PUSH2 0x663 JUMPI DUP6 MLOAD PUSH1 0x3 LT PUSH2 0x520 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x24C SWAP1 PUSH2 0x90E JUMP JUMPDEST POP POP PUSH1 0x20 DUP5 DUP2 ADD MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP3 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO ISZERO PUSH2 0x5A9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x24C SWAP1 PUSH2 0x8FE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH7 0xFFFFFFFFFFFE0 PUSH1 0x3F DUP9 MLOAD ADD AND DUP1 PUSH1 0x84 ADD DUP3 ADD PUSH32 0xA85E59E400000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x80 PUSH1 0x4 DUP5 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x24 DUP5 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x44 DUP5 ADD MSTORE DUP6 PUSH1 0x64 DUP5 ADD MSTORE PUSH1 0x84 DUP4 ADD JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x645 JUMPI DUP10 MLOAD DUP2 MSTORE PUSH1 0x20 SWAP10 DUP11 ADD SWAP10 ADD PUSH2 0x62D JUMP JUMPDEST PUSH2 0x200 DUP5 DUP6 DUP5 SUB DUP7 PUSH1 0x0 DUP10 GAS CALL DUP1 ISZERO ISZERO PUSH2 0x65D JUMPI RETURNDATASIZE DUP6 REVERT JUMPDEST POP POP POP POP POP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x677 DUP3 CALLDATALOAD PUSH2 0x99B JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x677 DUP3 CALLDATALOAD PUSH2 0x9B4 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x677 DUP3 MLOAD PUSH2 0x9B4 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0x6A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x6BA PUSH2 0x6B5 DUP3 PUSH2 0x955 JUMP JUMPDEST PUSH2 0x92E JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP4 ADD DUP6 DUP4 DUP4 ADD GT ISZERO PUSH2 0x6D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x6E1 DUP4 DUP3 DUP5 PUSH2 0x9E7 JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x677 DUP3 CALLDATALOAD PUSH2 0x9D9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x708 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x714 DUP5 DUP5 PUSH2 0x66B JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x72E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x714 DUP5 DUP5 PUSH2 0x67E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x74C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x714 DUP5 DUP5 PUSH2 0x68A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x76E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x785 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x791 DUP8 DUP3 DUP9 ADD PUSH2 0x696 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x7A2 DUP8 DUP3 DUP9 ADD PUSH2 0x66B JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 PUSH2 0x7B3 DUP8 DUP3 DUP9 ADD PUSH2 0x66B JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 PUSH2 0x7C4 DUP8 DUP3 DUP9 ADD PUSH2 0x6EA JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH2 0x7D9 DUP2 PUSH2 0x99B JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x7D9 DUP2 PUSH2 0x9B4 JUMP JUMPDEST PUSH2 0x7D9 DUP2 PUSH2 0x9DC JUMP JUMPDEST PUSH1 0x1A DUP2 MSTORE PUSH32 0x41535345545F50524F58595F414C52454144595F455849535453000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1A DUP2 MSTORE PUSH32 0x41535345545F50524F58595F444F45535F4E4F545F4558495354000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1E DUP2 MSTORE PUSH32 0x4C454E4754485F475245415445525F5448414E5F335F52455155495245440000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x13 DUP2 MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x8BF DUP3 DUP5 PUSH2 0x7D0 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x8D3 DUP3 DUP6 PUSH2 0x7DF JUMP JUMPDEST PUSH2 0x677 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x7D0 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x8BF DUP3 DUP5 PUSH2 0x7E8 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x8BF DUP2 PUSH2 0x7F1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x8BF DUP2 PUSH2 0x821 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x8BF DUP2 PUSH2 0x851 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x8BF DUP2 PUSH2 0x881 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x94D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x96C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x1F SWAP2 SWAP1 SWAP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8BF DUP3 PUSH2 0x99B JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP STOP LOG2 PUSH6 0x627A7A723058 KECCAK256 PUSH30 0xED9DEE5FD6DC82B6686F8A244F1C889B293AE91A5603A092FC7B3858C253 PUSH28 0x6C6578706572696D656E74616CF50037000000000000000000000000 ",
- "sourceMap": "705:291:5:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;976:51:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;976:51:2;;;;;;;;;;;;;;;;;;;;;;;;;2092:154;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2092:154:2;;;;;;;;;;;;;;;;;774:220:5;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;774:220:5;;;;;;;;;;;292:20:8;;8:9:-1;5:2;;;30:1;27;20:12;5:2;292:20:8;;;;1236:666:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1236:666:2;;;;;;;;;534:167:8;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;534:167:8;;;;;;;;;976:51:2;;;;;;;;;;;;;;;:::o;2092:154::-;2213:26;;2183:7;2213:26;;;:12;:26;;;;;;;;;2092:154::o;774:220:5:-;938:49;959:9;970:4;976:2;980:6;938:20;:49::i;:::-;774:220;;;;:::o;292:20:8:-;;;;;;:::o;1236:666:2:-;1333:30;460:5:8;;1333:30:2;;;;460:5:8;;446:10;:19;425:85;;;;;;;;;;;;;;;;;;;;;;1378:10:2;1333:56;;1484:18;:29;;;:31;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1484:31:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1484:31:2;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;1484:31:2;;;;;;;;;1553:26;;;;;;;:12;:26;;;;;;1462:53;;-1:-1:-1;1553:26:2;;;-1:-1:-1;1610:31:2;;1589:104;;;;;;;;;;;;;;1753:26;;;;;;;:12;:26;;;;;;;:47;;;;;;;;;;1815:80;;;;;1753:26;;1875:10;;1815:80;;;;;;;;;;1236:666;;;;:::o;534:167:8:-;460:5;;;;446:10;:19;425:85;;;;;;;;;;;;;;630:22;;;;626:69;;668:5;:16;;;;;;;;;;626:69;534:167;:::o;2561:5007:2:-;3031:19;3290:18;2797:1;2788:6;:10;2784:4778;;;2887:16;;2906:1;-1:-1:-1;2862:109:2;;;;;;;;;;;;;;-1:-1:-1;;3153:2:2;3138:18;;;3111:46;3179:66;3107:156;3311:26;;;;:12;:26;;;;;;;;;;3422:24;;;3397:109;;;;;;;;;;;;;;4923:2;4917:9;5239:15;5234:2;5222:9;5216:16;5212:25;5208:47;5392:14;5387:3;5383:24;5374:7;5370:38;5676:66;5667:7;5660:83;6160:3;6156:1;6147:7;6143:15;6136:28;6216:42;6210:4;6206:53;6201:2;6192:7;6188:16;6181:79;6310:42;6306:2;6302:51;6297:2;6288:7;6284:16;6277:77;6397:6;6391:3;6382:7;6378:17;6371:33;6563:3;6554:7;6550:17;6584:206;6604:5;6594:8;6591:19;6584:206;;;6653:16;;6636:34;;6717:2;6754:18;;;;6703:17;6584:206;;;7356:3;7285:7;7231;7224:5;7220:19;7147:7;7081:1;7006:10;6943:3;6917:512;7456:7;7449:15;7446:2;;;7503:16;7494:7;7487:33;7446:2;4724:2828;;;;;;2561:5007;;;;;;:::o;5:118:-1:-;;72:46;110:6;97:20;72:46;;;63:55;57:66;-1:-1;;;57:66;130:116;;196:45;233:6;220:20;196:45;;253:120;;330:38;360:6;354:13;330:38;;381:440;;475:4;463:17;;459:27;-1:-1;449:2;;500:1;497;490:12;449:2;537:6;524:20;559:64;574:48;615:6;574:48;;;559:64;;;550:73;;643:6;636:5;629:21;679:4;671:6;667:17;712:4;705:5;701:16;747:3;738:6;733:3;729:16;726:25;723:2;;;764:1;761;754:12;723:2;774:41;808:6;803:3;798;774:41;;;442:379;;;;;;;;829:118;;896:46;934:6;921:20;896:46;;954:241;;1058:2;1046:9;1037:7;1033:23;1029:32;1026:2;;;1074:1;1071;1064:12;1026:2;1109:1;1126:53;1171:7;1151:9;1126:53;;;1116:63;1020:175;-1:-1;;;;1020:175;1202:239;;1305:2;1293:9;1284:7;1280:23;1276:32;1273:2;;;1321:1;1318;1311:12;1273:2;1356:1;1373:52;1417:7;1397:9;1373:52;;1448:261;;1562:2;1550:9;1541:7;1537:23;1533:32;1530:2;;;1578:1;1575;1568:12;1530:2;1613:1;1630:63;1685:7;1665:9;1630:63;;1716:721;;;;;1880:3;1868:9;1859:7;1855:23;1851:33;1848:2;;;1897:1;1894;1887:12;1848:2;1932:31;;1983:18;1972:30;;1969:2;;;2015:1;2012;2005:12;1969:2;2035:62;2089:7;2080:6;2069:9;2065:22;2035:62;;;2025:72;;1911:192;2134:2;2152:53;2197:7;2188:6;2177:9;2173:22;2152:53;;;2142:63;;2113:98;2242:2;2260:53;2305:7;2296:6;2285:9;2281:22;2260:53;;;2250:63;;2221:98;2350:2;2368:53;2413:7;2404:6;2393:9;2389:22;2368:53;;;2358:63;;2329:98;1842:595;;;;;;;;2444:110;2517:31;2542:5;2517:31;;;2512:3;2505:44;2499:55;;;2561:107;2632:30;2656:5;2632:30;;2675:154;2767:56;2817:5;2767:56;;2837:296;2992:2;2980:15;;3029:66;3024:2;3015:12;;3008:88;3124:2;3115:12;;2973:160;3142:296;3297:2;3285:15;;3334:66;3329:2;3320:12;;3313:88;3429:2;3420:12;;3278:160;3447:296;3602:2;3590:15;;3639:66;3634:2;3625:12;;3618:88;3734:2;3725:12;;3583:160;3752:296;3907:2;3895:15;;3944:66;3939:2;3930:12;;3923:88;4039:2;4030:12;;3888:160;4056:193;4164:2;4149:18;;4178:61;4153:9;4212:6;4178:61;;;4135:114;;;;;4256:290;4390:2;4375:18;;4404:59;4379:9;4436:6;4404:59;;;4474:62;4532:2;4521:9;4517:18;4508:6;4474:62;;4553:231;4680:2;4665:18;;4694:80;4669:9;4747:6;4694:80;;4791:387;4972:2;4986:47;;;4957:18;;5047:121;4957:18;5047:121;;5185:387;5366:2;5380:47;;;5351:18;;5441:121;5351:18;5441:121;;5579:387;5760:2;5774:47;;;5745:18;;5835:121;5745:18;5835:121;;5973:387;6154:2;6168:47;;;6139:18;;6229:121;6139:18;6229:121;;6367:256;6429:2;6423:9;6455:17;;;6530:18;6515:34;;6551:22;;;6512:62;6509:2;;;6587:1;6584;6577:12;6509:2;6603;6596:22;6407:216;;-1:-1;6407:216;6630:258;;6773:18;6765:6;6762:30;6759:2;;;6805:1;6802;6795:12;6759:2;-1:-1;6878:4;6849;6826:17;;;;6845:9;6822:33;6868:15;;6696:192;6895:128;6975:42;6964:54;;6947:76;7030:151;7109:66;7098:78;;7081:100;7481:79;7550:5;7533:27;7567:134;;7665:31;7690:5;7665:31;;7709:145;7790:6;7785:3;7780;7767:30;-1:-1;7846:1;7828:16;;7821:27;7760:94"
+ "object": "0x6080604052600436106100775763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416633fd3c997811461007c57806360704108146100df578063889b6d8d146101195780638da5cb5b14610199578063c585bb93146101ae578063f2fde38b146101dc575b600080fd5b34801561008857600080fd5b506100b67fffffffff000000000000000000000000000000000000000000000000000000006004351661020a565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156100eb57600080fd5b506100b67fffffffff0000000000000000000000000000000000000000000000000000000060043516610232565b34801561012557600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526101979436949293602493928401919081908401838280828437509497505073ffffffffffffffffffffffffffffffffffffffff8535811696506020860135169460400135935061027c92505050565b005b3480156101a557600080fd5b506100b661028e565b3480156101ba57600080fd5b5061019773ffffffffffffffffffffffffffffffffffffffff600435166102aa565b3480156101e857600080fd5b5061019773ffffffffffffffffffffffffffffffffffffffff60043516610537565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b7fffffffff000000000000000000000000000000000000000000000000000000001660009081526001602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6102888484848461061d565b50505050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b600080548190819073ffffffffffffffffffffffffffffffffffffffff16331461033557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b8392508273ffffffffffffffffffffffffffffffffffffffff1663ae25532e6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561039c57600080fd5b505af11580156103b0573d6000803e3d6000fd5b505050506040513d60208110156103c657600080fd5b50517fffffffff00000000000000000000000000000000000000000000000000000000811660009081526001602052604090205490925073ffffffffffffffffffffffffffffffffffffffff169050801561048257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f41535345545f50524f58595f414c52454144595f455849535453000000000000604482015290519081900360640190fd5b7fffffffff00000000000000000000000000000000000000000000000000000000821660008181526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff88811691909117909155825193845287169083015280517fd2c6b762299c609bdb96520b58a49bfb80186934d4f71a86a367571a15c031949281900390910190a150505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105bd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81161561061a57600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b600080600083111561081157855160031061069957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4c454e4754485f475245415445525f5448414e5f335f52455155495245440000604482015290519081900360640190fd5b50506020848101517fffffffff00000000000000000000000000000000000000000000000000000000166000818152600190925260409091205473ffffffffffffffffffffffffffffffffffffffff1680151561075757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f41535345545f50524f58595f444f45535f4e4f545f4558495354000000000000604482015290519081900360640190fd5b604051660fffffffffffe0603f885101168060840182017fa85e59e40000000000000000000000000000000000000000000000000000000083526080600484015273ffffffffffffffffffffffffffffffffffffffff8816602484015273ffffffffffffffffffffffffffffffffffffffff87166044840152856064840152608483015b818110156107f357895181526020998a0199016107db565b61020084858403866000895af180151561080b573d85fd5b50505050505b5050505050505600a165627a7a72305820a10eb8f192e784fd32edf78f2d16f2af6599b60f706aef391d6b95dfa6dd8aea0029",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x77 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x3FD3C997 DUP2 EQ PUSH2 0x7C JUMPI DUP1 PUSH4 0x60704108 EQ PUSH2 0xDF JUMPI DUP1 PUSH4 0x889B6D8D EQ PUSH2 0x119 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x199 JUMPI DUP1 PUSH4 0xC585BB93 EQ PUSH2 0x1AE JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x1DC JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x88 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB6 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x4 CALLDATALOAD AND PUSH2 0x20A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xEB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB6 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x4 CALLDATALOAD AND PUSH2 0x232 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x125 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 DUP1 CALLDATALOAD DUP1 DUP3 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x197 SWAP5 CALLDATASIZE SWAP5 SWAP3 SWAP4 PUSH1 0x24 SWAP4 SWAP3 DUP5 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 CALLDATALOAD DUP2 AND SWAP7 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD AND SWAP5 PUSH1 0x40 ADD CALLDATALOAD SWAP4 POP PUSH2 0x27C SWAP3 POP POP POP JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB6 PUSH2 0x28E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x197 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x2AA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x197 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x537 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x288 DUP5 DUP5 DUP5 DUP5 PUSH2 0x61D JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD DUP2 SWAP1 DUP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x335 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP4 SWAP3 POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xAE25532E PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH29 0x100000000000000000000000000000000000000000000000000000000 MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x39C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3B0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP3 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP1 ISZERO PUSH2 0x482 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x41535345545F50524F58595F414C52454144595F455849535453000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP2 SSTORE DUP3 MLOAD SWAP4 DUP5 MSTORE DUP8 AND SWAP1 DUP4 ADD MSTORE DUP1 MLOAD PUSH32 0xD2C6B762299C609BDB96520B58A49BFB80186934D4F71A86A367571A15C03194 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x5BD JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0x61A JUMPI PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND OR SWAP1 SSTORE JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 GT ISZERO PUSH2 0x811 JUMPI DUP6 MLOAD PUSH1 0x3 LT PUSH2 0x699 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C454E4754485F475245415445525F5448414E5F335F52455155495245440000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP PUSH1 0x20 DUP5 DUP2 ADD MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP3 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO ISZERO PUSH2 0x757 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x41535345545F50524F58595F444F45535F4E4F545F4558495354000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH7 0xFFFFFFFFFFFE0 PUSH1 0x3F DUP9 MLOAD ADD AND DUP1 PUSH1 0x84 ADD DUP3 ADD PUSH32 0xA85E59E400000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x80 PUSH1 0x4 DUP5 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x24 DUP5 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x44 DUP5 ADD MSTORE DUP6 PUSH1 0x64 DUP5 ADD MSTORE PUSH1 0x84 DUP4 ADD JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x7F3 JUMPI DUP10 MLOAD DUP2 MSTORE PUSH1 0x20 SWAP10 DUP11 ADD SWAP10 ADD PUSH2 0x7DB JUMP JUMPDEST PUSH2 0x200 DUP5 DUP6 DUP5 SUB DUP7 PUSH1 0x0 DUP10 GAS CALL DUP1 ISZERO ISZERO PUSH2 0x80B JUMPI RETURNDATASIZE DUP6 REVERT JUMPDEST POP POP POP POP POP JUMPDEST POP POP POP POP POP POP JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 LOG1 0xe 0xb8 CALL SWAP3 0xe7 DUP5 REVERT ORIGIN 0xed 0xf7 DUP16 0x2d AND CALLCODE 0xaf PUSH6 0x99B60F706AEF CODECOPY SAR PUSH12 0x95DFA6DD8AEA002900000000 ",
+ "sourceMap": "671:296:5:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;976:51:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;976:51:2;;;;;;;;;;;;;;;;;;;;;;;;;;2092:154;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2092:154:2;;;;;;;740:225:5;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;740:225:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;740:225:5;;-1:-1:-1;;740:225:5;;;;;;-1:-1:-1;740:225:5;;;;;;;;;;-1:-1:-1;740:225:5;;-1:-1:-1;;;740:225:5;;;258:20:8;;8:9:-1;5:2;;;30:1;27;20:12;5:2;258:20:8;;;;1236:666:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1236:666:2;;;;;;;500:167:8;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;500:167:8;;;;;;;976:51:2;;;;;;;;;;;;;;;:::o;2092:154::-;2213:26;;2183:7;2213:26;;;:12;:26;;;;;;;;;2092:154::o;740:225:5:-;909:49;930:9;941:4;947:2;951:6;909:20;:49::i;:::-;740:225;;;;:::o;258:20:8:-;;;;;;:::o;1236:666:2:-;1333:30;426:5:8;;1333:30:2;;;;426:5:8;;412:10;:19;391:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1378:10:2;1333:56;;1484:18;:29;;;:31;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1484:31:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1484:31:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1484:31:2;1553:26;;;;;;;:12;1484:31;1553:26;;;;;1484:31;;-1:-1:-1;1553:26:2;;;-1:-1:-1;1610:31:2;;1589:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1753:26;;;;;;;:12;:26;;;;;;;;;:47;;;;;;;;;;;;;;;1815:80;;;;;;;;;;;;;;;;;;;;;;;1236:666;;;;:::o;500:167:8:-;426:5;;;;412:10;:19;391:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;596:22;;;;592:69;;634:5;:16;;;;;;;;;;592:69;500:167;:::o;2561:5068:2:-;3031:19;3290:18;2797:1;2788:6;:10;2784:4839;;;2887:16;;2906:1;-1:-1:-1;2862:109:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3153:2:2;3138:18;;;3111:46;3179:66;3107:156;3311:26;;;;:12;:26;;;;;;;;;;3422:24;;;3397:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4923:2;4917:9;5239:15;5234:2;5222:9;5216:16;5212:25;5208:47;5392:14;5387:3;5383:24;5374:7;5370:38;5676:66;5667:7;5660:83;6160:3;6156:1;6147:7;6143:15;6136:28;6216:42;6210:4;6206:53;6201:2;6192:7;6188:16;6181:79;6310:42;6306:2;6302:51;6297:2;6288:7;6284:16;6277:77;6397:6;6391:3;6382:7;6378:17;6371:33;6563:3;6554:7;6550:17;6645:206;6665:5;6655:8;6652:19;6645:206;;;6714:16;;6697:34;;6778:2;6815:18;;;;6764:17;6645:206;;;7417:3;7346:7;7292;7285:5;7281:19;7208:7;7142:1;7067:10;7004:3;6978:512;7517:7;7510:15;7507:2;;;7564:16;7555:7;7548:33;7507:2;4724:2889;;;;;;2561:5068;;;;;;:::o"
}
}
},
@@ -172,17 +172,17 @@
}
},
"sourceCodes": {
- "2.0.0/protocol/AssetProxy/interfaces/IAssetProxy.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"./IAuthorizable.sol\";\n\ncontract IAssetProxy is\n IAuthorizable\n{\n\n /// @dev Transfers assets. Either succeeds or throws.\n /// @param assetData Byte array encoded for the respective asset proxy.\n /// @param from Address to transfer asset from.\n /// @param to Address to transfer asset to.\n /// @param amount Amount of asset to transfer.\n function transferFrom(\n bytes assetData,\n address from,\n address to,\n uint256 amount\n )\n external;\n \n /// @dev Gets the proxy id associated with the proxy address.\n /// @return Proxy id.\n function getProxyId()\n external\n pure\n returns (bytes4);\n}\n",
- "2.0.0/protocol/AssetProxy/interfaces/IAuthorizable.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../../../utils/Ownable/IOwnable.sol\";\n\ncontract IAuthorizable is\n IOwnable\n{\n\n /// @dev Gets all authorized addresses.\n /// @return Array of authorized addresses.\n function getAuthorizedAddresses()\n external\n view\n returns (address[]);\n\n /// @dev Authorizes an address.\n /// @param target Address to authorize.\n function addAuthorizedAddress(address target)\n external;\n\n /// @dev Removes authorizion of an address.\n /// @param target Address to remove authorization from.\n function removeAuthorizedAddress(address target)\n external;\n\n /// @dev Removes authorizion of an address.\n /// @param target Address to remove authorization from.\n /// @param index Index of target in authorities array.\n function removeAuthorizedAddressAtIndex(\n address target,\n uint256 index\n )\n external;\n}\n",
- "2.0.0/protocol/Exchange/MixinAssetProxyDispatcher.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.24;\n\nimport \"../../utils/Ownable/Ownable.sol\";\nimport \"../../utils/LibBytes/LibBytes.sol\";\nimport \"./mixins/MAssetProxyDispatcher.sol\";\nimport \"../AssetProxy/interfaces/IAssetProxy.sol\";\n\ncontract MixinAssetProxyDispatcher is\n Ownable,\n MAssetProxyDispatcher\n{\n using LibBytes for bytes;\n \n // Mapping from Asset Proxy Id's to their respective Asset Proxy\n mapping (bytes4 => IAssetProxy) public assetProxies;\n\n /// @dev Registers an asset proxy to its asset proxy id.\n /// Once an asset proxy is registered, it cannot be unregistered.\n /// @param assetProxy Address of new asset proxy to register.\n function registerAssetProxy(address assetProxy)\n external\n onlyOwner\n {\n IAssetProxy assetProxyContract = IAssetProxy(assetProxy);\n\n // Ensure that no asset proxy exists with current id.\n bytes4 assetProxyId = assetProxyContract.getProxyId();\n address currentAssetProxy = assetProxies[assetProxyId];\n require(\n currentAssetProxy == address(0),\n \"ASSET_PROXY_ALREADY_EXISTS\"\n );\n\n // Add asset proxy and log registration.\n assetProxies[assetProxyId] = assetProxyContract;\n emit AssetProxyRegistered(\n assetProxyId,\n assetProxy\n );\n }\n\n /// @dev Gets an asset proxy.\n /// @param assetProxyId Id of the asset proxy.\n /// @return The asset proxy registered to assetProxyId. Returns 0x0 if no proxy is registered.\n function getAssetProxy(bytes4 assetProxyId)\n external\n view\n returns (address)\n {\n return assetProxies[assetProxyId];\n }\n\n /// @dev Forwards arguments to assetProxy and calls `transferFrom`. Either succeeds or throws.\n /// @param assetData Byte array encoded for the asset.\n /// @param from Address to transfer token from.\n /// @param to Address to transfer token to.\n /// @param amount Amount of token to transfer.\n function dispatchTransferFrom(\n bytes memory assetData,\n address from,\n address to,\n uint256 amount\n )\n internal\n {\n // Do nothing if no amount should be transferred.\n if (amount > 0) {\n // Ensure assetData length is valid\n require(\n assetData.length > 3,\n \"LENGTH_GREATER_THAN_3_REQUIRED\"\n );\n \n // Lookup assetProxy\n bytes4 assetProxyId;\n assembly {\n assetProxyId := and(mload(\n add(assetData, 32)),\n 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000\n )\n }\n address assetProxy = assetProxies[assetProxyId];\n\n // Ensure that assetProxy exists\n require(\n assetProxy != address(0),\n \"ASSET_PROXY_DOES_NOT_EXIST\"\n );\n \n // We construct calldata for the `assetProxy.transferFrom` ABI.\n // The layout of this calldata is in the table below.\n // \n // | Area | Offset | Length | Contents |\n // | -------- |--------|---------|-------------------------------------------- |\n // | Header | 0 | 4 | function selector |\n // | Params | | 4 * 32 | function parameters: |\n // | | 4 | | 1. offset to assetData (*) |\n // | | 36 | | 2. from |\n // | | 68 | | 3. to |\n // | | 100 | | 4. amount |\n // | Data | | | assetData: |\n // | | 132 | 32 | assetData Length |\n // | | 164 | ** | assetData Contents |\n\n assembly {\n /////// Setup State ///////\n // `cdStart` is the start of the calldata for `assetProxy.transferFrom` (equal to free memory ptr).\n let cdStart := mload(64)\n // `dataAreaLength` is the total number of words needed to store `assetData`\n // As-per the ABI spec, this value is padded up to the nearest multiple of 32,\n // and includes 32-bytes for length.\n let dataAreaLength := and(add(mload(assetData), 63), 0xFFFFFFFFFFFE0)\n // `cdEnd` is the end of the calldata for `assetProxy.transferFrom`.\n let cdEnd := add(cdStart, add(132, dataAreaLength))\n\n \n /////// Setup Header Area ///////\n // This area holds the 4-byte `transferFromSelector`.\n // bytes4(keccak256(\"transferFrom(bytes,address,address,uint256)\")) = 0xa85e59e4\n mstore(cdStart, 0xa85e59e400000000000000000000000000000000000000000000000000000000)\n \n /////// Setup Params Area ///////\n // Each parameter is padded to 32-bytes. The entire Params Area is 128 bytes.\n // Notes:\n // 1. The offset to `assetData` is the length of the Params Area (128 bytes).\n // 2. A 20-byte mask is applied to addresses to zero-out the unused bytes.\n mstore(add(cdStart, 4), 128)\n mstore(add(cdStart, 36), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\n mstore(add(cdStart, 68), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\n mstore(add(cdStart, 100), amount)\n \n /////// Setup Data Area ///////\n // This area holds `assetData`.\n let dataArea := add(cdStart, 132)\n for {} lt(dataArea, cdEnd) {} {\n mstore(dataArea, mload(assetData))\n dataArea := add(dataArea, 32)\n assetData := add(assetData, 32)\n }\n\n /////// Call `assetProxy.transferFrom` using the constructed calldata ///////\n let success := call(\n gas, // forward all gas\n assetProxy, // call address of asset proxy\n 0, // don't send any ETH\n cdStart, // pointer to start of input\n sub(cdEnd, cdStart), // length of input \n cdStart, // write output over input\n 512 // reserve 512 bytes for output\n )\n if iszero(success) {\n revert(cdStart, returndatasize())\n }\n }\n }\n }\n}\n",
- "2.0.0/protocol/Exchange/interfaces/IAssetProxyDispatcher.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.24;\n\ncontract IAssetProxyDispatcher {\n\n /// @dev Registers an asset proxy to its asset proxy id.\n /// Once an asset proxy is registered, it cannot be unregistered.\n /// @param assetProxy Address of new asset proxy to register.\n function registerAssetProxy(address assetProxy)\n external;\n\n /// @dev Gets an asset proxy.\n /// @param assetProxyId Id of the asset proxy.\n /// @return The asset proxy registered to assetProxyId. Returns 0x0 if no proxy is registered.\n function getAssetProxy(bytes4 assetProxyId)\n external\n view\n returns (address);\n}\n",
- "2.0.0/protocol/Exchange/mixins/MAssetProxyDispatcher.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../interfaces/IAssetProxyDispatcher.sol\";\n\ncontract MAssetProxyDispatcher is\n IAssetProxyDispatcher\n{\n\n // Logs registration of new asset proxy\n event AssetProxyRegistered(\n bytes4 id, // Id of new registered AssetProxy.\n address assetProxy // Address of new registered AssetProxy.\n );\n\n /// @dev Forwards arguments to assetProxy and calls `transferFrom`. Either succeeds or throws.\n /// @param assetData Byte array encoded for the asset.\n /// @param from Address to transfer token from.\n /// @param to Address to transfer token to.\n /// @param amount Amount of token to transfer.\n function dispatchTransferFrom(\n bytes memory assetData,\n address from,\n address to,\n uint256 amount\n )\n internal;\n}\n",
- "2.0.0/test/TestAssetProxyDispatcher/TestAssetProxyDispatcher.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../../protocol/Exchange/MixinAssetProxyDispatcher.sol\";\n\ncontract TestAssetProxyDispatcher is MixinAssetProxyDispatcher {\n function publicDispatchTransferFrom(\n bytes memory assetData,\n address from,\n address to,\n uint256 amount)\n public\n {\n dispatchTransferFrom(assetData, from, to, amount);\n }\n}\n",
- "2.0.0/utils/LibBytes/LibBytes.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.24;\n\nlibrary LibBytes {\n\n using LibBytes for bytes;\n\n /// @dev Gets the memory address for a byte array.\n /// @param input Byte array to lookup.\n /// @return memoryAddress Memory address of byte array. This\n /// points to the header of the byte array which contains\n /// the length.\n function rawAddress(bytes memory input)\n internal\n pure\n returns (uint256 memoryAddress)\n {\n assembly {\n memoryAddress := input\n }\n return memoryAddress;\n }\n \n /// @dev Gets the memory address for the contents of a byte array.\n /// @param input Byte array to lookup.\n /// @return memoryAddress Memory address of the contents of the byte array.\n function contentAddress(bytes memory input)\n internal\n pure\n returns (uint256 memoryAddress)\n {\n assembly {\n memoryAddress := add(input, 32)\n }\n return memoryAddress;\n }\n\n /// @dev Copies `length` bytes from memory location `source` to `dest`.\n /// @param dest memory address to copy bytes to.\n /// @param source memory address to copy bytes from.\n /// @param length number of bytes to copy.\n function memCopy(\n uint256 dest,\n uint256 source,\n uint256 length\n )\n internal\n pure\n {\n if (length < 32) {\n // Handle a partial word by reading destination and masking\n // off the bits we are interested in.\n // This correctly handles overlap, zero lengths and source == dest\n assembly {\n let mask := sub(exp(256, sub(32, length)), 1)\n let s := and(mload(source), not(mask))\n let d := and(mload(dest), mask)\n mstore(dest, or(s, d))\n }\n } else {\n // Skip the O(length) loop when source == dest.\n if (source == dest) {\n return;\n }\n\n // For large copies we copy whole words at a time. The final\n // word is aligned to the end of the range (instead of after the\n // previous) to handle partial words. So a copy will look like this:\n //\n // ####\n // ####\n // ####\n // ####\n //\n // We handle overlap in the source and destination range by\n // changing the copying direction. This prevents us from\n // overwriting parts of source that we still need to copy.\n //\n // This correctly handles source == dest\n //\n if (source > dest) {\n assembly {\n // We subtract 32 from `sEnd` and `dEnd` because it\n // is easier to compare with in the loop, and these\n // are also the addresses we need for copying the\n // last bytes.\n length := sub(length, 32)\n let sEnd := add(source, length)\n let dEnd := add(dest, length)\n\n // Remember the last 32 bytes of source\n // This needs to be done here and not after the loop\n // because we may have overwritten the last bytes in\n // source already due to overlap.\n let last := mload(sEnd)\n\n // Copy whole words front to back\n // Note: the first check is always true,\n // this could have been a do-while loop.\n for {} lt(source, sEnd) {} {\n mstore(dest, mload(source))\n source := add(source, 32)\n dest := add(dest, 32)\n }\n \n // Write the last 32 bytes\n mstore(dEnd, last)\n }\n } else {\n assembly {\n // We subtract 32 from `sEnd` and `dEnd` because those\n // are the starting points when copying a word at the end.\n length := sub(length, 32)\n let sEnd := add(source, length)\n let dEnd := add(dest, length)\n\n // Remember the first 32 bytes of source\n // This needs to be done here and not after the loop\n // because we may have overwritten the first bytes in\n // source already due to overlap.\n let first := mload(source)\n\n // Copy whole words back to front\n // We use a signed comparisson here to allow dEnd to become\n // negative (happens when source and dest < 32). Valid\n // addresses in local memory will never be larger than\n // 2**255, so they can be safely re-interpreted as signed.\n // Note: the first check is always true,\n // this could have been a do-while loop.\n for {} slt(dest, dEnd) {} {\n mstore(dEnd, mload(sEnd))\n sEnd := sub(sEnd, 32)\n dEnd := sub(dEnd, 32)\n }\n \n // Write the first 32 bytes\n mstore(dest, first)\n }\n }\n }\n }\n \n /// @dev Returns a slices from a byte array.\n /// @param b The byte array to take a slice from.\n /// @param from The starting index for the slice (inclusive).\n /// @param to The final index for the slice (exclusive).\n /// @return result The slice containing bytes at indices [from, to)\n function slice(bytes memory b, uint256 from, uint256 to)\n internal\n pure\n returns (bytes memory result)\n {\n require(\n from <= to,\n \"FROM_LESS_THAN_TO_REQUIRED\"\n );\n require(\n to < b.length,\n \"TO_LESS_THAN_LENGTH_REQUIRED\"\n );\n \n // Create a new bytes structure and copy contents\n result = new bytes(to - from);\n memCopy(\n result.contentAddress(),\n b.contentAddress() + from,\n result.length);\n return result;\n }\n \n /// @dev Returns a slice from a byte array without preserving the input.\n /// @param b The byte array to take a slice from. Will be destroyed in the process.\n /// @param from The starting index for the slice (inclusive).\n /// @param to The final index for the slice (exclusive).\n /// @return result The slice containing bytes at indices [from, to)\n /// @dev When `from == 0`, the original array will match the slice. In other cases its state will be corrupted.\n function sliceDestructive(bytes memory b, uint256 from, uint256 to)\n internal\n pure\n returns (bytes memory result)\n {\n require(\n from <= to,\n \"FROM_LESS_THAN_TO_REQUIRED\"\n );\n require(\n to < b.length,\n \"TO_LESS_THAN_LENGTH_REQUIRED\"\n );\n \n // Create a new bytes structure around [from, to) in-place.\n assembly {\n result := add(b, from)\n mstore(result, sub(to, from))\n }\n return result;\n }\n\n /// @dev Pops the last byte off of a byte array by modifying its length.\n /// @param b Byte array that will be modified.\n /// @return The byte that was popped off.\n function popLastByte(bytes memory b)\n internal\n pure\n returns (bytes1 result)\n {\n require(\n b.length > 0,\n \"GREATER_THAN_ZERO_LENGTH_REQUIRED\"\n );\n\n // Store last byte.\n result = b[b.length - 1];\n\n assembly {\n // Decrement length of byte array.\n let newLen := sub(mload(b), 1)\n mstore(b, newLen)\n }\n return result;\n }\n\n /// @dev Pops the last 20 bytes off of a byte array by modifying its length.\n /// @param b Byte array that will be modified.\n /// @return The 20 byte address that was popped off.\n function popLast20Bytes(bytes memory b)\n internal\n pure\n returns (address result)\n {\n require(\n b.length >= 20,\n \"GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\"\n );\n\n // Store last 20 bytes.\n result = readAddress(b, b.length - 20);\n\n assembly {\n // Subtract 20 from byte array length.\n let newLen := sub(mload(b), 20)\n mstore(b, newLen)\n }\n return result;\n }\n\n /// @dev Tests equality of two byte arrays.\n /// @param lhs First byte array to compare.\n /// @param rhs Second byte array to compare.\n /// @return True if arrays are the same. False otherwise.\n function equals(\n bytes memory lhs,\n bytes memory rhs\n )\n internal\n pure\n returns (bool equal)\n {\n // Keccak gas cost is 30 + numWords * 6. This is a cheap way to compare.\n // We early exit on unequal lengths, but keccak would also correctly\n // handle this.\n return lhs.length == rhs.length && keccak256(lhs) == keccak256(rhs);\n }\n\n /// @dev Reads an address from a position in a byte array.\n /// @param b Byte array containing an address.\n /// @param index Index in byte array of address.\n /// @return address from byte array.\n function readAddress(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (address result)\n {\n require(\n b.length >= index + 20, // 20 is length of address\n \"GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\"\n );\n\n // Add offset to index:\n // 1. Arrays are prefixed by 32-byte length parameter (add 32 to index)\n // 2. Account for size difference between address length and 32-byte storage word (subtract 12 from index)\n index += 20;\n\n // Read address from array memory\n assembly {\n // 1. Add index to address of bytes array\n // 2. Load 32-byte word from memory\n // 3. Apply 20-byte mask to obtain address\n result := and(mload(add(b, index)), 0xffffffffffffffffffffffffffffffffffffffff)\n }\n return result;\n }\n\n /// @dev Writes an address into a specific position in a byte array.\n /// @param b Byte array to insert address into.\n /// @param index Index in byte array of address.\n /// @param input Address to put into byte array.\n function writeAddress(\n bytes memory b,\n uint256 index,\n address input\n )\n internal\n pure\n {\n require(\n b.length >= index + 20, // 20 is length of address\n \"GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\"\n );\n\n // Add offset to index:\n // 1. Arrays are prefixed by 32-byte length parameter (add 32 to index)\n // 2. Account for size difference between address length and 32-byte storage word (subtract 12 from index)\n index += 20;\n\n // Store address into array memory\n assembly {\n // The address occupies 20 bytes and mstore stores 32 bytes.\n // First fetch the 32-byte word where we'll be storing the address, then\n // apply a mask so we have only the bytes in the word that the address will not occupy.\n // Then combine these bytes with the address and store the 32 bytes back to memory with mstore.\n\n // 1. Add index to address of bytes array\n // 2. Load 32-byte word from memory\n // 3. Apply 12-byte mask to obtain extra bytes occupying word of memory where we'll store the address\n let neighbors := and(mload(add(b, index)), 0xffffffffffffffffffffffff0000000000000000000000000000000000000000)\n \n // Make sure input address is clean.\n // (Solidity does not guarantee this)\n input := and(input, 0xffffffffffffffffffffffffffffffffffffffff)\n\n // Store the neighbors and address into memory\n mstore(add(b, index), xor(input, neighbors))\n }\n }\n\n /// @dev Reads a bytes32 value from a position in a byte array.\n /// @param b Byte array containing a bytes32 value.\n /// @param index Index in byte array of bytes32 value.\n /// @return bytes32 value from byte array.\n function readBytes32(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (bytes32 result)\n {\n require(\n b.length >= index + 32,\n \"GREATER_OR_EQUAL_TO_32_LENGTH_REQUIRED\"\n );\n\n // Arrays are prefixed by a 256 bit length parameter\n index += 32;\n\n // Read the bytes32 from array memory\n assembly {\n result := mload(add(b, index))\n }\n return result;\n }\n\n /// @dev Writes a bytes32 into a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input bytes32 to put into byte array.\n function writeBytes32(\n bytes memory b,\n uint256 index,\n bytes32 input\n )\n internal\n pure\n {\n require(\n b.length >= index + 32,\n \"GREATER_OR_EQUAL_TO_32_LENGTH_REQUIRED\"\n );\n\n // Arrays are prefixed by a 256 bit length parameter\n index += 32;\n\n // Read the bytes32 from array memory\n assembly {\n mstore(add(b, index), input)\n }\n }\n\n /// @dev Reads a uint256 value from a position in a byte array.\n /// @param b Byte array containing a uint256 value.\n /// @param index Index in byte array of uint256 value.\n /// @return uint256 value from byte array.\n function readUint256(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (uint256 result)\n {\n return uint256(readBytes32(b, index));\n }\n\n /// @dev Writes a uint256 into a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input uint256 to put into byte array.\n function writeUint256(\n bytes memory b,\n uint256 index,\n uint256 input\n )\n internal\n pure\n {\n writeBytes32(b, index, bytes32(input));\n }\n\n /// @dev Reads an unpadded bytes4 value from a position in a byte array.\n /// @param b Byte array containing a bytes4 value.\n /// @param index Index in byte array of bytes4 value.\n /// @return bytes4 value from byte array.\n function readBytes4(\n bytes memory b,\n uint256 index)\n internal\n pure\n returns (bytes4 result)\n {\n require(\n b.length >= index + 4,\n \"GREATER_OR_EQUAL_TO_4_LENGTH_REQUIRED\"\n );\n assembly {\n result := mload(add(b, 32))\n // Solidity does not require us to clean the trailing bytes.\n // We do it anyway\n result := and(result, 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000)\n }\n return result;\n }\n\n /// @dev Reads nested bytes from a specific position.\n /// @dev NOTE: the returned value overlaps with the input value.\n /// Both should be treated as immutable.\n /// @param b Byte array containing nested bytes.\n /// @param index Index of nested bytes.\n /// @return result Nested bytes.\n function readBytesWithLength(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (bytes memory result)\n {\n // Read length of nested bytes\n uint256 nestedBytesLength = readUint256(b, index);\n index += 32;\n\n // Assert length of <b> is valid, given\n // length of nested bytes\n require(\n b.length >= index + nestedBytesLength,\n \"GREATER_OR_EQUAL_TO_NESTED_BYTES_LENGTH_REQUIRED\"\n );\n \n // Return a pointer to the byte array as it exists inside `b`\n assembly {\n result := add(b, index)\n }\n return result;\n }\n\n /// @dev Inserts bytes at a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input bytes to insert.\n function writeBytesWithLength(\n bytes memory b,\n uint256 index,\n bytes memory input\n )\n internal\n pure\n {\n // Assert length of <b> is valid, given\n // length of input\n require(\n b.length >= index + 32 /* 32 bytes to store length */ + input.length,\n \"GREATER_OR_EQUAL_TO_NESTED_BYTES_LENGTH_REQUIRED\"\n );\n\n // Copy <input> into <b>\n memCopy(\n b.contentAddress() + index,\n input.rawAddress(), // includes length of <input>\n input.length + 32 // +32 bytes to store <input> length\n );\n }\n\n /// @dev Performs a deep copy of a byte array onto another byte array of greater than or equal length.\n /// @param dest Byte array that will be overwritten with source bytes.\n /// @param source Byte array to copy onto dest bytes.\n function deepCopyBytes(\n bytes memory dest,\n bytes memory source\n )\n internal\n pure\n {\n uint256 sourceLen = source.length;\n // Dest length must be >= source length, or some bytes would not be copied.\n require(\n dest.length >= sourceLen,\n \"GREATER_OR_EQUAL_TO_SOURCE_BYTES_LENGTH_REQUIRED\"\n );\n memCopy(\n dest.contentAddress(),\n source.contentAddress(),\n sourceLen\n );\n }\n}\n",
- "2.0.0/utils/Ownable/IOwnable.sol": "pragma solidity ^0.4.24;\npragma experimental ABIEncoderV2;\n\n/*\n * Ownable\n *\n * Base contract with an owner.\n * Provides onlyOwner modifier, which prevents function from running if it is called by anyone other than the owner.\n */\n\ncontract IOwnable {\n function transferOwnership(address newOwner)\n public;\n}\n",
- "2.0.0/utils/Ownable/Ownable.sol": "pragma solidity ^0.4.24;\npragma experimental ABIEncoderV2;\n\n/*\n * Ownable\n *\n * Base contract with an owner.\n * Provides onlyOwner modifier, which prevents function from running if it is called by anyone other than the owner.\n */\n\nimport \"./IOwnable.sol\";\n\ncontract Ownable is IOwnable {\n address public owner;\n\n constructor ()\n public\n {\n owner = msg.sender;\n }\n\n modifier onlyOwner() {\n require(\n msg.sender == owner,\n \"ONLY_CONTRACT_OWNER\"\n );\n _;\n }\n\n function transferOwnership(address newOwner)\n public\n onlyOwner\n {\n if (newOwner != address(0)) {\n owner = newOwner;\n }\n }\n}\n"
+ "2.0.0/protocol/AssetProxy/interfaces/IAssetProxy.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.24;\n\nimport \"./IAuthorizable.sol\";\n\n\ncontract IAssetProxy is\n IAuthorizable\n{\n\n /// @dev Transfers assets. Either succeeds or throws.\n /// @param assetData Byte array encoded for the respective asset proxy.\n /// @param from Address to transfer asset from.\n /// @param to Address to transfer asset to.\n /// @param amount Amount of asset to transfer.\n function transferFrom(\n bytes assetData,\n address from,\n address to,\n uint256 amount\n )\n external;\n \n /// @dev Gets the proxy id associated with the proxy address.\n /// @return Proxy id.\n function getProxyId()\n external\n pure\n returns (bytes4);\n}\n",
+ "2.0.0/protocol/AssetProxy/interfaces/IAuthorizable.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.24;\n\nimport \"../../../utils/Ownable/IOwnable.sol\";\n\n\ncontract IAuthorizable is\n IOwnable\n{\n\n /// @dev Authorizes an address.\n /// @param target Address to authorize.\n function addAuthorizedAddress(address target)\n external;\n\n /// @dev Removes authorizion of an address.\n /// @param target Address to remove authorization from.\n function removeAuthorizedAddress(address target)\n external;\n\n /// @dev Removes authorizion of an address.\n /// @param target Address to remove authorization from.\n /// @param index Index of target in authorities array.\n function removeAuthorizedAddressAtIndex(\n address target,\n uint256 index\n )\n external;\n \n /// @dev Gets all authorized addresses.\n /// @return Array of authorized addresses.\n function getAuthorizedAddresses()\n external\n view\n returns (address[] memory);\n}\n",
+ "2.0.0/protocol/Exchange/MixinAssetProxyDispatcher.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.24;\n\nimport \"../../utils/Ownable/Ownable.sol\";\nimport \"../../utils/LibBytes/LibBytes.sol\";\nimport \"./mixins/MAssetProxyDispatcher.sol\";\nimport \"../AssetProxy/interfaces/IAssetProxy.sol\";\n\n\ncontract MixinAssetProxyDispatcher is\n Ownable,\n MAssetProxyDispatcher\n{\n using LibBytes for bytes;\n \n // Mapping from Asset Proxy Id's to their respective Asset Proxy\n mapping (bytes4 => IAssetProxy) public assetProxies;\n\n /// @dev Registers an asset proxy to its asset proxy id.\n /// Once an asset proxy is registered, it cannot be unregistered.\n /// @param assetProxy Address of new asset proxy to register.\n function registerAssetProxy(address assetProxy)\n external\n onlyOwner\n {\n IAssetProxy assetProxyContract = IAssetProxy(assetProxy);\n\n // Ensure that no asset proxy exists with current id.\n bytes4 assetProxyId = assetProxyContract.getProxyId();\n address currentAssetProxy = assetProxies[assetProxyId];\n require(\n currentAssetProxy == address(0),\n \"ASSET_PROXY_ALREADY_EXISTS\"\n );\n\n // Add asset proxy and log registration.\n assetProxies[assetProxyId] = assetProxyContract;\n emit AssetProxyRegistered(\n assetProxyId,\n assetProxy\n );\n }\n\n /// @dev Gets an asset proxy.\n /// @param assetProxyId Id of the asset proxy.\n /// @return The asset proxy registered to assetProxyId. Returns 0x0 if no proxy is registered.\n function getAssetProxy(bytes4 assetProxyId)\n external\n view\n returns (address)\n {\n return assetProxies[assetProxyId];\n }\n\n /// @dev Forwards arguments to assetProxy and calls `transferFrom`. Either succeeds or throws.\n /// @param assetData Byte array encoded for the asset.\n /// @param from Address to transfer token from.\n /// @param to Address to transfer token to.\n /// @param amount Amount of token to transfer.\n function dispatchTransferFrom(\n bytes memory assetData,\n address from,\n address to,\n uint256 amount\n )\n internal\n {\n // Do nothing if no amount should be transferred.\n if (amount > 0) {\n // Ensure assetData length is valid\n require(\n assetData.length > 3,\n \"LENGTH_GREATER_THAN_3_REQUIRED\"\n );\n \n // Lookup assetProxy\n bytes4 assetProxyId;\n assembly {\n assetProxyId := and(mload(\n add(assetData, 32)),\n 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000\n )\n }\n address assetProxy = assetProxies[assetProxyId];\n\n // Ensure that assetProxy exists\n require(\n assetProxy != address(0),\n \"ASSET_PROXY_DOES_NOT_EXIST\"\n );\n \n // We construct calldata for the `assetProxy.transferFrom` ABI.\n // The layout of this calldata is in the table below.\n // \n // | Area | Offset | Length | Contents |\n // | -------- |--------|---------|-------------------------------------------- |\n // | Header | 0 | 4 | function selector |\n // | Params | | 4 * 32 | function parameters: |\n // | | 4 | | 1. offset to assetData (*) |\n // | | 36 | | 2. from |\n // | | 68 | | 3. to |\n // | | 100 | | 4. amount |\n // | Data | | | assetData: |\n // | | 132 | 32 | assetData Length |\n // | | 164 | ** | assetData Contents |\n\n assembly {\n /////// Setup State ///////\n // `cdStart` is the start of the calldata for `assetProxy.transferFrom` (equal to free memory ptr).\n let cdStart := mload(64)\n // `dataAreaLength` is the total number of words needed to store `assetData`\n // As-per the ABI spec, this value is padded up to the nearest multiple of 32,\n // and includes 32-bytes for length.\n let dataAreaLength := and(add(mload(assetData), 63), 0xFFFFFFFFFFFE0)\n // `cdEnd` is the end of the calldata for `assetProxy.transferFrom`.\n let cdEnd := add(cdStart, add(132, dataAreaLength))\n\n \n /////// Setup Header Area ///////\n // This area holds the 4-byte `transferFromSelector`.\n // bytes4(keccak256(\"transferFrom(bytes,address,address,uint256)\")) = 0xa85e59e4\n mstore(cdStart, 0xa85e59e400000000000000000000000000000000000000000000000000000000)\n \n /////// Setup Params Area ///////\n // Each parameter is padded to 32-bytes. The entire Params Area is 128 bytes.\n // Notes:\n // 1. The offset to `assetData` is the length of the Params Area (128 bytes).\n // 2. A 20-byte mask is applied to addresses to zero-out the unused bytes.\n mstore(add(cdStart, 4), 128)\n mstore(add(cdStart, 36), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\n mstore(add(cdStart, 68), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\n mstore(add(cdStart, 100), amount)\n \n /////// Setup Data Area ///////\n // This area holds `assetData`.\n let dataArea := add(cdStart, 132)\n // solhint-disable-next-line no-empty-blocks\n for {} lt(dataArea, cdEnd) {} {\n mstore(dataArea, mload(assetData))\n dataArea := add(dataArea, 32)\n assetData := add(assetData, 32)\n }\n\n /////// Call `assetProxy.transferFrom` using the constructed calldata ///////\n let success := call(\n gas, // forward all gas\n assetProxy, // call address of asset proxy\n 0, // don't send any ETH\n cdStart, // pointer to start of input\n sub(cdEnd, cdStart), // length of input \n cdStart, // write output over input\n 512 // reserve 512 bytes for output\n )\n if iszero(success) {\n revert(cdStart, returndatasize())\n }\n }\n }\n }\n}\n",
+ "2.0.0/protocol/Exchange/interfaces/IAssetProxyDispatcher.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.24;\n\n\ncontract IAssetProxyDispatcher {\n\n /// @dev Registers an asset proxy to its asset proxy id.\n /// Once an asset proxy is registered, it cannot be unregistered.\n /// @param assetProxy Address of new asset proxy to register.\n function registerAssetProxy(address assetProxy)\n external;\n\n /// @dev Gets an asset proxy.\n /// @param assetProxyId Id of the asset proxy.\n /// @return The asset proxy registered to assetProxyId. Returns 0x0 if no proxy is registered.\n function getAssetProxy(bytes4 assetProxyId)\n external\n view\n returns (address);\n}\n",
+ "2.0.0/protocol/Exchange/mixins/MAssetProxyDispatcher.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.24;\n\nimport \"../interfaces/IAssetProxyDispatcher.sol\";\n\n\ncontract MAssetProxyDispatcher is\n IAssetProxyDispatcher\n{\n\n // Logs registration of new asset proxy\n event AssetProxyRegistered(\n bytes4 id, // Id of new registered AssetProxy.\n address assetProxy // Address of new registered AssetProxy.\n );\n\n /// @dev Forwards arguments to assetProxy and calls `transferFrom`. Either succeeds or throws.\n /// @param assetData Byte array encoded for the asset.\n /// @param from Address to transfer token from.\n /// @param to Address to transfer token to.\n /// @param amount Amount of token to transfer.\n function dispatchTransferFrom(\n bytes memory assetData,\n address from,\n address to,\n uint256 amount\n )\n internal;\n}\n",
+ "2.0.0/test/TestAssetProxyDispatcher/TestAssetProxyDispatcher.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.24;\n\nimport \"../../protocol/Exchange/MixinAssetProxyDispatcher.sol\";\n\n\ncontract TestAssetProxyDispatcher is MixinAssetProxyDispatcher {\n function publicDispatchTransferFrom(\n bytes memory assetData,\n address from,\n address to,\n uint256 amount\n )\n public\n {\n dispatchTransferFrom(assetData, from, to, amount);\n }\n}\n",
+ "2.0.0/utils/LibBytes/LibBytes.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.24;\n\n\nlibrary LibBytes {\n\n using LibBytes for bytes;\n\n /// @dev Gets the memory address for a byte array.\n /// @param input Byte array to lookup.\n /// @return memoryAddress Memory address of byte array. This\n /// points to the header of the byte array which contains\n /// the length.\n function rawAddress(bytes memory input)\n internal\n pure\n returns (uint256 memoryAddress)\n {\n assembly {\n memoryAddress := input\n }\n return memoryAddress;\n }\n \n /// @dev Gets the memory address for the contents of a byte array.\n /// @param input Byte array to lookup.\n /// @return memoryAddress Memory address of the contents of the byte array.\n function contentAddress(bytes memory input)\n internal\n pure\n returns (uint256 memoryAddress)\n {\n assembly {\n memoryAddress := add(input, 32)\n }\n return memoryAddress;\n }\n\n /// @dev Copies `length` bytes from memory location `source` to `dest`.\n /// @param dest memory address to copy bytes to.\n /// @param source memory address to copy bytes from.\n /// @param length number of bytes to copy.\n function memCopy(\n uint256 dest,\n uint256 source,\n uint256 length\n )\n internal\n pure\n {\n if (length < 32) {\n // Handle a partial word by reading destination and masking\n // off the bits we are interested in.\n // This correctly handles overlap, zero lengths and source == dest\n assembly {\n let mask := sub(exp(256, sub(32, length)), 1)\n let s := and(mload(source), not(mask))\n let d := and(mload(dest), mask)\n mstore(dest, or(s, d))\n }\n } else {\n // Skip the O(length) loop when source == dest.\n if (source == dest) {\n return;\n }\n\n // For large copies we copy whole words at a time. The final\n // word is aligned to the end of the range (instead of after the\n // previous) to handle partial words. So a copy will look like this:\n //\n // ####\n // ####\n // ####\n // ####\n //\n // We handle overlap in the source and destination range by\n // changing the copying direction. This prevents us from\n // overwriting parts of source that we still need to copy.\n //\n // This correctly handles source == dest\n //\n if (source > dest) {\n assembly {\n // We subtract 32 from `sEnd` and `dEnd` because it\n // is easier to compare with in the loop, and these\n // are also the addresses we need for copying the\n // last bytes.\n length := sub(length, 32)\n let sEnd := add(source, length)\n let dEnd := add(dest, length)\n\n // Remember the last 32 bytes of source\n // This needs to be done here and not after the loop\n // because we may have overwritten the last bytes in\n // source already due to overlap.\n let last := mload(sEnd)\n\n // Copy whole words front to back\n // Note: the first check is always true,\n // this could have been a do-while loop.\n // solhint-disable-next-line no-empty-blocks\n for {} lt(source, sEnd) {} {\n mstore(dest, mload(source))\n source := add(source, 32)\n dest := add(dest, 32)\n }\n \n // Write the last 32 bytes\n mstore(dEnd, last)\n }\n } else {\n assembly {\n // We subtract 32 from `sEnd` and `dEnd` because those\n // are the starting points when copying a word at the end.\n length := sub(length, 32)\n let sEnd := add(source, length)\n let dEnd := add(dest, length)\n\n // Remember the first 32 bytes of source\n // This needs to be done here and not after the loop\n // because we may have overwritten the first bytes in\n // source already due to overlap.\n let first := mload(source)\n\n // Copy whole words back to front\n // We use a signed comparisson here to allow dEnd to become\n // negative (happens when source and dest < 32). Valid\n // addresses in local memory will never be larger than\n // 2**255, so they can be safely re-interpreted as signed.\n // Note: the first check is always true,\n // this could have been a do-while loop.\n // solhint-disable-next-line no-empty-blocks\n for {} slt(dest, dEnd) {} {\n mstore(dEnd, mload(sEnd))\n sEnd := sub(sEnd, 32)\n dEnd := sub(dEnd, 32)\n }\n \n // Write the first 32 bytes\n mstore(dest, first)\n }\n }\n }\n }\n\n /// @dev Returns a slices from a byte array.\n /// @param b The byte array to take a slice from.\n /// @param from The starting index for the slice (inclusive).\n /// @param to The final index for the slice (exclusive).\n /// @return result The slice containing bytes at indices [from, to)\n function slice(\n bytes memory b,\n uint256 from,\n uint256 to\n )\n internal\n pure\n returns (bytes memory result)\n {\n require(\n from <= to,\n \"FROM_LESS_THAN_TO_REQUIRED\"\n );\n require(\n to < b.length,\n \"TO_LESS_THAN_LENGTH_REQUIRED\"\n );\n \n // Create a new bytes structure and copy contents\n result = new bytes(to - from);\n memCopy(\n result.contentAddress(),\n b.contentAddress() + from,\n result.length);\n return result;\n }\n \n /// @dev Returns a slice from a byte array without preserving the input.\n /// @param b The byte array to take a slice from. Will be destroyed in the process.\n /// @param from The starting index for the slice (inclusive).\n /// @param to The final index for the slice (exclusive).\n /// @return result The slice containing bytes at indices [from, to)\n /// @dev When `from == 0`, the original array will match the slice. In other cases its state will be corrupted.\n function sliceDestructive(\n bytes memory b,\n uint256 from,\n uint256 to\n )\n internal\n pure\n returns (bytes memory result)\n {\n require(\n from <= to,\n \"FROM_LESS_THAN_TO_REQUIRED\"\n );\n require(\n to < b.length,\n \"TO_LESS_THAN_LENGTH_REQUIRED\"\n );\n \n // Create a new bytes structure around [from, to) in-place.\n assembly {\n result := add(b, from)\n mstore(result, sub(to, from))\n }\n return result;\n }\n\n /// @dev Pops the last byte off of a byte array by modifying its length.\n /// @param b Byte array that will be modified.\n /// @return The byte that was popped off.\n function popLastByte(bytes memory b)\n internal\n pure\n returns (bytes1 result)\n {\n require(\n b.length > 0,\n \"GREATER_THAN_ZERO_LENGTH_REQUIRED\"\n );\n\n // Store last byte.\n result = b[b.length - 1];\n\n assembly {\n // Decrement length of byte array.\n let newLen := sub(mload(b), 1)\n mstore(b, newLen)\n }\n return result;\n }\n\n /// @dev Pops the last 20 bytes off of a byte array by modifying its length.\n /// @param b Byte array that will be modified.\n /// @return The 20 byte address that was popped off.\n function popLast20Bytes(bytes memory b)\n internal\n pure\n returns (address result)\n {\n require(\n b.length >= 20,\n \"GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\"\n );\n\n // Store last 20 bytes.\n result = readAddress(b, b.length - 20);\n\n assembly {\n // Subtract 20 from byte array length.\n let newLen := sub(mload(b), 20)\n mstore(b, newLen)\n }\n return result;\n }\n\n /// @dev Tests equality of two byte arrays.\n /// @param lhs First byte array to compare.\n /// @param rhs Second byte array to compare.\n /// @return True if arrays are the same. False otherwise.\n function equals(\n bytes memory lhs,\n bytes memory rhs\n )\n internal\n pure\n returns (bool equal)\n {\n // Keccak gas cost is 30 + numWords * 6. This is a cheap way to compare.\n // We early exit on unequal lengths, but keccak would also correctly\n // handle this.\n return lhs.length == rhs.length && keccak256(lhs) == keccak256(rhs);\n }\n\n /// @dev Reads an address from a position in a byte array.\n /// @param b Byte array containing an address.\n /// @param index Index in byte array of address.\n /// @return address from byte array.\n function readAddress(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (address result)\n {\n require(\n b.length >= index + 20, // 20 is length of address\n \"GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\"\n );\n\n // Add offset to index:\n // 1. Arrays are prefixed by 32-byte length parameter (add 32 to index)\n // 2. Account for size difference between address length and 32-byte storage word (subtract 12 from index)\n index += 20;\n\n // Read address from array memory\n assembly {\n // 1. Add index to address of bytes array\n // 2. Load 32-byte word from memory\n // 3. Apply 20-byte mask to obtain address\n result := and(mload(add(b, index)), 0xffffffffffffffffffffffffffffffffffffffff)\n }\n return result;\n }\n\n /// @dev Writes an address into a specific position in a byte array.\n /// @param b Byte array to insert address into.\n /// @param index Index in byte array of address.\n /// @param input Address to put into byte array.\n function writeAddress(\n bytes memory b,\n uint256 index,\n address input\n )\n internal\n pure\n {\n require(\n b.length >= index + 20, // 20 is length of address\n \"GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\"\n );\n\n // Add offset to index:\n // 1. Arrays are prefixed by 32-byte length parameter (add 32 to index)\n // 2. Account for size difference between address length and 32-byte storage word (subtract 12 from index)\n index += 20;\n\n // Store address into array memory\n assembly {\n // The address occupies 20 bytes and mstore stores 32 bytes.\n // First fetch the 32-byte word where we'll be storing the address, then\n // apply a mask so we have only the bytes in the word that the address will not occupy.\n // Then combine these bytes with the address and store the 32 bytes back to memory with mstore.\n\n // 1. Add index to address of bytes array\n // 2. Load 32-byte word from memory\n // 3. Apply 12-byte mask to obtain extra bytes occupying word of memory where we'll store the address\n let neighbors := and(\n mload(add(b, index)),\n 0xffffffffffffffffffffffff0000000000000000000000000000000000000000\n )\n \n // Make sure input address is clean.\n // (Solidity does not guarantee this)\n input := and(input, 0xffffffffffffffffffffffffffffffffffffffff)\n\n // Store the neighbors and address into memory\n mstore(add(b, index), xor(input, neighbors))\n }\n }\n\n /// @dev Reads a bytes32 value from a position in a byte array.\n /// @param b Byte array containing a bytes32 value.\n /// @param index Index in byte array of bytes32 value.\n /// @return bytes32 value from byte array.\n function readBytes32(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (bytes32 result)\n {\n require(\n b.length >= index + 32,\n \"GREATER_OR_EQUAL_TO_32_LENGTH_REQUIRED\"\n );\n\n // Arrays are prefixed by a 256 bit length parameter\n index += 32;\n\n // Read the bytes32 from array memory\n assembly {\n result := mload(add(b, index))\n }\n return result;\n }\n\n /// @dev Writes a bytes32 into a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input bytes32 to put into byte array.\n function writeBytes32(\n bytes memory b,\n uint256 index,\n bytes32 input\n )\n internal\n pure\n {\n require(\n b.length >= index + 32,\n \"GREATER_OR_EQUAL_TO_32_LENGTH_REQUIRED\"\n );\n\n // Arrays are prefixed by a 256 bit length parameter\n index += 32;\n\n // Read the bytes32 from array memory\n assembly {\n mstore(add(b, index), input)\n }\n }\n\n /// @dev Reads a uint256 value from a position in a byte array.\n /// @param b Byte array containing a uint256 value.\n /// @param index Index in byte array of uint256 value.\n /// @return uint256 value from byte array.\n function readUint256(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (uint256 result)\n {\n return uint256(readBytes32(b, index));\n }\n\n /// @dev Writes a uint256 into a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input uint256 to put into byte array.\n function writeUint256(\n bytes memory b,\n uint256 index,\n uint256 input\n )\n internal\n pure\n {\n writeBytes32(b, index, bytes32(input));\n }\n\n /// @dev Reads an unpadded bytes4 value from a position in a byte array.\n /// @param b Byte array containing a bytes4 value.\n /// @param index Index in byte array of bytes4 value.\n /// @return bytes4 value from byte array.\n function readBytes4(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (bytes4 result)\n {\n require(\n b.length >= index + 4,\n \"GREATER_OR_EQUAL_TO_4_LENGTH_REQUIRED\"\n );\n assembly {\n result := mload(add(b, 32))\n // Solidity does not require us to clean the trailing bytes.\n // We do it anyway\n result := and(result, 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000)\n }\n return result;\n }\n\n /// @dev Reads nested bytes from a specific position.\n /// @dev NOTE: the returned value overlaps with the input value.\n /// Both should be treated as immutable.\n /// @param b Byte array containing nested bytes.\n /// @param index Index of nested bytes.\n /// @return result Nested bytes.\n function readBytesWithLength(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (bytes memory result)\n {\n // Read length of nested bytes\n uint256 nestedBytesLength = readUint256(b, index);\n index += 32;\n\n // Assert length of <b> is valid, given\n // length of nested bytes\n require(\n b.length >= index + nestedBytesLength,\n \"GREATER_OR_EQUAL_TO_NESTED_BYTES_LENGTH_REQUIRED\"\n );\n \n // Return a pointer to the byte array as it exists inside `b`\n assembly {\n result := add(b, index)\n }\n return result;\n }\n\n /// @dev Inserts bytes at a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input bytes to insert.\n function writeBytesWithLength(\n bytes memory b,\n uint256 index,\n bytes memory input\n )\n internal\n pure\n {\n // Assert length of <b> is valid, given\n // length of input\n require(\n b.length >= index + 32 + input.length, // 32 bytes to store length\n \"GREATER_OR_EQUAL_TO_NESTED_BYTES_LENGTH_REQUIRED\"\n );\n\n // Copy <input> into <b>\n memCopy(\n b.contentAddress() + index,\n input.rawAddress(), // includes length of <input>\n input.length + 32 // +32 bytes to store <input> length\n );\n }\n\n /// @dev Performs a deep copy of a byte array onto another byte array of greater than or equal length.\n /// @param dest Byte array that will be overwritten with source bytes.\n /// @param source Byte array to copy onto dest bytes.\n function deepCopyBytes(\n bytes memory dest,\n bytes memory source\n )\n internal\n pure\n {\n uint256 sourceLen = source.length;\n // Dest length must be >= source length, or some bytes would not be copied.\n require(\n dest.length >= sourceLen,\n \"GREATER_OR_EQUAL_TO_SOURCE_BYTES_LENGTH_REQUIRED\"\n );\n memCopy(\n dest.contentAddress(),\n source.contentAddress(),\n sourceLen\n );\n }\n}\n",
+ "2.0.0/utils/Ownable/IOwnable.sol": "pragma solidity 0.4.24;\n\n/*\n * Ownable\n *\n * Base contract with an owner.\n * Provides onlyOwner modifier, which prevents function from running if it is called by anyone other than the owner.\n */\n\ncontract IOwnable {\n function transferOwnership(address newOwner)\n public;\n}\n",
+ "2.0.0/utils/Ownable/Ownable.sol": "pragma solidity 0.4.24;\n\n/*\n * Ownable\n *\n * Base contract with an owner.\n * Provides onlyOwner modifier, which prevents function from running if it is called by anyone other than the owner.\n */\n\nimport \"./IOwnable.sol\";\n\n\ncontract Ownable is IOwnable {\n address public owner;\n\n constructor ()\n public\n {\n owner = msg.sender;\n }\n\n modifier onlyOwner() {\n require(\n msg.sender == owner,\n \"ONLY_CONTRACT_OWNER\"\n );\n _;\n }\n\n function transferOwnership(address newOwner)\n public\n onlyOwner\n {\n if (newOwner != address(0)) {\n owner = newOwner;\n }\n }\n}\n"
},
- "sourceTreeHashHex": "0xb8e77269283214cadcddd96bf9b59f3a49a4d276ad28c6f695ee90e11f8c4421",
+ "sourceTreeHashHex": "0x0dd2e7541f3708a301e3671f49d4f9b4131e2372b10c8901f11ad7e6256a79b3",
"compiler": {
"name": "solc",
"version": "soljson-v0.4.24+commit.e67f0147.js",
diff --git a/packages/migrations/artifacts/2.0.0/TestAssetProxyOwner.json b/packages/migrations/artifacts/2.0.0/TestAssetProxyOwner.json
index a59069002..a3c6c3aa9 100644
--- a/packages/migrations/artifacts/2.0.0/TestAssetProxyOwner.json
+++ b/packages/migrations/artifacts/2.0.0/TestAssetProxyOwner.json
@@ -19,7 +19,6 @@
}
],
"payable": false,
- "stateMutability": "view",
"type": "function"
},
{
@@ -33,7 +32,6 @@
"name": "removeOwner",
"outputs": [],
"payable": false,
- "stateMutability": "nonpayable",
"type": "function"
},
{
@@ -47,7 +45,6 @@
"name": "revokeConfirmation",
"outputs": [],
"payable": false,
- "stateMutability": "nonpayable",
"type": "function"
},
{
@@ -66,7 +63,6 @@
}
],
"payable": false,
- "stateMutability": "view",
"type": "function"
},
{
@@ -89,7 +85,6 @@
}
],
"payable": false,
- "stateMutability": "view",
"type": "function"
},
{
@@ -103,7 +98,6 @@
"name": "executeRemoveAuthorizedAddressAtIndex",
"outputs": [],
"payable": false,
- "stateMutability": "nonpayable",
"type": "function"
},
{
@@ -117,7 +111,6 @@
}
],
"payable": false,
- "stateMutability": "view",
"type": "function"
},
{
@@ -140,7 +133,6 @@
}
],
"payable": false,
- "stateMutability": "view",
"type": "function"
},
{
@@ -158,7 +150,6 @@
"name": "registerAssetProxy",
"outputs": [],
"payable": false,
- "stateMutability": "nonpayable",
"type": "function"
},
{
@@ -172,11 +163,10 @@
"name": "addOwner",
"outputs": [],
"payable": false,
- "stateMutability": "nonpayable",
"type": "function"
},
{
- "constant": true,
+ "constant": false,
"inputs": [
{
"name": "data",
@@ -191,7 +181,6 @@
}
],
"payable": false,
- "stateMutability": "pure",
"type": "function"
},
{
@@ -210,7 +199,6 @@
}
],
"payable": false,
- "stateMutability": "view",
"type": "function"
},
{
@@ -224,7 +212,6 @@
"name": "changeTimeLock",
"outputs": [],
"payable": false,
- "stateMutability": "nonpayable",
"type": "function"
},
{
@@ -243,7 +230,6 @@
}
],
"payable": false,
- "stateMutability": "view",
"type": "function"
},
{
@@ -262,7 +248,6 @@
}
],
"payable": false,
- "stateMutability": "view",
"type": "function"
},
{
@@ -293,7 +278,6 @@
}
],
"payable": false,
- "stateMutability": "view",
"type": "function"
},
{
@@ -307,7 +291,6 @@
}
],
"payable": false,
- "stateMutability": "view",
"type": "function"
},
{
@@ -338,7 +321,6 @@
}
],
"payable": false,
- "stateMutability": "view",
"type": "function"
},
{
@@ -357,7 +339,6 @@
}
],
"payable": false,
- "stateMutability": "view",
"type": "function"
},
{
@@ -371,7 +352,6 @@
}
],
"payable": false,
- "stateMutability": "view",
"type": "function"
},
{
@@ -385,7 +365,6 @@
"name": "changeRequirement",
"outputs": [],
"payable": false,
- "stateMutability": "nonpayable",
"type": "function"
},
{
@@ -399,7 +378,6 @@
"name": "confirmTransaction",
"outputs": [],
"payable": false,
- "stateMutability": "nonpayable",
"type": "function"
},
{
@@ -418,7 +396,6 @@
}
],
"payable": false,
- "stateMutability": "nonpayable",
"type": "function"
},
{
@@ -445,7 +422,28 @@
}
],
"payable": false,
- "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "constant": false,
+ "inputs": [
+ {
+ "name": "b",
+ "type": "bytes"
+ },
+ {
+ "name": "index",
+ "type": "uint256"
+ }
+ ],
+ "name": "publicReadBytes4",
+ "outputs": [
+ {
+ "name": "result",
+ "type": "bytes4"
+ }
+ ],
+ "payable": false,
"type": "function"
},
{
@@ -464,7 +462,6 @@
}
],
"payable": false,
- "stateMutability": "view",
"type": "function"
},
{
@@ -478,7 +475,6 @@
}
],
"payable": false,
- "stateMutability": "view",
"type": "function"
},
{
@@ -492,7 +488,6 @@
}
],
"payable": false,
- "stateMutability": "view",
"type": "function"
},
{
@@ -510,7 +505,6 @@
"name": "replaceOwner",
"outputs": [],
"payable": false,
- "stateMutability": "nonpayable",
"type": "function"
},
{
@@ -524,7 +518,6 @@
"name": "executeTransaction",
"outputs": [],
"payable": false,
- "stateMutability": "nonpayable",
"type": "function"
},
{
@@ -547,12 +540,10 @@
}
],
"payable": false,
- "stateMutability": "nonpayable",
"type": "constructor"
},
{
"payable": true,
- "stateMutability": "payable",
"type": "fallback"
},
{
@@ -725,49 +716,47441 @@
"type": "event"
}
],
+ "metadata": "{\"compiler\":{\"version\":\"0.4.10+commit.f0d539ae\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"owners\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"removeOwner\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"transactionId\",\"type\":\"uint256\"}],\"name\":\"revokeConfirmation\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"isOwner\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"address\"}],\"name\":\"confirmations\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"transactionId\",\"type\":\"uint256\"}],\"name\":\"executeRemoveAuthorizedAddressAtIndex\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"secondsTimeLocked\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"pending\",\"type\":\"bool\"},{\"name\":\"executed\",\"type\":\"bool\"}],\"name\":\"getTransactionCount\",\"outputs\":[{\"name\":\"count\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"assetProxyContract\",\"type\":\"address\"},{\"name\":\"isRegistered\",\"type\":\"bool\"}],\"name\":\"registerAssetProxy\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"addOwner\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"isFunctionRemoveAuthorizedAddressAtIndex\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"transactionId\",\"type\":\"uint256\"}],\"name\":\"isConfirmed\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_secondsTimeLocked\",\"type\":\"uint256\"}],\"name\":\"changeTimeLock\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"isAssetProxyRegistered\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"transactionId\",\"type\":\"uint256\"}],\"name\":\"getConfirmationCount\",\"outputs\":[{\"name\":\"count\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"transactions\",\"outputs\":[{\"name\":\"destination\",\"type\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\"},{\"name\":\"executed\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getOwners\",\"outputs\":[{\"name\":\"\",\"type\":\"address[]\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"from\",\"type\":\"uint256\"},{\"name\":\"to\",\"type\":\"uint256\"},{\"name\":\"pending\",\"type\":\"bool\"},{\"name\":\"executed\",\"type\":\"bool\"}],\"name\":\"getTransactionIds\",\"outputs\":[{\"name\":\"_transactionIds\",\"type\":\"uint256[]\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"transactionId\",\"type\":\"uint256\"}],\"name\":\"getConfirmations\",\"outputs\":[{\"name\":\"_confirmations\",\"type\":\"address[]\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"transactionCount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_required\",\"type\":\"uint256\"}],\"name\":\"changeRequirement\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"transactionId\",\"type\":\"uint256\"}],\"name\":\"confirmTransaction\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"testValidRemoveAuthorizedAddressAtIndexTx\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"destination\",\"type\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"submitTransaction\",\"outputs\":[{\"name\":\"transactionId\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"b\",\"type\":\"bytes\"},{\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"publicReadBytes4\",\"outputs\":[{\"name\":\"result\",\"type\":\"bytes4\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"confirmationTimes\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MAX_OWNER_COUNT\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"required\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"replaceOwner\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"transactionId\",\"type\":\"uint256\"}],\"name\":\"executeTransaction\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"inputs\":[{\"name\":\"_owners\",\"type\":\"address[]\"},{\"name\":\"_assetProxyContracts\",\"type\":\"address[]\"},{\"name\":\"_required\",\"type\":\"uint256\"},{\"name\":\"_secondsTimeLocked\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"constructor\"},{\"payable\":true,\"type\":\"fallback\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"assetProxyContract\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"isRegistered\",\"type\":\"bool\"}],\"name\":\"AssetProxyRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"transactionId\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"confirmationTime\",\"type\":\"uint256\"}],\"name\":\"ConfirmationTimeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"secondsTimeLocked\",\"type\":\"uint256\"}],\"name\":\"TimeLockChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"transactionId\",\"type\":\"uint256\"}],\"name\":\"Confirmation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"transactionId\",\"type\":\"uint256\"}],\"name\":\"Revocation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"transactionId\",\"type\":\"uint256\"}],\"name\":\"Submission\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"transactionId\",\"type\":\"uint256\"}],\"name\":\"Execution\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"transactionId\",\"type\":\"uint256\"}],\"name\":\"ExecutionFailure\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnerAddition\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnerRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"required\",\"type\":\"uint256\"}],\"name\":\"RequirementChange\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{\"addOwner(address)\":{\"details\":\"Allows to add a new owner. Transaction has to be sent by wallet.\",\"params\":{\"owner\":\"Address of new owner.\"}},\"changeRequirement(uint256)\":{\"details\":\"Allows to change the number of required confirmations. Transaction has to be sent by wallet.\",\"params\":{\"_required\":\"Number of required confirmations.\"}},\"changeTimeLock(uint256)\":{\"details\":\"Changes the duration of the time lock for transactions.\",\"params\":{\"_secondsTimeLocked\":\"Duration needed after a transaction is confirmed and before it becomes executable, in seconds.\"}},\"confirmTransaction(uint256)\":{\"details\":\"Allows an owner to confirm a transaction.\",\"params\":{\"transactionId\":\"Transaction ID.\"}},\"executeRemoveAuthorizedAddressAtIndex(uint256)\":{\"details\":\"Allows execution of `removeAuthorizedAddressAtIndex` without time lock.\",\"params\":{\"transactionId\":\"Transaction ID.\"}},\"executeTransaction(uint256)\":{\"details\":\"Allows anyone to execute a confirmed transaction.\",\"params\":{\"transactionId\":\"Transaction ID.\"}},\"getConfirmationCount(uint256)\":{\"details\":\"Returns number of confirmations of a transaction.\",\"params\":{\"transactionId\":\"Transaction ID.\"},\"return\":\"Number of confirmations.\"},\"getConfirmations(uint256)\":{\"details\":\"Returns array with owner addresses, which confirmed transaction.\",\"params\":{\"transactionId\":\"Transaction ID.\"},\"return\":\"Returns array of owner addresses.\"},\"getOwners()\":{\"details\":\"Returns list of owners.\",\"return\":\"List of owner addresses.\"},\"getTransactionCount(bool,bool)\":{\"details\":\"Returns total number of transactions after filers are applied.\",\"params\":{\"executed\":\"Include executed transactions.\",\"pending\":\"Include pending transactions.\"},\"return\":\"Total number of transactions after filters are applied.\"},\"getTransactionIds(uint256,uint256,bool,bool)\":{\"details\":\"Returns list of transaction IDs in defined range.\",\"params\":{\"executed\":\"Include executed transactions.\",\"from\":\"Index start position of transaction array.\",\"pending\":\"Include pending transactions.\",\"to\":\"Index end position of transaction array.\"},\"return\":\"Returns array of transaction IDs.\"},\"isConfirmed(uint256)\":{\"details\":\"Returns the confirmation status of a transaction.\",\"params\":{\"transactionId\":\"Transaction ID.\"},\"return\":\"Confirmation status.\"},\"isFunctionRemoveAuthorizedAddressAtIndex(bytes)\":{\"details\":\"Compares first 4 bytes of byte array to `removeAuthorizedAddressAtIndex` function selector.\",\"params\":{\"data\":\"Transaction data.\"},\"return\":\"Successful if data is a call to `removeAuthorizedAddressAtIndex`.\"},\"publicReadBytes4(bytes,uint256)\":{\"details\":\"Reads an unpadded bytes4 value from a position in a byte array.\",\"params\":{\"b\":\"Byte array containing a bytes4 value.\",\"index\":\"Index in byte array of bytes4 value.\"},\"return\":\"bytes4 value from byte array.\"},\"registerAssetProxy(address,bool)\":{\"details\":\"Registers or deregisters an AssetProxy to be able to execute `removeAuthorizedAddressAtIndex` without a timelock.\",\"params\":{\"assetProxyContract\":\"Address of AssetProxy contract.\",\"isRegistered\":\"Status of approval for AssetProxy contract.\"}},\"removeOwner(address)\":{\"details\":\"Allows to remove an owner. Transaction has to be sent by wallet.\",\"params\":{\"owner\":\"Address of owner.\"}},\"replaceOwner(address,address)\":{\"details\":\"Allows to replace an owner with a new owner. Transaction has to be sent by wallet.\",\"params\":{\"owner\":\"Address of new owner.\"}},\"revokeConfirmation(uint256)\":{\"details\":\"Allows an owner to revoke a confirmation for a transaction.\",\"params\":{\"transactionId\":\"Transaction ID.\"}},\"submitTransaction(address,uint256,bytes)\":{\"details\":\"Allows an owner to submit and confirm a transaction.\",\"params\":{\"data\":\"Transaction data payload.\",\"destination\":\"Transaction target address.\",\"value\":\"Transaction ether value.\"},\"return\":\"Returns transaction ID.\"}}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"2.0.0/test/TestAssetProxyOwner/TestAssetProxyOwner.sol\":\"TestAssetProxyOwner\"},\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"2.0.0/multisig/MultiSigWallet.sol\":{\"keccak256\":\"0x5ad0f32801e51d60f02235477477b56ff9ccd727d6d2646d7efb84d1ffbd7bff\",\"urls\":[\"bzzr://0ca2767e1cde91f44a40176939eef3a46da233b552520aec19aeb97f4ef6bb00\"]},\"2.0.0/multisig/MultiSigWalletWithTimeLock.sol\":{\"keccak256\":\"0xd90adae0adda1b23bad71a37af6fc78f645204d519b7f4eeadea858241483611\",\"urls\":[\"bzzr://9761abd10cebccfcc948cc04cd7a5ee0a555d67d4510c82ef84422374beb8c8f\"]},\"2.0.0/protocol/AssetProxyOwner/AssetProxyOwner.sol\":{\"keccak256\":\"0x6a77cd3a41d2ff7feab497e257cbc378167ae2d96975957116edf73c203d75d2\",\"urls\":[\"bzzr://b987bce902d5f514cf1d258f490007749a70787bb285805bdb8c613238977e46\"]},\"2.0.0/test/TestAssetProxyOwner/TestAssetProxyOwner.sol\":{\"keccak256\":\"0x1ac6c24fe73a4140b8770ffdc3273a231775a3731853929b1fe211b5970284f9\",\"urls\":[\"bzzr://3d592fa58728cbf1969908f9132c5d9dedeaa502db068368ac4d4339a3b36b3f\"]}},\"version\":1}",
"evm": {
+ "legacyAssembly": {
+ ".code": [
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "60"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 762,
+ "end": 1048,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 762,
+ "end": 1048,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 762,
+ "end": 1048,
+ "name": "PUSH [tag]",
+ "value": "1"
+ },
+ {
+ "begin": 762,
+ "end": 1048,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 762,
+ "end": 1048,
+ "name": "INVALID"
+ },
+ {
+ "begin": 762,
+ "end": 1048,
+ "name": "tag",
+ "value": "1"
+ },
+ {
+ "begin": 762,
+ "end": 1048,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 762,
+ "end": 1048,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 762,
+ "end": 1048,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 762,
+ "end": 1048,
+ "name": "PUSHSIZE"
+ },
+ {
+ "begin": 762,
+ "end": 1048,
+ "name": "CODESIZE"
+ },
+ {
+ "begin": 762,
+ "end": 1048,
+ "name": "SUB"
+ },
+ {
+ "begin": 762,
+ "end": 1048,
+ "name": "DUP1"
+ },
+ {
+ "begin": 762,
+ "end": 1048,
+ "name": "PUSHSIZE"
+ },
+ {
+ "begin": 762,
+ "end": 1048,
+ "name": "DUP4"
+ },
+ {
+ "begin": 762,
+ "end": 1048,
+ "name": "CODECOPY"
+ },
+ {
+ "begin": 762,
+ "end": 1048,
+ "name": "DUP2"
+ },
+ {
+ "begin": 762,
+ "end": 1048,
+ "name": "ADD"
+ },
+ {
+ "begin": 762,
+ "end": 1048,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 762,
+ "end": 1048,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 762,
+ "end": 1048,
+ "name": "DUP2"
+ },
+ {
+ "begin": 762,
+ "end": 1048,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 762,
+ "end": 1048,
+ "name": "DUP2"
+ },
+ {
+ "begin": 762,
+ "end": 1048,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 762,
+ "end": 1048,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 762,
+ "end": 1048,
+ "name": "DUP4"
+ },
+ {
+ "begin": 762,
+ "end": 1048,
+ "name": "ADD"
+ },
+ {
+ "begin": 762,
+ "end": 1048,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 762,
+ "end": 1048,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 762,
+ "end": 1048,
+ "name": "DUP4"
+ },
+ {
+ "begin": 762,
+ "end": 1048,
+ "name": "ADD"
+ },
+ {
+ "begin": 762,
+ "end": 1048,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 762,
+ "end": 1048,
+ "name": "PUSH",
+ "value": "60"
+ },
+ {
+ "begin": 762,
+ "end": 1048,
+ "name": "DUP5"
+ },
+ {
+ "begin": 762,
+ "end": 1048,
+ "name": "ADD"
+ },
+ {
+ "begin": 762,
+ "end": 1048,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 762,
+ "end": 1048,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 762,
+ "end": 1048,
+ "name": "DUP5"
+ },
+ {
+ "begin": 762,
+ "end": 1048,
+ "name": "ADD"
+ },
+ {
+ "begin": 762,
+ "end": 1048,
+ "name": "SWAP4"
+ },
+ {
+ "begin": 762,
+ "end": 1048,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 762,
+ "end": 1048,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 762,
+ "end": 1048,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 762,
+ "end": 1048,
+ "name": "ADD"
+ },
+ {
+ "begin": 762,
+ "end": 1048,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 762,
+ "end": 1048,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 762,
+ "end": 1048,
+ "name": "tag",
+ "value": "2"
+ },
+ {
+ "begin": 762,
+ "end": 1048,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 980,
+ "end": 987,
+ "name": "DUP4"
+ },
+ {
+ "begin": 989,
+ "end": 1009,
+ "name": "DUP4"
+ },
+ {
+ "begin": 1011,
+ "end": 1020,
+ "name": "DUP4"
+ },
+ {
+ "begin": 1022,
+ "end": 1040,
+ "name": "DUP4"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "tag",
+ "value": "3"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2381,
+ "end": 2390,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2448,
+ "end": 2466,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2322,
+ "end": 2329,
+ "name": "DUP6"
+ },
+ {
+ "begin": 2331,
+ "end": 2340,
+ "name": "DUP5"
+ },
+ {
+ "begin": 2342,
+ "end": 2360,
+ "name": "DUP5"
+ },
+ {
+ "begin": 1884,
+ "end": 2097,
+ "name": "tag",
+ "value": "4"
+ },
+ {
+ "begin": 1884,
+ "end": 2097,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2018,
+ "end": 2025,
+ "name": "DUP3"
+ },
+ {
+ "begin": 2027,
+ "end": 2036,
+ "name": "DUP3"
+ },
+ {
+ "begin": 2834,
+ "end": 3204,
+ "name": "tag",
+ "value": "5"
+ },
+ {
+ "begin": 2834,
+ "end": 3204,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2979,
+ "end": 2985,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2933,
+ "end": 2940,
+ "name": "DUP3"
+ },
+ {
+ "begin": 2933,
+ "end": 2947,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 2949,
+ "end": 2958,
+ "name": "DUP3"
+ },
+ {
+ "begin": 276,
+ "end": 278,
+ "name": "PUSH",
+ "value": "32"
+ },
+ {
+ "begin": 2256,
+ "end": 2266,
+ "name": "DUP3"
+ },
+ {
+ "begin": 2256,
+ "end": 2284,
+ "name": "GT"
+ },
+ {
+ "begin": 2256,
+ "end": 2322,
+ "name": "DUP1"
+ },
+ {
+ "begin": 2256,
+ "end": 2322,
+ "name": "PUSH [tag]",
+ "value": "7"
+ },
+ {
+ "begin": 2256,
+ "end": 2322,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 2256,
+ "end": 2322,
+ "name": "POP"
+ },
+ {
+ "begin": 2312,
+ "end": 2322,
+ "name": "DUP2"
+ },
+ {
+ "begin": 2300,
+ "end": 2309,
+ "name": "DUP2"
+ },
+ {
+ "begin": 2300,
+ "end": 2322,
+ "name": "GT"
+ },
+ {
+ "begin": 2256,
+ "end": 2322,
+ "name": "tag",
+ "value": "7"
+ },
+ {
+ "begin": 2256,
+ "end": 2322,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2256,
+ "end": 2352,
+ "name": "DUP1"
+ },
+ {
+ "begin": 2256,
+ "end": 2352,
+ "name": "PUSH [tag]",
+ "value": "8"
+ },
+ {
+ "begin": 2256,
+ "end": 2352,
+ "name": "JUMPI"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 2338,
+ "end": 2352,
+ "name": "DUP1"
+ },
+ {
+ "begin": 2338,
+ "end": 2352,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2256,
+ "end": 2352,
+ "name": "tag",
+ "value": "8"
+ },
+ {
+ "begin": 2256,
+ "end": 2352,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2256,
+ "end": 2383,
+ "name": "DUP1"
+ },
+ {
+ "begin": 2256,
+ "end": 2383,
+ "name": "PUSH [tag]",
+ "value": "9"
+ },
+ {
+ "begin": 2256,
+ "end": 2383,
+ "name": "JUMPI"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 2368,
+ "end": 2383,
+ "name": "DUP2"
+ },
+ {
+ "begin": 2368,
+ "end": 2383,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2256,
+ "end": 2383,
+ "name": "tag",
+ "value": "9"
+ },
+ {
+ "begin": 2256,
+ "end": 2383,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2249,
+ "end": 2402,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2249,
+ "end": 2402,
+ "name": "PUSH [tag]",
+ "value": "10"
+ },
+ {
+ "begin": 2249,
+ "end": 2402,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 2397,
+ "end": 2402,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2397,
+ "end": 2402,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2397,
+ "end": 2402,
+ "name": "REVERT"
+ },
+ {
+ "begin": 2249,
+ "end": 2402,
+ "name": "tag",
+ "value": "10"
+ },
+ {
+ "begin": 2249,
+ "end": 2402,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2986,
+ "end": 2987,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2979,
+ "end": 2987,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 2979,
+ "end": 2987,
+ "name": "POP"
+ },
+ {
+ "begin": 2974,
+ "end": 3142,
+ "name": "tag",
+ "value": "12"
+ },
+ {
+ "begin": 2974,
+ "end": 3142,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2991,
+ "end": 2998,
+ "name": "DUP5"
+ },
+ {
+ "begin": 2991,
+ "end": 3005,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 2989,
+ "end": 2990,
+ "name": "DUP4"
+ },
+ {
+ "begin": 2989,
+ "end": 3005,
+ "name": "LT"
+ },
+ {
+ "begin": 2974,
+ "end": 3142,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2974,
+ "end": 3142,
+ "name": "PUSH [tag]",
+ "value": "13"
+ },
+ {
+ "begin": 2974,
+ "end": 3142,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 3030,
+ "end": 3037,
+ "name": "PUSH",
+ "value": "2"
+ },
+ {
+ "begin": 3030,
+ "end": 3049,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3038,
+ "end": 3045,
+ "name": "DUP7"
+ },
+ {
+ "begin": 3046,
+ "end": 3047,
+ "name": "DUP6"
+ },
+ {
+ "begin": 3038,
+ "end": 3048,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3038,
+ "end": 3048,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 3038,
+ "end": 3048,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3038,
+ "end": 3048,
+ "name": "LT"
+ },
+ {
+ "begin": 3038,
+ "end": 3048,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3038,
+ "end": 3048,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3038,
+ "end": 3048,
+ "name": "PUSH [tag]",
+ "value": "15"
+ },
+ {
+ "begin": 3038,
+ "end": 3048,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 3038,
+ "end": 3048,
+ "name": "INVALID"
+ },
+ {
+ "begin": 3038,
+ "end": 3048,
+ "name": "tag",
+ "value": "15"
+ },
+ {
+ "begin": 3038,
+ "end": 3048,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3038,
+ "end": 3048,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 3038,
+ "end": 3048,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3038,
+ "end": 3048,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3038,
+ "end": 3048,
+ "name": "MUL"
+ },
+ {
+ "begin": 3038,
+ "end": 3048,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3038,
+ "end": 3048,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3038,
+ "end": 3048,
+ "name": "ADD"
+ },
+ {
+ "begin": 3038,
+ "end": 3048,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3038,
+ "end": 3048,
+ "name": "ADD"
+ },
+ {
+ "begin": 3038,
+ "end": 3048,
+ "name": "MLOAD"
+ },
+ {
+ "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": 3030,
+ "end": 3049,
+ "name": "AND"
+ },
+ {
+ "begin": 3030,
+ "end": 3049,
+ "name": "DUP3"
+ },
+ {
+ "begin": 3030,
+ "end": 3049,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3030,
+ "end": 3049,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3030,
+ "end": 3049,
+ "name": "ADD"
+ },
+ {
+ "begin": 3030,
+ "end": 3049,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3030,
+ "end": 3049,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3030,
+ "end": 3049,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3030,
+ "end": 3049,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3030,
+ "end": 3049,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 3030,
+ "end": 3049,
+ "name": "ADD"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3030,
+ "end": 3049,
+ "name": "SHA3"
+ },
+ {
+ "begin": 3030,
+ "end": 3049,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 3030,
+ "end": 3049,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": 3030,
+ "end": 3049,
+ "name": "AND"
+ },
+ {
+ "begin": 3030,
+ "end": 3049,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3030,
+ "end": 3068,
+ "name": "PUSH [tag]",
+ "value": "16"
+ },
+ {
+ "begin": 3030,
+ "end": 3068,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 3030,
+ "end": 3068,
+ "name": "POP"
+ },
+ {
+ "begin": 3053,
+ "end": 3060,
+ "name": "DUP5"
+ },
+ {
+ "begin": 3061,
+ "end": 3062,
+ "name": "DUP4"
+ },
+ {
+ "begin": 3053,
+ "end": 3063,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3053,
+ "end": 3063,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 3053,
+ "end": 3063,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3053,
+ "end": 3063,
+ "name": "LT"
+ },
+ {
+ "begin": 3053,
+ "end": 3063,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3053,
+ "end": 3063,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3053,
+ "end": 3063,
+ "name": "PUSH [tag]",
+ "value": "17"
+ },
+ {
+ "begin": 3053,
+ "end": 3063,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 3053,
+ "end": 3063,
+ "name": "INVALID"
+ },
+ {
+ "begin": 3053,
+ "end": 3063,
+ "name": "tag",
+ "value": "17"
+ },
+ {
+ "begin": 3053,
+ "end": 3063,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3053,
+ "end": 3063,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3053,
+ "end": 3063,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 3053,
+ "end": 3063,
+ "name": "ADD"
+ },
+ {
+ "begin": 3053,
+ "end": 3063,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3053,
+ "end": 3063,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 3053,
+ "end": 3063,
+ "name": "MUL"
+ },
+ {
+ "begin": 3053,
+ "end": 3063,
+ "name": "ADD"
+ },
+ {
+ "begin": 3053,
+ "end": 3063,
+ "name": "MLOAD"
+ },
+ {
+ "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": 3053,
+ "end": 3068,
+ "name": "AND"
+ },
+ {
+ "begin": 3067,
+ "end": 3068,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3053,
+ "end": 3068,
+ "name": "EQ"
+ },
+ {
+ "begin": 3030,
+ "end": 3068,
+ "name": "tag",
+ "value": "16"
+ },
+ {
+ "begin": 3030,
+ "end": 3068,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3026,
+ "end": 3091,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3026,
+ "end": 3091,
+ "name": "PUSH [tag]",
+ "value": "18"
+ },
+ {
+ "begin": 3026,
+ "end": 3091,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 3086,
+ "end": 3091,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3086,
+ "end": 3091,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3086,
+ "end": 3091,
+ "name": "REVERT"
+ },
+ {
+ "begin": 3026,
+ "end": 3091,
+ "name": "tag",
+ "value": "18"
+ },
+ {
+ "begin": 3026,
+ "end": 3091,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3127,
+ "end": 3131,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 3105,
+ "end": 3112,
+ "name": "PUSH",
+ "value": "2"
+ },
+ {
+ "begin": 3105,
+ "end": 3124,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3113,
+ "end": 3120,
+ "name": "DUP8"
+ },
+ {
+ "begin": 3121,
+ "end": 3122,
+ "name": "DUP7"
+ },
+ {
+ "begin": 3113,
+ "end": 3123,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3113,
+ "end": 3123,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 3113,
+ "end": 3123,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3113,
+ "end": 3123,
+ "name": "LT"
+ },
+ {
+ "begin": 3113,
+ "end": 3123,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3113,
+ "end": 3123,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3113,
+ "end": 3123,
+ "name": "PUSH [tag]",
+ "value": "19"
+ },
+ {
+ "begin": 3113,
+ "end": 3123,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 3113,
+ "end": 3123,
+ "name": "INVALID"
+ },
+ {
+ "begin": 3113,
+ "end": 3123,
+ "name": "tag",
+ "value": "19"
+ },
+ {
+ "begin": 3113,
+ "end": 3123,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3113,
+ "end": 3123,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 3113,
+ "end": 3123,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3113,
+ "end": 3123,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3113,
+ "end": 3123,
+ "name": "MUL"
+ },
+ {
+ "begin": 3113,
+ "end": 3123,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3113,
+ "end": 3123,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3113,
+ "end": 3123,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3113,
+ "end": 3123,
+ "name": "ADD"
+ },
+ {
+ "begin": 3113,
+ "end": 3123,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3113,
+ "end": 3123,
+ "name": "ADD"
+ },
+ {
+ "begin": 3113,
+ "end": 3123,
+ "name": "MLOAD"
+ },
+ {
+ "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": 3105,
+ "end": 3124,
+ "name": "AND"
+ },
+ {
+ "begin": 3105,
+ "end": 3124,
+ "name": "DUP3"
+ },
+ {
+ "begin": 3105,
+ "end": 3124,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3105,
+ "end": 3124,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3105,
+ "end": 3124,
+ "name": "ADD"
+ },
+ {
+ "begin": 3105,
+ "end": 3124,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3105,
+ "end": 3124,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3105,
+ "end": 3124,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3105,
+ "end": 3124,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3105,
+ "end": 3124,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 3105,
+ "end": 3124,
+ "name": "ADD"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3105,
+ "end": 3124,
+ "name": "SHA3"
+ },
+ {
+ "begin": 3105,
+ "end": 3131,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3105,
+ "end": 3131,
+ "name": "SLOAD"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 3105,
+ "end": 3131,
+ "name": "AND"
+ },
+ {
+ "begin": 3105,
+ "end": 3131,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3105,
+ "end": 3131,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3105,
+ "end": 3131,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3105,
+ "end": 3131,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3105,
+ "end": 3131,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3105,
+ "end": 3131,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3105,
+ "end": 3131,
+ "name": "OR"
+ },
+ {
+ "begin": 3105,
+ "end": 3131,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3105,
+ "end": 3131,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 2974,
+ "end": 3142,
+ "name": "tag",
+ "value": "14"
+ },
+ {
+ "begin": 2974,
+ "end": 3142,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3007,
+ "end": 3010,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 3007,
+ "end": 3010,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3007,
+ "end": 3010,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 3007,
+ "end": 3010,
+ "name": "ADD"
+ },
+ {
+ "begin": 3007,
+ "end": 3010,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 2974,
+ "end": 3142,
+ "name": "PUSH [tag]",
+ "value": "12"
+ },
+ {
+ "begin": 2974,
+ "end": 3142,
+ "name": "JUMP"
+ },
+ {
+ "begin": 2974,
+ "end": 3142,
+ "name": "tag",
+ "value": "13"
+ },
+ {
+ "begin": 2974,
+ "end": 3142,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3151,
+ "end": 3167,
+ "name": "DUP5"
+ },
+ {
+ "begin": 3151,
+ "end": 3167,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 3151,
+ "end": 3167,
+ "name": "PUSH [tag]",
+ "value": "20"
+ },
+ {
+ "begin": 3151,
+ "end": 3167,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3151,
+ "end": 3157,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 3151,
+ "end": 3157,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3151,
+ "end": 3167,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 3151,
+ "end": 3167,
+ "name": "DUP9"
+ },
+ {
+ "begin": 3151,
+ "end": 3167,
+ "name": "ADD"
+ },
+ {
+ "begin": 3151,
+ "end": 3167,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3151,
+ "end": 3167,
+ "name": "PUSH [tag]",
+ "value": "21"
+ },
+ {
+ "begin": 3151,
+ "end": 3167,
+ "name": "JUMP",
+ "value": "[in]"
+ },
+ {
+ "begin": 3151,
+ "end": 3167,
+ "name": "tag",
+ "value": "20"
+ },
+ {
+ "begin": 3151,
+ "end": 3167,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 3177,
+ "end": 3185,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 3177,
+ "end": 3197,
+ "name": "DUP5"
+ },
+ {
+ "begin": 3177,
+ "end": 3197,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3177,
+ "end": 3197,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 2412,
+ "end": 2413,
+ "name": "tag",
+ "value": "11"
+ },
+ {
+ "begin": 2412,
+ "end": 2413,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2834,
+ "end": 3204,
+ "name": "tag",
+ "value": "6"
+ },
+ {
+ "begin": 2834,
+ "end": 3204,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 2052,
+ "end": 2069,
+ "name": "PUSH",
+ "value": "6"
+ },
+ {
+ "begin": 2052,
+ "end": 2090,
+ "name": "DUP4"
+ },
+ {
+ "begin": 2052,
+ "end": 2090,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 2052,
+ "end": 2090,
+ "name": "SSTORE"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 1884,
+ "end": 2097,
+ "name": "tag",
+ "value": "22"
+ },
+ {
+ "begin": 1884,
+ "end": 2097,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1884,
+ "end": 2097,
+ "name": "POP"
+ },
+ {
+ "begin": 1884,
+ "end": 2097,
+ "name": "POP"
+ },
+ {
+ "begin": 1884,
+ "end": 2097,
+ "name": "POP"
+ },
+ {
+ "begin": 2393,
+ "end": 2394,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2381,
+ "end": 2394,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 2381,
+ "end": 2394,
+ "name": "POP"
+ },
+ {
+ "begin": 2376,
+ "end": 2605,
+ "name": "tag",
+ "value": "24"
+ },
+ {
+ "begin": 2376,
+ "end": 2605,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2400,
+ "end": 2420,
+ "name": "DUP5"
+ },
+ {
+ "begin": 2400,
+ "end": 2427,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 2396,
+ "end": 2397,
+ "name": "DUP3"
+ },
+ {
+ "begin": 2396,
+ "end": 2427,
+ "name": "LT"
+ },
+ {
+ "begin": 2376,
+ "end": 2605,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2376,
+ "end": 2605,
+ "name": "PUSH [tag]",
+ "value": "25"
+ },
+ {
+ "begin": 2376,
+ "end": 2605,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 2469,
+ "end": 2489,
+ "name": "DUP5"
+ },
+ {
+ "begin": 2490,
+ "end": 2491,
+ "name": "DUP3"
+ },
+ {
+ "begin": 2469,
+ "end": 2492,
+ "name": "DUP2"
+ },
+ {
+ "begin": 2469,
+ "end": 2492,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 2469,
+ "end": 2492,
+ "name": "DUP2"
+ },
+ {
+ "begin": 2469,
+ "end": 2492,
+ "name": "LT"
+ },
+ {
+ "begin": 2469,
+ "end": 2492,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2469,
+ "end": 2492,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2469,
+ "end": 2492,
+ "name": "PUSH [tag]",
+ "value": "27"
+ },
+ {
+ "begin": 2469,
+ "end": 2492,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 2469,
+ "end": 2492,
+ "name": "INVALID"
+ },
+ {
+ "begin": 2469,
+ "end": 2492,
+ "name": "tag",
+ "value": "27"
+ },
+ {
+ "begin": 2469,
+ "end": 2492,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2469,
+ "end": 2492,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 2469,
+ "end": 2492,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 2469,
+ "end": 2492,
+ "name": "DUP2"
+ },
+ {
+ "begin": 2469,
+ "end": 2492,
+ "name": "MUL"
+ },
+ {
+ "begin": 2469,
+ "end": 2492,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 2469,
+ "end": 2492,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 2469,
+ "end": 2492,
+ "name": "ADD"
+ },
+ {
+ "begin": 2469,
+ "end": 2492,
+ "name": "ADD"
+ },
+ {
+ "begin": 2469,
+ "end": 2492,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 2469,
+ "end": 2492,
+ "name": "SWAP1"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "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": 2514,
+ "end": 2538,
+ "name": "DUP2"
+ },
+ {
+ "begin": 2514,
+ "end": 2538,
+ "name": "AND"
+ },
+ {
+ "begin": 2514,
+ "end": 2538,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2514,
+ "end": 2538,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2506,
+ "end": 2539,
+ "name": "PUSH [tag]",
+ "value": "28"
+ },
+ {
+ "begin": 2506,
+ "end": 2539,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 2506,
+ "end": 2539,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2506,
+ "end": 2539,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2506,
+ "end": 2539,
+ "name": "REVERT"
+ },
+ {
+ "begin": 2506,
+ "end": 2539,
+ "name": "tag",
+ "value": "28"
+ },
+ {
+ "begin": 2506,
+ "end": 2539,
+ "name": "JUMPDEST"
+ },
+ {
+ "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": 2553,
+ "end": 2587,
+ "name": "DUP2"
+ },
+ {
+ "begin": 2553,
+ "end": 2587,
+ "name": "AND"
+ },
+ {
+ "begin": 2553,
+ "end": 2587,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2553,
+ "end": 2587,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 2553,
+ "end": 2587,
+ "name": "DUP2"
+ },
+ {
+ "begin": 2553,
+ "end": 2587,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 2553,
+ "end": 2575,
+ "name": "PUSH",
+ "value": "8"
+ },
+ {
+ "begin": 2553,
+ "end": 2587,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 2553,
+ "end": 2587,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 2553,
+ "end": 2587,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 2553,
+ "end": 2587,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 2553,
+ "end": 2587,
+ "name": "SHA3"
+ },
+ {
+ "begin": 2553,
+ "end": 2594,
+ "name": "DUP1"
+ },
+ {
+ "begin": 2553,
+ "end": 2594,
+ "name": "SLOAD"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 2553,
+ "end": 2594,
+ "name": "AND"
+ },
+ {
+ "begin": 2590,
+ "end": 2594,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 2553,
+ "end": 2594,
+ "name": "OR"
+ },
+ {
+ "begin": 2553,
+ "end": 2594,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 2553,
+ "end": 2594,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 2376,
+ "end": 2605,
+ "name": "tag",
+ "value": "26"
+ },
+ {
+ "begin": 2376,
+ "end": 2605,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2429,
+ "end": 2432,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 2429,
+ "end": 2432,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 2429,
+ "end": 2432,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 2429,
+ "end": 2432,
+ "name": "ADD"
+ },
+ {
+ "begin": 2429,
+ "end": 2432,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 2376,
+ "end": 2605,
+ "name": "PUSH [tag]",
+ "value": "24"
+ },
+ {
+ "begin": 2376,
+ "end": 2605,
+ "name": "JUMP"
+ },
+ {
+ "begin": 2376,
+ "end": 2605,
+ "name": "tag",
+ "value": "25"
+ },
+ {
+ "begin": 2376,
+ "end": 2605,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "tag",
+ "value": "23"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "POP"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "POP"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "POP"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "POP"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "POP"
+ },
+ {
+ "begin": 2097,
+ "end": 2611,
+ "name": "POP"
+ },
+ {
+ "begin": 762,
+ "end": 1048,
+ "name": "tag",
+ "value": "29"
+ },
+ {
+ "begin": 762,
+ "end": 1048,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 762,
+ "end": 1048,
+ "name": "POP"
+ },
+ {
+ "begin": 762,
+ "end": 1048,
+ "name": "POP"
+ },
+ {
+ "begin": 762,
+ "end": 1048,
+ "name": "POP"
+ },
+ {
+ "begin": 762,
+ "end": 1048,
+ "name": "POP"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "30"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMP"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "tag",
+ "value": "21"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP3"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP3"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP3"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SHA3"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP2"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "ADD"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP3"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "33"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "MUL"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP3"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "ADD"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "tag",
+ "value": "32"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP3"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP2"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "GT"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "33"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP3"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP3"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "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": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "AND"
+ },
+ {
+ "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": 703,
+ "end": 2182,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "AND"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "OR"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP3"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "ADD"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SWAP2"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "ADD"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "32"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMP"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "tag",
+ "value": "33"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "tag",
+ "value": "31"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "34"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SWAP2"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "35"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMP",
+ "value": "[in]"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "tag",
+ "value": "34"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "POP"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "tag",
+ "value": "35"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "36"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "tag",
+ "value": "37"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP3"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "GT"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "34"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "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": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "AND"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP2"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "ADD"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "37"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMP"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "tag",
+ "value": "38"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "POP"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMP"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "tag",
+ "value": "36"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "tag",
+ "value": "30"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH #[$]",
+ "value": "0000000000000000000000000000000000000000000000000000000000000000"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [$]",
+ "value": "0000000000000000000000000000000000000000000000000000000000000000"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "CODECOPY"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "RETURN"
+ }
+ ],
+ ".data": {
+ "0": {
+ ".code": [
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "60"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "CALLDATASIZE"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "FFFFFFFF"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "E0"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "2"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "EXP"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DIV"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "AND"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "25E7C27"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP2"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "EQ"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "2"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "173825D9"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "EQ"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "3"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "20EA8D86"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "EQ"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "4"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "2F54BF6E"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "EQ"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "5"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "3411C81C"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "EQ"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "6"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "3589B35C"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "EQ"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "7"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "37BD78A0"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "EQ"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "8"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "54741525"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "EQ"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "9"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "5A1A66AF"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "EQ"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "10"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "7065CB48"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "EQ"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "11"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "72CBE61D"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "EQ"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "12"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "784547A7"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "EQ"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "13"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "7AD28C51"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "EQ"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "14"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "83250F79"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "EQ"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "15"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "8B51D13F"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "EQ"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "16"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "9ACE38C2"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "EQ"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "17"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "A0E67E2B"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "EQ"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "18"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "A8ABE69A"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "EQ"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "19"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "B5DC40C3"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "EQ"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "20"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "B77BF600"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "EQ"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "21"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "BA51A6DF"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "EQ"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "22"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "C01A8C84"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "EQ"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "23"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "C296E43C"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "EQ"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "24"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "C6427474"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "EQ"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "25"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "CC12CB28"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "EQ"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "26"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "D38F2D82"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "EQ"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "27"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "D74F8EDD"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "EQ"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "28"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "DC8452CD"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "EQ"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "29"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "E20056E6"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "EQ"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "30"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "EE22610B"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "EQ"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "31"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "tag",
+ "value": "1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "32"
+ },
+ {
+ "begin": 2482,
+ "end": 2591,
+ "name": "tag",
+ "value": "33"
+ },
+ {
+ "begin": 2482,
+ "end": 2591,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2539,
+ "end": 2540,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2527,
+ "end": 2536,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 2527,
+ "end": 2540,
+ "name": "GT"
+ },
+ {
+ "begin": 2523,
+ "end": 2584,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2523,
+ "end": 2584,
+ "name": "PUSH [tag]",
+ "value": "35"
+ },
+ {
+ "begin": 2523,
+ "end": 2584,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 2554,
+ "end": 2584,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 2554,
+ "end": 2584,
+ "name": "DUP1"
+ },
+ {
+ "begin": 2554,
+ "end": 2584,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 2574,
+ "end": 2583,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 2554,
+ "end": 2584,
+ "name": "DUP2"
+ },
+ {
+ "begin": 2554,
+ "end": 2584,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 2554,
+ "end": 2584,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 2554,
+ "end": 2584,
+ "name": "MLOAD"
+ },
+ {
+ "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": 2562,
+ "end": 2572,
+ "name": "CALLER"
+ },
+ {
+ "begin": 2554,
+ "end": 2584,
+ "name": "AND"
+ },
+ {
+ "begin": 2554,
+ "end": 2584,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 2554,
+ "end": 2584,
+ "name": "PUSH",
+ "value": "E1FFFCC4923D04B559F4D29A8BFC6CDA04EB5B0D3C460751C2402C5C5CC9109C"
+ },
+ {
+ "begin": 2554,
+ "end": 2584,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 2554,
+ "end": 2584,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 2554,
+ "end": 2584,
+ "name": "DUP2"
+ },
+ {
+ "begin": 2554,
+ "end": 2584,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 2554,
+ "end": 2584,
+ "name": "SUB"
+ },
+ {
+ "begin": 2554,
+ "end": 2584,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 2554,
+ "end": 2584,
+ "name": "ADD"
+ },
+ {
+ "begin": 2554,
+ "end": 2584,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 2554,
+ "end": 2584,
+ "name": "LOG2"
+ },
+ {
+ "begin": 2523,
+ "end": 2584,
+ "name": "tag",
+ "value": "35"
+ },
+ {
+ "begin": 2523,
+ "end": 2584,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2482,
+ "end": 2591,
+ "name": "tag",
+ "value": "34"
+ },
+ {
+ "begin": 2482,
+ "end": 2591,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2482,
+ "end": 2591,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "tag",
+ "value": "32"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "STOP"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "tag",
+ "value": "2"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "PUSH [tag]",
+ "value": "36"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "INVALID"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "tag",
+ "value": "36"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "PUSH [tag]",
+ "value": "37"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "PUSH [tag]",
+ "value": "38"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "JUMP"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "tag",
+ "value": "37"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "DUP1"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "MLOAD"
+ },
+ {
+ "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": 956,
+ "end": 979,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "AND"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "DUP3"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "DUP2"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "SUB"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "ADD"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "RETURN"
+ },
+ {
+ "begin": 3731,
+ "end": 4191,
+ "name": "tag",
+ "value": "3"
+ },
+ {
+ "begin": 3731,
+ "end": 4191,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3731,
+ "end": 4191,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 3731,
+ "end": 4191,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3731,
+ "end": 4191,
+ "name": "PUSH [tag]",
+ "value": "39"
+ },
+ {
+ "begin": 3731,
+ "end": 4191,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 3731,
+ "end": 4191,
+ "name": "INVALID"
+ },
+ {
+ "begin": 3731,
+ "end": 4191,
+ "name": "tag",
+ "value": "39"
+ },
+ {
+ "begin": 3731,
+ "end": 4191,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3731,
+ "end": 4191,
+ "name": "PUSH [tag]",
+ "value": "32"
+ },
+ {
+ "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": 3731,
+ "end": 4191,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 3731,
+ "end": 4191,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 3731,
+ "end": 4191,
+ "name": "AND"
+ },
+ {
+ "begin": 3731,
+ "end": 4191,
+ "name": "PUSH [tag]",
+ "value": "41"
+ },
+ {
+ "begin": 3731,
+ "end": 4191,
+ "name": "JUMP"
+ },
+ {
+ "begin": 3731,
+ "end": 4191,
+ "name": "tag",
+ "value": "40"
+ },
+ {
+ "begin": 3731,
+ "end": 4191,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3731,
+ "end": 4191,
+ "name": "STOP"
+ },
+ {
+ "begin": 3176,
+ "end": 3508,
+ "name": "tag",
+ "value": "4"
+ },
+ {
+ "begin": 3176,
+ "end": 3508,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3176,
+ "end": 3508,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 3176,
+ "end": 3508,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3176,
+ "end": 3508,
+ "name": "PUSH [tag]",
+ "value": "42"
+ },
+ {
+ "begin": 3176,
+ "end": 3508,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 3176,
+ "end": 3508,
+ "name": "INVALID"
+ },
+ {
+ "begin": 3176,
+ "end": 3508,
+ "name": "tag",
+ "value": "42"
+ },
+ {
+ "begin": 3176,
+ "end": 3508,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3176,
+ "end": 3508,
+ "name": "PUSH [tag]",
+ "value": "32"
+ },
+ {
+ "begin": 3176,
+ "end": 3508,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 3176,
+ "end": 3508,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 3176,
+ "end": 3508,
+ "name": "PUSH [tag]",
+ "value": "44"
+ },
+ {
+ "begin": 3176,
+ "end": 3508,
+ "name": "JUMP"
+ },
+ {
+ "begin": 3176,
+ "end": 3508,
+ "name": "tag",
+ "value": "43"
+ },
+ {
+ "begin": 3176,
+ "end": 3508,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3176,
+ "end": 3508,
+ "name": "STOP"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "tag",
+ "value": "5"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "PUSH [tag]",
+ "value": "45"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "INVALID"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "tag",
+ "value": "45"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "PUSH [tag]",
+ "value": "46"
+ },
+ {
+ "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": 910,
+ "end": 950,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "AND"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "PUSH [tag]",
+ "value": "47"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "JUMP"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "tag",
+ "value": "46"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "DUP1"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "DUP3"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "DUP2"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "SUB"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "ADD"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "RETURN"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "tag",
+ "value": "6"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "PUSH [tag]",
+ "value": "48"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "INVALID"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "tag",
+ "value": "48"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "PUSH [tag]",
+ "value": "46"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "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": 840,
+ "end": 904,
+ "name": "PUSH",
+ "value": "24"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "AND"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "PUSH [tag]",
+ "value": "50"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "JUMP"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "tag",
+ "value": "49"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "DUP1"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "DUP3"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "DUP2"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "SUB"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "ADD"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "RETURN"
+ },
+ {
+ "begin": 3320,
+ "end": 3893,
+ "name": "tag",
+ "value": "7"
+ },
+ {
+ "begin": 3320,
+ "end": 3893,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3320,
+ "end": 3893,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 3320,
+ "end": 3893,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3320,
+ "end": 3893,
+ "name": "PUSH [tag]",
+ "value": "51"
+ },
+ {
+ "begin": 3320,
+ "end": 3893,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 3320,
+ "end": 3893,
+ "name": "INVALID"
+ },
+ {
+ "begin": 3320,
+ "end": 3893,
+ "name": "tag",
+ "value": "51"
+ },
+ {
+ "begin": 3320,
+ "end": 3893,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3320,
+ "end": 3893,
+ "name": "PUSH [tag]",
+ "value": "32"
+ },
+ {
+ "begin": 3320,
+ "end": 3893,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 3320,
+ "end": 3893,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 3320,
+ "end": 3893,
+ "name": "PUSH [tag]",
+ "value": "53"
+ },
+ {
+ "begin": 3320,
+ "end": 3893,
+ "name": "JUMP"
+ },
+ {
+ "begin": 3320,
+ "end": 3893,
+ "name": "tag",
+ "value": "52"
+ },
+ {
+ "begin": 3320,
+ "end": 3893,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3320,
+ "end": 3893,
+ "name": "STOP"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "tag",
+ "value": "8"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "PUSH [tag]",
+ "value": "54"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "INVALID"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "tag",
+ "value": "54"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "PUSH [tag]",
+ "value": "55"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "PUSH [tag]",
+ "value": "56"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "JUMP"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "tag",
+ "value": "55"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "DUP3"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "SUB"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "ADD"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "RETURN"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "tag",
+ "value": "9"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "PUSH [tag]",
+ "value": "57"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "INVALID"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "tag",
+ "value": "57"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "PUSH [tag]",
+ "value": "55"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "PUSH",
+ "value": "24"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "PUSH [tag]",
+ "value": "59"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "JUMP"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "tag",
+ "value": "58"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "DUP1"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "DUP3"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "DUP2"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "SUB"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "ADD"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "RETURN"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "tag",
+ "value": "10"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "PUSH [tag]",
+ "value": "60"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "INVALID"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "tag",
+ "value": "60"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "PUSH [tag]",
+ "value": "32"
+ },
+ {
+ "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": 2895,
+ "end": 3184,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "AND"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "PUSH",
+ "value": "24"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "PUSH [tag]",
+ "value": "62"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "JUMP"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "tag",
+ "value": "61"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "STOP"
+ },
+ {
+ "begin": 3331,
+ "end": 3608,
+ "name": "tag",
+ "value": "11"
+ },
+ {
+ "begin": 3331,
+ "end": 3608,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3331,
+ "end": 3608,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 3331,
+ "end": 3608,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3331,
+ "end": 3608,
+ "name": "PUSH [tag]",
+ "value": "63"
+ },
+ {
+ "begin": 3331,
+ "end": 3608,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 3331,
+ "end": 3608,
+ "name": "INVALID"
+ },
+ {
+ "begin": 3331,
+ "end": 3608,
+ "name": "tag",
+ "value": "63"
+ },
+ {
+ "begin": 3331,
+ "end": 3608,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3331,
+ "end": 3608,
+ "name": "PUSH [tag]",
+ "value": "32"
+ },
+ {
+ "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": 3331,
+ "end": 3608,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 3331,
+ "end": 3608,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 3331,
+ "end": 3608,
+ "name": "AND"
+ },
+ {
+ "begin": 3331,
+ "end": 3608,
+ "name": "PUSH [tag]",
+ "value": "65"
+ },
+ {
+ "begin": 3331,
+ "end": 3608,
+ "name": "JUMP"
+ },
+ {
+ "begin": 3331,
+ "end": 3608,
+ "name": "tag",
+ "value": "64"
+ },
+ {
+ "begin": 3331,
+ "end": 3608,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3331,
+ "end": 3608,
+ "name": "STOP"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "tag",
+ "value": "12"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "PUSH [tag]",
+ "value": "66"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "INVALID"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "tag",
+ "value": "66"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "PUSH [tag]",
+ "value": "46"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "ADD"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "DUP3"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "ADD"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "ADD"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "PUSH",
+ "value": "1F"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "ADD"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "DIV"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "MUL"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "ADD"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "ADD"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "SWAP4"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "ADD"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "DUP4"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "DUP4"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "DUP3"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "DUP5"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "CALLDATACOPY"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "SWAP5"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "SWAP7"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "PUSH [tag]",
+ "value": "68"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "SWAP6"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "JUMP"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "tag",
+ "value": "67"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "DUP3"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "SUB"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "ADD"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "RETURN"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "tag",
+ "value": "13"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "PUSH [tag]",
+ "value": "69"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "INVALID"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "tag",
+ "value": "69"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "PUSH [tag]",
+ "value": "46"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "PUSH [tag]",
+ "value": "71"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "JUMP"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "tag",
+ "value": "70"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "DUP1"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "DUP3"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "DUP2"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "SUB"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "ADD"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "RETURN"
+ },
+ {
+ "begin": 2301,
+ "end": 2487,
+ "name": "tag",
+ "value": "14"
+ },
+ {
+ "begin": 2301,
+ "end": 2487,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2301,
+ "end": 2487,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 2301,
+ "end": 2487,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2301,
+ "end": 2487,
+ "name": "PUSH [tag]",
+ "value": "72"
+ },
+ {
+ "begin": 2301,
+ "end": 2487,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 2301,
+ "end": 2487,
+ "name": "INVALID"
+ },
+ {
+ "begin": 2301,
+ "end": 2487,
+ "name": "tag",
+ "value": "72"
+ },
+ {
+ "begin": 2301,
+ "end": 2487,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2301,
+ "end": 2487,
+ "name": "PUSH [tag]",
+ "value": "32"
+ },
+ {
+ "begin": 2301,
+ "end": 2487,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 2301,
+ "end": 2487,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 2301,
+ "end": 2487,
+ "name": "PUSH [tag]",
+ "value": "74"
+ },
+ {
+ "begin": 2301,
+ "end": 2487,
+ "name": "JUMP"
+ },
+ {
+ "begin": 2301,
+ "end": 2487,
+ "name": "tag",
+ "value": "73"
+ },
+ {
+ "begin": 2301,
+ "end": 2487,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2301,
+ "end": 2487,
+ "name": "STOP"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "tag",
+ "value": "15"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "PUSH [tag]",
+ "value": "75"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "INVALID"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "tag",
+ "value": "75"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "PUSH [tag]",
+ "value": "46"
+ },
+ {
+ "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": 981,
+ "end": 1036,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "AND"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "PUSH [tag]",
+ "value": "77"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "JUMP"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "tag",
+ "value": "76"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "DUP1"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "DUP3"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "DUP2"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "SUB"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "ADD"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "RETURN"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "tag",
+ "value": "16"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "PUSH [tag]",
+ "value": "78"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "INVALID"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "tag",
+ "value": "78"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "PUSH [tag]",
+ "value": "55"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "PUSH [tag]",
+ "value": "80"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "JUMP"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "tag",
+ "value": "79"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "DUP1"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "DUP3"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "DUP2"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "SUB"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "ADD"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "RETURN"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "tag",
+ "value": "17"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH [tag]",
+ "value": "81"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "INVALID"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "tag",
+ "value": "81"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH [tag]",
+ "value": "82"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH [tag]",
+ "value": "83"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "JUMP"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "tag",
+ "value": "82"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "MLOAD"
+ },
+ {
+ "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": 785,
+ "end": 834,
+ "name": "DUP7"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "AND"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP2"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP2"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "ADD"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP6"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP3"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH",
+ "value": "60"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP3"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "ADD"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH",
+ "value": "80"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP2"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "ADD"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP3"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP2"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP5"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH",
+ "value": "2"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH",
+ "value": "100"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP5"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "AND"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "MUL"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "ADD"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "AND"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DIV"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP3"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "ADD"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP4"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH",
+ "value": "A0"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP4"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "ADD"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP6"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH [tag]",
+ "value": "84"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH",
+ "value": "1F"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "LT"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH [tag]",
+ "value": "85"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH",
+ "value": "100"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP4"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DIV"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "MUL"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP4"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "ADD"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH [tag]",
+ "value": "84"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "JUMP"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "tag",
+ "value": "85"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP3"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "ADD"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SHA3"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "tag",
+ "value": "86"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP2"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP2"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "ADD"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "ADD"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP4"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "GT"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH [tag]",
+ "value": "86"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP3"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SUB"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH",
+ "value": "1F"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "AND"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP3"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "ADD"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "tag",
+ "value": "84"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "POP"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "POP"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP6"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "POP"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "POP"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "POP"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "POP"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "POP"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "POP"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SUB"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "RETURN"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "tag",
+ "value": "18"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "PUSH [tag]",
+ "value": "87"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "INVALID"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "tag",
+ "value": "87"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "PUSH [tag]",
+ "value": "88"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "PUSH [tag]",
+ "value": "89"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "JUMP"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "tag",
+ "value": "88"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "DUP1"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "DUP1"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "DUP3"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "DUP4"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "DUP2"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "DUP4"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "ADD"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "DUP4"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "DUP4"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "DUP4"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "ADD"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "DUP6"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "DUP2"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "ADD"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "MUL"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "DUP1"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "DUP4"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "DUP4"
+ },
+ {
+ "begin": 18,
+ "end": 20,
+ "name": "DUP3"
+ },
+ {
+ "begin": 18,
+ "end": 20,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 13,
+ "end": 16,
+ "name": "PUSH [tag]",
+ "value": "90"
+ },
+ {
+ "begin": 7,
+ "end": 12,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 32,
+ "end": 37,
+ "name": "tag",
+ "value": "91"
+ },
+ {
+ "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": "90"
+ },
+ {
+ "begin": 67,
+ "end": 72,
+ "name": "JUMPI"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "1F"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "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": "91"
+ },
+ {
+ "begin": 167,
+ "end": 171,
+ "name": "JUMP"
+ },
+ {
+ "begin": 181,
+ "end": 184,
+ "name": "tag",
+ "value": "90"
+ },
+ {
+ "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": "ADD"
+ },
+ {
+ "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": 10777,
+ "end": 11453,
+ "name": "tag",
+ "value": "19"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "PUSH [tag]",
+ "value": "92"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "INVALID"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "tag",
+ "value": "92"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "PUSH [tag]",
+ "value": "88"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "PUSH",
+ "value": "24"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "PUSH",
+ "value": "44"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "PUSH",
+ "value": "64"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "PUSH [tag]",
+ "value": "94"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "JUMP"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "tag",
+ "value": "93"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "DUP1"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "DUP1"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "DUP3"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "DUP4"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "DUP2"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "DUP4"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "ADD"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "DUP4"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "DUP4"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "DUP4"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "ADD"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "DUP6"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "DUP2"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "ADD"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "MUL"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "DUP1"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "DUP4"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "DUP4"
+ },
+ {
+ "begin": 18,
+ "end": 20,
+ "name": "DUP3"
+ },
+ {
+ "begin": 18,
+ "end": 20,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 13,
+ "end": 16,
+ "name": "PUSH [tag]",
+ "value": "90"
+ },
+ {
+ "begin": 7,
+ "end": 12,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 32,
+ "end": 37,
+ "name": "tag",
+ "value": "96"
+ },
+ {
+ "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": "90"
+ },
+ {
+ "begin": 67,
+ "end": 72,
+ "name": "JUMPI"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "1F"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "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": "91"
+ },
+ {
+ "begin": 167,
+ "end": 171,
+ "name": "JUMP"
+ },
+ {
+ "begin": 181,
+ "end": 184,
+ "name": "tag",
+ "value": "95"
+ },
+ {
+ "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": "ADD"
+ },
+ {
+ "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": 9853,
+ "end": 10428,
+ "name": "tag",
+ "value": "20"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "PUSH [tag]",
+ "value": "97"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "INVALID"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "tag",
+ "value": "97"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "PUSH [tag]",
+ "value": "88"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "PUSH [tag]",
+ "value": "99"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "JUMP"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "tag",
+ "value": "98"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "DUP1"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "DUP1"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "DUP3"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "DUP4"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "DUP2"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "DUP4"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "ADD"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "DUP4"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "DUP4"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "DUP4"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "ADD"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "DUP6"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "DUP2"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "ADD"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "MUL"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "DUP1"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "DUP4"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "DUP4"
+ },
+ {
+ "begin": 18,
+ "end": 20,
+ "name": "DUP3"
+ },
+ {
+ "begin": 18,
+ "end": 20,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 13,
+ "end": 16,
+ "name": "PUSH [tag]",
+ "value": "90"
+ },
+ {
+ "begin": 7,
+ "end": 12,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 32,
+ "end": 37,
+ "name": "tag",
+ "value": "101"
+ },
+ {
+ "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": "90"
+ },
+ {
+ "begin": 67,
+ "end": 72,
+ "name": "JUMPI"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "1F"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "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": "91"
+ },
+ {
+ "begin": 167,
+ "end": 171,
+ "name": "JUMP"
+ },
+ {
+ "begin": 181,
+ "end": 184,
+ "name": "tag",
+ "value": "100"
+ },
+ {
+ "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": "ADD"
+ },
+ {
+ "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": 1011,
+ "end": 1039,
+ "name": "tag",
+ "value": "21"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "PUSH [tag]",
+ "value": "102"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "INVALID"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "tag",
+ "value": "102"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "PUSH [tag]",
+ "value": "55"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "PUSH [tag]",
+ "value": "104"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "JUMP"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "tag",
+ "value": "103"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "DUP3"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "SUB"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "ADD"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "RETURN"
+ },
+ {
+ "begin": 5010,
+ "end": 5217,
+ "name": "tag",
+ "value": "22"
+ },
+ {
+ "begin": 5010,
+ "end": 5217,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 5010,
+ "end": 5217,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 5010,
+ "end": 5217,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 5010,
+ "end": 5217,
+ "name": "PUSH [tag]",
+ "value": "105"
+ },
+ {
+ "begin": 5010,
+ "end": 5217,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 5010,
+ "end": 5217,
+ "name": "INVALID"
+ },
+ {
+ "begin": 5010,
+ "end": 5217,
+ "name": "tag",
+ "value": "105"
+ },
+ {
+ "begin": 5010,
+ "end": 5217,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 5010,
+ "end": 5217,
+ "name": "PUSH [tag]",
+ "value": "32"
+ },
+ {
+ "begin": 5010,
+ "end": 5217,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 5010,
+ "end": 5217,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 5010,
+ "end": 5217,
+ "name": "PUSH [tag]",
+ "value": "107"
+ },
+ {
+ "begin": 5010,
+ "end": 5217,
+ "name": "JUMP"
+ },
+ {
+ "begin": 5010,
+ "end": 5217,
+ "name": "tag",
+ "value": "106"
+ },
+ {
+ "begin": 5010,
+ "end": 5217,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 5010,
+ "end": 5217,
+ "name": "STOP"
+ },
+ {
+ "begin": 2593,
+ "end": 3052,
+ "name": "tag",
+ "value": "23"
+ },
+ {
+ "begin": 2593,
+ "end": 3052,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2593,
+ "end": 3052,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 2593,
+ "end": 3052,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2593,
+ "end": 3052,
+ "name": "PUSH [tag]",
+ "value": "108"
+ },
+ {
+ "begin": 2593,
+ "end": 3052,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 2593,
+ "end": 3052,
+ "name": "INVALID"
+ },
+ {
+ "begin": 2593,
+ "end": 3052,
+ "name": "tag",
+ "value": "108"
+ },
+ {
+ "begin": 2593,
+ "end": 3052,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2593,
+ "end": 3052,
+ "name": "PUSH [tag]",
+ "value": "32"
+ },
+ {
+ "begin": 2593,
+ "end": 3052,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 2593,
+ "end": 3052,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 2593,
+ "end": 3052,
+ "name": "PUSH [tag]",
+ "value": "110"
+ },
+ {
+ "begin": 2593,
+ "end": 3052,
+ "name": "JUMP"
+ },
+ {
+ "begin": 2593,
+ "end": 3052,
+ "name": "tag",
+ "value": "109"
+ },
+ {
+ "begin": 2593,
+ "end": 3052,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2593,
+ "end": 3052,
+ "name": "STOP"
+ },
+ {
+ "begin": 1058,
+ "end": 1303,
+ "name": "tag",
+ "value": "24"
+ },
+ {
+ "begin": 1058,
+ "end": 1303,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1058,
+ "end": 1303,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 1058,
+ "end": 1303,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1058,
+ "end": 1303,
+ "name": "PUSH [tag]",
+ "value": "111"
+ },
+ {
+ "begin": 1058,
+ "end": 1303,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1058,
+ "end": 1303,
+ "name": "INVALID"
+ },
+ {
+ "begin": 1058,
+ "end": 1303,
+ "name": "tag",
+ "value": "111"
+ },
+ {
+ "begin": 1058,
+ "end": 1303,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1058,
+ "end": 1303,
+ "name": "PUSH [tag]",
+ "value": "46"
+ },
+ {
+ "begin": 1058,
+ "end": 1303,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 1058,
+ "end": 1303,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 1058,
+ "end": 1303,
+ "name": "PUSH [tag]",
+ "value": "113"
+ },
+ {
+ "begin": 1058,
+ "end": 1303,
+ "name": "JUMP"
+ },
+ {
+ "begin": 1058,
+ "end": 1303,
+ "name": "tag",
+ "value": "112"
+ },
+ {
+ "begin": 1058,
+ "end": 1303,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1058,
+ "end": 1303,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 1058,
+ "end": 1303,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1058,
+ "end": 1303,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 1058,
+ "end": 1303,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 1058,
+ "end": 1303,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1058,
+ "end": 1303,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1058,
+ "end": 1303,
+ "name": "DUP3"
+ },
+ {
+ "begin": 1058,
+ "end": 1303,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1058,
+ "end": 1303,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 1058,
+ "end": 1303,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1058,
+ "end": 1303,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1058,
+ "end": 1303,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1058,
+ "end": 1303,
+ "name": "SUB"
+ },
+ {
+ "begin": 1058,
+ "end": 1303,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1058,
+ "end": 1303,
+ "name": "ADD"
+ },
+ {
+ "begin": 1058,
+ "end": 1303,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1058,
+ "end": 1303,
+ "name": "RETURN"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "tag",
+ "value": "25"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "PUSH [tag]",
+ "value": "114"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "INVALID"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "tag",
+ "value": "114"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "DUP1"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "PUSH",
+ "value": "44"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "DUP2"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "DUP2"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "ADD"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "PUSH",
+ "value": "1F"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "DUP2"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "ADD"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "DUP5"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "DIV"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "DUP5"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "MUL"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "DUP6"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "ADD"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "DUP5"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "ADD"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "SWAP6"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "DUP5"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "DUP5"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "PUSH [tag]",
+ "value": "55"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "SWAP5"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "DUP3"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "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": 5476,
+ "end": 5720,
+ "name": "AND"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "SWAP5"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "PUSH",
+ "value": "24"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "DUP1"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "SWAP6"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "PUSH",
+ "value": "64"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "SWAP5"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "SWAP4"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "ADD"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "DUP2"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "DUP5"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "ADD"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "DUP4"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "DUP3"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "DUP1"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "DUP3"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "DUP5"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "CALLDATACOPY"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "SWAP5"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "SWAP7"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "PUSH [tag]",
+ "value": "116"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "SWAP6"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "JUMP"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "tag",
+ "value": "115"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "DUP1"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "DUP3"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "DUP2"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "SUB"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "ADD"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "RETURN"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "tag",
+ "value": "26"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "PUSH [tag]",
+ "value": "117"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "INVALID"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "tag",
+ "value": "117"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "PUSH [tag]",
+ "value": "118"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "ADD"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "DUP3"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "ADD"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "ADD"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "PUSH",
+ "value": "1F"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "ADD"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "DIV"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "MUL"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "ADD"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "ADD"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "SWAP4"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "ADD"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "DUP4"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "DUP4"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "DUP3"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "DUP5"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "CALLDATACOPY"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "SWAP5"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "SWAP7"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "SWAP4"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "SWAP4"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "PUSH [tag]",
+ "value": "119"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "SWAP3"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "JUMP"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "tag",
+ "value": "118"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "MLOAD"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "E0"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "2"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "EXP"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "SUB"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "AND"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "DUP3"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "SUB"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "ADD"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "RETURN"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "tag",
+ "value": "27"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "PUSH [tag]",
+ "value": "120"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "INVALID"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "tag",
+ "value": "120"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "PUSH [tag]",
+ "value": "55"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "PUSH [tag]",
+ "value": "122"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "JUMP"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "tag",
+ "value": "121"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "DUP3"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "SUB"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "ADD"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "RETURN"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "tag",
+ "value": "28"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "PUSH [tag]",
+ "value": "123"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "INVALID"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "tag",
+ "value": "123"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "PUSH [tag]",
+ "value": "55"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "PUSH [tag]",
+ "value": "125"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "JUMP"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "tag",
+ "value": "124"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "DUP1"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "DUP3"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "DUP2"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "SUB"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "ADD"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "RETURN"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "tag",
+ "value": "29"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "PUSH [tag]",
+ "value": "126"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "INVALID"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "tag",
+ "value": "126"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "PUSH [tag]",
+ "value": "55"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "PUSH [tag]",
+ "value": "128"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "JUMP"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "tag",
+ "value": "127"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "DUP1"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "DUP3"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "DUP2"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "SUB"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "ADD"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "RETURN"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "tag",
+ "value": "30"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "PUSH [tag]",
+ "value": "129"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "INVALID"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "tag",
+ "value": "129"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "PUSH [tag]",
+ "value": "32"
+ },
+ {
+ "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": 4390,
+ "end": 4839,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "DUP2"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "AND"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "PUSH",
+ "value": "24"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "AND"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "PUSH [tag]",
+ "value": "131"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "JUMP"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "tag",
+ "value": "130"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "STOP"
+ },
+ {
+ "begin": 3622,
+ "end": 4094,
+ "name": "tag",
+ "value": "31"
+ },
+ {
+ "begin": 3622,
+ "end": 4094,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3622,
+ "end": 4094,
+ "name": "CALLVALUE"
+ },
+ {
+ "begin": 3622,
+ "end": 4094,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3622,
+ "end": 4094,
+ "name": "PUSH [tag]",
+ "value": "132"
+ },
+ {
+ "begin": 3622,
+ "end": 4094,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 3622,
+ "end": 4094,
+ "name": "INVALID"
+ },
+ {
+ "begin": 3622,
+ "end": 4094,
+ "name": "tag",
+ "value": "132"
+ },
+ {
+ "begin": 3622,
+ "end": 4094,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3622,
+ "end": 4094,
+ "name": "PUSH [tag]",
+ "value": "32"
+ },
+ {
+ "begin": 3622,
+ "end": 4094,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 3622,
+ "end": 4094,
+ "name": "CALLDATALOAD"
+ },
+ {
+ "begin": 3622,
+ "end": 4094,
+ "name": "PUSH [tag]",
+ "value": "134"
+ },
+ {
+ "begin": 3622,
+ "end": 4094,
+ "name": "JUMP"
+ },
+ {
+ "begin": 3622,
+ "end": 4094,
+ "name": "tag",
+ "value": "133"
+ },
+ {
+ "begin": 3622,
+ "end": 4094,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3622,
+ "end": 4094,
+ "name": "STOP"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "tag",
+ "value": "38"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "DUP1"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "DUP3"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "DUP2"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "LT"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "PUSH [tag]",
+ "value": "135"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "INVALID"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "tag",
+ "value": "135"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "SHA3"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "ADD"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "tag",
+ "value": "136"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "POP"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "PUSH",
+ "value": "100"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "EXP"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "DIV"
+ },
+ {
+ "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": 956,
+ "end": 979,
+ "name": "AND"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "DUP2"
+ },
+ {
+ "begin": 956,
+ "end": 979,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 3731,
+ "end": 4191,
+ "name": "tag",
+ "value": "41"
+ },
+ {
+ "begin": 3731,
+ "end": 4191,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3879,
+ "end": 3885,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1228,
+ "end": 1232,
+ "name": "ADDRESS"
+ },
+ {
+ "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": 1206,
+ "end": 1233,
+ "name": "AND"
+ },
+ {
+ "begin": 1206,
+ "end": 1216,
+ "name": "CALLER"
+ },
+ {
+ "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": 1206,
+ "end": 1233,
+ "name": "AND"
+ },
+ {
+ "begin": 1206,
+ "end": 1233,
+ "name": "EQ"
+ },
+ {
+ "begin": 1206,
+ "end": 1233,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "PUSH [tag]",
+ "value": "138"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1247,
+ "end": 1252,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1247,
+ "end": 1252,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1247,
+ "end": 1252,
+ "name": "REVERT"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "tag",
+ "value": "138"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "JUMPDEST"
+ },
+ {
+ "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": 1440,
+ "end": 1454,
+ "name": "DUP3"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "AND"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1440,
+ "end": 1447,
+ "name": "PUSH",
+ "value": "2"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "SHA3"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 3821,
+ "end": 3826,
+ "name": "DUP3"
+ },
+ {
+ "begin": 3821,
+ "end": 3826,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "AND"
+ },
+ {
+ "begin": 1439,
+ "end": 1454,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1435,
+ "end": 1473,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1435,
+ "end": 1473,
+ "name": "PUSH [tag]",
+ "value": "140"
+ },
+ {
+ "begin": 1435,
+ "end": 1473,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1468,
+ "end": 1473,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1468,
+ "end": 1473,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1468,
+ "end": 1473,
+ "name": "REVERT"
+ },
+ {
+ "begin": 1435,
+ "end": 1473,
+ "name": "tag",
+ "value": "140"
+ },
+ {
+ "begin": 1435,
+ "end": 1473,
+ "name": "JUMPDEST"
+ },
+ {
+ "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": 3842,
+ "end": 3856,
+ "name": "DUP4"
+ },
+ {
+ "begin": 3842,
+ "end": 3856,
+ "name": "AND"
+ },
+ {
+ "begin": 3859,
+ "end": 3864,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3842,
+ "end": 3856,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3842,
+ "end": 3856,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3842,
+ "end": 3856,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3842,
+ "end": 3849,
+ "name": "PUSH",
+ "value": "2"
+ },
+ {
+ "begin": 3842,
+ "end": 3856,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 3842,
+ "end": 3856,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3842,
+ "end": 3856,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 3842,
+ "end": 3856,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3842,
+ "end": 3856,
+ "name": "SHA3"
+ },
+ {
+ "begin": 3842,
+ "end": 3864,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3842,
+ "end": 3864,
+ "name": "SLOAD"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 3842,
+ "end": 3864,
+ "name": "AND"
+ },
+ {
+ "begin": 3842,
+ "end": 3864,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3842,
+ "end": 3864,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 3859,
+ "end": 3864,
+ "name": "SWAP2"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 3874,
+ "end": 4044,
+ "name": "tag",
+ "value": "142"
+ },
+ {
+ "begin": 3874,
+ "end": 4044,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3891,
+ "end": 3897,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 3891,
+ "end": 3904,
+ "name": "SLOAD"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 3891,
+ "end": 3908,
+ "name": "ADD"
+ },
+ {
+ "begin": 3889,
+ "end": 3908,
+ "name": "DUP3"
+ },
+ {
+ "begin": 3889,
+ "end": 3908,
+ "name": "LT"
+ },
+ {
+ "begin": 3874,
+ "end": 4044,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3874,
+ "end": 4044,
+ "name": "PUSH [tag]",
+ "value": "143"
+ },
+ {
+ "begin": 3874,
+ "end": 4044,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 3944,
+ "end": 3949,
+ "name": "DUP3"
+ },
+ {
+ "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": 3931,
+ "end": 3949,
+ "name": "AND"
+ },
+ {
+ "begin": 3931,
+ "end": 3937,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 3938,
+ "end": 3939,
+ "name": "DUP4"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "LT"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "PUSH [tag]",
+ "value": "145"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "INVALID"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "tag",
+ "value": "145"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "SHA3"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "ADD"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "tag",
+ "value": "146"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "PUSH",
+ "value": "100"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "EXP"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3931,
+ "end": 3940,
+ "name": "DIV"
+ },
+ {
+ "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": 3931,
+ "end": 3940,
+ "name": "AND"
+ },
+ {
+ "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": 3931,
+ "end": 3949,
+ "name": "AND"
+ },
+ {
+ "begin": 3931,
+ "end": 3949,
+ "name": "EQ"
+ },
+ {
+ "begin": 3927,
+ "end": 4044,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3927,
+ "end": 4044,
+ "name": "PUSH [tag]",
+ "value": "147"
+ },
+ {
+ "begin": 3927,
+ "end": 4044,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 3981,
+ "end": 3987,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 3988,
+ "end": 4001,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3988,
+ "end": 4001,
+ "name": "SLOAD"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 3988,
+ "end": 4005,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3988,
+ "end": 4005,
+ "name": "ADD"
+ },
+ {
+ "begin": 3988,
+ "end": 4005,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3981,
+ "end": 4006,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3981,
+ "end": 4006,
+ "name": "LT"
+ },
+ {
+ "begin": 3981,
+ "end": 4006,
+ "name": "PUSH [tag]",
+ "value": "148"
+ },
+ {
+ "begin": 3981,
+ "end": 4006,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 3981,
+ "end": 4006,
+ "name": "INVALID"
+ },
+ {
+ "begin": 3981,
+ "end": 4006,
+ "name": "tag",
+ "value": "148"
+ },
+ {
+ "begin": 3981,
+ "end": 4006,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3981,
+ "end": 4006,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3981,
+ "end": 4006,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3981,
+ "end": 4006,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3981,
+ "end": 4006,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 3981,
+ "end": 4006,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3981,
+ "end": 4006,
+ "name": "SHA3"
+ },
+ {
+ "begin": 3981,
+ "end": 4006,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3981,
+ "end": 4006,
+ "name": "ADD"
+ },
+ {
+ "begin": 3981,
+ "end": 4006,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3981,
+ "end": 4006,
+ "name": "tag",
+ "value": "149"
+ },
+ {
+ "begin": 3981,
+ "end": 4006,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3981,
+ "end": 4006,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3981,
+ "end": 4006,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 3981,
+ "end": 4006,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3981,
+ "end": 4006,
+ "name": "PUSH",
+ "value": "100"
+ },
+ {
+ "begin": 3981,
+ "end": 4006,
+ "name": "EXP"
+ },
+ {
+ "begin": 3981,
+ "end": 4006,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3981,
+ "end": 4006,
+ "name": "DIV"
+ },
+ {
+ "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": 3981,
+ "end": 4006,
+ "name": "AND"
+ },
+ {
+ "begin": 3969,
+ "end": 3975,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 3976,
+ "end": 3977,
+ "name": "DUP4"
+ },
+ {
+ "begin": 3969,
+ "end": 3978,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3969,
+ "end": 3978,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 3969,
+ "end": 3978,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3969,
+ "end": 3978,
+ "name": "LT"
+ },
+ {
+ "begin": 3969,
+ "end": 3978,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3969,
+ "end": 3978,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3969,
+ "end": 3978,
+ "name": "PUSH [tag]",
+ "value": "150"
+ },
+ {
+ "begin": 3969,
+ "end": 3978,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 3969,
+ "end": 3978,
+ "name": "INVALID"
+ },
+ {
+ "begin": 3969,
+ "end": 3978,
+ "name": "tag",
+ "value": "150"
+ },
+ {
+ "begin": 3969,
+ "end": 3978,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3969,
+ "end": 3978,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3969,
+ "end": 3978,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3969,
+ "end": 3978,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3969,
+ "end": 3978,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 3969,
+ "end": 3978,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3969,
+ "end": 3978,
+ "name": "SHA3"
+ },
+ {
+ "begin": 3969,
+ "end": 3978,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3969,
+ "end": 3978,
+ "name": "ADD"
+ },
+ {
+ "begin": 3969,
+ "end": 3978,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3969,
+ "end": 3978,
+ "name": "tag",
+ "value": "151"
+ },
+ {
+ "begin": 3969,
+ "end": 3978,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3969,
+ "end": 4006,
+ "name": "PUSH",
+ "value": "100"
+ },
+ {
+ "begin": 3969,
+ "end": 4006,
+ "name": "EXP"
+ },
+ {
+ "begin": 3969,
+ "end": 4006,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3969,
+ "end": 4006,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 3969,
+ "end": 4006,
+ "name": "DUP2"
+ },
+ {
+ "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": 3969,
+ "end": 4006,
+ "name": "MUL"
+ },
+ {
+ "begin": 3969,
+ "end": 4006,
+ "name": "NOT"
+ },
+ {
+ "begin": 3969,
+ "end": 4006,
+ "name": "AND"
+ },
+ {
+ "begin": 3969,
+ "end": 4006,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3969,
+ "end": 4006,
+ "name": "DUP4"
+ },
+ {
+ "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": 3969,
+ "end": 4006,
+ "name": "AND"
+ },
+ {
+ "begin": 3969,
+ "end": 4006,
+ "name": "MUL"
+ },
+ {
+ "begin": 3969,
+ "end": 4006,
+ "name": "OR"
+ },
+ {
+ "begin": 3969,
+ "end": 4006,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3969,
+ "end": 4006,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 3969,
+ "end": 4006,
+ "name": "POP"
+ },
+ {
+ "begin": 4024,
+ "end": 4029,
+ "name": "PUSH [tag]",
+ "value": "143"
+ },
+ {
+ "begin": 4024,
+ "end": 4029,
+ "name": "JUMP"
+ },
+ {
+ "begin": 3927,
+ "end": 4044,
+ "name": "tag",
+ "value": "147"
+ },
+ {
+ "begin": 3927,
+ "end": 4044,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3874,
+ "end": 4044,
+ "name": "tag",
+ "value": "144"
+ },
+ {
+ "begin": 3874,
+ "end": 4044,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3910,
+ "end": 3913,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 3910,
+ "end": 3913,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3910,
+ "end": 3913,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3910,
+ "end": 3913,
+ "name": "ADD"
+ },
+ {
+ "begin": 3910,
+ "end": 3913,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3874,
+ "end": 4044,
+ "name": "PUSH [tag]",
+ "value": "142"
+ },
+ {
+ "begin": 3874,
+ "end": 4044,
+ "name": "JUMP"
+ },
+ {
+ "begin": 3874,
+ "end": 4044,
+ "name": "tag",
+ "value": "143"
+ },
+ {
+ "begin": 3874,
+ "end": 4044,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 4053,
+ "end": 4059,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 4053,
+ "end": 4071,
+ "name": "DUP1"
+ },
+ {
+ "begin": 4053,
+ "end": 4071,
+ "name": "SLOAD"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 4053,
+ "end": 4071,
+ "name": "ADD"
+ },
+ {
+ "begin": 4053,
+ "end": 4071,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4053,
+ "end": 4071,
+ "name": "PUSH [tag]",
+ "value": "152"
+ },
+ {
+ "begin": 4053,
+ "end": 4071,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4053,
+ "end": 4071,
+ "name": "DUP3"
+ },
+ {
+ "begin": 4053,
+ "end": 4071,
+ "name": "PUSH [tag]",
+ "value": "153"
+ },
+ {
+ "begin": 4053,
+ "end": 4071,
+ "name": "JUMP",
+ "value": "[in]"
+ },
+ {
+ "begin": 4053,
+ "end": 4071,
+ "name": "tag",
+ "value": "152"
+ },
+ {
+ "begin": 4053,
+ "end": 4071,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 4096,
+ "end": 4102,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 4096,
+ "end": 4109,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 4085,
+ "end": 4093,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 4085,
+ "end": 4093,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 4085,
+ "end": 4109,
+ "name": "GT"
+ },
+ {
+ "begin": 4081,
+ "end": 4155,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 4081,
+ "end": 4155,
+ "name": "PUSH [tag]",
+ "value": "155"
+ },
+ {
+ "begin": 4081,
+ "end": 4155,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 4141,
+ "end": 4147,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 4141,
+ "end": 4154,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 4123,
+ "end": 4155,
+ "name": "PUSH [tag]",
+ "value": "155"
+ },
+ {
+ "begin": 4123,
+ "end": 4155,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4123,
+ "end": 4140,
+ "name": "PUSH [tag]",
+ "value": "107"
+ },
+ {
+ "begin": 4123,
+ "end": 4155,
+ "name": "JUMP",
+ "value": "[in]"
+ },
+ {
+ "begin": 4123,
+ "end": 4155,
+ "name": "tag",
+ "value": "155"
+ },
+ {
+ "begin": 4123,
+ "end": 4155,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 4081,
+ "end": 4155,
+ "name": "tag",
+ "value": "154"
+ },
+ {
+ "begin": 4081,
+ "end": 4155,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 4165,
+ "end": 4184,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 4165,
+ "end": 4184,
+ "name": "MLOAD"
+ },
+ {
+ "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": 4165,
+ "end": 4184,
+ "name": "DUP5"
+ },
+ {
+ "begin": 4165,
+ "end": 4184,
+ "name": "AND"
+ },
+ {
+ "begin": 4165,
+ "end": 4184,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4165,
+ "end": 4184,
+ "name": "PUSH",
+ "value": "8001553A916EF2F495D26A907CC54D96ED840D7BDA71E73194BF5A9DF7A76B90"
+ },
+ {
+ "begin": 4165,
+ "end": 4184,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4165,
+ "end": 4184,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 4165,
+ "end": 4184,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4165,
+ "end": 4184,
+ "name": "LOG2"
+ },
+ {
+ "begin": 1483,
+ "end": 1484,
+ "name": "tag",
+ "value": "141"
+ },
+ {
+ "begin": 1483,
+ "end": 1484,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1262,
+ "end": 1263,
+ "name": "tag",
+ "value": "139"
+ },
+ {
+ "begin": 1262,
+ "end": 1263,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1262,
+ "end": 1263,
+ "name": "POP"
+ },
+ {
+ "begin": 3731,
+ "end": 4191,
+ "name": "tag",
+ "value": "137"
+ },
+ {
+ "begin": 3731,
+ "end": 4191,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3731,
+ "end": 4191,
+ "name": "POP"
+ },
+ {
+ "begin": 3731,
+ "end": 4191,
+ "name": "POP"
+ },
+ {
+ "begin": 3731,
+ "end": 4191,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 3176,
+ "end": 3508,
+ "name": "tag",
+ "value": "44"
+ },
+ {
+ "begin": 3176,
+ "end": 3508,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3259,
+ "end": 3269,
+ "name": "CALLER"
+ },
+ {
+ "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": 1440,
+ "end": 1454,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "AND"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1440,
+ "end": 1447,
+ "name": "PUSH",
+ "value": "2"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "SHA3"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "AND"
+ },
+ {
+ "begin": 1439,
+ "end": 1454,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1435,
+ "end": 1473,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1435,
+ "end": 1473,
+ "name": "PUSH [tag]",
+ "value": "157"
+ },
+ {
+ "begin": 1435,
+ "end": 1473,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1468,
+ "end": 1473,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1468,
+ "end": 1473,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1468,
+ "end": 1473,
+ "name": "REVERT"
+ },
+ {
+ "begin": 1435,
+ "end": 1473,
+ "name": "tag",
+ "value": "157"
+ },
+ {
+ "begin": 1435,
+ "end": 1473,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1714,
+ "end": 1742,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1714,
+ "end": 1742,
+ "name": "DUP3"
+ },
+ {
+ "begin": 1714,
+ "end": 1742,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1714,
+ "end": 1742,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1714,
+ "end": 1727,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 1714,
+ "end": 1742,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1714,
+ "end": 1742,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1714,
+ "end": 1742,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1714,
+ "end": 1742,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1714,
+ "end": 1742,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 1714,
+ "end": 1742,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1714,
+ "end": 1742,
+ "name": "DUP4"
+ },
+ {
+ "begin": 1714,
+ "end": 1742,
+ "name": "SHA3"
+ },
+ {
+ "begin": 3304,
+ "end": 3314,
+ "name": "CALLER"
+ },
+ {
+ "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": 1714,
+ "end": 1749,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1714,
+ "end": 1749,
+ "name": "AND"
+ },
+ {
+ "begin": 1714,
+ "end": 1749,
+ "name": "DUP6"
+ },
+ {
+ "begin": 1714,
+ "end": 1749,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1714,
+ "end": 1749,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 1714,
+ "end": 1749,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1714,
+ "end": 1749,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1714,
+ "end": 1749,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 1714,
+ "end": 1749,
+ "name": "SHA3"
+ },
+ {
+ "begin": 1714,
+ "end": 1749,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 1714,
+ "end": 1742,
+ "name": "DUP4"
+ },
+ {
+ "begin": 1714,
+ "end": 1742,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3304,
+ "end": 3314,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1714,
+ "end": 1749,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": 1714,
+ "end": 1749,
+ "name": "AND"
+ },
+ {
+ "begin": 1713,
+ "end": 1749,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1709,
+ "end": 1768,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1709,
+ "end": 1768,
+ "name": "PUSH [tag]",
+ "value": "159"
+ },
+ {
+ "begin": 1709,
+ "end": 1768,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1763,
+ "end": 1768,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1763,
+ "end": 1768,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1763,
+ "end": 1768,
+ "name": "REVERT"
+ },
+ {
+ "begin": 1709,
+ "end": 1768,
+ "name": "tag",
+ "value": "159"
+ },
+ {
+ "begin": 1709,
+ "end": 1768,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1996,
+ "end": 2008,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "DUP5"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "SHA3"
+ },
+ {
+ "begin": 1996,
+ "end": 2032,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 1996,
+ "end": 2032,
+ "name": "ADD"
+ },
+ {
+ "begin": 1996,
+ "end": 2032,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 3336,
+ "end": 3349,
+ "name": "DUP5"
+ },
+ {
+ "begin": 3336,
+ "end": 3349,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1996,
+ "end": 2032,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": 1996,
+ "end": 2032,
+ "name": "AND"
+ },
+ {
+ "begin": 1992,
+ "end": 2051,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1992,
+ "end": 2051,
+ "name": "PUSH [tag]",
+ "value": "161"
+ },
+ {
+ "begin": 1992,
+ "end": 2051,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 2046,
+ "end": 2051,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2046,
+ "end": 2051,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2046,
+ "end": 2051,
+ "name": "REVERT"
+ },
+ {
+ "begin": 1992,
+ "end": 2051,
+ "name": "tag",
+ "value": "161"
+ },
+ {
+ "begin": 1992,
+ "end": 2051,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3377,
+ "end": 3390,
+ "name": "DUP5"
+ },
+ {
+ "begin": 1185,
+ "end": 1211,
+ "name": "PUSH [tag]",
+ "value": "163"
+ },
+ {
+ "begin": 1197,
+ "end": 1210,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1185,
+ "end": 1196,
+ "name": "PUSH [tag]",
+ "value": "71"
+ },
+ {
+ "begin": 1185,
+ "end": 1211,
+ "name": "JUMP",
+ "value": "[in]"
+ },
+ {
+ "begin": 1185,
+ "end": 1211,
+ "name": "tag",
+ "value": "163"
+ },
+ {
+ "begin": 1185,
+ "end": 1211,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1184,
+ "end": 1211,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1176,
+ "end": 1212,
+ "name": "PUSH [tag]",
+ "value": "164"
+ },
+ {
+ "begin": 1176,
+ "end": 1212,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1176,
+ "end": 1212,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1176,
+ "end": 1212,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1176,
+ "end": 1212,
+ "name": "REVERT"
+ },
+ {
+ "begin": 1176,
+ "end": 1212,
+ "name": "tag",
+ "value": "164"
+ },
+ {
+ "begin": 1176,
+ "end": 1212,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3449,
+ "end": 3454,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3406,
+ "end": 3434,
+ "name": "DUP7"
+ },
+ {
+ "begin": 3406,
+ "end": 3434,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3406,
+ "end": 3434,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3406,
+ "end": 3419,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 3406,
+ "end": 3434,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 3406,
+ "end": 3434,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3406,
+ "end": 3434,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3406,
+ "end": 3434,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3406,
+ "end": 3434,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 3406,
+ "end": 3434,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3406,
+ "end": 3434,
+ "name": "DUP4"
+ },
+ {
+ "begin": 3406,
+ "end": 3434,
+ "name": "SHA3"
+ },
+ {
+ "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": 3435,
+ "end": 3445,
+ "name": "CALLER"
+ },
+ {
+ "begin": 3406,
+ "end": 3446,
+ "name": "AND"
+ },
+ {
+ "begin": 3406,
+ "end": 3446,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3406,
+ "end": 3446,
+ "name": "DUP6"
+ },
+ {
+ "begin": 3406,
+ "end": 3446,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3406,
+ "end": 3446,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 3406,
+ "end": 3446,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3406,
+ "end": 3446,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3406,
+ "end": 3446,
+ "name": "DUP4"
+ },
+ {
+ "begin": 3406,
+ "end": 3446,
+ "name": "SHA3"
+ },
+ {
+ "begin": 3406,
+ "end": 3454,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3406,
+ "end": 3454,
+ "name": "SLOAD"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 3406,
+ "end": 3454,
+ "name": "AND"
+ },
+ {
+ "begin": 3406,
+ "end": 3454,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3406,
+ "end": 3454,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 3464,
+ "end": 3501,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 3420,
+ "end": 3433,
+ "name": "DUP9"
+ },
+ {
+ "begin": 3420,
+ "end": 3433,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 3464,
+ "end": 3501,
+ "name": "PUSH",
+ "value": "F6A317157440607F36269043EB55F1287A5A19BA2216AFEAB88CD46CBCFB88E9"
+ },
+ {
+ "begin": 3464,
+ "end": 3501,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3464,
+ "end": 3501,
+ "name": "LOG3"
+ },
+ {
+ "begin": 1222,
+ "end": 1223,
+ "name": "tag",
+ "value": "165"
+ },
+ {
+ "begin": 1222,
+ "end": 1223,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2061,
+ "end": 2062,
+ "name": "tag",
+ "value": "162"
+ },
+ {
+ "begin": 2061,
+ "end": 2062,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2061,
+ "end": 2062,
+ "name": "POP"
+ },
+ {
+ "begin": 1778,
+ "end": 1779,
+ "name": "tag",
+ "value": "160"
+ },
+ {
+ "begin": 1778,
+ "end": 1779,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1778,
+ "end": 1779,
+ "name": "POP"
+ },
+ {
+ "begin": 1483,
+ "end": 1484,
+ "name": "tag",
+ "value": "158"
+ },
+ {
+ "begin": 1483,
+ "end": 1484,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1483,
+ "end": 1484,
+ "name": "POP"
+ },
+ {
+ "begin": 1483,
+ "end": 1484,
+ "name": "POP"
+ },
+ {
+ "begin": 3176,
+ "end": 3508,
+ "name": "tag",
+ "value": "156"
+ },
+ {
+ "begin": 3176,
+ "end": 3508,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3176,
+ "end": 3508,
+ "name": "POP"
+ },
+ {
+ "begin": 3176,
+ "end": 3508,
+ "name": "POP"
+ },
+ {
+ "begin": 3176,
+ "end": 3508,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "tag",
+ "value": "47"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "PUSH",
+ "value": "2"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "DUP2"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "SHA3"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "AND"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "DUP2"
+ },
+ {
+ "begin": 910,
+ "end": 950,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "tag",
+ "value": "50"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "DUP2"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "DUP4"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "DUP1"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "DUP5"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "SHA3"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "DUP3"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "SHA3"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "AND"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "DUP2"
+ },
+ {
+ "begin": 840,
+ "end": 904,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 3320,
+ "end": 3893,
+ "name": "tag",
+ "value": "53"
+ },
+ {
+ "begin": 3320,
+ "end": 3893,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3553,
+ "end": 3575,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "SHA3"
+ },
+ {
+ "begin": 1996,
+ "end": 2032,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 1996,
+ "end": 2032,
+ "name": "ADD"
+ },
+ {
+ "begin": 1996,
+ "end": 2032,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 3425,
+ "end": 3438,
+ "name": "DUP3"
+ },
+ {
+ "begin": 3425,
+ "end": 3438,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1996,
+ "end": 2032,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": 1996,
+ "end": 2032,
+ "name": "AND"
+ },
+ {
+ "begin": 1992,
+ "end": 2051,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1992,
+ "end": 2051,
+ "name": "PUSH [tag]",
+ "value": "167"
+ },
+ {
+ "begin": 1992,
+ "end": 2051,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 2046,
+ "end": 2051,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2046,
+ "end": 2051,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2046,
+ "end": 2051,
+ "name": "REVERT"
+ },
+ {
+ "begin": 1992,
+ "end": 2051,
+ "name": "tag",
+ "value": "167"
+ },
+ {
+ "begin": 1992,
+ "end": 2051,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3463,
+ "end": 3476,
+ "name": "DUP3"
+ },
+ {
+ "begin": 1298,
+ "end": 1324,
+ "name": "PUSH [tag]",
+ "value": "169"
+ },
+ {
+ "begin": 1310,
+ "end": 1323,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1298,
+ "end": 1309,
+ "name": "PUSH [tag]",
+ "value": "71"
+ },
+ {
+ "begin": 1298,
+ "end": 1324,
+ "name": "JUMP",
+ "value": "[in]"
+ },
+ {
+ "begin": 1298,
+ "end": 1324,
+ "name": "tag",
+ "value": "169"
+ },
+ {
+ "begin": 1298,
+ "end": 1324,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1290,
+ "end": 1325,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1290,
+ "end": 1325,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1290,
+ "end": 1325,
+ "name": "PUSH [tag]",
+ "value": "170"
+ },
+ {
+ "begin": 1290,
+ "end": 1325,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1290,
+ "end": 1325,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1290,
+ "end": 1325,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1290,
+ "end": 1325,
+ "name": "REVERT"
+ },
+ {
+ "begin": 1290,
+ "end": 1325,
+ "name": "tag",
+ "value": "170"
+ },
+ {
+ "begin": 1290,
+ "end": 1325,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1418,
+ "end": 1440,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1443,
+ "end": 1470,
+ "name": "DUP5"
+ },
+ {
+ "begin": 1443,
+ "end": 1470,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1443,
+ "end": 1470,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1443,
+ "end": 1470,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1443,
+ "end": 1470,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1443,
+ "end": 1470,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1443,
+ "end": 1470,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1443,
+ "end": 1470,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 1443,
+ "end": 1470,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1443,
+ "end": 1470,
+ "name": "DUP4"
+ },
+ {
+ "begin": 1443,
+ "end": 1470,
+ "name": "SHA3"
+ },
+ {
+ "begin": 1511,
+ "end": 1525,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1511,
+ "end": 1525,
+ "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": 1511,
+ "end": 1525,
+ "name": "AND"
+ },
+ {
+ "begin": 1488,
+ "end": 1526,
+ "name": "DUP5"
+ },
+ {
+ "begin": 1488,
+ "end": 1526,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1488,
+ "end": 1510,
+ "name": "PUSH",
+ "value": "8"
+ },
+ {
+ "begin": 1488,
+ "end": 1526,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1488,
+ "end": 1526,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 1488,
+ "end": 1526,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1488,
+ "end": 1526,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1488,
+ "end": 1526,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 1488,
+ "end": 1526,
+ "name": "SHA3"
+ },
+ {
+ "begin": 1488,
+ "end": 1526,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 3524,
+ "end": 3537,
+ "name": "DUP6"
+ },
+ {
+ "begin": 3524,
+ "end": 3537,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 1443,
+ "end": 1470,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1488,
+ "end": 1526,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": 1488,
+ "end": 1526,
+ "name": "AND"
+ },
+ {
+ "begin": 1480,
+ "end": 1527,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1480,
+ "end": 1527,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1480,
+ "end": 1527,
+ "name": "PUSH [tag]",
+ "value": "172"
+ },
+ {
+ "begin": 1480,
+ "end": 1527,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1480,
+ "end": 1527,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1480,
+ "end": 1527,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1480,
+ "end": 1527,
+ "name": "REVERT"
+ },
+ {
+ "begin": 1480,
+ "end": 1527,
+ "name": "tag",
+ "value": "172"
+ },
+ {
+ "begin": 1480,
+ "end": 1527,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "PUSH",
+ "value": "72656D6F7665417574686F72697A6564416464726573734174496E6465782861"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "MSTORE"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "88"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "2"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "EXP"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "6464726573732C75696E7432353629"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "MUL"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "DUP4"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "ADD"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "DUP3"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "PUSH",
+ "value": "2F"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "SUB"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "ADD"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "DUP3"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "SHA3"
+ },
+ {
+ "begin": 1556,
+ "end": 1563,
+ "name": "PUSH",
+ "value": "2"
+ },
+ {
+ "begin": 1556,
+ "end": 1563,
+ "name": "DUP6"
+ },
+ {
+ "begin": 1556,
+ "end": 1563,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1556,
+ "end": 1563,
+ "name": "ADD"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "AND"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "PUSH",
+ "value": "100"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "MUL"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "ADD"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "AND"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DIV"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "PUSH",
+ "value": "1F"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "ADD"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP5"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DIV"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP5"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "MUL"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP6"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "ADD"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP5"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "ADD"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SWAP6"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP5"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP5"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "MSTORE"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "E0"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "2"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "EXP"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "SUB"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 1545,
+ "end": 1614,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1545,
+ "end": 1614,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 1545,
+ "end": 1614,
+ "name": "AND"
+ },
+ {
+ "begin": 1545,
+ "end": 1614,
+ "name": "SWAP4"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "PUSH [tag]",
+ "value": "173"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SWAP4"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP4"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "ADD"
+ },
+ {
+ "begin": 1556,
+ "end": 1563,
+ "name": "DUP3"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP3"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "PUSH [tag]",
+ "value": "174"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "PUSH",
+ "value": "1F"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "LT"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "PUSH [tag]",
+ "value": "175"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "PUSH",
+ "value": "100"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP4"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DIV"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "MUL"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP4"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "ADD"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "PUSH [tag]",
+ "value": "174"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "JUMP"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "tag",
+ "value": "175"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP3"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "ADD"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SHA3"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "tag",
+ "value": "176"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "ADD"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "ADD"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP4"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "GT"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "PUSH [tag]",
+ "value": "176"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP3"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SUB"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "PUSH",
+ "value": "1F"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "AND"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP3"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "ADD"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "tag",
+ "value": "174"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "POP"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "POP"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "POP"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "POP"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "POP"
+ },
+ {
+ "begin": 1565,
+ "end": 1566,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1545,
+ "end": 1555,
+ "name": "PUSH [tag]",
+ "value": "177"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "JUMP",
+ "value": "[in]"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "tag",
+ "value": "173"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "E0"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "2"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "EXP"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "SUB"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 1545,
+ "end": 1614,
+ "name": "AND"
+ },
+ {
+ "begin": 1545,
+ "end": 1614,
+ "name": "EQ"
+ },
+ {
+ "begin": 1537,
+ "end": 1615,
+ "name": "PUSH [tag]",
+ "value": "178"
+ },
+ {
+ "begin": 1537,
+ "end": 1615,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1537,
+ "end": 1615,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1537,
+ "end": 1615,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1537,
+ "end": 1615,
+ "name": "REVERT"
+ },
+ {
+ "begin": 1537,
+ "end": 1615,
+ "name": "tag",
+ "value": "178"
+ },
+ {
+ "begin": 1537,
+ "end": 1615,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3578,
+ "end": 3590,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3578,
+ "end": 3605,
+ "name": "DUP7"
+ },
+ {
+ "begin": 3578,
+ "end": 3605,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3578,
+ "end": 3605,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3578,
+ "end": 3605,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 3578,
+ "end": 3605,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3578,
+ "end": 3605,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3578,
+ "end": 3605,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3578,
+ "end": 3605,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 3578,
+ "end": 3605,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3578,
+ "end": 3605,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3578,
+ "end": 3605,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3578,
+ "end": 3605,
+ "name": "SHA3"
+ },
+ {
+ "begin": 3615,
+ "end": 3626,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 3615,
+ "end": 3626,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3615,
+ "end": 3626,
+ "name": "ADD"
+ },
+ {
+ "begin": 3615,
+ "end": 3633,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3615,
+ "end": 3633,
+ "name": "SLOAD"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 3615,
+ "end": 3633,
+ "name": "AND"
+ },
+ {
+ "begin": 3629,
+ "end": 3633,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 3615,
+ "end": 3633,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3615,
+ "end": 3633,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3615,
+ "end": 3633,
+ "name": "OR"
+ },
+ {
+ "begin": 3615,
+ "end": 3633,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3615,
+ "end": 3633,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3615,
+ "end": 3633,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 3701,
+ "end": 3715,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3701,
+ "end": 3715,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 3727,
+ "end": 3735,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3727,
+ "end": 3735,
+ "name": "DUP4"
+ },
+ {
+ "begin": 3727,
+ "end": 3735,
+ "name": "ADD"
+ },
+ {
+ "begin": 3727,
+ "end": 3735,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SWAP4"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 3737,
+ "end": 3744,
+ "name": "PUSH",
+ "value": "2"
+ },
+ {
+ "begin": 3737,
+ "end": 3744,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3737,
+ "end": 3744,
+ "name": "DUP6"
+ },
+ {
+ "begin": 3737,
+ "end": 3744,
+ "name": "ADD"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 3578,
+ "end": 3605,
+ "name": "SWAP6"
+ },
+ {
+ "begin": 3578,
+ "end": 3605,
+ "name": "SWAP12"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "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": 3701,
+ "end": 3715,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3701,
+ "end": 3715,
+ "name": "SWAP4"
+ },
+ {
+ "begin": 3701,
+ "end": 3715,
+ "name": "AND"
+ },
+ {
+ "begin": 3701,
+ "end": 3715,
+ "name": "SWAP6"
+ },
+ {
+ "begin": 3727,
+ "end": 3735,
+ "name": "SWAP5"
+ },
+ {
+ "begin": 3737,
+ "end": 3744,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 3737,
+ "end": 3744,
+ "name": "SWAP4"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "DUP4"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 3737,
+ "end": 3744,
+ "name": "DUP6"
+ },
+ {
+ "begin": 3737,
+ "end": 3744,
+ "name": "SWAP3"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "DUP4"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "AND"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3615,
+ "end": 3633,
+ "name": "PUSH",
+ "value": "100"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "MUL"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "ADD"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "AND"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "DIV"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "PUSH [tag]",
+ "value": "180"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "PUSH",
+ "value": "1F"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "LT"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "PUSH [tag]",
+ "value": "181"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "PUSH",
+ "value": "100"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "DUP4"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "DIV"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "MUL"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "DUP4"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "ADD"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "PUSH [tag]",
+ "value": "180"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "JUMP"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "tag",
+ "value": "181"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "DUP3"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "ADD"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SHA3"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "tag",
+ "value": "182"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "ADD"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "ADD"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "DUP4"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "GT"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "PUSH [tag]",
+ "value": "182"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "DUP3"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SUB"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "PUSH",
+ "value": "1F"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "AND"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "DUP3"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "ADD"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "tag",
+ "value": "180"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "POP"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "POP"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "POP"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "POP"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "DUP4"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SUB"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "DUP6"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "DUP8"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "PUSH",
+ "value": "8502"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "GAS"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SUB"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "CALL"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "POP"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "POP"
+ },
+ {
+ "begin": 3701,
+ "end": 3745,
+ "name": "POP"
+ },
+ {
+ "begin": 3697,
+ "end": 3887,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3697,
+ "end": 3887,
+ "name": "PUSH [tag]",
+ "value": "183"
+ },
+ {
+ "begin": 3697,
+ "end": 3887,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 3759,
+ "end": 3783,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 3759,
+ "end": 3783,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 3769,
+ "end": 3782,
+ "name": "DUP7"
+ },
+ {
+ "begin": 3769,
+ "end": 3782,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3759,
+ "end": 3783,
+ "name": "PUSH",
+ "value": "33E13ECB54C3076D8E8BB8C2881800A4D972B792045FFAE98FDF46DF365FED75"
+ },
+ {
+ "begin": 3759,
+ "end": 3783,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3759,
+ "end": 3783,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3759,
+ "end": 3783,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3759,
+ "end": 3783,
+ "name": "LOG2"
+ },
+ {
+ "begin": 3697,
+ "end": 3887,
+ "name": "PUSH [tag]",
+ "value": "165"
+ },
+ {
+ "begin": 3697,
+ "end": 3887,
+ "name": "JUMP"
+ },
+ {
+ "begin": 3697,
+ "end": 3887,
+ "name": "tag",
+ "value": "183"
+ },
+ {
+ "begin": 3697,
+ "end": 3887,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3812,
+ "end": 3843,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 3812,
+ "end": 3843,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 3829,
+ "end": 3842,
+ "name": "DUP7"
+ },
+ {
+ "begin": 3829,
+ "end": 3842,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3812,
+ "end": 3843,
+ "name": "PUSH",
+ "value": "526441BB6C1ABA3C9A4A6CA1D6545DA9C2333C8C48343EF398EB858D72B79236"
+ },
+ {
+ "begin": 3812,
+ "end": 3843,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3812,
+ "end": 3843,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3812,
+ "end": 3843,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3812,
+ "end": 3843,
+ "name": "LOG2"
+ },
+ {
+ "begin": 3857,
+ "end": 3868,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 3857,
+ "end": 3868,
+ "name": "DUP6"
+ },
+ {
+ "begin": 3857,
+ "end": 3868,
+ "name": "ADD"
+ },
+ {
+ "begin": 3857,
+ "end": 3876,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3857,
+ "end": 3876,
+ "name": "SLOAD"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 3857,
+ "end": 3876,
+ "name": "AND"
+ },
+ {
+ "begin": 3857,
+ "end": 3876,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3857,
+ "end": 3876,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 3697,
+ "end": 3887,
+ "name": "tag",
+ "value": "184"
+ },
+ {
+ "begin": 3697,
+ "end": 3887,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1625,
+ "end": 1626,
+ "name": "tag",
+ "value": "179"
+ },
+ {
+ "begin": 1625,
+ "end": 1626,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1335,
+ "end": 1336,
+ "name": "tag",
+ "value": "171"
+ },
+ {
+ "begin": 1335,
+ "end": 1336,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1335,
+ "end": 1336,
+ "name": "POP"
+ },
+ {
+ "begin": 1335,
+ "end": 1336,
+ "name": "POP"
+ },
+ {
+ "begin": 2061,
+ "end": 2062,
+ "name": "tag",
+ "value": "168"
+ },
+ {
+ "begin": 2061,
+ "end": 2062,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2061,
+ "end": 2062,
+ "name": "POP"
+ },
+ {
+ "begin": 3320,
+ "end": 3893,
+ "name": "tag",
+ "value": "166"
+ },
+ {
+ "begin": 3320,
+ "end": 3893,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3320,
+ "end": 3893,
+ "name": "POP"
+ },
+ {
+ "begin": 3320,
+ "end": 3893,
+ "name": "POP"
+ },
+ {
+ "begin": 3320,
+ "end": 3893,
+ "name": "POP"
+ },
+ {
+ "begin": 3320,
+ "end": 3893,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "tag",
+ "value": "56"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "PUSH",
+ "value": "6"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1029,
+ "end": 1058,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "tag",
+ "value": "59"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 9263,
+ "end": 9273,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 9263,
+ "end": 9273,
+ "name": "DUP1"
+ },
+ {
+ "begin": 9289,
+ "end": 9468,
+ "name": "tag",
+ "value": "186"
+ },
+ {
+ "begin": 9289,
+ "end": 9468,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 9306,
+ "end": 9322,
+ "name": "PUSH",
+ "value": "5"
+ },
+ {
+ "begin": 9306,
+ "end": 9322,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 9304,
+ "end": 9305,
+ "name": "DUP2"
+ },
+ {
+ "begin": 9304,
+ "end": 9322,
+ "name": "LT"
+ },
+ {
+ "begin": 9289,
+ "end": 9468,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 9289,
+ "end": 9468,
+ "name": "PUSH [tag]",
+ "value": "187"
+ },
+ {
+ "begin": 9289,
+ "end": 9468,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 9348,
+ "end": 9355,
+ "name": "DUP4"
+ },
+ {
+ "begin": 9348,
+ "end": 9384,
+ "name": "DUP1"
+ },
+ {
+ "begin": 9348,
+ "end": 9384,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 9348,
+ "end": 9384,
+ "name": "PUSH [tag]",
+ "value": "189"
+ },
+ {
+ "begin": 9348,
+ "end": 9384,
+ "name": "JUMPI"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 9360,
+ "end": 9372,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 9360,
+ "end": 9375,
+ "name": "DUP2"
+ },
+ {
+ "begin": 9360,
+ "end": 9375,
+ "name": "DUP2"
+ },
+ {
+ "begin": 9360,
+ "end": 9375,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 9360,
+ "end": 9375,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 9360,
+ "end": 9375,
+ "name": "DUP2"
+ },
+ {
+ "begin": 9360,
+ "end": 9375,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 9360,
+ "end": 9375,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 9360,
+ "end": 9375,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 9360,
+ "end": 9375,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 9360,
+ "end": 9375,
+ "name": "SHA3"
+ },
+ {
+ "begin": 9360,
+ "end": 9384,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 9360,
+ "end": 9384,
+ "name": "ADD"
+ },
+ {
+ "begin": 9360,
+ "end": 9384,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 9360,
+ "end": 9384,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": 9360,
+ "end": 9384,
+ "name": "AND"
+ },
+ {
+ "begin": 9359,
+ "end": 9384,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 9348,
+ "end": 9384,
+ "name": "tag",
+ "value": "189"
+ },
+ {
+ "begin": 9348,
+ "end": 9384,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 9348,
+ "end": 9440,
+ "name": "DUP1"
+ },
+ {
+ "begin": 9348,
+ "end": 9440,
+ "name": "PUSH [tag]",
+ "value": "191"
+ },
+ {
+ "begin": 9348,
+ "end": 9440,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 9348,
+ "end": 9440,
+ "name": "POP"
+ },
+ {
+ "begin": 9404,
+ "end": 9412,
+ "name": "DUP3"
+ },
+ {
+ "begin": 9404,
+ "end": 9440,
+ "name": "DUP1"
+ },
+ {
+ "begin": 9404,
+ "end": 9440,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 9404,
+ "end": 9440,
+ "name": "PUSH [tag]",
+ "value": "191"
+ },
+ {
+ "begin": 9404,
+ "end": 9440,
+ "name": "JUMPI"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 9416,
+ "end": 9428,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 9416,
+ "end": 9431,
+ "name": "DUP2"
+ },
+ {
+ "begin": 9416,
+ "end": 9431,
+ "name": "DUP2"
+ },
+ {
+ "begin": 9416,
+ "end": 9431,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 9416,
+ "end": 9431,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 9416,
+ "end": 9431,
+ "name": "DUP2"
+ },
+ {
+ "begin": 9416,
+ "end": 9431,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 9416,
+ "end": 9431,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 9416,
+ "end": 9431,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 9416,
+ "end": 9431,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 9416,
+ "end": 9431,
+ "name": "SHA3"
+ },
+ {
+ "begin": 9416,
+ "end": 9440,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 9416,
+ "end": 9440,
+ "name": "ADD"
+ },
+ {
+ "begin": 9416,
+ "end": 9440,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 9416,
+ "end": 9440,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": 9416,
+ "end": 9440,
+ "name": "AND"
+ },
+ {
+ "begin": 9404,
+ "end": 9440,
+ "name": "tag",
+ "value": "191"
+ },
+ {
+ "begin": 9404,
+ "end": 9440,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 9348,
+ "end": 9440,
+ "name": "tag",
+ "value": "190"
+ },
+ {
+ "begin": 9348,
+ "end": 9440,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 9341,
+ "end": 9468,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 9341,
+ "end": 9468,
+ "name": "PUSH [tag]",
+ "value": "192"
+ },
+ {
+ "begin": 9341,
+ "end": 9468,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 9467,
+ "end": 9468,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 9458,
+ "end": 9468,
+ "name": "DUP3"
+ },
+ {
+ "begin": 9458,
+ "end": 9468,
+ "name": "ADD"
+ },
+ {
+ "begin": 9458,
+ "end": 9468,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 9458,
+ "end": 9468,
+ "name": "POP"
+ },
+ {
+ "begin": 9341,
+ "end": 9468,
+ "name": "tag",
+ "value": "192"
+ },
+ {
+ "begin": 9341,
+ "end": 9468,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 9289,
+ "end": 9468,
+ "name": "tag",
+ "value": "188"
+ },
+ {
+ "begin": 9289,
+ "end": 9468,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 9324,
+ "end": 9327,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 9324,
+ "end": 9327,
+ "name": "ADD"
+ },
+ {
+ "begin": 9289,
+ "end": 9468,
+ "name": "PUSH [tag]",
+ "value": "186"
+ },
+ {
+ "begin": 9289,
+ "end": 9468,
+ "name": "JUMP"
+ },
+ {
+ "begin": 9289,
+ "end": 9468,
+ "name": "tag",
+ "value": "187"
+ },
+ {
+ "begin": 9289,
+ "end": 9468,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "tag",
+ "value": "185"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "POP"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "POP"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "POP"
+ },
+ {
+ "begin": 9156,
+ "end": 9475,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "tag",
+ "value": "62"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1228,
+ "end": 1232,
+ "name": "ADDRESS"
+ },
+ {
+ "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": 1206,
+ "end": 1233,
+ "name": "AND"
+ },
+ {
+ "begin": 1206,
+ "end": 1216,
+ "name": "CALLER"
+ },
+ {
+ "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": 1206,
+ "end": 1233,
+ "name": "AND"
+ },
+ {
+ "begin": 1206,
+ "end": 1233,
+ "name": "EQ"
+ },
+ {
+ "begin": 1206,
+ "end": 1233,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "PUSH [tag]",
+ "value": "194"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1247,
+ "end": 1252,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1247,
+ "end": 1252,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1247,
+ "end": 1252,
+ "name": "REVERT"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "tag",
+ "value": "194"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3020,
+ "end": 3038,
+ "name": "DUP2"
+ },
+ {
+ "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": 2124,
+ "end": 2137,
+ "name": "DUP2"
+ },
+ {
+ "begin": 2124,
+ "end": 2137,
+ "name": "AND"
+ },
+ {
+ "begin": 2124,
+ "end": 2137,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2120,
+ "end": 2156,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2120,
+ "end": 2156,
+ "name": "PUSH [tag]",
+ "value": "196"
+ },
+ {
+ "begin": 2120,
+ "end": 2156,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 2151,
+ "end": 2156,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2151,
+ "end": 2156,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2151,
+ "end": 2156,
+ "name": "REVERT"
+ },
+ {
+ "begin": 2120,
+ "end": 2156,
+ "name": "tag",
+ "value": "196"
+ },
+ {
+ "begin": 2120,
+ "end": 2156,
+ "name": "JUMPDEST"
+ },
+ {
+ "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": 3054,
+ "end": 3096,
+ "name": "DUP4"
+ },
+ {
+ "begin": 3054,
+ "end": 3096,
+ "name": "AND"
+ },
+ {
+ "begin": 3054,
+ "end": 3096,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3054,
+ "end": 3096,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3054,
+ "end": 3096,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3054,
+ "end": 3096,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3054,
+ "end": 3076,
+ "name": "PUSH",
+ "value": "8"
+ },
+ {
+ "begin": 3054,
+ "end": 3096,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 3054,
+ "end": 3096,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3054,
+ "end": 3096,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3054,
+ "end": 3096,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3054,
+ "end": 3096,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 3054,
+ "end": 3096,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3054,
+ "end": 3096,
+ "name": "DUP3"
+ },
+ {
+ "begin": 3054,
+ "end": 3096,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3054,
+ "end": 3096,
+ "name": "SHA3"
+ },
+ {
+ "begin": 3054,
+ "end": 3111,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3054,
+ "end": 3111,
+ "name": "SLOAD"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 3054,
+ "end": 3111,
+ "name": "AND"
+ },
+ {
+ "begin": 3054,
+ "end": 3111,
+ "name": "DUP7"
+ },
+ {
+ "begin": 3054,
+ "end": 3111,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3054,
+ "end": 3111,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3054,
+ "end": 3111,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3054,
+ "end": 3111,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3054,
+ "end": 3111,
+ "name": "OR"
+ },
+ {
+ "begin": 3054,
+ "end": 3111,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3054,
+ "end": 3111,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3054,
+ "end": 3111,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 3121,
+ "end": 3177,
+ "name": "DUP3"
+ },
+ {
+ "begin": 3121,
+ "end": 3177,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 3121,
+ "end": 3177,
+ "name": "SWAP4"
+ },
+ {
+ "begin": 3121,
+ "end": 3177,
+ "name": "DUP5"
+ },
+ {
+ "begin": 3121,
+ "end": 3177,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3121,
+ "end": 3177,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3121,
+ "end": 3177,
+ "name": "DUP4"
+ },
+ {
+ "begin": 3121,
+ "end": 3177,
+ "name": "ADD"
+ },
+ {
+ "begin": 3121,
+ "end": 3177,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3121,
+ "end": 3177,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3121,
+ "end": 3177,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 3121,
+ "end": 3177,
+ "name": "PUSH",
+ "value": "DAEF8FF7DC66C5E34EB9C338AAB679D9F427F89868D9228494455A4D982EB2B0"
+ },
+ {
+ "begin": 3121,
+ "end": 3177,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 3121,
+ "end": 3177,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3121,
+ "end": 3177,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3121,
+ "end": 3177,
+ "name": "SUB"
+ },
+ {
+ "begin": 3121,
+ "end": 3177,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3121,
+ "end": 3177,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3121,
+ "end": 3177,
+ "name": "ADD"
+ },
+ {
+ "begin": 3121,
+ "end": 3177,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3121,
+ "end": 3177,
+ "name": "LOG1"
+ },
+ {
+ "begin": 2166,
+ "end": 2167,
+ "name": "tag",
+ "value": "197"
+ },
+ {
+ "begin": 2166,
+ "end": 2167,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1262,
+ "end": 1263,
+ "name": "tag",
+ "value": "195"
+ },
+ {
+ "begin": 1262,
+ "end": 1263,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1262,
+ "end": 1263,
+ "name": "POP"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "tag",
+ "value": "193"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "POP"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "POP"
+ },
+ {
+ "begin": 2895,
+ "end": 3184,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 3331,
+ "end": 3608,
+ "name": "tag",
+ "value": "65"
+ },
+ {
+ "begin": 3331,
+ "end": 3608,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1228,
+ "end": 1232,
+ "name": "ADDRESS"
+ },
+ {
+ "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": 1206,
+ "end": 1233,
+ "name": "AND"
+ },
+ {
+ "begin": 1206,
+ "end": 1216,
+ "name": "CALLER"
+ },
+ {
+ "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": 1206,
+ "end": 1233,
+ "name": "AND"
+ },
+ {
+ "begin": 1206,
+ "end": 1233,
+ "name": "EQ"
+ },
+ {
+ "begin": 1206,
+ "end": 1233,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "PUSH [tag]",
+ "value": "199"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1247,
+ "end": 1252,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1247,
+ "end": 1252,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1247,
+ "end": 1252,
+ "name": "REVERT"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "tag",
+ "value": "199"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "JUMPDEST"
+ },
+ {
+ "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": 1332,
+ "end": 1346,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1332,
+ "end": 1346,
+ "name": "AND"
+ },
+ {
+ "begin": 1332,
+ "end": 1346,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1332,
+ "end": 1346,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1332,
+ "end": 1346,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1332,
+ "end": 1346,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1332,
+ "end": 1339,
+ "name": "PUSH",
+ "value": "2"
+ },
+ {
+ "begin": 1332,
+ "end": 1346,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1332,
+ "end": 1346,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1332,
+ "end": 1346,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 1332,
+ "end": 1346,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1332,
+ "end": 1346,
+ "name": "SHA3"
+ },
+ {
+ "begin": 1332,
+ "end": 1346,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 3424,
+ "end": 3429,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3424,
+ "end": 3429,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1332,
+ "end": 1346,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": 1332,
+ "end": 1346,
+ "name": "AND"
+ },
+ {
+ "begin": 1328,
+ "end": 1365,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1328,
+ "end": 1365,
+ "name": "PUSH [tag]",
+ "value": "201"
+ },
+ {
+ "begin": 1328,
+ "end": 1365,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1360,
+ "end": 1365,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1360,
+ "end": 1365,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1360,
+ "end": 1365,
+ "name": "REVERT"
+ },
+ {
+ "begin": 1328,
+ "end": 1365,
+ "name": "tag",
+ "value": "201"
+ },
+ {
+ "begin": 1328,
+ "end": 1365,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3447,
+ "end": 3452,
+ "name": "DUP2"
+ },
+ {
+ "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": 2124,
+ "end": 2137,
+ "name": "DUP2"
+ },
+ {
+ "begin": 2124,
+ "end": 2137,
+ "name": "AND"
+ },
+ {
+ "begin": 2124,
+ "end": 2137,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2120,
+ "end": 2156,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2120,
+ "end": 2156,
+ "name": "PUSH [tag]",
+ "value": "203"
+ },
+ {
+ "begin": 2120,
+ "end": 2156,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 2151,
+ "end": 2156,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2151,
+ "end": 2156,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2151,
+ "end": 2156,
+ "name": "REVERT"
+ },
+ {
+ "begin": 2120,
+ "end": 2156,
+ "name": "tag",
+ "value": "203"
+ },
+ {
+ "begin": 2120,
+ "end": 2156,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3479,
+ "end": 3485,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 3479,
+ "end": 3492,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3479,
+ "end": 3492,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 3479,
+ "end": 3492,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3479,
+ "end": 3492,
+ "name": "POP"
+ },
+ {
+ "begin": 3495,
+ "end": 3496,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 3479,
+ "end": 3496,
+ "name": "ADD"
+ },
+ {
+ "begin": 3498,
+ "end": 3506,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 3498,
+ "end": 3506,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 276,
+ "end": 278,
+ "name": "PUSH",
+ "value": "32"
+ },
+ {
+ "begin": 2256,
+ "end": 2266,
+ "name": "DUP3"
+ },
+ {
+ "begin": 2256,
+ "end": 2284,
+ "name": "GT"
+ },
+ {
+ "begin": 2256,
+ "end": 2322,
+ "name": "DUP1"
+ },
+ {
+ "begin": 2256,
+ "end": 2322,
+ "name": "PUSH [tag]",
+ "value": "205"
+ },
+ {
+ "begin": 2256,
+ "end": 2322,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 2256,
+ "end": 2322,
+ "name": "POP"
+ },
+ {
+ "begin": 2312,
+ "end": 2322,
+ "name": "DUP2"
+ },
+ {
+ "begin": 2300,
+ "end": 2309,
+ "name": "DUP2"
+ },
+ {
+ "begin": 2300,
+ "end": 2322,
+ "name": "GT"
+ },
+ {
+ "begin": 2256,
+ "end": 2322,
+ "name": "tag",
+ "value": "205"
+ },
+ {
+ "begin": 2256,
+ "end": 2322,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2256,
+ "end": 2352,
+ "name": "DUP1"
+ },
+ {
+ "begin": 2256,
+ "end": 2352,
+ "name": "PUSH [tag]",
+ "value": "206"
+ },
+ {
+ "begin": 2256,
+ "end": 2352,
+ "name": "JUMPI"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 2338,
+ "end": 2352,
+ "name": "DUP1"
+ },
+ {
+ "begin": 2338,
+ "end": 2352,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2256,
+ "end": 2352,
+ "name": "tag",
+ "value": "206"
+ },
+ {
+ "begin": 2256,
+ "end": 2352,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2256,
+ "end": 2383,
+ "name": "DUP1"
+ },
+ {
+ "begin": 2256,
+ "end": 2383,
+ "name": "PUSH [tag]",
+ "value": "207"
+ },
+ {
+ "begin": 2256,
+ "end": 2383,
+ "name": "JUMPI"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 2368,
+ "end": 2383,
+ "name": "DUP2"
+ },
+ {
+ "begin": 2368,
+ "end": 2383,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2256,
+ "end": 2383,
+ "name": "tag",
+ "value": "207"
+ },
+ {
+ "begin": 2256,
+ "end": 2383,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2249,
+ "end": 2402,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2249,
+ "end": 2402,
+ "name": "PUSH [tag]",
+ "value": "208"
+ },
+ {
+ "begin": 2249,
+ "end": 2402,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 2397,
+ "end": 2402,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2397,
+ "end": 2402,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2397,
+ "end": 2402,
+ "name": "REVERT"
+ },
+ {
+ "begin": 2249,
+ "end": 2402,
+ "name": "tag",
+ "value": "208"
+ },
+ {
+ "begin": 2249,
+ "end": 2402,
+ "name": "JUMPDEST"
+ },
+ {
+ "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": 3522,
+ "end": 3536,
+ "name": "DUP6"
+ },
+ {
+ "begin": 3522,
+ "end": 3536,
+ "name": "AND"
+ },
+ {
+ "begin": 3522,
+ "end": 3536,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3522,
+ "end": 3536,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3522,
+ "end": 3536,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3522,
+ "end": 3536,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3522,
+ "end": 3529,
+ "name": "PUSH",
+ "value": "2"
+ },
+ {
+ "begin": 3522,
+ "end": 3536,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 3522,
+ "end": 3536,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3522,
+ "end": 3536,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 3522,
+ "end": 3536,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3522,
+ "end": 3536,
+ "name": "SHA3"
+ },
+ {
+ "begin": 3522,
+ "end": 3543,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3522,
+ "end": 3543,
+ "name": "SLOAD"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 3522,
+ "end": 3543,
+ "name": "AND"
+ },
+ {
+ "begin": 3539,
+ "end": 3543,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 3522,
+ "end": 3543,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3522,
+ "end": 3543,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3522,
+ "end": 3543,
+ "name": "OR"
+ },
+ {
+ "begin": 3522,
+ "end": 3543,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3522,
+ "end": 3543,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3522,
+ "end": 3543,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 3553,
+ "end": 3559,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 3553,
+ "end": 3559,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3553,
+ "end": 3559,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "ADD"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "PUSH [tag]",
+ "value": "210"
+ },
+ {
+ "begin": 3553,
+ "end": 3559,
+ "name": "DUP4"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "DUP3"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "PUSH [tag]",
+ "value": "153"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "JUMP",
+ "value": "[in]"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "tag",
+ "value": "210"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "SHA3"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "ADD"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "tag",
+ "value": "212"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "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": 3553,
+ "end": 3571,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "DUP11"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "AND"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "PUSH",
+ "value": "100"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "SWAP4"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "SWAP4"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "EXP"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "DUP4"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "MUL"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "MUL"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "NOT"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "AND"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "OR"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 3581,
+ "end": 3601,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 3581,
+ "end": 3601,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3553,
+ "end": 3571,
+ "name": "SWAP2"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 3581,
+ "end": 3601,
+ "name": "PUSH",
+ "value": "F39E6E1EB0EDCF53C221607B54B00CD28F3196FED0A24994DC308B8F611B682D"
+ },
+ {
+ "begin": 3581,
+ "end": 3601,
+ "name": "SWAP1"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3581,
+ "end": 3601,
+ "name": "LOG2"
+ },
+ {
+ "begin": 2412,
+ "end": 2413,
+ "name": "tag",
+ "value": "209"
+ },
+ {
+ "begin": 2412,
+ "end": 2413,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2166,
+ "end": 2167,
+ "name": "tag",
+ "value": "204"
+ },
+ {
+ "begin": 2166,
+ "end": 2167,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2166,
+ "end": 2167,
+ "name": "POP"
+ },
+ {
+ "begin": 2166,
+ "end": 2167,
+ "name": "POP"
+ },
+ {
+ "begin": 1375,
+ "end": 1376,
+ "name": "tag",
+ "value": "202"
+ },
+ {
+ "begin": 1375,
+ "end": 1376,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1375,
+ "end": 1376,
+ "name": "POP"
+ },
+ {
+ "begin": 1262,
+ "end": 1263,
+ "name": "tag",
+ "value": "200"
+ },
+ {
+ "begin": 1262,
+ "end": 1263,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1262,
+ "end": 1263,
+ "name": "POP"
+ },
+ {
+ "begin": 3331,
+ "end": 3608,
+ "name": "tag",
+ "value": "198"
+ },
+ {
+ "begin": 3331,
+ "end": 3608,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3331,
+ "end": 3608,
+ "name": "POP"
+ },
+ {
+ "begin": 3331,
+ "end": 3608,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "tag",
+ "value": "68"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "PUSH",
+ "value": "72656D6F7665417574686F72697A6564416464726573734174496E6465782861"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "MSTORE"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "88"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "2"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "EXP"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "6464726573732C75696E7432353629"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "MUL"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "DUP3"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "ADD"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "SUB"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "PUSH",
+ "value": "2F"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "ADD"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "SHA3"
+ },
+ {
+ "begin": 1639,
+ "end": 1643,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1639,
+ "end": 1643,
+ "name": "SWAP1"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "E0"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "2"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "EXP"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "SUB"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 1666,
+ "end": 1732,
+ "name": "AND"
+ },
+ {
+ "begin": 1666,
+ "end": 1685,
+ "name": "PUSH [tag]",
+ "value": "214"
+ },
+ {
+ "begin": 1677,
+ "end": 1681,
+ "name": "DUP4"
+ },
+ {
+ "begin": 1639,
+ "end": 1643,
+ "name": "DUP4"
+ },
+ {
+ "begin": 1666,
+ "end": 1676,
+ "name": "PUSH [tag]",
+ "value": "177"
+ },
+ {
+ "begin": 1666,
+ "end": 1685,
+ "name": "JUMP",
+ "value": "[in]"
+ },
+ {
+ "begin": 1666,
+ "end": 1685,
+ "name": "tag",
+ "value": "214"
+ },
+ {
+ "begin": 1666,
+ "end": 1685,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "E0"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "2"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "EXP"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "SUB"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 1666,
+ "end": 1732,
+ "name": "AND"
+ },
+ {
+ "begin": 1666,
+ "end": 1732,
+ "name": "EQ"
+ },
+ {
+ "begin": 1666,
+ "end": 1732,
+ "name": "SWAP1"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "tag",
+ "value": "213"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "POP"
+ },
+ {
+ "begin": 1538,
+ "end": 1739,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "tag",
+ "value": "71"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 7414,
+ "end": 7418,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 7414,
+ "end": 7418,
+ "name": "DUP1"
+ },
+ {
+ "begin": 7414,
+ "end": 7418,
+ "name": "DUP1"
+ },
+ {
+ "begin": 7458,
+ "end": 7655,
+ "name": "tag",
+ "value": "216"
+ },
+ {
+ "begin": 7458,
+ "end": 7655,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 7475,
+ "end": 7481,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 7475,
+ "end": 7488,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 7473,
+ "end": 7488,
+ "name": "DUP2"
+ },
+ {
+ "begin": 7473,
+ "end": 7488,
+ "name": "LT"
+ },
+ {
+ "begin": 7458,
+ "end": 7655,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 7458,
+ "end": 7655,
+ "name": "PUSH [tag]",
+ "value": "217"
+ },
+ {
+ "begin": 7458,
+ "end": 7655,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 7513,
+ "end": 7541,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 7513,
+ "end": 7541,
+ "name": "DUP5"
+ },
+ {
+ "begin": 7513,
+ "end": 7541,
+ "name": "DUP2"
+ },
+ {
+ "begin": 7513,
+ "end": 7541,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 7513,
+ "end": 7526,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 7513,
+ "end": 7541,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 7513,
+ "end": 7541,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 7513,
+ "end": 7541,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 7513,
+ "end": 7541,
+ "name": "DUP2"
+ },
+ {
+ "begin": 7513,
+ "end": 7541,
+ "name": "SHA3"
+ },
+ {
+ "begin": 7542,
+ "end": 7548,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "DUP1"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 7513,
+ "end": 7541,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 7513,
+ "end": 7541,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 7513,
+ "end": 7541,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 7549,
+ "end": 7550,
+ "name": "DUP5"
+ },
+ {
+ "begin": 7549,
+ "end": 7550,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "DUP2"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "LT"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "PUSH [tag]",
+ "value": "219"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "INVALID"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "tag",
+ "value": "219"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "SHA3"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "ADD"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "tag",
+ "value": "220"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "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": 7542,
+ "end": 7551,
+ "name": "PUSH",
+ "value": "100"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "EXP"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "DIV"
+ },
+ {
+ "begin": 7542,
+ "end": 7551,
+ "name": "AND"
+ },
+ {
+ "begin": 7513,
+ "end": 7552,
+ "name": "DUP2"
+ },
+ {
+ "begin": 7513,
+ "end": 7552,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 7513,
+ "end": 7552,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 7513,
+ "end": 7552,
+ "name": "DUP2"
+ },
+ {
+ "begin": 7513,
+ "end": 7552,
+ "name": "ADD"
+ },
+ {
+ "begin": 7513,
+ "end": 7552,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 7513,
+ "end": 7552,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 7513,
+ "end": 7552,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 7513,
+ "end": 7552,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 7513,
+ "end": 7552,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 7513,
+ "end": 7552,
+ "name": "ADD"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 7513,
+ "end": 7552,
+ "name": "SHA3"
+ },
+ {
+ "begin": 7513,
+ "end": 7552,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 7513,
+ "end": 7552,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": 7513,
+ "end": 7552,
+ "name": "AND"
+ },
+ {
+ "begin": 7509,
+ "end": 7580,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 7509,
+ "end": 7580,
+ "name": "PUSH [tag]",
+ "value": "221"
+ },
+ {
+ "begin": 7509,
+ "end": 7580,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 7579,
+ "end": 7580,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 7570,
+ "end": 7580,
+ "name": "DUP3"
+ },
+ {
+ "begin": 7570,
+ "end": 7580,
+ "name": "ADD"
+ },
+ {
+ "begin": 7570,
+ "end": 7580,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 7570,
+ "end": 7580,
+ "name": "POP"
+ },
+ {
+ "begin": 7509,
+ "end": 7580,
+ "name": "tag",
+ "value": "221"
+ },
+ {
+ "begin": 7509,
+ "end": 7580,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 7607,
+ "end": 7615,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 7607,
+ "end": 7615,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 7598,
+ "end": 7603,
+ "name": "DUP3"
+ },
+ {
+ "begin": 7598,
+ "end": 7615,
+ "name": "EQ"
+ },
+ {
+ "begin": 7594,
+ "end": 7644,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 7594,
+ "end": 7644,
+ "name": "PUSH [tag]",
+ "value": "222"
+ },
+ {
+ "begin": 7594,
+ "end": 7644,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 7640,
+ "end": 7644,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 7633,
+ "end": 7644,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 7633,
+ "end": 7644,
+ "name": "POP"
+ },
+ {
+ "begin": 7633,
+ "end": 7644,
+ "name": "PUSH [tag]",
+ "value": "217"
+ },
+ {
+ "begin": 7633,
+ "end": 7644,
+ "name": "JUMP"
+ },
+ {
+ "begin": 7594,
+ "end": 7644,
+ "name": "tag",
+ "value": "222"
+ },
+ {
+ "begin": 7594,
+ "end": 7644,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 7458,
+ "end": 7655,
+ "name": "tag",
+ "value": "218"
+ },
+ {
+ "begin": 7458,
+ "end": 7655,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 7490,
+ "end": 7493,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 7490,
+ "end": 7493,
+ "name": "ADD"
+ },
+ {
+ "begin": 7458,
+ "end": 7655,
+ "name": "PUSH [tag]",
+ "value": "216"
+ },
+ {
+ "begin": 7458,
+ "end": 7655,
+ "name": "JUMP"
+ },
+ {
+ "begin": 7458,
+ "end": 7655,
+ "name": "tag",
+ "value": "217"
+ },
+ {
+ "begin": 7458,
+ "end": 7655,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "tag",
+ "value": "215"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "POP"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "POP"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "POP"
+ },
+ {
+ "begin": 7324,
+ "end": 7661,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 2301,
+ "end": 2487,
+ "name": "tag",
+ "value": "74"
+ },
+ {
+ "begin": 2301,
+ "end": 2487,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1228,
+ "end": 1232,
+ "name": "ADDRESS"
+ },
+ {
+ "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": 1206,
+ "end": 1233,
+ "name": "AND"
+ },
+ {
+ "begin": 1206,
+ "end": 1216,
+ "name": "CALLER"
+ },
+ {
+ "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": 1206,
+ "end": 1233,
+ "name": "AND"
+ },
+ {
+ "begin": 1206,
+ "end": 1233,
+ "name": "EQ"
+ },
+ {
+ "begin": 1206,
+ "end": 1233,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "PUSH [tag]",
+ "value": "224"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1247,
+ "end": 1252,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1247,
+ "end": 1252,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1247,
+ "end": 1252,
+ "name": "REVERT"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "tag",
+ "value": "224"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2398,
+ "end": 2415,
+ "name": "PUSH",
+ "value": "6"
+ },
+ {
+ "begin": 2398,
+ "end": 2436,
+ "name": "DUP2"
+ },
+ {
+ "begin": 2398,
+ "end": 2436,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 2398,
+ "end": 2436,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 2446,
+ "end": 2480,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 2446,
+ "end": 2480,
+ "name": "DUP1"
+ },
+ {
+ "begin": 2446,
+ "end": 2480,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 2446,
+ "end": 2480,
+ "name": "DUP3"
+ },
+ {
+ "begin": 2446,
+ "end": 2480,
+ "name": "DUP2"
+ },
+ {
+ "begin": 2446,
+ "end": 2480,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 2446,
+ "end": 2480,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 2446,
+ "end": 2480,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 2446,
+ "end": 2480,
+ "name": "PUSH",
+ "value": "D1C9101A34FEFF75CCCEF14A28785A0279CB0B49C1F321F21F5F422E746B4377"
+ },
+ {
+ "begin": 2446,
+ "end": 2480,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 2446,
+ "end": 2480,
+ "name": "DUP2"
+ },
+ {
+ "begin": 2446,
+ "end": 2480,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 2446,
+ "end": 2480,
+ "name": "SUB"
+ },
+ {
+ "begin": 2446,
+ "end": 2480,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 2446,
+ "end": 2480,
+ "name": "ADD"
+ },
+ {
+ "begin": 2446,
+ "end": 2480,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 2446,
+ "end": 2480,
+ "name": "LOG1"
+ },
+ {
+ "begin": 1262,
+ "end": 1263,
+ "name": "tag",
+ "value": "225"
+ },
+ {
+ "begin": 1262,
+ "end": 1263,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2301,
+ "end": 2487,
+ "name": "tag",
+ "value": "223"
+ },
+ {
+ "begin": 2301,
+ "end": 2487,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2301,
+ "end": 2487,
+ "name": "POP"
+ },
+ {
+ "begin": 2301,
+ "end": 2487,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "tag",
+ "value": "77"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "PUSH",
+ "value": "8"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "DUP2"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "SHA3"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "AND"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "DUP2"
+ },
+ {
+ "begin": 981,
+ "end": 1036,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "tag",
+ "value": "80"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 8741,
+ "end": 8751,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 8741,
+ "end": 8751,
+ "name": "DUP1"
+ },
+ {
+ "begin": 8767,
+ "end": 8887,
+ "name": "tag",
+ "value": "227"
+ },
+ {
+ "begin": 8767,
+ "end": 8887,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 8784,
+ "end": 8790,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 8784,
+ "end": 8797,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 8782,
+ "end": 8797,
+ "name": "DUP2"
+ },
+ {
+ "begin": 8782,
+ "end": 8797,
+ "name": "LT"
+ },
+ {
+ "begin": 8767,
+ "end": 8887,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 8767,
+ "end": 8887,
+ "name": "PUSH [tag]",
+ "value": "228"
+ },
+ {
+ "begin": 8767,
+ "end": 8887,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 8820,
+ "end": 8848,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 8820,
+ "end": 8848,
+ "name": "DUP4"
+ },
+ {
+ "begin": 8820,
+ "end": 8848,
+ "name": "DUP2"
+ },
+ {
+ "begin": 8820,
+ "end": 8848,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 8820,
+ "end": 8833,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 8820,
+ "end": 8848,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 8820,
+ "end": 8848,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 8820,
+ "end": 8848,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 8820,
+ "end": 8848,
+ "name": "DUP2"
+ },
+ {
+ "begin": 8820,
+ "end": 8848,
+ "name": "SHA3"
+ },
+ {
+ "begin": 8849,
+ "end": 8855,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "DUP1"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 8820,
+ "end": 8848,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 8820,
+ "end": 8848,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 8820,
+ "end": 8848,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 8856,
+ "end": 8857,
+ "name": "DUP5"
+ },
+ {
+ "begin": 8856,
+ "end": 8857,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "DUP2"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "LT"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "PUSH [tag]",
+ "value": "230"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "INVALID"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "tag",
+ "value": "230"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "SHA3"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "ADD"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "tag",
+ "value": "231"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "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": 8849,
+ "end": 8858,
+ "name": "PUSH",
+ "value": "100"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "EXP"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "DIV"
+ },
+ {
+ "begin": 8849,
+ "end": 8858,
+ "name": "AND"
+ },
+ {
+ "begin": 8820,
+ "end": 8859,
+ "name": "DUP2"
+ },
+ {
+ "begin": 8820,
+ "end": 8859,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 8820,
+ "end": 8859,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 8820,
+ "end": 8859,
+ "name": "DUP2"
+ },
+ {
+ "begin": 8820,
+ "end": 8859,
+ "name": "ADD"
+ },
+ {
+ "begin": 8820,
+ "end": 8859,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 8820,
+ "end": 8859,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 8820,
+ "end": 8859,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 8820,
+ "end": 8859,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 8820,
+ "end": 8859,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 8820,
+ "end": 8859,
+ "name": "ADD"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 8820,
+ "end": 8859,
+ "name": "SHA3"
+ },
+ {
+ "begin": 8820,
+ "end": 8859,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 8820,
+ "end": 8859,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": 8820,
+ "end": 8859,
+ "name": "AND"
+ },
+ {
+ "begin": 8816,
+ "end": 8887,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 8816,
+ "end": 8887,
+ "name": "PUSH [tag]",
+ "value": "232"
+ },
+ {
+ "begin": 8816,
+ "end": 8887,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 8886,
+ "end": 8887,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 8877,
+ "end": 8887,
+ "name": "DUP3"
+ },
+ {
+ "begin": 8877,
+ "end": 8887,
+ "name": "ADD"
+ },
+ {
+ "begin": 8877,
+ "end": 8887,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 8877,
+ "end": 8887,
+ "name": "POP"
+ },
+ {
+ "begin": 8816,
+ "end": 8887,
+ "name": "tag",
+ "value": "232"
+ },
+ {
+ "begin": 8816,
+ "end": 8887,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 8767,
+ "end": 8887,
+ "name": "tag",
+ "value": "229"
+ },
+ {
+ "begin": 8767,
+ "end": 8887,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 8799,
+ "end": 8802,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 8799,
+ "end": 8802,
+ "name": "ADD"
+ },
+ {
+ "begin": 8767,
+ "end": 8887,
+ "name": "PUSH [tag]",
+ "value": "227"
+ },
+ {
+ "begin": 8767,
+ "end": 8887,
+ "name": "JUMP"
+ },
+ {
+ "begin": 8767,
+ "end": 8887,
+ "name": "tag",
+ "value": "228"
+ },
+ {
+ "begin": 8767,
+ "end": 8887,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "tag",
+ "value": "226"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "POP"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "POP"
+ },
+ {
+ "begin": 8642,
+ "end": 8894,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "tag",
+ "value": "83"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP2"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP2"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SHA3"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP3"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "ADD"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP4"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "ADD"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "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": 785,
+ "end": 834,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "AND"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH",
+ "value": "2"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "ADD"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "AND"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "DUP5"
+ },
+ {
+ "begin": 785,
+ "end": 834,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "tag",
+ "value": "89"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 9629,
+ "end": 9638,
+ "name": "PUSH [tag]",
+ "value": "233"
+ },
+ {
+ "begin": 9629,
+ "end": 9638,
+ "name": "PUSH [tag]",
+ "value": "234"
+ },
+ {
+ "begin": 9629,
+ "end": 9638,
+ "name": "JUMP",
+ "value": "[in]"
+ },
+ {
+ "begin": 9629,
+ "end": 9638,
+ "name": "tag",
+ "value": "233"
+ },
+ {
+ "begin": 9629,
+ "end": 9638,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 9661,
+ "end": 9667,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "DUP1"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "DUP1"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "MUL"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "ADD"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "DUP2"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "ADD"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "DUP1"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "DUP2"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "DUP2"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "ADD"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "DUP3"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "DUP1"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "DUP1"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "PUSH [tag]",
+ "value": "236"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "MUL"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "DUP3"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "ADD"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "SHA3"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "tag",
+ "value": "237"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "DUP2"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "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": 9654,
+ "end": 9667,
+ "name": "AND"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "DUP2"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "ADD"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "ADD"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "DUP1"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "DUP4"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "GT"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "PUSH [tag]",
+ "value": "237"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "tag",
+ "value": "236"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "POP"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "POP"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "POP"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "POP"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "POP"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 9654,
+ "end": 9667,
+ "name": "POP"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "tag",
+ "value": "235"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 9559,
+ "end": 9674,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "tag",
+ "value": "94"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 10902,
+ "end": 10924,
+ "name": "PUSH [tag]",
+ "value": "238"
+ },
+ {
+ "begin": 10902,
+ "end": 10924,
+ "name": "PUSH [tag]",
+ "value": "234"
+ },
+ {
+ "begin": 10902,
+ "end": 10924,
+ "name": "JUMP",
+ "value": "[in]"
+ },
+ {
+ "begin": 10902,
+ "end": 10924,
+ "name": "tag",
+ "value": "238"
+ },
+ {
+ "begin": 10902,
+ "end": 10924,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 10940,
+ "end": 10972,
+ "name": "PUSH [tag]",
+ "value": "240"
+ },
+ {
+ "begin": 10940,
+ "end": 10972,
+ "name": "PUSH [tag]",
+ "value": "234"
+ },
+ {
+ "begin": 10940,
+ "end": 10972,
+ "name": "JUMP",
+ "value": "[in]"
+ },
+ {
+ "begin": 10940,
+ "end": 10972,
+ "name": "tag",
+ "value": "240"
+ },
+ {
+ "begin": 10940,
+ "end": 10972,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 11013,
+ "end": 11023,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 11037,
+ "end": 11043,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 10986,
+ "end": 11002,
+ "name": "PUSH",
+ "value": "5"
+ },
+ {
+ "begin": 10986,
+ "end": 11002,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 10975,
+ "end": 11003,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 10975,
+ "end": 11003,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 10975,
+ "end": 11003,
+ "name": "DUP1"
+ },
+ {
+ "begin": 10975,
+ "end": 11003,
+ "name": "MSIZE"
+ },
+ {
+ "begin": 10975,
+ "end": 11003,
+ "name": "LT"
+ },
+ {
+ "begin": 10975,
+ "end": 11003,
+ "name": "PUSH [tag]",
+ "value": "242"
+ },
+ {
+ "begin": 10975,
+ "end": 11003,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 10975,
+ "end": 11003,
+ "name": "POP"
+ },
+ {
+ "begin": 10975,
+ "end": 11003,
+ "name": "MSIZE"
+ },
+ {
+ "begin": 10975,
+ "end": 11003,
+ "name": "tag",
+ "value": "242"
+ },
+ {
+ "begin": 10975,
+ "end": 11003,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 10975,
+ "end": 11003,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10975,
+ "end": 11003,
+ "name": "DUP1"
+ },
+ {
+ "begin": 10975,
+ "end": 11003,
+ "name": "DUP3"
+ },
+ {
+ "begin": 10975,
+ "end": 11003,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 10975,
+ "end": 11003,
+ "name": "DUP1"
+ },
+ {
+ "begin": 10975,
+ "end": 11003,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 10975,
+ "end": 11003,
+ "name": "MUL"
+ },
+ {
+ "begin": 10975,
+ "end": 11003,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 10975,
+ "end": 11003,
+ "name": "ADD"
+ },
+ {
+ "begin": 10975,
+ "end": 11003,
+ "name": "DUP3"
+ },
+ {
+ "begin": 10975,
+ "end": 11003,
+ "name": "ADD"
+ },
+ {
+ "begin": 10975,
+ "end": 11003,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 10975,
+ "end": 11003,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 10975,
+ "end": 11003,
+ "name": "tag",
+ "value": "243"
+ },
+ {
+ "begin": 10975,
+ "end": 11003,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 10975,
+ "end": 11003,
+ "name": "POP"
+ },
+ {
+ "begin": 10940,
+ "end": 11003,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 10940,
+ "end": 11003,
+ "name": "POP"
+ },
+ {
+ "begin": 11026,
+ "end": 11027,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 11013,
+ "end": 11027,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 11013,
+ "end": 11027,
+ "name": "POP"
+ },
+ {
+ "begin": 11060,
+ "end": 11061,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 11058,
+ "end": 11061,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 11058,
+ "end": 11061,
+ "name": "POP"
+ },
+ {
+ "begin": 11053,
+ "end": 11303,
+ "name": "tag",
+ "value": "244"
+ },
+ {
+ "begin": 11053,
+ "end": 11303,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 11065,
+ "end": 11081,
+ "name": "PUSH",
+ "value": "5"
+ },
+ {
+ "begin": 11065,
+ "end": 11081,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 11063,
+ "end": 11064,
+ "name": "DUP2"
+ },
+ {
+ "begin": 11063,
+ "end": 11081,
+ "name": "LT"
+ },
+ {
+ "begin": 11053,
+ "end": 11303,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 11053,
+ "end": 11303,
+ "name": "PUSH [tag]",
+ "value": "245"
+ },
+ {
+ "begin": 11053,
+ "end": 11303,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 11107,
+ "end": 11114,
+ "name": "DUP6"
+ },
+ {
+ "begin": 11107,
+ "end": 11143,
+ "name": "DUP1"
+ },
+ {
+ "begin": 11107,
+ "end": 11143,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 11107,
+ "end": 11143,
+ "name": "PUSH [tag]",
+ "value": "247"
+ },
+ {
+ "begin": 11107,
+ "end": 11143,
+ "name": "JUMPI"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 11119,
+ "end": 11131,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 11119,
+ "end": 11134,
+ "name": "DUP2"
+ },
+ {
+ "begin": 11119,
+ "end": 11134,
+ "name": "DUP2"
+ },
+ {
+ "begin": 11119,
+ "end": 11134,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 11119,
+ "end": 11134,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 11119,
+ "end": 11134,
+ "name": "DUP2"
+ },
+ {
+ "begin": 11119,
+ "end": 11134,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 11119,
+ "end": 11134,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 11119,
+ "end": 11134,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 11119,
+ "end": 11134,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 11119,
+ "end": 11134,
+ "name": "SHA3"
+ },
+ {
+ "begin": 11119,
+ "end": 11143,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 11119,
+ "end": 11143,
+ "name": "ADD"
+ },
+ {
+ "begin": 11119,
+ "end": 11143,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 11119,
+ "end": 11143,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": 11119,
+ "end": 11143,
+ "name": "AND"
+ },
+ {
+ "begin": 11118,
+ "end": 11143,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 11107,
+ "end": 11143,
+ "name": "tag",
+ "value": "247"
+ },
+ {
+ "begin": 11107,
+ "end": 11143,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 11107,
+ "end": 11199,
+ "name": "DUP1"
+ },
+ {
+ "begin": 11107,
+ "end": 11199,
+ "name": "PUSH [tag]",
+ "value": "249"
+ },
+ {
+ "begin": 11107,
+ "end": 11199,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 11107,
+ "end": 11199,
+ "name": "POP"
+ },
+ {
+ "begin": 11163,
+ "end": 11171,
+ "name": "DUP5"
+ },
+ {
+ "begin": 11163,
+ "end": 11199,
+ "name": "DUP1"
+ },
+ {
+ "begin": 11163,
+ "end": 11199,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 11163,
+ "end": 11199,
+ "name": "PUSH [tag]",
+ "value": "249"
+ },
+ {
+ "begin": 11163,
+ "end": 11199,
+ "name": "JUMPI"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 11175,
+ "end": 11187,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 11175,
+ "end": 11190,
+ "name": "DUP2"
+ },
+ {
+ "begin": 11175,
+ "end": 11190,
+ "name": "DUP2"
+ },
+ {
+ "begin": 11175,
+ "end": 11190,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 11175,
+ "end": 11190,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 11175,
+ "end": 11190,
+ "name": "DUP2"
+ },
+ {
+ "begin": 11175,
+ "end": 11190,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 11175,
+ "end": 11190,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 11175,
+ "end": 11190,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 11175,
+ "end": 11190,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 11175,
+ "end": 11190,
+ "name": "SHA3"
+ },
+ {
+ "begin": 11175,
+ "end": 11199,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 11175,
+ "end": 11199,
+ "name": "ADD"
+ },
+ {
+ "begin": 11175,
+ "end": 11199,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 11175,
+ "end": 11199,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": 11175,
+ "end": 11199,
+ "name": "AND"
+ },
+ {
+ "begin": 11163,
+ "end": 11199,
+ "name": "tag",
+ "value": "249"
+ },
+ {
+ "begin": 11163,
+ "end": 11199,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 11107,
+ "end": 11199,
+ "name": "tag",
+ "value": "248"
+ },
+ {
+ "begin": 11107,
+ "end": 11199,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 11100,
+ "end": 11303,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 11100,
+ "end": 11303,
+ "name": "PUSH [tag]",
+ "value": "250"
+ },
+ {
+ "begin": 11100,
+ "end": 11303,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 11259,
+ "end": 11260,
+ "name": "DUP1"
+ },
+ {
+ "begin": 11231,
+ "end": 11249,
+ "name": "DUP4"
+ },
+ {
+ "begin": 11250,
+ "end": 11255,
+ "name": "DUP4"
+ },
+ {
+ "begin": 11231,
+ "end": 11256,
+ "name": "DUP2"
+ },
+ {
+ "begin": 11231,
+ "end": 11256,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 11231,
+ "end": 11256,
+ "name": "DUP2"
+ },
+ {
+ "begin": 11231,
+ "end": 11256,
+ "name": "LT"
+ },
+ {
+ "begin": 11231,
+ "end": 11256,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 11231,
+ "end": 11256,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 11231,
+ "end": 11256,
+ "name": "PUSH [tag]",
+ "value": "251"
+ },
+ {
+ "begin": 11231,
+ "end": 11256,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 11231,
+ "end": 11256,
+ "name": "INVALID"
+ },
+ {
+ "begin": 11231,
+ "end": 11256,
+ "name": "tag",
+ "value": "251"
+ },
+ {
+ "begin": 11231,
+ "end": 11256,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 11231,
+ "end": 11256,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 11231,
+ "end": 11256,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 11231,
+ "end": 11256,
+ "name": "DUP2"
+ },
+ {
+ "begin": 11231,
+ "end": 11256,
+ "name": "MUL"
+ },
+ {
+ "begin": 11231,
+ "end": 11256,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 11231,
+ "end": 11256,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 11231,
+ "end": 11256,
+ "name": "ADD"
+ },
+ {
+ "begin": 11231,
+ "end": 11256,
+ "name": "ADD"
+ },
+ {
+ "begin": 11231,
+ "end": 11260,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 11287,
+ "end": 11288,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 11278,
+ "end": 11288,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 11278,
+ "end": 11288,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 11278,
+ "end": 11288,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 11278,
+ "end": 11288,
+ "name": "ADD"
+ },
+ {
+ "begin": 11278,
+ "end": 11288,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 11100,
+ "end": 11303,
+ "name": "tag",
+ "value": "250"
+ },
+ {
+ "begin": 11100,
+ "end": 11303,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 11053,
+ "end": 11303,
+ "name": "tag",
+ "value": "246"
+ },
+ {
+ "begin": 11053,
+ "end": 11303,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 11083,
+ "end": 11086,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 11083,
+ "end": 11086,
+ "name": "ADD"
+ },
+ {
+ "begin": 11053,
+ "end": 11303,
+ "name": "PUSH [tag]",
+ "value": "244"
+ },
+ {
+ "begin": 11053,
+ "end": 11303,
+ "name": "JUMP"
+ },
+ {
+ "begin": 11053,
+ "end": 11303,
+ "name": "tag",
+ "value": "245"
+ },
+ {
+ "begin": 11053,
+ "end": 11303,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 11346,
+ "end": 11350,
+ "name": "DUP8"
+ },
+ {
+ "begin": 11341,
+ "end": 11343,
+ "name": "DUP8"
+ },
+ {
+ "begin": 11341,
+ "end": 11350,
+ "name": "SUB"
+ },
+ {
+ "begin": 11330,
+ "end": 11351,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 11330,
+ "end": 11351,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 11330,
+ "end": 11351,
+ "name": "DUP1"
+ },
+ {
+ "begin": 11330,
+ "end": 11351,
+ "name": "MSIZE"
+ },
+ {
+ "begin": 11330,
+ "end": 11351,
+ "name": "LT"
+ },
+ {
+ "begin": 11330,
+ "end": 11351,
+ "name": "PUSH [tag]",
+ "value": "252"
+ },
+ {
+ "begin": 11330,
+ "end": 11351,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 11330,
+ "end": 11351,
+ "name": "POP"
+ },
+ {
+ "begin": 11330,
+ "end": 11351,
+ "name": "MSIZE"
+ },
+ {
+ "begin": 11330,
+ "end": 11351,
+ "name": "tag",
+ "value": "252"
+ },
+ {
+ "begin": 11330,
+ "end": 11351,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 11330,
+ "end": 11351,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 11330,
+ "end": 11351,
+ "name": "DUP1"
+ },
+ {
+ "begin": 11330,
+ "end": 11351,
+ "name": "DUP3"
+ },
+ {
+ "begin": 11330,
+ "end": 11351,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 11330,
+ "end": 11351,
+ "name": "DUP1"
+ },
+ {
+ "begin": 11330,
+ "end": 11351,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 11330,
+ "end": 11351,
+ "name": "MUL"
+ },
+ {
+ "begin": 11330,
+ "end": 11351,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 11330,
+ "end": 11351,
+ "name": "ADD"
+ },
+ {
+ "begin": 11330,
+ "end": 11351,
+ "name": "DUP3"
+ },
+ {
+ "begin": 11330,
+ "end": 11351,
+ "name": "ADD"
+ },
+ {
+ "begin": 11330,
+ "end": 11351,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 11330,
+ "end": 11351,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 11330,
+ "end": 11351,
+ "name": "tag",
+ "value": "253"
+ },
+ {
+ "begin": 11330,
+ "end": 11351,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 11330,
+ "end": 11351,
+ "name": "POP"
+ },
+ {
+ "begin": 11312,
+ "end": 11351,
+ "name": "SWAP4"
+ },
+ {
+ "begin": 11312,
+ "end": 11351,
+ "name": "POP"
+ },
+ {
+ "begin": 11368,
+ "end": 11372,
+ "name": "DUP8"
+ },
+ {
+ "begin": 11366,
+ "end": 11372,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 11366,
+ "end": 11372,
+ "name": "POP"
+ },
+ {
+ "begin": 11361,
+ "end": 11446,
+ "name": "tag",
+ "value": "254"
+ },
+ {
+ "begin": 11361,
+ "end": 11446,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 11376,
+ "end": 11378,
+ "name": "DUP7"
+ },
+ {
+ "begin": 11374,
+ "end": 11375,
+ "name": "DUP2"
+ },
+ {
+ "begin": 11374,
+ "end": 11378,
+ "name": "LT"
+ },
+ {
+ "begin": 11361,
+ "end": 11446,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 11361,
+ "end": 11446,
+ "name": "PUSH [tag]",
+ "value": "255"
+ },
+ {
+ "begin": 11361,
+ "end": 11446,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 11425,
+ "end": 11443,
+ "name": "DUP3"
+ },
+ {
+ "begin": 11444,
+ "end": 11445,
+ "name": "DUP2"
+ },
+ {
+ "begin": 11425,
+ "end": 11446,
+ "name": "DUP2"
+ },
+ {
+ "begin": 11425,
+ "end": 11446,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 11425,
+ "end": 11446,
+ "name": "DUP2"
+ },
+ {
+ "begin": 11425,
+ "end": 11446,
+ "name": "LT"
+ },
+ {
+ "begin": 11425,
+ "end": 11446,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 11425,
+ "end": 11446,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 11425,
+ "end": 11446,
+ "name": "PUSH [tag]",
+ "value": "257"
+ },
+ {
+ "begin": 11425,
+ "end": 11446,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 11425,
+ "end": 11446,
+ "name": "INVALID"
+ },
+ {
+ "begin": 11425,
+ "end": 11446,
+ "name": "tag",
+ "value": "257"
+ },
+ {
+ "begin": 11425,
+ "end": 11446,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 11425,
+ "end": 11446,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 11425,
+ "end": 11446,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 11425,
+ "end": 11446,
+ "name": "ADD"
+ },
+ {
+ "begin": 11425,
+ "end": 11446,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 11425,
+ "end": 11446,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 11425,
+ "end": 11446,
+ "name": "MUL"
+ },
+ {
+ "begin": 11425,
+ "end": 11446,
+ "name": "ADD"
+ },
+ {
+ "begin": 11425,
+ "end": 11446,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 11397,
+ "end": 11412,
+ "name": "DUP5"
+ },
+ {
+ "begin": 11417,
+ "end": 11421,
+ "name": "DUP10"
+ },
+ {
+ "begin": 11413,
+ "end": 11414,
+ "name": "DUP4"
+ },
+ {
+ "begin": 11413,
+ "end": 11421,
+ "name": "SUB"
+ },
+ {
+ "begin": 11397,
+ "end": 11422,
+ "name": "DUP2"
+ },
+ {
+ "begin": 11397,
+ "end": 11422,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 11397,
+ "end": 11422,
+ "name": "DUP2"
+ },
+ {
+ "begin": 11397,
+ "end": 11422,
+ "name": "LT"
+ },
+ {
+ "begin": 11397,
+ "end": 11422,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 11397,
+ "end": 11422,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 11397,
+ "end": 11422,
+ "name": "PUSH [tag]",
+ "value": "258"
+ },
+ {
+ "begin": 11397,
+ "end": 11422,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 11397,
+ "end": 11422,
+ "name": "INVALID"
+ },
+ {
+ "begin": 11397,
+ "end": 11422,
+ "name": "tag",
+ "value": "258"
+ },
+ {
+ "begin": 11397,
+ "end": 11422,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 11397,
+ "end": 11422,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 11397,
+ "end": 11422,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 11397,
+ "end": 11422,
+ "name": "DUP2"
+ },
+ {
+ "begin": 11397,
+ "end": 11422,
+ "name": "MUL"
+ },
+ {
+ "begin": 11397,
+ "end": 11422,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 11397,
+ "end": 11422,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 11397,
+ "end": 11422,
+ "name": "ADD"
+ },
+ {
+ "begin": 11397,
+ "end": 11422,
+ "name": "ADD"
+ },
+ {
+ "begin": 11397,
+ "end": 11446,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 11361,
+ "end": 11446,
+ "name": "tag",
+ "value": "256"
+ },
+ {
+ "begin": 11361,
+ "end": 11446,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 11380,
+ "end": 11383,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 11380,
+ "end": 11383,
+ "name": "ADD"
+ },
+ {
+ "begin": 11361,
+ "end": 11446,
+ "name": "PUSH [tag]",
+ "value": "254"
+ },
+ {
+ "begin": 11361,
+ "end": 11446,
+ "name": "JUMP"
+ },
+ {
+ "begin": 11361,
+ "end": 11446,
+ "name": "tag",
+ "value": "255"
+ },
+ {
+ "begin": 11361,
+ "end": 11446,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "tag",
+ "value": "241"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "POP"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "POP"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "POP"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "SWAP5"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "SWAP4"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "POP"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "POP"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "POP"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "POP"
+ },
+ {
+ "begin": 10777,
+ "end": 11453,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "tag",
+ "value": "99"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 9948,
+ "end": 9972,
+ "name": "PUSH [tag]",
+ "value": "259"
+ },
+ {
+ "begin": 9948,
+ "end": 9972,
+ "name": "PUSH [tag]",
+ "value": "234"
+ },
+ {
+ "begin": 9948,
+ "end": 9972,
+ "name": "JUMP",
+ "value": "[in]"
+ },
+ {
+ "begin": 9948,
+ "end": 9972,
+ "name": "tag",
+ "value": "259"
+ },
+ {
+ "begin": 9948,
+ "end": 9972,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 9988,
+ "end": 10022,
+ "name": "PUSH [tag]",
+ "value": "260"
+ },
+ {
+ "begin": 9988,
+ "end": 10022,
+ "name": "PUSH [tag]",
+ "value": "234"
+ },
+ {
+ "begin": 9988,
+ "end": 10022,
+ "name": "JUMP",
+ "value": "[in]"
+ },
+ {
+ "begin": 9988,
+ "end": 10022,
+ "name": "tag",
+ "value": "260"
+ },
+ {
+ "begin": 9988,
+ "end": 10022,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 10039,
+ "end": 10045,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 10039,
+ "end": 10052,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 10025,
+ "end": 10053,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 10025,
+ "end": 10053,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 10063,
+ "end": 10073,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 10063,
+ "end": 10073,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 10063,
+ "end": 10073,
+ "name": "DUP3"
+ },
+ {
+ "begin": 10063,
+ "end": 10073,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 10025,
+ "end": 10053,
+ "name": "DUP1"
+ },
+ {
+ "begin": 10025,
+ "end": 10053,
+ "name": "MSIZE"
+ },
+ {
+ "begin": 10025,
+ "end": 10053,
+ "name": "LT"
+ },
+ {
+ "begin": 10025,
+ "end": 10053,
+ "name": "PUSH [tag]",
+ "value": "262"
+ },
+ {
+ "begin": 10025,
+ "end": 10053,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 10025,
+ "end": 10053,
+ "name": "POP"
+ },
+ {
+ "begin": 10025,
+ "end": 10053,
+ "name": "MSIZE"
+ },
+ {
+ "begin": 10025,
+ "end": 10053,
+ "name": "tag",
+ "value": "262"
+ },
+ {
+ "begin": 10025,
+ "end": 10053,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 10025,
+ "end": 10053,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10025,
+ "end": 10053,
+ "name": "DUP1"
+ },
+ {
+ "begin": 10025,
+ "end": 10053,
+ "name": "DUP3"
+ },
+ {
+ "begin": 10025,
+ "end": 10053,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 10025,
+ "end": 10053,
+ "name": "DUP1"
+ },
+ {
+ "begin": 10025,
+ "end": 10053,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 10025,
+ "end": 10053,
+ "name": "MUL"
+ },
+ {
+ "begin": 10025,
+ "end": 10053,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 10025,
+ "end": 10053,
+ "name": "ADD"
+ },
+ {
+ "begin": 10025,
+ "end": 10053,
+ "name": "DUP3"
+ },
+ {
+ "begin": 10025,
+ "end": 10053,
+ "name": "ADD"
+ },
+ {
+ "begin": 10025,
+ "end": 10053,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 10025,
+ "end": 10053,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 10025,
+ "end": 10053,
+ "name": "tag",
+ "value": "263"
+ },
+ {
+ "begin": 10025,
+ "end": 10053,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 10025,
+ "end": 10053,
+ "name": "POP"
+ },
+ {
+ "begin": 9988,
+ "end": 10053,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 9988,
+ "end": 10053,
+ "name": "POP"
+ },
+ {
+ "begin": 10076,
+ "end": 10077,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 10063,
+ "end": 10077,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 10063,
+ "end": 10077,
+ "name": "POP"
+ },
+ {
+ "begin": 10110,
+ "end": 10111,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 10108,
+ "end": 10111,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10108,
+ "end": 10111,
+ "name": "POP"
+ },
+ {
+ "begin": 10103,
+ "end": 10289,
+ "name": "tag",
+ "value": "264"
+ },
+ {
+ "begin": 10103,
+ "end": 10289,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 10115,
+ "end": 10121,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 10115,
+ "end": 10128,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 10113,
+ "end": 10128,
+ "name": "DUP2"
+ },
+ {
+ "begin": 10113,
+ "end": 10128,
+ "name": "LT"
+ },
+ {
+ "begin": 10103,
+ "end": 10289,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 10103,
+ "end": 10289,
+ "name": "PUSH [tag]",
+ "value": "265"
+ },
+ {
+ "begin": 10103,
+ "end": 10289,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 10151,
+ "end": 10179,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 10151,
+ "end": 10179,
+ "name": "DUP6"
+ },
+ {
+ "begin": 10151,
+ "end": 10179,
+ "name": "DUP2"
+ },
+ {
+ "begin": 10151,
+ "end": 10179,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 10151,
+ "end": 10164,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 10151,
+ "end": 10179,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 10151,
+ "end": 10179,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 10151,
+ "end": 10179,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 10151,
+ "end": 10179,
+ "name": "DUP2"
+ },
+ {
+ "begin": 10151,
+ "end": 10179,
+ "name": "SHA3"
+ },
+ {
+ "begin": 10180,
+ "end": 10186,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "DUP1"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 10151,
+ "end": 10179,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 10151,
+ "end": 10179,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 10151,
+ "end": 10179,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 10187,
+ "end": 10188,
+ "name": "DUP5"
+ },
+ {
+ "begin": 10187,
+ "end": 10188,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "DUP2"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "LT"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "PUSH [tag]",
+ "value": "267"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "INVALID"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "tag",
+ "value": "267"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "SHA3"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "ADD"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "tag",
+ "value": "268"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "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": 10180,
+ "end": 10189,
+ "name": "PUSH",
+ "value": "100"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "EXP"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "DIV"
+ },
+ {
+ "begin": 10180,
+ "end": 10189,
+ "name": "AND"
+ },
+ {
+ "begin": 10151,
+ "end": 10190,
+ "name": "DUP2"
+ },
+ {
+ "begin": 10151,
+ "end": 10190,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 10151,
+ "end": 10190,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 10151,
+ "end": 10190,
+ "name": "DUP2"
+ },
+ {
+ "begin": 10151,
+ "end": 10190,
+ "name": "ADD"
+ },
+ {
+ "begin": 10151,
+ "end": 10190,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 10151,
+ "end": 10190,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10151,
+ "end": 10190,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 10151,
+ "end": 10190,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 10151,
+ "end": 10190,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 10151,
+ "end": 10190,
+ "name": "ADD"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 10151,
+ "end": 10190,
+ "name": "SHA3"
+ },
+ {
+ "begin": 10151,
+ "end": 10190,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 10151,
+ "end": 10190,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": 10151,
+ "end": 10190,
+ "name": "AND"
+ },
+ {
+ "begin": 10147,
+ "end": 10289,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 10147,
+ "end": 10289,
+ "name": "PUSH [tag]",
+ "value": "269"
+ },
+ {
+ "begin": 10147,
+ "end": 10289,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 10237,
+ "end": 10243,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 10237,
+ "end": 10246,
+ "name": "DUP1"
+ },
+ {
+ "begin": 10237,
+ "end": 10246,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 10244,
+ "end": 10245,
+ "name": "DUP3"
+ },
+ {
+ "begin": 10244,
+ "end": 10245,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10237,
+ "end": 10246,
+ "name": "DUP2"
+ },
+ {
+ "begin": 10237,
+ "end": 10246,
+ "name": "LT"
+ },
+ {
+ "begin": 10237,
+ "end": 10246,
+ "name": "PUSH [tag]",
+ "value": "270"
+ },
+ {
+ "begin": 10237,
+ "end": 10246,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 10237,
+ "end": 10246,
+ "name": "INVALID"
+ },
+ {
+ "begin": 10237,
+ "end": 10246,
+ "name": "tag",
+ "value": "270"
+ },
+ {
+ "begin": 10237,
+ "end": 10246,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 10237,
+ "end": 10246,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10237,
+ "end": 10246,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 10237,
+ "end": 10246,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 10237,
+ "end": 10246,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 10237,
+ "end": 10246,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 10237,
+ "end": 10246,
+ "name": "SHA3"
+ },
+ {
+ "begin": 10237,
+ "end": 10246,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10237,
+ "end": 10246,
+ "name": "ADD"
+ },
+ {
+ "begin": 10237,
+ "end": 10246,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 10237,
+ "end": 10246,
+ "name": "tag",
+ "value": "271"
+ },
+ {
+ "begin": 10237,
+ "end": 10246,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 10237,
+ "end": 10246,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10237,
+ "end": 10246,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 10237,
+ "end": 10246,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10237,
+ "end": 10246,
+ "name": "PUSH",
+ "value": "100"
+ },
+ {
+ "begin": 10237,
+ "end": 10246,
+ "name": "EXP"
+ },
+ {
+ "begin": 10237,
+ "end": 10246,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10237,
+ "end": 10246,
+ "name": "DIV"
+ },
+ {
+ "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": 10237,
+ "end": 10246,
+ "name": "AND"
+ },
+ {
+ "begin": 10210,
+ "end": 10227,
+ "name": "DUP4"
+ },
+ {
+ "begin": 10228,
+ "end": 10233,
+ "name": "DUP4"
+ },
+ {
+ "begin": 10210,
+ "end": 10234,
+ "name": "DUP2"
+ },
+ {
+ "begin": 10210,
+ "end": 10234,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 10210,
+ "end": 10234,
+ "name": "DUP2"
+ },
+ {
+ "begin": 10210,
+ "end": 10234,
+ "name": "LT"
+ },
+ {
+ "begin": 10210,
+ "end": 10234,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 10210,
+ "end": 10234,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 10210,
+ "end": 10234,
+ "name": "PUSH [tag]",
+ "value": "272"
+ },
+ {
+ "begin": 10210,
+ "end": 10234,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 10210,
+ "end": 10234,
+ "name": "INVALID"
+ },
+ {
+ "begin": 10210,
+ "end": 10234,
+ "name": "tag",
+ "value": "272"
+ },
+ {
+ "begin": 10210,
+ "end": 10234,
+ "name": "JUMPDEST"
+ },
+ {
+ "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": 10210,
+ "end": 10246,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10210,
+ "end": 10246,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 10210,
+ "end": 10246,
+ "name": "AND"
+ },
+ {
+ "begin": 10210,
+ "end": 10234,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 10210,
+ "end": 10234,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 10210,
+ "end": 10234,
+ "name": "DUP4"
+ },
+ {
+ "begin": 10210,
+ "end": 10234,
+ "name": "MUL"
+ },
+ {
+ "begin": 10210,
+ "end": 10234,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10210,
+ "end": 10234,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 10210,
+ "end": 10234,
+ "name": "ADD"
+ },
+ {
+ "begin": 10210,
+ "end": 10234,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10210,
+ "end": 10234,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 10210,
+ "end": 10234,
+ "name": "ADD"
+ },
+ {
+ "begin": 10210,
+ "end": 10246,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 10273,
+ "end": 10274,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 10264,
+ "end": 10274,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 10264,
+ "end": 10274,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10264,
+ "end": 10274,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 10264,
+ "end": 10274,
+ "name": "ADD"
+ },
+ {
+ "begin": 10264,
+ "end": 10274,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10147,
+ "end": 10289,
+ "name": "tag",
+ "value": "269"
+ },
+ {
+ "begin": 10147,
+ "end": 10289,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 10103,
+ "end": 10289,
+ "name": "tag",
+ "value": "266"
+ },
+ {
+ "begin": 10103,
+ "end": 10289,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 10130,
+ "end": 10133,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 10130,
+ "end": 10133,
+ "name": "ADD"
+ },
+ {
+ "begin": 10103,
+ "end": 10289,
+ "name": "PUSH [tag]",
+ "value": "264"
+ },
+ {
+ "begin": 10103,
+ "end": 10289,
+ "name": "JUMP"
+ },
+ {
+ "begin": 10103,
+ "end": 10289,
+ "name": "tag",
+ "value": "265"
+ },
+ {
+ "begin": 10103,
+ "end": 10289,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 10329,
+ "end": 10334,
+ "name": "DUP2"
+ },
+ {
+ "begin": 10315,
+ "end": 10335,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 10315,
+ "end": 10335,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 10315,
+ "end": 10335,
+ "name": "DUP1"
+ },
+ {
+ "begin": 10315,
+ "end": 10335,
+ "name": "MSIZE"
+ },
+ {
+ "begin": 10315,
+ "end": 10335,
+ "name": "LT"
+ },
+ {
+ "begin": 10315,
+ "end": 10335,
+ "name": "PUSH [tag]",
+ "value": "273"
+ },
+ {
+ "begin": 10315,
+ "end": 10335,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 10315,
+ "end": 10335,
+ "name": "POP"
+ },
+ {
+ "begin": 10315,
+ "end": 10335,
+ "name": "MSIZE"
+ },
+ {
+ "begin": 10315,
+ "end": 10335,
+ "name": "tag",
+ "value": "273"
+ },
+ {
+ "begin": 10315,
+ "end": 10335,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 10315,
+ "end": 10335,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10315,
+ "end": 10335,
+ "name": "DUP1"
+ },
+ {
+ "begin": 10315,
+ "end": 10335,
+ "name": "DUP3"
+ },
+ {
+ "begin": 10315,
+ "end": 10335,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 10315,
+ "end": 10335,
+ "name": "DUP1"
+ },
+ {
+ "begin": 10315,
+ "end": 10335,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 10315,
+ "end": 10335,
+ "name": "MUL"
+ },
+ {
+ "begin": 10315,
+ "end": 10335,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 10315,
+ "end": 10335,
+ "name": "ADD"
+ },
+ {
+ "begin": 10315,
+ "end": 10335,
+ "name": "DUP3"
+ },
+ {
+ "begin": 10315,
+ "end": 10335,
+ "name": "ADD"
+ },
+ {
+ "begin": 10315,
+ "end": 10335,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 10315,
+ "end": 10335,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 10315,
+ "end": 10335,
+ "name": "tag",
+ "value": "274"
+ },
+ {
+ "begin": 10315,
+ "end": 10335,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 10315,
+ "end": 10335,
+ "name": "POP"
+ },
+ {
+ "begin": 10298,
+ "end": 10335,
+ "name": "SWAP4"
+ },
+ {
+ "begin": 10298,
+ "end": 10335,
+ "name": "POP"
+ },
+ {
+ "begin": 10352,
+ "end": 10353,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 10350,
+ "end": 10353,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10350,
+ "end": 10353,
+ "name": "POP"
+ },
+ {
+ "begin": 10345,
+ "end": 10421,
+ "name": "tag",
+ "value": "275"
+ },
+ {
+ "begin": 10345,
+ "end": 10421,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 10357,
+ "end": 10362,
+ "name": "DUP2"
+ },
+ {
+ "begin": 10355,
+ "end": 10356,
+ "name": "DUP2"
+ },
+ {
+ "begin": 10355,
+ "end": 10362,
+ "name": "LT"
+ },
+ {
+ "begin": 10345,
+ "end": 10421,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 10345,
+ "end": 10421,
+ "name": "PUSH [tag]",
+ "value": "276"
+ },
+ {
+ "begin": 10345,
+ "end": 10421,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 10401,
+ "end": 10418,
+ "name": "DUP3"
+ },
+ {
+ "begin": 10419,
+ "end": 10420,
+ "name": "DUP2"
+ },
+ {
+ "begin": 10401,
+ "end": 10421,
+ "name": "DUP2"
+ },
+ {
+ "begin": 10401,
+ "end": 10421,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 10401,
+ "end": 10421,
+ "name": "DUP2"
+ },
+ {
+ "begin": 10401,
+ "end": 10421,
+ "name": "LT"
+ },
+ {
+ "begin": 10401,
+ "end": 10421,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 10401,
+ "end": 10421,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 10401,
+ "end": 10421,
+ "name": "PUSH [tag]",
+ "value": "278"
+ },
+ {
+ "begin": 10401,
+ "end": 10421,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 10401,
+ "end": 10421,
+ "name": "INVALID"
+ },
+ {
+ "begin": 10401,
+ "end": 10421,
+ "name": "tag",
+ "value": "278"
+ },
+ {
+ "begin": 10401,
+ "end": 10421,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 10401,
+ "end": 10421,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10401,
+ "end": 10421,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 10401,
+ "end": 10421,
+ "name": "ADD"
+ },
+ {
+ "begin": 10401,
+ "end": 10421,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10401,
+ "end": 10421,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 10401,
+ "end": 10421,
+ "name": "MUL"
+ },
+ {
+ "begin": 10401,
+ "end": 10421,
+ "name": "ADD"
+ },
+ {
+ "begin": 10401,
+ "end": 10421,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 10381,
+ "end": 10395,
+ "name": "DUP5"
+ },
+ {
+ "begin": 10396,
+ "end": 10397,
+ "name": "DUP3"
+ },
+ {
+ "begin": 10381,
+ "end": 10398,
+ "name": "DUP2"
+ },
+ {
+ "begin": 10381,
+ "end": 10398,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 10381,
+ "end": 10398,
+ "name": "DUP2"
+ },
+ {
+ "begin": 10381,
+ "end": 10398,
+ "name": "LT"
+ },
+ {
+ "begin": 10381,
+ "end": 10398,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 10381,
+ "end": 10398,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 10381,
+ "end": 10398,
+ "name": "PUSH [tag]",
+ "value": "279"
+ },
+ {
+ "begin": 10381,
+ "end": 10398,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 10381,
+ "end": 10398,
+ "name": "INVALID"
+ },
+ {
+ "begin": 10381,
+ "end": 10398,
+ "name": "tag",
+ "value": "279"
+ },
+ {
+ "begin": 10381,
+ "end": 10398,
+ "name": "JUMPDEST"
+ },
+ {
+ "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": 10381,
+ "end": 10421,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10381,
+ "end": 10421,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 10381,
+ "end": 10421,
+ "name": "AND"
+ },
+ {
+ "begin": 10381,
+ "end": 10398,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 10381,
+ "end": 10398,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 10381,
+ "end": 10398,
+ "name": "DUP4"
+ },
+ {
+ "begin": 10381,
+ "end": 10398,
+ "name": "MUL"
+ },
+ {
+ "begin": 10381,
+ "end": 10398,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10381,
+ "end": 10398,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 10381,
+ "end": 10398,
+ "name": "ADD"
+ },
+ {
+ "begin": 10381,
+ "end": 10398,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 10381,
+ "end": 10398,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 10381,
+ "end": 10398,
+ "name": "ADD"
+ },
+ {
+ "begin": 10381,
+ "end": 10421,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 10345,
+ "end": 10421,
+ "name": "tag",
+ "value": "277"
+ },
+ {
+ "begin": 10345,
+ "end": 10421,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 10364,
+ "end": 10367,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 10364,
+ "end": 10367,
+ "name": "ADD"
+ },
+ {
+ "begin": 10345,
+ "end": 10421,
+ "name": "PUSH [tag]",
+ "value": "275"
+ },
+ {
+ "begin": 10345,
+ "end": 10421,
+ "name": "JUMP"
+ },
+ {
+ "begin": 10345,
+ "end": 10421,
+ "name": "tag",
+ "value": "276"
+ },
+ {
+ "begin": 10345,
+ "end": 10421,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "tag",
+ "value": "261"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "POP"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "POP"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "POP"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "POP"
+ },
+ {
+ "begin": 9853,
+ "end": 10428,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "tag",
+ "value": "104"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "PUSH",
+ "value": "5"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1011,
+ "end": 1039,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 5010,
+ "end": 5217,
+ "name": "tag",
+ "value": "107"
+ },
+ {
+ "begin": 5010,
+ "end": 5217,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1228,
+ "end": 1232,
+ "name": "ADDRESS"
+ },
+ {
+ "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": 1206,
+ "end": 1233,
+ "name": "AND"
+ },
+ {
+ "begin": 1206,
+ "end": 1216,
+ "name": "CALLER"
+ },
+ {
+ "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": 1206,
+ "end": 1233,
+ "name": "AND"
+ },
+ {
+ "begin": 1206,
+ "end": 1233,
+ "name": "EQ"
+ },
+ {
+ "begin": 1206,
+ "end": 1233,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "PUSH [tag]",
+ "value": "281"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1247,
+ "end": 1252,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1247,
+ "end": 1252,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1247,
+ "end": 1252,
+ "name": "REVERT"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "tag",
+ "value": "281"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 5112,
+ "end": 5118,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 5112,
+ "end": 5125,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 5127,
+ "end": 5136,
+ "name": "DUP2"
+ },
+ {
+ "begin": 276,
+ "end": 278,
+ "name": "PUSH",
+ "value": "32"
+ },
+ {
+ "begin": 2256,
+ "end": 2284,
+ "name": "DUP3"
+ },
+ {
+ "begin": 2256,
+ "end": 2284,
+ "name": "GT"
+ },
+ {
+ "begin": 2256,
+ "end": 2284,
+ "name": "DUP1"
+ },
+ {
+ "begin": 2256,
+ "end": 2322,
+ "name": "PUSH [tag]",
+ "value": "283"
+ },
+ {
+ "begin": 2256,
+ "end": 2322,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 2256,
+ "end": 2322,
+ "name": "POP"
+ },
+ {
+ "begin": 2312,
+ "end": 2322,
+ "name": "DUP2"
+ },
+ {
+ "begin": 2300,
+ "end": 2309,
+ "name": "DUP2"
+ },
+ {
+ "begin": 2300,
+ "end": 2322,
+ "name": "GT"
+ },
+ {
+ "begin": 2256,
+ "end": 2322,
+ "name": "tag",
+ "value": "283"
+ },
+ {
+ "begin": 2256,
+ "end": 2322,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2256,
+ "end": 2352,
+ "name": "DUP1"
+ },
+ {
+ "begin": 2256,
+ "end": 2352,
+ "name": "PUSH [tag]",
+ "value": "284"
+ },
+ {
+ "begin": 2256,
+ "end": 2352,
+ "name": "JUMPI"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 2338,
+ "end": 2352,
+ "name": "DUP1"
+ },
+ {
+ "begin": 2338,
+ "end": 2352,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2256,
+ "end": 2352,
+ "name": "tag",
+ "value": "284"
+ },
+ {
+ "begin": 2256,
+ "end": 2352,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2256,
+ "end": 2383,
+ "name": "DUP1"
+ },
+ {
+ "begin": 2256,
+ "end": 2383,
+ "name": "PUSH [tag]",
+ "value": "285"
+ },
+ {
+ "begin": 2256,
+ "end": 2383,
+ "name": "JUMPI"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 2368,
+ "end": 2383,
+ "name": "DUP2"
+ },
+ {
+ "begin": 2368,
+ "end": 2383,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2256,
+ "end": 2383,
+ "name": "tag",
+ "value": "285"
+ },
+ {
+ "begin": 2256,
+ "end": 2383,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2249,
+ "end": 2402,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2249,
+ "end": 2402,
+ "name": "PUSH [tag]",
+ "value": "286"
+ },
+ {
+ "begin": 2249,
+ "end": 2402,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 2397,
+ "end": 2402,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2397,
+ "end": 2402,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2397,
+ "end": 2402,
+ "name": "REVERT"
+ },
+ {
+ "begin": 2249,
+ "end": 2402,
+ "name": "tag",
+ "value": "286"
+ },
+ {
+ "begin": 2249,
+ "end": 2402,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 5152,
+ "end": 5160,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 5152,
+ "end": 5172,
+ "name": "DUP4"
+ },
+ {
+ "begin": 5152,
+ "end": 5172,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 5152,
+ "end": 5172,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 5182,
+ "end": 5210,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 5182,
+ "end": 5210,
+ "name": "DUP1"
+ },
+ {
+ "begin": 5182,
+ "end": 5210,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 5182,
+ "end": 5210,
+ "name": "DUP5"
+ },
+ {
+ "begin": 5182,
+ "end": 5210,
+ "name": "DUP2"
+ },
+ {
+ "begin": 5182,
+ "end": 5210,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 5182,
+ "end": 5210,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 5182,
+ "end": 5210,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 5182,
+ "end": 5210,
+ "name": "PUSH",
+ "value": "A3F1EE9126A074D9326C682F561767F710E927FAA811F7A99829D49DC421797A"
+ },
+ {
+ "begin": 5182,
+ "end": 5210,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 5182,
+ "end": 5210,
+ "name": "DUP2"
+ },
+ {
+ "begin": 5182,
+ "end": 5210,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 5182,
+ "end": 5210,
+ "name": "SUB"
+ },
+ {
+ "begin": 5182,
+ "end": 5210,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 5182,
+ "end": 5210,
+ "name": "ADD"
+ },
+ {
+ "begin": 5182,
+ "end": 5210,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 5182,
+ "end": 5210,
+ "name": "LOG1"
+ },
+ {
+ "begin": 2412,
+ "end": 2413,
+ "name": "tag",
+ "value": "287"
+ },
+ {
+ "begin": 2412,
+ "end": 2413,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1262,
+ "end": 1263,
+ "name": "tag",
+ "value": "282"
+ },
+ {
+ "begin": 1262,
+ "end": 1263,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1262,
+ "end": 1263,
+ "name": "POP"
+ },
+ {
+ "begin": 1262,
+ "end": 1263,
+ "name": "POP"
+ },
+ {
+ "begin": 5010,
+ "end": 5217,
+ "name": "tag",
+ "value": "280"
+ },
+ {
+ "begin": 5010,
+ "end": 5217,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 5010,
+ "end": 5217,
+ "name": "POP"
+ },
+ {
+ "begin": 5010,
+ "end": 5217,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 2593,
+ "end": 3052,
+ "name": "tag",
+ "value": "110"
+ },
+ {
+ "begin": 2593,
+ "end": 3052,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2676,
+ "end": 2686,
+ "name": "CALLER"
+ },
+ {
+ "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": 1440,
+ "end": 1454,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "AND"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1440,
+ "end": 1447,
+ "name": "PUSH",
+ "value": "2"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "SHA3"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "AND"
+ },
+ {
+ "begin": 1439,
+ "end": 1454,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1435,
+ "end": 1473,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1435,
+ "end": 1473,
+ "name": "PUSH [tag]",
+ "value": "289"
+ },
+ {
+ "begin": 1435,
+ "end": 1473,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1468,
+ "end": 1473,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1468,
+ "end": 1473,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1468,
+ "end": 1473,
+ "name": "REVERT"
+ },
+ {
+ "begin": 1435,
+ "end": 1473,
+ "name": "tag",
+ "value": "289"
+ },
+ {
+ "begin": 1435,
+ "end": 1473,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1558,
+ "end": 1570,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1558,
+ "end": 1585,
+ "name": "DUP3"
+ },
+ {
+ "begin": 1558,
+ "end": 1585,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1558,
+ "end": 1585,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1558,
+ "end": 1585,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1558,
+ "end": 1585,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1558,
+ "end": 1585,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1558,
+ "end": 1585,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1558,
+ "end": 1585,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 1558,
+ "end": 1585,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1558,
+ "end": 1585,
+ "name": "SHA3"
+ },
+ {
+ "begin": 1558,
+ "end": 1597,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 2714,
+ "end": 2727,
+ "name": "DUP3"
+ },
+ {
+ "begin": 2714,
+ "end": 2727,
+ "name": "SWAP1"
+ },
+ {
+ "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": 1558,
+ "end": 1597,
+ "name": "AND"
+ },
+ {
+ "begin": 1558,
+ "end": 1602,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1554,
+ "end": 1621,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1554,
+ "end": 1621,
+ "name": "PUSH [tag]",
+ "value": "291"
+ },
+ {
+ "begin": 1554,
+ "end": 1621,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1616,
+ "end": 1621,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1616,
+ "end": 1621,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1616,
+ "end": 1621,
+ "name": "REVERT"
+ },
+ {
+ "begin": 1554,
+ "end": 1621,
+ "name": "tag",
+ "value": "291"
+ },
+ {
+ "begin": 1554,
+ "end": 1621,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1863,
+ "end": 1891,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1863,
+ "end": 1891,
+ "name": "DUP4"
+ },
+ {
+ "begin": 1863,
+ "end": 1891,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1863,
+ "end": 1891,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1863,
+ "end": 1876,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 1863,
+ "end": 1891,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1863,
+ "end": 1891,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1863,
+ "end": 1891,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1863,
+ "end": 1891,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1863,
+ "end": 1891,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 1863,
+ "end": 1891,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1863,
+ "end": 1891,
+ "name": "DUP4"
+ },
+ {
+ "begin": 1863,
+ "end": 1891,
+ "name": "SHA3"
+ },
+ {
+ "begin": 2765,
+ "end": 2775,
+ "name": "CALLER"
+ },
+ {
+ "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": 1863,
+ "end": 1898,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1863,
+ "end": 1898,
+ "name": "AND"
+ },
+ {
+ "begin": 1863,
+ "end": 1898,
+ "name": "DUP6"
+ },
+ {
+ "begin": 1863,
+ "end": 1898,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1863,
+ "end": 1898,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 1863,
+ "end": 1898,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1863,
+ "end": 1898,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1863,
+ "end": 1898,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 1863,
+ "end": 1898,
+ "name": "SHA3"
+ },
+ {
+ "begin": 1863,
+ "end": 1898,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 1863,
+ "end": 1891,
+ "name": "DUP5"
+ },
+ {
+ "begin": 1863,
+ "end": 1891,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 2765,
+ "end": 2775,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1863,
+ "end": 1898,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": 1863,
+ "end": 1898,
+ "name": "AND"
+ },
+ {
+ "begin": 1859,
+ "end": 1917,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1859,
+ "end": 1917,
+ "name": "PUSH [tag]",
+ "value": "293"
+ },
+ {
+ "begin": 1859,
+ "end": 1917,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1912,
+ "end": 1917,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1912,
+ "end": 1917,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1912,
+ "end": 1917,
+ "name": "REVERT"
+ },
+ {
+ "begin": 1859,
+ "end": 1917,
+ "name": "tag",
+ "value": "293"
+ },
+ {
+ "begin": 1859,
+ "end": 1917,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2803,
+ "end": 2816,
+ "name": "DUP5"
+ },
+ {
+ "begin": 1185,
+ "end": 1211,
+ "name": "PUSH [tag]",
+ "value": "295"
+ },
+ {
+ "begin": 1197,
+ "end": 1210,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1185,
+ "end": 1196,
+ "name": "PUSH [tag]",
+ "value": "71"
+ },
+ {
+ "begin": 1185,
+ "end": 1211,
+ "name": "JUMP",
+ "value": "[in]"
+ },
+ {
+ "begin": 1185,
+ "end": 1211,
+ "name": "tag",
+ "value": "295"
+ },
+ {
+ "begin": 1185,
+ "end": 1211,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1184,
+ "end": 1211,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1176,
+ "end": 1212,
+ "name": "PUSH [tag]",
+ "value": "296"
+ },
+ {
+ "begin": 1176,
+ "end": 1212,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1176,
+ "end": 1212,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1176,
+ "end": 1212,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1176,
+ "end": 1212,
+ "name": "REVERT"
+ },
+ {
+ "begin": 1176,
+ "end": 1212,
+ "name": "tag",
+ "value": "296"
+ },
+ {
+ "begin": 1176,
+ "end": 1212,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2832,
+ "end": 2860,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2832,
+ "end": 2860,
+ "name": "DUP7"
+ },
+ {
+ "begin": 2832,
+ "end": 2860,
+ "name": "DUP2"
+ },
+ {
+ "begin": 2832,
+ "end": 2860,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 2875,
+ "end": 2879,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 2832,
+ "end": 2860,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 2832,
+ "end": 2860,
+ "name": "DUP2"
+ },
+ {
+ "begin": 2832,
+ "end": 2860,
+ "name": "DUP2"
+ },
+ {
+ "begin": 2832,
+ "end": 2860,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 2832,
+ "end": 2860,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 2832,
+ "end": 2860,
+ "name": "DUP1"
+ },
+ {
+ "begin": 2832,
+ "end": 2860,
+ "name": "DUP5"
+ },
+ {
+ "begin": 2832,
+ "end": 2860,
+ "name": "SHA3"
+ },
+ {
+ "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": 2861,
+ "end": 2871,
+ "name": "CALLER"
+ },
+ {
+ "begin": 2832,
+ "end": 2872,
+ "name": "AND"
+ },
+ {
+ "begin": 2832,
+ "end": 2872,
+ "name": "DUP1"
+ },
+ {
+ "begin": 2832,
+ "end": 2872,
+ "name": "DUP7"
+ },
+ {
+ "begin": 2832,
+ "end": 2872,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 2832,
+ "end": 2872,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 2832,
+ "end": 2872,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 2832,
+ "end": 2872,
+ "name": "DUP1"
+ },
+ {
+ "begin": 2832,
+ "end": 2872,
+ "name": "DUP5"
+ },
+ {
+ "begin": 2832,
+ "end": 2872,
+ "name": "SHA3"
+ },
+ {
+ "begin": 2832,
+ "end": 2879,
+ "name": "DUP1"
+ },
+ {
+ "begin": 2832,
+ "end": 2879,
+ "name": "SLOAD"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 2832,
+ "end": 2879,
+ "name": "AND"
+ },
+ {
+ "begin": 2832,
+ "end": 2879,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 2832,
+ "end": 2879,
+ "name": "SWAP4"
+ },
+ {
+ "begin": 2832,
+ "end": 2879,
+ "name": "OR"
+ },
+ {
+ "begin": 2832,
+ "end": 2879,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 2832,
+ "end": 2879,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 2832,
+ "end": 2879,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 2889,
+ "end": 2928,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 2889,
+ "end": 2928,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 2846,
+ "end": 2859,
+ "name": "DUP9"
+ },
+ {
+ "begin": 2846,
+ "end": 2859,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 2889,
+ "end": 2928,
+ "name": "PUSH",
+ "value": "4A504A94899432A9846E1AA406DCEB1BCFD538BB839071D49D1E5E23F5BE30EF"
+ },
+ {
+ "begin": 2889,
+ "end": 2928,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 2889,
+ "end": 2928,
+ "name": "LOG3"
+ },
+ {
+ "begin": 2942,
+ "end": 2968,
+ "name": "PUSH [tag]",
+ "value": "298"
+ },
+ {
+ "begin": 2954,
+ "end": 2967,
+ "name": "DUP7"
+ },
+ {
+ "begin": 2942,
+ "end": 2953,
+ "name": "PUSH [tag]",
+ "value": "71"
+ },
+ {
+ "begin": 2942,
+ "end": 2968,
+ "name": "JUMP",
+ "value": "[in]"
+ },
+ {
+ "begin": 2942,
+ "end": 2968,
+ "name": "tag",
+ "value": "298"
+ },
+ {
+ "begin": 2942,
+ "end": 2968,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2938,
+ "end": 3046,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2938,
+ "end": 3046,
+ "name": "PUSH [tag]",
+ "value": "165"
+ },
+ {
+ "begin": 2938,
+ "end": 3046,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 2984,
+ "end": 3035,
+ "name": "PUSH [tag]",
+ "value": "165"
+ },
+ {
+ "begin": 3004,
+ "end": 3017,
+ "name": "DUP7"
+ },
+ {
+ "begin": 3019,
+ "end": 3034,
+ "name": "TIMESTAMP"
+ },
+ {
+ "begin": 2984,
+ "end": 3003,
+ "name": "PUSH [tag]",
+ "value": "301"
+ },
+ {
+ "begin": 2984,
+ "end": 3035,
+ "name": "JUMP",
+ "value": "[in]"
+ },
+ {
+ "begin": 2984,
+ "end": 3035,
+ "name": "tag",
+ "value": "300"
+ },
+ {
+ "begin": 2984,
+ "end": 3035,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2938,
+ "end": 3046,
+ "name": "tag",
+ "value": "299"
+ },
+ {
+ "begin": 2938,
+ "end": 3046,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1222,
+ "end": 1223,
+ "name": "tag",
+ "value": "297"
+ },
+ {
+ "begin": 1222,
+ "end": 1223,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1927,
+ "end": 1928,
+ "name": "tag",
+ "value": "294"
+ },
+ {
+ "begin": 1927,
+ "end": 1928,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1927,
+ "end": 1928,
+ "name": "POP"
+ },
+ {
+ "begin": 1631,
+ "end": 1632,
+ "name": "tag",
+ "value": "292"
+ },
+ {
+ "begin": 1631,
+ "end": 1632,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1631,
+ "end": 1632,
+ "name": "POP"
+ },
+ {
+ "begin": 1631,
+ "end": 1632,
+ "name": "POP"
+ },
+ {
+ "begin": 1483,
+ "end": 1484,
+ "name": "tag",
+ "value": "290"
+ },
+ {
+ "begin": 1483,
+ "end": 1484,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1483,
+ "end": 1484,
+ "name": "POP"
+ },
+ {
+ "begin": 2593,
+ "end": 3052,
+ "name": "tag",
+ "value": "288"
+ },
+ {
+ "begin": 2593,
+ "end": 3052,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2593,
+ "end": 3052,
+ "name": "POP"
+ },
+ {
+ "begin": 2593,
+ "end": 3052,
+ "name": "POP"
+ },
+ {
+ "begin": 2593,
+ "end": 3052,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 1058,
+ "end": 1303,
+ "name": "tag",
+ "value": "113"
+ },
+ {
+ "begin": 1058,
+ "end": 1303,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1203,
+ "end": 1207,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1443,
+ "end": 1470,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1443,
+ "end": 1470,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1443,
+ "end": 1470,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1443,
+ "end": 1470,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1443,
+ "end": 1470,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1443,
+ "end": 1470,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1443,
+ "end": 1470,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1443,
+ "end": 1470,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 1443,
+ "end": 1470,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1443,
+ "end": 1470,
+ "name": "DUP4"
+ },
+ {
+ "begin": 1443,
+ "end": 1470,
+ "name": "SHA3"
+ },
+ {
+ "begin": 1511,
+ "end": 1525,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1511,
+ "end": 1525,
+ "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": 1511,
+ "end": 1525,
+ "name": "AND"
+ },
+ {
+ "begin": 1488,
+ "end": 1526,
+ "name": "DUP5"
+ },
+ {
+ "begin": 1488,
+ "end": 1526,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1488,
+ "end": 1510,
+ "name": "PUSH",
+ "value": "8"
+ },
+ {
+ "begin": 1488,
+ "end": 1526,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1488,
+ "end": 1526,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 1488,
+ "end": 1526,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1488,
+ "end": 1526,
+ "name": "DUP3"
+ },
+ {
+ "begin": 1488,
+ "end": 1526,
+ "name": "SHA3"
+ },
+ {
+ "begin": 1488,
+ "end": 1526,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 1182,
+ "end": 1184,
+ "name": "DUP4"
+ },
+ {
+ "begin": 1182,
+ "end": 1184,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 1443,
+ "end": 1470,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1488,
+ "end": 1526,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": 1488,
+ "end": 1526,
+ "name": "AND"
+ },
+ {
+ "begin": 1480,
+ "end": 1527,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1480,
+ "end": 1527,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1480,
+ "end": 1527,
+ "name": "PUSH [tag]",
+ "value": "303"
+ },
+ {
+ "begin": 1480,
+ "end": 1527,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1480,
+ "end": 1527,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1480,
+ "end": 1527,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1480,
+ "end": 1527,
+ "name": "REVERT"
+ },
+ {
+ "begin": 1480,
+ "end": 1527,
+ "name": "tag",
+ "value": "303"
+ },
+ {
+ "begin": 1480,
+ "end": 1527,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "PUSH",
+ "value": "72656D6F7665417574686F72697A6564416464726573734174496E6465782861"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "MSTORE"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "88"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "2"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "EXP"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "6464726573732C75696E7432353629"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "MUL"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "DUP4"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "ADD"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "DUP3"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "PUSH",
+ "value": "2F"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "SUB"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "ADD"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "DUP3"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "SHA3"
+ },
+ {
+ "begin": 1556,
+ "end": 1563,
+ "name": "PUSH",
+ "value": "2"
+ },
+ {
+ "begin": 1556,
+ "end": 1563,
+ "name": "DUP6"
+ },
+ {
+ "begin": 1556,
+ "end": 1563,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1556,
+ "end": 1563,
+ "name": "ADD"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "AND"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "PUSH",
+ "value": "100"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "MUL"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "ADD"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "AND"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DIV"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "PUSH",
+ "value": "1F"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "ADD"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP5"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DIV"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP5"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "MUL"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP6"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "ADD"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP5"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "ADD"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SWAP6"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP5"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP5"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "MSTORE"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "E0"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "2"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "EXP"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "SUB"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 1545,
+ "end": 1614,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1545,
+ "end": 1614,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 1545,
+ "end": 1614,
+ "name": "AND"
+ },
+ {
+ "begin": 1545,
+ "end": 1614,
+ "name": "SWAP4"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "PUSH [tag]",
+ "value": "304"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SWAP4"
+ },
+ {
+ "begin": 1121,
+ "end": 1181,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP4"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "ADD"
+ },
+ {
+ "begin": 1556,
+ "end": 1563,
+ "name": "DUP3"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP3"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "PUSH [tag]",
+ "value": "174"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "PUSH",
+ "value": "1F"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "LT"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "PUSH [tag]",
+ "value": "175"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "PUSH",
+ "value": "100"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP4"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DIV"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "MUL"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP4"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "ADD"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "PUSH [tag]",
+ "value": "174"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "JUMP"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "tag",
+ "value": "306"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP3"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "ADD"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SHA3"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "tag",
+ "value": "307"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "ADD"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "ADD"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP1"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP4"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "GT"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "PUSH [tag]",
+ "value": "176"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP3"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SUB"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "PUSH",
+ "value": "1F"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "AND"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "DUP3"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "ADD"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "tag",
+ "value": "305"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "POP"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "POP"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "POP"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "POP"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "POP"
+ },
+ {
+ "begin": 1565,
+ "end": 1566,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1545,
+ "end": 1555,
+ "name": "PUSH [tag]",
+ "value": "177"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "JUMP",
+ "value": "[in]"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "tag",
+ "value": "304"
+ },
+ {
+ "begin": 1545,
+ "end": 1567,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "E0"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "2"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "EXP"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "SUB"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 1545,
+ "end": 1614,
+ "name": "AND"
+ },
+ {
+ "begin": 1545,
+ "end": 1614,
+ "name": "EQ"
+ },
+ {
+ "begin": 1537,
+ "end": 1615,
+ "name": "PUSH [tag]",
+ "value": "308"
+ },
+ {
+ "begin": 1537,
+ "end": 1615,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1537,
+ "end": 1615,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1537,
+ "end": 1615,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1537,
+ "end": 1615,
+ "name": "REVERT"
+ },
+ {
+ "begin": 1537,
+ "end": 1615,
+ "name": "tag",
+ "value": "308"
+ },
+ {
+ "begin": 1537,
+ "end": 1615,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1292,
+ "end": 1296,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 1285,
+ "end": 1296,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 1285,
+ "end": 1296,
+ "name": "POP"
+ },
+ {
+ "begin": 1625,
+ "end": 1626,
+ "name": "tag",
+ "value": "309"
+ },
+ {
+ "begin": 1625,
+ "end": 1626,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1058,
+ "end": 1303,
+ "name": "tag",
+ "value": "302"
+ },
+ {
+ "begin": 1058,
+ "end": 1303,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1058,
+ "end": 1303,
+ "name": "POP"
+ },
+ {
+ "begin": 1058,
+ "end": 1303,
+ "name": "POP"
+ },
+ {
+ "begin": 1058,
+ "end": 1303,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 1058,
+ "end": 1303,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1058,
+ "end": 1303,
+ "name": "POP"
+ },
+ {
+ "begin": 1058,
+ "end": 1303,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "tag",
+ "value": "116"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 5580,
+ "end": 5598,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 5630,
+ "end": 5670,
+ "name": "PUSH [tag]",
+ "value": "311"
+ },
+ {
+ "begin": 5645,
+ "end": 5656,
+ "name": "DUP5"
+ },
+ {
+ "begin": 5658,
+ "end": 5663,
+ "name": "DUP5"
+ },
+ {
+ "begin": 5665,
+ "end": 5669,
+ "name": "DUP5"
+ },
+ {
+ "begin": 5630,
+ "end": 5644,
+ "name": "PUSH [tag]",
+ "value": "312"
+ },
+ {
+ "begin": 5630,
+ "end": 5670,
+ "name": "JUMP",
+ "value": "[in]"
+ },
+ {
+ "begin": 5630,
+ "end": 5670,
+ "name": "tag",
+ "value": "311"
+ },
+ {
+ "begin": 5630,
+ "end": 5670,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 5614,
+ "end": 5670,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 5614,
+ "end": 5670,
+ "name": "POP"
+ },
+ {
+ "begin": 5680,
+ "end": 5713,
+ "name": "PUSH [tag]",
+ "value": "313"
+ },
+ {
+ "begin": 5699,
+ "end": 5712,
+ "name": "DUP2"
+ },
+ {
+ "begin": 5680,
+ "end": 5698,
+ "name": "PUSH [tag]",
+ "value": "110"
+ },
+ {
+ "begin": 5680,
+ "end": 5713,
+ "name": "JUMP",
+ "value": "[in]"
+ },
+ {
+ "begin": 5680,
+ "end": 5713,
+ "name": "tag",
+ "value": "313"
+ },
+ {
+ "begin": 5680,
+ "end": 5713,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "tag",
+ "value": "310"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "SWAP4"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "POP"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "POP"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "POP"
+ },
+ {
+ "begin": 5476,
+ "end": 5720,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "tag",
+ "value": "119"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2092,
+ "end": 2105,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2130,
+ "end": 2150,
+ "name": "PUSH [tag]",
+ "value": "315"
+ },
+ {
+ "begin": 2141,
+ "end": 2142,
+ "name": "DUP4"
+ },
+ {
+ "begin": 2144,
+ "end": 2149,
+ "name": "DUP4"
+ },
+ {
+ "begin": 2130,
+ "end": 2140,
+ "name": "PUSH [tag]",
+ "value": "177"
+ },
+ {
+ "begin": 2130,
+ "end": 2150,
+ "name": "JUMP",
+ "value": "[in]"
+ },
+ {
+ "begin": 2130,
+ "end": 2150,
+ "name": "tag",
+ "value": "315"
+ },
+ {
+ "begin": 2130,
+ "end": 2150,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2121,
+ "end": 2150,
+ "name": "SWAP1"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "tag",
+ "value": "314"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "POP"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "POP"
+ },
+ {
+ "begin": 1981,
+ "end": 2180,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "tag",
+ "value": "122"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "PUSH",
+ "value": "7"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "SHA3"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1065,
+ "end": 1112,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "tag",
+ "value": "125"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 276,
+ "end": 278,
+ "name": "PUSH",
+ "value": "32"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "DUP2"
+ },
+ {
+ "begin": 237,
+ "end": 278,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "tag",
+ "value": "128"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "DUP2"
+ },
+ {
+ "begin": 985,
+ "end": 1005,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "tag",
+ "value": "131"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 4561,
+ "end": 4567,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1228,
+ "end": 1232,
+ "name": "ADDRESS"
+ },
+ {
+ "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": 1206,
+ "end": 1233,
+ "name": "AND"
+ },
+ {
+ "begin": 1206,
+ "end": 1216,
+ "name": "CALLER"
+ },
+ {
+ "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": 1206,
+ "end": 1233,
+ "name": "AND"
+ },
+ {
+ "begin": 1206,
+ "end": 1233,
+ "name": "EQ"
+ },
+ {
+ "begin": 1206,
+ "end": 1233,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "PUSH [tag]",
+ "value": "317"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1247,
+ "end": 1252,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1247,
+ "end": 1252,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1247,
+ "end": 1252,
+ "name": "REVERT"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "tag",
+ "value": "317"
+ },
+ {
+ "begin": 1202,
+ "end": 1252,
+ "name": "JUMPDEST"
+ },
+ {
+ "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": 1440,
+ "end": 1454,
+ "name": "DUP4"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "AND"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1440,
+ "end": 1447,
+ "name": "PUSH",
+ "value": "2"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "SHA3"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 4499,
+ "end": 4504,
+ "name": "DUP4"
+ },
+ {
+ "begin": 4499,
+ "end": 4504,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": 1440,
+ "end": 1454,
+ "name": "AND"
+ },
+ {
+ "begin": 1439,
+ "end": 1454,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1435,
+ "end": 1473,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1435,
+ "end": 1473,
+ "name": "PUSH [tag]",
+ "value": "319"
+ },
+ {
+ "begin": 1435,
+ "end": 1473,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1468,
+ "end": 1473,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1468,
+ "end": 1473,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1468,
+ "end": 1473,
+ "name": "REVERT"
+ },
+ {
+ "begin": 1435,
+ "end": 1473,
+ "name": "tag",
+ "value": "319"
+ },
+ {
+ "begin": 1435,
+ "end": 1473,
+ "name": "JUMPDEST"
+ },
+ {
+ "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": 1332,
+ "end": 1346,
+ "name": "DUP4"
+ },
+ {
+ "begin": 1332,
+ "end": 1346,
+ "name": "AND"
+ },
+ {
+ "begin": 1332,
+ "end": 1346,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1332,
+ "end": 1346,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1332,
+ "end": 1346,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1332,
+ "end": 1346,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1332,
+ "end": 1339,
+ "name": "PUSH",
+ "value": "2"
+ },
+ {
+ "begin": 1332,
+ "end": 1346,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1332,
+ "end": 1346,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1332,
+ "end": 1346,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 1332,
+ "end": 1346,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1332,
+ "end": 1346,
+ "name": "SHA3"
+ },
+ {
+ "begin": 1332,
+ "end": 1346,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 4532,
+ "end": 4540,
+ "name": "DUP4"
+ },
+ {
+ "begin": 4532,
+ "end": 4540,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1332,
+ "end": 1346,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": 1332,
+ "end": 1346,
+ "name": "AND"
+ },
+ {
+ "begin": 1328,
+ "end": 1365,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1328,
+ "end": 1365,
+ "name": "PUSH [tag]",
+ "value": "321"
+ },
+ {
+ "begin": 1328,
+ "end": 1365,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1360,
+ "end": 1365,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1360,
+ "end": 1365,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1360,
+ "end": 1365,
+ "name": "REVERT"
+ },
+ {
+ "begin": 1328,
+ "end": 1365,
+ "name": "tag",
+ "value": "321"
+ },
+ {
+ "begin": 1328,
+ "end": 1365,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 4568,
+ "end": 4569,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 4561,
+ "end": 4569,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 4561,
+ "end": 4569,
+ "name": "POP"
+ },
+ {
+ "begin": 4556,
+ "end": 4705,
+ "name": "tag",
+ "value": "323"
+ },
+ {
+ "begin": 4556,
+ "end": 4705,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 4573,
+ "end": 4579,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 4573,
+ "end": 4586,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 4571,
+ "end": 4586,
+ "name": "DUP4"
+ },
+ {
+ "begin": 4571,
+ "end": 4586,
+ "name": "LT"
+ },
+ {
+ "begin": 4556,
+ "end": 4705,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 4556,
+ "end": 4705,
+ "name": "PUSH [tag]",
+ "value": "324"
+ },
+ {
+ "begin": 4556,
+ "end": 4705,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 4622,
+ "end": 4627,
+ "name": "DUP5"
+ },
+ {
+ "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": 4609,
+ "end": 4627,
+ "name": "AND"
+ },
+ {
+ "begin": 4609,
+ "end": 4615,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 4616,
+ "end": 4617,
+ "name": "DUP5"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "DUP2"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "DUP2"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "LT"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "PUSH [tag]",
+ "value": "326"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "INVALID"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "tag",
+ "value": "326"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "SHA3"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "ADD"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "tag",
+ "value": "327"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "PUSH",
+ "value": "100"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "EXP"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4609,
+ "end": 4618,
+ "name": "DIV"
+ },
+ {
+ "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": 4609,
+ "end": 4618,
+ "name": "AND"
+ },
+ {
+ "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": 4609,
+ "end": 4627,
+ "name": "AND"
+ },
+ {
+ "begin": 4609,
+ "end": 4627,
+ "name": "EQ"
+ },
+ {
+ "begin": 4605,
+ "end": 4705,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 4605,
+ "end": 4705,
+ "name": "PUSH [tag]",
+ "value": "328"
+ },
+ {
+ "begin": 4605,
+ "end": 4705,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 4659,
+ "end": 4667,
+ "name": "DUP4"
+ },
+ {
+ "begin": 4647,
+ "end": 4653,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 4654,
+ "end": 4655,
+ "name": "DUP5"
+ },
+ {
+ "begin": 4647,
+ "end": 4656,
+ "name": "DUP2"
+ },
+ {
+ "begin": 4647,
+ "end": 4656,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 4647,
+ "end": 4656,
+ "name": "DUP2"
+ },
+ {
+ "begin": 4647,
+ "end": 4656,
+ "name": "LT"
+ },
+ {
+ "begin": 4647,
+ "end": 4656,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 4647,
+ "end": 4656,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 4647,
+ "end": 4656,
+ "name": "PUSH [tag]",
+ "value": "329"
+ },
+ {
+ "begin": 4647,
+ "end": 4656,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 4647,
+ "end": 4656,
+ "name": "INVALID"
+ },
+ {
+ "begin": 4647,
+ "end": 4656,
+ "name": "tag",
+ "value": "329"
+ },
+ {
+ "begin": 4647,
+ "end": 4656,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 4647,
+ "end": 4656,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4647,
+ "end": 4656,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 4647,
+ "end": 4656,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 4647,
+ "end": 4656,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 4647,
+ "end": 4656,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 4647,
+ "end": 4656,
+ "name": "SHA3"
+ },
+ {
+ "begin": 4647,
+ "end": 4656,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4647,
+ "end": 4656,
+ "name": "ADD"
+ },
+ {
+ "begin": 4647,
+ "end": 4656,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 4647,
+ "end": 4656,
+ "name": "tag",
+ "value": "330"
+ },
+ {
+ "begin": 4647,
+ "end": 4656,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 4647,
+ "end": 4667,
+ "name": "PUSH",
+ "value": "100"
+ },
+ {
+ "begin": 4647,
+ "end": 4667,
+ "name": "EXP"
+ },
+ {
+ "begin": 4647,
+ "end": 4667,
+ "name": "DUP2"
+ },
+ {
+ "begin": 4647,
+ "end": 4667,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 4647,
+ "end": 4667,
+ "name": "DUP2"
+ },
+ {
+ "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": 4647,
+ "end": 4667,
+ "name": "MUL"
+ },
+ {
+ "begin": 4647,
+ "end": 4667,
+ "name": "NOT"
+ },
+ {
+ "begin": 4647,
+ "end": 4667,
+ "name": "AND"
+ },
+ {
+ "begin": 4647,
+ "end": 4667,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4647,
+ "end": 4667,
+ "name": "DUP4"
+ },
+ {
+ "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": 4647,
+ "end": 4667,
+ "name": "AND"
+ },
+ {
+ "begin": 4647,
+ "end": 4667,
+ "name": "MUL"
+ },
+ {
+ "begin": 4647,
+ "end": 4667,
+ "name": "OR"
+ },
+ {
+ "begin": 4647,
+ "end": 4667,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4647,
+ "end": 4667,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 4647,
+ "end": 4667,
+ "name": "POP"
+ },
+ {
+ "begin": 4685,
+ "end": 4690,
+ "name": "PUSH [tag]",
+ "value": "324"
+ },
+ {
+ "begin": 4685,
+ "end": 4690,
+ "name": "JUMP"
+ },
+ {
+ "begin": 4605,
+ "end": 4705,
+ "name": "tag",
+ "value": "328"
+ },
+ {
+ "begin": 4605,
+ "end": 4705,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 4556,
+ "end": 4705,
+ "name": "tag",
+ "value": "325"
+ },
+ {
+ "begin": 4556,
+ "end": 4705,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 4588,
+ "end": 4591,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 4588,
+ "end": 4591,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4588,
+ "end": 4591,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 4588,
+ "end": 4591,
+ "name": "ADD"
+ },
+ {
+ "begin": 4588,
+ "end": 4591,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 4556,
+ "end": 4705,
+ "name": "PUSH [tag]",
+ "value": "323"
+ },
+ {
+ "begin": 4556,
+ "end": 4705,
+ "name": "JUMP"
+ },
+ {
+ "begin": 4556,
+ "end": 4705,
+ "name": "tag",
+ "value": "324"
+ },
+ {
+ "begin": 4556,
+ "end": 4705,
+ "name": "JUMPDEST"
+ },
+ {
+ "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": 4714,
+ "end": 4728,
+ "name": "DUP1"
+ },
+ {
+ "begin": 4714,
+ "end": 4728,
+ "name": "DUP7"
+ },
+ {
+ "begin": 4714,
+ "end": 4728,
+ "name": "AND"
+ },
+ {
+ "begin": 4731,
+ "end": 4736,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 4714,
+ "end": 4728,
+ "name": "DUP2"
+ },
+ {
+ "begin": 4714,
+ "end": 4728,
+ "name": "DUP2"
+ },
+ {
+ "begin": 4714,
+ "end": 4728,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 4714,
+ "end": 4721,
+ "name": "PUSH",
+ "value": "2"
+ },
+ {
+ "begin": 4714,
+ "end": 4728,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 4714,
+ "end": 4728,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 4714,
+ "end": 4728,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 4714,
+ "end": 4728,
+ "name": "DUP1"
+ },
+ {
+ "begin": 4714,
+ "end": 4728,
+ "name": "DUP3"
+ },
+ {
+ "begin": 4714,
+ "end": 4728,
+ "name": "SHA3"
+ },
+ {
+ "begin": 4714,
+ "end": 4736,
+ "name": "DUP1"
+ },
+ {
+ "begin": 4714,
+ "end": 4736,
+ "name": "SLOAD"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 4714,
+ "end": 4736,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4714,
+ "end": 4736,
+ "name": "DUP2"
+ },
+ {
+ "begin": 4714,
+ "end": 4736,
+ "name": "AND"
+ },
+ {
+ "begin": 4714,
+ "end": 4736,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4714,
+ "end": 4736,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 4714,
+ "end": 4736,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 4746,
+ "end": 4763,
+ "name": "SWAP4"
+ },
+ {
+ "begin": 4746,
+ "end": 4763,
+ "name": "DUP9"
+ },
+ {
+ "begin": 4746,
+ "end": 4763,
+ "name": "AND"
+ },
+ {
+ "begin": 4746,
+ "end": 4763,
+ "name": "DUP3"
+ },
+ {
+ "begin": 4746,
+ "end": 4763,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 4746,
+ "end": 4763,
+ "name": "DUP1"
+ },
+ {
+ "begin": 4746,
+ "end": 4763,
+ "name": "DUP3"
+ },
+ {
+ "begin": 4746,
+ "end": 4763,
+ "name": "SHA3"
+ },
+ {
+ "begin": 4746,
+ "end": 4770,
+ "name": "DUP1"
+ },
+ {
+ "begin": 4746,
+ "end": 4770,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 4746,
+ "end": 4770,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4746,
+ "end": 4770,
+ "name": "SWAP5"
+ },
+ {
+ "begin": 4746,
+ "end": 4770,
+ "name": "AND"
+ },
+ {
+ "begin": 4714,
+ "end": 4736,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 4746,
+ "end": 4770,
+ "name": "OR"
+ },
+ {
+ "begin": 4746,
+ "end": 4770,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4746,
+ "end": 4770,
+ "name": "SWAP4"
+ },
+ {
+ "begin": 4746,
+ "end": 4770,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 4780,
+ "end": 4799,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 4780,
+ "end": 4799,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 4714,
+ "end": 4728,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4714,
+ "end": 4728,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 4780,
+ "end": 4799,
+ "name": "PUSH",
+ "value": "8001553A916EF2F495D26A907CC54D96ED840D7BDA71E73194BF5A9DF7A76B90"
+ },
+ {
+ "begin": 4780,
+ "end": 4799,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 4780,
+ "end": 4799,
+ "name": "LOG2"
+ },
+ {
+ "begin": 4809,
+ "end": 4832,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 4809,
+ "end": 4832,
+ "name": "MLOAD"
+ },
+ {
+ "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": 4809,
+ "end": 4832,
+ "name": "DUP6"
+ },
+ {
+ "begin": 4809,
+ "end": 4832,
+ "name": "AND"
+ },
+ {
+ "begin": 4809,
+ "end": 4832,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4809,
+ "end": 4832,
+ "name": "PUSH",
+ "value": "F39E6E1EB0EDCF53C221607B54B00CD28F3196FED0A24994DC308B8F611B682D"
+ },
+ {
+ "begin": 4809,
+ "end": 4832,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4809,
+ "end": 4832,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 4809,
+ "end": 4832,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4809,
+ "end": 4832,
+ "name": "LOG2"
+ },
+ {
+ "begin": 1375,
+ "end": 1376,
+ "name": "tag",
+ "value": "322"
+ },
+ {
+ "begin": 1375,
+ "end": 1376,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1483,
+ "end": 1484,
+ "name": "tag",
+ "value": "320"
+ },
+ {
+ "begin": 1483,
+ "end": 1484,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1483,
+ "end": 1484,
+ "name": "POP"
+ },
+ {
+ "begin": 1262,
+ "end": 1263,
+ "name": "tag",
+ "value": "318"
+ },
+ {
+ "begin": 1262,
+ "end": 1263,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1262,
+ "end": 1263,
+ "name": "POP"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "tag",
+ "value": "316"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "POP"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "POP"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "POP"
+ },
+ {
+ "begin": 4390,
+ "end": 4839,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 3622,
+ "end": 4094,
+ "name": "tag",
+ "value": "134"
+ },
+ {
+ "begin": 3622,
+ "end": 4094,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3808,
+ "end": 3830,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1996,
+ "end": 2023,
+ "name": "SHA3"
+ },
+ {
+ "begin": 1996,
+ "end": 2032,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 1996,
+ "end": 2032,
+ "name": "ADD"
+ },
+ {
+ "begin": 1996,
+ "end": 2032,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 3705,
+ "end": 3718,
+ "name": "DUP3"
+ },
+ {
+ "begin": 3705,
+ "end": 3718,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1996,
+ "end": 2032,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": 1996,
+ "end": 2032,
+ "name": "AND"
+ },
+ {
+ "begin": 1992,
+ "end": 2051,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1992,
+ "end": 2051,
+ "name": "PUSH [tag]",
+ "value": "332"
+ },
+ {
+ "begin": 1992,
+ "end": 2051,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 2046,
+ "end": 2051,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2046,
+ "end": 2051,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2046,
+ "end": 2051,
+ "name": "REVERT"
+ },
+ {
+ "begin": 1992,
+ "end": 2051,
+ "name": "tag",
+ "value": "332"
+ },
+ {
+ "begin": 1992,
+ "end": 2051,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3743,
+ "end": 3756,
+ "name": "DUP3"
+ },
+ {
+ "begin": 1298,
+ "end": 1324,
+ "name": "PUSH [tag]",
+ "value": "334"
+ },
+ {
+ "begin": 1310,
+ "end": 1323,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1298,
+ "end": 1309,
+ "name": "PUSH [tag]",
+ "value": "71"
+ },
+ {
+ "begin": 1298,
+ "end": 1324,
+ "name": "JUMP",
+ "value": "[in]"
+ },
+ {
+ "begin": 1298,
+ "end": 1324,
+ "name": "tag",
+ "value": "334"
+ },
+ {
+ "begin": 1298,
+ "end": 1324,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1290,
+ "end": 1325,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1290,
+ "end": 1325,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1290,
+ "end": 1325,
+ "name": "PUSH [tag]",
+ "value": "335"
+ },
+ {
+ "begin": 1290,
+ "end": 1325,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1290,
+ "end": 1325,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1290,
+ "end": 1325,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1290,
+ "end": 1325,
+ "name": "REVERT"
+ },
+ {
+ "begin": 1290,
+ "end": 1325,
+ "name": "tag",
+ "value": "335"
+ },
+ {
+ "begin": 1290,
+ "end": 1325,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1463,
+ "end": 1480,
+ "name": "PUSH",
+ "value": "6"
+ },
+ {
+ "begin": 1463,
+ "end": 1480,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 1428,
+ "end": 1460,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1428,
+ "end": 1460,
+ "name": "DUP6"
+ },
+ {
+ "begin": 1428,
+ "end": 1460,
+ "name": "DUP2"
+ },
+ {
+ "begin": 1428,
+ "end": 1460,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1428,
+ "end": 1445,
+ "name": "PUSH",
+ "value": "7"
+ },
+ {
+ "begin": 1428,
+ "end": 1460,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 1428,
+ "end": 1460,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 1428,
+ "end": 1460,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 1428,
+ "end": 1460,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 1428,
+ "end": 1460,
+ "name": "SHA3"
+ },
+ {
+ "begin": 1428,
+ "end": 1460,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 3779,
+ "end": 3792,
+ "name": "DUP6"
+ },
+ {
+ "begin": 3779,
+ "end": 3792,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 1428,
+ "end": 1480,
+ "name": "ADD"
+ },
+ {
+ "begin": 1409,
+ "end": 1424,
+ "name": "TIMESTAMP"
+ },
+ {
+ "begin": 1409,
+ "end": 1480,
+ "name": "LT"
+ },
+ {
+ "begin": 1409,
+ "end": 1480,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 1401,
+ "end": 1481,
+ "name": "PUSH [tag]",
+ "value": "337"
+ },
+ {
+ "begin": 1401,
+ "end": 1481,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 1401,
+ "end": 1481,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1401,
+ "end": 1481,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 1401,
+ "end": 1481,
+ "name": "REVERT"
+ },
+ {
+ "begin": 1401,
+ "end": 1481,
+ "name": "tag",
+ "value": "337"
+ },
+ {
+ "begin": 1401,
+ "end": 1481,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3833,
+ "end": 3845,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3833,
+ "end": 3860,
+ "name": "DUP6"
+ },
+ {
+ "begin": 3833,
+ "end": 3860,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3833,
+ "end": 3860,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3833,
+ "end": 3860,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 3833,
+ "end": 3860,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3833,
+ "end": 3860,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3833,
+ "end": 3860,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3833,
+ "end": 3860,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 3833,
+ "end": 3860,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3833,
+ "end": 3860,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3833,
+ "end": 3860,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3833,
+ "end": 3860,
+ "name": "SHA3"
+ },
+ {
+ "begin": 3870,
+ "end": 3881,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 3870,
+ "end": 3881,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3870,
+ "end": 3881,
+ "name": "ADD"
+ },
+ {
+ "begin": 3870,
+ "end": 3888,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3870,
+ "end": 3888,
+ "name": "SLOAD"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 3870,
+ "end": 3888,
+ "name": "AND"
+ },
+ {
+ "begin": 3884,
+ "end": 3888,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 3870,
+ "end": 3888,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3870,
+ "end": 3888,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3870,
+ "end": 3888,
+ "name": "OR"
+ },
+ {
+ "begin": 3870,
+ "end": 3888,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3870,
+ "end": 3888,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3870,
+ "end": 3888,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 3902,
+ "end": 3916,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3902,
+ "end": 3916,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 3928,
+ "end": 3936,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3928,
+ "end": 3936,
+ "name": "DUP4"
+ },
+ {
+ "begin": 3928,
+ "end": 3936,
+ "name": "ADD"
+ },
+ {
+ "begin": 3928,
+ "end": 3936,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SWAP4"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 3938,
+ "end": 3945,
+ "name": "PUSH",
+ "value": "2"
+ },
+ {
+ "begin": 3938,
+ "end": 3945,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3938,
+ "end": 3945,
+ "name": "DUP6"
+ },
+ {
+ "begin": 3938,
+ "end": 3945,
+ "name": "ADD"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 3833,
+ "end": 3860,
+ "name": "SWAP6"
+ },
+ {
+ "begin": 3833,
+ "end": 3860,
+ "name": "SWAP11"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "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": 3902,
+ "end": 3916,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3902,
+ "end": 3916,
+ "name": "SWAP4"
+ },
+ {
+ "begin": 3902,
+ "end": 3916,
+ "name": "AND"
+ },
+ {
+ "begin": 3902,
+ "end": 3916,
+ "name": "SWAP6"
+ },
+ {
+ "begin": 3928,
+ "end": 3936,
+ "name": "SWAP5"
+ },
+ {
+ "begin": 3938,
+ "end": 3945,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 3938,
+ "end": 3945,
+ "name": "SWAP4"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "DUP4"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 3938,
+ "end": 3945,
+ "name": "DUP6"
+ },
+ {
+ "begin": 3938,
+ "end": 3945,
+ "name": "SWAP3"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "DUP4"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "AND"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3870,
+ "end": 3888,
+ "name": "PUSH",
+ "value": "100"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "MUL"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "ADD"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "AND"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "DIV"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "PUSH [tag]",
+ "value": "339"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "PUSH",
+ "value": "1F"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "LT"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "PUSH [tag]",
+ "value": "340"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "PUSH",
+ "value": "100"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "DUP4"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "DIV"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "MUL"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "DUP4"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "ADD"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "PUSH [tag]",
+ "value": "339"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "JUMP"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "tag",
+ "value": "340"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "DUP3"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "ADD"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SHA3"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "tag",
+ "value": "341"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "ADD"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "ADD"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "DUP4"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "GT"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "PUSH [tag]",
+ "value": "341"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "DUP3"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SUB"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "PUSH",
+ "value": "1F"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "AND"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "DUP3"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "ADD"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "tag",
+ "value": "339"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "POP"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "POP"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "POP"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "POP"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "DUP1"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "DUP4"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SUB"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "DUP2"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "DUP6"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "DUP8"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "PUSH",
+ "value": "8502"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "GAS"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SUB"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "CALL"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "POP"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "POP"
+ },
+ {
+ "begin": 3902,
+ "end": 3946,
+ "name": "POP"
+ },
+ {
+ "begin": 3898,
+ "end": 4088,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 3898,
+ "end": 4088,
+ "name": "PUSH [tag]",
+ "value": "342"
+ },
+ {
+ "begin": 3898,
+ "end": 4088,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 3960,
+ "end": 3984,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 3960,
+ "end": 3984,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 3970,
+ "end": 3983,
+ "name": "DUP6"
+ },
+ {
+ "begin": 3970,
+ "end": 3983,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3960,
+ "end": 3984,
+ "name": "PUSH",
+ "value": "33E13ECB54C3076D8E8BB8C2881800A4D972B792045FFAE98FDF46DF365FED75"
+ },
+ {
+ "begin": 3960,
+ "end": 3984,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3960,
+ "end": 3984,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 3960,
+ "end": 3984,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 3960,
+ "end": 3984,
+ "name": "LOG2"
+ },
+ {
+ "begin": 3898,
+ "end": 4088,
+ "name": "PUSH [tag]",
+ "value": "160"
+ },
+ {
+ "begin": 3898,
+ "end": 4088,
+ "name": "JUMP"
+ },
+ {
+ "begin": 3898,
+ "end": 4088,
+ "name": "tag",
+ "value": "342"
+ },
+ {
+ "begin": 3898,
+ "end": 4088,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 4013,
+ "end": 4044,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 4013,
+ "end": 4044,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 4030,
+ "end": 4043,
+ "name": "DUP6"
+ },
+ {
+ "begin": 4030,
+ "end": 4043,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4013,
+ "end": 4044,
+ "name": "PUSH",
+ "value": "526441BB6C1ABA3C9A4A6CA1D6545DA9C2333C8C48343EF398EB858D72B79236"
+ },
+ {
+ "begin": 4013,
+ "end": 4044,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4013,
+ "end": 4044,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 4013,
+ "end": 4044,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4013,
+ "end": 4044,
+ "name": "LOG2"
+ },
+ {
+ "begin": 4058,
+ "end": 4069,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 4058,
+ "end": 4069,
+ "name": "DUP5"
+ },
+ {
+ "begin": 4058,
+ "end": 4069,
+ "name": "ADD"
+ },
+ {
+ "begin": 4058,
+ "end": 4077,
+ "name": "DUP1"
+ },
+ {
+ "begin": 4058,
+ "end": 4077,
+ "name": "SLOAD"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 4058,
+ "end": 4077,
+ "name": "AND"
+ },
+ {
+ "begin": 4058,
+ "end": 4077,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4058,
+ "end": 4077,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 3898,
+ "end": 4088,
+ "name": "tag",
+ "value": "343"
+ },
+ {
+ "begin": 3898,
+ "end": 4088,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1491,
+ "end": 1492,
+ "name": "tag",
+ "value": "338"
+ },
+ {
+ "begin": 1491,
+ "end": 1492,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1335,
+ "end": 1336,
+ "name": "tag",
+ "value": "336"
+ },
+ {
+ "begin": 1335,
+ "end": 1336,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 1335,
+ "end": 1336,
+ "name": "POP"
+ },
+ {
+ "begin": 2061,
+ "end": 2062,
+ "name": "tag",
+ "value": "333"
+ },
+ {
+ "begin": 2061,
+ "end": 2062,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 2061,
+ "end": 2062,
+ "name": "POP"
+ },
+ {
+ "begin": 3622,
+ "end": 4094,
+ "name": "tag",
+ "value": "331"
+ },
+ {
+ "begin": 3622,
+ "end": 4094,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 3622,
+ "end": 4094,
+ "name": "POP"
+ },
+ {
+ "begin": 3622,
+ "end": 4094,
+ "name": "POP"
+ },
+ {
+ "begin": 3622,
+ "end": 4094,
+ "name": "POP"
+ },
+ {
+ "begin": 3622,
+ "end": 4094,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 4135,
+ "end": 4606,
+ "name": "tag",
+ "value": "177"
+ },
+ {
+ "begin": 4135,
+ "end": 4606,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 4242,
+ "end": 4255,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 4291,
+ "end": 4296,
+ "name": "DUP2"
+ },
+ {
+ "begin": 4299,
+ "end": 4300,
+ "name": "PUSH",
+ "value": "4"
+ },
+ {
+ "begin": 4291,
+ "end": 4300,
+ "name": "ADD"
+ },
+ {
+ "begin": 4279,
+ "end": 4280,
+ "name": "DUP4"
+ },
+ {
+ "begin": 4279,
+ "end": 4287,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 4279,
+ "end": 4300,
+ "name": "LT"
+ },
+ {
+ "begin": 4279,
+ "end": 4300,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 4271,
+ "end": 4301,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 4271,
+ "end": 4301,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 4271,
+ "end": 4301,
+ "name": "PUSH [tag]",
+ "value": "345"
+ },
+ {
+ "begin": 4271,
+ "end": 4301,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 4271,
+ "end": 4301,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 4271,
+ "end": 4301,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 4271,
+ "end": 4301,
+ "name": "REVERT"
+ },
+ {
+ "begin": 4271,
+ "end": 4301,
+ "name": "tag",
+ "value": "345"
+ },
+ {
+ "begin": 4271,
+ "end": 4301,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 4357,
+ "end": 4359,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 4350,
+ "end": 4353,
+ "name": "DUP3"
+ },
+ {
+ "begin": 4350,
+ "end": 4353,
+ "name": "ADD"
+ },
+ {
+ "begin": 4344,
+ "end": 4349,
+ "name": "MLOAD"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "E0"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "2"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "EXP"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "SUB"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 4488,
+ "end": 4491,
+ "name": "AND"
+ },
+ {
+ "begin": 4135,
+ "end": 4606,
+ "name": "tag",
+ "value": "344"
+ },
+ {
+ "begin": 4135,
+ "end": 4606,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 4135,
+ "end": 4606,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 4135,
+ "end": 4606,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 4135,
+ "end": 4606,
+ "name": "POP"
+ },
+ {
+ "begin": 4135,
+ "end": 4606,
+ "name": "POP"
+ },
+ {
+ "begin": 4135,
+ "end": 4606,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 4204,
+ "end": 4427,
+ "name": "tag",
+ "value": "301"
+ },
+ {
+ "begin": 4204,
+ "end": 4427,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 4307,
+ "end": 4339,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 4307,
+ "end": 4339,
+ "name": "DUP3"
+ },
+ {
+ "begin": 4307,
+ "end": 4339,
+ "name": "DUP2"
+ },
+ {
+ "begin": 4307,
+ "end": 4339,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 4307,
+ "end": 4324,
+ "name": "PUSH",
+ "value": "7"
+ },
+ {
+ "begin": 4307,
+ "end": 4339,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 4307,
+ "end": 4339,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4307,
+ "end": 4339,
+ "name": "DUP2"
+ },
+ {
+ "begin": 4307,
+ "end": 4339,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 4307,
+ "end": 4339,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 4307,
+ "end": 4339,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 4307,
+ "end": 4339,
+ "name": "DUP3"
+ },
+ {
+ "begin": 4307,
+ "end": 4339,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4307,
+ "end": 4339,
+ "name": "SHA3"
+ },
+ {
+ "begin": 4307,
+ "end": 4358,
+ "name": "DUP4"
+ },
+ {
+ "begin": 4307,
+ "end": 4358,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4307,
+ "end": 4358,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 4368,
+ "end": 4420,
+ "name": "DUP2"
+ },
+ {
+ "begin": 4368,
+ "end": 4420,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 4368,
+ "end": 4420,
+ "name": "DUP4"
+ },
+ {
+ "begin": 4368,
+ "end": 4420,
+ "name": "DUP2"
+ },
+ {
+ "begin": 4368,
+ "end": 4420,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 4368,
+ "end": 4420,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 4368,
+ "end": 4420,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 4325,
+ "end": 4338,
+ "name": "DUP5"
+ },
+ {
+ "begin": 4325,
+ "end": 4338,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 4368,
+ "end": 4420,
+ "name": "PUSH",
+ "value": "B237AFE65F1514FD7EA3F923EA4FE792BDD07000A912B6CD1602A8E7F573C8D"
+ },
+ {
+ "begin": 4368,
+ "end": 4420,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 4368,
+ "end": 4420,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4368,
+ "end": 4420,
+ "name": "DUP3"
+ },
+ {
+ "begin": 4368,
+ "end": 4420,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4368,
+ "end": 4420,
+ "name": "SUB"
+ },
+ {
+ "begin": 4368,
+ "end": 4420,
+ "name": "ADD"
+ },
+ {
+ "begin": 4368,
+ "end": 4420,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 4368,
+ "end": 4420,
+ "name": "LOG2"
+ },
+ {
+ "begin": 4204,
+ "end": 4427,
+ "name": "tag",
+ "value": "346"
+ },
+ {
+ "begin": 4204,
+ "end": 4427,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 4204,
+ "end": 4427,
+ "name": "POP"
+ },
+ {
+ "begin": 4204,
+ "end": 4427,
+ "name": "POP"
+ },
+ {
+ "begin": 4204,
+ "end": 4427,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 7994,
+ "end": 8445,
+ "name": "tag",
+ "value": "312"
+ },
+ {
+ "begin": 7994,
+ "end": 8445,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 8126,
+ "end": 8144,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 8096,
+ "end": 8107,
+ "name": "DUP4"
+ },
+ {
+ "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": 2124,
+ "end": 2137,
+ "name": "DUP2"
+ },
+ {
+ "begin": 2124,
+ "end": 2137,
+ "name": "AND"
+ },
+ {
+ "begin": 2124,
+ "end": 2137,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2120,
+ "end": 2156,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 2120,
+ "end": 2156,
+ "name": "PUSH [tag]",
+ "value": "348"
+ },
+ {
+ "begin": 2120,
+ "end": 2156,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 2151,
+ "end": 2156,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2151,
+ "end": 2156,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 2151,
+ "end": 2156,
+ "name": "REVERT"
+ },
+ {
+ "begin": 2120,
+ "end": 2156,
+ "name": "tag",
+ "value": "348"
+ },
+ {
+ "begin": 2120,
+ "end": 2156,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 8176,
+ "end": 8192,
+ "name": "PUSH",
+ "value": "5"
+ },
+ {
+ "begin": 8176,
+ "end": 8192,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "DUP1"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "PUSH",
+ "value": "80"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "DUP2"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "ADD"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "DUP3"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "MSTORE"
+ },
+ {
+ "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": 8232,
+ "end": 8372,
+ "name": "DUP9"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "DUP2"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "AND"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "DUP3"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "DUP1"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "DUP4"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "ADD"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "DUP10"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "DUP2"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "DUP4"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "DUP6"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "ADD"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "DUP10"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "DUP2"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "MSTORE"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "PUSH",
+ "value": "60"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "DUP7"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "ADD"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "DUP2"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 8202,
+ "end": 8229,
+ "name": "DUP8"
+ },
+ {
+ "begin": 8202,
+ "end": 8229,
+ "name": "DUP2"
+ },
+ {
+ "begin": 8202,
+ "end": 8229,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 8202,
+ "end": 8229,
+ "name": "DUP1"
+ },
+ {
+ "begin": 8202,
+ "end": 8229,
+ "name": "DUP5"
+ },
+ {
+ "begin": 8202,
+ "end": 8229,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 8202,
+ "end": 8229,
+ "name": "SWAP6"
+ },
+ {
+ "begin": 8202,
+ "end": 8229,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 8202,
+ "end": 8229,
+ "name": "SWAP6"
+ },
+ {
+ "begin": 8202,
+ "end": 8229,
+ "name": "SHA3"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "DUP5"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "DUP2"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "SLOAD"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "AND"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "SWAP5"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "AND"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "SWAP4"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "SWAP4"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "OR"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "DUP4"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "MLOAD"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "DUP4"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "ADD"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "DUP1"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 8176,
+ "end": 8192,
+ "name": "SWAP5"
+ },
+ {
+ "begin": 8176,
+ "end": 8192,
+ "name": "SWAP7"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 8232,
+ "end": 8372,
+ "name": "SWAP4"
+ },
+ {
+ "begin": 8202,
+ "end": 8229,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 8202,
+ "end": 8229,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "PUSH [tag]",
+ "value": "350"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "PUSH",
+ "value": "2"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "DUP6"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "ADD"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "ADD"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "PUSH [tag]",
+ "value": "351"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "JUMP",
+ "value": "[in]"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "tag",
+ "value": "350"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "PUSH",
+ "value": "60"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "ADD"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "PUSH",
+ "value": "3"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "ADD"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "DUP1"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "SLOAD"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "NOT"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "AND"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "OR"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 8202,
+ "end": 8372,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 8382,
+ "end": 8398,
+ "name": "PUSH",
+ "value": "5"
+ },
+ {
+ "begin": 8382,
+ "end": 8403,
+ "name": "DUP1"
+ },
+ {
+ "begin": 8382,
+ "end": 8403,
+ "name": "SLOAD"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 8382,
+ "end": 8403,
+ "name": "ADD"
+ },
+ {
+ "begin": 8382,
+ "end": 8403,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 8382,
+ "end": 8403,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 8413,
+ "end": 8438,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 8413,
+ "end": 8438,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 8424,
+ "end": 8437,
+ "name": "DUP3"
+ },
+ {
+ "begin": 8424,
+ "end": 8437,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 8413,
+ "end": 8438,
+ "name": "PUSH",
+ "value": "C0BA8FE4B176C1714197D43B9CC6BCF797A4A7461C5FE8D0EF6E184AE7601E51"
+ },
+ {
+ "begin": 8413,
+ "end": 8438,
+ "name": "SWAP1"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 8413,
+ "end": 8438,
+ "name": "LOG2"
+ },
+ {
+ "begin": 2166,
+ "end": 2167,
+ "name": "tag",
+ "value": "349"
+ },
+ {
+ "begin": 2166,
+ "end": 2167,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 7994,
+ "end": 8445,
+ "name": "tag",
+ "value": "347"
+ },
+ {
+ "begin": 7994,
+ "end": 8445,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 7994,
+ "end": 8445,
+ "name": "POP"
+ },
+ {
+ "begin": 7994,
+ "end": 8445,
+ "name": "SWAP4"
+ },
+ {
+ "begin": 7994,
+ "end": 8445,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 7994,
+ "end": 8445,
+ "name": "POP"
+ },
+ {
+ "begin": 7994,
+ "end": 8445,
+ "name": "POP"
+ },
+ {
+ "begin": 7994,
+ "end": 8445,
+ "name": "POP"
+ },
+ {
+ "begin": 7994,
+ "end": 8445,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "tag",
+ "value": "153"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP2"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP2"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP4"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP2"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP2"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "GT"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "141"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP4"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP2"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SHA3"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "141"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP2"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "ADD"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP4"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "ADD"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "354"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMP",
+ "value": "[in]"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "tag",
+ "value": "353"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "tag",
+ "value": "352"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "POP"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "POP"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "POP"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "tag",
+ "value": "211"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP2"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP2"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP4"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP2"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP2"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "GT"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "141"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP4"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP2"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SHA3"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "141"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP2"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "ADD"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP4"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "ADD"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "354"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMP",
+ "value": "[in]"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "tag",
+ "value": "356"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "tag",
+ "value": "355"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "POP"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "POP"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "POP"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "tag",
+ "value": "234"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP2"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "ADD"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "MSTORE"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP2"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "tag",
+ "value": "239"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "40"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP2"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "ADD"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "MSTORE"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP2"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "tag",
+ "value": "351"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP3"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SLOAD"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP2"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "AND"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "100"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "MUL"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SUB"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "AND"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "2"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DIV"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "MSTORE"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SHA3"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "1F"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "ADD"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DIV"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP2"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "ADD"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP3"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "1F"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "LT"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "358"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "FF"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "NOT"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "AND"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP4"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "ADD"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "OR"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP6"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "360"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMP"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "tag",
+ "value": "358"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP3"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "ADD"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "ADD"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP6"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP3"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "360"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP3"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "ADD"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "tag",
+ "value": "359"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP3"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP2"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "GT"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "360"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP3"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "MLOAD"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP3"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "20"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "ADD"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "ADD"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "359"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMP"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "tag",
+ "value": "360"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "tag",
+ "value": "357"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "361"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SWAP3"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SWAP2"
+ },
+ {
+ "begin": -1,
+ "end": -1,
+ "name": "POP"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "354"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMP",
+ "value": "[in]"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "tag",
+ "value": "361"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "POP"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMP",
+ "value": "[out]"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "tag",
+ "value": "354"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "235"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SWAP2"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "tag",
+ "value": "363"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP3"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "GT"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "ISZERO"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "361"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPI"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "0"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "DUP2"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SSTORE"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH",
+ "value": "1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "ADD"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "PUSH [tag]",
+ "value": "363"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMP"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "tag",
+ "value": "364"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "POP"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMP"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "tag",
+ "value": "362"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMPDEST"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "SWAP1"
+ },
+ {
+ "begin": 703,
+ "end": 2182,
+ "name": "JUMP",
+ "value": "[out]"
+ }
+ ]
+ }
+ }
+ },
"bytecode": {
- "linkReferences": {},
- "object": "0x60806040523480156200001157600080fd5b506040516200245f3803806200245f83398101604090815281516020830151918301516060840151918401805190949390930192909190849084908490849060009081908690859085908390839086908260328211806200007157508181115b806200007b575080155b8062000085575081155b156200009057600080fd5b600092505b84518310156200016457600260008685815181101515620000b257fe5b6020908102909101810151600160a060020a031682528101919091526040016000205460ff16806200010557508483815181101515620000ee57fe5b90602001906020020151600160a060020a03166000145b156200011057600080fd5b60016002600087868151811015156200012557fe5b602090810291909101810151600160a060020a03168252810191909152604001600020805460ff19169115159190911790556001929092019162000095565b8451620001799060039060208801906200020a565b50505060049190915550506006555060009250505b8451821015620001fa578482815181101515620001a757fe5b602090810290910101519050600160a060020a0381161515620001c957600080fd5b600160a060020a0381166000908152600860205260409020805460ff1916600190811790915591909101906200018e565b505050505050505050506200029e565b82805482825590600052602060002090810192821562000262579160200282015b82811115620002625782518254600160a060020a031916600160a060020a039091161782556020909201916001909101906200022b565b506200027092915062000274565b5090565b6200029b91905b8082111562000270578054600160a060020a03191681556001016200027b565b90565b6121b180620002ae6000396000f3006080604052600436106101745763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663025e7c2781146101b6578063173825d9146101f757806320ea8d86146102255780632f54bf6e1461023d5780633411c81c1461027f5780633589b35c146102b057806337bd78a0146102c857806354741525146102ef5780635a1a66af1461030e5780637065cb481461034157806372cbe61d1461036f578063784547a7146103c85780637ad28c51146103e057806383250f79146103f85780638b51d13f146104265780639ace38c21461043e578063a0e67e2b14610513578063a8abe69a14610578578063b5dc40c31461059d578063b77bf600146105b5578063ba51a6df146105ca578063c01a8c84146105e2578063c296e43c146105fa578063c642747414610612578063d38f2d8214610688578063d74f8edd146106a0578063dc8452cd146106b5578063e20056e6146106ca578063ee22610b146106fe575b60003411156101b45760408051348152905133917fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c919081900360200190a25b005b3480156101c257600080fd5b506101ce600435610716565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561020357600080fd5b506101b473ffffffffffffffffffffffffffffffffffffffff6004351661074b565b34801561023157600080fd5b506101b46004356109a2565b34801561024957600080fd5b5061026b73ffffffffffffffffffffffffffffffffffffffff60043516610a8f565b604080519115158252519081900360200190f35b34801561028b57600080fd5b5061026b60043573ffffffffffffffffffffffffffffffffffffffff60243516610aa4565b3480156102bc57600080fd5b506101b4600435610ac4565b3480156102d457600080fd5b506102dd610e40565b60408051918252519081900360200190f35b3480156102fb57600080fd5b506102dd60043515156024351515610e46565b34801561031a57600080fd5b506101b473ffffffffffffffffffffffffffffffffffffffff600435166024351515610eb2565b34801561034d57600080fd5b506101b473ffffffffffffffffffffffffffffffffffffffff60043516610f71565b34801561037b57600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261026b9436949293602493928401919081908401838280828437509497506110de9650505050505050565b3480156103d457600080fd5b5061026b600435611194565b3480156103ec57600080fd5b506101b4600435611225565b34801561040457600080fd5b5061026b73ffffffffffffffffffffffffffffffffffffffff6004351661126c565b34801561043257600080fd5b506102dd600435611281565b34801561044a57600080fd5b506104566004356112fd565b604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018060200183151515158152602001828103825284818151815260200191508051906020019080838360005b838110156104d55781810151838201526020016104bd565b50505050905090810190601f1680156105025780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b34801561051f57600080fd5b506105286113e6565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561056457818101518382015260200161054c565b505050509050019250505060405180910390f35b34801561058457600080fd5b5061052860043560243560443515156064351515611456565b3480156105a957600080fd5b5061052860043561158f565b3480156105c157600080fd5b506102dd61173c565b3480156105d657600080fd5b506101b4600435611742565b3480156105ee57600080fd5b506101b46004356117b9565b34801561060657600080fd5b5061026b6004356118cb565b34801561061e57600080fd5b50604080516020600460443581810135601f81018490048402850184019095528484526102dd94823573ffffffffffffffffffffffffffffffffffffffff16946024803595369594606494920191908190840183828082843750949750611a419650505050505050565b34801561069457600080fd5b506102dd600435611a60565b3480156106ac57600080fd5b506102dd611a72565b3480156106c157600080fd5b506102dd611a77565b3480156106d657600080fd5b506101b473ffffffffffffffffffffffffffffffffffffffff60043581169060243516611a7d565b34801561070a57600080fd5b506101b4600435611c8d565b600380548290811061072457fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b600033301461075957600080fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020526040902054829060ff16151561078f57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260026020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905591505b6003547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01821015610912578273ffffffffffffffffffffffffffffffffffffffff1660038381548110151561082f57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561090757600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061088757fe5b6000918252602090912001546003805473ffffffffffffffffffffffffffffffffffffffff90921691849081106108ba57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610912565b6001909101906107dd565b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019061094390826120c4565b50600354600454111561095c5760035461095c90611742565b60405173ffffffffffffffffffffffffffffffffffffffff8416907f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9090600090a2505050565b3360008181526002602052604090205460ff1615156109c057600080fd5b60008281526001602090815260408083203380855292529091205483919060ff1615156109ec57600080fd5b600084815260208190526040902060030154849060ff1615610a0d57600080fd5b84610a1781611194565b15610a2157600080fd5b600086815260016020908152604080832033808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555188927ff6a317157440607f36269043eb55f1287a5a19ba2216afeab88cd46cbcfb88e991a3505050505050565b60026020526000908152604090205460ff1681565b600160209081526000928352604080842090915290825290205460ff1681565b600081815260208190526040812060030154829060ff1615610ae557600080fd5b82610aef81611194565b1515610afa57600080fd5b600084815260208181526040808320805473ffffffffffffffffffffffffffffffffffffffff16845260089092529091205485919060ff161515610b3d57600080fd5b604080517f72656d6f7665417574686f72697a6564416464726573734174496e646578286181527f6464726573732c75696e74323536290000000000000000000000000000000000602080830191909152825191829003602f01822060028086018054601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010060018416150201909116929092049182018490048402850184019095528084527fffffffff0000000000000000000000000000000000000000000000000000000090911693610c7993600093909290830182828015610c665780601f10610c3b57610100808354040283529160200191610c66565b820191906000526020600020905b815481529060010190602001808311610c4957829003601f168201915b5050505050611e7e90919063ffffffff16565b7fffffffff000000000000000000000000000000000000000000000000000000001614610ca557600080fd5b600086815260208190526040908190206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117909155815481830154935160028085018054959b5073ffffffffffffffffffffffffffffffffffffffff909316959492939192839285927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff918316156101000291909101909116048015610d975780601f10610d6c57610100808354040283529160200191610d97565b820191906000526020600020905b815481529060010190602001808311610d7a57829003601f168201915b505091505060006040518083038185875af19250505015610de25760405186907f33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed7590600090a2610e38565b60405186907f526441bb6c1aba3c9a4a6ca1d6545da9c2333c8c48343ef398eb858d72b7923690600090a26003850180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b505050505050565b60065481565b6000805b600554811015610eab57838015610e73575060008181526020819052604090206003015460ff16155b80610e975750828015610e97575060008181526020819052604090206003015460ff165b15610ea3576001820191505b600101610e4a565b5092915050565b333014610ebe57600080fd5b8173ffffffffffffffffffffffffffffffffffffffff81161515610ee157600080fd5b73ffffffffffffffffffffffffffffffffffffffff831660008181526008602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915582519384529083015280517fdaef8ff7dc66c5e34eb9c338aab679d9f427f89868d9228494455a4d982eb2b09281900390910190a1505050565b333014610f7d57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116600090815260026020526040902054819060ff1615610fb257600080fd5b8173ffffffffffffffffffffffffffffffffffffffff81161515610fd557600080fd5b6003805490506001016004546032821180610fef57508181115b80610ff8575080155b80611001575081155b1561100b57600080fd5b73ffffffffffffffffffffffffffffffffffffffff851660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915560038054918201815583527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055517ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d9190a25050505050565b604080517f72656d6f7665417574686f72697a6564416464726573734174496e646578286181527f6464726573732c75696e743235362900000000000000000000000000000000006020820152905190819003602f0190206000907fffffffff000000000000000000000000000000000000000000000000000000001661116b838363ffffffff611e7e16565b7fffffffff00000000000000000000000000000000000000000000000000000000161492915050565b600080805b60035481101561121e57600084815260016020526040812060038054919291849081106111c257fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400190205460ff1615611203576001820191505b600454821415611216576001925061121e565b600101611199565b5050919050565b33301461123157600080fd5b60068190556040805182815290517fd1c9101a34feff75cccef14a28785a0279cb0b49c1f321f21f5f422e746b43779181900360200190a150565b60086020526000908152604090205460ff1681565b6000805b6003548110156112f757600083815260016020526040812060038054919291849081106112ae57fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400190205460ff16156112ef576001820191505b600101611285565b50919050565b60006020818152918152604090819020805460018083015460028085018054875161010095821615959095027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691909104601f810188900488028401880190965285835273ffffffffffffffffffffffffffffffffffffffff909316959094919291908301828280156113d35780601f106113a8576101008083540402835291602001916113d3565b820191906000526020600020905b8154815290600101906020018083116113b657829003601f168201915b5050506003909301549192505060ff1684565b6060600380548060200260200160405190810160405280929190818152602001828054801561144b57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611420575b505050505090505b90565b606080600080600554604051908082528060200260200182016040528015611488578160200160208202803883390190505b50925060009150600090505b60055481101561150f578580156114bd575060008181526020819052604090206003015460ff16155b806114e157508480156114e1575060008181526020819052604090206003015460ff165b15611507578083838151811015156114f557fe5b60209081029091010152600191909101905b600101611494565b87870360405190808252806020026020018201604052801561153b578160200160208202803883390190505b5093508790505b8681101561158457828181518110151561155857fe5b906020019060200201518489830381518110151561157257fe5b60209081029091010152600101611542565b505050949350505050565b6060806000806003805490506040519080825280602002602001820160405280156115c4578160200160208202803883390190505b50925060009150600090505b6003548110156116a857600085815260016020526040812060038054919291849081106115f957fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400190205460ff16156116a057600380548290811061164157fe5b600091825260209091200154835173ffffffffffffffffffffffffffffffffffffffff9091169084908490811061167457fe5b73ffffffffffffffffffffffffffffffffffffffff909216602092830290910190910152600191909101905b6001016115d0565b816040519080825280602002602001820160405280156116d2578160200160208202803883390190505b509350600090505b818110156117345782818151811015156116f057fe5b90602001906020020151848281518110151561170857fe5b73ffffffffffffffffffffffffffffffffffffffff9092166020928302909101909101526001016116da565b505050919050565b60055481565b33301461174e57600080fd5b60035481603282118061176057508181115b80611769575080155b80611772575081155b1561177c57600080fd5b60048390556040805184815290517fa3f1ee9126a074d9326c682f561767f710e927faa811f7a99829d49dc421797a9181900360200190a1505050565b3360008181526002602052604090205460ff1615156117d757600080fd5b600082815260208190526040902054829073ffffffffffffffffffffffffffffffffffffffff16151561180957600080fd5b60008381526001602090815260408083203380855292529091205484919060ff161561183457600080fd5b8461183e81611194565b1561184857600080fd5b600086815260016020818152604080842033808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909317909255905188927f4a504a94899432a9846e1aa406dceb1bcfd538bb839071d49d1e5e23f5be30ef91a36118bc86611194565b15610e3857610e388642611f46565b600081815260208181526040808320805473ffffffffffffffffffffffffffffffffffffffff168452600890925282205483919060ff16151561190d57600080fd5b604080517f72656d6f7665417574686f72697a6564416464726573734174496e646578286181527f6464726573732c75696e74323536290000000000000000000000000000000000602080830191909152825191829003602f01822060028086018054601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010060018416150201909116929092049182018490048402850184019095528084527fffffffff0000000000000000000000000000000000000000000000000000000090911693611a0b93600093909290830182828015610c665780601f10610c3b57610100808354040283529160200191610c66565b7fffffffff000000000000000000000000000000000000000000000000000000001614611a3757600080fd5b5060019392505050565b6000611a4e848484611f91565b9050611a59816117b9565b9392505050565b60076020526000908152604090205481565b603281565b60045481565b6000333014611a8b57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260026020526040902054839060ff161515611ac157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260026020526040902054839060ff1615611af657600080fd5b600092505b600354831015611bbb578473ffffffffffffffffffffffffffffffffffffffff16600384815481101515611b2b57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff161415611bb05783600384815481101515611b6357fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611bbb565b600190920191611afb565b73ffffffffffffffffffffffffffffffffffffffff80861660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090811690915593881682528082208054909416600117909355915190917f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9091a260405173ffffffffffffffffffffffffffffffffffffffff8516907ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d90600090a25050505050565b600081815260208190526040812060030154829060ff1615611cae57600080fd5b82611cb881611194565b1515611cc357600080fd5b600654600085815260076020526040902054859101421015611ce457600080fd5b600085815260208190526040908190206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117909155815481830154935160028085018054959a5073ffffffffffffffffffffffffffffffffffffffff909316959492939192839285927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff918316156101000291909101909116048015611dd65780601f10611dab57610100808354040283529160200191611dd6565b820191906000526020600020905b815481529060010190602001808311611db957829003601f168201915b505091505060006040518083038185875af19250505015611e215760405185907f33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed7590600090a2611e77565b60405185907f526441bb6c1aba3c9a4a6ca1d6545da9c2333c8c48343ef398eb858d72b7923690600090a26003840180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b5050505050565b600081600401835110151515611f1b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f475245415445525f4f525f455155414c5f544f5f345f4c454e4754485f52455160448201527f5549524544000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b5050602001517fffffffff000000000000000000000000000000000000000000000000000000001690565b6000828152600760209081526040918290208390558151838152915184927f0b237afe65f1514fd7ea3f923ea4fe792bdd07000a912b6cd1602a8e7f573c8d92908290030190a25050565b60008373ffffffffffffffffffffffffffffffffffffffff81161515611fb657600080fd5b6005546040805160808101825273ffffffffffffffffffffffffffffffffffffffff8881168252602080830189815283850189815260006060860181905287815280845295909520845181547fffffffffffffffffffffffff0000000000000000000000000000000000000000169416939093178355516001830155925180519496509193909261204e9260028501929101906120ed565b5060609190910151600390910180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905560058054600101905560405182907fc0ba8fe4b176c1714197d43b9cc6bcf797a4a7461c5fe8d0ef6e184ae7601e5190600090a2509392505050565b8154818355818111156120e8576000838152602090206120e891810190830161216b565b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061212e57805160ff191683800117855561215b565b8280016001018555821561215b579182015b8281111561215b578251825591602001919060010190612140565b5061216792915061216b565b5090565b61145391905b8082111561216757600081556001016121715600a165627a7a72305820789e4b58d60a690630c3b23ecd4865a36557b02fd52171a4c948aa82ae8d8a830029",
- "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x245F CODESIZE SUB DUP1 PUSH3 0x245F DUP4 CODECOPY DUP2 ADD PUSH1 0x40 SWAP1 DUP2 MSTORE DUP2 MLOAD PUSH1 0x20 DUP4 ADD MLOAD SWAP2 DUP4 ADD MLOAD PUSH1 0x60 DUP5 ADD MLOAD SWAP2 DUP5 ADD DUP1 MLOAD SWAP1 SWAP5 SWAP4 SWAP1 SWAP4 ADD SWAP3 SWAP1 SWAP2 SWAP1 DUP5 SWAP1 DUP5 SWAP1 DUP5 SWAP1 DUP5 SWAP1 PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP7 SWAP1 DUP6 SWAP1 DUP6 SWAP1 DUP4 SWAP1 DUP4 SWAP1 DUP7 SWAP1 DUP3 PUSH1 0x32 DUP3 GT DUP1 PUSH3 0x71 JUMPI POP DUP2 DUP2 GT JUMPDEST DUP1 PUSH3 0x7B JUMPI POP DUP1 ISZERO JUMPDEST DUP1 PUSH3 0x85 JUMPI POP DUP2 ISZERO JUMPDEST ISZERO PUSH3 0x90 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP3 POP JUMPDEST DUP5 MLOAD DUP4 LT ISZERO PUSH3 0x164 JUMPI PUSH1 0x2 PUSH1 0x0 DUP7 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH3 0xB2 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND DUP3 MSTORE DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0xFF AND DUP1 PUSH3 0x105 JUMPI POP DUP5 DUP4 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH3 0xEE JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x0 EQ JUMPDEST ISZERO PUSH3 0x110 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x2 PUSH1 0x0 DUP8 DUP7 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH3 0x125 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND DUP3 MSTORE DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x1 SWAP3 SWAP1 SWAP3 ADD SWAP2 PUSH3 0x95 JUMP JUMPDEST DUP5 MLOAD PUSH3 0x179 SWAP1 PUSH1 0x3 SWAP1 PUSH1 0x20 DUP9 ADD SWAP1 PUSH3 0x20A JUMP JUMPDEST POP POP POP PUSH1 0x4 SWAP2 SWAP1 SWAP2 SSTORE POP POP PUSH1 0x6 SSTORE POP PUSH1 0x0 SWAP3 POP POP JUMPDEST DUP5 MLOAD DUP3 LT ISZERO PUSH3 0x1FA JUMPI DUP5 DUP3 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH3 0x1A7 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MLOAD SWAP1 POP PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 AND ISZERO ISZERO PUSH3 0x1C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH3 0x18E JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP PUSH3 0x29E JUMP JUMPDEST DUP3 DUP1 SLOAD DUP3 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP3 DUP3 ISZERO PUSH3 0x262 JUMPI SWAP2 PUSH1 0x20 MUL DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x262 JUMPI DUP3 MLOAD DUP3 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB NOT AND PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP1 SWAP2 AND OR DUP3 SSTORE PUSH1 0x20 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH3 0x22B JUMP JUMPDEST POP PUSH3 0x270 SWAP3 SWAP2 POP PUSH3 0x274 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH3 0x29B SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x270 JUMPI DUP1 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB NOT AND DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x27B JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0x21B1 DUP1 PUSH3 0x2AE PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x174 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x25E7C27 DUP2 EQ PUSH2 0x1B6 JUMPI DUP1 PUSH4 0x173825D9 EQ PUSH2 0x1F7 JUMPI DUP1 PUSH4 0x20EA8D86 EQ PUSH2 0x225 JUMPI DUP1 PUSH4 0x2F54BF6E EQ PUSH2 0x23D JUMPI DUP1 PUSH4 0x3411C81C EQ PUSH2 0x27F JUMPI DUP1 PUSH4 0x3589B35C EQ PUSH2 0x2B0 JUMPI DUP1 PUSH4 0x37BD78A0 EQ PUSH2 0x2C8 JUMPI DUP1 PUSH4 0x54741525 EQ PUSH2 0x2EF JUMPI DUP1 PUSH4 0x5A1A66AF EQ PUSH2 0x30E JUMPI DUP1 PUSH4 0x7065CB48 EQ PUSH2 0x341 JUMPI DUP1 PUSH4 0x72CBE61D EQ PUSH2 0x36F JUMPI DUP1 PUSH4 0x784547A7 EQ PUSH2 0x3C8 JUMPI DUP1 PUSH4 0x7AD28C51 EQ PUSH2 0x3E0 JUMPI DUP1 PUSH4 0x83250F79 EQ PUSH2 0x3F8 JUMPI DUP1 PUSH4 0x8B51D13F EQ PUSH2 0x426 JUMPI DUP1 PUSH4 0x9ACE38C2 EQ PUSH2 0x43E JUMPI DUP1 PUSH4 0xA0E67E2B EQ PUSH2 0x513 JUMPI DUP1 PUSH4 0xA8ABE69A EQ PUSH2 0x578 JUMPI DUP1 PUSH4 0xB5DC40C3 EQ PUSH2 0x59D JUMPI DUP1 PUSH4 0xB77BF600 EQ PUSH2 0x5B5 JUMPI DUP1 PUSH4 0xBA51A6DF EQ PUSH2 0x5CA JUMPI DUP1 PUSH4 0xC01A8C84 EQ PUSH2 0x5E2 JUMPI DUP1 PUSH4 0xC296E43C EQ PUSH2 0x5FA JUMPI DUP1 PUSH4 0xC6427474 EQ PUSH2 0x612 JUMPI DUP1 PUSH4 0xD38F2D82 EQ PUSH2 0x688 JUMPI DUP1 PUSH4 0xD74F8EDD EQ PUSH2 0x6A0 JUMPI DUP1 PUSH4 0xDC8452CD EQ PUSH2 0x6B5 JUMPI DUP1 PUSH4 0xE20056E6 EQ PUSH2 0x6CA JUMPI DUP1 PUSH4 0xEE22610B EQ PUSH2 0x6FE JUMPI JUMPDEST PUSH1 0x0 CALLVALUE GT ISZERO PUSH2 0x1B4 JUMPI PUSH1 0x40 DUP1 MLOAD CALLVALUE DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0xE1FFFCC4923D04B559F4D29A8BFC6CDA04EB5B0D3C460751C2402C5C5CC9109C SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1CE PUSH1 0x4 CALLDATALOAD PUSH2 0x716 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x203 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x74B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x231 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B4 PUSH1 0x4 CALLDATALOAD PUSH2 0x9A2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x249 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26B PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0xA8F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x28B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26B PUSH1 0x4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD AND PUSH2 0xAA4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B4 PUSH1 0x4 CALLDATALOAD PUSH2 0xAC4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2DD PUSH2 0xE40 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2DD PUSH1 0x4 CALLDATALOAD ISZERO ISZERO PUSH1 0x24 CALLDATALOAD ISZERO ISZERO PUSH2 0xE46 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x31A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD ISZERO ISZERO PUSH2 0xEB2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x34D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0xF71 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x37B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 DUP1 CALLDATALOAD DUP1 DUP3 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x26B SWAP5 CALLDATASIZE SWAP5 SWAP3 SWAP4 PUSH1 0x24 SWAP4 SWAP3 DUP5 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x10DE SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26B PUSH1 0x4 CALLDATALOAD PUSH2 0x1194 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B4 PUSH1 0x4 CALLDATALOAD PUSH2 0x1225 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x404 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26B PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x126C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x432 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2DD PUSH1 0x4 CALLDATALOAD PUSH2 0x1281 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x44A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x456 PUSH1 0x4 CALLDATALOAD PUSH2 0x12FD JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 ISZERO ISZERO ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4D5 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x4BD JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x502 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 SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x51F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x528 PUSH2 0x13E6 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 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x564 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x54C JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x584 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x528 PUSH1 0x4 CALLDATALOAD PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD ISZERO ISZERO PUSH1 0x64 CALLDATALOAD ISZERO ISZERO PUSH2 0x1456 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x528 PUSH1 0x4 CALLDATALOAD PUSH2 0x158F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2DD PUSH2 0x173C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B4 PUSH1 0x4 CALLDATALOAD PUSH2 0x1742 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B4 PUSH1 0x4 CALLDATALOAD PUSH2 0x17B9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x606 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26B PUSH1 0x4 CALLDATALOAD PUSH2 0x18CB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x61E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 PUSH1 0x44 CALLDATALOAD DUP2 DUP2 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x2DD SWAP5 DUP3 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP5 PUSH1 0x24 DUP1 CALLDATALOAD SWAP6 CALLDATASIZE SWAP6 SWAP5 PUSH1 0x64 SWAP5 SWAP3 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x1A41 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x694 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2DD PUSH1 0x4 CALLDATALOAD PUSH2 0x1A60 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2DD PUSH2 0x1A72 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2DD PUSH2 0x1A77 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH2 0x1A7D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x70A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B4 PUSH1 0x4 CALLDATALOAD PUSH2 0x1C8D JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD DUP3 SWAP1 DUP2 LT PUSH2 0x724 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x0 CALLER ADDRESS EQ PUSH2 0x759 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x78F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE SWAP2 POP JUMPDEST PUSH1 0x3 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP3 LT ISZERO PUSH2 0x912 JUMPI DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x3 DUP4 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x82F JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x907 JUMPI PUSH1 0x3 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0x887 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x3 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x8BA JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0x912 JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x7DD JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 PUSH2 0x943 SWAP1 DUP3 PUSH2 0x20C4 JUMP JUMPDEST POP PUSH1 0x3 SLOAD PUSH1 0x4 SLOAD GT ISZERO PUSH2 0x95C JUMPI PUSH1 0x3 SLOAD PUSH2 0x95C SWAP1 PUSH2 0x1742 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH32 0x8001553A916EF2F495D26A907CC54D96ED840D7BDA71E73194BF5A9DF7A76B90 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x9C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD DUP4 SWAP2 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x9EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD DUP5 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0xA0D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 PUSH2 0xA17 DUP2 PUSH2 0x1194 JUMP JUMPDEST ISZERO PUSH2 0xA21 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE MLOAD DUP9 SWAP3 PUSH32 0xF6A317157440607F36269043EB55F1287A5A19BA2216AFEAB88CD46CBCFB88E9 SWAP2 LOG3 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 ADD SLOAD DUP3 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0xAE5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH2 0xAEF DUP2 PUSH2 0x1194 JUMP JUMPDEST ISZERO ISZERO PUSH2 0xAFA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 MSTORE PUSH1 0x8 SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD DUP6 SWAP2 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0xB3D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x72656D6F7665417574686F72697A6564416464726573734174496E6465782861 DUP2 MSTORE PUSH32 0x6464726573732C75696E74323536290000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP3 MLOAD SWAP2 DUP3 SWAP1 SUB PUSH1 0x2F ADD DUP3 KECCAK256 PUSH1 0x2 DUP1 DUP7 ADD DUP1 SLOAD PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP5 AND ISZERO MUL ADD SWAP1 SWAP2 AND SWAP3 SWAP1 SWAP3 DIV SWAP2 DUP3 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP1 DUP5 MSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP2 AND SWAP4 PUSH2 0xC79 SWAP4 PUSH1 0x0 SWAP4 SWAP1 SWAP3 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xC66 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xC3B JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xC66 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xC49 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP PUSH2 0x1E7E SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND EQ PUSH2 0xCA5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x3 DUP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP2 SLOAD DUP2 DUP4 ADD SLOAD SWAP4 MLOAD PUSH1 0x2 DUP1 DUP6 ADD DUP1 SLOAD SWAP6 SWAP12 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND SWAP6 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 DUP4 SWAP3 DUP6 SWAP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP4 AND ISZERO PUSH2 0x100 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 AND DIV DUP1 ISZERO PUSH2 0xD97 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xD6C JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xD97 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xD7A JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP ISZERO PUSH2 0xDE2 JUMPI PUSH1 0x40 MLOAD DUP7 SWAP1 PUSH32 0x33E13ECB54C3076D8E8BB8C2881800A4D972B792045FFAE98FDF46DF365FED75 SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH2 0xE38 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP7 SWAP1 PUSH32 0x526441BB6C1ABA3C9A4A6CA1D6545DA9C2333C8C48343EF398EB858D72B79236 SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH1 0x3 DUP6 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST PUSH1 0x5 SLOAD DUP2 LT ISZERO PUSH2 0xEAB JUMPI DUP4 DUP1 ISZERO PUSH2 0xE73 JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND ISZERO JUMPDEST DUP1 PUSH2 0xE97 JUMPI POP DUP3 DUP1 ISZERO PUSH2 0xE97 JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND JUMPDEST ISZERO PUSH2 0xEA3 JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x1 ADD PUSH2 0xE4A JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0xEBE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO ISZERO PUSH2 0xEE1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP7 ISZERO ISZERO SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP3 MLOAD SWAP4 DUP5 MSTORE SWAP1 DUP4 ADD MSTORE DUP1 MLOAD PUSH32 0xDAEF8FF7DC66C5E34EB9C338AAB679D9F427F89868D9228494455A4D982EB2B0 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP POP POP JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0xF7D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0xFB2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO ISZERO PUSH2 0xFD5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3 DUP1 SLOAD SWAP1 POP PUSH1 0x1 ADD PUSH1 0x4 SLOAD PUSH1 0x32 DUP3 GT DUP1 PUSH2 0xFEF JUMPI POP DUP2 DUP2 GT JUMPDEST DUP1 PUSH2 0xFF8 JUMPI POP DUP1 ISZERO JUMPDEST DUP1 PUSH2 0x1001 JUMPI POP DUP2 ISZERO JUMPDEST ISZERO PUSH2 0x100B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x3 DUP1 SLOAD SWAP2 DUP3 ADD DUP2 SSTORE DUP4 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND DUP5 OR SWAP1 SSTORE MLOAD PUSH32 0xF39E6E1EB0EDCF53C221607B54B00CD28F3196FED0A24994DC308B8F611B682D SWAP2 SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x72656D6F7665417574686F72697A6564416464726573734174496E6465782861 DUP2 MSTORE PUSH32 0x6464726573732C75696E74323536290000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x2F ADD SWAP1 KECCAK256 PUSH1 0x0 SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH2 0x116B DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x1E7E AND JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND EQ SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 JUMPDEST PUSH1 0x3 SLOAD DUP2 LT ISZERO PUSH2 0x121E JUMPI PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 DUP1 SLOAD SWAP2 SWAP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x11C2 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1203 JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x4 SLOAD DUP3 EQ ISZERO PUSH2 0x1216 JUMPI PUSH1 0x1 SWAP3 POP PUSH2 0x121E JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x1199 JUMP JUMPDEST POP POP SWAP2 SWAP1 POP JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0x1231 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x6 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xD1C9101A34FEFF75CCCEF14A28785A0279CB0B49C1F321F21F5F422E746B4377 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST PUSH1 0x3 SLOAD DUP2 LT ISZERO PUSH2 0x12F7 JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 DUP1 SLOAD SWAP2 SWAP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x12AE JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x12EF JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x1 ADD PUSH2 0x1285 JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP2 DUP2 MSTORE SWAP2 DUP2 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP1 DUP4 ADD SLOAD PUSH1 0x2 DUP1 DUP6 ADD DUP1 SLOAD DUP8 MLOAD PUSH2 0x100 SWAP6 DUP3 AND ISZERO SWAP6 SWAP1 SWAP6 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD AND SWAP2 SWAP1 SWAP2 DIV PUSH1 0x1F DUP2 ADD DUP9 SWAP1 DIV DUP9 MUL DUP5 ADD DUP9 ADD SWAP1 SWAP7 MSTORE DUP6 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND SWAP6 SWAP1 SWAP5 SWAP2 SWAP3 SWAP2 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x13D3 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x13A8 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x13D3 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x13B6 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP PUSH1 0x3 SWAP1 SWAP4 ADD SLOAD SWAP2 SWAP3 POP POP PUSH1 0xFF AND DUP5 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x144B JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1420 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x0 DUP1 PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1488 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 SWAP2 POP PUSH1 0x0 SWAP1 POP JUMPDEST PUSH1 0x5 SLOAD DUP2 LT ISZERO PUSH2 0x150F JUMPI DUP6 DUP1 ISZERO PUSH2 0x14BD JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND ISZERO JUMPDEST DUP1 PUSH2 0x14E1 JUMPI POP DUP5 DUP1 ISZERO PUSH2 0x14E1 JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND JUMPDEST ISZERO PUSH2 0x1507 JUMPI DUP1 DUP4 DUP4 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x14F5 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SWAP1 JUMPDEST PUSH1 0x1 ADD PUSH2 0x1494 JUMP JUMPDEST DUP8 DUP8 SUB PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x153B JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP DUP8 SWAP1 POP JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x1584 JUMPI DUP3 DUP2 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1558 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP5 DUP10 DUP4 SUB DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1572 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x1542 JUMP JUMPDEST POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x0 DUP1 PUSH1 0x3 DUP1 SLOAD SWAP1 POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x15C4 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 SWAP2 POP PUSH1 0x0 SWAP1 POP JUMPDEST PUSH1 0x3 SLOAD DUP2 LT ISZERO PUSH2 0x16A8 JUMPI PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 DUP1 SLOAD SWAP2 SWAP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x15F9 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x16A0 JUMPI PUSH1 0x3 DUP1 SLOAD DUP3 SWAP1 DUP2 LT PUSH2 0x1641 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 DUP5 SWAP1 DUP5 SWAP1 DUP2 LT PUSH2 0x1674 JUMPI INVALID JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SWAP1 JUMPDEST PUSH1 0x1 ADD PUSH2 0x15D0 JUMP JUMPDEST DUP2 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x16D2 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP PUSH1 0x0 SWAP1 POP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1734 JUMPI DUP3 DUP2 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x16F0 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP5 DUP3 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1708 JUMPI INVALID JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 ADD PUSH2 0x16DA JUMP JUMPDEST POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0x174E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3 SLOAD DUP2 PUSH1 0x32 DUP3 GT DUP1 PUSH2 0x1760 JUMPI POP DUP2 DUP2 GT JUMPDEST DUP1 PUSH2 0x1769 JUMPI POP DUP1 ISZERO JUMPDEST DUP1 PUSH2 0x1772 JUMPI POP DUP2 ISZERO JUMPDEST ISZERO PUSH2 0x177C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x4 DUP4 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xA3F1EE9126A074D9326C682F561767F710E927FAA811F7A99829D49DC421797A SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x17D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO ISZERO PUSH2 0x1809 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD DUP5 SWAP2 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x1834 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 PUSH2 0x183E DUP2 PUSH2 0x1194 JUMP JUMPDEST ISZERO PUSH2 0x1848 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 CALLER DUP1 DUP7 MSTORE SWAP3 MSTORE DUP1 DUP5 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SWAP4 OR SWAP1 SWAP3 SSTORE SWAP1 MLOAD DUP9 SWAP3 PUSH32 0x4A504A94899432A9846E1AA406DCEB1BCFD538BB839071D49D1E5E23F5BE30EF SWAP2 LOG3 PUSH2 0x18BC DUP7 PUSH2 0x1194 JUMP JUMPDEST ISZERO PUSH2 0xE38 JUMPI PUSH2 0xE38 DUP7 TIMESTAMP PUSH2 0x1F46 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 MSTORE PUSH1 0x8 SWAP1 SWAP3 MSTORE DUP3 KECCAK256 SLOAD DUP4 SWAP2 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x190D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x72656D6F7665417574686F72697A6564416464726573734174496E6465782861 DUP2 MSTORE PUSH32 0x6464726573732C75696E74323536290000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP3 MLOAD SWAP2 DUP3 SWAP1 SUB PUSH1 0x2F ADD DUP3 KECCAK256 PUSH1 0x2 DUP1 DUP7 ADD DUP1 SLOAD PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP5 AND ISZERO MUL ADD SWAP1 SWAP2 AND SWAP3 SWAP1 SWAP3 DIV SWAP2 DUP3 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP1 DUP5 MSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP2 AND SWAP4 PUSH2 0x1A0B SWAP4 PUSH1 0x0 SWAP4 SWAP1 SWAP3 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xC66 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xC3B JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xC66 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND EQ PUSH2 0x1A37 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A4E DUP5 DUP5 DUP5 PUSH2 0x1F91 JUMP JUMPDEST SWAP1 POP PUSH2 0x1A59 DUP2 PUSH2 0x17B9 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x32 DUP2 JUMP JUMPDEST PUSH1 0x4 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 CALLER ADDRESS EQ PUSH2 0x1A8B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x1AC1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x1AF6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP3 POP JUMPDEST PUSH1 0x3 SLOAD DUP4 LT ISZERO PUSH2 0x1BBB JUMPI DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x3 DUP5 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1B2B JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x1BB0 JUMPI DUP4 PUSH1 0x3 DUP5 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1B63 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0x1BBB JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 PUSH2 0x1AFB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 SWAP1 DUP2 AND SWAP1 SWAP2 SSTORE SWAP4 DUP9 AND DUP3 MSTORE DUP1 DUP3 KECCAK256 DUP1 SLOAD SWAP1 SWAP5 AND PUSH1 0x1 OR SWAP1 SWAP4 SSTORE SWAP2 MLOAD SWAP1 SWAP2 PUSH32 0x8001553A916EF2F495D26A907CC54D96ED840D7BDA71E73194BF5A9DF7A76B90 SWAP2 LOG2 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP1 PUSH32 0xF39E6E1EB0EDCF53C221607B54B00CD28F3196FED0A24994DC308B8F611B682D SWAP1 PUSH1 0x0 SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 ADD SLOAD DUP3 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x1CAE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH2 0x1CB8 DUP2 PUSH2 0x1194 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x1CC3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP6 SWAP2 ADD TIMESTAMP LT ISZERO PUSH2 0x1CE4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x3 DUP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP2 SLOAD DUP2 DUP4 ADD SLOAD SWAP4 MLOAD PUSH1 0x2 DUP1 DUP6 ADD DUP1 SLOAD SWAP6 SWAP11 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND SWAP6 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 DUP4 SWAP3 DUP6 SWAP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP4 AND ISZERO PUSH2 0x100 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 AND DIV DUP1 ISZERO PUSH2 0x1DD6 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1DAB JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1DD6 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1DB9 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP ISZERO PUSH2 0x1E21 JUMPI PUSH1 0x40 MLOAD DUP6 SWAP1 PUSH32 0x33E13ECB54C3076D8E8BB8C2881800A4D972B792045FFAE98FDF46DF365FED75 SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH2 0x1E77 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP6 SWAP1 PUSH32 0x526441BB6C1ABA3C9A4A6CA1D6545DA9C2333C8C48343EF398EB858D72B79236 SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH1 0x3 DUP5 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x4 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x1F1B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F345F4C454E4754485F524551 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x5549524544000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x84 ADD SWAP1 REVERT JUMPDEST POP POP PUSH1 0x20 ADD MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 SWAP1 SSTORE DUP2 MLOAD DUP4 DUP2 MSTORE SWAP2 MLOAD DUP5 SWAP3 PUSH32 0xB237AFE65F1514FD7EA3F923EA4FE792BDD07000A912B6CD1602A8E7F573C8D SWAP3 SWAP1 DUP3 SWAP1 SUB ADD SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO ISZERO PUSH2 0x1FB6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x80 DUP2 ADD DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD DUP10 DUP2 MSTORE DUP4 DUP6 ADD DUP10 DUP2 MSTORE PUSH1 0x0 PUSH1 0x60 DUP7 ADD DUP2 SWAP1 MSTORE DUP8 DUP2 MSTORE DUP1 DUP5 MSTORE SWAP6 SWAP1 SWAP6 KECCAK256 DUP5 MLOAD DUP2 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP5 AND SWAP4 SWAP1 SWAP4 OR DUP4 SSTORE MLOAD PUSH1 0x1 DUP4 ADD SSTORE SWAP3 MLOAD DUP1 MLOAD SWAP5 SWAP7 POP SWAP2 SWAP4 SWAP1 SWAP3 PUSH2 0x204E SWAP3 PUSH1 0x2 DUP6 ADD SWAP3 SWAP2 ADD SWAP1 PUSH2 0x20ED JUMP JUMPDEST POP PUSH1 0x60 SWAP2 SWAP1 SWAP2 ADD MLOAD PUSH1 0x3 SWAP1 SWAP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x5 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE PUSH1 0x40 MLOAD DUP3 SWAP1 PUSH32 0xC0BA8FE4B176C1714197D43B9CC6BCF797A4A7461C5FE8D0EF6E184AE7601E51 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 SLOAD DUP2 DUP4 SSTORE DUP2 DUP2 GT ISZERO PUSH2 0x20E8 JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 PUSH2 0x20E8 SWAP2 DUP2 ADD SWAP1 DUP4 ADD PUSH2 0x216B JUMP JUMPDEST POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0x212E JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x215B JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x215B JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x215B JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x2140 JUMP JUMPDEST POP PUSH2 0x2167 SWAP3 SWAP2 POP PUSH2 0x216B JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0x1453 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x2167 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x2171 JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 PUSH25 0x9E4B58D60A690630C3B23ECD4865A36557B02FD52171A4C948 0xaa DUP3 0xae DUP14 DUP11 DUP4 STOP 0x29 ",
- "sourceMap": "668:1037:3:-;;;726:274;8:9:-1;5:2;;;30:1;27;20:12;5:2;726:274:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2913:14:0;;726:274:3;;;;;;;;;;;;;;;;;;2445:9:2;;;;726:274:3;;;;;;;;;;2445:9:2;;726:274:3;256:2:0;2236:28;;;:66;;;2292:10;2280:9;:22;2236:66;:96;;;-1:-1:-1;2318:14:0;;2236:96;:127;;;-1:-1:-1;2348:15:0;;2236:127;2229:153;;;2377:5;;;2229:153;2966:1;2959:8;;2954:168;2971:7;:14;2969:1;:16;2954:168;;;3010:7;:19;3018:7;3026:1;3018:10;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3010:19:0;;;;;;;;;;;-1:-1:-1;3010:19:0;;;;;:38;;;3033:7;3041:1;3033:10;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3033:15:0;3047:1;3033:15;3010:38;3006:65;;;3066:5;;;3006:65;3107:4;3085:7;:19;3093:7;3101:1;3093:10;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3085:19:0;;;;;;;;;;;-1:-1:-1;3085:19:0;:26;;-1:-1:-1;;3085:26:0;;;;;;;;;;-1:-1:-1;2987:3:0;;;;;2954:168;;;3131:16;;;;:6;;:16;;;;;:::i;:::-;-1:-1:-1;;;3157:8:0;:20;;;;-1:-1:-1;;2032:17:1;:38;-1:-1:-1;;;;;2440:229:2;2464:20;:27;2460:1;:31;2440:229;;;2533:20;2554:1;2533:23;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2578:24:2;;;;2570:33;;;;;;-1:-1:-1;;;;;2617:34:2;;;;;;:22;:34;;;;;:41;;-1:-1:-1;;2617:41:2;2654:4;2617:41;;;;;;2493:3;;;;;2440:229;;;2161:514;;;;;;726:274:3;;;;668:1037;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;668:1037:3;-1:-1:-1;;;;;668:1037:3;;;;;;;;;;;-1:-1:-1;668:1037:3;;;;;;;-1:-1:-1;668:1037:3;;;-1:-1:-1;668:1037:3;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;;668:1037:3;;;;;;;;;:::o;:::-;;;;;;;"
+ "object": "0x606060405234156200000d57fe5b6040516200217c3803806200217c83398101604090815281516020830151918301516060840151918401939290920191905b838383835b600060008584845b82825b600082518260328211806200006357508181115b806200006d575080155b8062000077575081155b15620000835760006000fd5b600092505b84518310156200015857600260008685815181101515620000a557fe5b6020908102909101810151600160a060020a031682528101919091526040016000205460ff1680620000f857508483815181101515620000e157fe5b90602001906020020151600160a060020a03166000145b15620001045760006000fd5b60016002600087868151811015156200011957fe5b602090810291909101810151600160a060020a03168252810191909152604001600020805460ff19169115159190911790555b60019092019162000088565b84516200016d90600390602088019062000206565b5060048490555b5b505050600683905550505b505050600091505b8451821015620001f4578482815181101515620001a157fe5b602090810290910101519050600160a060020a0381161515620001c45760006000fd5b600160a060020a0381166000908152600860205260409020805460ff191660011790555b60019091019062000188565b5b5050505050505b505050506200029f565b8280548282559060005260206000209081019282156200025e579160200282015b828111156200025e5782518254600160a060020a031916600160a060020a0390911617825560209092019160019091019062000227565b5b506200026d92915062000271565b5090565b6200029c91905b808211156200026d578054600160a060020a031916815560010162000278565b5090565b90565b611ecd80620002af6000396000f300606060405236156101645763ffffffff60e060020a600035041663025e7c2781146101b6578063173825d9146101e557806320ea8d86146102035780632f54bf6e146102185780633411c81c146102485780633589b35c1461027b57806337bd78a01461029057806354741525146102b25780635a1a66af146102de5780637065cb481461030157806372cbe61d1461031f578063784547a7146103895780637ad28c51146103b057806383250f79146103c55780638b51d13f146103f55780639ace38c21461041a578063a0e67e2b146104d7578063a8abe69a14610542578063b5dc40c3146105bd578063b77bf6001461062b578063ba51a6df1461064d578063c01a8c8414610662578063c296e43c14610677578063c64274741461069e578063cc12cb2814610713578063d38f2d8214610788578063d74f8edd146107ad578063dc8452cd146107cf578063e20056e6146107f1578063ee22610b14610815575b6101b45b60003411156101b157604080513481529051600160a060020a033316917fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c919081900360200190a25b5b565b005b34156101be57fe5b6101c960043561082a565b60408051600160a060020a039092168252519081900360200190f35b34156101ed57fe5b6101b4600160a060020a036004351661085c565b005b341561020b57fe5b6101b4600435610a0d565b005b341561022057fe5b610234600160a060020a0360043516610b01565b604080519115158252519081900360200190f35b341561025057fe5b610234600435600160a060020a0360243516610b16565b604080519115158252519081900360200190f35b341561028357fe5b6101b4600435610b36565b005b341561029857fe5b6102a0610de5565b60408051918252519081900360200190f35b34156102ba57fe5b6102a060043515156024351515610deb565b60408051918252519081900360200190f35b34156102e657fe5b6101b4600160a060020a03600435166024351515610e5a565b005b341561030957fe5b6101b4600160a060020a0360043516610efa565b005b341561032757fe5b610234600480803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284375094965061103195505050505050565b604080519115158252519081900360200190f35b341561039157fe5b6102346004356110a8565b604080519115158252519081900360200190f35b34156103b857fe5b6101b460043561113c565b005b34156103cd57fe5b610234600160a060020a036004351661119a565b604080519115158252519081900360200190f35b34156103fd57fe5b6102a06004356111af565b60408051918252519081900360200190f35b341561042257fe5b61042d60043561122e565b60408051600160a060020a03861681526020810185905282151560608201526080918101828152845460026000196101006001841615020190911604928201839052909160a0830190859080156104c55780601f1061049a576101008083540402835291602001916104c5565b820191906000526020600020905b8154815290600101906020018083116104a857829003601f168201915b50509550505050505060405180910390f35b34156104df57fe5b6104e7611262565b604080516020808252835181830152835191928392908301918581019102808383821561052f575b80518252602083111561052f57601f19909201916020918201910161050f565b5050509050019250505060405180910390f35b341561054a57fe5b6104e7600435602435604435151560643515156112cb565b604080516020808252835181830152835191928392908301918581019102808383821561052f575b80518252602083111561052f57601f19909201916020918201910161050f565b5050509050019250505060405180910390f35b34156105c557fe5b6104e7600435611400565b604080516020808252835181830152835191928392908301918581019102808383821561052f575b80518252602083111561052f57601f19909201916020918201910161050f565b5050509050019250505060405180910390f35b341561063357fe5b6102a0611588565b60408051918252519081900360200190f35b341561065557fe5b6101b460043561158e565b005b341561066a57fe5b6101b460043561161e565b005b341561067f57fe5b610234600435611733565b604080519115158252519081900360200190f35b34156106a657fe5b604080516020600460443581810135601f81018490048402850184019095528484526102a0948235600160a060020a031694602480359560649492939190920191819084018382808284375094965061187a95505050505050565b60408051918252519081900360200190f35b341561071b57fe5b61076b600480803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843750949650509335935061189a92505050565b60408051600160e060020a03199092168252519081900360200190f35b341561079057fe5b6102a06004356118af565b60408051918252519081900360200190f35b34156107b557fe5b6102a06118c1565b60408051918252519081900360200190f35b34156107d757fe5b6102a06118c6565b60408051918252519081900360200190f35b34156107f957fe5b6101b4600160a060020a03600435811690602435166118cc565b005b341561081d57fe5b6101b4600435611a88565b005b600380548290811061083857fe5b906000526020600020900160005b915054906101000a9004600160a060020a031681565b600030600160a060020a031633600160a060020a031614151561087f5760006000fd5b600160a060020a038216600090815260026020526040902054829060ff1615156108a95760006000fd5b600160a060020a0383166000908152600260205260408120805460ff1916905591505b600354600019018210156109a45782600160a060020a03166003838154811015156108f357fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a031614156109985760038054600019810190811061093457fe5b906000526020600020900160005b9054906101000a9004600160a060020a031660038381548110151561096357fe5b906000526020600020900160005b6101000a815481600160a060020a030219169083600160a060020a031602179055506109a4565b5b6001909101906108cc565b6003805460001901906109b79082611d89565b5060035460045411156109d0576003546109d09061158e565b5b604051600160a060020a038416907f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9090600090a25b5b505b5050565b33600160a060020a03811660009081526002602052604090205460ff161515610a365760006000fd5b600082815260016020908152604080832033600160a060020a038116855292529091205483919060ff161515610a6c5760006000fd5b600084815260208190526040902060030154849060ff1615610a8e5760006000fd5b84610a98816110a8565b15610aa35760006000fd5b6000868152600160209081526040808320600160a060020a0333168085529252808320805460ff191690555188927ff6a317157440607f36269043eb55f1287a5a19ba2216afeab88cd46cbcfb88e991a35b5b505b505b50505b5050565b60026020526000908152604090205460ff1681565b600160209081526000928352604080842090915290825290205460ff1681565b600081815260208190526040812060030154829060ff1615610b585760006000fd5b82610b62816110a8565b1515610b6e5760006000fd5b6000848152602081815260408083208054600160a060020a0316845260089092529091205485919060ff161515610ba55760006000fd5b604080517f72656d6f7665417574686f72697a6564416464726573734174496e64657828618152608860020a6e6464726573732c75696e7432353629026020808301919091528251602f9281900392909201822060028581018054600181161561010002600019011691909104601f8101849004840285018401909552848452600160e060020a031990911693610c949392830182828015610c885780601f10610c5d57610100808354040283529160200191610c88565b820191906000526020600020905b815481529060010190602001808311610c6b57829003601f168201915b50505050506000611c1d565b600160e060020a03191614610ca95760006000fd5b6000868152602081905260409081902060038101805460ff19166001908117909155815481830154935160028085018054959b50600160a060020a0390931695949293919283928592600019918316156101000291909101909116048015610d525780601f10610d2757610100808354040283529160200191610d52565b820191906000526020600020905b815481529060010190602001808311610d3557829003601f168201915b505091505060006040518083038185876185025a03f19250505015610da15760405186907f33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed7590600090a2610af5565b60405186907f526441bb6c1aba3c9a4a6ca1d6545da9c2333c8c48343ef398eb858d72b7923690600090a260038501805460ff191690555b5b5b50505b505b505050565b60065481565b6000805b600554811015610e5257838015610e18575060008181526020819052604090206003015460ff16155b80610e3c5750828015610e3c575060008181526020819052604090206003015460ff165b5b15610e49576001820191505b5b600101610def565b5b5092915050565b30600160a060020a031633600160a060020a0316141515610e7b5760006000fd5b81600160a060020a0381161515610e925760006000fd5b600160a060020a038316600081815260086020908152604091829020805460ff191686151590811790915582519384529083015280517fdaef8ff7dc66c5e34eb9c338aab679d9f427f89868d9228494455a4d982eb2b09281900390910190a15b5b505b5050565b30600160a060020a031633600160a060020a0316141515610f1b5760006000fd5b600160a060020a038116600090815260026020526040902054819060ff1615610f445760006000fd5b81600160a060020a0381161515610f5b5760006000fd5b6003805490506001016004546032821180610f7557508181115b80610f7e575080155b80610f87575081155b15610f925760006000fd5b600160a060020a0385166000908152600260205260409020805460ff191660019081179091556003805490918101610fca8382611d89565b916000526020600020900160005b8154600160a060020a03808a166101009390930a838102910219909116179091556040519091507ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d90600090a25b5b50505b505b505b50565b604080517f72656d6f7665417574686f72697a6564416464726573734174496e64657828618152608860020a6e6464726573732c75696e7432353629026020820152905190819003602f019020600090600160e060020a0319166110958383611c1d565b600160e060020a0319161490505b919050565b600080805b60035481101561113457600084815260016020526040812060038054919291849081106110d657fe5b906000526020600020900160005b9054600160a060020a036101009290920a900416815260208101919091526040016000205460ff1615611118576001820191505b60045482141561112b5760019250611134565b5b6001016110ad565b5b5050919050565b30600160a060020a031633600160a060020a031614151561115d5760006000fd5b60068190556040805182815290517fd1c9101a34feff75cccef14a28785a0279cb0b49c1f321f21f5f422e746b43779181900360200190a15b5b50565b60086020526000908152604090205460ff1681565b6000805b60035481101561122757600083815260016020526040812060038054919291849081106111dc57fe5b906000526020600020900160005b9054600160a060020a036101009290920a900416815260208101919091526040016000205460ff161561121e576001820191505b5b6001016111b3565b5b50919050565b6000602081905290815260409020805460018201546003830154600160a060020a0390921692909160029091019060ff1684565b61126a611ddd565b60038054806020026020016040519081016040528092919081815260200182805480156112c057602002820191906000526020600020905b8154600160a060020a031681526001909101906020018083116112a2575b505050505090505b90565b6112d3611ddd565b6112db611ddd565b600060006005546040518059106112ef5750595b908082528060200260200182016040525b50925060009150600090505b60055481101561138957858015611335575060008181526020819052604090206003015460ff16155b806113595750848015611359575060008181526020819052604090206003015460ff165b5b156113805780838381518110151561136e57fe5b60209081029091010152600191909101905b5b60010161130c565b8787036040518059106113995750595b908082528060200260200182016040525b5093508790505b868110156113f45782818151811015156113c757fe5b90602001906020020151848983038151811015156113e157fe5b602090810290910101525b6001016113b1565b5b505050949350505050565b611408611ddd565b611410611ddd565b60035460405160009182918059106114255750595b908082528060200260200182016040525b50925060009150600090505b60035481101561150a576000858152600160205260408120600380549192918490811061146b57fe5b906000526020600020900160005b9054600160a060020a036101009290920a900416815260208101919091526040016000205460ff16156115015760038054829081106114b457fe5b906000526020600020900160005b9054906101000a9004600160a060020a031683838151811015156114e257fe5b600160a060020a03909216602092830290910190910152600191909101905b5b600101611442565b816040518059106115185750595b908082528060200260200182016040525b509350600090505b8181101561157f57828181518110151561154757fe5b90602001906020020151848281518110151561155f57fe5b600160a060020a039092166020928302909101909101525b600101611531565b5b505050919050565b60055481565b30600160a060020a031633600160a060020a03161415156115af5760006000fd5b6003548160328211806115c157508181115b806115ca575080155b806115d3575081155b156115de5760006000fd5b60048390556040805184815290517fa3f1ee9126a074d9326c682f561767f710e927faa811f7a99829d49dc421797a9181900360200190a15b5b50505b50565b33600160a060020a03811660009081526002602052604090205460ff1615156116475760006000fd5b6000828152602081905260409020548290600160a060020a0316151561166d5760006000fd5b600083815260016020908152604080832033600160a060020a038116855292529091205484919060ff16156116a25760006000fd5b846116ac816110a8565b156116b75760006000fd5b6000868152600160208181526040808420600160a060020a0333168086529252808420805460ff1916909317909255905188927f4a504a94899432a9846e1aa406dceb1bcfd538bb839071d49d1e5e23f5be30ef91a3611716866110a8565b15610af557610af58642611c4a565b5b5b5b505b50505b505b5050565b6000818152602081815260408083208054600160a060020a03168452600890925282205483919060ff1615156117695760006000fd5b604080517f72656d6f7665417574686f72697a6564416464726573734174496e64657828618152608860020a6e6464726573732c75696e7432353629026020808301919091528251602f9281900392909201822060028581018054600181161561010002600019011691909104601f8101849004840285018401909552848452600160e060020a0319909116936118589392830182828015610c885780601f10610c5d57610100808354040283529160200191610c88565b820191906000526020600020905b815481529060010190602001808311610c6b57829003601f168201915b50505050506000611c1d565b600160e060020a0319161461186d5760006000fd5b600192505b5b5050919050565b6000611887848484611c96565b90506118928161161e565b5b9392505050565b60006118a68383611c1d565b90505b92915050565b60076020526000908152604090205481565b603281565b60045481565b600030600160a060020a031633600160a060020a03161415156118ef5760006000fd5b600160a060020a038316600090815260026020526040902054839060ff1615156119195760006000fd5b600160a060020a038316600090815260026020526040902054839060ff16156119425760006000fd5b600092505b6003548310156119ea5784600160a060020a031660038481548110151561196a57fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a031614156119de57836003848154811015156119a957fe5b906000526020600020900160005b6101000a815481600160a060020a030219169083600160a060020a031602179055506119ea565b5b600190920191611947565b600160a060020a03808616600081815260026020526040808220805460ff1990811690915593881682528082208054909416600117909355915190917f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9091a2604051600160a060020a038516907ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d90600090a25b5b505b505b505050565b600081815260208190526040812060030154829060ff1615611aaa5760006000fd5b82611ab4816110a8565b1515611ac05760006000fd5b600654600085815260076020526040902054859101421015611ae25760006000fd5b6000858152602081905260409081902060038101805460ff19166001908117909155815481830154935160028085018054959a50600160a060020a0390931695949293919283928592600019918316156101000291909101909116048015611b8b5780601f10611b6057610100808354040283529160200191611b8b565b820191906000526020600020905b815481529060010190602001808311611b6e57829003601f168201915b505091505060006040518083038185876185025a03f19250505015611bda5760405185907f33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed7590600090a2610af8565b60405185907f526441bb6c1aba3c9a4a6ca1d6545da9c2333c8c48343ef398eb858d72b7923690600090a260038401805460ff191690555b5b5b505b505b505050565b600081600401835110151515611c335760006000fd5b506020820151600160e060020a0319165b92915050565b6000828152600760209081526040918290208390558151838152915184927f0b237afe65f1514fd7ea3f923ea4fe792bdd07000a912b6cd1602a8e7f573c8d92908290030190a25b5050565b600083600160a060020a0381161515611caf5760006000fd5b60055460408051608081018252600160a060020a0388811682526020808301898152838501898152600060608601819052878152808452959095208451815473ffffffffffffffffffffffffffffffffffffffff191694169390931783555160018301559251805194965091939092611d2f926002850192910190611e01565b50606091909101516003909101805460ff191691151591909117905560058054600101905560405182907fc0ba8fe4b176c1714197d43b9cc6bcf797a4a7461c5fe8d0ef6e184ae7601e5190600090a25b5b509392505050565b815481835581811511610a0657600083815260209020610a06918101908301611e80565b5b505050565b815481835581811511610a0657600083815260209020610a06918101908301611e80565b5b505050565b60408051602081019091526000815290565b60408051602081019091526000815290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611e4257805160ff1916838001178555611e6f565b82800160010185558215611e6f579182015b82811115611e6f578251825591602001919060010190611e54565b5b50611e7c929150611e80565b5090565b6112c891905b80821115611e7c5760008155600101611e86565b5090565b905600a165627a7a72305820dfebd4bc1393ad5d741d2d12f334c78b86e9e4d031a3671a7869ea640fafc58f0029",
+ "opcodes": "PUSH1 0x60 PUSH1 0x40 MSTORE CALLVALUE ISZERO PUSH3 0xD JUMPI INVALID JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x217C CODESIZE SUB DUP1 PUSH3 0x217C DUP4 CODECOPY DUP2 ADD PUSH1 0x40 SWAP1 DUP2 MSTORE DUP2 MLOAD PUSH1 0x20 DUP4 ADD MLOAD SWAP2 DUP4 ADD MLOAD PUSH1 0x60 DUP5 ADD MLOAD SWAP2 DUP5 ADD SWAP4 SWAP3 SWAP1 SWAP3 ADD SWAP2 SWAP1 JUMPDEST DUP4 DUP4 DUP4 DUP4 JUMPDEST PUSH1 0x0 PUSH1 0x0 DUP6 DUP5 DUP5 JUMPDEST DUP3 DUP3 JUMPDEST PUSH1 0x0 DUP3 MLOAD DUP3 PUSH1 0x32 DUP3 GT DUP1 PUSH3 0x63 JUMPI POP DUP2 DUP2 GT JUMPDEST DUP1 PUSH3 0x6D JUMPI POP DUP1 ISZERO JUMPDEST DUP1 PUSH3 0x77 JUMPI POP DUP2 ISZERO JUMPDEST ISZERO PUSH3 0x83 JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 SWAP3 POP JUMPDEST DUP5 MLOAD DUP4 LT ISZERO PUSH3 0x158 JUMPI PUSH1 0x2 PUSH1 0x0 DUP7 DUP6 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH3 0xA5 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND DUP3 MSTORE DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 SHA3 SLOAD PUSH1 0xFF AND DUP1 PUSH3 0xF8 JUMPI POP DUP5 DUP4 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH3 0xE1 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x0 EQ JUMPDEST ISZERO PUSH3 0x104 JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x2 PUSH1 0x0 DUP8 DUP7 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH3 0x119 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND DUP3 MSTORE DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 SHA3 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMPDEST PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 PUSH3 0x88 JUMP JUMPDEST DUP5 MLOAD PUSH3 0x16D SWAP1 PUSH1 0x3 SWAP1 PUSH1 0x20 DUP9 ADD SWAP1 PUSH3 0x206 JUMP JUMPDEST POP PUSH1 0x4 DUP5 SWAP1 SSTORE JUMPDEST JUMPDEST POP POP POP PUSH1 0x6 DUP4 SWAP1 SSTORE POP POP JUMPDEST POP POP POP PUSH1 0x0 SWAP2 POP JUMPDEST DUP5 MLOAD DUP3 LT ISZERO PUSH3 0x1F4 JUMPI DUP5 DUP3 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH3 0x1A1 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MLOAD SWAP1 POP PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 AND ISZERO ISZERO PUSH3 0x1C4 JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SHA3 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH3 0x188 JUMP JUMPDEST JUMPDEST POP POP POP POP POP POP JUMPDEST POP POP POP POP PUSH3 0x29F JUMP JUMPDEST DUP3 DUP1 SLOAD DUP3 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 SHA3 SWAP1 DUP2 ADD SWAP3 DUP3 ISZERO PUSH3 0x25E JUMPI SWAP2 PUSH1 0x20 MUL DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x25E JUMPI DUP3 MLOAD DUP3 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB NOT AND PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP1 SWAP2 AND OR DUP3 SSTORE PUSH1 0x20 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH3 0x227 JUMP JUMPDEST JUMPDEST POP PUSH3 0x26D SWAP3 SWAP2 POP PUSH3 0x271 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH3 0x29C SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x26D JUMPI DUP1 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB NOT AND DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x278 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0x1ECD DUP1 PUSH3 0x2AF PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x60 PUSH1 0x40 MSTORE CALLDATASIZE ISZERO PUSH2 0x164 JUMPI PUSH4 0xFFFFFFFF PUSH1 0xE0 PUSH1 0x2 EXP PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x25E7C27 DUP2 EQ PUSH2 0x1B6 JUMPI DUP1 PUSH4 0x173825D9 EQ PUSH2 0x1E5 JUMPI DUP1 PUSH4 0x20EA8D86 EQ PUSH2 0x203 JUMPI DUP1 PUSH4 0x2F54BF6E EQ PUSH2 0x218 JUMPI DUP1 PUSH4 0x3411C81C EQ PUSH2 0x248 JUMPI DUP1 PUSH4 0x3589B35C EQ PUSH2 0x27B JUMPI DUP1 PUSH4 0x37BD78A0 EQ PUSH2 0x290 JUMPI DUP1 PUSH4 0x54741525 EQ PUSH2 0x2B2 JUMPI DUP1 PUSH4 0x5A1A66AF EQ PUSH2 0x2DE JUMPI DUP1 PUSH4 0x7065CB48 EQ PUSH2 0x301 JUMPI DUP1 PUSH4 0x72CBE61D EQ PUSH2 0x31F JUMPI DUP1 PUSH4 0x784547A7 EQ PUSH2 0x389 JUMPI DUP1 PUSH4 0x7AD28C51 EQ PUSH2 0x3B0 JUMPI DUP1 PUSH4 0x83250F79 EQ PUSH2 0x3C5 JUMPI DUP1 PUSH4 0x8B51D13F EQ PUSH2 0x3F5 JUMPI DUP1 PUSH4 0x9ACE38C2 EQ PUSH2 0x41A JUMPI DUP1 PUSH4 0xA0E67E2B EQ PUSH2 0x4D7 JUMPI DUP1 PUSH4 0xA8ABE69A EQ PUSH2 0x542 JUMPI DUP1 PUSH4 0xB5DC40C3 EQ PUSH2 0x5BD JUMPI DUP1 PUSH4 0xB77BF600 EQ PUSH2 0x62B JUMPI DUP1 PUSH4 0xBA51A6DF EQ PUSH2 0x64D JUMPI DUP1 PUSH4 0xC01A8C84 EQ PUSH2 0x662 JUMPI DUP1 PUSH4 0xC296E43C EQ PUSH2 0x677 JUMPI DUP1 PUSH4 0xC6427474 EQ PUSH2 0x69E JUMPI DUP1 PUSH4 0xCC12CB28 EQ PUSH2 0x713 JUMPI DUP1 PUSH4 0xD38F2D82 EQ PUSH2 0x788 JUMPI DUP1 PUSH4 0xD74F8EDD EQ PUSH2 0x7AD JUMPI DUP1 PUSH4 0xDC8452CD EQ PUSH2 0x7CF JUMPI DUP1 PUSH4 0xE20056E6 EQ PUSH2 0x7F1 JUMPI DUP1 PUSH4 0xEE22610B EQ PUSH2 0x815 JUMPI JUMPDEST PUSH2 0x1B4 JUMPDEST PUSH1 0x0 CALLVALUE GT ISZERO PUSH2 0x1B1 JUMPI PUSH1 0x40 DUP1 MLOAD CALLVALUE DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB CALLER AND SWAP2 PUSH32 0xE1FFFCC4923D04B559F4D29A8BFC6CDA04EB5B0D3C460751C2402C5C5CC9109C SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 JUMPDEST JUMPDEST JUMP JUMPDEST STOP JUMPDEST CALLVALUE ISZERO PUSH2 0x1BE JUMPI INVALID JUMPDEST PUSH2 0x1C9 PUSH1 0x4 CALLDATALOAD PUSH2 0x82A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x1ED JUMPI INVALID JUMPDEST PUSH2 0x1B4 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB PUSH1 0x4 CALLDATALOAD AND PUSH2 0x85C JUMP JUMPDEST STOP JUMPDEST CALLVALUE ISZERO PUSH2 0x20B JUMPI INVALID JUMPDEST PUSH2 0x1B4 PUSH1 0x4 CALLDATALOAD PUSH2 0xA0D JUMP JUMPDEST STOP JUMPDEST CALLVALUE ISZERO PUSH2 0x220 JUMPI INVALID JUMPDEST PUSH2 0x234 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB PUSH1 0x4 CALLDATALOAD AND PUSH2 0xB01 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 0x250 JUMPI INVALID JUMPDEST PUSH2 0x234 PUSH1 0x4 CALLDATALOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB PUSH1 0x24 CALLDATALOAD AND PUSH2 0xB16 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 0x283 JUMPI INVALID JUMPDEST PUSH2 0x1B4 PUSH1 0x4 CALLDATALOAD PUSH2 0xB36 JUMP JUMPDEST STOP JUMPDEST CALLVALUE ISZERO PUSH2 0x298 JUMPI INVALID JUMPDEST PUSH2 0x2A0 PUSH2 0xDE5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x2BA JUMPI INVALID JUMPDEST PUSH2 0x2A0 PUSH1 0x4 CALLDATALOAD ISZERO ISZERO PUSH1 0x24 CALLDATALOAD ISZERO ISZERO PUSH2 0xDEB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x2E6 JUMPI INVALID JUMPDEST PUSH2 0x1B4 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD ISZERO ISZERO PUSH2 0xE5A JUMP JUMPDEST STOP JUMPDEST CALLVALUE ISZERO PUSH2 0x309 JUMPI INVALID JUMPDEST PUSH2 0x1B4 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB PUSH1 0x4 CALLDATALOAD AND PUSH2 0xEFA JUMP JUMPDEST STOP JUMPDEST CALLVALUE ISZERO PUSH2 0x327 JUMPI INVALID JUMPDEST PUSH2 0x234 PUSH1 0x4 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP3 ADD DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP7 POP PUSH2 0x1031 SWAP6 POP POP POP POP POP POP 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 0x391 JUMPI INVALID JUMPDEST PUSH2 0x234 PUSH1 0x4 CALLDATALOAD PUSH2 0x10A8 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 0x3B8 JUMPI INVALID JUMPDEST PUSH2 0x1B4 PUSH1 0x4 CALLDATALOAD PUSH2 0x113C JUMP JUMPDEST STOP JUMPDEST CALLVALUE ISZERO PUSH2 0x3CD JUMPI INVALID JUMPDEST PUSH2 0x234 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB PUSH1 0x4 CALLDATALOAD AND PUSH2 0x119A 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 0x3FD JUMPI INVALID JUMPDEST PUSH2 0x2A0 PUSH1 0x4 CALLDATALOAD PUSH2 0x11AF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x422 JUMPI INVALID JUMPDEST PUSH2 0x42D PUSH1 0x4 CALLDATALOAD PUSH2 0x122E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP7 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE DUP3 ISZERO ISZERO PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 SWAP2 DUP2 ADD DUP3 DUP2 MSTORE DUP5 SLOAD PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP5 AND ISZERO MUL ADD SWAP1 SWAP2 AND DIV SWAP3 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 SWAP2 PUSH1 0xA0 DUP4 ADD SWAP1 DUP6 SWAP1 DUP1 ISZERO PUSH2 0x4C5 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x49A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x4C5 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 SHA3 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x4A8 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x4DF JUMPI INVALID JUMPDEST PUSH2 0x4E7 PUSH2 0x1262 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 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 DUP3 ISZERO PUSH2 0x52F JUMPI JUMPDEST DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP4 GT ISZERO PUSH2 0x52F JUMPI PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x50F JUMP JUMPDEST POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x54A JUMPI INVALID JUMPDEST PUSH2 0x4E7 PUSH1 0x4 CALLDATALOAD PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD ISZERO ISZERO PUSH1 0x64 CALLDATALOAD ISZERO ISZERO PUSH2 0x12CB 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 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 DUP3 ISZERO PUSH2 0x52F JUMPI JUMPDEST DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP4 GT ISZERO PUSH2 0x52F JUMPI PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x50F JUMP JUMPDEST POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x5C5 JUMPI INVALID JUMPDEST PUSH2 0x4E7 PUSH1 0x4 CALLDATALOAD PUSH2 0x1400 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 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 DUP3 ISZERO PUSH2 0x52F JUMPI JUMPDEST DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP4 GT ISZERO PUSH2 0x52F JUMPI PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x50F JUMP JUMPDEST POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x633 JUMPI INVALID JUMPDEST PUSH2 0x2A0 PUSH2 0x1588 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x655 JUMPI INVALID JUMPDEST PUSH2 0x1B4 PUSH1 0x4 CALLDATALOAD PUSH2 0x158E JUMP JUMPDEST STOP JUMPDEST CALLVALUE ISZERO PUSH2 0x66A JUMPI INVALID JUMPDEST PUSH2 0x1B4 PUSH1 0x4 CALLDATALOAD PUSH2 0x161E JUMP JUMPDEST STOP JUMPDEST CALLVALUE ISZERO PUSH2 0x67F JUMPI INVALID JUMPDEST PUSH2 0x234 PUSH1 0x4 CALLDATALOAD PUSH2 0x1733 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 0x6A6 JUMPI INVALID JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 PUSH1 0x44 CALLDATALOAD DUP2 DUP2 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x2A0 SWAP5 DUP3 CALLDATALOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND SWAP5 PUSH1 0x24 DUP1 CALLDATALOAD SWAP6 PUSH1 0x64 SWAP5 SWAP3 SWAP4 SWAP2 SWAP1 SWAP3 ADD SWAP2 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP7 POP PUSH2 0x187A SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x71B JUMPI INVALID JUMPDEST PUSH2 0x76B PUSH1 0x4 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP3 ADD DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP7 POP POP SWAP4 CALLDATALOAD SWAP4 POP PUSH2 0x189A SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0xE0 PUSH1 0x2 EXP SUB NOT SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x790 JUMPI INVALID JUMPDEST PUSH2 0x2A0 PUSH1 0x4 CALLDATALOAD PUSH2 0x18AF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x7B5 JUMPI INVALID JUMPDEST PUSH2 0x2A0 PUSH2 0x18C1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x7D7 JUMPI INVALID JUMPDEST PUSH2 0x2A0 PUSH2 0x18C6 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE ISZERO PUSH2 0x7F9 JUMPI INVALID JUMPDEST PUSH2 0x1B4 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH2 0x18CC JUMP JUMPDEST STOP JUMPDEST CALLVALUE ISZERO PUSH2 0x81D JUMPI INVALID JUMPDEST PUSH2 0x1B4 PUSH1 0x4 CALLDATALOAD PUSH2 0x1A88 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x3 DUP1 SLOAD DUP3 SWAP1 DUP2 LT PUSH2 0x838 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 SHA3 SWAP1 ADD PUSH1 0x0 JUMPDEST SWAP2 POP SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND CALLER PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND EQ ISZERO ISZERO PUSH2 0x87F JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SHA3 SLOAD DUP3 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x8A9 JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 SHA3 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE SWAP2 POP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x0 NOT ADD DUP3 LT ISZERO PUSH2 0x9A4 JUMPI DUP3 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x3 DUP4 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x8F3 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 SHA3 SWAP1 ADD PUSH1 0x0 JUMPDEST SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND EQ ISZERO PUSH2 0x998 JUMPI PUSH1 0x3 DUP1 SLOAD PUSH1 0x0 NOT DUP2 ADD SWAP1 DUP2 LT PUSH2 0x934 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 SHA3 SWAP1 ADD PUSH1 0x0 JUMPDEST SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x3 DUP4 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x963 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 SHA3 SWAP1 ADD PUSH1 0x0 JUMPDEST PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB MUL NOT AND SWAP1 DUP4 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND MUL OR SWAP1 SSTORE POP PUSH2 0x9A4 JUMP JUMPDEST JUMPDEST PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x8CC JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x0 NOT ADD SWAP1 PUSH2 0x9B7 SWAP1 DUP3 PUSH2 0x1D89 JUMP JUMPDEST POP PUSH1 0x3 SLOAD PUSH1 0x4 SLOAD GT ISZERO PUSH2 0x9D0 JUMPI PUSH1 0x3 SLOAD PUSH2 0x9D0 SWAP1 PUSH2 0x158E JUMP JUMPDEST JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP5 AND SWAP1 PUSH32 0x8001553A916EF2F495D26A907CC54D96ED840D7BDA71E73194BF5A9DF7A76B90 SWAP1 PUSH1 0x0 SWAP1 LOG2 JUMPDEST JUMPDEST POP JUMPDEST POP POP JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SHA3 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0xA36 JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 SHA3 CALLER PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 AND DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 SHA3 SLOAD DUP4 SWAP2 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0xA6C JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 SHA3 PUSH1 0x3 ADD SLOAD DUP5 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0xA8E JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST DUP5 PUSH2 0xA98 DUP2 PUSH2 0x10A8 JUMP JUMPDEST ISZERO PUSH2 0xAA3 JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 SHA3 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB CALLER AND DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 SHA3 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD DUP9 SWAP3 PUSH32 0xF6A317157440607F36269043EB55F1287A5A19BA2216AFEAB88CD46CBCFB88E9 SWAP2 LOG3 JUMPDEST JUMPDEST POP JUMPDEST POP JUMPDEST POP POP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 SHA3 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 SHA3 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 SHA3 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 SHA3 PUSH1 0x3 ADD SLOAD DUP3 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0xB58 JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST DUP3 PUSH2 0xB62 DUP2 PUSH2 0x10A8 JUMP JUMPDEST ISZERO ISZERO PUSH2 0xB6E JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 SHA3 DUP1 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND DUP5 MSTORE PUSH1 0x8 SWAP1 SWAP3 MSTORE SWAP1 SWAP2 SHA3 SLOAD DUP6 SWAP2 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0xBA5 JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x72656D6F7665417574686F72697A6564416464726573734174496E6465782861 DUP2 MSTORE PUSH1 0x88 PUSH1 0x2 EXP PUSH15 0x6464726573732C75696E7432353629 MUL PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP3 MLOAD PUSH1 0x2F SWAP3 DUP2 SWAP1 SUB SWAP3 SWAP1 SWAP3 ADD DUP3 SHA3 PUSH1 0x2 DUP6 DUP2 ADD DUP1 SLOAD PUSH1 0x1 DUP2 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD AND SWAP2 SWAP1 SWAP2 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH1 0x1 PUSH1 0xE0 PUSH1 0x2 EXP SUB NOT SWAP1 SWAP2 AND SWAP4 PUSH2 0xC94 SWAP4 SWAP3 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xC88 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xC5D JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xC88 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 SHA3 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xC6B JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP PUSH1 0x0 PUSH2 0x1C1D JUMP JUMPDEST PUSH1 0x1 PUSH1 0xE0 PUSH1 0x2 EXP SUB NOT AND EQ PUSH2 0xCA9 JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 SHA3 PUSH1 0x3 DUP2 ADD DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP2 SLOAD DUP2 DUP4 ADD SLOAD SWAP4 MLOAD PUSH1 0x2 DUP1 DUP6 ADD DUP1 SLOAD SWAP6 SWAP12 POP PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP1 SWAP4 AND SWAP6 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 DUP4 SWAP3 DUP6 SWAP3 PUSH1 0x0 NOT SWAP2 DUP4 AND ISZERO PUSH2 0x100 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 AND DIV DUP1 ISZERO PUSH2 0xD52 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xD27 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xD52 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 SHA3 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xD35 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 PUSH2 0x8502 GAS SUB CALL SWAP3 POP POP POP ISZERO PUSH2 0xDA1 JUMPI PUSH1 0x40 MLOAD DUP7 SWAP1 PUSH32 0x33E13ECB54C3076D8E8BB8C2881800A4D972B792045FFAE98FDF46DF365FED75 SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH2 0xAF5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP7 SWAP1 PUSH32 0x526441BB6C1ABA3C9A4A6CA1D6545DA9C2333C8C48343EF398EB858D72B79236 SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH1 0x3 DUP6 ADD DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE JUMPDEST JUMPDEST JUMPDEST POP POP JUMPDEST POP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST PUSH1 0x5 SLOAD DUP2 LT ISZERO PUSH2 0xE52 JUMPI DUP4 DUP1 ISZERO PUSH2 0xE18 JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 SHA3 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND ISZERO JUMPDEST DUP1 PUSH2 0xE3C JUMPI POP DUP3 DUP1 ISZERO PUSH2 0xE3C JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 SHA3 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND JUMPDEST JUMPDEST ISZERO PUSH2 0xE49 JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST JUMPDEST PUSH1 0x1 ADD PUSH2 0xDEF JUMP JUMPDEST JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND CALLER PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND EQ ISZERO ISZERO PUSH2 0xE7B JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST DUP2 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 AND ISZERO ISZERO PUSH2 0xE92 JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 SHA3 DUP1 SLOAD PUSH1 0xFF NOT AND DUP7 ISZERO ISZERO SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP3 MLOAD SWAP4 DUP5 MSTORE SWAP1 DUP4 ADD MSTORE DUP1 MLOAD PUSH32 0xDAEF8FF7DC66C5E34EB9C338AAB679D9F427F89868D9228494455A4D982EB2B0 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 JUMPDEST JUMPDEST POP JUMPDEST POP POP JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND CALLER PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND EQ ISZERO ISZERO PUSH2 0xF1B JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SHA3 SLOAD DUP2 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0xF44 JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST DUP2 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 AND ISZERO ISZERO PUSH2 0xF5B JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x3 DUP1 SLOAD SWAP1 POP PUSH1 0x1 ADD PUSH1 0x4 SLOAD PUSH1 0x32 DUP3 GT DUP1 PUSH2 0xF75 JUMPI POP DUP2 DUP2 GT JUMPDEST DUP1 PUSH2 0xF7E JUMPI POP DUP1 ISZERO JUMPDEST DUP1 PUSH2 0xF87 JUMPI POP DUP2 ISZERO JUMPDEST ISZERO PUSH2 0xF92 JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SHA3 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x3 DUP1 SLOAD SWAP1 SWAP2 DUP2 ADD PUSH2 0xFCA DUP4 DUP3 PUSH2 0x1D89 JUMP JUMPDEST SWAP2 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 SHA3 SWAP1 ADD PUSH1 0x0 JUMPDEST DUP2 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP1 DUP11 AND PUSH2 0x100 SWAP4 SWAP1 SWAP4 EXP DUP4 DUP2 MUL SWAP2 MUL NOT SWAP1 SWAP2 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 SWAP2 POP PUSH32 0xF39E6E1EB0EDCF53C221607B54B00CD28F3196FED0A24994DC308B8F611B682D SWAP1 PUSH1 0x0 SWAP1 LOG2 JUMPDEST JUMPDEST POP POP JUMPDEST POP JUMPDEST POP JUMPDEST POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x72656D6F7665417574686F72697A6564416464726573734174496E6465782861 DUP2 MSTORE PUSH1 0x88 PUSH1 0x2 EXP PUSH15 0x6464726573732C75696E7432353629 MUL PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x2F ADD SWAP1 SHA3 PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0xE0 PUSH1 0x2 EXP SUB NOT AND PUSH2 0x1095 DUP4 DUP4 PUSH2 0x1C1D JUMP JUMPDEST PUSH1 0x1 PUSH1 0xE0 PUSH1 0x2 EXP SUB NOT AND EQ SWAP1 POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 JUMPDEST PUSH1 0x3 SLOAD DUP2 LT ISZERO PUSH2 0x1134 JUMPI PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 SHA3 PUSH1 0x3 DUP1 SLOAD SWAP2 SWAP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x10D6 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 SHA3 SWAP1 ADD PUSH1 0x0 JUMPDEST SWAP1 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB PUSH2 0x100 SWAP3 SWAP1 SWAP3 EXP SWAP1 DIV AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 SHA3 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1118 JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x4 SLOAD DUP3 EQ ISZERO PUSH2 0x112B JUMPI PUSH1 0x1 SWAP3 POP PUSH2 0x1134 JUMP JUMPDEST JUMPDEST PUSH1 0x1 ADD PUSH2 0x10AD JUMP JUMPDEST JUMPDEST POP POP SWAP2 SWAP1 POP JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND CALLER PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND EQ ISZERO ISZERO PUSH2 0x115D JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x6 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xD1C9101A34FEFF75CCCEF14A28785A0279CB0B49C1F321F21F5F422E746B4377 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 JUMPDEST JUMPDEST POP JUMP JUMPDEST PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 SHA3 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST PUSH1 0x3 SLOAD DUP2 LT ISZERO PUSH2 0x1227 JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 SHA3 PUSH1 0x3 DUP1 SLOAD SWAP2 SWAP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x11DC JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 SHA3 SWAP1 ADD PUSH1 0x0 JUMPDEST SWAP1 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB PUSH2 0x100 SWAP3 SWAP1 SWAP3 EXP SWAP1 DIV AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 SHA3 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x121E JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST JUMPDEST PUSH1 0x1 ADD PUSH2 0x11B3 JUMP JUMPDEST JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP2 SWAP1 MSTORE SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 SHA3 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x3 DUP4 ADD SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP1 SWAP3 AND SWAP3 SWAP1 SWAP2 PUSH1 0x2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0xFF AND DUP5 JUMP JUMPDEST PUSH2 0x126A PUSH2 0x1DDD JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x12C0 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 SHA3 SWAP1 JUMPDEST DUP2 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x12A2 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0x12D3 PUSH2 0x1DDD JUMP JUMPDEST PUSH2 0x12DB PUSH2 0x1DDD JUMP JUMPDEST PUSH1 0x0 PUSH1 0x0 PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD DUP1 MSIZE LT PUSH2 0x12EF JUMPI POP MSIZE JUMPDEST SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE JUMPDEST POP SWAP3 POP PUSH1 0x0 SWAP2 POP PUSH1 0x0 SWAP1 POP JUMPDEST PUSH1 0x5 SLOAD DUP2 LT ISZERO PUSH2 0x1389 JUMPI DUP6 DUP1 ISZERO PUSH2 0x1335 JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 SHA3 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND ISZERO JUMPDEST DUP1 PUSH2 0x1359 JUMPI POP DUP5 DUP1 ISZERO PUSH2 0x1359 JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 SHA3 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND JUMPDEST JUMPDEST ISZERO PUSH2 0x1380 JUMPI DUP1 DUP4 DUP4 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x136E JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SWAP1 JUMPDEST JUMPDEST PUSH1 0x1 ADD PUSH2 0x130C JUMP JUMPDEST DUP8 DUP8 SUB PUSH1 0x40 MLOAD DUP1 MSIZE LT PUSH2 0x1399 JUMPI POP MSIZE JUMPDEST SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE JUMPDEST POP SWAP4 POP DUP8 SWAP1 POP JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x13F4 JUMPI DUP3 DUP2 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x13C7 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP5 DUP10 DUP4 SUB DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x13E1 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MSTORE JUMPDEST PUSH1 0x1 ADD PUSH2 0x13B1 JUMP JUMPDEST JUMPDEST POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x1408 PUSH2 0x1DDD JUMP JUMPDEST PUSH2 0x1410 PUSH2 0x1DDD JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 MLOAD PUSH1 0x0 SWAP2 DUP3 SWAP2 DUP1 MSIZE LT PUSH2 0x1425 JUMPI POP MSIZE JUMPDEST SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE JUMPDEST POP SWAP3 POP PUSH1 0x0 SWAP2 POP PUSH1 0x0 SWAP1 POP JUMPDEST PUSH1 0x3 SLOAD DUP2 LT ISZERO PUSH2 0x150A JUMPI PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 SHA3 PUSH1 0x3 DUP1 SLOAD SWAP2 SWAP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x146B JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 SHA3 SWAP1 ADD PUSH1 0x0 JUMPDEST SWAP1 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB PUSH2 0x100 SWAP3 SWAP1 SWAP3 EXP SWAP1 DIV AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 SHA3 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1501 JUMPI PUSH1 0x3 DUP1 SLOAD DUP3 SWAP1 DUP2 LT PUSH2 0x14B4 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 SHA3 SWAP1 ADD PUSH1 0x0 JUMPDEST SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND DUP4 DUP4 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x14E2 JUMPI INVALID JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SWAP1 JUMPDEST JUMPDEST PUSH1 0x1 ADD PUSH2 0x1442 JUMP JUMPDEST DUP2 PUSH1 0x40 MLOAD DUP1 MSIZE LT PUSH2 0x1518 JUMPI POP MSIZE JUMPDEST SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE JUMPDEST POP SWAP4 POP PUSH1 0x0 SWAP1 POP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x157F JUMPI DUP3 DUP2 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1547 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP5 DUP3 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x155F JUMPI INVALID JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE JUMPDEST PUSH1 0x1 ADD PUSH2 0x1531 JUMP JUMPDEST JUMPDEST POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND CALLER PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND EQ ISZERO ISZERO PUSH2 0x15AF JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x3 SLOAD DUP2 PUSH1 0x32 DUP3 GT DUP1 PUSH2 0x15C1 JUMPI POP DUP2 DUP2 GT JUMPDEST DUP1 PUSH2 0x15CA JUMPI POP DUP1 ISZERO JUMPDEST DUP1 PUSH2 0x15D3 JUMPI POP DUP2 ISZERO JUMPDEST ISZERO PUSH2 0x15DE JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x4 DUP4 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xA3F1EE9126A074D9326C682F561767F710E927FAA811F7A99829D49DC421797A SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 JUMPDEST JUMPDEST POP POP JUMPDEST POP JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SHA3 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x1647 JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 SHA3 SLOAD DUP3 SWAP1 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND ISZERO ISZERO PUSH2 0x166D JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 SHA3 CALLER PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 AND DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 SHA3 SLOAD DUP5 SWAP2 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x16A2 JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST DUP5 PUSH2 0x16AC DUP2 PUSH2 0x10A8 JUMP JUMPDEST ISZERO PUSH2 0x16B7 JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 SHA3 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB CALLER AND DUP1 DUP7 MSTORE SWAP3 MSTORE DUP1 DUP5 SHA3 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SWAP4 OR SWAP1 SWAP3 SSTORE SWAP1 MLOAD DUP9 SWAP3 PUSH32 0x4A504A94899432A9846E1AA406DCEB1BCFD538BB839071D49D1E5E23F5BE30EF SWAP2 LOG3 PUSH2 0x1716 DUP7 PUSH2 0x10A8 JUMP JUMPDEST ISZERO PUSH2 0xAF5 JUMPI PUSH2 0xAF5 DUP7 TIMESTAMP PUSH2 0x1C4A JUMP JUMPDEST JUMPDEST JUMPDEST JUMPDEST POP JUMPDEST POP POP JUMPDEST POP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 SHA3 DUP1 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND DUP5 MSTORE PUSH1 0x8 SWAP1 SWAP3 MSTORE DUP3 SHA3 SLOAD DUP4 SWAP2 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x1769 JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x72656D6F7665417574686F72697A6564416464726573734174496E6465782861 DUP2 MSTORE PUSH1 0x88 PUSH1 0x2 EXP PUSH15 0x6464726573732C75696E7432353629 MUL PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP3 MLOAD PUSH1 0x2F SWAP3 DUP2 SWAP1 SUB SWAP3 SWAP1 SWAP3 ADD DUP3 SHA3 PUSH1 0x2 DUP6 DUP2 ADD DUP1 SLOAD PUSH1 0x1 DUP2 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD AND SWAP2 SWAP1 SWAP2 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH1 0x1 PUSH1 0xE0 PUSH1 0x2 EXP SUB NOT SWAP1 SWAP2 AND SWAP4 PUSH2 0x1858 SWAP4 SWAP3 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xC88 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xC5D JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xC88 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 SHA3 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xC6B JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP PUSH1 0x0 PUSH2 0x1C1D JUMP JUMPDEST PUSH1 0x1 PUSH1 0xE0 PUSH1 0x2 EXP SUB NOT AND EQ PUSH2 0x186D JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 SWAP3 POP JUMPDEST JUMPDEST POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1887 DUP5 DUP5 DUP5 PUSH2 0x1C96 JUMP JUMPDEST SWAP1 POP PUSH2 0x1892 DUP2 PUSH2 0x161E JUMP JUMPDEST JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x18A6 DUP4 DUP4 PUSH2 0x1C1D JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 SHA3 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x32 DUP2 JUMP JUMPDEST PUSH1 0x4 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND CALLER PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND EQ ISZERO ISZERO PUSH2 0x18EF JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SHA3 SLOAD DUP4 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x1919 JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SHA3 SLOAD DUP4 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x1942 JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 SWAP3 POP JUMPDEST PUSH1 0x3 SLOAD DUP4 LT ISZERO PUSH2 0x19EA JUMPI DUP5 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x3 DUP5 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x196A JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 SHA3 SWAP1 ADD PUSH1 0x0 JUMPDEST SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND EQ ISZERO PUSH2 0x19DE JUMPI DUP4 PUSH1 0x3 DUP5 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x19A9 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 SHA3 SWAP1 ADD PUSH1 0x0 JUMPDEST PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB MUL NOT AND SWAP1 DUP4 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND MUL OR SWAP1 SSTORE POP PUSH2 0x19EA JUMP JUMPDEST JUMPDEST PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 PUSH2 0x1947 JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP1 DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 SHA3 DUP1 SLOAD PUSH1 0xFF NOT SWAP1 DUP2 AND SWAP1 SWAP2 SSTORE SWAP4 DUP9 AND DUP3 MSTORE DUP1 DUP3 SHA3 DUP1 SLOAD SWAP1 SWAP5 AND PUSH1 0x1 OR SWAP1 SWAP4 SSTORE SWAP2 MLOAD SWAP1 SWAP2 PUSH32 0x8001553A916EF2F495D26A907CC54D96ED840D7BDA71E73194BF5A9DF7A76B90 SWAP2 LOG2 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP6 AND SWAP1 PUSH32 0xF39E6E1EB0EDCF53C221607B54B00CD28F3196FED0A24994DC308B8F611B682D SWAP1 PUSH1 0x0 SWAP1 LOG2 JUMPDEST JUMPDEST POP JUMPDEST POP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 SHA3 PUSH1 0x3 ADD SLOAD DUP3 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x1AAA JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST DUP3 PUSH2 0x1AB4 DUP2 PUSH2 0x10A8 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x1AC0 JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SHA3 SLOAD DUP6 SWAP2 ADD TIMESTAMP LT ISZERO PUSH2 0x1AE2 JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 SHA3 PUSH1 0x3 DUP2 ADD DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP2 SLOAD DUP2 DUP4 ADD SLOAD SWAP4 MLOAD PUSH1 0x2 DUP1 DUP6 ADD DUP1 SLOAD SWAP6 SWAP11 POP PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP1 SWAP4 AND SWAP6 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 DUP4 SWAP3 DUP6 SWAP3 PUSH1 0x0 NOT SWAP2 DUP4 AND ISZERO PUSH2 0x100 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 AND DIV DUP1 ISZERO PUSH2 0x1B8B JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1B60 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1B8B JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 SHA3 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1B6E JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 PUSH2 0x8502 GAS SUB CALL SWAP3 POP POP POP ISZERO PUSH2 0x1BDA JUMPI PUSH1 0x40 MLOAD DUP6 SWAP1 PUSH32 0x33E13ECB54C3076D8E8BB8C2881800A4D972B792045FFAE98FDF46DF365FED75 SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH2 0xAF8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP6 SWAP1 PUSH32 0x526441BB6C1ABA3C9A4A6CA1D6545DA9C2333C8C48343EF398EB858D72B79236 SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH1 0x3 DUP5 ADD DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE JUMPDEST JUMPDEST JUMPDEST POP JUMPDEST POP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x4 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x1C33 JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0xE0 PUSH1 0x2 EXP SUB NOT AND JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 SHA3 DUP4 SWAP1 SSTORE DUP2 MLOAD DUP4 DUP2 MSTORE SWAP2 MLOAD DUP5 SWAP3 PUSH32 0xB237AFE65F1514FD7EA3F923EA4FE792BDD07000A912B6CD1602A8E7F573C8D SWAP3 SWAP1 DUP3 SWAP1 SUB ADD SWAP1 LOG2 JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 AND ISZERO ISZERO PUSH2 0x1CAF JUMPI PUSH1 0x0 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x80 DUP2 ADD DUP3 MSTORE PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP9 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD DUP10 DUP2 MSTORE DUP4 DUP6 ADD DUP10 DUP2 MSTORE PUSH1 0x0 PUSH1 0x60 DUP7 ADD DUP2 SWAP1 MSTORE DUP8 DUP2 MSTORE DUP1 DUP5 MSTORE SWAP6 SWAP1 SWAP6 SHA3 DUP5 MLOAD DUP2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP5 AND SWAP4 SWAP1 SWAP4 OR DUP4 SSTORE MLOAD PUSH1 0x1 DUP4 ADD SSTORE SWAP3 MLOAD DUP1 MLOAD SWAP5 SWAP7 POP SWAP2 SWAP4 SWAP1 SWAP3 PUSH2 0x1D2F SWAP3 PUSH1 0x2 DUP6 ADD SWAP3 SWAP2 ADD SWAP1 PUSH2 0x1E01 JUMP JUMPDEST POP PUSH1 0x60 SWAP2 SWAP1 SWAP2 ADD MLOAD PUSH1 0x3 SWAP1 SWAP2 ADD DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x5 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE PUSH1 0x40 MLOAD DUP3 SWAP1 PUSH32 0xC0BA8FE4B176C1714197D43B9CC6BCF797A4A7461C5FE8D0EF6E184AE7601E51 SWAP1 PUSH1 0x0 SWAP1 LOG2 JUMPDEST JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 SLOAD DUP2 DUP4 SSTORE DUP2 DUP2 ISZERO GT PUSH2 0xA06 JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 SWAP1 SHA3 PUSH2 0xA06 SWAP2 DUP2 ADD SWAP1 DUP4 ADD PUSH2 0x1E80 JUMP JUMPDEST JUMPDEST POP POP POP JUMP JUMPDEST DUP2 SLOAD DUP2 DUP4 SSTORE DUP2 DUP2 ISZERO GT PUSH2 0xA06 JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 SWAP1 SHA3 PUSH2 0xA06 SWAP2 DUP2 ADD SWAP1 DUP4 ADD PUSH2 0x1E80 JUMP JUMPDEST JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 SHA3 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0x1E42 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x1E6F JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x1E6F JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x1E6F JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x1E54 JUMP JUMPDEST JUMPDEST POP PUSH2 0x1E7C SWAP3 SWAP2 POP PUSH2 0x1E80 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0x12C8 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1E7C JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x1E86 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST SWAP1 JUMP STOP LOG1 PUSH6 0x627A7A723058 SHA3 0xdf 0xeb 0xd4 0xbc SGT SWAP4 0xad 0x5d PUSH21 0x1D2D12F334C78B86E9E4D031A3671A7869EA640FAF 0xc5 DUP16 STOP 0x29 ",
+ "sourceMap": "703:1479:3:-;;;762:286;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;980:7;989:20;1011:9;1022:18;2097:514:2;2381:9;2448:18;2322:7;2331:9;2342:18;1884:213:1;2018:7;2027:9;2834:370:0;2979:6;2933:7;:14;2949:9;276:2;2256:10;:28;:66;;;;2312:10;2300:9;:22;2256:66;:96;;;-1:-1:-1;2338:14:0;;2256:96;:127;;;-1:-1:-1;2368:15:0;;2256:127;2249:153;;;2397:5;;;2249:153;2986:1;2979:8;;2974:168;2991:7;:14;2989:1;:16;2974:168;;;3030:7;:19;3038:7;3046:1;3038:10;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3030:19:0;;;;;;;;;;;-1:-1:-1;3030:19:0;;;;;:38;;;3053:7;3061:1;3053:10;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3053:15:0;3067:1;3053:15;3030:38;3026:65;;;3086:5;;;3026:65;3127:4;3105:7;:19;3113:7;3121:1;3113:10;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3105:19:0;;;;;;;;;;;-1:-1:-1;3105:19:0;:26;;-1:-1:-1;;3105:26:0;;;;;;;;;;2974:168;3007:3;;;;;2974:168;;;3151:16;;;;:6;;:16;;;;;:::i;:::-;-1:-1:-1;3177:8:0;:20;;;2412:1;2834:370;-1:-1:-1;;;2052:17:1;:38;;;-1:-1:-1;;1884:213:1;;;;2393:1:2;2381:13;;2376:229;2400:20;:27;2396:1;:31;2376:229;;;2469:20;2490:1;2469:23;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2514:24:2;;;;2506:33;;;;;;-1:-1:-1;;;;;2553:34:2;;;;;;:22;:34;;;;;:41;;-1:-1:-1;;2553:41:2;2590:4;2553:41;;;2376:229;2429:3;;;;;2376:229;;;2097:514;;;;;;;762:286:3;;;;;703:1479;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;703:1479:3;-1:-1:-1;;;;;703:1479:3;;;;;;;;;;;-1:-1:-1;703:1479:3;;;;;;;;-1:-1:-1;703:1479:3;;;-1:-1:-1;703:1479:3;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;;703:1479:3;;;;;;;;;;;;;:::o;:::-;;;;;;;",
+ "linkReferences": {}
},
"deployedBytecode": {
- "linkReferences": {},
- "object": "0x6080604052600436106101745763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663025e7c2781146101b6578063173825d9146101f757806320ea8d86146102255780632f54bf6e1461023d5780633411c81c1461027f5780633589b35c146102b057806337bd78a0146102c857806354741525146102ef5780635a1a66af1461030e5780637065cb481461034157806372cbe61d1461036f578063784547a7146103c85780637ad28c51146103e057806383250f79146103f85780638b51d13f146104265780639ace38c21461043e578063a0e67e2b14610513578063a8abe69a14610578578063b5dc40c31461059d578063b77bf600146105b5578063ba51a6df146105ca578063c01a8c84146105e2578063c296e43c146105fa578063c642747414610612578063d38f2d8214610688578063d74f8edd146106a0578063dc8452cd146106b5578063e20056e6146106ca578063ee22610b146106fe575b60003411156101b45760408051348152905133917fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c919081900360200190a25b005b3480156101c257600080fd5b506101ce600435610716565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561020357600080fd5b506101b473ffffffffffffffffffffffffffffffffffffffff6004351661074b565b34801561023157600080fd5b506101b46004356109a2565b34801561024957600080fd5b5061026b73ffffffffffffffffffffffffffffffffffffffff60043516610a8f565b604080519115158252519081900360200190f35b34801561028b57600080fd5b5061026b60043573ffffffffffffffffffffffffffffffffffffffff60243516610aa4565b3480156102bc57600080fd5b506101b4600435610ac4565b3480156102d457600080fd5b506102dd610e40565b60408051918252519081900360200190f35b3480156102fb57600080fd5b506102dd60043515156024351515610e46565b34801561031a57600080fd5b506101b473ffffffffffffffffffffffffffffffffffffffff600435166024351515610eb2565b34801561034d57600080fd5b506101b473ffffffffffffffffffffffffffffffffffffffff60043516610f71565b34801561037b57600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261026b9436949293602493928401919081908401838280828437509497506110de9650505050505050565b3480156103d457600080fd5b5061026b600435611194565b3480156103ec57600080fd5b506101b4600435611225565b34801561040457600080fd5b5061026b73ffffffffffffffffffffffffffffffffffffffff6004351661126c565b34801561043257600080fd5b506102dd600435611281565b34801561044a57600080fd5b506104566004356112fd565b604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018060200183151515158152602001828103825284818151815260200191508051906020019080838360005b838110156104d55781810151838201526020016104bd565b50505050905090810190601f1680156105025780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b34801561051f57600080fd5b506105286113e6565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561056457818101518382015260200161054c565b505050509050019250505060405180910390f35b34801561058457600080fd5b5061052860043560243560443515156064351515611456565b3480156105a957600080fd5b5061052860043561158f565b3480156105c157600080fd5b506102dd61173c565b3480156105d657600080fd5b506101b4600435611742565b3480156105ee57600080fd5b506101b46004356117b9565b34801561060657600080fd5b5061026b6004356118cb565b34801561061e57600080fd5b50604080516020600460443581810135601f81018490048402850184019095528484526102dd94823573ffffffffffffffffffffffffffffffffffffffff16946024803595369594606494920191908190840183828082843750949750611a419650505050505050565b34801561069457600080fd5b506102dd600435611a60565b3480156106ac57600080fd5b506102dd611a72565b3480156106c157600080fd5b506102dd611a77565b3480156106d657600080fd5b506101b473ffffffffffffffffffffffffffffffffffffffff60043581169060243516611a7d565b34801561070a57600080fd5b506101b4600435611c8d565b600380548290811061072457fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b600033301461075957600080fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020526040902054829060ff16151561078f57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260026020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905591505b6003547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01821015610912578273ffffffffffffffffffffffffffffffffffffffff1660038381548110151561082f57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561090757600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061088757fe5b6000918252602090912001546003805473ffffffffffffffffffffffffffffffffffffffff90921691849081106108ba57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610912565b6001909101906107dd565b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019061094390826120c4565b50600354600454111561095c5760035461095c90611742565b60405173ffffffffffffffffffffffffffffffffffffffff8416907f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9090600090a2505050565b3360008181526002602052604090205460ff1615156109c057600080fd5b60008281526001602090815260408083203380855292529091205483919060ff1615156109ec57600080fd5b600084815260208190526040902060030154849060ff1615610a0d57600080fd5b84610a1781611194565b15610a2157600080fd5b600086815260016020908152604080832033808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555188927ff6a317157440607f36269043eb55f1287a5a19ba2216afeab88cd46cbcfb88e991a3505050505050565b60026020526000908152604090205460ff1681565b600160209081526000928352604080842090915290825290205460ff1681565b600081815260208190526040812060030154829060ff1615610ae557600080fd5b82610aef81611194565b1515610afa57600080fd5b600084815260208181526040808320805473ffffffffffffffffffffffffffffffffffffffff16845260089092529091205485919060ff161515610b3d57600080fd5b604080517f72656d6f7665417574686f72697a6564416464726573734174496e646578286181527f6464726573732c75696e74323536290000000000000000000000000000000000602080830191909152825191829003602f01822060028086018054601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010060018416150201909116929092049182018490048402850184019095528084527fffffffff0000000000000000000000000000000000000000000000000000000090911693610c7993600093909290830182828015610c665780601f10610c3b57610100808354040283529160200191610c66565b820191906000526020600020905b815481529060010190602001808311610c4957829003601f168201915b5050505050611e7e90919063ffffffff16565b7fffffffff000000000000000000000000000000000000000000000000000000001614610ca557600080fd5b600086815260208190526040908190206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117909155815481830154935160028085018054959b5073ffffffffffffffffffffffffffffffffffffffff909316959492939192839285927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff918316156101000291909101909116048015610d975780601f10610d6c57610100808354040283529160200191610d97565b820191906000526020600020905b815481529060010190602001808311610d7a57829003601f168201915b505091505060006040518083038185875af19250505015610de25760405186907f33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed7590600090a2610e38565b60405186907f526441bb6c1aba3c9a4a6ca1d6545da9c2333c8c48343ef398eb858d72b7923690600090a26003850180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b505050505050565b60065481565b6000805b600554811015610eab57838015610e73575060008181526020819052604090206003015460ff16155b80610e975750828015610e97575060008181526020819052604090206003015460ff165b15610ea3576001820191505b600101610e4a565b5092915050565b333014610ebe57600080fd5b8173ffffffffffffffffffffffffffffffffffffffff81161515610ee157600080fd5b73ffffffffffffffffffffffffffffffffffffffff831660008181526008602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915582519384529083015280517fdaef8ff7dc66c5e34eb9c338aab679d9f427f89868d9228494455a4d982eb2b09281900390910190a1505050565b333014610f7d57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116600090815260026020526040902054819060ff1615610fb257600080fd5b8173ffffffffffffffffffffffffffffffffffffffff81161515610fd557600080fd5b6003805490506001016004546032821180610fef57508181115b80610ff8575080155b80611001575081155b1561100b57600080fd5b73ffffffffffffffffffffffffffffffffffffffff851660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915560038054918201815583527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055517ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d9190a25050505050565b604080517f72656d6f7665417574686f72697a6564416464726573734174496e646578286181527f6464726573732c75696e743235362900000000000000000000000000000000006020820152905190819003602f0190206000907fffffffff000000000000000000000000000000000000000000000000000000001661116b838363ffffffff611e7e16565b7fffffffff00000000000000000000000000000000000000000000000000000000161492915050565b600080805b60035481101561121e57600084815260016020526040812060038054919291849081106111c257fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400190205460ff1615611203576001820191505b600454821415611216576001925061121e565b600101611199565b5050919050565b33301461123157600080fd5b60068190556040805182815290517fd1c9101a34feff75cccef14a28785a0279cb0b49c1f321f21f5f422e746b43779181900360200190a150565b60086020526000908152604090205460ff1681565b6000805b6003548110156112f757600083815260016020526040812060038054919291849081106112ae57fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400190205460ff16156112ef576001820191505b600101611285565b50919050565b60006020818152918152604090819020805460018083015460028085018054875161010095821615959095027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691909104601f810188900488028401880190965285835273ffffffffffffffffffffffffffffffffffffffff909316959094919291908301828280156113d35780601f106113a8576101008083540402835291602001916113d3565b820191906000526020600020905b8154815290600101906020018083116113b657829003601f168201915b5050506003909301549192505060ff1684565b6060600380548060200260200160405190810160405280929190818152602001828054801561144b57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611420575b505050505090505b90565b606080600080600554604051908082528060200260200182016040528015611488578160200160208202803883390190505b50925060009150600090505b60055481101561150f578580156114bd575060008181526020819052604090206003015460ff16155b806114e157508480156114e1575060008181526020819052604090206003015460ff165b15611507578083838151811015156114f557fe5b60209081029091010152600191909101905b600101611494565b87870360405190808252806020026020018201604052801561153b578160200160208202803883390190505b5093508790505b8681101561158457828181518110151561155857fe5b906020019060200201518489830381518110151561157257fe5b60209081029091010152600101611542565b505050949350505050565b6060806000806003805490506040519080825280602002602001820160405280156115c4578160200160208202803883390190505b50925060009150600090505b6003548110156116a857600085815260016020526040812060038054919291849081106115f957fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282019290925260400190205460ff16156116a057600380548290811061164157fe5b600091825260209091200154835173ffffffffffffffffffffffffffffffffffffffff9091169084908490811061167457fe5b73ffffffffffffffffffffffffffffffffffffffff909216602092830290910190910152600191909101905b6001016115d0565b816040519080825280602002602001820160405280156116d2578160200160208202803883390190505b509350600090505b818110156117345782818151811015156116f057fe5b90602001906020020151848281518110151561170857fe5b73ffffffffffffffffffffffffffffffffffffffff9092166020928302909101909101526001016116da565b505050919050565b60055481565b33301461174e57600080fd5b60035481603282118061176057508181115b80611769575080155b80611772575081155b1561177c57600080fd5b60048390556040805184815290517fa3f1ee9126a074d9326c682f561767f710e927faa811f7a99829d49dc421797a9181900360200190a1505050565b3360008181526002602052604090205460ff1615156117d757600080fd5b600082815260208190526040902054829073ffffffffffffffffffffffffffffffffffffffff16151561180957600080fd5b60008381526001602090815260408083203380855292529091205484919060ff161561183457600080fd5b8461183e81611194565b1561184857600080fd5b600086815260016020818152604080842033808652925280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909317909255905188927f4a504a94899432a9846e1aa406dceb1bcfd538bb839071d49d1e5e23f5be30ef91a36118bc86611194565b15610e3857610e388642611f46565b600081815260208181526040808320805473ffffffffffffffffffffffffffffffffffffffff168452600890925282205483919060ff16151561190d57600080fd5b604080517f72656d6f7665417574686f72697a6564416464726573734174496e646578286181527f6464726573732c75696e74323536290000000000000000000000000000000000602080830191909152825191829003602f01822060028086018054601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010060018416150201909116929092049182018490048402850184019095528084527fffffffff0000000000000000000000000000000000000000000000000000000090911693611a0b93600093909290830182828015610c665780601f10610c3b57610100808354040283529160200191610c66565b7fffffffff000000000000000000000000000000000000000000000000000000001614611a3757600080fd5b5060019392505050565b6000611a4e848484611f91565b9050611a59816117b9565b9392505050565b60076020526000908152604090205481565b603281565b60045481565b6000333014611a8b57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260026020526040902054839060ff161515611ac157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260026020526040902054839060ff1615611af657600080fd5b600092505b600354831015611bbb578473ffffffffffffffffffffffffffffffffffffffff16600384815481101515611b2b57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff161415611bb05783600384815481101515611b6357fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611bbb565b600190920191611afb565b73ffffffffffffffffffffffffffffffffffffffff80861660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090811690915593881682528082208054909416600117909355915190917f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9091a260405173ffffffffffffffffffffffffffffffffffffffff8516907ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d90600090a25050505050565b600081815260208190526040812060030154829060ff1615611cae57600080fd5b82611cb881611194565b1515611cc357600080fd5b600654600085815260076020526040902054859101421015611ce457600080fd5b600085815260208190526040908190206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117909155815481830154935160028085018054959a5073ffffffffffffffffffffffffffffffffffffffff909316959492939192839285927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff918316156101000291909101909116048015611dd65780601f10611dab57610100808354040283529160200191611dd6565b820191906000526020600020905b815481529060010190602001808311611db957829003601f168201915b505091505060006040518083038185875af19250505015611e215760405185907f33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed7590600090a2611e77565b60405185907f526441bb6c1aba3c9a4a6ca1d6545da9c2333c8c48343ef398eb858d72b7923690600090a26003840180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b5050505050565b600081600401835110151515611f1b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f475245415445525f4f525f455155414c5f544f5f345f4c454e4754485f52455160448201527f5549524544000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b5050602001517fffffffff000000000000000000000000000000000000000000000000000000001690565b6000828152600760209081526040918290208390558151838152915184927f0b237afe65f1514fd7ea3f923ea4fe792bdd07000a912b6cd1602a8e7f573c8d92908290030190a25050565b60008373ffffffffffffffffffffffffffffffffffffffff81161515611fb657600080fd5b6005546040805160808101825273ffffffffffffffffffffffffffffffffffffffff8881168252602080830189815283850189815260006060860181905287815280845295909520845181547fffffffffffffffffffffffff0000000000000000000000000000000000000000169416939093178355516001830155925180519496509193909261204e9260028501929101906120ed565b5060609190910151600390910180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905560058054600101905560405182907fc0ba8fe4b176c1714197d43b9cc6bcf797a4a7461c5fe8d0ef6e184ae7601e5190600090a2509392505050565b8154818355818111156120e8576000838152602090206120e891810190830161216b565b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061212e57805160ff191683800117855561215b565b8280016001018555821561215b579182015b8281111561215b578251825591602001919060010190612140565b5061216792915061216b565b5090565b61145391905b8082111561216757600081556001016121715600a165627a7a72305820789e4b58d60a690630c3b23ecd4865a36557b02fd52171a4c948aa82ae8d8a830029",
- "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x174 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x25E7C27 DUP2 EQ PUSH2 0x1B6 JUMPI DUP1 PUSH4 0x173825D9 EQ PUSH2 0x1F7 JUMPI DUP1 PUSH4 0x20EA8D86 EQ PUSH2 0x225 JUMPI DUP1 PUSH4 0x2F54BF6E EQ PUSH2 0x23D JUMPI DUP1 PUSH4 0x3411C81C EQ PUSH2 0x27F JUMPI DUP1 PUSH4 0x3589B35C EQ PUSH2 0x2B0 JUMPI DUP1 PUSH4 0x37BD78A0 EQ PUSH2 0x2C8 JUMPI DUP1 PUSH4 0x54741525 EQ PUSH2 0x2EF JUMPI DUP1 PUSH4 0x5A1A66AF EQ PUSH2 0x30E JUMPI DUP1 PUSH4 0x7065CB48 EQ PUSH2 0x341 JUMPI DUP1 PUSH4 0x72CBE61D EQ PUSH2 0x36F JUMPI DUP1 PUSH4 0x784547A7 EQ PUSH2 0x3C8 JUMPI DUP1 PUSH4 0x7AD28C51 EQ PUSH2 0x3E0 JUMPI DUP1 PUSH4 0x83250F79 EQ PUSH2 0x3F8 JUMPI DUP1 PUSH4 0x8B51D13F EQ PUSH2 0x426 JUMPI DUP1 PUSH4 0x9ACE38C2 EQ PUSH2 0x43E JUMPI DUP1 PUSH4 0xA0E67E2B EQ PUSH2 0x513 JUMPI DUP1 PUSH4 0xA8ABE69A EQ PUSH2 0x578 JUMPI DUP1 PUSH4 0xB5DC40C3 EQ PUSH2 0x59D JUMPI DUP1 PUSH4 0xB77BF600 EQ PUSH2 0x5B5 JUMPI DUP1 PUSH4 0xBA51A6DF EQ PUSH2 0x5CA JUMPI DUP1 PUSH4 0xC01A8C84 EQ PUSH2 0x5E2 JUMPI DUP1 PUSH4 0xC296E43C EQ PUSH2 0x5FA JUMPI DUP1 PUSH4 0xC6427474 EQ PUSH2 0x612 JUMPI DUP1 PUSH4 0xD38F2D82 EQ PUSH2 0x688 JUMPI DUP1 PUSH4 0xD74F8EDD EQ PUSH2 0x6A0 JUMPI DUP1 PUSH4 0xDC8452CD EQ PUSH2 0x6B5 JUMPI DUP1 PUSH4 0xE20056E6 EQ PUSH2 0x6CA JUMPI DUP1 PUSH4 0xEE22610B EQ PUSH2 0x6FE JUMPI JUMPDEST PUSH1 0x0 CALLVALUE GT ISZERO PUSH2 0x1B4 JUMPI PUSH1 0x40 DUP1 MLOAD CALLVALUE DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0xE1FFFCC4923D04B559F4D29A8BFC6CDA04EB5B0D3C460751C2402C5C5CC9109C SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1CE PUSH1 0x4 CALLDATALOAD PUSH2 0x716 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x203 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x74B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x231 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B4 PUSH1 0x4 CALLDATALOAD PUSH2 0x9A2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x249 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26B PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0xA8F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x28B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26B PUSH1 0x4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD AND PUSH2 0xAA4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B4 PUSH1 0x4 CALLDATALOAD PUSH2 0xAC4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2DD PUSH2 0xE40 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2DD PUSH1 0x4 CALLDATALOAD ISZERO ISZERO PUSH1 0x24 CALLDATALOAD ISZERO ISZERO PUSH2 0xE46 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x31A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD ISZERO ISZERO PUSH2 0xEB2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x34D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0xF71 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x37B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 DUP1 CALLDATALOAD DUP1 DUP3 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x26B SWAP5 CALLDATASIZE SWAP5 SWAP3 SWAP4 PUSH1 0x24 SWAP4 SWAP3 DUP5 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x10DE SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26B PUSH1 0x4 CALLDATALOAD PUSH2 0x1194 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B4 PUSH1 0x4 CALLDATALOAD PUSH2 0x1225 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x404 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26B PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x126C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x432 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2DD PUSH1 0x4 CALLDATALOAD PUSH2 0x1281 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x44A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x456 PUSH1 0x4 CALLDATALOAD PUSH2 0x12FD JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 ISZERO ISZERO ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4D5 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x4BD JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x502 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 SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x51F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x528 PUSH2 0x13E6 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 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x564 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x54C JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x584 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x528 PUSH1 0x4 CALLDATALOAD PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD ISZERO ISZERO PUSH1 0x64 CALLDATALOAD ISZERO ISZERO PUSH2 0x1456 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x528 PUSH1 0x4 CALLDATALOAD PUSH2 0x158F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2DD PUSH2 0x173C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B4 PUSH1 0x4 CALLDATALOAD PUSH2 0x1742 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B4 PUSH1 0x4 CALLDATALOAD PUSH2 0x17B9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x606 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26B PUSH1 0x4 CALLDATALOAD PUSH2 0x18CB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x61E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 PUSH1 0x44 CALLDATALOAD DUP2 DUP2 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x2DD SWAP5 DUP3 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP5 PUSH1 0x24 DUP1 CALLDATALOAD SWAP6 CALLDATASIZE SWAP6 SWAP5 PUSH1 0x64 SWAP5 SWAP3 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x1A41 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x694 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2DD PUSH1 0x4 CALLDATALOAD PUSH2 0x1A60 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2DD PUSH2 0x1A72 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2DD PUSH2 0x1A77 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH2 0x1A7D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x70A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B4 PUSH1 0x4 CALLDATALOAD PUSH2 0x1C8D JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD DUP3 SWAP1 DUP2 LT PUSH2 0x724 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x0 CALLER ADDRESS EQ PUSH2 0x759 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x78F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE SWAP2 POP JUMPDEST PUSH1 0x3 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP3 LT ISZERO PUSH2 0x912 JUMPI DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x3 DUP4 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x82F JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x907 JUMPI PUSH1 0x3 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0x887 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x3 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x8BA JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0x912 JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x7DD JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 PUSH2 0x943 SWAP1 DUP3 PUSH2 0x20C4 JUMP JUMPDEST POP PUSH1 0x3 SLOAD PUSH1 0x4 SLOAD GT ISZERO PUSH2 0x95C JUMPI PUSH1 0x3 SLOAD PUSH2 0x95C SWAP1 PUSH2 0x1742 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH32 0x8001553A916EF2F495D26A907CC54D96ED840D7BDA71E73194BF5A9DF7A76B90 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x9C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD DUP4 SWAP2 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x9EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD DUP5 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0xA0D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 PUSH2 0xA17 DUP2 PUSH2 0x1194 JUMP JUMPDEST ISZERO PUSH2 0xA21 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE MLOAD DUP9 SWAP3 PUSH32 0xF6A317157440607F36269043EB55F1287A5A19BA2216AFEAB88CD46CBCFB88E9 SWAP2 LOG3 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 ADD SLOAD DUP3 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0xAE5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH2 0xAEF DUP2 PUSH2 0x1194 JUMP JUMPDEST ISZERO ISZERO PUSH2 0xAFA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 MSTORE PUSH1 0x8 SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD DUP6 SWAP2 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0xB3D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x72656D6F7665417574686F72697A6564416464726573734174496E6465782861 DUP2 MSTORE PUSH32 0x6464726573732C75696E74323536290000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP3 MLOAD SWAP2 DUP3 SWAP1 SUB PUSH1 0x2F ADD DUP3 KECCAK256 PUSH1 0x2 DUP1 DUP7 ADD DUP1 SLOAD PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP5 AND ISZERO MUL ADD SWAP1 SWAP2 AND SWAP3 SWAP1 SWAP3 DIV SWAP2 DUP3 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP1 DUP5 MSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP2 AND SWAP4 PUSH2 0xC79 SWAP4 PUSH1 0x0 SWAP4 SWAP1 SWAP3 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xC66 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xC3B JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xC66 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xC49 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP PUSH2 0x1E7E SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND EQ PUSH2 0xCA5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x3 DUP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP2 SLOAD DUP2 DUP4 ADD SLOAD SWAP4 MLOAD PUSH1 0x2 DUP1 DUP6 ADD DUP1 SLOAD SWAP6 SWAP12 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND SWAP6 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 DUP4 SWAP3 DUP6 SWAP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP4 AND ISZERO PUSH2 0x100 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 AND DIV DUP1 ISZERO PUSH2 0xD97 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xD6C JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xD97 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xD7A JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP ISZERO PUSH2 0xDE2 JUMPI PUSH1 0x40 MLOAD DUP7 SWAP1 PUSH32 0x33E13ECB54C3076D8E8BB8C2881800A4D972B792045FFAE98FDF46DF365FED75 SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH2 0xE38 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP7 SWAP1 PUSH32 0x526441BB6C1ABA3C9A4A6CA1D6545DA9C2333C8C48343EF398EB858D72B79236 SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH1 0x3 DUP6 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST PUSH1 0x5 SLOAD DUP2 LT ISZERO PUSH2 0xEAB JUMPI DUP4 DUP1 ISZERO PUSH2 0xE73 JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND ISZERO JUMPDEST DUP1 PUSH2 0xE97 JUMPI POP DUP3 DUP1 ISZERO PUSH2 0xE97 JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND JUMPDEST ISZERO PUSH2 0xEA3 JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x1 ADD PUSH2 0xE4A JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0xEBE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO ISZERO PUSH2 0xEE1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP7 ISZERO ISZERO SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP3 MLOAD SWAP4 DUP5 MSTORE SWAP1 DUP4 ADD MSTORE DUP1 MLOAD PUSH32 0xDAEF8FF7DC66C5E34EB9C338AAB679D9F427F89868D9228494455A4D982EB2B0 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP POP POP JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0xF7D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0xFB2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO ISZERO PUSH2 0xFD5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3 DUP1 SLOAD SWAP1 POP PUSH1 0x1 ADD PUSH1 0x4 SLOAD PUSH1 0x32 DUP3 GT DUP1 PUSH2 0xFEF JUMPI POP DUP2 DUP2 GT JUMPDEST DUP1 PUSH2 0xFF8 JUMPI POP DUP1 ISZERO JUMPDEST DUP1 PUSH2 0x1001 JUMPI POP DUP2 ISZERO JUMPDEST ISZERO PUSH2 0x100B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x3 DUP1 SLOAD SWAP2 DUP3 ADD DUP2 SSTORE DUP4 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND DUP5 OR SWAP1 SSTORE MLOAD PUSH32 0xF39E6E1EB0EDCF53C221607B54B00CD28F3196FED0A24994DC308B8F611B682D SWAP2 SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x72656D6F7665417574686F72697A6564416464726573734174496E6465782861 DUP2 MSTORE PUSH32 0x6464726573732C75696E74323536290000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x2F ADD SWAP1 KECCAK256 PUSH1 0x0 SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH2 0x116B DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x1E7E AND JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND EQ SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 JUMPDEST PUSH1 0x3 SLOAD DUP2 LT ISZERO PUSH2 0x121E JUMPI PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 DUP1 SLOAD SWAP2 SWAP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x11C2 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1203 JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x4 SLOAD DUP3 EQ ISZERO PUSH2 0x1216 JUMPI PUSH1 0x1 SWAP3 POP PUSH2 0x121E JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x1199 JUMP JUMPDEST POP POP SWAP2 SWAP1 POP JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0x1231 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x6 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xD1C9101A34FEFF75CCCEF14A28785A0279CB0B49C1F321F21F5F422E746B4377 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST PUSH1 0x3 SLOAD DUP2 LT ISZERO PUSH2 0x12F7 JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 DUP1 SLOAD SWAP2 SWAP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x12AE JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x12EF JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x1 ADD PUSH2 0x1285 JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP2 DUP2 MSTORE SWAP2 DUP2 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP1 DUP4 ADD SLOAD PUSH1 0x2 DUP1 DUP6 ADD DUP1 SLOAD DUP8 MLOAD PUSH2 0x100 SWAP6 DUP3 AND ISZERO SWAP6 SWAP1 SWAP6 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD AND SWAP2 SWAP1 SWAP2 DIV PUSH1 0x1F DUP2 ADD DUP9 SWAP1 DIV DUP9 MUL DUP5 ADD DUP9 ADD SWAP1 SWAP7 MSTORE DUP6 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND SWAP6 SWAP1 SWAP5 SWAP2 SWAP3 SWAP2 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x13D3 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x13A8 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x13D3 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x13B6 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP PUSH1 0x3 SWAP1 SWAP4 ADD SLOAD SWAP2 SWAP3 POP POP PUSH1 0xFF AND DUP5 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x144B JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1420 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x0 DUP1 PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1488 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 SWAP2 POP PUSH1 0x0 SWAP1 POP JUMPDEST PUSH1 0x5 SLOAD DUP2 LT ISZERO PUSH2 0x150F JUMPI DUP6 DUP1 ISZERO PUSH2 0x14BD JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND ISZERO JUMPDEST DUP1 PUSH2 0x14E1 JUMPI POP DUP5 DUP1 ISZERO PUSH2 0x14E1 JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND JUMPDEST ISZERO PUSH2 0x1507 JUMPI DUP1 DUP4 DUP4 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x14F5 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SWAP1 JUMPDEST PUSH1 0x1 ADD PUSH2 0x1494 JUMP JUMPDEST DUP8 DUP8 SUB PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x153B JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP DUP8 SWAP1 POP JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x1584 JUMPI DUP3 DUP2 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1558 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP5 DUP10 DUP4 SUB DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1572 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x1542 JUMP JUMPDEST POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x0 DUP1 PUSH1 0x3 DUP1 SLOAD SWAP1 POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x15C4 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 SWAP2 POP PUSH1 0x0 SWAP1 POP JUMPDEST PUSH1 0x3 SLOAD DUP2 LT ISZERO PUSH2 0x16A8 JUMPI PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 DUP1 SLOAD SWAP2 SWAP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x15F9 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x16A0 JUMPI PUSH1 0x3 DUP1 SLOAD DUP3 SWAP1 DUP2 LT PUSH2 0x1641 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 DUP5 SWAP1 DUP5 SWAP1 DUP2 LT PUSH2 0x1674 JUMPI INVALID JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SWAP1 JUMPDEST PUSH1 0x1 ADD PUSH2 0x15D0 JUMP JUMPDEST DUP2 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x16D2 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP PUSH1 0x0 SWAP1 POP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1734 JUMPI DUP3 DUP2 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x16F0 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL ADD MLOAD DUP5 DUP3 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1708 JUMPI INVALID JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 ADD PUSH2 0x16DA JUMP JUMPDEST POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0x174E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3 SLOAD DUP2 PUSH1 0x32 DUP3 GT DUP1 PUSH2 0x1760 JUMPI POP DUP2 DUP2 GT JUMPDEST DUP1 PUSH2 0x1769 JUMPI POP DUP1 ISZERO JUMPDEST DUP1 PUSH2 0x1772 JUMPI POP DUP2 ISZERO JUMPDEST ISZERO PUSH2 0x177C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x4 DUP4 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xA3F1EE9126A074D9326C682F561767F710E927FAA811F7A99829D49DC421797A SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x17D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO ISZERO PUSH2 0x1809 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD DUP5 SWAP2 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x1834 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 PUSH2 0x183E DUP2 PUSH2 0x1194 JUMP JUMPDEST ISZERO PUSH2 0x1848 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 CALLER DUP1 DUP7 MSTORE SWAP3 MSTORE DUP1 DUP5 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SWAP4 OR SWAP1 SWAP3 SSTORE SWAP1 MLOAD DUP9 SWAP3 PUSH32 0x4A504A94899432A9846E1AA406DCEB1BCFD538BB839071D49D1E5E23F5BE30EF SWAP2 LOG3 PUSH2 0x18BC DUP7 PUSH2 0x1194 JUMP JUMPDEST ISZERO PUSH2 0xE38 JUMPI PUSH2 0xE38 DUP7 TIMESTAMP PUSH2 0x1F46 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 MSTORE PUSH1 0x8 SWAP1 SWAP3 MSTORE DUP3 KECCAK256 SLOAD DUP4 SWAP2 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x190D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x72656D6F7665417574686F72697A6564416464726573734174496E6465782861 DUP2 MSTORE PUSH32 0x6464726573732C75696E74323536290000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP3 MLOAD SWAP2 DUP3 SWAP1 SUB PUSH1 0x2F ADD DUP3 KECCAK256 PUSH1 0x2 DUP1 DUP7 ADD DUP1 SLOAD PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP5 AND ISZERO MUL ADD SWAP1 SWAP2 AND SWAP3 SWAP1 SWAP3 DIV SWAP2 DUP3 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP1 DUP5 MSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP2 AND SWAP4 PUSH2 0x1A0B SWAP4 PUSH1 0x0 SWAP4 SWAP1 SWAP3 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xC66 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xC3B JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xC66 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND EQ PUSH2 0x1A37 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A4E DUP5 DUP5 DUP5 PUSH2 0x1F91 JUMP JUMPDEST SWAP1 POP PUSH2 0x1A59 DUP2 PUSH2 0x17B9 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x32 DUP2 JUMP JUMPDEST PUSH1 0x4 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 CALLER ADDRESS EQ PUSH2 0x1A8B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x1AC1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x1AF6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP3 POP JUMPDEST PUSH1 0x3 SLOAD DUP4 LT ISZERO PUSH2 0x1BBB JUMPI DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x3 DUP5 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1B2B JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x1BB0 JUMPI DUP4 PUSH1 0x3 DUP5 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1B63 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0x1BBB JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 PUSH2 0x1AFB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 SWAP1 DUP2 AND SWAP1 SWAP2 SSTORE SWAP4 DUP9 AND DUP3 MSTORE DUP1 DUP3 KECCAK256 DUP1 SLOAD SWAP1 SWAP5 AND PUSH1 0x1 OR SWAP1 SWAP4 SSTORE SWAP2 MLOAD SWAP1 SWAP2 PUSH32 0x8001553A916EF2F495D26A907CC54D96ED840D7BDA71E73194BF5A9DF7A76B90 SWAP2 LOG2 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP1 PUSH32 0xF39E6E1EB0EDCF53C221607B54B00CD28F3196FED0A24994DC308B8F611B682D SWAP1 PUSH1 0x0 SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 ADD SLOAD DUP3 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x1CAE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH2 0x1CB8 DUP2 PUSH2 0x1194 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x1CC3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP6 SWAP2 ADD TIMESTAMP LT ISZERO PUSH2 0x1CE4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x3 DUP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP2 SLOAD DUP2 DUP4 ADD SLOAD SWAP4 MLOAD PUSH1 0x2 DUP1 DUP6 ADD DUP1 SLOAD SWAP6 SWAP11 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND SWAP6 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 DUP4 SWAP3 DUP6 SWAP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP4 AND ISZERO PUSH2 0x100 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 AND DIV DUP1 ISZERO PUSH2 0x1DD6 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1DAB JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1DD6 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1DB9 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP ISZERO PUSH2 0x1E21 JUMPI PUSH1 0x40 MLOAD DUP6 SWAP1 PUSH32 0x33E13ECB54C3076D8E8BB8C2881800A4D972B792045FFAE98FDF46DF365FED75 SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH2 0x1E77 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP6 SWAP1 PUSH32 0x526441BB6C1ABA3C9A4A6CA1D6545DA9C2333C8C48343EF398EB858D72B79236 SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH1 0x3 DUP5 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x4 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x1F1B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F345F4C454E4754485F524551 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x5549524544000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x84 ADD SWAP1 REVERT JUMPDEST POP POP PUSH1 0x20 ADD MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 SWAP1 SSTORE DUP2 MLOAD DUP4 DUP2 MSTORE SWAP2 MLOAD DUP5 SWAP3 PUSH32 0xB237AFE65F1514FD7EA3F923EA4FE792BDD07000A912B6CD1602A8E7F573C8D SWAP3 SWAP1 DUP3 SWAP1 SUB ADD SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO ISZERO PUSH2 0x1FB6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x80 DUP2 ADD DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD DUP10 DUP2 MSTORE DUP4 DUP6 ADD DUP10 DUP2 MSTORE PUSH1 0x0 PUSH1 0x60 DUP7 ADD DUP2 SWAP1 MSTORE DUP8 DUP2 MSTORE DUP1 DUP5 MSTORE SWAP6 SWAP1 SWAP6 KECCAK256 DUP5 MLOAD DUP2 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP5 AND SWAP4 SWAP1 SWAP4 OR DUP4 SSTORE MLOAD PUSH1 0x1 DUP4 ADD SSTORE SWAP3 MLOAD DUP1 MLOAD SWAP5 SWAP7 POP SWAP2 SWAP4 SWAP1 SWAP3 PUSH2 0x204E SWAP3 PUSH1 0x2 DUP6 ADD SWAP3 SWAP2 ADD SWAP1 PUSH2 0x20ED JUMP JUMPDEST POP PUSH1 0x60 SWAP2 SWAP1 SWAP2 ADD MLOAD PUSH1 0x3 SWAP1 SWAP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x5 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE PUSH1 0x40 MLOAD DUP3 SWAP1 PUSH32 0xC0BA8FE4B176C1714197D43B9CC6BCF797A4A7461C5FE8D0EF6E184AE7601E51 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 SLOAD DUP2 DUP4 SSTORE DUP2 DUP2 GT ISZERO PUSH2 0x20E8 JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 PUSH2 0x20E8 SWAP2 DUP2 ADD SWAP1 DUP4 ADD PUSH2 0x216B JUMP JUMPDEST POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0x212E JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x215B JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x215B JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x215B JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x2140 JUMP JUMPDEST POP PUSH2 0x2167 SWAP3 SWAP2 POP PUSH2 0x216B JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0x1453 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x2167 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x2171 JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 PUSH25 0x9E4B58D60A690630C3B23ECD4865A36557B02FD52171A4C948 0xaa DUP3 0xae DUP14 DUP11 DUP4 STOP 0x29 ",
- "sourceMap": "668:1037:3:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2519:1:0;2507:9;:13;2503:61;;;2534:30;;;2554:9;2534:30;;;;2542:10;;2534:30;;;;;;;;;;2503:61;668:1037:3;936:23:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;936:23:0;;;;;;;;;;;;;;;;;;;;;;;;3711:460;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3711:460:0;;;;;;;3156:332:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3156:332:1;;;;;890:40:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;890:40:0;;;;;;;;;;;;;;;;;;;;;;;;;820:64;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;820:64:0;;;;;;;;;3384:519:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3384:519:2;;;;;1009:29:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1009:29:1;;;;;;;;;;;;;;;;;;;;9136:319:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9136:319:0;;;;;;;;;;;2959:289:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2959:289:2;;;;;;;;;;;3311:277:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3311:277:0;;;;;;;1490:213:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1490:213:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1490:213:3;;-1:-1:-1;1490:213:3;;-1:-1:-1;;;;;;;1490:213:3;7304:337:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7304:337:0;;;;;2281:186:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2281:186:1;;;;;1055:55:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1055:55:2;;;;;;;8622:252:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8622:252:0;;;;;765:49;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;765:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;765:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9539:115;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9539:115:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;9539:115:0;;;;;;;;;;;;;;;;;10757:676;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10757:676:0;;;;;;;;;;;;;;;9833:575;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9833:575:0;;;;;991:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;991:28:0;;;;4990:207;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4990:207:0;;;;;2573:459:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2573:459:1;;;;;1010:245:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1010:245:3;;;;;5456:244:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5456:244:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5456:244:0;;-1:-1:-1;5456:244:0;;-1:-1:-1;;;;;;;5456:244:0;1045:47:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1045:47:1;;;;;217:41:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;217:41:0;;;;965:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;965:20:0;;;;4370:449;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4370:449:0;;;;;;;;;;;;3602:472:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3602:472:1;;;;;936:23:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;936:23:0;:::o;3711:460::-;3859:6;1186:10;1208:4;1186:27;1182:50;;1227:5;;;1182:50;1420:14;;;;;;;:7;:14;;;;;;3801:5;;1420:14;;1419:15;1415:38;;;1448:5;;;1415:38;3822:14;;;3839:5;3822:14;;;:7;:14;;;;;:22;;;;;;3839:5;-1:-1:-1;3854:170:0;3871:6;:13;:17;;3869:19;;3854:170;;;3924:5;3911:18;;:6;3918:1;3911:9;;;;;;;;;;;;;;;;;;;;;;:18;3907:117;;;3961:6;3968:13;;:17;;;;3961:25;;;;;;;;;;;;;;;;3949:6;:9;;3961:25;;;;;3956:1;;3949:9;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;4004:5;;3907:117;3890:3;;;;;3854:170;;;4033:6;:18;;;;;;;;;:::i;:::-;-1:-1:-1;4076:6:0;:13;4065:8;;:24;4061:74;;;4121:6;:13;4103:32;;:17;:32::i;:::-;4145:19;;;;;;;;;;;1242:1;3711:460;;:::o;3156:332:1:-;3239:10;1420:14:0;;;;:7;:14;;;;;;;;1419:15;1415:38;;;1448:5;;;1415:38;1694:28;;;;:13;:28;;;;;;;;3284:10:1;1694:35:0;;;;;;;;;3269:13:1;;3284:10;1694:35:0;;1693:36;1689:59;;;1743:5;;;1689:59;1976:12;:27;;;;;;;;;;:36;;;3316:13:1;;1976:36:0;;1972:59;;;2026:5;;;1972:59;3357:13:1;1165:26;1177:13;1165:11;:26::i;:::-;1164:27;1156:36;;;;;;3429:5;3386:28;;;:13;:28;;;;;;;;3415:10;3386:40;;;;;;;;:48;;;;;;3444:37;3400:13;;3444:37;;;2041:1:0;1758;1463;;3156:332:1;;:::o;890:40:0:-;;;;;;;;;;;;;;;:::o;820:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3384:519:2:-;3617:22;1976:27:0;;;;;;;;;;:36;;;3489:13:2;;1976:36:0;;1972:59;;;2026:5;;;1972:59;3527:13:2;1278:26:1;1290:13;1278:11;:26::i;:::-;1270:35;;;;;;;;1483:22:2;1508:27;;;;;;;;;;;1576:14;;;;1553:38;;:22;:38;;;;;;;3588:13;;1508:27;1553:38;;1545:47;;;;;;;;1186:60;;;;;;;;;;;;;;;;;;;;;;;;;1610:7;;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:68;;;;;:21;;-1:-1:-1;;1186:60:2;;1610:18;;;:7;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:21;;;;:::i;:::-;:68;;;1602:77;;;;;;3642:12;:27;;;;;;;;;;;;3679:11;;;:18;;;;3693:4;3679:18;;;;;;3711:14;;3737:8;;;;3711:44;;3747:7;;;;3711:44;;3642:27;;-1:-1:-1;3711:14:2;;;;;3737:8;3747:7;;3711:44;;;;3747:7;;3711:44;;;;;3679:18;3711:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3707:190;;;3769:24;;3779:13;;3769:24;;;;;3707:190;;;3822:31;;3839:13;;3822:31;;;;;3867:11;;;:19;;;;;;3707:190;1315:1:1;;2041::0;3384:519:2;;;:::o;1009:29:1:-;;;;:::o;9136:319:0:-;9243:10;;9269:179;9286:16;;9284:1;:18;9269:179;;;9328:7;:36;;;;-1:-1:-1;9340:12:0;:15;;;;;;;;;;:24;;;;;9339:25;9328:36;:92;;;;9384:8;:36;;;;-1:-1:-1;9396:12:0;:15;;;;;;;;;;:24;;;;;9384:36;9321:127;;;9447:1;9438:10;;;;9321:127;9304:3;;9269:179;;;9136:319;;;;;:::o;2959:289:2:-;1186:10:0;1208:4;1186:27;1182:50;;1227:5;;;1182:50;3084:18:2;2104:13:0;;;;2100:36;;;2131:5;;;2100:36;3118:42:2;;;;;;;:22;:42;;;;;;;;;:57;;;;;;;;;;;;;3185:56;;;;;;;;;;;;;;;;;;;;;1242:1:0;2959:289:2;;:::o;3311:277:0:-;1186:10;1208:4;1186:27;1182:50;;1227:5;;;1182:50;1312:14;;;;;;;:7;:14;;;;;;3404:5;;1312:14;;1308:37;;;1340:5;;;1308:37;3427:5;2104:13;;;;2100:36;;;2131:5;;;2100:36;3459:6;:13;;;;3475:1;3459:17;3478:8;;256:2;2236:10;:28;:66;;;;2292:10;2280:9;:22;2236:66;:96;;;-1:-1:-1;2318:14:0;;2236:96;:127;;;-1:-1:-1;2348:15:0;;2236:127;2229:153;;;2377:5;;;2229:153;3502:14;;;;;;;:7;:14;;;;;;:21;;;;3519:4;3502:21;;;;;;3533:6;27:10:-1;;23:18;;;45:23;;3533:18:0;;;;;;;;;;;;3561:20;;;3502:14;3561:20;2146:1;;1355;1242;3311:277;:::o;1490:213:3:-;1186:60:2;;;;;;;;;;;;;;;;;;;;;1604:4:3;;1631:65;;:18;:4;1604;1631:18;:15;:18;:::i;:::-;:65;;;;1490:213;-1:-1:-1;;1490:213:3:o;7304:337:0:-;7394:4;;;7438:197;7455:6;:13;7453:15;;7438:197;;;7493:28;;;;:13;:28;;;;;7522:6;:9;;7493:28;;;7529:1;;7522:9;;;;;;;;;;;;;;;;;;;;7493:39;;;;;;;;;;;;;;;7489:71;;;7559:1;7550:10;;;;7489:71;7587:8;;7578:5;:17;7574:50;;;7620:4;7613:11;;;;7574:50;7470:3;;7438:197;;;7304:337;;;;;:::o;2281:186:1:-;1186:10:0;1208:4;1186:27;1182:50;;1227:5;;;1182:50;2378:17:1;:38;;;2426:34;;;;;;;;;;;;;;;;;2281:186;:::o;1055:55:2:-;;;;;;;;;;;;;;;:::o;8622:252:0:-;8721:10;;8747:120;8764:6;:13;8762:15;;8747:120;;;8800:28;;;;:13;:28;;;;;8829:6;:9;;8800:28;;;8836:1;;8829:9;;;;;;;;;;;;;;;;;;;;8800:39;;;;;;;;;;;;;;;8796:71;;;8866:1;8857:10;;;;8796:71;8779:3;;8747:120;;;8622:252;;;;:::o;765:49::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;765:49:0;;;;;;;-1:-1:-1;;765:49:0;;;:::o;9539:115::-;9609:9;9641:6;9634:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9539:115;;:::o;10757:676::-;10882:22;10920:32;10993:10;11017:6;10966:16;;10955:28;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;10955:28:0;;10920:63;;11006:1;10993:14;;11040:1;11038:3;;11033:250;11045:16;;11043:1;:18;11033:250;;;11087:7;:36;;;;-1:-1:-1;11099:12:0;:15;;;;;;;;;;:24;;;;;11098:25;11087:36;:92;;;;11143:8;:36;;;;-1:-1:-1;11155:12:0;:15;;;;;;;;;;:24;;;;;11143:36;11080:203;;;11239:1;11211:18;11230:5;11211:25;;;;;;;;;;;;;;;;;;:29;11267:1;11258:10;;;;;11080:203;11063:3;;11033:250;;;11326:4;11321:2;:9;11310:21;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;11310:21:0;;11292:39;;11348:4;11346:6;;11341:85;11356:2;11354:1;:4;11341:85;;;11405:18;11424:1;11405:21;;;;;;;;;;;;;;;;;;11377:15;11397:4;11393:1;:8;11377:25;;;;;;;;;;;;;;;;;;:49;11360:3;;11341:85;;;10757:676;;;;;;;;;:::o;9833:575::-;9928:24;9968:34;10043:10;10067:6;10019;:13;;;;10005:28;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;10005:28:0;;9968:65;;10056:1;10043:14;;10090:1;10088:3;;10083:186;10095:6;:13;10093:15;;10083:186;;;10131:28;;;;:13;:28;;;;;10160:6;:9;;10131:28;;;10167:1;;10160:9;;;;;;;;;;;;;;;;;;;;10131:39;;;;;;;;;;;;;;;10127:142;;;10217:6;:9;;10224:1;;10217:9;;;;;;;;;;;;;;;;10190:24;;10217:9;;;;;10190:17;;10208:5;;10190:24;;;;;;:36;;;;:24;;;;;;;;;;:36;10253:1;10244:10;;;;;10127:142;10110:3;;10083:186;;;10309:5;10295:20;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;10295:20:0;;10278:37;;10332:1;10330:3;;10325:76;10337:5;10335:1;:7;10325:76;;;10381:17;10399:1;10381:20;;;;;;;;;;;;;;;;;;10361:14;10376:1;10361:17;;;;;;;;;;:40;;;;:17;;;;;;;;;;:40;10344:3;;10325:76;;;9833:575;;;;;;:::o;991:28::-;;;;:::o;4990:207::-;1186:10;1208:4;1186:27;1182:50;;1227:5;;;1182:50;5092:6;:13;5107:9;256:2;2236:28;;;:66;;;2292:10;2280:9;:22;2236:66;:96;;;-1:-1:-1;2318:14:0;;2236:96;:127;;;-1:-1:-1;2348:15:0;;2236:127;2229:153;;;2377:5;;;2229:153;5132:8;:20;;;5162:28;;;;;;;;;;;;;;;;;1242:1;;4990:207;:::o;2573:459:1:-;2656:10;1420:14:0;;;;:7;:14;;;;;;;;1419:15;1415:38;;;1448:5;;;1415:38;1538:12;:27;;;;;;;;;;:39;2694:13:1;;1538:39:0;;:44;1534:67;;;1596:5;;;1534:67;1843:28;;;;:13;:28;;;;;;;;2745:10:1;1843:35:0;;;;;;;;;2730:13:1;;2745:10;1843:35:0;;1839:58;;;1892:5;;;1839:58;2783:13:1;1165:26;1177:13;1165:11;:26::i;:::-;1164:27;1156:36;;;;;;2812:28;;;;2855:4;2812:28;;;;;;;;2841:10;2812:40;;;;;;;;:47;;;;;;;;;;2869:39;;2826:13;;2869:39;;;2922:26;2934:13;2922:11;:26::i;:::-;2918:108;;;2964:51;2984:13;2999:15;2964:19;:51::i;1010:245:3:-;1155:4;1508:27:2;;;;;;;;;;;1576:14;;;;1553:38;;:22;:38;;;;;;1134:2:3;;1508:27:2;1553:38;;1545:47;;;;;;;;1186:60;;;;;;;;;;;;;;;;;;;;;;;;;1610:7;;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:68;;;;;:21;;-1:-1:-1;;1186:60:2;;1610:18;;;:7;:18;;;;;;;;;;;;;;;;;;;;;;;;:21;:68;;;1602:77;;;;;;-1:-1:-1;1244:4:3;;1010:245;-1:-1:-1;;;1010:245:3:o;5456:244:0:-;5560:18;5610:40;5625:11;5638:5;5645:4;5610:14;:40::i;:::-;5594:56;;5660:33;5679:13;5660:18;:33::i;:::-;5456:244;;;;;:::o;1045:47:1:-;;;;;;;;;;;;;:::o;217:41:0:-;256:2;217:41;:::o;965:20::-;;;;:::o;4370:449::-;4541:6;1186:10;1208:4;1186:27;1182:50;;1227:5;;;1182:50;1420:14;;;;;;;:7;:14;;;;;;4479:5;;1420:14;;1419:15;1415:38;;;1448:5;;;1415:38;1312:14;;;;;;;:7;:14;;;;;;4512:8;;1312:14;;1308:37;;;1340:5;;;1308:37;4548:1;4541:8;;4536:149;4553:6;:13;4551:15;;4536:149;;;4602:5;4589:18;;:6;4596:1;4589:9;;;;;;;;;;;;;;;;;;;;;;:18;4585:100;;;4639:8;4627:6;4634:1;4627:9;;;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;4665:5;;4585:100;4568:3;;;;;4536:149;;;4694:14;;;;4711:5;4694:14;;;:7;:14;;;;;;:22;;;;;;;;;4726:17;;;;;;;;:24;;;;;4694:22;4726:24;;;;4760:19;;4694:14;;4760:19;;;4789:23;;;;;;;;;;;1463:1;1242;4370:449;;;:::o;3602:472:1:-;3788:22;1976:27:0;;;;;;;;;;:36;;;3685:13:1;;1976:36:0;;1972:59;;;2026:5;;;1972:59;3723:13:1;1278:26;1290:13;1278:11;:26::i;:::-;1270:35;;;;;;;;1443:17;;1408:32;;;;:17;:32;;;;;;3759:13;;1408:52;1389:15;:71;;1381:80;;;;;;3813:12;:27;;;;;;;;;;;;3850:11;;;:18;;;;3864:4;3850:18;;;;;;3882:14;;3908:8;;;;3882:44;;3918:7;;;;3882:44;;3813:27;;-1:-1:-1;3882:14:1;;;;;3908:8;3918:7;;3882:44;;;;3918:7;;3882:44;;;;;3850:18;3882:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3878:190;;;3940:24;;3950:13;;3940:24;;;;;3878:190;;;3993:31;;4010:13;;3993:31;;;;;4038:11;;;:19;;;;;;3878:190;1315:1;2041::0;3602:472:1;;;:::o;15327:554:4:-;15442:13;15504:5;15512:1;15504:9;15492:1;:8;:21;;15471:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;15632:2:4;15625:10;15619:17;15775:66;15763:79;;15327:554::o;4184:223:1:-;4287:32;;;;:17;:32;;;;;;;;;:51;;;4348:52;;;;;;;4305:13;;4348:52;;;;;;;;;4184:223;;:::o;7974:451:0:-;8106:18;8076:11;2104:13;;;;2100:36;;;2131:5;;;2100:36;8156:16;;8212:140;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8212:140:0;;;;;;8182:27;;;;;;;;;;:170;;;;;;;;;;;;;;;-1:-1:-1;8182:170:0;;;;;;;8156:16;;-1:-1:-1;8212:140:0;;8182:27;;:170;;;;;;;;;;:::i;:::-;-1:-1:-1;8182:170:0;;;;;;;;;;;;;;;;;;;;;;;8362:16;:21;;-1:-1:-1;8362:21:0;;;8393:25;;8404:13;;8393:25;;-1:-1:-1;;8393:25:0;7974:451;;;;;;:::o;668:1037:3:-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;668:1037:3;;;-1:-1:-1;668:1037:3;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;"
+ "object": "0x606060405236156101645763ffffffff60e060020a600035041663025e7c2781146101b6578063173825d9146101e557806320ea8d86146102035780632f54bf6e146102185780633411c81c146102485780633589b35c1461027b57806337bd78a01461029057806354741525146102b25780635a1a66af146102de5780637065cb481461030157806372cbe61d1461031f578063784547a7146103895780637ad28c51146103b057806383250f79146103c55780638b51d13f146103f55780639ace38c21461041a578063a0e67e2b146104d7578063a8abe69a14610542578063b5dc40c3146105bd578063b77bf6001461062b578063ba51a6df1461064d578063c01a8c8414610662578063c296e43c14610677578063c64274741461069e578063cc12cb2814610713578063d38f2d8214610788578063d74f8edd146107ad578063dc8452cd146107cf578063e20056e6146107f1578063ee22610b14610815575b6101b45b60003411156101b157604080513481529051600160a060020a033316917fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c919081900360200190a25b5b565b005b34156101be57fe5b6101c960043561082a565b60408051600160a060020a039092168252519081900360200190f35b34156101ed57fe5b6101b4600160a060020a036004351661085c565b005b341561020b57fe5b6101b4600435610a0d565b005b341561022057fe5b610234600160a060020a0360043516610b01565b604080519115158252519081900360200190f35b341561025057fe5b610234600435600160a060020a0360243516610b16565b604080519115158252519081900360200190f35b341561028357fe5b6101b4600435610b36565b005b341561029857fe5b6102a0610de5565b60408051918252519081900360200190f35b34156102ba57fe5b6102a060043515156024351515610deb565b60408051918252519081900360200190f35b34156102e657fe5b6101b4600160a060020a03600435166024351515610e5a565b005b341561030957fe5b6101b4600160a060020a0360043516610efa565b005b341561032757fe5b610234600480803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284375094965061103195505050505050565b604080519115158252519081900360200190f35b341561039157fe5b6102346004356110a8565b604080519115158252519081900360200190f35b34156103b857fe5b6101b460043561113c565b005b34156103cd57fe5b610234600160a060020a036004351661119a565b604080519115158252519081900360200190f35b34156103fd57fe5b6102a06004356111af565b60408051918252519081900360200190f35b341561042257fe5b61042d60043561122e565b60408051600160a060020a03861681526020810185905282151560608201526080918101828152845460026000196101006001841615020190911604928201839052909160a0830190859080156104c55780601f1061049a576101008083540402835291602001916104c5565b820191906000526020600020905b8154815290600101906020018083116104a857829003601f168201915b50509550505050505060405180910390f35b34156104df57fe5b6104e7611262565b604080516020808252835181830152835191928392908301918581019102808383821561052f575b80518252602083111561052f57601f19909201916020918201910161050f565b5050509050019250505060405180910390f35b341561054a57fe5b6104e7600435602435604435151560643515156112cb565b604080516020808252835181830152835191928392908301918581019102808383821561052f575b80518252602083111561052f57601f19909201916020918201910161050f565b5050509050019250505060405180910390f35b34156105c557fe5b6104e7600435611400565b604080516020808252835181830152835191928392908301918581019102808383821561052f575b80518252602083111561052f57601f19909201916020918201910161050f565b5050509050019250505060405180910390f35b341561063357fe5b6102a0611588565b60408051918252519081900360200190f35b341561065557fe5b6101b460043561158e565b005b341561066a57fe5b6101b460043561161e565b005b341561067f57fe5b610234600435611733565b604080519115158252519081900360200190f35b34156106a657fe5b604080516020600460443581810135601f81018490048402850184019095528484526102a0948235600160a060020a031694602480359560649492939190920191819084018382808284375094965061187a95505050505050565b60408051918252519081900360200190f35b341561071b57fe5b61076b600480803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843750949650509335935061189a92505050565b60408051600160e060020a03199092168252519081900360200190f35b341561079057fe5b6102a06004356118af565b60408051918252519081900360200190f35b34156107b557fe5b6102a06118c1565b60408051918252519081900360200190f35b34156107d757fe5b6102a06118c6565b60408051918252519081900360200190f35b34156107f957fe5b6101b4600160a060020a03600435811690602435166118cc565b005b341561081d57fe5b6101b4600435611a88565b005b600380548290811061083857fe5b906000526020600020900160005b915054906101000a9004600160a060020a031681565b600030600160a060020a031633600160a060020a031614151561087f5760006000fd5b600160a060020a038216600090815260026020526040902054829060ff1615156108a95760006000fd5b600160a060020a0383166000908152600260205260408120805460ff1916905591505b600354600019018210156109a45782600160a060020a03166003838154811015156108f357fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a031614156109985760038054600019810190811061093457fe5b906000526020600020900160005b9054906101000a9004600160a060020a031660038381548110151561096357fe5b906000526020600020900160005b6101000a815481600160a060020a030219169083600160a060020a031602179055506109a4565b5b6001909101906108cc565b6003805460001901906109b79082611d89565b5060035460045411156109d0576003546109d09061158e565b5b604051600160a060020a038416907f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9090600090a25b5b505b5050565b33600160a060020a03811660009081526002602052604090205460ff161515610a365760006000fd5b600082815260016020908152604080832033600160a060020a038116855292529091205483919060ff161515610a6c5760006000fd5b600084815260208190526040902060030154849060ff1615610a8e5760006000fd5b84610a98816110a8565b15610aa35760006000fd5b6000868152600160209081526040808320600160a060020a0333168085529252808320805460ff191690555188927ff6a317157440607f36269043eb55f1287a5a19ba2216afeab88cd46cbcfb88e991a35b5b505b505b50505b5050565b60026020526000908152604090205460ff1681565b600160209081526000928352604080842090915290825290205460ff1681565b600081815260208190526040812060030154829060ff1615610b585760006000fd5b82610b62816110a8565b1515610b6e5760006000fd5b6000848152602081815260408083208054600160a060020a0316845260089092529091205485919060ff161515610ba55760006000fd5b604080517f72656d6f7665417574686f72697a6564416464726573734174496e64657828618152608860020a6e6464726573732c75696e7432353629026020808301919091528251602f9281900392909201822060028581018054600181161561010002600019011691909104601f8101849004840285018401909552848452600160e060020a031990911693610c949392830182828015610c885780601f10610c5d57610100808354040283529160200191610c88565b820191906000526020600020905b815481529060010190602001808311610c6b57829003601f168201915b50505050506000611c1d565b600160e060020a03191614610ca95760006000fd5b6000868152602081905260409081902060038101805460ff19166001908117909155815481830154935160028085018054959b50600160a060020a0390931695949293919283928592600019918316156101000291909101909116048015610d525780601f10610d2757610100808354040283529160200191610d52565b820191906000526020600020905b815481529060010190602001808311610d3557829003601f168201915b505091505060006040518083038185876185025a03f19250505015610da15760405186907f33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed7590600090a2610af5565b60405186907f526441bb6c1aba3c9a4a6ca1d6545da9c2333c8c48343ef398eb858d72b7923690600090a260038501805460ff191690555b5b5b50505b505b505050565b60065481565b6000805b600554811015610e5257838015610e18575060008181526020819052604090206003015460ff16155b80610e3c5750828015610e3c575060008181526020819052604090206003015460ff165b5b15610e49576001820191505b5b600101610def565b5b5092915050565b30600160a060020a031633600160a060020a0316141515610e7b5760006000fd5b81600160a060020a0381161515610e925760006000fd5b600160a060020a038316600081815260086020908152604091829020805460ff191686151590811790915582519384529083015280517fdaef8ff7dc66c5e34eb9c338aab679d9f427f89868d9228494455a4d982eb2b09281900390910190a15b5b505b5050565b30600160a060020a031633600160a060020a0316141515610f1b5760006000fd5b600160a060020a038116600090815260026020526040902054819060ff1615610f445760006000fd5b81600160a060020a0381161515610f5b5760006000fd5b6003805490506001016004546032821180610f7557508181115b80610f7e575080155b80610f87575081155b15610f925760006000fd5b600160a060020a0385166000908152600260205260409020805460ff191660019081179091556003805490918101610fca8382611d89565b916000526020600020900160005b8154600160a060020a03808a166101009390930a838102910219909116179091556040519091507ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d90600090a25b5b50505b505b505b50565b604080517f72656d6f7665417574686f72697a6564416464726573734174496e64657828618152608860020a6e6464726573732c75696e7432353629026020820152905190819003602f019020600090600160e060020a0319166110958383611c1d565b600160e060020a0319161490505b919050565b600080805b60035481101561113457600084815260016020526040812060038054919291849081106110d657fe5b906000526020600020900160005b9054600160a060020a036101009290920a900416815260208101919091526040016000205460ff1615611118576001820191505b60045482141561112b5760019250611134565b5b6001016110ad565b5b5050919050565b30600160a060020a031633600160a060020a031614151561115d5760006000fd5b60068190556040805182815290517fd1c9101a34feff75cccef14a28785a0279cb0b49c1f321f21f5f422e746b43779181900360200190a15b5b50565b60086020526000908152604090205460ff1681565b6000805b60035481101561122757600083815260016020526040812060038054919291849081106111dc57fe5b906000526020600020900160005b9054600160a060020a036101009290920a900416815260208101919091526040016000205460ff161561121e576001820191505b5b6001016111b3565b5b50919050565b6000602081905290815260409020805460018201546003830154600160a060020a0390921692909160029091019060ff1684565b61126a611ddd565b60038054806020026020016040519081016040528092919081815260200182805480156112c057602002820191906000526020600020905b8154600160a060020a031681526001909101906020018083116112a2575b505050505090505b90565b6112d3611ddd565b6112db611ddd565b600060006005546040518059106112ef5750595b908082528060200260200182016040525b50925060009150600090505b60055481101561138957858015611335575060008181526020819052604090206003015460ff16155b806113595750848015611359575060008181526020819052604090206003015460ff165b5b156113805780838381518110151561136e57fe5b60209081029091010152600191909101905b5b60010161130c565b8787036040518059106113995750595b908082528060200260200182016040525b5093508790505b868110156113f45782818151811015156113c757fe5b90602001906020020151848983038151811015156113e157fe5b602090810290910101525b6001016113b1565b5b505050949350505050565b611408611ddd565b611410611ddd565b60035460405160009182918059106114255750595b908082528060200260200182016040525b50925060009150600090505b60035481101561150a576000858152600160205260408120600380549192918490811061146b57fe5b906000526020600020900160005b9054600160a060020a036101009290920a900416815260208101919091526040016000205460ff16156115015760038054829081106114b457fe5b906000526020600020900160005b9054906101000a9004600160a060020a031683838151811015156114e257fe5b600160a060020a03909216602092830290910190910152600191909101905b5b600101611442565b816040518059106115185750595b908082528060200260200182016040525b509350600090505b8181101561157f57828181518110151561154757fe5b90602001906020020151848281518110151561155f57fe5b600160a060020a039092166020928302909101909101525b600101611531565b5b505050919050565b60055481565b30600160a060020a031633600160a060020a03161415156115af5760006000fd5b6003548160328211806115c157508181115b806115ca575080155b806115d3575081155b156115de5760006000fd5b60048390556040805184815290517fa3f1ee9126a074d9326c682f561767f710e927faa811f7a99829d49dc421797a9181900360200190a15b5b50505b50565b33600160a060020a03811660009081526002602052604090205460ff1615156116475760006000fd5b6000828152602081905260409020548290600160a060020a0316151561166d5760006000fd5b600083815260016020908152604080832033600160a060020a038116855292529091205484919060ff16156116a25760006000fd5b846116ac816110a8565b156116b75760006000fd5b6000868152600160208181526040808420600160a060020a0333168086529252808420805460ff1916909317909255905188927f4a504a94899432a9846e1aa406dceb1bcfd538bb839071d49d1e5e23f5be30ef91a3611716866110a8565b15610af557610af58642611c4a565b5b5b5b505b50505b505b5050565b6000818152602081815260408083208054600160a060020a03168452600890925282205483919060ff1615156117695760006000fd5b604080517f72656d6f7665417574686f72697a6564416464726573734174496e64657828618152608860020a6e6464726573732c75696e7432353629026020808301919091528251602f9281900392909201822060028581018054600181161561010002600019011691909104601f8101849004840285018401909552848452600160e060020a0319909116936118589392830182828015610c885780601f10610c5d57610100808354040283529160200191610c88565b820191906000526020600020905b815481529060010190602001808311610c6b57829003601f168201915b50505050506000611c1d565b600160e060020a0319161461186d5760006000fd5b600192505b5b5050919050565b6000611887848484611c96565b90506118928161161e565b5b9392505050565b60006118a68383611c1d565b90505b92915050565b60076020526000908152604090205481565b603281565b60045481565b600030600160a060020a031633600160a060020a03161415156118ef5760006000fd5b600160a060020a038316600090815260026020526040902054839060ff1615156119195760006000fd5b600160a060020a038316600090815260026020526040902054839060ff16156119425760006000fd5b600092505b6003548310156119ea5784600160a060020a031660038481548110151561196a57fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a031614156119de57836003848154811015156119a957fe5b906000526020600020900160005b6101000a815481600160a060020a030219169083600160a060020a031602179055506119ea565b5b600190920191611947565b600160a060020a03808616600081815260026020526040808220805460ff1990811690915593881682528082208054909416600117909355915190917f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9091a2604051600160a060020a038516907ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d90600090a25b5b505b505b505050565b600081815260208190526040812060030154829060ff1615611aaa5760006000fd5b82611ab4816110a8565b1515611ac05760006000fd5b600654600085815260076020526040902054859101421015611ae25760006000fd5b6000858152602081905260409081902060038101805460ff19166001908117909155815481830154935160028085018054959a50600160a060020a0390931695949293919283928592600019918316156101000291909101909116048015611b8b5780601f10611b6057610100808354040283529160200191611b8b565b820191906000526020600020905b815481529060010190602001808311611b6e57829003601f168201915b505091505060006040518083038185876185025a03f19250505015611bda5760405185907f33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed7590600090a2610af8565b60405185907f526441bb6c1aba3c9a4a6ca1d6545da9c2333c8c48343ef398eb858d72b7923690600090a260038401805460ff191690555b5b5b505b505b505050565b600081600401835110151515611c335760006000fd5b506020820151600160e060020a0319165b92915050565b6000828152600760209081526040918290208390558151838152915184927f0b237afe65f1514fd7ea3f923ea4fe792bdd07000a912b6cd1602a8e7f573c8d92908290030190a25b5050565b600083600160a060020a0381161515611caf5760006000fd5b60055460408051608081018252600160a060020a0388811682526020808301898152838501898152600060608601819052878152808452959095208451815473ffffffffffffffffffffffffffffffffffffffff191694169390931783555160018301559251805194965091939092611d2f926002850192910190611e01565b50606091909101516003909101805460ff191691151591909117905560058054600101905560405182907fc0ba8fe4b176c1714197d43b9cc6bcf797a4a7461c5fe8d0ef6e184ae7601e5190600090a25b5b509392505050565b815481835581811511610a0657600083815260209020610a06918101908301611e80565b5b505050565b815481835581811511610a0657600083815260209020610a06918101908301611e80565b5b505050565b60408051602081019091526000815290565b60408051602081019091526000815290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611e4257805160ff1916838001178555611e6f565b82800160010185558215611e6f579182015b82811115611e6f578251825591602001919060010190611e54565b5b50611e7c929150611e80565b5090565b6112c891905b80821115611e7c5760008155600101611e86565b5090565b905600a165627a7a72305820dfebd4bc1393ad5d741d2d12f334c78b86e9e4d031a3671a7869ea640fafc58f0029",
+ "sourceMap": "703:1479:3:-;;;;;;;;-1:-1:-1;;;703:1479:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2482:109:0;2539:1;2527:9;:13;2523:61;;;2554:30;;;2574:9;2554:30;;;;-1:-1:-1;;;;;2562:10:0;2554:30;;;;;;;;;;;;2523:61;2482:109;:::o;703:1479:3:-;;956:23:0;;;;;;;;;;;;;;;;-1:-1:-1;;;;;956:23:0;;;;;;;;;;;;;;3731:460;;;;;;;;-1:-1:-1;;;;;3731:460:0;;;;;;;3176:332:1;;;;;;;;;;;;;;910:40:0;;;;;;;;-1:-1:-1;;;;;910:40:0;;;;;;;;;;;;;;;;;;;;;;;840:64;;;;;;;;;;-1:-1:-1;;;;;840:64:0;;;;;;;;;;;;;;;;;;;;;;;3320:573:2;;;;;;;;;;;;;;1029:29:1;;;;;;;;;;;;;;;;;;;;;;;;;;9156:319:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2895:289:2;;;;;;;;-1:-1:-1;;;;;2895:289:2;;;;;;;;;;;3331:277:0;;;;;;;;-1:-1:-1;;;;;3331:277:0;;;;;;;1538:201:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1538:201:3;;-1:-1:-1;1538:201:3;;-1:-1:-1;;;;;;1538:201:3;;;;;;;;;;;;;;;;;;;7324:337:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2301:186:1;;;;;;;;;;;;;;981:55:2;;;;;;;;-1:-1:-1;;;;;981:55:2;;;;;;;;;;;;;;;;;;;;;;;8642:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;785:49;;;;;;;;;;;;;;;;-1:-1:-1;;;;;785:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;785:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9559:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;-1:-1;;152:3;;;;117:2;108:3;;;;130;172:5;167:4;181:3;3:186;;;;;;;;;;;;;;;;;10777:676:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;-1:-1;;152:3;;;;117:2;108:3;;;;130;172:5;167:4;181:3;3:186;;;;;;;;;;;;;;;;;9853:575:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;-1:-1;;152:3;;;;117:2;108:3;;;;130;172:5;167:4;181:3;3:186;;;;;;;;;;;;;;;;;1011:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;5010:207;;;;;;;;;;;;;;2593:459:1;;;;;;;;;;;;;;1058:245:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5476:244:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5476:244:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5476:244:0;;-1:-1:-1;5476:244:0;;-1:-1:-1;;;;;;5476:244:0;;;;;;;;;;;;;;;;;1981:199:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1981:199:3;;-1:-1:-1;;1981:199:3;;;-1:-1:-1;1981:199:3;;-1:-1:-1;;;1981:199:3;;;;;-1:-1:-1;;;;;;1981:199:3;;;;;;;;;;;;;;1065:47:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;237:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;985:20;;;;;;;;;;;;;;;;;;;;;;;;;;4390:449;;;;;;;;-1:-1:-1;;;;;4390:449:0;;;;;;;;;;;;3622:472:1;;;;;;;;;;;;;;956:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;956:23:0;;:::o;3731:460::-;3879:6;1228:4;-1:-1:-1;;;;;1206:27:0;:10;-1:-1:-1;;;;;1206:27:0;;;1202:50;;;1247:5;;;1202:50;-1:-1:-1;;;;;1440:14:0;;;;;;:7;:14;;;;;;3821:5;;1440:14;;1439:15;1435:38;;;1468:5;;;1435:38;-1:-1:-1;;;;;3842:14:0;;3859:5;3842:14;;;:7;:14;;;;;:22;;-1:-1:-1;;3842:22:0;;;3859:5;-1:-1:-1;3874:170:0;3891:6;:13;-1:-1:-1;;3891:17:0;3889:19;;3874:170;;;3944:5;-1:-1:-1;;;;;3931:18:0;:6;3938:1;3931:9;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3931:9:0;-1:-1:-1;;;;;3931:18:0;;3927:117;;;3981:6;3988:13;;-1:-1:-1;;3988:17:0;;;3981:25;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3981:25:0;3969:6;3976:1;3969:9;;;;;;;;;;;;;;;;;;;;:37;;;;;-1:-1:-1;;;;;3969:37:0;;;;;-1:-1:-1;;;;;3969:37:0;;;;;;4024:5;;3927:117;3874:170;3910:3;;;;;3874:170;;;4053:6;:18;;-1:-1:-1;;4053:18:0;;;;;;:::i;:::-;-1:-1:-1;4096:6:0;:13;4085:8;;:24;4081:74;;;4141:6;:13;4123:32;;:17;:32::i;:::-;4081:74;4165:19;;-1:-1:-1;;;;;4165:19:0;;;;;;;;1483:1;1262;;3731:460;;;:::o;3176:332:1:-;3259:10;-1:-1:-1;;;;;1440:14:0;;;;;;:7;:14;;;;;;;;1439:15;1435:38;;;1468:5;;;1435:38;1714:28;;;;:13;:28;;;;;;;;3304:10:1;-1:-1:-1;;;;;1714:35:0;;;;;;;;;;:28;;3304:10:1;1714:35:0;;1713:36;1709:59;;;1763:5;;;1709:59;1996:12;:27;;;;;;;;;;:36;;;3336:13:1;;1996:36:0;;1992:59;;;2046:5;;;1992:59;3377:13:1;1185:26;1197:13;1185:11;:26::i;:::-;1184:27;1176:36;;;;;;3449:5;3406:28;;;:13;:28;;;;;;;;-1:-1:-1;;;;;3435:10:1;3406:40;;;;;;;;;:48;;-1:-1:-1;;3406:48:1;;;3464:37;3420:13;;3464:37;;;1222:1;2061::0;;1778;;1483;;;3176:332:1;;;:::o;910:40:0:-;;;;;;;;;;;;;;;:::o;840:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3320:573:2:-;3553:22;1996:27:0;;;;;;;;;;:36;;;3425:13:2;;1996:36:0;;1992:59;;;2046:5;;;1992:59;3463:13:2;1298:26:1;1310:13;1298:11;:26::i;:::-;1290:35;;;;;;;;1418:22:2;1443:27;;;;;;;;;;;1511:14;;-1:-1:-1;;;;;1511:14:2;1488:38;;:22;:38;;;;;;;3524:13;;1443:27;1488:38;;1480:47;;;;;;;;1121:60;;;;;;-1:-1:-1;;;;;1121:60:2;;;;;;;;;;;;;;;;;;;;;1556:7;;;;1545:22;;;;;;;;-1:-1:-1;;1545:22:2;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1545:69:2;;;;:22;;1121:60;1545:22;;1556:7;1545:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1565:1;1545:10;:22::i;:::-;-1:-1:-1;;;;;;1545:69:2;;1537:78;;;;;;3578:12;:27;;;;;;;;;;;;3615:11;;;:18;;-1:-1:-1;;3615:18:2;3629:4;3615:18;;;;;;3701:14;;3727:8;;;;3701:44;;3737:7;;;;3701:44;;3578:27;;-1:-1:-1;;;;;;3701:14:2;;;;3727:8;3737:7;;3701:44;;;;3737:7;;-1:-1:-1;;3701:44:2;;;;3615:18;3701:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3697:190;;;3759:24;;3769:13;;3759:24;;;;;3697:190;;;3812:31;;3829:13;;3812:31;;;;;3857:11;;;:19;;-1:-1:-1;;3857:19:2;;;3697:190;1625:1;1335::1;;;2061::0;;3320:573:2;;;;:::o;1029:29:1:-;;;;:::o;9156:319:0:-;9263:10;;9289:179;9306:16;;9304:1;:18;9289:179;;;9348:7;:36;;;;-1:-1:-1;9360:12:0;:15;;;;;;;;;;:24;;;;;9359:25;9348:36;:92;;;;9404:8;:36;;;;-1:-1:-1;9416:12:0;:15;;;;;;;;;;:24;;;;;9404:36;9348:92;9341:127;;;9467:1;9458:10;;;;9341:127;9289:179;9324:3;;9289:179;;;9156:319;;;;;;:::o;2895:289:2:-;1228:4:0;-1:-1:-1;;;;;1206:27:0;:10;-1:-1:-1;;;;;1206:27:0;;;1202:50;;;1247:5;;;1202:50;3020:18:2;-1:-1:-1;;;;;2124:13:0;;;2120:36;;;2151:5;;;2120:36;-1:-1:-1;;;;;3054:42:2;;;;;;:22;:42;;;;;;;;;:57;;-1:-1:-1;;3054:57:2;;;;;;;;;;3121:56;;;;;;;;;;;;;;;;;;;;;2166:1:0;1262;;2895:289:2;;;:::o;3331:277:0:-;1228:4;-1:-1:-1;;;;;1206:27:0;:10;-1:-1:-1;;;;;1206:27:0;;;1202:50;;;1247:5;;;1202:50;-1:-1:-1;;;;;1332:14:0;;;;;;:7;:14;;;;;;3424:5;;1332:14;;1328:37;;;1360:5;;;1328:37;3447:5;-1:-1:-1;;;;;2124:13:0;;;2120:36;;;2151:5;;;2120:36;3479:6;:13;;;;3495:1;3479:17;3498:8;;276:2;2256:10;:28;:66;;;;2312:10;2300:9;:22;2256:66;:96;;;-1:-1:-1;2338:14:0;;2256:96;:127;;;-1:-1:-1;2368:15:0;;2256:127;2249:153;;;2397:5;;;2249:153;-1:-1:-1;;;;;3522:14:0;;;;;;:7;:14;;;;;:21;;-1:-1:-1;;3522:21:0;3539:4;3522:21;;;;;;3553:6;:18;;:6;;:18;;;:6;:18;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;3553:18:0;;;;;;;;;;;;;;;;;;;;;3581:20;;3553:18;;-1:-1:-1;3581:20:0;;-1:-1:-1;;3581:20:0;2412:1;2166;;;1375;;1262;;3331:277;;:::o;1538:201:3:-;1121:60:2;;;;;;-1:-1:-1;;;;;1121:60:2;;;;;;;;;;;;;;1639:4:3;;-1:-1:-1;;;;;;1666:66:3;:19;1677:4;1639;1666:10;:19::i;:::-;-1:-1:-1;;;;;;1666:66:3;;;-1:-1:-1;1538:201:3;;;;:::o;7324:337:0:-;7414:4;;;7458:197;7475:6;:13;7473:15;;7458:197;;;7513:28;;;;:13;:28;;;;;7542:6;:9;;7513:28;;;7549:1;;7542:9;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7542:9:0;;;;;;;;7513:39;;;;;;;;;;;-1:-1:-1;7513:39:0;;;;7509:71;;;7579:1;7570:10;;;;7509:71;7607:8;;7598:5;:17;7594:50;;;7640:4;7633:11;;;;7594:50;7458:197;7490:3;;7458:197;;;7324:337;;;;;;:::o;2301:186:1:-;1228:4:0;-1:-1:-1;;;;;1206:27:0;:10;-1:-1:-1;;;;;1206:27:0;;;1202:50;;;1247:5;;;1202:50;2398:17:1;:38;;;2446:34;;;;;;;;;;;;;;;;;1262:1:0;2301:186:1;;:::o;981:55:2:-;;;;;;;;;;;;;;;:::o;8642:252:0:-;8741:10;;8767:120;8784:6;:13;8782:15;;8767:120;;;8820:28;;;;:13;:28;;;;;8849:6;:9;;8820:28;;;8856:1;;8849:9;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8849:9:0;;;;;;;;8820:39;;;;;;;;;;;-1:-1:-1;8820:39:0;;;;8816:71;;;8886:1;8877:10;;;;8816:71;8767:120;8799:3;;8767:120;;;8642:252;;;;;:::o;785:49::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;785:49:0;;;;;;;;;;;;;;:::o;9559:115::-;9629:9;;:::i;:::-;9661:6;9654:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9654:13:0;;;;;;;;;;;;;;;;;;;;;;;9559:115;;:::o;10777:676::-;10902:22;;:::i;:::-;10940:32;;:::i;:::-;11013:10;11037:6;10986:16;;10975:28;;;;;;;;;;;;;;;;;;;;;;;;;10940:63;;11026:1;11013:14;;11060:1;11058:3;;11053:250;11065:16;;11063:1;:18;11053:250;;;11107:7;:36;;;;-1:-1:-1;11119:12:0;:15;;;;;;;;;;:24;;;;;11118:25;11107:36;:92;;;;11163:8;:36;;;;-1:-1:-1;11175:12:0;:15;;;;;;;;;;:24;;;;;11163:36;11107:92;11100:203;;;11259:1;11231:18;11250:5;11231:25;;;;;;;;;;;;;;;;;;:29;11287:1;11278:10;;;;;11100:203;11053:250;11083:3;;11053:250;;;11346:4;11341:2;:9;11330:21;;;;;;;;;;;;;;;;;;;;;;;;;11312:39;;11368:4;11366:6;;11361:85;11376:2;11374:1;:4;11361:85;;;11425:18;11444:1;11425:21;;;;;;;;;;;;;;;;;;11397:15;11417:4;11413:1;:8;11397:25;;;;;;;;;;;;;;;;;;:49;11361:85;11380:3;;11361:85;;;10777:676;;;;;;;;;;:::o;9853:575::-;9948:24;;:::i;:::-;9988:34;;:::i;:::-;10039:6;:13;10025:28;;10063:10;;;;10025:28;;;;;;;;;;;;;;;;;;;;;;;9988:65;;10076:1;10063:14;;10110:1;10108:3;;10103:186;10115:6;:13;10113:15;;10103:186;;;10151:28;;;;:13;:28;;;;;10180:6;:9;;10151:28;;;10187:1;;10180:9;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10180:9:0;;;;;;;;10151:39;;;;;;;;;;;-1:-1:-1;10151:39:0;;;;10147:142;;;10237:6;:9;;10244:1;;10237:9;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10237:9:0;10210:17;10228:5;10210:24;;;;;;;;;;-1:-1:-1;;;;;10210:36:0;;;:24;;;;;;;;;;:36;10273:1;10264:10;;;;;10147:142;10103:186;10130:3;;10103:186;;;10329:5;10315:20;;;;;;;;;;;;;;;;;;;;;;;;;10298:37;;10352:1;10350:3;;10345:76;10357:5;10355:1;:7;10345:76;;;10401:17;10419:1;10401:20;;;;;;;;;;;;;;;;;;10381:14;10396:1;10381:17;;;;;;;;;;-1:-1:-1;;;;;10381:40:0;;;:17;;;;;;;;;;:40;10345:76;10364:3;;10345:76;;;9853:575;;;;;;;:::o;1011:28::-;;;;:::o;5010:207::-;1228:4;-1:-1:-1;;;;;1206:27:0;:10;-1:-1:-1;;;;;1206:27:0;;;1202:50;;;1247:5;;;1202:50;5112:6;:13;5127:9;276:2;2256:28;;;:66;;;2312:10;2300:9;:22;2256:66;:96;;;-1:-1:-1;2338:14:0;;2256:96;:127;;;-1:-1:-1;2368:15:0;;2256:127;2249:153;;;2397:5;;;2249:153;5152:8;:20;;;5182:28;;;;;;;;;;;;;;;;;2412:1;1262;;;5010:207;;:::o;2593:459:1:-;2676:10;-1:-1:-1;;;;;1440:14:0;;;;;;:7;:14;;;;;;;;1439:15;1435:38;;;1468:5;;;1435:38;1558:12;:27;;;;;;;;;;:39;2714:13:1;;-1:-1:-1;;;;;1558:39:0;:44;1554:67;;;1616:5;;;1554:67;1863:28;;;;:13;:28;;;;;;;;2765:10:1;-1:-1:-1;;;;;1863:35:0;;;;;;;;;;:28;;2765:10:1;1863:35:0;;1859:58;;;1912:5;;;1859:58;2803:13:1;1185:26;1197:13;1185:11;:26::i;:::-;1184:27;1176:36;;;;;;2832:28;;;;2875:4;2832:28;;;;;;;;-1:-1:-1;;;;;2861:10:1;2832:40;;;;;;;;;:47;;-1:-1:-1;;2832:47:1;;;;;;;2889:39;;2846:13;;2889:39;;;2942:26;2954:13;2942:11;:26::i;:::-;2938:108;;;2984:51;3004:13;3019:15;2984:19;:51::i;:::-;2938:108;1222:1;1927::0;;1631;;;1483;;2593:459:1;;;:::o;1058:245:3:-;1203:4;1443:27:2;;;;;;;;;;;1511:14;;-1:-1:-1;;;;;1511:14:2;1488:38;;:22;:38;;;;;;1182:2:3;;1443:27:2;1488:38;;1480:47;;;;;;;;1121:60;;;;;;-1:-1:-1;;;;;1121:60:2;;;;;;;;;;;;;;;;;;;;;1556:7;;;;1545:22;;;;;;;;-1:-1:-1;;1545:22:2;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1545:69:2;;;;:22;;1121:60;1545:22;;1556:7;1545:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1565:1;1545:10;:22::i;:::-;-1:-1:-1;;;;;;1545:69:2;;1537:78;;;;;;1292:4:3;1285:11;;1625:1:2;1058:245:3;;;;;;:::o;5476:244:0:-;5580:18;5630:40;5645:11;5658:5;5665:4;5630:14;:40::i;:::-;5614:56;;5680:33;5699:13;5680:18;:33::i;:::-;5476:244;;;;;;:::o;1981:199:3:-;2092:13;2130:20;2141:1;2144:5;2130:10;:20::i;:::-;2121:29;-1:-1:-1;1981:199:3;;;;;:::o;1065:47:1:-;;;;;;;;;;;;;:::o;237:41:0:-;276:2;237:41;:::o;985:20::-;;;;:::o;4390:449::-;4561:6;1228:4;-1:-1:-1;;;;;1206:27:0;:10;-1:-1:-1;;;;;1206:27:0;;;1202:50;;;1247:5;;;1202:50;-1:-1:-1;;;;;1440:14:0;;;;;;:7;:14;;;;;;4499:5;;1440:14;;1439:15;1435:38;;;1468:5;;;1435:38;-1:-1:-1;;;;;1332:14:0;;;;;;:7;:14;;;;;;4532:8;;1332:14;;1328:37;;;1360:5;;;1328:37;4568:1;4561:8;;4556:149;4573:6;:13;4571:15;;4556:149;;;4622:5;-1:-1:-1;;;;;4609:18:0;:6;4616:1;4609:9;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4609:9:0;-1:-1:-1;;;;;4609:18:0;;4605:100;;;4659:8;4647:6;4654:1;4647:9;;;;;;;;;;;;;;;;;;;;:20;;;;;-1:-1:-1;;;;;4647:20:0;;;;;-1:-1:-1;;;;;4647:20:0;;;;;;4685:5;;4605:100;4556:149;4588:3;;;;;4556:149;;;-1:-1:-1;;;;;4714:14:0;;;4731:5;4714:14;;;:7;:14;;;;;;:22;;-1:-1:-1;;4714:22:0;;;;;;4746:17;;;;;;;;:24;;;;;4714:22;4746:24;;;;4780:19;;4714:14;;4780:19;;;4809:23;;-1:-1:-1;;;;;4809:23:0;;;;;;;;1375:1;1483;;1262;;4390:449;;;;:::o;3622:472:1:-;3808:22;1996:27:0;;;;;;;;;;:36;;;3705:13:1;;1996:36:0;;1992:59;;;2046:5;;;1992:59;3743:13:1;1298:26;1310:13;1298:11;:26::i;:::-;1290:35;;;;;;;;1463:17;;1428:32;;;;:17;:32;;;;;;3779:13;;1428:52;1409:15;:71;;1401:80;;;;;;3833:12;:27;;;;;;;;;;;;3870:11;;;:18;;-1:-1:-1;;3870:18:1;3884:4;3870:18;;;;;;3902:14;;3928:8;;;;3902:44;;3938:7;;;;3902:44;;3833:27;;-1:-1:-1;;;;;;3902:14:1;;;;3928:8;3938:7;;3902:44;;;;3938:7;;-1:-1:-1;;3902:44:1;;;;3870:18;3902:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3898:190;;;3960:24;;3970:13;;3960:24;;;;;3898:190;;;4013:31;;4030:13;;4013:31;;;;;4058:11;;;:19;;-1:-1:-1;;4058:19:1;;;3898:190;1491:1;1335;;2061::0;;3622:472:1;;;;:::o;4135:471:2:-;4242:13;4291:5;4299:1;4291:9;4279:1;:8;:21;;4271:30;;;;;;;;-1:-1:-1;4357:2:2;4350:3;;4344:5;-1:-1:-1;;;;;;4488:3:2;4135:471;;;;;:::o;4204:223:1:-;4307:32;;;;:17;:32;;;;;;;;;:51;;;4368:52;;;;;;;4325:13;;4368:52;;;;;;;;;4204:223;;;:::o;7994:451:0:-;8126:18;8096:11;-1:-1:-1;;;;;2124:13:0;;;2120:36;;;2151:5;;;2120:36;8176:16;;8232:140;;;;;;;;-1:-1:-1;;;;;8232:140:0;;;;;;;;;;;;;;;;;;-1:-1:-1;8232:140:0;;;;;;8202:27;;;;;;;;;;:170;;;;-1:-1:-1;;8202:170:0;;;;;;;;;;-1:-1:-1;8202:170:0;;;;;;;8176:16;;-1:-1:-1;8232:140:0;;8202:27;;:170;;;;;;;;;;:::i;:::-;-1:-1:-1;8202:170:0;;;;;;;;;;;;-1:-1:-1;;8202:170:0;;;;;;;;;;8382:16;:21;;-1:-1:-1;8382:21:0;;;8413:25;;8424:13;;8413:25;;-1:-1:-1;;8413:25:0;2166:1;7994:451;;;;;;;:::o;703:1479:3:-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;-1:-1:-1;703:1479:3;;;:::o;:::-;;;;;;;;;;-1:-1:-1;703:1479:3;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;703:1479:3;;;-1:-1:-1;703:1479:3;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o",
+ "linkReferences": {}
+ },
+ "methodIdentifiers": {
+ "MAX_OWNER_COUNT()": "d74f8edd",
+ "addOwner(address)": "7065cb48",
+ "changeRequirement(uint256)": "ba51a6df",
+ "changeTimeLock(uint256)": "7ad28c51",
+ "confirmTransaction(uint256)": "c01a8c84",
+ "confirmationTimes(uint256)": "d38f2d82",
+ "confirmations(uint256,address)": "3411c81c",
+ "executeRemoveAuthorizedAddressAtIndex(uint256)": "3589b35c",
+ "executeTransaction(uint256)": "ee22610b",
+ "getConfirmationCount(uint256)": "8b51d13f",
+ "getConfirmations(uint256)": "b5dc40c3",
+ "getOwners()": "a0e67e2b",
+ "getTransactionCount(bool,bool)": "54741525",
+ "getTransactionIds(uint256,uint256,bool,bool)": "a8abe69a",
+ "isAssetProxyRegistered(address)": "83250f79",
+ "isConfirmed(uint256)": "784547a7",
+ "isFunctionRemoveAuthorizedAddressAtIndex(bytes)": "72cbe61d",
+ "isOwner(address)": "2f54bf6e",
+ "owners(uint256)": "025e7c27",
+ "publicReadBytes4(bytes,uint256)": "cc12cb28",
+ "registerAssetProxy(address,bool)": "5a1a66af",
+ "removeOwner(address)": "173825d9",
+ "replaceOwner(address,address)": "e20056e6",
+ "required()": "dc8452cd",
+ "revokeConfirmation(uint256)": "20ea8d86",
+ "secondsTimeLocked()": "37bd78a0",
+ "submitTransaction(address,uint256,bytes)": "c6427474",
+ "testValidRemoveAuthorizedAddressAtIndexTx(uint256)": "c296e43c",
+ "transactionCount()": "b77bf600",
+ "transactions(uint256)": "9ace38c2"
+ },
+ "gasEstimates": {
+ "creation": {
+ "codeDepositCost": "1577000",
+ "executionCost": "infinite"
+ },
+ "internal": {},
+ "external": {
+ "": "2253",
+ "MAX_OWNER_COUNT()": "1550",
+ "addOwner(address)": "infinite",
+ "changeRequirement(uint256)": "21923",
+ "changeTimeLock(uint256)": "21582",
+ "confirmTransaction(uint256)": "infinite",
+ "confirmationTimes(uint256)": "1550",
+ "confirmations(uint256,address)": "1550",
+ "executeRemoveAuthorizedAddressAtIndex(uint256)": "infinite",
+ "executeTransaction(uint256)": "infinite",
+ "getConfirmationCount(uint256)": "infinite",
+ "getConfirmations(uint256)": "infinite",
+ "getOwners()": "infinite",
+ "getTransactionCount(bool,bool)": "infinite",
+ "getTransactionIds(uint256,uint256,bool,bool)": "infinite",
+ "isAssetProxyRegistered(address)": "1550",
+ "isConfirmed(uint256)": "infinite",
+ "isFunctionRemoveAuthorizedAddressAtIndex(bytes)": "infinite",
+ "isOwner(address)": "1550",
+ "owners(uint256)": "1550",
+ "publicReadBytes4(bytes,uint256)": "infinite",
+ "registerAssetProxy(address,bool)": "22074",
+ "removeOwner(address)": "infinite",
+ "replaceOwner(address,address)": "infinite",
+ "required()": "1550",
+ "revokeConfirmation(uint256)": "infinite",
+ "secondsTimeLocked()": "1550",
+ "submitTransaction(address,uint256,bytes)": "infinite",
+ "testValidRemoveAuthorizedAddressAtIndexTx(uint256)": "infinite",
+ "transactionCount()": "1550",
+ "transactions(uint256)": "infinite"
+ }
}
}
},
"sources": {
- "current/multisig/MultiSigWallet.sol": {
- "id": 0
- },
- "current/multisig/MultiSigWalletWithTimeLock.sol": {
- "id": 1
+ "2.0.0/multisig/MultiSigWallet.sol": {
+ "id": "0",
+ "legacyAST": {
+ "children": [
+ {
+ "attributes": {
+ "literals": [
+ "solidity",
+ "^",
+ "0.4",
+ ".10"
+ ]
+ },
+ "id": 531,
+ "name": "PragmaDirective",
+ "src": "19:24:0"
+ },
+ {
+ "attributes": {
+ "fullyImplemented": true,
+ "isLibrary": false,
+ "linearizedBaseContracts": [
+ 1492
+ ],
+ "name": "MultiSigWallet"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "MAX_OWNER_COUNT",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 532,
+ "name": "ElementaryTypeName",
+ "src": "237:4:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "3530",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 50",
+ "value": "50"
+ },
+ "id": 533,
+ "name": "Literal",
+ "src": "276:2:0"
+ }
+ ],
+ "id": 534,
+ "name": "VariableDeclaration",
+ "src": "237:41:0"
+ },
+ {
+ "attributes": {
+ "name": "Confirmation"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "sender",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 535,
+ "name": "ElementaryTypeName",
+ "src": "304:7:0"
+ }
+ ],
+ "id": 536,
+ "name": "VariableDeclaration",
+ "src": "304:22:0"
+ },
+ {
+ "attributes": {
+ "name": "transactionId",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 537,
+ "name": "ElementaryTypeName",
+ "src": "328:4:0"
+ }
+ ],
+ "id": 538,
+ "name": "VariableDeclaration",
+ "src": "328:26:0"
+ }
+ ],
+ "id": 539,
+ "name": "ParameterList",
+ "src": "303:52:0"
+ }
+ ],
+ "id": 540,
+ "name": "EventDefinition",
+ "src": "285:71:0"
+ },
+ {
+ "attributes": {
+ "name": "Revocation"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "sender",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 541,
+ "name": "ElementaryTypeName",
+ "src": "378:7:0"
+ }
+ ],
+ "id": 542,
+ "name": "VariableDeclaration",
+ "src": "378:22:0"
+ },
+ {
+ "attributes": {
+ "name": "transactionId",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 543,
+ "name": "ElementaryTypeName",
+ "src": "402:4:0"
+ }
+ ],
+ "id": 544,
+ "name": "VariableDeclaration",
+ "src": "402:26:0"
+ }
+ ],
+ "id": 545,
+ "name": "ParameterList",
+ "src": "377:52:0"
+ }
+ ],
+ "id": 546,
+ "name": "EventDefinition",
+ "src": "361:69:0"
+ },
+ {
+ "attributes": {
+ "name": "Submission"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "transactionId",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 547,
+ "name": "ElementaryTypeName",
+ "src": "452:4:0"
+ }
+ ],
+ "id": 548,
+ "name": "VariableDeclaration",
+ "src": "452:26:0"
+ }
+ ],
+ "id": 549,
+ "name": "ParameterList",
+ "src": "451:28:0"
+ }
+ ],
+ "id": 550,
+ "name": "EventDefinition",
+ "src": "435:45:0"
+ },
+ {
+ "attributes": {
+ "name": "Execution"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "transactionId",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 551,
+ "name": "ElementaryTypeName",
+ "src": "501:4:0"
+ }
+ ],
+ "id": 552,
+ "name": "VariableDeclaration",
+ "src": "501:26:0"
+ }
+ ],
+ "id": 553,
+ "name": "ParameterList",
+ "src": "500:28:0"
+ }
+ ],
+ "id": 554,
+ "name": "EventDefinition",
+ "src": "485:44:0"
+ },
+ {
+ "attributes": {
+ "name": "ExecutionFailure"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "transactionId",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 555,
+ "name": "ElementaryTypeName",
+ "src": "557:4:0"
+ }
+ ],
+ "id": 556,
+ "name": "VariableDeclaration",
+ "src": "557:26:0"
+ }
+ ],
+ "id": 557,
+ "name": "ParameterList",
+ "src": "556:28:0"
+ }
+ ],
+ "id": 558,
+ "name": "EventDefinition",
+ "src": "534:51:0"
+ },
+ {
+ "attributes": {
+ "name": "Deposit"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "sender",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 559,
+ "name": "ElementaryTypeName",
+ "src": "604:7:0"
+ }
+ ],
+ "id": 560,
+ "name": "VariableDeclaration",
+ "src": "604:22:0"
+ },
+ {
+ "attributes": {
+ "name": "value",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 561,
+ "name": "ElementaryTypeName",
+ "src": "628:4:0"
+ }
+ ],
+ "id": 562,
+ "name": "VariableDeclaration",
+ "src": "628:10:0"
+ }
+ ],
+ "id": 563,
+ "name": "ParameterList",
+ "src": "603:36:0"
+ }
+ ],
+ "id": 564,
+ "name": "EventDefinition",
+ "src": "590:50:0"
+ },
+ {
+ "attributes": {
+ "name": "OwnerAddition"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "owner",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 565,
+ "name": "ElementaryTypeName",
+ "src": "665:7:0"
+ }
+ ],
+ "id": 566,
+ "name": "VariableDeclaration",
+ "src": "665:21:0"
+ }
+ ],
+ "id": 567,
+ "name": "ParameterList",
+ "src": "664:23:0"
+ }
+ ],
+ "id": 568,
+ "name": "EventDefinition",
+ "src": "645:43:0"
+ },
+ {
+ "attributes": {
+ "name": "OwnerRemoval"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "owner",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 569,
+ "name": "ElementaryTypeName",
+ "src": "712:7:0"
+ }
+ ],
+ "id": 570,
+ "name": "VariableDeclaration",
+ "src": "712:21:0"
+ }
+ ],
+ "id": 571,
+ "name": "ParameterList",
+ "src": "711:23:0"
+ }
+ ],
+ "id": 572,
+ "name": "EventDefinition",
+ "src": "693:42:0"
+ },
+ {
+ "attributes": {
+ "name": "RequirementChange"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "required",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 573,
+ "name": "ElementaryTypeName",
+ "src": "764:4:0"
+ }
+ ],
+ "id": 574,
+ "name": "VariableDeclaration",
+ "src": "764:13:0"
+ }
+ ],
+ "id": 575,
+ "name": "ParameterList",
+ "src": "763:15:0"
+ }
+ ],
+ "id": 576,
+ "name": "EventDefinition",
+ "src": "740:39:0"
+ },
+ {
+ "attributes": {
+ "name": "transactions",
+ "type": "mapping(uint256 => struct MultiSigWallet.Transaction storage ref)"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 577,
+ "name": "ElementaryTypeName",
+ "src": "794:4:0"
+ },
+ {
+ "attributes": {
+ "name": "Transaction"
+ },
+ "id": 578,
+ "name": "UserDefinedTypeName",
+ "src": "802:11:0"
+ }
+ ],
+ "id": 579,
+ "name": "Mapping",
+ "src": "785:29:0"
+ }
+ ],
+ "id": 580,
+ "name": "VariableDeclaration",
+ "src": "785:49:0"
+ },
+ {
+ "attributes": {
+ "name": "confirmations",
+ "type": "mapping(uint256 => mapping(address => bool))"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 581,
+ "name": "ElementaryTypeName",
+ "src": "849:4:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 582,
+ "name": "ElementaryTypeName",
+ "src": "866:7:0"
+ },
+ {
+ "attributes": {
+ "name": "bool"
+ },
+ "id": 583,
+ "name": "ElementaryTypeName",
+ "src": "877:4:0"
+ }
+ ],
+ "id": 584,
+ "name": "Mapping",
+ "src": "857:25:0"
+ }
+ ],
+ "id": 585,
+ "name": "Mapping",
+ "src": "840:43:0"
+ }
+ ],
+ "id": 586,
+ "name": "VariableDeclaration",
+ "src": "840:64:0"
+ },
+ {
+ "attributes": {
+ "name": "isOwner",
+ "type": "mapping(address => bool)"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 587,
+ "name": "ElementaryTypeName",
+ "src": "919:7:0"
+ },
+ {
+ "attributes": {
+ "name": "bool"
+ },
+ "id": 588,
+ "name": "ElementaryTypeName",
+ "src": "930:4:0"
+ }
+ ],
+ "id": 589,
+ "name": "Mapping",
+ "src": "910:25:0"
+ }
+ ],
+ "id": 590,
+ "name": "VariableDeclaration",
+ "src": "910:40:0"
+ },
+ {
+ "attributes": {
+ "name": "owners",
+ "type": "address[] storage ref"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 591,
+ "name": "ElementaryTypeName",
+ "src": "956:7:0"
+ }
+ ],
+ "id": 592,
+ "name": "ArrayTypeName",
+ "src": "956:9:0"
+ }
+ ],
+ "id": 593,
+ "name": "VariableDeclaration",
+ "src": "956:23:0"
+ },
+ {
+ "attributes": {
+ "name": "required",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 594,
+ "name": "ElementaryTypeName",
+ "src": "985:4:0"
+ }
+ ],
+ "id": 595,
+ "name": "VariableDeclaration",
+ "src": "985:20:0"
+ },
+ {
+ "attributes": {
+ "name": "transactionCount",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 596,
+ "name": "ElementaryTypeName",
+ "src": "1011:4:0"
+ }
+ ],
+ "id": 597,
+ "name": "VariableDeclaration",
+ "src": "1011:28:0"
+ },
+ {
+ "attributes": {
+ "name": "Transaction"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "destination",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 598,
+ "name": "ElementaryTypeName",
+ "src": "1075:7:0"
+ }
+ ],
+ "id": 599,
+ "name": "VariableDeclaration",
+ "src": "1075:19:0"
+ },
+ {
+ "attributes": {
+ "name": "value",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 600,
+ "name": "ElementaryTypeName",
+ "src": "1104:4:0"
+ }
+ ],
+ "id": 601,
+ "name": "VariableDeclaration",
+ "src": "1104:10:0"
+ },
+ {
+ "attributes": {
+ "name": "data",
+ "type": "bytes storage pointer"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "bytes"
+ },
+ "id": 602,
+ "name": "ElementaryTypeName",
+ "src": "1124:5:0"
+ }
+ ],
+ "id": 603,
+ "name": "VariableDeclaration",
+ "src": "1124:10:0"
+ },
+ {
+ "attributes": {
+ "name": "executed",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "bool"
+ },
+ "id": 604,
+ "name": "ElementaryTypeName",
+ "src": "1144:4:0"
+ }
+ ],
+ "id": 605,
+ "name": "VariableDeclaration",
+ "src": "1144:13:0"
+ }
+ ],
+ "id": 606,
+ "name": "StructDefinition",
+ "src": "1046:118:0"
+ },
+ {
+ "attributes": {
+ "name": "onlyWallet"
+ },
+ "children": [
+ {
+ "children": [],
+ "id": 607,
+ "name": "ParameterList",
+ "src": "1189:2:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "!=",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "member_name": "sender",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "msg",
+ "value": "msg"
+ },
+ "id": 608,
+ "name": "Identifier",
+ "src": "1206:3:0"
+ }
+ ],
+ "id": 609,
+ "name": "MemberAccess",
+ "src": "1206:10:0"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "type_conversion": true
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "type(address)",
+ "value": "address"
+ },
+ "id": 610,
+ "name": "ElementaryTypeNameExpression",
+ "src": "1220:7:0"
+ },
+ {
+ "attributes": {
+ "type": "contract MultiSigWallet",
+ "value": "this"
+ },
+ "id": 611,
+ "name": "Identifier",
+ "src": "1228:4:0"
+ }
+ ],
+ "id": 612,
+ "name": "FunctionCall",
+ "src": "1220:13:0"
+ }
+ ],
+ "id": 613,
+ "name": "BinaryOperation",
+ "src": "1206:27:0"
+ },
+ {
+ "children": [],
+ "id": 614,
+ "name": "Throw",
+ "src": "1247:5:0"
+ }
+ ],
+ "id": 615,
+ "name": "IfStatement",
+ "src": "1202:50:0"
+ },
+ {
+ "id": 616,
+ "name": "PlaceholderStatement",
+ "src": "1262:1:0"
+ }
+ ],
+ "id": 617,
+ "name": "Block",
+ "src": "1192:78:0"
+ }
+ ],
+ "id": 618,
+ "name": "ModifierDefinition",
+ "src": "1170:100:0"
+ },
+ {
+ "attributes": {
+ "name": "ownerDoesNotExist"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "owner",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 619,
+ "name": "ElementaryTypeName",
+ "src": "1303:7:0"
+ }
+ ],
+ "id": 620,
+ "name": "VariableDeclaration",
+ "src": "1303:13:0"
+ }
+ ],
+ "id": 621,
+ "name": "ParameterList",
+ "src": "1302:15:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(address => bool)",
+ "value": "isOwner"
+ },
+ "id": 622,
+ "name": "Identifier",
+ "src": "1332:7:0"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "owner"
+ },
+ "id": 623,
+ "name": "Identifier",
+ "src": "1340:5:0"
+ }
+ ],
+ "id": 624,
+ "name": "IndexAccess",
+ "src": "1332:14:0"
+ },
+ {
+ "children": [],
+ "id": 625,
+ "name": "Throw",
+ "src": "1360:5:0"
+ }
+ ],
+ "id": 626,
+ "name": "IfStatement",
+ "src": "1328:37:0"
+ },
+ {
+ "id": 627,
+ "name": "PlaceholderStatement",
+ "src": "1375:1:0"
+ }
+ ],
+ "id": 628,
+ "name": "Block",
+ "src": "1318:65:0"
+ }
+ ],
+ "id": 629,
+ "name": "ModifierDefinition",
+ "src": "1276:107:0"
+ },
+ {
+ "attributes": {
+ "name": "ownerExists"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "owner",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 630,
+ "name": "ElementaryTypeName",
+ "src": "1410:7:0"
+ }
+ ],
+ "id": 631,
+ "name": "VariableDeclaration",
+ "src": "1410:13:0"
+ }
+ ],
+ "id": 632,
+ "name": "ParameterList",
+ "src": "1409:15:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "!",
+ "prefix": true,
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(address => bool)",
+ "value": "isOwner"
+ },
+ "id": 633,
+ "name": "Identifier",
+ "src": "1440:7:0"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "owner"
+ },
+ "id": 634,
+ "name": "Identifier",
+ "src": "1448:5:0"
+ }
+ ],
+ "id": 635,
+ "name": "IndexAccess",
+ "src": "1440:14:0"
+ }
+ ],
+ "id": 636,
+ "name": "UnaryOperation",
+ "src": "1439:15:0"
+ },
+ {
+ "children": [],
+ "id": 637,
+ "name": "Throw",
+ "src": "1468:5:0"
+ }
+ ],
+ "id": 638,
+ "name": "IfStatement",
+ "src": "1435:38:0"
+ },
+ {
+ "id": 639,
+ "name": "PlaceholderStatement",
+ "src": "1483:1:0"
+ }
+ ],
+ "id": 640,
+ "name": "Block",
+ "src": "1425:66:0"
+ }
+ ],
+ "id": 641,
+ "name": "ModifierDefinition",
+ "src": "1389:102:0"
+ },
+ {
+ "attributes": {
+ "name": "transactionExists"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "transactionId",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 642,
+ "name": "ElementaryTypeName",
+ "src": "1524:4:0"
+ }
+ ],
+ "id": 643,
+ "name": "VariableDeclaration",
+ "src": "1524:18:0"
+ }
+ ],
+ "id": 644,
+ "name": "ParameterList",
+ "src": "1523:20:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "==",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "member_name": "destination",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage ref"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(uint256 => struct MultiSigWallet.Transaction storage ref)",
+ "value": "transactions"
+ },
+ "id": 645,
+ "name": "Identifier",
+ "src": "1558:12:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 646,
+ "name": "Identifier",
+ "src": "1571:13:0"
+ }
+ ],
+ "id": 647,
+ "name": "IndexAccess",
+ "src": "1558:27:0"
+ }
+ ],
+ "id": 648,
+ "name": "MemberAccess",
+ "src": "1558:39:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "30",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 0",
+ "value": "0"
+ },
+ "id": 649,
+ "name": "Literal",
+ "src": "1601:1:0"
+ }
+ ],
+ "id": 650,
+ "name": "BinaryOperation",
+ "src": "1558:44:0"
+ },
+ {
+ "children": [],
+ "id": 651,
+ "name": "Throw",
+ "src": "1616:5:0"
+ }
+ ],
+ "id": 652,
+ "name": "IfStatement",
+ "src": "1554:67:0"
+ },
+ {
+ "id": 653,
+ "name": "PlaceholderStatement",
+ "src": "1631:1:0"
+ }
+ ],
+ "id": 654,
+ "name": "Block",
+ "src": "1544:95:0"
+ }
+ ],
+ "id": 655,
+ "name": "ModifierDefinition",
+ "src": "1497:142:0"
+ },
+ {
+ "attributes": {
+ "name": "confirmed"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "transactionId",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 656,
+ "name": "ElementaryTypeName",
+ "src": "1664:4:0"
+ }
+ ],
+ "id": 657,
+ "name": "VariableDeclaration",
+ "src": "1664:18:0"
+ },
+ {
+ "attributes": {
+ "name": "owner",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 658,
+ "name": "ElementaryTypeName",
+ "src": "1684:7:0"
+ }
+ ],
+ "id": 659,
+ "name": "VariableDeclaration",
+ "src": "1684:13:0"
+ }
+ ],
+ "id": 660,
+ "name": "ParameterList",
+ "src": "1663:35:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "!",
+ "prefix": true,
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(address => bool)"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(uint256 => mapping(address => bool))",
+ "value": "confirmations"
+ },
+ "id": 661,
+ "name": "Identifier",
+ "src": "1714:13:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 662,
+ "name": "Identifier",
+ "src": "1728:13:0"
+ }
+ ],
+ "id": 663,
+ "name": "IndexAccess",
+ "src": "1714:28:0"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "owner"
+ },
+ "id": 664,
+ "name": "Identifier",
+ "src": "1743:5:0"
+ }
+ ],
+ "id": 665,
+ "name": "IndexAccess",
+ "src": "1714:35:0"
+ }
+ ],
+ "id": 666,
+ "name": "UnaryOperation",
+ "src": "1713:36:0"
+ },
+ {
+ "children": [],
+ "id": 667,
+ "name": "Throw",
+ "src": "1763:5:0"
+ }
+ ],
+ "id": 668,
+ "name": "IfStatement",
+ "src": "1709:59:0"
+ },
+ {
+ "id": 669,
+ "name": "PlaceholderStatement",
+ "src": "1778:1:0"
+ }
+ ],
+ "id": 670,
+ "name": "Block",
+ "src": "1699:87:0"
+ }
+ ],
+ "id": 671,
+ "name": "ModifierDefinition",
+ "src": "1645:141:0"
+ },
+ {
+ "attributes": {
+ "name": "notConfirmed"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "transactionId",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 672,
+ "name": "ElementaryTypeName",
+ "src": "1814:4:0"
+ }
+ ],
+ "id": 673,
+ "name": "VariableDeclaration",
+ "src": "1814:18:0"
+ },
+ {
+ "attributes": {
+ "name": "owner",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 674,
+ "name": "ElementaryTypeName",
+ "src": "1834:7:0"
+ }
+ ],
+ "id": 675,
+ "name": "VariableDeclaration",
+ "src": "1834:13:0"
+ }
+ ],
+ "id": 676,
+ "name": "ParameterList",
+ "src": "1813:35:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(address => bool)"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(uint256 => mapping(address => bool))",
+ "value": "confirmations"
+ },
+ "id": 677,
+ "name": "Identifier",
+ "src": "1863:13:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 678,
+ "name": "Identifier",
+ "src": "1877:13:0"
+ }
+ ],
+ "id": 679,
+ "name": "IndexAccess",
+ "src": "1863:28:0"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "owner"
+ },
+ "id": 680,
+ "name": "Identifier",
+ "src": "1892:5:0"
+ }
+ ],
+ "id": 681,
+ "name": "IndexAccess",
+ "src": "1863:35:0"
+ },
+ {
+ "children": [],
+ "id": 682,
+ "name": "Throw",
+ "src": "1912:5:0"
+ }
+ ],
+ "id": 683,
+ "name": "IfStatement",
+ "src": "1859:58:0"
+ },
+ {
+ "id": 684,
+ "name": "PlaceholderStatement",
+ "src": "1927:1:0"
+ }
+ ],
+ "id": 685,
+ "name": "Block",
+ "src": "1849:86:0"
+ }
+ ],
+ "id": 686,
+ "name": "ModifierDefinition",
+ "src": "1792:143:0"
+ },
+ {
+ "attributes": {
+ "name": "notExecuted"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "transactionId",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 687,
+ "name": "ElementaryTypeName",
+ "src": "1962:4:0"
+ }
+ ],
+ "id": 688,
+ "name": "VariableDeclaration",
+ "src": "1962:18:0"
+ }
+ ],
+ "id": 689,
+ "name": "ParameterList",
+ "src": "1961:20:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "member_name": "executed",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage ref"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(uint256 => struct MultiSigWallet.Transaction storage ref)",
+ "value": "transactions"
+ },
+ "id": 690,
+ "name": "Identifier",
+ "src": "1996:12:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 691,
+ "name": "Identifier",
+ "src": "2009:13:0"
+ }
+ ],
+ "id": 692,
+ "name": "IndexAccess",
+ "src": "1996:27:0"
+ }
+ ],
+ "id": 693,
+ "name": "MemberAccess",
+ "src": "1996:36:0"
+ },
+ {
+ "children": [],
+ "id": 694,
+ "name": "Throw",
+ "src": "2046:5:0"
+ }
+ ],
+ "id": 695,
+ "name": "IfStatement",
+ "src": "1992:59:0"
+ },
+ {
+ "id": 696,
+ "name": "PlaceholderStatement",
+ "src": "2061:1:0"
+ }
+ ],
+ "id": 697,
+ "name": "Block",
+ "src": "1982:87:0"
+ }
+ ],
+ "id": 698,
+ "name": "ModifierDefinition",
+ "src": "1941:128:0"
+ },
+ {
+ "attributes": {
+ "name": "notNull"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "_address",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 699,
+ "name": "ElementaryTypeName",
+ "src": "2092:7:0"
+ }
+ ],
+ "id": 700,
+ "name": "VariableDeclaration",
+ "src": "2092:16:0"
+ }
+ ],
+ "id": 701,
+ "name": "ParameterList",
+ "src": "2091:18:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "==",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address",
+ "value": "_address"
+ },
+ "id": 702,
+ "name": "Identifier",
+ "src": "2124:8:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "30",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 0",
+ "value": "0"
+ },
+ "id": 703,
+ "name": "Literal",
+ "src": "2136:1:0"
+ }
+ ],
+ "id": 704,
+ "name": "BinaryOperation",
+ "src": "2124:13:0"
+ },
+ {
+ "children": [],
+ "id": 705,
+ "name": "Throw",
+ "src": "2151:5:0"
+ }
+ ],
+ "id": 706,
+ "name": "IfStatement",
+ "src": "2120:36:0"
+ },
+ {
+ "id": 707,
+ "name": "PlaceholderStatement",
+ "src": "2166:1:0"
+ }
+ ],
+ "id": 708,
+ "name": "Block",
+ "src": "2110:64:0"
+ }
+ ],
+ "id": 709,
+ "name": "ModifierDefinition",
+ "src": "2075:99:0"
+ },
+ {
+ "attributes": {
+ "name": "validRequirement"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "ownerCount",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 710,
+ "name": "ElementaryTypeName",
+ "src": "2206:4:0"
+ }
+ ],
+ "id": 711,
+ "name": "VariableDeclaration",
+ "src": "2206:15:0"
+ },
+ {
+ "attributes": {
+ "name": "_required",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 712,
+ "name": "ElementaryTypeName",
+ "src": "2223:4:0"
+ }
+ ],
+ "id": 713,
+ "name": "VariableDeclaration",
+ "src": "2223:14:0"
+ }
+ ],
+ "id": 714,
+ "name": "ParameterList",
+ "src": "2205:33:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "||",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "operator": "||",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "operator": "||",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "operator": ">",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "ownerCount"
+ },
+ "id": 715,
+ "name": "Identifier",
+ "src": "2256:10:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "MAX_OWNER_COUNT"
+ },
+ "id": 716,
+ "name": "Identifier",
+ "src": "2269:15:0"
+ }
+ ],
+ "id": 717,
+ "name": "BinaryOperation",
+ "src": "2256:28:0"
+ },
+ {
+ "attributes": {
+ "operator": ">",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "_required"
+ },
+ "id": 718,
+ "name": "Identifier",
+ "src": "2300:9:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "ownerCount"
+ },
+ "id": 719,
+ "name": "Identifier",
+ "src": "2312:10:0"
+ }
+ ],
+ "id": 720,
+ "name": "BinaryOperation",
+ "src": "2300:22:0"
+ }
+ ],
+ "id": 721,
+ "name": "BinaryOperation",
+ "src": "2256:66:0"
+ },
+ {
+ "attributes": {
+ "operator": "==",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "_required"
+ },
+ "id": 722,
+ "name": "Identifier",
+ "src": "2338:9:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "30",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 0",
+ "value": "0"
+ },
+ "id": 723,
+ "name": "Literal",
+ "src": "2351:1:0"
+ }
+ ],
+ "id": 724,
+ "name": "BinaryOperation",
+ "src": "2338:14:0"
+ }
+ ],
+ "id": 725,
+ "name": "BinaryOperation",
+ "src": "2256:96:0"
+ },
+ {
+ "attributes": {
+ "operator": "==",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "ownerCount"
+ },
+ "id": 726,
+ "name": "Identifier",
+ "src": "2368:10:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "30",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 0",
+ "value": "0"
+ },
+ "id": 727,
+ "name": "Literal",
+ "src": "2382:1:0"
+ }
+ ],
+ "id": 728,
+ "name": "BinaryOperation",
+ "src": "2368:15:0"
+ }
+ ],
+ "id": 729,
+ "name": "BinaryOperation",
+ "src": "2256:127:0"
+ },
+ {
+ "children": [],
+ "id": 730,
+ "name": "Throw",
+ "src": "2397:5:0"
+ }
+ ],
+ "id": 731,
+ "name": "IfStatement",
+ "src": "2249:153:0"
+ },
+ {
+ "id": 732,
+ "name": "PlaceholderStatement",
+ "src": "2412:1:0"
+ }
+ ],
+ "id": 733,
+ "name": "Block",
+ "src": "2239:181:0"
+ }
+ ],
+ "id": 734,
+ "name": "ModifierDefinition",
+ "src": "2180:240:0"
+ },
+ {
+ "attributes": {
+ "constant": false,
+ "name": "",
+ "payable": true,
+ "visibility": "public"
+ },
+ "children": [
+ {
+ "children": [],
+ "id": 735,
+ "name": "ParameterList",
+ "src": "2490:2:0"
+ },
+ {
+ "children": [],
+ "id": 736,
+ "name": "ParameterList",
+ "src": "2513:0:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": ">",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "member_name": "value",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "msg",
+ "value": "msg"
+ },
+ "id": 737,
+ "name": "Identifier",
+ "src": "2527:3:0"
+ }
+ ],
+ "id": 738,
+ "name": "MemberAccess",
+ "src": "2527:9:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "30",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 0",
+ "value": "0"
+ },
+ "id": 739,
+ "name": "Literal",
+ "src": "2539:1:0"
+ }
+ ],
+ "id": 740,
+ "name": "BinaryOperation",
+ "src": "2527:13:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (address,uint256) constant",
+ "value": "Deposit"
+ },
+ "id": 741,
+ "name": "Identifier",
+ "src": "2554:7:0"
+ },
+ {
+ "attributes": {
+ "member_name": "sender",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "msg",
+ "value": "msg"
+ },
+ "id": 742,
+ "name": "Identifier",
+ "src": "2562:3:0"
+ }
+ ],
+ "id": 743,
+ "name": "MemberAccess",
+ "src": "2562:10:0"
+ },
+ {
+ "attributes": {
+ "member_name": "value",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "msg",
+ "value": "msg"
+ },
+ "id": 744,
+ "name": "Identifier",
+ "src": "2574:3:0"
+ }
+ ],
+ "id": 745,
+ "name": "MemberAccess",
+ "src": "2574:9:0"
+ }
+ ],
+ "id": 746,
+ "name": "FunctionCall",
+ "src": "2554:30:0"
+ }
+ ],
+ "id": 747,
+ "name": "ExpressionStatement",
+ "src": "2554:30:0"
+ }
+ ],
+ "id": 748,
+ "name": "IfStatement",
+ "src": "2523:61:0"
+ }
+ ],
+ "id": 749,
+ "name": "Block",
+ "src": "2513:78:0"
+ }
+ ],
+ "id": 750,
+ "name": "FunctionDefinition",
+ "src": "2482:109:0"
+ },
+ {
+ "attributes": {
+ "constant": false,
+ "name": "MultiSigWallet",
+ "payable": false,
+ "visibility": "public"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "_owners",
+ "type": "address[] memory"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 751,
+ "name": "ElementaryTypeName",
+ "src": "2858:7:0"
+ }
+ ],
+ "id": 752,
+ "name": "ArrayTypeName",
+ "src": "2858:9:0"
+ }
+ ],
+ "id": 753,
+ "name": "VariableDeclaration",
+ "src": "2858:17:0"
+ },
+ {
+ "attributes": {
+ "name": "_required",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 754,
+ "name": "ElementaryTypeName",
+ "src": "2877:4:0"
+ }
+ ],
+ "id": 755,
+ "name": "VariableDeclaration",
+ "src": "2877:14:0"
+ }
+ ],
+ "id": 756,
+ "name": "ParameterList",
+ "src": "2857:35:0"
+ },
+ {
+ "children": [],
+ "id": 762,
+ "name": "ParameterList",
+ "src": "2964:0:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (uint256,uint256)",
+ "value": "validRequirement"
+ },
+ "id": 757,
+ "name": "Identifier",
+ "src": "2916:16:0"
+ },
+ {
+ "attributes": {
+ "member_name": "length",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] memory",
+ "value": "_owners"
+ },
+ "id": 758,
+ "name": "Identifier",
+ "src": "2933:7:0"
+ }
+ ],
+ "id": 759,
+ "name": "MemberAccess",
+ "src": "2933:14:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "_required"
+ },
+ "id": 760,
+ "name": "Identifier",
+ "src": "2949:9:0"
+ }
+ ],
+ "id": 761,
+ "name": "ModifierInvocation",
+ "src": "2916:43:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "i",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 763,
+ "name": "ElementaryTypeName",
+ "src": "2979:4:0"
+ }
+ ],
+ "id": 764,
+ "name": "VariableDeclaration",
+ "src": "2979:6:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "30",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 0",
+ "value": "0"
+ },
+ "id": 765,
+ "name": "Literal",
+ "src": "2986:1:0"
+ }
+ ],
+ "id": 766,
+ "name": "VariableDeclarationStatement",
+ "src": "2979:8:0"
+ },
+ {
+ "attributes": {
+ "operator": "<",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 767,
+ "name": "Identifier",
+ "src": "2989:1:0"
+ },
+ {
+ "attributes": {
+ "member_name": "length",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] memory",
+ "value": "_owners"
+ },
+ "id": 768,
+ "name": "Identifier",
+ "src": "2991:7:0"
+ }
+ ],
+ "id": 769,
+ "name": "MemberAccess",
+ "src": "2991:14:0"
+ }
+ ],
+ "id": 770,
+ "name": "BinaryOperation",
+ "src": "2989:16:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "++",
+ "prefix": false,
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 771,
+ "name": "Identifier",
+ "src": "3007:1:0"
+ }
+ ],
+ "id": 772,
+ "name": "UnaryOperation",
+ "src": "3007:3:0"
+ }
+ ],
+ "id": 773,
+ "name": "ExpressionStatement",
+ "src": "3007:3:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "||",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(address => bool)",
+ "value": "isOwner"
+ },
+ "id": 774,
+ "name": "Identifier",
+ "src": "3030:7:0"
+ },
+ {
+ "attributes": {
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] memory",
+ "value": "_owners"
+ },
+ "id": 775,
+ "name": "Identifier",
+ "src": "3038:7:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 776,
+ "name": "Identifier",
+ "src": "3046:1:0"
+ }
+ ],
+ "id": 777,
+ "name": "IndexAccess",
+ "src": "3038:10:0"
+ }
+ ],
+ "id": 778,
+ "name": "IndexAccess",
+ "src": "3030:19:0"
+ },
+ {
+ "attributes": {
+ "operator": "==",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] memory",
+ "value": "_owners"
+ },
+ "id": 779,
+ "name": "Identifier",
+ "src": "3053:7:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 780,
+ "name": "Identifier",
+ "src": "3061:1:0"
+ }
+ ],
+ "id": 781,
+ "name": "IndexAccess",
+ "src": "3053:10:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "30",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 0",
+ "value": "0"
+ },
+ "id": 782,
+ "name": "Literal",
+ "src": "3067:1:0"
+ }
+ ],
+ "id": 783,
+ "name": "BinaryOperation",
+ "src": "3053:15:0"
+ }
+ ],
+ "id": 784,
+ "name": "BinaryOperation",
+ "src": "3030:38:0"
+ },
+ {
+ "children": [],
+ "id": 785,
+ "name": "Throw",
+ "src": "3086:5:0"
+ }
+ ],
+ "id": 786,
+ "name": "IfStatement",
+ "src": "3026:65:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(address => bool)",
+ "value": "isOwner"
+ },
+ "id": 787,
+ "name": "Identifier",
+ "src": "3105:7:0"
+ },
+ {
+ "attributes": {
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] memory",
+ "value": "_owners"
+ },
+ "id": 788,
+ "name": "Identifier",
+ "src": "3113:7:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 789,
+ "name": "Identifier",
+ "src": "3121:1:0"
+ }
+ ],
+ "id": 790,
+ "name": "IndexAccess",
+ "src": "3113:10:0"
+ }
+ ],
+ "id": 791,
+ "name": "IndexAccess",
+ "src": "3105:19:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "74727565",
+ "subdenomination": null,
+ "token": "true",
+ "type": "bool",
+ "value": "true"
+ },
+ "id": 792,
+ "name": "Literal",
+ "src": "3127:4:0"
+ }
+ ],
+ "id": 793,
+ "name": "Assignment",
+ "src": "3105:26:0"
+ }
+ ],
+ "id": 794,
+ "name": "ExpressionStatement",
+ "src": "3105:26:0"
+ }
+ ],
+ "id": 795,
+ "name": "Block",
+ "src": "3012:130:0"
+ }
+ ],
+ "id": 796,
+ "name": "ForStatement",
+ "src": "2974:168:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "address[] storage ref"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] storage ref",
+ "value": "owners"
+ },
+ "id": 797,
+ "name": "Identifier",
+ "src": "3151:6:0"
+ },
+ {
+ "attributes": {
+ "type": "address[] memory",
+ "value": "_owners"
+ },
+ "id": 798,
+ "name": "Identifier",
+ "src": "3160:7:0"
+ }
+ ],
+ "id": 799,
+ "name": "Assignment",
+ "src": "3151:16:0"
+ }
+ ],
+ "id": 800,
+ "name": "ExpressionStatement",
+ "src": "3151:16:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "required"
+ },
+ "id": 801,
+ "name": "Identifier",
+ "src": "3177:8:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "_required"
+ },
+ "id": 802,
+ "name": "Identifier",
+ "src": "3188:9:0"
+ }
+ ],
+ "id": 803,
+ "name": "Assignment",
+ "src": "3177:20:0"
+ }
+ ],
+ "id": 804,
+ "name": "ExpressionStatement",
+ "src": "3177:20:0"
+ }
+ ],
+ "id": 805,
+ "name": "Block",
+ "src": "2964:240:0"
+ }
+ ],
+ "id": 806,
+ "name": "FunctionDefinition",
+ "src": "2834:370:0"
+ },
+ {
+ "attributes": {
+ "constant": false,
+ "name": "addOwner",
+ "payable": false,
+ "visibility": "public"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "owner",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 807,
+ "name": "ElementaryTypeName",
+ "src": "3349:7:0"
+ }
+ ],
+ "id": 808,
+ "name": "VariableDeclaration",
+ "src": "3349:13:0"
+ }
+ ],
+ "id": 809,
+ "name": "ParameterList",
+ "src": "3348:15:0"
+ },
+ {
+ "children": [],
+ "id": 825,
+ "name": "ParameterList",
+ "src": "3512:0:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier ()",
+ "value": "onlyWallet"
+ },
+ "id": 810,
+ "name": "Identifier",
+ "src": "3387:10:0"
+ }
+ ],
+ "id": 811,
+ "name": "ModifierInvocation",
+ "src": "3387:10:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (address)",
+ "value": "ownerDoesNotExist"
+ },
+ "id": 812,
+ "name": "Identifier",
+ "src": "3406:17:0"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "owner"
+ },
+ "id": 813,
+ "name": "Identifier",
+ "src": "3424:5:0"
+ }
+ ],
+ "id": 814,
+ "name": "ModifierInvocation",
+ "src": "3406:24:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (address)",
+ "value": "notNull"
+ },
+ "id": 815,
+ "name": "Identifier",
+ "src": "3439:7:0"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "owner"
+ },
+ "id": 816,
+ "name": "Identifier",
+ "src": "3447:5:0"
+ }
+ ],
+ "id": 817,
+ "name": "ModifierInvocation",
+ "src": "3439:14:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (uint256,uint256)",
+ "value": "validRequirement"
+ },
+ "id": 818,
+ "name": "Identifier",
+ "src": "3462:16:0"
+ },
+ {
+ "attributes": {
+ "operator": "+",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "member_name": "length",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] storage ref",
+ "value": "owners"
+ },
+ "id": 819,
+ "name": "Identifier",
+ "src": "3479:6:0"
+ }
+ ],
+ "id": 820,
+ "name": "MemberAccess",
+ "src": "3479:13:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "31",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 1",
+ "value": "1"
+ },
+ "id": 821,
+ "name": "Literal",
+ "src": "3495:1:0"
+ }
+ ],
+ "id": 822,
+ "name": "BinaryOperation",
+ "src": "3479:17:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "required"
+ },
+ "id": 823,
+ "name": "Identifier",
+ "src": "3498:8:0"
+ }
+ ],
+ "id": 824,
+ "name": "ModifierInvocation",
+ "src": "3462:45:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(address => bool)",
+ "value": "isOwner"
+ },
+ "id": 826,
+ "name": "Identifier",
+ "src": "3522:7:0"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "owner"
+ },
+ "id": 827,
+ "name": "Identifier",
+ "src": "3530:5:0"
+ }
+ ],
+ "id": 828,
+ "name": "IndexAccess",
+ "src": "3522:14:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "74727565",
+ "subdenomination": null,
+ "token": "true",
+ "type": "bool",
+ "value": "true"
+ },
+ "id": 829,
+ "name": "Literal",
+ "src": "3539:4:0"
+ }
+ ],
+ "id": 830,
+ "name": "Assignment",
+ "src": "3522:21:0"
+ }
+ ],
+ "id": 831,
+ "name": "ExpressionStatement",
+ "src": "3522:21:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "member_name": "push",
+ "type": "function (address) returns (uint256)"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] storage ref",
+ "value": "owners"
+ },
+ "id": 832,
+ "name": "Identifier",
+ "src": "3553:6:0"
+ }
+ ],
+ "id": 834,
+ "name": "MemberAccess",
+ "src": "3553:11:0"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "owner"
+ },
+ "id": 835,
+ "name": "Identifier",
+ "src": "3565:5:0"
+ }
+ ],
+ "id": 836,
+ "name": "FunctionCall",
+ "src": "3553:18:0"
+ }
+ ],
+ "id": 837,
+ "name": "ExpressionStatement",
+ "src": "3553:18:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (address) constant",
+ "value": "OwnerAddition"
+ },
+ "id": 838,
+ "name": "Identifier",
+ "src": "3581:13:0"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "owner"
+ },
+ "id": 839,
+ "name": "Identifier",
+ "src": "3595:5:0"
+ }
+ ],
+ "id": 840,
+ "name": "FunctionCall",
+ "src": "3581:20:0"
+ }
+ ],
+ "id": 841,
+ "name": "ExpressionStatement",
+ "src": "3581:20:0"
+ }
+ ],
+ "id": 842,
+ "name": "Block",
+ "src": "3512:96:0"
+ }
+ ],
+ "id": 843,
+ "name": "FunctionDefinition",
+ "src": "3331:277:0"
+ },
+ {
+ "attributes": {
+ "constant": false,
+ "name": "removeOwner",
+ "payable": false,
+ "visibility": "public"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "owner",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 844,
+ "name": "ElementaryTypeName",
+ "src": "3752:7:0"
+ }
+ ],
+ "id": 845,
+ "name": "VariableDeclaration",
+ "src": "3752:13:0"
+ }
+ ],
+ "id": 846,
+ "name": "ParameterList",
+ "src": "3751:15:0"
+ },
+ {
+ "children": [],
+ "id": 852,
+ "name": "ParameterList",
+ "src": "3832:0:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier ()",
+ "value": "onlyWallet"
+ },
+ "id": 847,
+ "name": "Identifier",
+ "src": "3790:10:0"
+ }
+ ],
+ "id": 848,
+ "name": "ModifierInvocation",
+ "src": "3790:10:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (address)",
+ "value": "ownerExists"
+ },
+ "id": 849,
+ "name": "Identifier",
+ "src": "3809:11:0"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "owner"
+ },
+ "id": 850,
+ "name": "Identifier",
+ "src": "3821:5:0"
+ }
+ ],
+ "id": 851,
+ "name": "ModifierInvocation",
+ "src": "3809:18:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(address => bool)",
+ "value": "isOwner"
+ },
+ "id": 853,
+ "name": "Identifier",
+ "src": "3842:7:0"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "owner"
+ },
+ "id": 854,
+ "name": "Identifier",
+ "src": "3850:5:0"
+ }
+ ],
+ "id": 855,
+ "name": "IndexAccess",
+ "src": "3842:14:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "66616c7365",
+ "subdenomination": null,
+ "token": "false",
+ "type": "bool",
+ "value": "false"
+ },
+ "id": 856,
+ "name": "Literal",
+ "src": "3859:5:0"
+ }
+ ],
+ "id": 857,
+ "name": "Assignment",
+ "src": "3842:22:0"
+ }
+ ],
+ "id": 858,
+ "name": "ExpressionStatement",
+ "src": "3842:22:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "i",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 859,
+ "name": "ElementaryTypeName",
+ "src": "3879:4:0"
+ }
+ ],
+ "id": 860,
+ "name": "VariableDeclaration",
+ "src": "3879:6:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "30",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 0",
+ "value": "0"
+ },
+ "id": 861,
+ "name": "Literal",
+ "src": "3886:1:0"
+ }
+ ],
+ "id": 862,
+ "name": "VariableDeclarationStatement",
+ "src": "3879:8:0"
+ },
+ {
+ "attributes": {
+ "operator": "<",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 863,
+ "name": "Identifier",
+ "src": "3889:1:0"
+ },
+ {
+ "attributes": {
+ "operator": "-",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "member_name": "length",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] storage ref",
+ "value": "owners"
+ },
+ "id": 864,
+ "name": "Identifier",
+ "src": "3891:6:0"
+ }
+ ],
+ "id": 865,
+ "name": "MemberAccess",
+ "src": "3891:13:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "31",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 1",
+ "value": "1"
+ },
+ "id": 866,
+ "name": "Literal",
+ "src": "3907:1:0"
+ }
+ ],
+ "id": 867,
+ "name": "BinaryOperation",
+ "src": "3891:17:0"
+ }
+ ],
+ "id": 868,
+ "name": "BinaryOperation",
+ "src": "3889:19:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "++",
+ "prefix": false,
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 869,
+ "name": "Identifier",
+ "src": "3910:1:0"
+ }
+ ],
+ "id": 870,
+ "name": "UnaryOperation",
+ "src": "3910:3:0"
+ }
+ ],
+ "id": 871,
+ "name": "ExpressionStatement",
+ "src": "3910:3:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "==",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] storage ref",
+ "value": "owners"
+ },
+ "id": 872,
+ "name": "Identifier",
+ "src": "3931:6:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 873,
+ "name": "Identifier",
+ "src": "3938:1:0"
+ }
+ ],
+ "id": 874,
+ "name": "IndexAccess",
+ "src": "3931:9:0"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "owner"
+ },
+ "id": 875,
+ "name": "Identifier",
+ "src": "3944:5:0"
+ }
+ ],
+ "id": 876,
+ "name": "BinaryOperation",
+ "src": "3931:18:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] storage ref",
+ "value": "owners"
+ },
+ "id": 877,
+ "name": "Identifier",
+ "src": "3969:6:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 878,
+ "name": "Identifier",
+ "src": "3976:1:0"
+ }
+ ],
+ "id": 879,
+ "name": "IndexAccess",
+ "src": "3969:9:0"
+ },
+ {
+ "attributes": {
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] storage ref",
+ "value": "owners"
+ },
+ "id": 880,
+ "name": "Identifier",
+ "src": "3981:6:0"
+ },
+ {
+ "attributes": {
+ "operator": "-",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "member_name": "length",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] storage ref",
+ "value": "owners"
+ },
+ "id": 881,
+ "name": "Identifier",
+ "src": "3988:6:0"
+ }
+ ],
+ "id": 882,
+ "name": "MemberAccess",
+ "src": "3988:13:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "31",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 1",
+ "value": "1"
+ },
+ "id": 883,
+ "name": "Literal",
+ "src": "4004:1:0"
+ }
+ ],
+ "id": 884,
+ "name": "BinaryOperation",
+ "src": "3988:17:0"
+ }
+ ],
+ "id": 885,
+ "name": "IndexAccess",
+ "src": "3981:25:0"
+ }
+ ],
+ "id": 886,
+ "name": "Assignment",
+ "src": "3969:37:0"
+ }
+ ],
+ "id": 887,
+ "name": "ExpressionStatement",
+ "src": "3969:37:0"
+ },
+ {
+ "id": 888,
+ "name": "Break",
+ "src": "4024:5:0"
+ }
+ ],
+ "id": 889,
+ "name": "Block",
+ "src": "3951:93:0"
+ }
+ ],
+ "id": 890,
+ "name": "IfStatement",
+ "src": "3927:117:0"
+ }
+ ],
+ "id": 891,
+ "name": "ForStatement",
+ "src": "3874:170:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "-=",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "member_name": "length",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] storage ref",
+ "value": "owners"
+ },
+ "id": 892,
+ "name": "Identifier",
+ "src": "4053:6:0"
+ }
+ ],
+ "id": 894,
+ "name": "MemberAccess",
+ "src": "4053:13:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "31",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 1",
+ "value": "1"
+ },
+ "id": 895,
+ "name": "Literal",
+ "src": "4070:1:0"
+ }
+ ],
+ "id": 896,
+ "name": "Assignment",
+ "src": "4053:18:0"
+ }
+ ],
+ "id": 897,
+ "name": "ExpressionStatement",
+ "src": "4053:18:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": ">",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "required"
+ },
+ "id": 898,
+ "name": "Identifier",
+ "src": "4085:8:0"
+ },
+ {
+ "attributes": {
+ "member_name": "length",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] storage ref",
+ "value": "owners"
+ },
+ "id": 899,
+ "name": "Identifier",
+ "src": "4096:6:0"
+ }
+ ],
+ "id": 900,
+ "name": "MemberAccess",
+ "src": "4096:13:0"
+ }
+ ],
+ "id": 901,
+ "name": "BinaryOperation",
+ "src": "4085:24:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (uint256)",
+ "value": "changeRequirement"
+ },
+ "id": 902,
+ "name": "Identifier",
+ "src": "4123:17:0"
+ },
+ {
+ "attributes": {
+ "member_name": "length",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] storage ref",
+ "value": "owners"
+ },
+ "id": 903,
+ "name": "Identifier",
+ "src": "4141:6:0"
+ }
+ ],
+ "id": 904,
+ "name": "MemberAccess",
+ "src": "4141:13:0"
+ }
+ ],
+ "id": 905,
+ "name": "FunctionCall",
+ "src": "4123:32:0"
+ }
+ ],
+ "id": 906,
+ "name": "ExpressionStatement",
+ "src": "4123:32:0"
+ }
+ ],
+ "id": 907,
+ "name": "IfStatement",
+ "src": "4081:74:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (address) constant",
+ "value": "OwnerRemoval"
+ },
+ "id": 908,
+ "name": "Identifier",
+ "src": "4165:12:0"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "owner"
+ },
+ "id": 909,
+ "name": "Identifier",
+ "src": "4178:5:0"
+ }
+ ],
+ "id": 910,
+ "name": "FunctionCall",
+ "src": "4165:19:0"
+ }
+ ],
+ "id": 911,
+ "name": "ExpressionStatement",
+ "src": "4165:19:0"
+ }
+ ],
+ "id": 912,
+ "name": "Block",
+ "src": "3832:359:0"
+ }
+ ],
+ "id": 913,
+ "name": "FunctionDefinition",
+ "src": "3731:460:0"
+ },
+ {
+ "attributes": {
+ "constant": false,
+ "name": "replaceOwner",
+ "payable": false,
+ "visibility": "public"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "owner",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 914,
+ "name": "ElementaryTypeName",
+ "src": "4412:7:0"
+ }
+ ],
+ "id": 915,
+ "name": "VariableDeclaration",
+ "src": "4412:13:0"
+ },
+ {
+ "attributes": {
+ "name": "newOwner",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 916,
+ "name": "ElementaryTypeName",
+ "src": "4427:7:0"
+ }
+ ],
+ "id": 917,
+ "name": "VariableDeclaration",
+ "src": "4427:16:0"
+ }
+ ],
+ "id": 918,
+ "name": "ParameterList",
+ "src": "4411:33:0"
+ },
+ {
+ "children": [],
+ "id": 927,
+ "name": "ParameterList",
+ "src": "4546:0:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier ()",
+ "value": "onlyWallet"
+ },
+ "id": 919,
+ "name": "Identifier",
+ "src": "4468:10:0"
+ }
+ ],
+ "id": 920,
+ "name": "ModifierInvocation",
+ "src": "4468:10:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (address)",
+ "value": "ownerExists"
+ },
+ "id": 921,
+ "name": "Identifier",
+ "src": "4487:11:0"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "owner"
+ },
+ "id": 922,
+ "name": "Identifier",
+ "src": "4499:5:0"
+ }
+ ],
+ "id": 923,
+ "name": "ModifierInvocation",
+ "src": "4487:18:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (address)",
+ "value": "ownerDoesNotExist"
+ },
+ "id": 924,
+ "name": "Identifier",
+ "src": "4514:17:0"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "newOwner"
+ },
+ "id": 925,
+ "name": "Identifier",
+ "src": "4532:8:0"
+ }
+ ],
+ "id": 926,
+ "name": "ModifierInvocation",
+ "src": "4514:27:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "i",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 928,
+ "name": "ElementaryTypeName",
+ "src": "4561:4:0"
+ }
+ ],
+ "id": 929,
+ "name": "VariableDeclaration",
+ "src": "4561:6:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "30",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 0",
+ "value": "0"
+ },
+ "id": 930,
+ "name": "Literal",
+ "src": "4568:1:0"
+ }
+ ],
+ "id": 931,
+ "name": "VariableDeclarationStatement",
+ "src": "4561:8:0"
+ },
+ {
+ "attributes": {
+ "operator": "<",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 932,
+ "name": "Identifier",
+ "src": "4571:1:0"
+ },
+ {
+ "attributes": {
+ "member_name": "length",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] storage ref",
+ "value": "owners"
+ },
+ "id": 933,
+ "name": "Identifier",
+ "src": "4573:6:0"
+ }
+ ],
+ "id": 934,
+ "name": "MemberAccess",
+ "src": "4573:13:0"
+ }
+ ],
+ "id": 935,
+ "name": "BinaryOperation",
+ "src": "4571:15:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "++",
+ "prefix": false,
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 936,
+ "name": "Identifier",
+ "src": "4588:1:0"
+ }
+ ],
+ "id": 937,
+ "name": "UnaryOperation",
+ "src": "4588:3:0"
+ }
+ ],
+ "id": 938,
+ "name": "ExpressionStatement",
+ "src": "4588:3:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "==",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] storage ref",
+ "value": "owners"
+ },
+ "id": 939,
+ "name": "Identifier",
+ "src": "4609:6:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 940,
+ "name": "Identifier",
+ "src": "4616:1:0"
+ }
+ ],
+ "id": 941,
+ "name": "IndexAccess",
+ "src": "4609:9:0"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "owner"
+ },
+ "id": 942,
+ "name": "Identifier",
+ "src": "4622:5:0"
+ }
+ ],
+ "id": 943,
+ "name": "BinaryOperation",
+ "src": "4609:18:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] storage ref",
+ "value": "owners"
+ },
+ "id": 944,
+ "name": "Identifier",
+ "src": "4647:6:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 945,
+ "name": "Identifier",
+ "src": "4654:1:0"
+ }
+ ],
+ "id": 946,
+ "name": "IndexAccess",
+ "src": "4647:9:0"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "newOwner"
+ },
+ "id": 947,
+ "name": "Identifier",
+ "src": "4659:8:0"
+ }
+ ],
+ "id": 948,
+ "name": "Assignment",
+ "src": "4647:20:0"
+ }
+ ],
+ "id": 949,
+ "name": "ExpressionStatement",
+ "src": "4647:20:0"
+ },
+ {
+ "id": 950,
+ "name": "Break",
+ "src": "4685:5:0"
+ }
+ ],
+ "id": 951,
+ "name": "Block",
+ "src": "4629:76:0"
+ }
+ ],
+ "id": 952,
+ "name": "IfStatement",
+ "src": "4605:100:0"
+ }
+ ],
+ "id": 953,
+ "name": "ForStatement",
+ "src": "4556:149:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(address => bool)",
+ "value": "isOwner"
+ },
+ "id": 954,
+ "name": "Identifier",
+ "src": "4714:7:0"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "owner"
+ },
+ "id": 955,
+ "name": "Identifier",
+ "src": "4722:5:0"
+ }
+ ],
+ "id": 956,
+ "name": "IndexAccess",
+ "src": "4714:14:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "66616c7365",
+ "subdenomination": null,
+ "token": "false",
+ "type": "bool",
+ "value": "false"
+ },
+ "id": 957,
+ "name": "Literal",
+ "src": "4731:5:0"
+ }
+ ],
+ "id": 958,
+ "name": "Assignment",
+ "src": "4714:22:0"
+ }
+ ],
+ "id": 959,
+ "name": "ExpressionStatement",
+ "src": "4714:22:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(address => bool)",
+ "value": "isOwner"
+ },
+ "id": 960,
+ "name": "Identifier",
+ "src": "4746:7:0"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "newOwner"
+ },
+ "id": 961,
+ "name": "Identifier",
+ "src": "4754:8:0"
+ }
+ ],
+ "id": 962,
+ "name": "IndexAccess",
+ "src": "4746:17:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "74727565",
+ "subdenomination": null,
+ "token": "true",
+ "type": "bool",
+ "value": "true"
+ },
+ "id": 963,
+ "name": "Literal",
+ "src": "4766:4:0"
+ }
+ ],
+ "id": 964,
+ "name": "Assignment",
+ "src": "4746:24:0"
+ }
+ ],
+ "id": 965,
+ "name": "ExpressionStatement",
+ "src": "4746:24:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (address) constant",
+ "value": "OwnerRemoval"
+ },
+ "id": 966,
+ "name": "Identifier",
+ "src": "4780:12:0"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "owner"
+ },
+ "id": 967,
+ "name": "Identifier",
+ "src": "4793:5:0"
+ }
+ ],
+ "id": 968,
+ "name": "FunctionCall",
+ "src": "4780:19:0"
+ }
+ ],
+ "id": 969,
+ "name": "ExpressionStatement",
+ "src": "4780:19:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (address) constant",
+ "value": "OwnerAddition"
+ },
+ "id": 970,
+ "name": "Identifier",
+ "src": "4809:13:0"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "newOwner"
+ },
+ "id": 971,
+ "name": "Identifier",
+ "src": "4823:8:0"
+ }
+ ],
+ "id": 972,
+ "name": "FunctionCall",
+ "src": "4809:23:0"
+ }
+ ],
+ "id": 973,
+ "name": "ExpressionStatement",
+ "src": "4809:23:0"
+ }
+ ],
+ "id": 974,
+ "name": "Block",
+ "src": "4546:293:0"
+ }
+ ],
+ "id": 975,
+ "name": "FunctionDefinition",
+ "src": "4390:449:0"
+ },
+ {
+ "attributes": {
+ "constant": false,
+ "name": "changeRequirement",
+ "payable": false,
+ "visibility": "public"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "_required",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 976,
+ "name": "ElementaryTypeName",
+ "src": "5037:4:0"
+ }
+ ],
+ "id": 977,
+ "name": "VariableDeclaration",
+ "src": "5037:14:0"
+ }
+ ],
+ "id": 978,
+ "name": "ParameterList",
+ "src": "5036:16:0"
+ },
+ {
+ "children": [],
+ "id": 986,
+ "name": "ParameterList",
+ "src": "5142:0:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier ()",
+ "value": "onlyWallet"
+ },
+ "id": 979,
+ "name": "Identifier",
+ "src": "5076:10:0"
+ }
+ ],
+ "id": 980,
+ "name": "ModifierInvocation",
+ "src": "5076:10:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (uint256,uint256)",
+ "value": "validRequirement"
+ },
+ "id": 981,
+ "name": "Identifier",
+ "src": "5095:16:0"
+ },
+ {
+ "attributes": {
+ "member_name": "length",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] storage ref",
+ "value": "owners"
+ },
+ "id": 982,
+ "name": "Identifier",
+ "src": "5112:6:0"
+ }
+ ],
+ "id": 983,
+ "name": "MemberAccess",
+ "src": "5112:13:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "_required"
+ },
+ "id": 984,
+ "name": "Identifier",
+ "src": "5127:9:0"
+ }
+ ],
+ "id": 985,
+ "name": "ModifierInvocation",
+ "src": "5095:42:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "required"
+ },
+ "id": 987,
+ "name": "Identifier",
+ "src": "5152:8:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "_required"
+ },
+ "id": 988,
+ "name": "Identifier",
+ "src": "5163:9:0"
+ }
+ ],
+ "id": 989,
+ "name": "Assignment",
+ "src": "5152:20:0"
+ }
+ ],
+ "id": 990,
+ "name": "ExpressionStatement",
+ "src": "5152:20:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (uint256) constant",
+ "value": "RequirementChange"
+ },
+ "id": 991,
+ "name": "Identifier",
+ "src": "5182:17:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "_required"
+ },
+ "id": 992,
+ "name": "Identifier",
+ "src": "5200:9:0"
+ }
+ ],
+ "id": 993,
+ "name": "FunctionCall",
+ "src": "5182:28:0"
+ }
+ ],
+ "id": 994,
+ "name": "ExpressionStatement",
+ "src": "5182:28:0"
+ }
+ ],
+ "id": 995,
+ "name": "Block",
+ "src": "5142:75:0"
+ }
+ ],
+ "id": 996,
+ "name": "FunctionDefinition",
+ "src": "5010:207:0"
+ },
+ {
+ "attributes": {
+ "constant": false,
+ "name": "submitTransaction",
+ "payable": false,
+ "visibility": "public"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "destination",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 997,
+ "name": "ElementaryTypeName",
+ "src": "5503:7:0"
+ }
+ ],
+ "id": 998,
+ "name": "VariableDeclaration",
+ "src": "5503:19:0"
+ },
+ {
+ "attributes": {
+ "name": "value",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 999,
+ "name": "ElementaryTypeName",
+ "src": "5524:4:0"
+ }
+ ],
+ "id": 1000,
+ "name": "VariableDeclaration",
+ "src": "5524:10:0"
+ },
+ {
+ "attributes": {
+ "name": "data",
+ "type": "bytes memory"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "bytes"
+ },
+ "id": 1001,
+ "name": "ElementaryTypeName",
+ "src": "5536:5:0"
+ }
+ ],
+ "id": 1002,
+ "name": "VariableDeclaration",
+ "src": "5536:10:0"
+ }
+ ],
+ "id": 1003,
+ "name": "ParameterList",
+ "src": "5502:45:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "transactionId",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 1004,
+ "name": "ElementaryTypeName",
+ "src": "5580:4:0"
+ }
+ ],
+ "id": 1005,
+ "name": "VariableDeclaration",
+ "src": "5580:18:0"
+ }
+ ],
+ "id": 1006,
+ "name": "ParameterList",
+ "src": "5579:20:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 1007,
+ "name": "Identifier",
+ "src": "5614:13:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (address,uint256,bytes memory) returns (uint256)",
+ "value": "addTransaction"
+ },
+ "id": 1008,
+ "name": "Identifier",
+ "src": "5630:14:0"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "destination"
+ },
+ "id": 1009,
+ "name": "Identifier",
+ "src": "5645:11:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "value"
+ },
+ "id": 1010,
+ "name": "Identifier",
+ "src": "5658:5:0"
+ },
+ {
+ "attributes": {
+ "type": "bytes memory",
+ "value": "data"
+ },
+ "id": 1011,
+ "name": "Identifier",
+ "src": "5665:4:0"
+ }
+ ],
+ "id": 1012,
+ "name": "FunctionCall",
+ "src": "5630:40:0"
+ }
+ ],
+ "id": 1013,
+ "name": "Assignment",
+ "src": "5614:56:0"
+ }
+ ],
+ "id": 1014,
+ "name": "ExpressionStatement",
+ "src": "5614:56:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (uint256)",
+ "value": "confirmTransaction"
+ },
+ "id": 1015,
+ "name": "Identifier",
+ "src": "5680:18:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 1016,
+ "name": "Identifier",
+ "src": "5699:13:0"
+ }
+ ],
+ "id": 1017,
+ "name": "FunctionCall",
+ "src": "5680:33:0"
+ }
+ ],
+ "id": 1018,
+ "name": "ExpressionStatement",
+ "src": "5680:33:0"
+ }
+ ],
+ "id": 1019,
+ "name": "Block",
+ "src": "5604:116:0"
+ }
+ ],
+ "id": 1020,
+ "name": "FunctionDefinition",
+ "src": "5476:244:0"
+ },
+ {
+ "attributes": {
+ "constant": false,
+ "name": "confirmTransaction",
+ "payable": false,
+ "visibility": "public"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "transactionId",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 1021,
+ "name": "ElementaryTypeName",
+ "src": "5854:4:0"
+ }
+ ],
+ "id": 1022,
+ "name": "VariableDeclaration",
+ "src": "5854:18:0"
+ }
+ ],
+ "id": 1023,
+ "name": "ParameterList",
+ "src": "5853:20:0"
+ },
+ {
+ "children": [],
+ "id": 1036,
+ "name": "ParameterList",
+ "src": "6014:0:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (address)",
+ "value": "ownerExists"
+ },
+ "id": 1024,
+ "name": "Identifier",
+ "src": "5897:11:0"
+ },
+ {
+ "attributes": {
+ "member_name": "sender",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "msg",
+ "value": "msg"
+ },
+ "id": 1025,
+ "name": "Identifier",
+ "src": "5909:3:0"
+ }
+ ],
+ "id": 1026,
+ "name": "MemberAccess",
+ "src": "5909:10:0"
+ }
+ ],
+ "id": 1027,
+ "name": "ModifierInvocation",
+ "src": "5897:23:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (uint256)",
+ "value": "transactionExists"
+ },
+ "id": 1028,
+ "name": "Identifier",
+ "src": "5929:17:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 1029,
+ "name": "Identifier",
+ "src": "5947:13:0"
+ }
+ ],
+ "id": 1030,
+ "name": "ModifierInvocation",
+ "src": "5929:32:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (uint256,address)",
+ "value": "notConfirmed"
+ },
+ "id": 1031,
+ "name": "Identifier",
+ "src": "5970:12:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 1032,
+ "name": "Identifier",
+ "src": "5983:13:0"
+ },
+ {
+ "attributes": {
+ "member_name": "sender",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "msg",
+ "value": "msg"
+ },
+ "id": 1033,
+ "name": "Identifier",
+ "src": "5998:3:0"
+ }
+ ],
+ "id": 1034,
+ "name": "MemberAccess",
+ "src": "5998:10:0"
+ }
+ ],
+ "id": 1035,
+ "name": "ModifierInvocation",
+ "src": "5970:39:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(address => bool)"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(uint256 => mapping(address => bool))",
+ "value": "confirmations"
+ },
+ "id": 1037,
+ "name": "Identifier",
+ "src": "6024:13:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 1038,
+ "name": "Identifier",
+ "src": "6038:13:0"
+ }
+ ],
+ "id": 1041,
+ "name": "IndexAccess",
+ "src": "6024:28:0"
+ },
+ {
+ "attributes": {
+ "member_name": "sender",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "msg",
+ "value": "msg"
+ },
+ "id": 1039,
+ "name": "Identifier",
+ "src": "6053:3:0"
+ }
+ ],
+ "id": 1040,
+ "name": "MemberAccess",
+ "src": "6053:10:0"
+ }
+ ],
+ "id": 1042,
+ "name": "IndexAccess",
+ "src": "6024:40:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "74727565",
+ "subdenomination": null,
+ "token": "true",
+ "type": "bool",
+ "value": "true"
+ },
+ "id": 1043,
+ "name": "Literal",
+ "src": "6067:4:0"
+ }
+ ],
+ "id": 1044,
+ "name": "Assignment",
+ "src": "6024:47:0"
+ }
+ ],
+ "id": 1045,
+ "name": "ExpressionStatement",
+ "src": "6024:47:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (address,uint256) constant",
+ "value": "Confirmation"
+ },
+ "id": 1046,
+ "name": "Identifier",
+ "src": "6081:12:0"
+ },
+ {
+ "attributes": {
+ "member_name": "sender",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "msg",
+ "value": "msg"
+ },
+ "id": 1047,
+ "name": "Identifier",
+ "src": "6094:3:0"
+ }
+ ],
+ "id": 1048,
+ "name": "MemberAccess",
+ "src": "6094:10:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 1049,
+ "name": "Identifier",
+ "src": "6106:13:0"
+ }
+ ],
+ "id": 1050,
+ "name": "FunctionCall",
+ "src": "6081:39:0"
+ }
+ ],
+ "id": 1051,
+ "name": "ExpressionStatement",
+ "src": "6081:39:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (uint256)",
+ "value": "executeTransaction"
+ },
+ "id": 1052,
+ "name": "Identifier",
+ "src": "6130:18:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 1053,
+ "name": "Identifier",
+ "src": "6149:13:0"
+ }
+ ],
+ "id": 1054,
+ "name": "FunctionCall",
+ "src": "6130:33:0"
+ }
+ ],
+ "id": 1055,
+ "name": "ExpressionStatement",
+ "src": "6130:33:0"
+ }
+ ],
+ "id": 1056,
+ "name": "Block",
+ "src": "6014:156:0"
+ }
+ ],
+ "id": 1057,
+ "name": "FunctionDefinition",
+ "src": "5826:344:0"
+ },
+ {
+ "attributes": {
+ "constant": false,
+ "name": "revokeConfirmation",
+ "payable": false,
+ "visibility": "public"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "transactionId",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 1058,
+ "name": "ElementaryTypeName",
+ "src": "6322:4:0"
+ }
+ ],
+ "id": 1059,
+ "name": "VariableDeclaration",
+ "src": "6322:18:0"
+ }
+ ],
+ "id": 1060,
+ "name": "ParameterList",
+ "src": "6321:20:0"
+ },
+ {
+ "children": [],
+ "id": 1073,
+ "name": "ParameterList",
+ "src": "6473:0:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (address)",
+ "value": "ownerExists"
+ },
+ "id": 1061,
+ "name": "Identifier",
+ "src": "6365:11:0"
+ },
+ {
+ "attributes": {
+ "member_name": "sender",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "msg",
+ "value": "msg"
+ },
+ "id": 1062,
+ "name": "Identifier",
+ "src": "6377:3:0"
+ }
+ ],
+ "id": 1063,
+ "name": "MemberAccess",
+ "src": "6377:10:0"
+ }
+ ],
+ "id": 1064,
+ "name": "ModifierInvocation",
+ "src": "6365:23:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (uint256,address)",
+ "value": "confirmed"
+ },
+ "id": 1065,
+ "name": "Identifier",
+ "src": "6397:9:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 1066,
+ "name": "Identifier",
+ "src": "6407:13:0"
+ },
+ {
+ "attributes": {
+ "member_name": "sender",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "msg",
+ "value": "msg"
+ },
+ "id": 1067,
+ "name": "Identifier",
+ "src": "6422:3:0"
+ }
+ ],
+ "id": 1068,
+ "name": "MemberAccess",
+ "src": "6422:10:0"
+ }
+ ],
+ "id": 1069,
+ "name": "ModifierInvocation",
+ "src": "6397:36:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (uint256)",
+ "value": "notExecuted"
+ },
+ "id": 1070,
+ "name": "Identifier",
+ "src": "6442:11:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 1071,
+ "name": "Identifier",
+ "src": "6454:13:0"
+ }
+ ],
+ "id": 1072,
+ "name": "ModifierInvocation",
+ "src": "6442:26:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(address => bool)"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(uint256 => mapping(address => bool))",
+ "value": "confirmations"
+ },
+ "id": 1074,
+ "name": "Identifier",
+ "src": "6483:13:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 1075,
+ "name": "Identifier",
+ "src": "6497:13:0"
+ }
+ ],
+ "id": 1078,
+ "name": "IndexAccess",
+ "src": "6483:28:0"
+ },
+ {
+ "attributes": {
+ "member_name": "sender",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "msg",
+ "value": "msg"
+ },
+ "id": 1076,
+ "name": "Identifier",
+ "src": "6512:3:0"
+ }
+ ],
+ "id": 1077,
+ "name": "MemberAccess",
+ "src": "6512:10:0"
+ }
+ ],
+ "id": 1079,
+ "name": "IndexAccess",
+ "src": "6483:40:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "66616c7365",
+ "subdenomination": null,
+ "token": "false",
+ "type": "bool",
+ "value": "false"
+ },
+ "id": 1080,
+ "name": "Literal",
+ "src": "6526:5:0"
+ }
+ ],
+ "id": 1081,
+ "name": "Assignment",
+ "src": "6483:48:0"
+ }
+ ],
+ "id": 1082,
+ "name": "ExpressionStatement",
+ "src": "6483:48:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (address,uint256) constant",
+ "value": "Revocation"
+ },
+ "id": 1083,
+ "name": "Identifier",
+ "src": "6541:10:0"
+ },
+ {
+ "attributes": {
+ "member_name": "sender",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "msg",
+ "value": "msg"
+ },
+ "id": 1084,
+ "name": "Identifier",
+ "src": "6552:3:0"
+ }
+ ],
+ "id": 1085,
+ "name": "MemberAccess",
+ "src": "6552:10:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 1086,
+ "name": "Identifier",
+ "src": "6564:13:0"
+ }
+ ],
+ "id": 1087,
+ "name": "FunctionCall",
+ "src": "6541:37:0"
+ }
+ ],
+ "id": 1088,
+ "name": "ExpressionStatement",
+ "src": "6541:37:0"
+ }
+ ],
+ "id": 1089,
+ "name": "Block",
+ "src": "6473:112:0"
+ }
+ ],
+ "id": 1090,
+ "name": "FunctionDefinition",
+ "src": "6294:291:0"
+ },
+ {
+ "attributes": {
+ "constant": false,
+ "name": "executeTransaction",
+ "payable": false,
+ "visibility": "public"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "transactionId",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 1091,
+ "name": "ElementaryTypeName",
+ "src": "6727:4:0"
+ }
+ ],
+ "id": 1092,
+ "name": "VariableDeclaration",
+ "src": "6727:18:0"
+ }
+ ],
+ "id": 1093,
+ "name": "ParameterList",
+ "src": "6726:20:0"
+ },
+ {
+ "children": [],
+ "id": 1097,
+ "name": "ParameterList",
+ "src": "6801:0:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (uint256)",
+ "value": "notExecuted"
+ },
+ "id": 1094,
+ "name": "Identifier",
+ "src": "6770:11:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 1095,
+ "name": "Identifier",
+ "src": "6782:13:0"
+ }
+ ],
+ "id": 1096,
+ "name": "ModifierInvocation",
+ "src": "6770:26:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "bool",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (uint256) constant returns (bool)",
+ "value": "isConfirmed"
+ },
+ "id": 1098,
+ "name": "Identifier",
+ "src": "6815:11:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 1099,
+ "name": "Identifier",
+ "src": "6827:13:0"
+ }
+ ],
+ "id": 1100,
+ "name": "FunctionCall",
+ "src": "6815:26:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "tx",
+ "type": "struct MultiSigWallet.Transaction storage pointer"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "Transaction"
+ },
+ "id": 1101,
+ "name": "UserDefinedTypeName",
+ "src": "6857:11:0"
+ }
+ ],
+ "id": 1102,
+ "name": "VariableDeclaration",
+ "src": "6857:14:0"
+ },
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage ref"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(uint256 => struct MultiSigWallet.Transaction storage ref)",
+ "value": "transactions"
+ },
+ "id": 1103,
+ "name": "Identifier",
+ "src": "6874:12:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 1104,
+ "name": "Identifier",
+ "src": "6887:13:0"
+ }
+ ],
+ "id": 1105,
+ "name": "IndexAccess",
+ "src": "6874:27:0"
+ }
+ ],
+ "id": 1106,
+ "name": "VariableDeclarationStatement",
+ "src": "6857:44:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "member_name": "executed",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage pointer",
+ "value": "tx"
+ },
+ "id": 1107,
+ "name": "Identifier",
+ "src": "6915:2:0"
+ }
+ ],
+ "id": 1109,
+ "name": "MemberAccess",
+ "src": "6915:11:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "74727565",
+ "subdenomination": null,
+ "token": "true",
+ "type": "bool",
+ "value": "true"
+ },
+ "id": 1110,
+ "name": "Literal",
+ "src": "6929:4:0"
+ }
+ ],
+ "id": 1111,
+ "name": "Assignment",
+ "src": "6915:18:0"
+ }
+ ],
+ "id": 1112,
+ "name": "ExpressionStatement",
+ "src": "6915:18:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "bool",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function () payable returns (bool)",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "member_name": "value",
+ "type": "function (uint256) returns (function () payable returns (bool))"
+ },
+ "children": [
+ {
+ "attributes": {
+ "member_name": "call",
+ "type": "function () payable returns (bool)"
+ },
+ "children": [
+ {
+ "attributes": {
+ "member_name": "destination",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage pointer",
+ "value": "tx"
+ },
+ "id": 1113,
+ "name": "Identifier",
+ "src": "6951:2:0"
+ }
+ ],
+ "id": 1114,
+ "name": "MemberAccess",
+ "src": "6951:14:0"
+ }
+ ],
+ "id": 1115,
+ "name": "MemberAccess",
+ "src": "6951:19:0"
+ }
+ ],
+ "id": 1116,
+ "name": "MemberAccess",
+ "src": "6951:25:0"
+ },
+ {
+ "attributes": {
+ "member_name": "value",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage pointer",
+ "value": "tx"
+ },
+ "id": 1117,
+ "name": "Identifier",
+ "src": "6977:2:0"
+ }
+ ],
+ "id": 1118,
+ "name": "MemberAccess",
+ "src": "6977:8:0"
+ }
+ ],
+ "id": 1119,
+ "name": "FunctionCall",
+ "src": "6951:35:0"
+ },
+ {
+ "attributes": {
+ "member_name": "data",
+ "type": "bytes storage ref"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage pointer",
+ "value": "tx"
+ },
+ "id": 1120,
+ "name": "Identifier",
+ "src": "6987:2:0"
+ }
+ ],
+ "id": 1121,
+ "name": "MemberAccess",
+ "src": "6987:7:0"
+ }
+ ],
+ "id": 1122,
+ "name": "FunctionCall",
+ "src": "6951:44:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (uint256) constant",
+ "value": "Execution"
+ },
+ "id": 1123,
+ "name": "Identifier",
+ "src": "7013:9:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 1124,
+ "name": "Identifier",
+ "src": "7023:13:0"
+ }
+ ],
+ "id": 1125,
+ "name": "FunctionCall",
+ "src": "7013:24:0"
+ }
+ ],
+ "id": 1126,
+ "name": "ExpressionStatement",
+ "src": "7013:24:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (uint256) constant",
+ "value": "ExecutionFailure"
+ },
+ "id": 1127,
+ "name": "Identifier",
+ "src": "7074:16:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 1128,
+ "name": "Identifier",
+ "src": "7091:13:0"
+ }
+ ],
+ "id": 1129,
+ "name": "FunctionCall",
+ "src": "7074:31:0"
+ }
+ ],
+ "id": 1130,
+ "name": "ExpressionStatement",
+ "src": "7074:31:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "member_name": "executed",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage pointer",
+ "value": "tx"
+ },
+ "id": 1131,
+ "name": "Identifier",
+ "src": "7123:2:0"
+ }
+ ],
+ "id": 1133,
+ "name": "MemberAccess",
+ "src": "7123:11:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "66616c7365",
+ "subdenomination": null,
+ "token": "false",
+ "type": "bool",
+ "value": "false"
+ },
+ "id": 1134,
+ "name": "Literal",
+ "src": "7137:5:0"
+ }
+ ],
+ "id": 1135,
+ "name": "Assignment",
+ "src": "7123:19:0"
+ }
+ ],
+ "id": 1136,
+ "name": "ExpressionStatement",
+ "src": "7123:19:0"
+ }
+ ],
+ "id": 1137,
+ "name": "Block",
+ "src": "7056:101:0"
+ }
+ ],
+ "id": 1138,
+ "name": "IfStatement",
+ "src": "6947:210:0"
+ }
+ ],
+ "id": 1139,
+ "name": "Block",
+ "src": "6843:324:0"
+ }
+ ],
+ "id": 1140,
+ "name": "IfStatement",
+ "src": "6811:356:0"
+ }
+ ],
+ "id": 1141,
+ "name": "Block",
+ "src": "6801:372:0"
+ }
+ ],
+ "id": 1142,
+ "name": "FunctionDefinition",
+ "src": "6699:474:0"
+ },
+ {
+ "attributes": {
+ "constant": true,
+ "name": "isConfirmed",
+ "payable": false,
+ "visibility": "public"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "transactionId",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 1143,
+ "name": "ElementaryTypeName",
+ "src": "7345:4:0"
+ }
+ ],
+ "id": 1144,
+ "name": "VariableDeclaration",
+ "src": "7345:18:0"
+ }
+ ],
+ "id": 1145,
+ "name": "ParameterList",
+ "src": "7344:20:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "bool"
+ },
+ "id": 1146,
+ "name": "ElementaryTypeName",
+ "src": "7414:4:0"
+ }
+ ],
+ "id": 1147,
+ "name": "VariableDeclaration",
+ "src": "7414:4:0"
+ }
+ ],
+ "id": 1148,
+ "name": "ParameterList",
+ "src": "7413:6:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "count",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 1149,
+ "name": "ElementaryTypeName",
+ "src": "7434:4:0"
+ }
+ ],
+ "id": 1150,
+ "name": "VariableDeclaration",
+ "src": "7434:10:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "30",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 0",
+ "value": "0"
+ },
+ "id": 1151,
+ "name": "Literal",
+ "src": "7447:1:0"
+ }
+ ],
+ "id": 1152,
+ "name": "VariableDeclarationStatement",
+ "src": "7434:14:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "i",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 1153,
+ "name": "ElementaryTypeName",
+ "src": "7463:4:0"
+ }
+ ],
+ "id": 1154,
+ "name": "VariableDeclaration",
+ "src": "7463:6:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "30",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 0",
+ "value": "0"
+ },
+ "id": 1155,
+ "name": "Literal",
+ "src": "7470:1:0"
+ }
+ ],
+ "id": 1156,
+ "name": "VariableDeclarationStatement",
+ "src": "7463:8:0"
+ },
+ {
+ "attributes": {
+ "operator": "<",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1157,
+ "name": "Identifier",
+ "src": "7473:1:0"
+ },
+ {
+ "attributes": {
+ "member_name": "length",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] storage ref",
+ "value": "owners"
+ },
+ "id": 1158,
+ "name": "Identifier",
+ "src": "7475:6:0"
+ }
+ ],
+ "id": 1159,
+ "name": "MemberAccess",
+ "src": "7475:13:0"
+ }
+ ],
+ "id": 1160,
+ "name": "BinaryOperation",
+ "src": "7473:15:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "++",
+ "prefix": false,
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1161,
+ "name": "Identifier",
+ "src": "7490:1:0"
+ }
+ ],
+ "id": 1162,
+ "name": "UnaryOperation",
+ "src": "7490:3:0"
+ }
+ ],
+ "id": 1163,
+ "name": "ExpressionStatement",
+ "src": "7490:3:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(address => bool)"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(uint256 => mapping(address => bool))",
+ "value": "confirmations"
+ },
+ "id": 1164,
+ "name": "Identifier",
+ "src": "7513:13:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 1165,
+ "name": "Identifier",
+ "src": "7527:13:0"
+ }
+ ],
+ "id": 1166,
+ "name": "IndexAccess",
+ "src": "7513:28:0"
+ },
+ {
+ "attributes": {
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] storage ref",
+ "value": "owners"
+ },
+ "id": 1167,
+ "name": "Identifier",
+ "src": "7542:6:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1168,
+ "name": "Identifier",
+ "src": "7549:1:0"
+ }
+ ],
+ "id": 1169,
+ "name": "IndexAccess",
+ "src": "7542:9:0"
+ }
+ ],
+ "id": 1170,
+ "name": "IndexAccess",
+ "src": "7513:39:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "+=",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "count"
+ },
+ "id": 1171,
+ "name": "Identifier",
+ "src": "7570:5:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "31",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 1",
+ "value": "1"
+ },
+ "id": 1172,
+ "name": "Literal",
+ "src": "7579:1:0"
+ }
+ ],
+ "id": 1173,
+ "name": "Assignment",
+ "src": "7570:10:0"
+ }
+ ],
+ "id": 1174,
+ "name": "ExpressionStatement",
+ "src": "7570:10:0"
+ }
+ ],
+ "id": 1175,
+ "name": "IfStatement",
+ "src": "7509:71:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "==",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "count"
+ },
+ "id": 1176,
+ "name": "Identifier",
+ "src": "7598:5:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "required"
+ },
+ "id": 1177,
+ "name": "Identifier",
+ "src": "7607:8:0"
+ }
+ ],
+ "id": 1178,
+ "name": "BinaryOperation",
+ "src": "7598:17:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "hexvalue": "74727565",
+ "subdenomination": null,
+ "token": "true",
+ "type": "bool",
+ "value": "true"
+ },
+ "id": 1179,
+ "name": "Literal",
+ "src": "7640:4:0"
+ }
+ ],
+ "id": 1180,
+ "name": "Return",
+ "src": "7633:11:0"
+ }
+ ],
+ "id": 1181,
+ "name": "IfStatement",
+ "src": "7594:50:0"
+ }
+ ],
+ "id": 1182,
+ "name": "Block",
+ "src": "7495:160:0"
+ }
+ ],
+ "id": 1183,
+ "name": "ForStatement",
+ "src": "7458:197:0"
+ }
+ ],
+ "id": 1184,
+ "name": "Block",
+ "src": "7424:237:0"
+ }
+ ],
+ "id": 1185,
+ "name": "FunctionDefinition",
+ "src": "7324:337:0"
+ },
+ {
+ "attributes": {
+ "constant": false,
+ "name": "addTransaction",
+ "payable": false,
+ "visibility": "internal"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "destination",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 1186,
+ "name": "ElementaryTypeName",
+ "src": "8018:7:0"
+ }
+ ],
+ "id": 1187,
+ "name": "VariableDeclaration",
+ "src": "8018:19:0"
+ },
+ {
+ "attributes": {
+ "name": "value",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 1188,
+ "name": "ElementaryTypeName",
+ "src": "8039:4:0"
+ }
+ ],
+ "id": 1189,
+ "name": "VariableDeclaration",
+ "src": "8039:10:0"
+ },
+ {
+ "attributes": {
+ "name": "data",
+ "type": "bytes memory"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "bytes"
+ },
+ "id": 1190,
+ "name": "ElementaryTypeName",
+ "src": "8051:5:0"
+ }
+ ],
+ "id": 1191,
+ "name": "VariableDeclaration",
+ "src": "8051:10:0"
+ }
+ ],
+ "id": 1192,
+ "name": "ParameterList",
+ "src": "8017:45:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "transactionId",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 1196,
+ "name": "ElementaryTypeName",
+ "src": "8126:4:0"
+ }
+ ],
+ "id": 1197,
+ "name": "VariableDeclaration",
+ "src": "8126:18:0"
+ }
+ ],
+ "id": 1198,
+ "name": "ParameterList",
+ "src": "8125:20:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (address)",
+ "value": "notNull"
+ },
+ "id": 1193,
+ "name": "Identifier",
+ "src": "8088:7:0"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "destination"
+ },
+ "id": 1194,
+ "name": "Identifier",
+ "src": "8096:11:0"
+ }
+ ],
+ "id": 1195,
+ "name": "ModifierInvocation",
+ "src": "8088:20:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 1199,
+ "name": "Identifier",
+ "src": "8160:13:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionCount"
+ },
+ "id": 1200,
+ "name": "Identifier",
+ "src": "8176:16:0"
+ }
+ ],
+ "id": 1201,
+ "name": "Assignment",
+ "src": "8160:32:0"
+ }
+ ],
+ "id": 1202,
+ "name": "ExpressionStatement",
+ "src": "8160:32:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "struct MultiSigWallet.Transaction storage ref"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage ref"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(uint256 => struct MultiSigWallet.Transaction storage ref)",
+ "value": "transactions"
+ },
+ "id": 1203,
+ "name": "Identifier",
+ "src": "8202:12:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 1204,
+ "name": "Identifier",
+ "src": "8215:13:0"
+ }
+ ],
+ "id": 1205,
+ "name": "IndexAccess",
+ "src": "8202:27:0"
+ },
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction memory",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "type(struct MultiSigWallet.Transaction storage pointer)",
+ "value": "Transaction"
+ },
+ "id": 1206,
+ "name": "Identifier",
+ "src": "8232:11:0"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "destination"
+ },
+ "id": 1207,
+ "name": "Identifier",
+ "src": "8271:11:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "value"
+ },
+ "id": 1208,
+ "name": "Identifier",
+ "src": "8303:5:0"
+ },
+ {
+ "attributes": {
+ "type": "bytes memory",
+ "value": "data"
+ },
+ "id": 1209,
+ "name": "Identifier",
+ "src": "8328:4:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "66616c7365",
+ "subdenomination": null,
+ "token": "false",
+ "type": "bool",
+ "value": "false"
+ },
+ "id": 1210,
+ "name": "Literal",
+ "src": "8356:5:0"
+ }
+ ],
+ "id": 1211,
+ "name": "FunctionCall",
+ "src": "8232:140:0"
+ }
+ ],
+ "id": 1212,
+ "name": "Assignment",
+ "src": "8202:170:0"
+ }
+ ],
+ "id": 1213,
+ "name": "ExpressionStatement",
+ "src": "8202:170:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "+=",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionCount"
+ },
+ "id": 1214,
+ "name": "Identifier",
+ "src": "8382:16:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "31",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 1",
+ "value": "1"
+ },
+ "id": 1215,
+ "name": "Literal",
+ "src": "8402:1:0"
+ }
+ ],
+ "id": 1216,
+ "name": "Assignment",
+ "src": "8382:21:0"
+ }
+ ],
+ "id": 1217,
+ "name": "ExpressionStatement",
+ "src": "8382:21:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (uint256) constant",
+ "value": "Submission"
+ },
+ "id": 1218,
+ "name": "Identifier",
+ "src": "8413:10:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 1219,
+ "name": "Identifier",
+ "src": "8424:13:0"
+ }
+ ],
+ "id": 1220,
+ "name": "FunctionCall",
+ "src": "8413:25:0"
+ }
+ ],
+ "id": 1221,
+ "name": "ExpressionStatement",
+ "src": "8413:25:0"
+ }
+ ],
+ "id": 1222,
+ "name": "Block",
+ "src": "8150:295:0"
+ }
+ ],
+ "id": 1223,
+ "name": "FunctionDefinition",
+ "src": "7994:451:0"
+ },
+ {
+ "attributes": {
+ "constant": true,
+ "name": "getConfirmationCount",
+ "payable": false,
+ "visibility": "public"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "transactionId",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 1224,
+ "name": "ElementaryTypeName",
+ "src": "8672:4:0"
+ }
+ ],
+ "id": 1225,
+ "name": "VariableDeclaration",
+ "src": "8672:18:0"
+ }
+ ],
+ "id": 1226,
+ "name": "ParameterList",
+ "src": "8671:20:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "count",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 1227,
+ "name": "ElementaryTypeName",
+ "src": "8741:4:0"
+ }
+ ],
+ "id": 1228,
+ "name": "VariableDeclaration",
+ "src": "8741:10:0"
+ }
+ ],
+ "id": 1229,
+ "name": "ParameterList",
+ "src": "8740:12:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "i",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 1230,
+ "name": "ElementaryTypeName",
+ "src": "8772:4:0"
+ }
+ ],
+ "id": 1231,
+ "name": "VariableDeclaration",
+ "src": "8772:6:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "30",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 0",
+ "value": "0"
+ },
+ "id": 1232,
+ "name": "Literal",
+ "src": "8779:1:0"
+ }
+ ],
+ "id": 1233,
+ "name": "VariableDeclarationStatement",
+ "src": "8772:8:0"
+ },
+ {
+ "attributes": {
+ "operator": "<",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1234,
+ "name": "Identifier",
+ "src": "8782:1:0"
+ },
+ {
+ "attributes": {
+ "member_name": "length",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] storage ref",
+ "value": "owners"
+ },
+ "id": 1235,
+ "name": "Identifier",
+ "src": "8784:6:0"
+ }
+ ],
+ "id": 1236,
+ "name": "MemberAccess",
+ "src": "8784:13:0"
+ }
+ ],
+ "id": 1237,
+ "name": "BinaryOperation",
+ "src": "8782:15:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "++",
+ "prefix": false,
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1238,
+ "name": "Identifier",
+ "src": "8799:1:0"
+ }
+ ],
+ "id": 1239,
+ "name": "UnaryOperation",
+ "src": "8799:3:0"
+ }
+ ],
+ "id": 1240,
+ "name": "ExpressionStatement",
+ "src": "8799:3:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(address => bool)"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(uint256 => mapping(address => bool))",
+ "value": "confirmations"
+ },
+ "id": 1241,
+ "name": "Identifier",
+ "src": "8820:13:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 1242,
+ "name": "Identifier",
+ "src": "8834:13:0"
+ }
+ ],
+ "id": 1243,
+ "name": "IndexAccess",
+ "src": "8820:28:0"
+ },
+ {
+ "attributes": {
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] storage ref",
+ "value": "owners"
+ },
+ "id": 1244,
+ "name": "Identifier",
+ "src": "8849:6:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1245,
+ "name": "Identifier",
+ "src": "8856:1:0"
+ }
+ ],
+ "id": 1246,
+ "name": "IndexAccess",
+ "src": "8849:9:0"
+ }
+ ],
+ "id": 1247,
+ "name": "IndexAccess",
+ "src": "8820:39:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "+=",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "count"
+ },
+ "id": 1248,
+ "name": "Identifier",
+ "src": "8877:5:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "31",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 1",
+ "value": "1"
+ },
+ "id": 1249,
+ "name": "Literal",
+ "src": "8886:1:0"
+ }
+ ],
+ "id": 1250,
+ "name": "Assignment",
+ "src": "8877:10:0"
+ }
+ ],
+ "id": 1251,
+ "name": "ExpressionStatement",
+ "src": "8877:10:0"
+ }
+ ],
+ "id": 1252,
+ "name": "IfStatement",
+ "src": "8816:71:0"
+ }
+ ],
+ "id": 1253,
+ "name": "ForStatement",
+ "src": "8767:120:0"
+ }
+ ],
+ "id": 1254,
+ "name": "Block",
+ "src": "8757:137:0"
+ }
+ ],
+ "id": 1255,
+ "name": "FunctionDefinition",
+ "src": "8642:252:0"
+ },
+ {
+ "attributes": {
+ "constant": true,
+ "name": "getTransactionCount",
+ "payable": false,
+ "visibility": "public"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "pending",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "bool"
+ },
+ "id": 1256,
+ "name": "ElementaryTypeName",
+ "src": "9185:4:0"
+ }
+ ],
+ "id": 1257,
+ "name": "VariableDeclaration",
+ "src": "9185:12:0"
+ },
+ {
+ "attributes": {
+ "name": "executed",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "bool"
+ },
+ "id": 1258,
+ "name": "ElementaryTypeName",
+ "src": "9199:4:0"
+ }
+ ],
+ "id": 1259,
+ "name": "VariableDeclaration",
+ "src": "9199:13:0"
+ }
+ ],
+ "id": 1260,
+ "name": "ParameterList",
+ "src": "9184:29:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "count",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 1261,
+ "name": "ElementaryTypeName",
+ "src": "9263:4:0"
+ }
+ ],
+ "id": 1262,
+ "name": "VariableDeclaration",
+ "src": "9263:10:0"
+ }
+ ],
+ "id": 1263,
+ "name": "ParameterList",
+ "src": "9262:12:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "i",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 1264,
+ "name": "ElementaryTypeName",
+ "src": "9294:4:0"
+ }
+ ],
+ "id": 1265,
+ "name": "VariableDeclaration",
+ "src": "9294:6:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "30",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 0",
+ "value": "0"
+ },
+ "id": 1266,
+ "name": "Literal",
+ "src": "9301:1:0"
+ }
+ ],
+ "id": 1267,
+ "name": "VariableDeclarationStatement",
+ "src": "9294:8:0"
+ },
+ {
+ "attributes": {
+ "operator": "<",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1268,
+ "name": "Identifier",
+ "src": "9304:1:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionCount"
+ },
+ "id": 1269,
+ "name": "Identifier",
+ "src": "9306:16:0"
+ }
+ ],
+ "id": 1270,
+ "name": "BinaryOperation",
+ "src": "9304:18:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "++",
+ "prefix": false,
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1271,
+ "name": "Identifier",
+ "src": "9324:1:0"
+ }
+ ],
+ "id": 1272,
+ "name": "UnaryOperation",
+ "src": "9324:3:0"
+ }
+ ],
+ "id": 1273,
+ "name": "ExpressionStatement",
+ "src": "9324:3:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "||",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "operator": "&&",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "bool",
+ "value": "pending"
+ },
+ "id": 1274,
+ "name": "Identifier",
+ "src": "9348:7:0"
+ },
+ {
+ "attributes": {
+ "operator": "!",
+ "prefix": true,
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "member_name": "executed",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage ref"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(uint256 => struct MultiSigWallet.Transaction storage ref)",
+ "value": "transactions"
+ },
+ "id": 1275,
+ "name": "Identifier",
+ "src": "9360:12:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1276,
+ "name": "Identifier",
+ "src": "9373:1:0"
+ }
+ ],
+ "id": 1277,
+ "name": "IndexAccess",
+ "src": "9360:15:0"
+ }
+ ],
+ "id": 1278,
+ "name": "MemberAccess",
+ "src": "9360:24:0"
+ }
+ ],
+ "id": 1279,
+ "name": "UnaryOperation",
+ "src": "9359:25:0"
+ }
+ ],
+ "id": 1280,
+ "name": "BinaryOperation",
+ "src": "9348:36:0"
+ },
+ {
+ "attributes": {
+ "operator": "&&",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "bool",
+ "value": "executed"
+ },
+ "id": 1281,
+ "name": "Identifier",
+ "src": "9404:8:0"
+ },
+ {
+ "attributes": {
+ "member_name": "executed",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage ref"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(uint256 => struct MultiSigWallet.Transaction storage ref)",
+ "value": "transactions"
+ },
+ "id": 1282,
+ "name": "Identifier",
+ "src": "9416:12:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1283,
+ "name": "Identifier",
+ "src": "9429:1:0"
+ }
+ ],
+ "id": 1284,
+ "name": "IndexAccess",
+ "src": "9416:15:0"
+ }
+ ],
+ "id": 1285,
+ "name": "MemberAccess",
+ "src": "9416:24:0"
+ }
+ ],
+ "id": 1286,
+ "name": "BinaryOperation",
+ "src": "9404:36:0"
+ }
+ ],
+ "id": 1287,
+ "name": "BinaryOperation",
+ "src": "9348:92:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "+=",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "count"
+ },
+ "id": 1288,
+ "name": "Identifier",
+ "src": "9458:5:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "31",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 1",
+ "value": "1"
+ },
+ "id": 1289,
+ "name": "Literal",
+ "src": "9467:1:0"
+ }
+ ],
+ "id": 1290,
+ "name": "Assignment",
+ "src": "9458:10:0"
+ }
+ ],
+ "id": 1291,
+ "name": "ExpressionStatement",
+ "src": "9458:10:0"
+ }
+ ],
+ "id": 1292,
+ "name": "IfStatement",
+ "src": "9341:127:0"
+ }
+ ],
+ "id": 1293,
+ "name": "ForStatement",
+ "src": "9289:179:0"
+ }
+ ],
+ "id": 1294,
+ "name": "Block",
+ "src": "9279:196:0"
+ }
+ ],
+ "id": 1295,
+ "name": "FunctionDefinition",
+ "src": "9156:319:0"
+ },
+ {
+ "attributes": {
+ "constant": true,
+ "name": "getOwners",
+ "payable": false,
+ "visibility": "public"
+ },
+ "children": [
+ {
+ "children": [],
+ "id": 1296,
+ "name": "ParameterList",
+ "src": "9577:2:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "",
+ "type": "address[] memory"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 1297,
+ "name": "ElementaryTypeName",
+ "src": "9629:7:0"
+ }
+ ],
+ "id": 1298,
+ "name": "ArrayTypeName",
+ "src": "9629:9:0"
+ }
+ ],
+ "id": 1299,
+ "name": "VariableDeclaration",
+ "src": "9629:9:0"
+ }
+ ],
+ "id": 1300,
+ "name": "ParameterList",
+ "src": "9628:11:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] storage ref",
+ "value": "owners"
+ },
+ "id": 1301,
+ "name": "Identifier",
+ "src": "9661:6:0"
+ }
+ ],
+ "id": 1302,
+ "name": "Return",
+ "src": "9654:13:0"
+ }
+ ],
+ "id": 1303,
+ "name": "Block",
+ "src": "9644:30:0"
+ }
+ ],
+ "id": 1304,
+ "name": "FunctionDefinition",
+ "src": "9559:115:0"
+ },
+ {
+ "attributes": {
+ "constant": true,
+ "name": "getConfirmations",
+ "payable": false,
+ "visibility": "public"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "transactionId",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 1305,
+ "name": "ElementaryTypeName",
+ "src": "9879:4:0"
+ }
+ ],
+ "id": 1306,
+ "name": "VariableDeclaration",
+ "src": "9879:18:0"
+ }
+ ],
+ "id": 1307,
+ "name": "ParameterList",
+ "src": "9878:20:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "_confirmations",
+ "type": "address[] memory"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 1308,
+ "name": "ElementaryTypeName",
+ "src": "9948:7:0"
+ }
+ ],
+ "id": 1309,
+ "name": "ArrayTypeName",
+ "src": "9948:9:0"
+ }
+ ],
+ "id": 1310,
+ "name": "VariableDeclaration",
+ "src": "9948:24:0"
+ }
+ ],
+ "id": 1311,
+ "name": "ParameterList",
+ "src": "9947:26:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "confirmationsTemp",
+ "type": "address[] memory"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 1313,
+ "name": "ElementaryTypeName",
+ "src": "9988:7:0"
+ }
+ ],
+ "id": 1314,
+ "name": "ArrayTypeName",
+ "src": "9988:9:0"
+ }
+ ],
+ "id": 1315,
+ "name": "VariableDeclaration",
+ "src": "9988:34:0"
+ },
+ {
+ "attributes": {
+ "type": "address[] memory",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (uint256) returns (address[] memory)"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 1316,
+ "name": "ElementaryTypeName",
+ "src": "10029:7:0"
+ }
+ ],
+ "id": 1317,
+ "name": "ArrayTypeName",
+ "src": "10029:9:0"
+ }
+ ],
+ "id": 1318,
+ "name": "NewExpression",
+ "src": "10025:13:0"
+ },
+ {
+ "attributes": {
+ "member_name": "length",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] storage ref",
+ "value": "owners"
+ },
+ "id": 1319,
+ "name": "Identifier",
+ "src": "10039:6:0"
+ }
+ ],
+ "id": 1320,
+ "name": "MemberAccess",
+ "src": "10039:13:0"
+ }
+ ],
+ "id": 1321,
+ "name": "FunctionCall",
+ "src": "10025:28:0"
+ }
+ ],
+ "id": 1322,
+ "name": "VariableDeclarationStatement",
+ "src": "9988:65:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "count",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 1323,
+ "name": "ElementaryTypeName",
+ "src": "10063:4:0"
+ }
+ ],
+ "id": 1324,
+ "name": "VariableDeclaration",
+ "src": "10063:10:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "30",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 0",
+ "value": "0"
+ },
+ "id": 1325,
+ "name": "Literal",
+ "src": "10076:1:0"
+ }
+ ],
+ "id": 1326,
+ "name": "VariableDeclarationStatement",
+ "src": "10063:14:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "i",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 1327,
+ "name": "ElementaryTypeName",
+ "src": "10087:4:0"
+ }
+ ],
+ "id": 1328,
+ "name": "VariableDeclaration",
+ "src": "10087:6:0"
+ }
+ ],
+ "id": 1329,
+ "name": "VariableDeclarationStatement",
+ "src": "10087:7:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1330,
+ "name": "Identifier",
+ "src": "10108:1:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "30",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 0",
+ "value": "0"
+ },
+ "id": 1331,
+ "name": "Literal",
+ "src": "10110:1:0"
+ }
+ ],
+ "id": 1332,
+ "name": "Assignment",
+ "src": "10108:3:0"
+ }
+ ],
+ "id": 1333,
+ "name": "ExpressionStatement",
+ "src": "10108:3:0"
+ },
+ {
+ "attributes": {
+ "operator": "<",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1334,
+ "name": "Identifier",
+ "src": "10113:1:0"
+ },
+ {
+ "attributes": {
+ "member_name": "length",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] storage ref",
+ "value": "owners"
+ },
+ "id": 1335,
+ "name": "Identifier",
+ "src": "10115:6:0"
+ }
+ ],
+ "id": 1336,
+ "name": "MemberAccess",
+ "src": "10115:13:0"
+ }
+ ],
+ "id": 1337,
+ "name": "BinaryOperation",
+ "src": "10113:15:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "++",
+ "prefix": false,
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1338,
+ "name": "Identifier",
+ "src": "10130:1:0"
+ }
+ ],
+ "id": 1339,
+ "name": "UnaryOperation",
+ "src": "10130:3:0"
+ }
+ ],
+ "id": 1340,
+ "name": "ExpressionStatement",
+ "src": "10130:3:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(address => bool)"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(uint256 => mapping(address => bool))",
+ "value": "confirmations"
+ },
+ "id": 1341,
+ "name": "Identifier",
+ "src": "10151:13:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 1342,
+ "name": "Identifier",
+ "src": "10165:13:0"
+ }
+ ],
+ "id": 1343,
+ "name": "IndexAccess",
+ "src": "10151:28:0"
+ },
+ {
+ "attributes": {
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] storage ref",
+ "value": "owners"
+ },
+ "id": 1344,
+ "name": "Identifier",
+ "src": "10180:6:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1345,
+ "name": "Identifier",
+ "src": "10187:1:0"
+ }
+ ],
+ "id": 1346,
+ "name": "IndexAccess",
+ "src": "10180:9:0"
+ }
+ ],
+ "id": 1347,
+ "name": "IndexAccess",
+ "src": "10151:39:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] memory",
+ "value": "confirmationsTemp"
+ },
+ "id": 1348,
+ "name": "Identifier",
+ "src": "10210:17:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "count"
+ },
+ "id": 1349,
+ "name": "Identifier",
+ "src": "10228:5:0"
+ }
+ ],
+ "id": 1350,
+ "name": "IndexAccess",
+ "src": "10210:24:0"
+ },
+ {
+ "attributes": {
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] storage ref",
+ "value": "owners"
+ },
+ "id": 1351,
+ "name": "Identifier",
+ "src": "10237:6:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1352,
+ "name": "Identifier",
+ "src": "10244:1:0"
+ }
+ ],
+ "id": 1353,
+ "name": "IndexAccess",
+ "src": "10237:9:0"
+ }
+ ],
+ "id": 1354,
+ "name": "Assignment",
+ "src": "10210:36:0"
+ }
+ ],
+ "id": 1355,
+ "name": "ExpressionStatement",
+ "src": "10210:36:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "+=",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "count"
+ },
+ "id": 1356,
+ "name": "Identifier",
+ "src": "10264:5:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "31",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 1",
+ "value": "1"
+ },
+ "id": 1357,
+ "name": "Literal",
+ "src": "10273:1:0"
+ }
+ ],
+ "id": 1358,
+ "name": "Assignment",
+ "src": "10264:10:0"
+ }
+ ],
+ "id": 1359,
+ "name": "ExpressionStatement",
+ "src": "10264:10:0"
+ }
+ ],
+ "id": 1360,
+ "name": "Block",
+ "src": "10192:97:0"
+ }
+ ],
+ "id": 1361,
+ "name": "IfStatement",
+ "src": "10147:142:0"
+ }
+ ],
+ "id": 1362,
+ "name": "ForStatement",
+ "src": "10103:186:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "address[] memory"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] memory",
+ "value": "_confirmations"
+ },
+ "id": 1363,
+ "name": "Identifier",
+ "src": "10298:14:0"
+ },
+ {
+ "attributes": {
+ "type": "address[] memory",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (uint256) returns (address[] memory)"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 1364,
+ "name": "ElementaryTypeName",
+ "src": "10319:7:0"
+ }
+ ],
+ "id": 1365,
+ "name": "ArrayTypeName",
+ "src": "10319:9:0"
+ }
+ ],
+ "id": 1366,
+ "name": "NewExpression",
+ "src": "10315:13:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "count"
+ },
+ "id": 1367,
+ "name": "Identifier",
+ "src": "10329:5:0"
+ }
+ ],
+ "id": 1368,
+ "name": "FunctionCall",
+ "src": "10315:20:0"
+ }
+ ],
+ "id": 1369,
+ "name": "Assignment",
+ "src": "10298:37:0"
+ }
+ ],
+ "id": 1370,
+ "name": "ExpressionStatement",
+ "src": "10298:37:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1371,
+ "name": "Identifier",
+ "src": "10350:1:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "30",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 0",
+ "value": "0"
+ },
+ "id": 1372,
+ "name": "Literal",
+ "src": "10352:1:0"
+ }
+ ],
+ "id": 1373,
+ "name": "Assignment",
+ "src": "10350:3:0"
+ }
+ ],
+ "id": 1374,
+ "name": "ExpressionStatement",
+ "src": "10350:3:0"
+ },
+ {
+ "attributes": {
+ "operator": "<",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1375,
+ "name": "Identifier",
+ "src": "10355:1:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "count"
+ },
+ "id": 1376,
+ "name": "Identifier",
+ "src": "10357:5:0"
+ }
+ ],
+ "id": 1377,
+ "name": "BinaryOperation",
+ "src": "10355:7:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "++",
+ "prefix": false,
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1378,
+ "name": "Identifier",
+ "src": "10364:1:0"
+ }
+ ],
+ "id": 1379,
+ "name": "UnaryOperation",
+ "src": "10364:3:0"
+ }
+ ],
+ "id": 1380,
+ "name": "ExpressionStatement",
+ "src": "10364:3:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] memory",
+ "value": "_confirmations"
+ },
+ "id": 1381,
+ "name": "Identifier",
+ "src": "10381:14:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1382,
+ "name": "Identifier",
+ "src": "10396:1:0"
+ }
+ ],
+ "id": 1383,
+ "name": "IndexAccess",
+ "src": "10381:17:0"
+ },
+ {
+ "attributes": {
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] memory",
+ "value": "confirmationsTemp"
+ },
+ "id": 1384,
+ "name": "Identifier",
+ "src": "10401:17:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1385,
+ "name": "Identifier",
+ "src": "10419:1:0"
+ }
+ ],
+ "id": 1386,
+ "name": "IndexAccess",
+ "src": "10401:20:0"
+ }
+ ],
+ "id": 1387,
+ "name": "Assignment",
+ "src": "10381:40:0"
+ }
+ ],
+ "id": 1388,
+ "name": "ExpressionStatement",
+ "src": "10381:40:0"
+ }
+ ],
+ "id": 1389,
+ "name": "ForStatement",
+ "src": "10345:76:0"
+ }
+ ],
+ "id": 1390,
+ "name": "Block",
+ "src": "9978:450:0"
+ }
+ ],
+ "id": 1391,
+ "name": "FunctionDefinition",
+ "src": "9853:575:0"
+ },
+ {
+ "attributes": {
+ "constant": true,
+ "name": "getTransactionIds",
+ "payable": false,
+ "visibility": "public"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "from",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 1392,
+ "name": "ElementaryTypeName",
+ "src": "10804:4:0"
+ }
+ ],
+ "id": 1393,
+ "name": "VariableDeclaration",
+ "src": "10804:9:0"
+ },
+ {
+ "attributes": {
+ "name": "to",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 1394,
+ "name": "ElementaryTypeName",
+ "src": "10815:4:0"
+ }
+ ],
+ "id": 1395,
+ "name": "VariableDeclaration",
+ "src": "10815:7:0"
+ },
+ {
+ "attributes": {
+ "name": "pending",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "bool"
+ },
+ "id": 1396,
+ "name": "ElementaryTypeName",
+ "src": "10824:4:0"
+ }
+ ],
+ "id": 1397,
+ "name": "VariableDeclaration",
+ "src": "10824:12:0"
+ },
+ {
+ "attributes": {
+ "name": "executed",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "bool"
+ },
+ "id": 1398,
+ "name": "ElementaryTypeName",
+ "src": "10838:4:0"
+ }
+ ],
+ "id": 1399,
+ "name": "VariableDeclaration",
+ "src": "10838:13:0"
+ }
+ ],
+ "id": 1400,
+ "name": "ParameterList",
+ "src": "10803:49:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "_transactionIds",
+ "type": "uint256[] memory"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 1401,
+ "name": "ElementaryTypeName",
+ "src": "10902:4:0"
+ }
+ ],
+ "id": 1402,
+ "name": "ArrayTypeName",
+ "src": "10902:6:0"
+ }
+ ],
+ "id": 1403,
+ "name": "VariableDeclaration",
+ "src": "10902:22:0"
+ }
+ ],
+ "id": 1404,
+ "name": "ParameterList",
+ "src": "10901:24:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "transactionIdsTemp",
+ "type": "uint256[] memory"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 1406,
+ "name": "ElementaryTypeName",
+ "src": "10940:4:0"
+ }
+ ],
+ "id": 1407,
+ "name": "ArrayTypeName",
+ "src": "10940:6:0"
+ }
+ ],
+ "id": 1408,
+ "name": "VariableDeclaration",
+ "src": "10940:32:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256[] memory",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (uint256) returns (uint256[] memory)"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 1409,
+ "name": "ElementaryTypeName",
+ "src": "10979:4:0"
+ }
+ ],
+ "id": 1410,
+ "name": "ArrayTypeName",
+ "src": "10979:6:0"
+ }
+ ],
+ "id": 1411,
+ "name": "NewExpression",
+ "src": "10975:10:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionCount"
+ },
+ "id": 1412,
+ "name": "Identifier",
+ "src": "10986:16:0"
+ }
+ ],
+ "id": 1413,
+ "name": "FunctionCall",
+ "src": "10975:28:0"
+ }
+ ],
+ "id": 1414,
+ "name": "VariableDeclarationStatement",
+ "src": "10940:63:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "count",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 1415,
+ "name": "ElementaryTypeName",
+ "src": "11013:4:0"
+ }
+ ],
+ "id": 1416,
+ "name": "VariableDeclaration",
+ "src": "11013:10:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "30",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 0",
+ "value": "0"
+ },
+ "id": 1417,
+ "name": "Literal",
+ "src": "11026:1:0"
+ }
+ ],
+ "id": 1418,
+ "name": "VariableDeclarationStatement",
+ "src": "11013:14:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "i",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 1419,
+ "name": "ElementaryTypeName",
+ "src": "11037:4:0"
+ }
+ ],
+ "id": 1420,
+ "name": "VariableDeclaration",
+ "src": "11037:6:0"
+ }
+ ],
+ "id": 1421,
+ "name": "VariableDeclarationStatement",
+ "src": "11037:7:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1422,
+ "name": "Identifier",
+ "src": "11058:1:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "30",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 0",
+ "value": "0"
+ },
+ "id": 1423,
+ "name": "Literal",
+ "src": "11060:1:0"
+ }
+ ],
+ "id": 1424,
+ "name": "Assignment",
+ "src": "11058:3:0"
+ }
+ ],
+ "id": 1425,
+ "name": "ExpressionStatement",
+ "src": "11058:3:0"
+ },
+ {
+ "attributes": {
+ "operator": "<",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1426,
+ "name": "Identifier",
+ "src": "11063:1:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionCount"
+ },
+ "id": 1427,
+ "name": "Identifier",
+ "src": "11065:16:0"
+ }
+ ],
+ "id": 1428,
+ "name": "BinaryOperation",
+ "src": "11063:18:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "++",
+ "prefix": false,
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1429,
+ "name": "Identifier",
+ "src": "11083:1:0"
+ }
+ ],
+ "id": 1430,
+ "name": "UnaryOperation",
+ "src": "11083:3:0"
+ }
+ ],
+ "id": 1431,
+ "name": "ExpressionStatement",
+ "src": "11083:3:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "||",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "operator": "&&",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "bool",
+ "value": "pending"
+ },
+ "id": 1432,
+ "name": "Identifier",
+ "src": "11107:7:0"
+ },
+ {
+ "attributes": {
+ "operator": "!",
+ "prefix": true,
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "member_name": "executed",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage ref"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(uint256 => struct MultiSigWallet.Transaction storage ref)",
+ "value": "transactions"
+ },
+ "id": 1433,
+ "name": "Identifier",
+ "src": "11119:12:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1434,
+ "name": "Identifier",
+ "src": "11132:1:0"
+ }
+ ],
+ "id": 1435,
+ "name": "IndexAccess",
+ "src": "11119:15:0"
+ }
+ ],
+ "id": 1436,
+ "name": "MemberAccess",
+ "src": "11119:24:0"
+ }
+ ],
+ "id": 1437,
+ "name": "UnaryOperation",
+ "src": "11118:25:0"
+ }
+ ],
+ "id": 1438,
+ "name": "BinaryOperation",
+ "src": "11107:36:0"
+ },
+ {
+ "attributes": {
+ "operator": "&&",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "bool",
+ "value": "executed"
+ },
+ "id": 1439,
+ "name": "Identifier",
+ "src": "11163:8:0"
+ },
+ {
+ "attributes": {
+ "member_name": "executed",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage ref"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(uint256 => struct MultiSigWallet.Transaction storage ref)",
+ "value": "transactions"
+ },
+ "id": 1440,
+ "name": "Identifier",
+ "src": "11175:12:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1441,
+ "name": "Identifier",
+ "src": "11188:1:0"
+ }
+ ],
+ "id": 1442,
+ "name": "IndexAccess",
+ "src": "11175:15:0"
+ }
+ ],
+ "id": 1443,
+ "name": "MemberAccess",
+ "src": "11175:24:0"
+ }
+ ],
+ "id": 1444,
+ "name": "BinaryOperation",
+ "src": "11163:36:0"
+ }
+ ],
+ "id": 1445,
+ "name": "BinaryOperation",
+ "src": "11107:92:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256[] memory",
+ "value": "transactionIdsTemp"
+ },
+ "id": 1446,
+ "name": "Identifier",
+ "src": "11231:18:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "count"
+ },
+ "id": 1447,
+ "name": "Identifier",
+ "src": "11250:5:0"
+ }
+ ],
+ "id": 1448,
+ "name": "IndexAccess",
+ "src": "11231:25:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1449,
+ "name": "Identifier",
+ "src": "11259:1:0"
+ }
+ ],
+ "id": 1450,
+ "name": "Assignment",
+ "src": "11231:29:0"
+ }
+ ],
+ "id": 1451,
+ "name": "ExpressionStatement",
+ "src": "11231:29:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "+=",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "count"
+ },
+ "id": 1452,
+ "name": "Identifier",
+ "src": "11278:5:0"
+ },
+ {
+ "attributes": {
+ "hexvalue": "31",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 1",
+ "value": "1"
+ },
+ "id": 1453,
+ "name": "Literal",
+ "src": "11287:1:0"
+ }
+ ],
+ "id": 1454,
+ "name": "Assignment",
+ "src": "11278:10:0"
+ }
+ ],
+ "id": 1455,
+ "name": "ExpressionStatement",
+ "src": "11278:10:0"
+ }
+ ],
+ "id": 1456,
+ "name": "Block",
+ "src": "11213:90:0"
+ }
+ ],
+ "id": 1457,
+ "name": "IfStatement",
+ "src": "11100:203:0"
+ }
+ ],
+ "id": 1458,
+ "name": "ForStatement",
+ "src": "11053:250:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "uint256[] memory"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256[] memory",
+ "value": "_transactionIds"
+ },
+ "id": 1459,
+ "name": "Identifier",
+ "src": "11312:15:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256[] memory",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (uint256) returns (uint256[] memory)"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 1460,
+ "name": "ElementaryTypeName",
+ "src": "11334:4:0"
+ }
+ ],
+ "id": 1461,
+ "name": "ArrayTypeName",
+ "src": "11334:6:0"
+ }
+ ],
+ "id": 1462,
+ "name": "NewExpression",
+ "src": "11330:10:0"
+ },
+ {
+ "attributes": {
+ "operator": "-",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "to"
+ },
+ "id": 1463,
+ "name": "Identifier",
+ "src": "11341:2:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "from"
+ },
+ "id": 1464,
+ "name": "Identifier",
+ "src": "11346:4:0"
+ }
+ ],
+ "id": 1465,
+ "name": "BinaryOperation",
+ "src": "11341:9:0"
+ }
+ ],
+ "id": 1466,
+ "name": "FunctionCall",
+ "src": "11330:21:0"
+ }
+ ],
+ "id": 1467,
+ "name": "Assignment",
+ "src": "11312:39:0"
+ }
+ ],
+ "id": 1468,
+ "name": "ExpressionStatement",
+ "src": "11312:39:0"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1469,
+ "name": "Identifier",
+ "src": "11366:1:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "from"
+ },
+ "id": 1470,
+ "name": "Identifier",
+ "src": "11368:4:0"
+ }
+ ],
+ "id": 1471,
+ "name": "Assignment",
+ "src": "11366:6:0"
+ }
+ ],
+ "id": 1472,
+ "name": "ExpressionStatement",
+ "src": "11366:6:0"
+ },
+ {
+ "attributes": {
+ "operator": "<",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1473,
+ "name": "Identifier",
+ "src": "11374:1:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "to"
+ },
+ "id": 1474,
+ "name": "Identifier",
+ "src": "11376:2:0"
+ }
+ ],
+ "id": 1475,
+ "name": "BinaryOperation",
+ "src": "11374:4:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "++",
+ "prefix": false,
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1476,
+ "name": "Identifier",
+ "src": "11380:1:0"
+ }
+ ],
+ "id": 1477,
+ "name": "UnaryOperation",
+ "src": "11380:3:0"
+ }
+ ],
+ "id": 1478,
+ "name": "ExpressionStatement",
+ "src": "11380:3:0"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256[] memory",
+ "value": "_transactionIds"
+ },
+ "id": 1479,
+ "name": "Identifier",
+ "src": "11397:15:0"
+ },
+ {
+ "attributes": {
+ "operator": "-",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1480,
+ "name": "Identifier",
+ "src": "11413:1:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "from"
+ },
+ "id": 1481,
+ "name": "Identifier",
+ "src": "11417:4:0"
+ }
+ ],
+ "id": 1482,
+ "name": "BinaryOperation",
+ "src": "11413:8:0"
+ }
+ ],
+ "id": 1483,
+ "name": "IndexAccess",
+ "src": "11397:25:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256[] memory",
+ "value": "transactionIdsTemp"
+ },
+ "id": 1484,
+ "name": "Identifier",
+ "src": "11425:18:0"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 1485,
+ "name": "Identifier",
+ "src": "11444:1:0"
+ }
+ ],
+ "id": 1486,
+ "name": "IndexAccess",
+ "src": "11425:21:0"
+ }
+ ],
+ "id": 1487,
+ "name": "Assignment",
+ "src": "11397:49:0"
+ }
+ ],
+ "id": 1488,
+ "name": "ExpressionStatement",
+ "src": "11397:49:0"
+ }
+ ],
+ "id": 1489,
+ "name": "ForStatement",
+ "src": "11361:85:0"
+ }
+ ],
+ "id": 1490,
+ "name": "Block",
+ "src": "10930:523:0"
+ }
+ ],
+ "id": 1491,
+ "name": "FunctionDefinition",
+ "src": "10777:676:0"
+ }
+ ],
+ "id": 1492,
+ "name": "ContractDefinition",
+ "src": "206:11249:0"
+ }
+ ],
+ "name": "SourceUnit"
+ }
},
- "current/protocol/AssetProxyOwner/AssetProxyOwner.sol": {
- "id": 2
+ "2.0.0/multisig/MultiSigWalletWithTimeLock.sol": {
+ "id": "1",
+ "legacyAST": {
+ "children": [
+ {
+ "attributes": {
+ "literals": [
+ "solidity",
+ "^",
+ "0.4",
+ ".10"
+ ]
+ },
+ "id": 277,
+ "name": "PragmaDirective",
+ "src": "599:24:1"
+ },
+ {
+ "attributes": {
+ "file": "./MultiSigWallet.sol"
+ },
+ "id": 278,
+ "name": "ImportDirective",
+ "src": "625:30:1"
+ },
+ {
+ "attributes": {
+ "fullyImplemented": true,
+ "isLibrary": false,
+ "linearizedBaseContracts": [
+ 529,
+ 1492
+ ],
+ "name": "MultiSigWalletWithTimeLock"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "MultiSigWallet"
+ },
+ "id": 279,
+ "name": "UserDefinedTypeName",
+ "src": "874:14:1"
+ }
+ ],
+ "id": 280,
+ "name": "InheritanceSpecifier",
+ "src": "874:14:1"
+ },
+ {
+ "attributes": {
+ "name": "ConfirmationTimeSet"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "transactionId",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 281,
+ "name": "ElementaryTypeName",
+ "src": "922:4:1"
+ }
+ ],
+ "id": 282,
+ "name": "VariableDeclaration",
+ "src": "922:26:1"
+ },
+ {
+ "attributes": {
+ "name": "confirmationTime",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 283,
+ "name": "ElementaryTypeName",
+ "src": "950:4:1"
+ }
+ ],
+ "id": 284,
+ "name": "VariableDeclaration",
+ "src": "950:21:1"
+ }
+ ],
+ "id": 285,
+ "name": "ParameterList",
+ "src": "921:51:1"
+ }
+ ],
+ "id": 286,
+ "name": "EventDefinition",
+ "src": "896:77:1"
+ },
+ {
+ "attributes": {
+ "name": "TimeLockChange"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "secondsTimeLocked",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 287,
+ "name": "ElementaryTypeName",
+ "src": "999:4:1"
+ }
+ ],
+ "id": 288,
+ "name": "VariableDeclaration",
+ "src": "999:22:1"
+ }
+ ],
+ "id": 289,
+ "name": "ParameterList",
+ "src": "998:24:1"
+ }
+ ],
+ "id": 290,
+ "name": "EventDefinition",
+ "src": "978:45:1"
+ },
+ {
+ "attributes": {
+ "name": "secondsTimeLocked",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 291,
+ "name": "ElementaryTypeName",
+ "src": "1029:4:1"
+ }
+ ],
+ "id": 292,
+ "name": "VariableDeclaration",
+ "src": "1029:29:1"
+ },
+ {
+ "attributes": {
+ "name": "confirmationTimes",
+ "type": "mapping(uint256 => uint256)"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 293,
+ "name": "ElementaryTypeName",
+ "src": "1074:4:1"
+ },
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 294,
+ "name": "ElementaryTypeName",
+ "src": "1082:4:1"
+ }
+ ],
+ "id": 295,
+ "name": "Mapping",
+ "src": "1065:22:1"
+ }
+ ],
+ "id": 296,
+ "name": "VariableDeclaration",
+ "src": "1065:47:1"
+ },
+ {
+ "attributes": {
+ "name": "notFullyConfirmed"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "transactionId",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 297,
+ "name": "ElementaryTypeName",
+ "src": "1146:4:1"
+ }
+ ],
+ "id": 298,
+ "name": "VariableDeclaration",
+ "src": "1146:18:1"
+ }
+ ],
+ "id": 299,
+ "name": "ParameterList",
+ "src": "1145:20:1"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (bool)",
+ "value": "require"
+ },
+ "id": 300,
+ "name": "Identifier",
+ "src": "1176:7:1"
+ },
+ {
+ "attributes": {
+ "operator": "!",
+ "prefix": true,
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "bool",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (uint256) constant returns (bool)",
+ "value": "isConfirmed"
+ },
+ "id": 301,
+ "name": "Identifier",
+ "src": "1185:11:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 302,
+ "name": "Identifier",
+ "src": "1197:13:1"
+ }
+ ],
+ "id": 303,
+ "name": "FunctionCall",
+ "src": "1185:26:1"
+ }
+ ],
+ "id": 304,
+ "name": "UnaryOperation",
+ "src": "1184:27:1"
+ }
+ ],
+ "id": 305,
+ "name": "FunctionCall",
+ "src": "1176:36:1"
+ }
+ ],
+ "id": 306,
+ "name": "ExpressionStatement",
+ "src": "1176:36:1"
+ },
+ {
+ "id": 307,
+ "name": "PlaceholderStatement",
+ "src": "1222:1:1"
+ }
+ ],
+ "id": 308,
+ "name": "Block",
+ "src": "1166:64:1"
+ }
+ ],
+ "id": 309,
+ "name": "ModifierDefinition",
+ "src": "1119:111:1"
+ },
+ {
+ "attributes": {
+ "name": "fullyConfirmed"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "transactionId",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 310,
+ "name": "ElementaryTypeName",
+ "src": "1260:4:1"
+ }
+ ],
+ "id": 311,
+ "name": "VariableDeclaration",
+ "src": "1260:18:1"
+ }
+ ],
+ "id": 312,
+ "name": "ParameterList",
+ "src": "1259:20:1"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (bool)",
+ "value": "require"
+ },
+ "id": 313,
+ "name": "Identifier",
+ "src": "1290:7:1"
+ },
+ {
+ "attributes": {
+ "type": "bool",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (uint256) constant returns (bool)",
+ "value": "isConfirmed"
+ },
+ "id": 314,
+ "name": "Identifier",
+ "src": "1298:11:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 315,
+ "name": "Identifier",
+ "src": "1310:13:1"
+ }
+ ],
+ "id": 316,
+ "name": "FunctionCall",
+ "src": "1298:26:1"
+ }
+ ],
+ "id": 317,
+ "name": "FunctionCall",
+ "src": "1290:35:1"
+ }
+ ],
+ "id": 318,
+ "name": "ExpressionStatement",
+ "src": "1290:35:1"
+ },
+ {
+ "id": 319,
+ "name": "PlaceholderStatement",
+ "src": "1335:1:1"
+ }
+ ],
+ "id": 320,
+ "name": "Block",
+ "src": "1280:63:1"
+ }
+ ],
+ "id": 321,
+ "name": "ModifierDefinition",
+ "src": "1236:107:1"
+ },
+ {
+ "attributes": {
+ "name": "pastTimeLock"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "transactionId",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 322,
+ "name": "ElementaryTypeName",
+ "src": "1371:4:1"
+ }
+ ],
+ "id": 323,
+ "name": "VariableDeclaration",
+ "src": "1371:18:1"
+ }
+ ],
+ "id": 324,
+ "name": "ParameterList",
+ "src": "1370:20:1"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (bool)",
+ "value": "require"
+ },
+ "id": 325,
+ "name": "Identifier",
+ "src": "1401:7:1"
+ },
+ {
+ "attributes": {
+ "operator": ">=",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "member_name": "timestamp",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "block",
+ "value": "block"
+ },
+ "id": 326,
+ "name": "Identifier",
+ "src": "1409:5:1"
+ }
+ ],
+ "id": 327,
+ "name": "MemberAccess",
+ "src": "1409:15:1"
+ },
+ {
+ "attributes": {
+ "operator": "+",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(uint256 => uint256)",
+ "value": "confirmationTimes"
+ },
+ "id": 328,
+ "name": "Identifier",
+ "src": "1428:17:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 329,
+ "name": "Identifier",
+ "src": "1446:13:1"
+ }
+ ],
+ "id": 330,
+ "name": "IndexAccess",
+ "src": "1428:32:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "secondsTimeLocked"
+ },
+ "id": 331,
+ "name": "Identifier",
+ "src": "1463:17:1"
+ }
+ ],
+ "id": 332,
+ "name": "BinaryOperation",
+ "src": "1428:52:1"
+ }
+ ],
+ "id": 333,
+ "name": "BinaryOperation",
+ "src": "1409:71:1"
+ }
+ ],
+ "id": 334,
+ "name": "FunctionCall",
+ "src": "1401:80:1"
+ }
+ ],
+ "id": 335,
+ "name": "ExpressionStatement",
+ "src": "1401:80:1"
+ },
+ {
+ "id": 336,
+ "name": "PlaceholderStatement",
+ "src": "1491:1:1"
+ }
+ ],
+ "id": 337,
+ "name": "Block",
+ "src": "1391:108:1"
+ }
+ ],
+ "id": 338,
+ "name": "ModifierDefinition",
+ "src": "1349:150:1"
+ },
+ {
+ "attributes": {
+ "constant": false,
+ "name": "MultiSigWalletWithTimeLock",
+ "payable": false,
+ "visibility": "public"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "_owners",
+ "type": "address[] memory"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 339,
+ "name": "ElementaryTypeName",
+ "src": "1920:7:1"
+ }
+ ],
+ "id": 340,
+ "name": "ArrayTypeName",
+ "src": "1920:9:1"
+ }
+ ],
+ "id": 341,
+ "name": "VariableDeclaration",
+ "src": "1920:17:1"
+ },
+ {
+ "attributes": {
+ "name": "_required",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 342,
+ "name": "ElementaryTypeName",
+ "src": "1939:4:1"
+ }
+ ],
+ "id": 343,
+ "name": "VariableDeclaration",
+ "src": "1939:14:1"
+ },
+ {
+ "attributes": {
+ "name": "_secondsTimeLocked",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 344,
+ "name": "ElementaryTypeName",
+ "src": "1955:4:1"
+ }
+ ],
+ "id": 345,
+ "name": "VariableDeclaration",
+ "src": "1955:23:1"
+ }
+ ],
+ "id": 346,
+ "name": "ParameterList",
+ "src": "1919:60:1"
+ },
+ {
+ "children": [],
+ "id": 351,
+ "name": "ParameterList",
+ "src": "2042:0:1"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "type(contract MultiSigWallet)",
+ "value": "MultiSigWallet"
+ },
+ "id": 347,
+ "name": "Identifier",
+ "src": "2003:14:1"
+ },
+ {
+ "attributes": {
+ "type": "address[] memory",
+ "value": "_owners"
+ },
+ "id": 348,
+ "name": "Identifier",
+ "src": "2018:7:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "_required"
+ },
+ "id": 349,
+ "name": "Identifier",
+ "src": "2027:9:1"
+ }
+ ],
+ "id": 350,
+ "name": "ModifierInvocation",
+ "src": "2003:34:1"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "secondsTimeLocked"
+ },
+ "id": 352,
+ "name": "Identifier",
+ "src": "2052:17:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "_secondsTimeLocked"
+ },
+ "id": 353,
+ "name": "Identifier",
+ "src": "2072:18:1"
+ }
+ ],
+ "id": 354,
+ "name": "Assignment",
+ "src": "2052:38:1"
+ }
+ ],
+ "id": 355,
+ "name": "ExpressionStatement",
+ "src": "2052:38:1"
+ }
+ ],
+ "id": 356,
+ "name": "Block",
+ "src": "2042:55:1"
+ }
+ ],
+ "id": 357,
+ "name": "FunctionDefinition",
+ "src": "1884:213:1"
+ },
+ {
+ "attributes": {
+ "constant": false,
+ "name": "changeTimeLock",
+ "payable": false,
+ "visibility": "public"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "_secondsTimeLocked",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 358,
+ "name": "ElementaryTypeName",
+ "src": "2325:4:1"
+ }
+ ],
+ "id": 359,
+ "name": "VariableDeclaration",
+ "src": "2325:23:1"
+ }
+ ],
+ "id": 360,
+ "name": "ParameterList",
+ "src": "2324:25:1"
+ },
+ {
+ "children": [],
+ "id": 363,
+ "name": "ParameterList",
+ "src": "2388:0:1"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier ()",
+ "value": "onlyWallet"
+ },
+ "id": 361,
+ "name": "Identifier",
+ "src": "2373:10:1"
+ }
+ ],
+ "id": 362,
+ "name": "ModifierInvocation",
+ "src": "2373:10:1"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "secondsTimeLocked"
+ },
+ "id": 364,
+ "name": "Identifier",
+ "src": "2398:17:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "_secondsTimeLocked"
+ },
+ "id": 365,
+ "name": "Identifier",
+ "src": "2418:18:1"
+ }
+ ],
+ "id": 366,
+ "name": "Assignment",
+ "src": "2398:38:1"
+ }
+ ],
+ "id": 367,
+ "name": "ExpressionStatement",
+ "src": "2398:38:1"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (uint256) constant",
+ "value": "TimeLockChange"
+ },
+ "id": 368,
+ "name": "Identifier",
+ "src": "2446:14:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "_secondsTimeLocked"
+ },
+ "id": 369,
+ "name": "Identifier",
+ "src": "2461:18:1"
+ }
+ ],
+ "id": 370,
+ "name": "FunctionCall",
+ "src": "2446:34:1"
+ }
+ ],
+ "id": 371,
+ "name": "ExpressionStatement",
+ "src": "2446:34:1"
+ }
+ ],
+ "id": 372,
+ "name": "Block",
+ "src": "2388:99:1"
+ }
+ ],
+ "id": 373,
+ "name": "FunctionDefinition",
+ "src": "2301:186:1"
+ },
+ {
+ "attributes": {
+ "constant": false,
+ "name": "confirmTransaction",
+ "payable": false,
+ "visibility": "public"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "transactionId",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 374,
+ "name": "ElementaryTypeName",
+ "src": "2621:4:1"
+ }
+ ],
+ "id": 375,
+ "name": "VariableDeclaration",
+ "src": "2621:18:1"
+ }
+ ],
+ "id": 376,
+ "name": "ParameterList",
+ "src": "2620:20:1"
+ },
+ {
+ "children": [],
+ "id": 392,
+ "name": "ParameterList",
+ "src": "2822:0:1"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (address)",
+ "value": "ownerExists"
+ },
+ "id": 377,
+ "name": "Identifier",
+ "src": "2664:11:1"
+ },
+ {
+ "attributes": {
+ "member_name": "sender",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "msg",
+ "value": "msg"
+ },
+ "id": 378,
+ "name": "Identifier",
+ "src": "2676:3:1"
+ }
+ ],
+ "id": 379,
+ "name": "MemberAccess",
+ "src": "2676:10:1"
+ }
+ ],
+ "id": 380,
+ "name": "ModifierInvocation",
+ "src": "2664:23:1"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (uint256)",
+ "value": "transactionExists"
+ },
+ "id": 381,
+ "name": "Identifier",
+ "src": "2696:17:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 382,
+ "name": "Identifier",
+ "src": "2714:13:1"
+ }
+ ],
+ "id": 383,
+ "name": "ModifierInvocation",
+ "src": "2696:32:1"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (uint256,address)",
+ "value": "notConfirmed"
+ },
+ "id": 384,
+ "name": "Identifier",
+ "src": "2737:12:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 385,
+ "name": "Identifier",
+ "src": "2750:13:1"
+ },
+ {
+ "attributes": {
+ "member_name": "sender",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "msg",
+ "value": "msg"
+ },
+ "id": 386,
+ "name": "Identifier",
+ "src": "2765:3:1"
+ }
+ ],
+ "id": 387,
+ "name": "MemberAccess",
+ "src": "2765:10:1"
+ }
+ ],
+ "id": 388,
+ "name": "ModifierInvocation",
+ "src": "2737:39:1"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (uint256)",
+ "value": "notFullyConfirmed"
+ },
+ "id": 389,
+ "name": "Identifier",
+ "src": "2785:17:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 390,
+ "name": "Identifier",
+ "src": "2803:13:1"
+ }
+ ],
+ "id": 391,
+ "name": "ModifierInvocation",
+ "src": "2785:32:1"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(address => bool)"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(uint256 => mapping(address => bool))",
+ "value": "confirmations"
+ },
+ "id": 393,
+ "name": "Identifier",
+ "src": "2832:13:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 394,
+ "name": "Identifier",
+ "src": "2846:13:1"
+ }
+ ],
+ "id": 397,
+ "name": "IndexAccess",
+ "src": "2832:28:1"
+ },
+ {
+ "attributes": {
+ "member_name": "sender",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "msg",
+ "value": "msg"
+ },
+ "id": 395,
+ "name": "Identifier",
+ "src": "2861:3:1"
+ }
+ ],
+ "id": 396,
+ "name": "MemberAccess",
+ "src": "2861:10:1"
+ }
+ ],
+ "id": 398,
+ "name": "IndexAccess",
+ "src": "2832:40:1"
+ },
+ {
+ "attributes": {
+ "hexvalue": "74727565",
+ "subdenomination": null,
+ "token": "true",
+ "type": "bool",
+ "value": "true"
+ },
+ "id": 399,
+ "name": "Literal",
+ "src": "2875:4:1"
+ }
+ ],
+ "id": 400,
+ "name": "Assignment",
+ "src": "2832:47:1"
+ }
+ ],
+ "id": 401,
+ "name": "ExpressionStatement",
+ "src": "2832:47:1"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (address,uint256) constant",
+ "value": "Confirmation"
+ },
+ "id": 402,
+ "name": "Identifier",
+ "src": "2889:12:1"
+ },
+ {
+ "attributes": {
+ "member_name": "sender",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "msg",
+ "value": "msg"
+ },
+ "id": 403,
+ "name": "Identifier",
+ "src": "2902:3:1"
+ }
+ ],
+ "id": 404,
+ "name": "MemberAccess",
+ "src": "2902:10:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 405,
+ "name": "Identifier",
+ "src": "2914:13:1"
+ }
+ ],
+ "id": 406,
+ "name": "FunctionCall",
+ "src": "2889:39:1"
+ }
+ ],
+ "id": 407,
+ "name": "ExpressionStatement",
+ "src": "2889:39:1"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "bool",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (uint256) constant returns (bool)",
+ "value": "isConfirmed"
+ },
+ "id": 408,
+ "name": "Identifier",
+ "src": "2942:11:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 409,
+ "name": "Identifier",
+ "src": "2954:13:1"
+ }
+ ],
+ "id": 410,
+ "name": "FunctionCall",
+ "src": "2942:26:1"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (uint256,uint256)",
+ "value": "setConfirmationTime"
+ },
+ "id": 411,
+ "name": "Identifier",
+ "src": "2984:19:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 412,
+ "name": "Identifier",
+ "src": "3004:13:1"
+ },
+ {
+ "attributes": {
+ "member_name": "timestamp",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "block",
+ "value": "block"
+ },
+ "id": 413,
+ "name": "Identifier",
+ "src": "3019:5:1"
+ }
+ ],
+ "id": 414,
+ "name": "MemberAccess",
+ "src": "3019:15:1"
+ }
+ ],
+ "id": 415,
+ "name": "FunctionCall",
+ "src": "2984:51:1"
+ }
+ ],
+ "id": 416,
+ "name": "ExpressionStatement",
+ "src": "2984:51:1"
+ }
+ ],
+ "id": 417,
+ "name": "Block",
+ "src": "2970:76:1"
+ }
+ ],
+ "id": 418,
+ "name": "IfStatement",
+ "src": "2938:108:1"
+ }
+ ],
+ "id": 419,
+ "name": "Block",
+ "src": "2822:230:1"
+ }
+ ],
+ "id": 420,
+ "name": "FunctionDefinition",
+ "src": "2593:459:1"
+ },
+ {
+ "attributes": {
+ "constant": false,
+ "name": "revokeConfirmation",
+ "payable": false,
+ "visibility": "public"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "transactionId",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 421,
+ "name": "ElementaryTypeName",
+ "src": "3204:4:1"
+ }
+ ],
+ "id": 422,
+ "name": "VariableDeclaration",
+ "src": "3204:18:1"
+ }
+ ],
+ "id": 423,
+ "name": "ParameterList",
+ "src": "3203:20:1"
+ },
+ {
+ "children": [],
+ "id": 439,
+ "name": "ParameterList",
+ "src": "3396:0:1"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (address)",
+ "value": "ownerExists"
+ },
+ "id": 424,
+ "name": "Identifier",
+ "src": "3247:11:1"
+ },
+ {
+ "attributes": {
+ "member_name": "sender",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "msg",
+ "value": "msg"
+ },
+ "id": 425,
+ "name": "Identifier",
+ "src": "3259:3:1"
+ }
+ ],
+ "id": 426,
+ "name": "MemberAccess",
+ "src": "3259:10:1"
+ }
+ ],
+ "id": 427,
+ "name": "ModifierInvocation",
+ "src": "3247:23:1"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (uint256,address)",
+ "value": "confirmed"
+ },
+ "id": 428,
+ "name": "Identifier",
+ "src": "3279:9:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 429,
+ "name": "Identifier",
+ "src": "3289:13:1"
+ },
+ {
+ "attributes": {
+ "member_name": "sender",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "msg",
+ "value": "msg"
+ },
+ "id": 430,
+ "name": "Identifier",
+ "src": "3304:3:1"
+ }
+ ],
+ "id": 431,
+ "name": "MemberAccess",
+ "src": "3304:10:1"
+ }
+ ],
+ "id": 432,
+ "name": "ModifierInvocation",
+ "src": "3279:36:1"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (uint256)",
+ "value": "notExecuted"
+ },
+ "id": 433,
+ "name": "Identifier",
+ "src": "3324:11:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 434,
+ "name": "Identifier",
+ "src": "3336:13:1"
+ }
+ ],
+ "id": 435,
+ "name": "ModifierInvocation",
+ "src": "3324:26:1"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (uint256)",
+ "value": "notFullyConfirmed"
+ },
+ "id": 436,
+ "name": "Identifier",
+ "src": "3359:17:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 437,
+ "name": "Identifier",
+ "src": "3377:13:1"
+ }
+ ],
+ "id": 438,
+ "name": "ModifierInvocation",
+ "src": "3359:32:1"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(address => bool)"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(uint256 => mapping(address => bool))",
+ "value": "confirmations"
+ },
+ "id": 440,
+ "name": "Identifier",
+ "src": "3406:13:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 441,
+ "name": "Identifier",
+ "src": "3420:13:1"
+ }
+ ],
+ "id": 444,
+ "name": "IndexAccess",
+ "src": "3406:28:1"
+ },
+ {
+ "attributes": {
+ "member_name": "sender",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "msg",
+ "value": "msg"
+ },
+ "id": 442,
+ "name": "Identifier",
+ "src": "3435:3:1"
+ }
+ ],
+ "id": 443,
+ "name": "MemberAccess",
+ "src": "3435:10:1"
+ }
+ ],
+ "id": 445,
+ "name": "IndexAccess",
+ "src": "3406:40:1"
+ },
+ {
+ "attributes": {
+ "hexvalue": "66616c7365",
+ "subdenomination": null,
+ "token": "false",
+ "type": "bool",
+ "value": "false"
+ },
+ "id": 446,
+ "name": "Literal",
+ "src": "3449:5:1"
+ }
+ ],
+ "id": 447,
+ "name": "Assignment",
+ "src": "3406:48:1"
+ }
+ ],
+ "id": 448,
+ "name": "ExpressionStatement",
+ "src": "3406:48:1"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (address,uint256) constant",
+ "value": "Revocation"
+ },
+ "id": 449,
+ "name": "Identifier",
+ "src": "3464:10:1"
+ },
+ {
+ "attributes": {
+ "member_name": "sender",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "msg",
+ "value": "msg"
+ },
+ "id": 450,
+ "name": "Identifier",
+ "src": "3475:3:1"
+ }
+ ],
+ "id": 451,
+ "name": "MemberAccess",
+ "src": "3475:10:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 452,
+ "name": "Identifier",
+ "src": "3487:13:1"
+ }
+ ],
+ "id": 453,
+ "name": "FunctionCall",
+ "src": "3464:37:1"
+ }
+ ],
+ "id": 454,
+ "name": "ExpressionStatement",
+ "src": "3464:37:1"
+ }
+ ],
+ "id": 455,
+ "name": "Block",
+ "src": "3396:112:1"
+ }
+ ],
+ "id": 456,
+ "name": "FunctionDefinition",
+ "src": "3176:332:1"
+ },
+ {
+ "attributes": {
+ "constant": false,
+ "name": "executeTransaction",
+ "payable": false,
+ "visibility": "public"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "transactionId",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 457,
+ "name": "ElementaryTypeName",
+ "src": "3650:4:1"
+ }
+ ],
+ "id": 458,
+ "name": "VariableDeclaration",
+ "src": "3650:18:1"
+ }
+ ],
+ "id": 459,
+ "name": "ParameterList",
+ "src": "3649:20:1"
+ },
+ {
+ "children": [],
+ "id": 469,
+ "name": "ParameterList",
+ "src": "3798:0:1"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (uint256)",
+ "value": "notExecuted"
+ },
+ "id": 460,
+ "name": "Identifier",
+ "src": "3693:11:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 461,
+ "name": "Identifier",
+ "src": "3705:13:1"
+ }
+ ],
+ "id": 462,
+ "name": "ModifierInvocation",
+ "src": "3693:26:1"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (uint256)",
+ "value": "fullyConfirmed"
+ },
+ "id": 463,
+ "name": "Identifier",
+ "src": "3728:14:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 464,
+ "name": "Identifier",
+ "src": "3743:13:1"
+ }
+ ],
+ "id": 465,
+ "name": "ModifierInvocation",
+ "src": "3728:29:1"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (uint256)",
+ "value": "pastTimeLock"
+ },
+ "id": 466,
+ "name": "Identifier",
+ "src": "3766:12:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 467,
+ "name": "Identifier",
+ "src": "3779:13:1"
+ }
+ ],
+ "id": 468,
+ "name": "ModifierInvocation",
+ "src": "3766:27:1"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "tx",
+ "type": "struct MultiSigWallet.Transaction storage pointer"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "Transaction"
+ },
+ "id": 470,
+ "name": "UserDefinedTypeName",
+ "src": "3808:11:1"
+ }
+ ],
+ "id": 471,
+ "name": "VariableDeclaration",
+ "src": "3808:22:1"
+ },
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage ref"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(uint256 => struct MultiSigWallet.Transaction storage ref)",
+ "value": "transactions"
+ },
+ "id": 472,
+ "name": "Identifier",
+ "src": "3833:12:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 473,
+ "name": "Identifier",
+ "src": "3846:13:1"
+ }
+ ],
+ "id": 474,
+ "name": "IndexAccess",
+ "src": "3833:27:1"
+ }
+ ],
+ "id": 475,
+ "name": "VariableDeclarationStatement",
+ "src": "3808:52:1"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "member_name": "executed",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage pointer",
+ "value": "tx"
+ },
+ "id": 476,
+ "name": "Identifier",
+ "src": "3870:2:1"
+ }
+ ],
+ "id": 478,
+ "name": "MemberAccess",
+ "src": "3870:11:1"
+ },
+ {
+ "attributes": {
+ "hexvalue": "74727565",
+ "subdenomination": null,
+ "token": "true",
+ "type": "bool",
+ "value": "true"
+ },
+ "id": 479,
+ "name": "Literal",
+ "src": "3884:4:1"
+ }
+ ],
+ "id": 480,
+ "name": "Assignment",
+ "src": "3870:18:1"
+ }
+ ],
+ "id": 481,
+ "name": "ExpressionStatement",
+ "src": "3870:18:1"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "bool",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function () payable returns (bool)",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "member_name": "value",
+ "type": "function (uint256) returns (function () payable returns (bool))"
+ },
+ "children": [
+ {
+ "attributes": {
+ "member_name": "call",
+ "type": "function () payable returns (bool)"
+ },
+ "children": [
+ {
+ "attributes": {
+ "member_name": "destination",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage pointer",
+ "value": "tx"
+ },
+ "id": 482,
+ "name": "Identifier",
+ "src": "3902:2:1"
+ }
+ ],
+ "id": 483,
+ "name": "MemberAccess",
+ "src": "3902:14:1"
+ }
+ ],
+ "id": 484,
+ "name": "MemberAccess",
+ "src": "3902:19:1"
+ }
+ ],
+ "id": 485,
+ "name": "MemberAccess",
+ "src": "3902:25:1"
+ },
+ {
+ "attributes": {
+ "member_name": "value",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage pointer",
+ "value": "tx"
+ },
+ "id": 486,
+ "name": "Identifier",
+ "src": "3928:2:1"
+ }
+ ],
+ "id": 487,
+ "name": "MemberAccess",
+ "src": "3928:8:1"
+ }
+ ],
+ "id": 488,
+ "name": "FunctionCall",
+ "src": "3902:35:1"
+ },
+ {
+ "attributes": {
+ "member_name": "data",
+ "type": "bytes storage ref"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage pointer",
+ "value": "tx"
+ },
+ "id": 489,
+ "name": "Identifier",
+ "src": "3938:2:1"
+ }
+ ],
+ "id": 490,
+ "name": "MemberAccess",
+ "src": "3938:7:1"
+ }
+ ],
+ "id": 491,
+ "name": "FunctionCall",
+ "src": "3902:44:1"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (uint256) constant",
+ "value": "Execution"
+ },
+ "id": 492,
+ "name": "Identifier",
+ "src": "3960:9:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 493,
+ "name": "Identifier",
+ "src": "3970:13:1"
+ }
+ ],
+ "id": 494,
+ "name": "FunctionCall",
+ "src": "3960:24:1"
+ }
+ ],
+ "id": 495,
+ "name": "ExpressionStatement",
+ "src": "3960:24:1"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (uint256) constant",
+ "value": "ExecutionFailure"
+ },
+ "id": 496,
+ "name": "Identifier",
+ "src": "4013:16:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 497,
+ "name": "Identifier",
+ "src": "4030:13:1"
+ }
+ ],
+ "id": 498,
+ "name": "FunctionCall",
+ "src": "4013:31:1"
+ }
+ ],
+ "id": 499,
+ "name": "ExpressionStatement",
+ "src": "4013:31:1"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "member_name": "executed",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage pointer",
+ "value": "tx"
+ },
+ "id": 500,
+ "name": "Identifier",
+ "src": "4058:2:1"
+ }
+ ],
+ "id": 502,
+ "name": "MemberAccess",
+ "src": "4058:11:1"
+ },
+ {
+ "attributes": {
+ "hexvalue": "66616c7365",
+ "subdenomination": null,
+ "token": "false",
+ "type": "bool",
+ "value": "false"
+ },
+ "id": 503,
+ "name": "Literal",
+ "src": "4072:5:1"
+ }
+ ],
+ "id": 504,
+ "name": "Assignment",
+ "src": "4058:19:1"
+ }
+ ],
+ "id": 505,
+ "name": "ExpressionStatement",
+ "src": "4058:19:1"
+ }
+ ],
+ "id": 506,
+ "name": "Block",
+ "src": "3999:89:1"
+ }
+ ],
+ "id": 507,
+ "name": "IfStatement",
+ "src": "3898:190:1"
+ }
+ ],
+ "id": 508,
+ "name": "Block",
+ "src": "3798:296:1"
+ }
+ ],
+ "id": 509,
+ "name": "FunctionDefinition",
+ "src": "3622:472:1"
+ },
+ {
+ "attributes": {
+ "constant": false,
+ "name": "setConfirmationTime",
+ "payable": false,
+ "visibility": "internal"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "transactionId",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 510,
+ "name": "ElementaryTypeName",
+ "src": "4233:4:1"
+ }
+ ],
+ "id": 511,
+ "name": "VariableDeclaration",
+ "src": "4233:18:1"
+ },
+ {
+ "attributes": {
+ "name": "confirmationTime",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint"
+ },
+ "id": 512,
+ "name": "ElementaryTypeName",
+ "src": "4253:4:1"
+ }
+ ],
+ "id": 513,
+ "name": "VariableDeclaration",
+ "src": "4253:21:1"
+ }
+ ],
+ "id": 514,
+ "name": "ParameterList",
+ "src": "4232:43:1"
+ },
+ {
+ "children": [],
+ "id": 515,
+ "name": "ParameterList",
+ "src": "4297:0:1"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(uint256 => uint256)",
+ "value": "confirmationTimes"
+ },
+ "id": 516,
+ "name": "Identifier",
+ "src": "4307:17:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 517,
+ "name": "Identifier",
+ "src": "4325:13:1"
+ }
+ ],
+ "id": 518,
+ "name": "IndexAccess",
+ "src": "4307:32:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "confirmationTime"
+ },
+ "id": 519,
+ "name": "Identifier",
+ "src": "4342:16:1"
+ }
+ ],
+ "id": 520,
+ "name": "Assignment",
+ "src": "4307:51:1"
+ }
+ ],
+ "id": 521,
+ "name": "ExpressionStatement",
+ "src": "4307:51:1"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (uint256,uint256) constant",
+ "value": "ConfirmationTimeSet"
+ },
+ "id": 522,
+ "name": "Identifier",
+ "src": "4368:19:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 523,
+ "name": "Identifier",
+ "src": "4388:13:1"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "confirmationTime"
+ },
+ "id": 524,
+ "name": "Identifier",
+ "src": "4403:16:1"
+ }
+ ],
+ "id": 525,
+ "name": "FunctionCall",
+ "src": "4368:52:1"
+ }
+ ],
+ "id": 526,
+ "name": "ExpressionStatement",
+ "src": "4368:52:1"
+ }
+ ],
+ "id": 527,
+ "name": "Block",
+ "src": "4297:130:1"
+ }
+ ],
+ "id": 528,
+ "name": "FunctionDefinition",
+ "src": "4204:223:1"
+ }
+ ],
+ "id": 529,
+ "name": "ContractDefinition",
+ "src": "835:3594:1"
+ }
+ ],
+ "name": "SourceUnit"
+ }
},
- "current/test/TestAssetProxyOwner/TestAssetProxyOwner.sol": {
- "id": 3
+ "2.0.0/protocol/AssetProxyOwner/AssetProxyOwner.sol": {
+ "id": "2",
+ "legacyAST": {
+ "children": [
+ {
+ "attributes": {
+ "literals": [
+ "solidity",
+ "0.4",
+ ".10"
+ ]
+ },
+ "id": 74,
+ "name": "PragmaDirective",
+ "src": "580:23:2"
+ },
+ {
+ "attributes": {
+ "file": "../../multisig/MultiSigWalletWithTimeLock.sol"
+ },
+ "id": 75,
+ "name": "ImportDirective",
+ "src": "605:55:2"
+ },
+ {
+ "attributes": {
+ "fullyImplemented": true,
+ "isLibrary": false,
+ "linearizedBaseContracts": [
+ 275,
+ 529,
+ 1492
+ ],
+ "name": "AssetProxyOwner"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "MultiSigWalletWithTimeLock"
+ },
+ "id": 76,
+ "name": "UserDefinedTypeName",
+ "src": "695:26:2"
+ }
+ ],
+ "id": 77,
+ "name": "InheritanceSpecifier",
+ "src": "695:26:2"
+ },
+ {
+ "attributes": {
+ "name": "AssetProxyRegistration"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "assetProxyContract",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 78,
+ "name": "ElementaryTypeName",
+ "src": "758:7:2"
+ }
+ ],
+ "id": 79,
+ "name": "VariableDeclaration",
+ "src": "758:26:2"
+ },
+ {
+ "attributes": {
+ "name": "isRegistered",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "bool"
+ },
+ "id": 80,
+ "name": "ElementaryTypeName",
+ "src": "786:4:2"
+ }
+ ],
+ "id": 81,
+ "name": "VariableDeclaration",
+ "src": "786:17:2"
+ }
+ ],
+ "id": 82,
+ "name": "ParameterList",
+ "src": "757:47:2"
+ }
+ ],
+ "id": 83,
+ "name": "EventDefinition",
+ "src": "729:76:2"
+ },
+ {
+ "attributes": {
+ "name": "isAssetProxyRegistered",
+ "type": "mapping(address => bool)"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 84,
+ "name": "ElementaryTypeName",
+ "src": "990:7:2"
+ },
+ {
+ "attributes": {
+ "name": "bool"
+ },
+ "id": 85,
+ "name": "ElementaryTypeName",
+ "src": "1001:4:2"
+ }
+ ],
+ "id": 86,
+ "name": "Mapping",
+ "src": "981:25:2"
+ }
+ ],
+ "id": 87,
+ "name": "VariableDeclaration",
+ "src": "981:55:2"
+ },
+ {
+ "attributes": {
+ "name": "REMOVE_AUTHORIZED_ADDRESS_AT_INDEX_SELECTOR",
+ "type": "bytes4"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "bytes4"
+ },
+ "id": 88,
+ "name": "ElementaryTypeName",
+ "src": "1043:6:2"
+ },
+ {
+ "attributes": {
+ "type": "bytes4",
+ "type_conversion": true
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "type(bytes4)",
+ "value": "bytes4"
+ },
+ "id": 89,
+ "name": "ElementaryTypeNameExpression",
+ "src": "1114:6:2"
+ },
+ {
+ "attributes": {
+ "type": "bytes32",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function () returns (bytes32)",
+ "value": "keccak256"
+ },
+ "id": 90,
+ "name": "Identifier",
+ "src": "1121:9:2"
+ },
+ {
+ "attributes": {
+ "hexvalue": "72656d6f7665417574686f72697a6564416464726573734174496e64657828616464726573732c75696e7432353629",
+ "subdenomination": null,
+ "token": null,
+ "type": "literal_string \"removeAuthorizedAddressAtIndex(address,uint256)\"",
+ "value": "removeAuthorizedAddressAtIndex(address,uint256)"
+ },
+ "id": 91,
+ "name": "Literal",
+ "src": "1131:49:2"
+ }
+ ],
+ "id": 92,
+ "name": "FunctionCall",
+ "src": "1121:60:2"
+ }
+ ],
+ "id": 93,
+ "name": "FunctionCall",
+ "src": "1114:68:2"
+ }
+ ],
+ "id": 94,
+ "name": "VariableDeclaration",
+ "src": "1043:139:2"
+ },
+ {
+ "attributes": {
+ "name": "validRemoveAuthorizedAddressAtIndexTx"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "transactionId",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint256"
+ },
+ "id": 95,
+ "name": "ElementaryTypeName",
+ "src": "1385:7:2"
+ }
+ ],
+ "id": 96,
+ "name": "VariableDeclaration",
+ "src": "1385:21:2"
+ }
+ ],
+ "id": 97,
+ "name": "ParameterList",
+ "src": "1384:23:2"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "tx",
+ "type": "struct MultiSigWallet.Transaction storage pointer"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "Transaction"
+ },
+ "id": 98,
+ "name": "UserDefinedTypeName",
+ "src": "1418:11:2"
+ }
+ ],
+ "id": 99,
+ "name": "VariableDeclaration",
+ "src": "1418:22:2"
+ },
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage ref"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(uint256 => struct MultiSigWallet.Transaction storage ref)",
+ "value": "transactions"
+ },
+ "id": 100,
+ "name": "Identifier",
+ "src": "1443:12:2"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 101,
+ "name": "Identifier",
+ "src": "1456:13:2"
+ }
+ ],
+ "id": 102,
+ "name": "IndexAccess",
+ "src": "1443:27:2"
+ }
+ ],
+ "id": 103,
+ "name": "VariableDeclarationStatement",
+ "src": "1418:52:2"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (bool)",
+ "value": "require"
+ },
+ "id": 104,
+ "name": "Identifier",
+ "src": "1480:7:2"
+ },
+ {
+ "attributes": {
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(address => bool)",
+ "value": "isAssetProxyRegistered"
+ },
+ "id": 105,
+ "name": "Identifier",
+ "src": "1488:22:2"
+ },
+ {
+ "attributes": {
+ "member_name": "destination",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage pointer",
+ "value": "tx"
+ },
+ "id": 106,
+ "name": "Identifier",
+ "src": "1511:2:2"
+ }
+ ],
+ "id": 107,
+ "name": "MemberAccess",
+ "src": "1511:14:2"
+ }
+ ],
+ "id": 108,
+ "name": "IndexAccess",
+ "src": "1488:38:2"
+ }
+ ],
+ "id": 109,
+ "name": "FunctionCall",
+ "src": "1480:47:2"
+ }
+ ],
+ "id": 110,
+ "name": "ExpressionStatement",
+ "src": "1480:47:2"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (bool)",
+ "value": "require"
+ },
+ "id": 111,
+ "name": "Identifier",
+ "src": "1537:7:2"
+ },
+ {
+ "attributes": {
+ "operator": "==",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "bytes4",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (bytes memory,uint256) returns (bytes4)",
+ "value": "readBytes4"
+ },
+ "id": 112,
+ "name": "Identifier",
+ "src": "1545:10:2"
+ },
+ {
+ "attributes": {
+ "member_name": "data",
+ "type": "bytes storage ref"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage pointer",
+ "value": "tx"
+ },
+ "id": 113,
+ "name": "Identifier",
+ "src": "1556:2:2"
+ }
+ ],
+ "id": 114,
+ "name": "MemberAccess",
+ "src": "1556:7:2"
+ },
+ {
+ "attributes": {
+ "hexvalue": "30",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 0",
+ "value": "0"
+ },
+ "id": 115,
+ "name": "Literal",
+ "src": "1565:1:2"
+ }
+ ],
+ "id": 116,
+ "name": "FunctionCall",
+ "src": "1545:22:2"
+ },
+ {
+ "attributes": {
+ "type": "bytes4",
+ "value": "REMOVE_AUTHORIZED_ADDRESS_AT_INDEX_SELECTOR"
+ },
+ "id": 117,
+ "name": "Identifier",
+ "src": "1571:43:2"
+ }
+ ],
+ "id": 118,
+ "name": "BinaryOperation",
+ "src": "1545:69:2"
+ }
+ ],
+ "id": 119,
+ "name": "FunctionCall",
+ "src": "1537:78:2"
+ }
+ ],
+ "id": 120,
+ "name": "ExpressionStatement",
+ "src": "1537:78:2"
+ },
+ {
+ "id": 121,
+ "name": "PlaceholderStatement",
+ "src": "1625:1:2"
+ }
+ ],
+ "id": 122,
+ "name": "Block",
+ "src": "1408:225:2"
+ }
+ ],
+ "id": 123,
+ "name": "ModifierDefinition",
+ "src": "1338:295:2"
+ },
+ {
+ "attributes": {
+ "constant": false,
+ "name": "AssetProxyOwner",
+ "payable": false,
+ "visibility": "public"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "_owners",
+ "type": "address[] memory"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 124,
+ "name": "ElementaryTypeName",
+ "src": "2131:7:2"
+ }
+ ],
+ "id": 125,
+ "name": "ArrayTypeName",
+ "src": "2131:9:2"
+ }
+ ],
+ "id": 126,
+ "name": "VariableDeclaration",
+ "src": "2131:24:2"
+ },
+ {
+ "attributes": {
+ "name": "_assetProxyContracts",
+ "type": "address[] memory"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 127,
+ "name": "ElementaryTypeName",
+ "src": "2165:7:2"
+ }
+ ],
+ "id": 128,
+ "name": "ArrayTypeName",
+ "src": "2165:9:2"
+ }
+ ],
+ "id": 129,
+ "name": "VariableDeclaration",
+ "src": "2165:37:2"
+ },
+ {
+ "attributes": {
+ "name": "_required",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint256"
+ },
+ "id": 130,
+ "name": "ElementaryTypeName",
+ "src": "2212:7:2"
+ }
+ ],
+ "id": 131,
+ "name": "VariableDeclaration",
+ "src": "2212:17:2"
+ },
+ {
+ "attributes": {
+ "name": "_secondsTimeLocked",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint256"
+ },
+ "id": 132,
+ "name": "ElementaryTypeName",
+ "src": "2239:7:2"
+ }
+ ],
+ "id": 133,
+ "name": "VariableDeclaration",
+ "src": "2239:26:2"
+ }
+ ],
+ "id": 134,
+ "name": "ParameterList",
+ "src": "2121:150:2"
+ },
+ {
+ "children": [],
+ "id": 140,
+ "name": "ParameterList",
+ "src": "2366:0:2"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "type(contract MultiSigWalletWithTimeLock)",
+ "value": "MultiSigWalletWithTimeLock"
+ },
+ "id": 135,
+ "name": "Identifier",
+ "src": "2295:26:2"
+ },
+ {
+ "attributes": {
+ "type": "address[] memory",
+ "value": "_owners"
+ },
+ "id": 136,
+ "name": "Identifier",
+ "src": "2322:7:2"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "_required"
+ },
+ "id": 137,
+ "name": "Identifier",
+ "src": "2331:9:2"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "_secondsTimeLocked"
+ },
+ "id": 138,
+ "name": "Identifier",
+ "src": "2342:18:2"
+ }
+ ],
+ "id": 139,
+ "name": "ModifierInvocation",
+ "src": "2295:66:2"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "i",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint256"
+ },
+ "id": 141,
+ "name": "ElementaryTypeName",
+ "src": "2381:7:2"
+ }
+ ],
+ "id": 142,
+ "name": "VariableDeclaration",
+ "src": "2381:9:2"
+ },
+ {
+ "attributes": {
+ "hexvalue": "30",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 0",
+ "value": "0"
+ },
+ "id": 143,
+ "name": "Literal",
+ "src": "2393:1:2"
+ }
+ ],
+ "id": 144,
+ "name": "VariableDeclarationStatement",
+ "src": "2381:13:2"
+ },
+ {
+ "attributes": {
+ "operator": "<",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 145,
+ "name": "Identifier",
+ "src": "2396:1:2"
+ },
+ {
+ "attributes": {
+ "member_name": "length",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] memory",
+ "value": "_assetProxyContracts"
+ },
+ "id": 146,
+ "name": "Identifier",
+ "src": "2400:20:2"
+ }
+ ],
+ "id": 147,
+ "name": "MemberAccess",
+ "src": "2400:27:2"
+ }
+ ],
+ "id": 148,
+ "name": "BinaryOperation",
+ "src": "2396:31:2"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "++",
+ "prefix": false,
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 149,
+ "name": "Identifier",
+ "src": "2429:1:2"
+ }
+ ],
+ "id": 150,
+ "name": "UnaryOperation",
+ "src": "2429:3:2"
+ }
+ ],
+ "id": 151,
+ "name": "ExpressionStatement",
+ "src": "2429:3:2"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "assetProxy",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 152,
+ "name": "ElementaryTypeName",
+ "src": "2448:7:2"
+ }
+ ],
+ "id": 153,
+ "name": "VariableDeclaration",
+ "src": "2448:18:2"
+ },
+ {
+ "attributes": {
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address[] memory",
+ "value": "_assetProxyContracts"
+ },
+ "id": 154,
+ "name": "Identifier",
+ "src": "2469:20:2"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "i"
+ },
+ "id": 155,
+ "name": "Identifier",
+ "src": "2490:1:2"
+ }
+ ],
+ "id": 156,
+ "name": "IndexAccess",
+ "src": "2469:23:2"
+ }
+ ],
+ "id": 157,
+ "name": "VariableDeclarationStatement",
+ "src": "2448:44:2"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (bool)",
+ "value": "require"
+ },
+ "id": 158,
+ "name": "Identifier",
+ "src": "2506:7:2"
+ },
+ {
+ "attributes": {
+ "operator": "!=",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "address",
+ "value": "assetProxy"
+ },
+ "id": 159,
+ "name": "Identifier",
+ "src": "2514:10:2"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "type_conversion": true
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "type(address)",
+ "value": "address"
+ },
+ "id": 160,
+ "name": "ElementaryTypeNameExpression",
+ "src": "2528:7:2"
+ },
+ {
+ "attributes": {
+ "hexvalue": "30",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 0",
+ "value": "0"
+ },
+ "id": 161,
+ "name": "Literal",
+ "src": "2536:1:2"
+ }
+ ],
+ "id": 162,
+ "name": "FunctionCall",
+ "src": "2528:10:2"
+ }
+ ],
+ "id": 163,
+ "name": "BinaryOperation",
+ "src": "2514:24:2"
+ }
+ ],
+ "id": 164,
+ "name": "FunctionCall",
+ "src": "2506:33:2"
+ }
+ ],
+ "id": 165,
+ "name": "ExpressionStatement",
+ "src": "2506:33:2"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(address => bool)",
+ "value": "isAssetProxyRegistered"
+ },
+ "id": 166,
+ "name": "Identifier",
+ "src": "2553:22:2"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "assetProxy"
+ },
+ "id": 167,
+ "name": "Identifier",
+ "src": "2576:10:2"
+ }
+ ],
+ "id": 168,
+ "name": "IndexAccess",
+ "src": "2553:34:2"
+ },
+ {
+ "attributes": {
+ "hexvalue": "74727565",
+ "subdenomination": null,
+ "token": "true",
+ "type": "bool",
+ "value": "true"
+ },
+ "id": 169,
+ "name": "Literal",
+ "src": "2590:4:2"
+ }
+ ],
+ "id": 170,
+ "name": "Assignment",
+ "src": "2553:41:2"
+ }
+ ],
+ "id": 171,
+ "name": "ExpressionStatement",
+ "src": "2553:41:2"
+ }
+ ],
+ "id": 172,
+ "name": "Block",
+ "src": "2434:171:2"
+ }
+ ],
+ "id": 173,
+ "name": "ForStatement",
+ "src": "2376:229:2"
+ }
+ ],
+ "id": 174,
+ "name": "Block",
+ "src": "2366:245:2"
+ }
+ ],
+ "id": 175,
+ "name": "FunctionDefinition",
+ "src": "2097:514:2"
+ },
+ {
+ "attributes": {
+ "constant": false,
+ "name": "registerAssetProxy",
+ "payable": false,
+ "visibility": "public"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "assetProxyContract",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 176,
+ "name": "ElementaryTypeName",
+ "src": "2923:7:2"
+ }
+ ],
+ "id": 177,
+ "name": "VariableDeclaration",
+ "src": "2923:26:2"
+ },
+ {
+ "attributes": {
+ "name": "isRegistered",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "bool"
+ },
+ "id": 178,
+ "name": "ElementaryTypeName",
+ "src": "2951:4:2"
+ }
+ ],
+ "id": 179,
+ "name": "VariableDeclaration",
+ "src": "2951:17:2"
+ }
+ ],
+ "id": 180,
+ "name": "ParameterList",
+ "src": "2922:47:2"
+ },
+ {
+ "children": [],
+ "id": 186,
+ "name": "ParameterList",
+ "src": "3044:0:2"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier ()",
+ "value": "onlyWallet"
+ },
+ "id": 181,
+ "name": "Identifier",
+ "src": "2993:10:2"
+ }
+ ],
+ "id": 182,
+ "name": "ModifierInvocation",
+ "src": "2993:10:2"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (address)",
+ "value": "notNull"
+ },
+ "id": 183,
+ "name": "Identifier",
+ "src": "3012:7:2"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "assetProxyContract"
+ },
+ "id": 184,
+ "name": "Identifier",
+ "src": "3020:18:2"
+ }
+ ],
+ "id": 185,
+ "name": "ModifierInvocation",
+ "src": "3012:27:2"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(address => bool)",
+ "value": "isAssetProxyRegistered"
+ },
+ "id": 187,
+ "name": "Identifier",
+ "src": "3054:22:2"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "assetProxyContract"
+ },
+ "id": 188,
+ "name": "Identifier",
+ "src": "3077:18:2"
+ }
+ ],
+ "id": 189,
+ "name": "IndexAccess",
+ "src": "3054:42:2"
+ },
+ {
+ "attributes": {
+ "type": "bool",
+ "value": "isRegistered"
+ },
+ "id": 190,
+ "name": "Identifier",
+ "src": "3099:12:2"
+ }
+ ],
+ "id": 191,
+ "name": "Assignment",
+ "src": "3054:57:2"
+ }
+ ],
+ "id": 192,
+ "name": "ExpressionStatement",
+ "src": "3054:57:2"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (address,bool) constant",
+ "value": "AssetProxyRegistration"
+ },
+ "id": 193,
+ "name": "Identifier",
+ "src": "3121:22:2"
+ },
+ {
+ "attributes": {
+ "type": "address",
+ "value": "assetProxyContract"
+ },
+ "id": 194,
+ "name": "Identifier",
+ "src": "3144:18:2"
+ },
+ {
+ "attributes": {
+ "type": "bool",
+ "value": "isRegistered"
+ },
+ "id": 195,
+ "name": "Identifier",
+ "src": "3164:12:2"
+ }
+ ],
+ "id": 196,
+ "name": "FunctionCall",
+ "src": "3121:56:2"
+ }
+ ],
+ "id": 197,
+ "name": "ExpressionStatement",
+ "src": "3121:56:2"
+ }
+ ],
+ "id": 198,
+ "name": "Block",
+ "src": "3044:140:2"
+ }
+ ],
+ "id": 199,
+ "name": "FunctionDefinition",
+ "src": "2895:289:2"
+ },
+ {
+ "attributes": {
+ "constant": false,
+ "name": "executeRemoveAuthorizedAddressAtIndex",
+ "payable": false,
+ "visibility": "public"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "transactionId",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint256"
+ },
+ "id": 200,
+ "name": "ElementaryTypeName",
+ "src": "3367:7:2"
+ }
+ ],
+ "id": 201,
+ "name": "VariableDeclaration",
+ "src": "3367:21:2"
+ }
+ ],
+ "id": 202,
+ "name": "ParameterList",
+ "src": "3366:23:2"
+ },
+ {
+ "children": [],
+ "id": 212,
+ "name": "ParameterList",
+ "src": "3543:0:2"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (uint256)",
+ "value": "notExecuted"
+ },
+ "id": 203,
+ "name": "Identifier",
+ "src": "3413:11:2"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 204,
+ "name": "Identifier",
+ "src": "3425:13:2"
+ }
+ ],
+ "id": 205,
+ "name": "ModifierInvocation",
+ "src": "3413:26:2"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (uint256)",
+ "value": "fullyConfirmed"
+ },
+ "id": 206,
+ "name": "Identifier",
+ "src": "3448:14:2"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 207,
+ "name": "Identifier",
+ "src": "3463:13:2"
+ }
+ ],
+ "id": 208,
+ "name": "ModifierInvocation",
+ "src": "3448:29:2"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (uint256)",
+ "value": "validRemoveAuthorizedAddressAtIndexTx"
+ },
+ "id": 209,
+ "name": "Identifier",
+ "src": "3486:37:2"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 210,
+ "name": "Identifier",
+ "src": "3524:13:2"
+ }
+ ],
+ "id": 211,
+ "name": "ModifierInvocation",
+ "src": "3486:52:2"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "tx",
+ "type": "struct MultiSigWallet.Transaction storage pointer"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "Transaction"
+ },
+ "id": 213,
+ "name": "UserDefinedTypeName",
+ "src": "3553:11:2"
+ }
+ ],
+ "id": 214,
+ "name": "VariableDeclaration",
+ "src": "3553:22:2"
+ },
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage ref"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "mapping(uint256 => struct MultiSigWallet.Transaction storage ref)",
+ "value": "transactions"
+ },
+ "id": 215,
+ "name": "Identifier",
+ "src": "3578:12:2"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 216,
+ "name": "Identifier",
+ "src": "3591:13:2"
+ }
+ ],
+ "id": 217,
+ "name": "IndexAccess",
+ "src": "3578:27:2"
+ }
+ ],
+ "id": 218,
+ "name": "VariableDeclarationStatement",
+ "src": "3553:52:2"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "member_name": "executed",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage pointer",
+ "value": "tx"
+ },
+ "id": 219,
+ "name": "Identifier",
+ "src": "3615:2:2"
+ }
+ ],
+ "id": 221,
+ "name": "MemberAccess",
+ "src": "3615:11:2"
+ },
+ {
+ "attributes": {
+ "hexvalue": "74727565",
+ "subdenomination": null,
+ "token": "true",
+ "type": "bool",
+ "value": "true"
+ },
+ "id": 222,
+ "name": "Literal",
+ "src": "3629:4:2"
+ }
+ ],
+ "id": 223,
+ "name": "Assignment",
+ "src": "3615:18:2"
+ }
+ ],
+ "id": 224,
+ "name": "ExpressionStatement",
+ "src": "3615:18:2"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "bool",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function () payable returns (bool)",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "member_name": "value",
+ "type": "function (uint256) returns (function () payable returns (bool))"
+ },
+ "children": [
+ {
+ "attributes": {
+ "member_name": "call",
+ "type": "function () payable returns (bool)"
+ },
+ "children": [
+ {
+ "attributes": {
+ "member_name": "destination",
+ "type": "address"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage pointer",
+ "value": "tx"
+ },
+ "id": 225,
+ "name": "Identifier",
+ "src": "3701:2:2"
+ }
+ ],
+ "id": 226,
+ "name": "MemberAccess",
+ "src": "3701:14:2"
+ }
+ ],
+ "id": 227,
+ "name": "MemberAccess",
+ "src": "3701:19:2"
+ }
+ ],
+ "id": 228,
+ "name": "MemberAccess",
+ "src": "3701:25:2"
+ },
+ {
+ "attributes": {
+ "member_name": "value",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage pointer",
+ "value": "tx"
+ },
+ "id": 229,
+ "name": "Identifier",
+ "src": "3727:2:2"
+ }
+ ],
+ "id": 230,
+ "name": "MemberAccess",
+ "src": "3727:8:2"
+ }
+ ],
+ "id": 231,
+ "name": "FunctionCall",
+ "src": "3701:35:2"
+ },
+ {
+ "attributes": {
+ "member_name": "data",
+ "type": "bytes storage ref"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage pointer",
+ "value": "tx"
+ },
+ "id": 232,
+ "name": "Identifier",
+ "src": "3737:2:2"
+ }
+ ],
+ "id": 233,
+ "name": "MemberAccess",
+ "src": "3737:7:2"
+ }
+ ],
+ "id": 234,
+ "name": "FunctionCall",
+ "src": "3701:44:2"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (uint256) constant",
+ "value": "Execution"
+ },
+ "id": 235,
+ "name": "Identifier",
+ "src": "3759:9:2"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 236,
+ "name": "Identifier",
+ "src": "3769:13:2"
+ }
+ ],
+ "id": 237,
+ "name": "FunctionCall",
+ "src": "3759:24:2"
+ }
+ ],
+ "id": 238,
+ "name": "ExpressionStatement",
+ "src": "3759:24:2"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (uint256) constant",
+ "value": "ExecutionFailure"
+ },
+ "id": 239,
+ "name": "Identifier",
+ "src": "3812:16:2"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "transactionId"
+ },
+ "id": 240,
+ "name": "Identifier",
+ "src": "3829:13:2"
+ }
+ ],
+ "id": 241,
+ "name": "FunctionCall",
+ "src": "3812:31:2"
+ }
+ ],
+ "id": 242,
+ "name": "ExpressionStatement",
+ "src": "3812:31:2"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "member_name": "executed",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "struct MultiSigWallet.Transaction storage pointer",
+ "value": "tx"
+ },
+ "id": 243,
+ "name": "Identifier",
+ "src": "3857:2:2"
+ }
+ ],
+ "id": 245,
+ "name": "MemberAccess",
+ "src": "3857:11:2"
+ },
+ {
+ "attributes": {
+ "hexvalue": "66616c7365",
+ "subdenomination": null,
+ "token": "false",
+ "type": "bool",
+ "value": "false"
+ },
+ "id": 246,
+ "name": "Literal",
+ "src": "3871:5:2"
+ }
+ ],
+ "id": 247,
+ "name": "Assignment",
+ "src": "3857:19:2"
+ }
+ ],
+ "id": 248,
+ "name": "ExpressionStatement",
+ "src": "3857:19:2"
+ }
+ ],
+ "id": 249,
+ "name": "Block",
+ "src": "3798:89:2"
+ }
+ ],
+ "id": 250,
+ "name": "IfStatement",
+ "src": "3697:190:2"
+ }
+ ],
+ "id": 251,
+ "name": "Block",
+ "src": "3543:350:2"
+ }
+ ],
+ "id": 252,
+ "name": "FunctionDefinition",
+ "src": "3320:573:2"
+ },
+ {
+ "attributes": {
+ "constant": false,
+ "name": "readBytes4",
+ "payable": false,
+ "visibility": "internal"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "b",
+ "type": "bytes memory"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "bytes"
+ },
+ "id": 253,
+ "name": "ElementaryTypeName",
+ "src": "4164:5:2"
+ }
+ ],
+ "id": 254,
+ "name": "VariableDeclaration",
+ "src": "4164:14:2"
+ },
+ {
+ "attributes": {
+ "name": "index",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint256"
+ },
+ "id": 255,
+ "name": "ElementaryTypeName",
+ "src": "4188:7:2"
+ }
+ ],
+ "id": 256,
+ "name": "VariableDeclaration",
+ "src": "4188:13:2"
+ }
+ ],
+ "id": 257,
+ "name": "ParameterList",
+ "src": "4154:53:2"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "result",
+ "type": "bytes4"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "bytes4"
+ },
+ "id": 258,
+ "name": "ElementaryTypeName",
+ "src": "4242:6:2"
+ }
+ ],
+ "id": 259,
+ "name": "VariableDeclaration",
+ "src": "4242:13:2"
+ }
+ ],
+ "id": 260,
+ "name": "ParameterList",
+ "src": "4241:15:2"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "tuple()",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (bool)",
+ "value": "require"
+ },
+ "id": 261,
+ "name": "Identifier",
+ "src": "4271:7:2"
+ },
+ {
+ "attributes": {
+ "operator": ">=",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "member_name": "length",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "bytes memory",
+ "value": "b"
+ },
+ "id": 262,
+ "name": "Identifier",
+ "src": "4279:1:2"
+ }
+ ],
+ "id": 263,
+ "name": "MemberAccess",
+ "src": "4279:8:2"
+ },
+ {
+ "attributes": {
+ "operator": "+",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "index"
+ },
+ "id": 264,
+ "name": "Identifier",
+ "src": "4291:5:2"
+ },
+ {
+ "attributes": {
+ "hexvalue": "34",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 4",
+ "value": "4"
+ },
+ "id": 265,
+ "name": "Literal",
+ "src": "4299:1:2"
+ }
+ ],
+ "id": 266,
+ "name": "BinaryOperation",
+ "src": "4291:9:2"
+ }
+ ],
+ "id": 267,
+ "name": "BinaryOperation",
+ "src": "4279:21:2"
+ }
+ ],
+ "id": 268,
+ "name": "FunctionCall",
+ "src": "4271:30:2"
+ }
+ ],
+ "id": 269,
+ "name": "ExpressionStatement",
+ "src": "4271:30:2"
+ },
+ {
+ "children": [],
+ "id": 270,
+ "name": "InlineAssembly",
+ "src": "4311:281:2"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "bytes4",
+ "value": "result"
+ },
+ "id": 271,
+ "name": "Identifier",
+ "src": "4593:6:2"
+ }
+ ],
+ "id": 272,
+ "name": "Return",
+ "src": "4586:13:2"
+ }
+ ],
+ "id": 273,
+ "name": "Block",
+ "src": "4261:345:2"
+ }
+ ],
+ "id": 274,
+ "name": "FunctionDefinition",
+ "src": "4135:471:2"
+ }
+ ],
+ "id": 275,
+ "name": "ContractDefinition",
+ "src": "663:3945:2"
+ }
+ ],
+ "name": "SourceUnit"
+ }
},
- "current/utils/LibBytes/LibBytes.sol": {
- "id": 4
+ "2.0.0/test/TestAssetProxyOwner/TestAssetProxyOwner.sol": {
+ "id": "3",
+ "legacyAST": {
+ "children": [
+ {
+ "attributes": {
+ "literals": [
+ "solidity",
+ "0.4",
+ ".10"
+ ]
+ },
+ "id": 1,
+ "name": "PragmaDirective",
+ "src": "580:23:3"
+ },
+ {
+ "attributes": {
+ "file": "../../protocol/AssetProxyOwner/AssetProxyOwner.sol"
+ },
+ "id": 2,
+ "name": "ImportDirective",
+ "src": "605:60:3"
+ },
+ {
+ "attributes": {
+ "fullyImplemented": true,
+ "isLibrary": false,
+ "linearizedBaseContracts": [
+ 72,
+ 275,
+ 529,
+ 1492
+ ],
+ "name": "TestAssetProxyOwner"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "AssetProxyOwner"
+ },
+ "id": 3,
+ "name": "UserDefinedTypeName",
+ "src": "739:15:3"
+ }
+ ],
+ "id": 4,
+ "name": "InheritanceSpecifier",
+ "src": "739:15:3"
+ },
+ {
+ "attributes": {
+ "constant": false,
+ "name": "TestAssetProxyOwner",
+ "payable": false,
+ "visibility": "public"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "_owners",
+ "type": "address[] memory"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 5,
+ "name": "ElementaryTypeName",
+ "src": "800:7:3"
+ }
+ ],
+ "id": 6,
+ "name": "ArrayTypeName",
+ "src": "800:9:3"
+ }
+ ],
+ "id": 7,
+ "name": "VariableDeclaration",
+ "src": "800:24:3"
+ },
+ {
+ "attributes": {
+ "name": "_assetProxyContracts",
+ "type": "address[] memory"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "address"
+ },
+ "id": 8,
+ "name": "ElementaryTypeName",
+ "src": "834:7:3"
+ }
+ ],
+ "id": 9,
+ "name": "ArrayTypeName",
+ "src": "834:9:3"
+ }
+ ],
+ "id": 10,
+ "name": "VariableDeclaration",
+ "src": "834:37:3"
+ },
+ {
+ "attributes": {
+ "name": "_required",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint256"
+ },
+ "id": 11,
+ "name": "ElementaryTypeName",
+ "src": "881:7:3"
+ }
+ ],
+ "id": 12,
+ "name": "VariableDeclaration",
+ "src": "881:17:3"
+ },
+ {
+ "attributes": {
+ "name": "_secondsTimeLocked",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint256"
+ },
+ "id": 13,
+ "name": "ElementaryTypeName",
+ "src": "908:7:3"
+ }
+ ],
+ "id": 14,
+ "name": "VariableDeclaration",
+ "src": "908:26:3"
+ }
+ ],
+ "id": 15,
+ "name": "ParameterList",
+ "src": "790:150:3"
+ },
+ {
+ "children": [],
+ "id": 22,
+ "name": "ParameterList",
+ "src": "1046:0:3"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "type(contract AssetProxyOwner)",
+ "value": "AssetProxyOwner"
+ },
+ "id": 16,
+ "name": "Identifier",
+ "src": "964:15:3"
+ },
+ {
+ "attributes": {
+ "type": "address[] memory",
+ "value": "_owners"
+ },
+ "id": 17,
+ "name": "Identifier",
+ "src": "980:7:3"
+ },
+ {
+ "attributes": {
+ "type": "address[] memory",
+ "value": "_assetProxyContracts"
+ },
+ "id": 18,
+ "name": "Identifier",
+ "src": "989:20:3"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "_required"
+ },
+ "id": 19,
+ "name": "Identifier",
+ "src": "1011:9:3"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "_secondsTimeLocked"
+ },
+ "id": 20,
+ "name": "Identifier",
+ "src": "1022:18:3"
+ }
+ ],
+ "id": 21,
+ "name": "ModifierInvocation",
+ "src": "964:77:3"
+ },
+ {
+ "children": [],
+ "id": 23,
+ "name": "Block",
+ "src": "1046:2:3"
+ }
+ ],
+ "id": 24,
+ "name": "FunctionDefinition",
+ "src": "762:286:3"
+ },
+ {
+ "attributes": {
+ "constant": false,
+ "name": "testValidRemoveAuthorizedAddressAtIndexTx",
+ "payable": false,
+ "visibility": "public"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "id",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint256"
+ },
+ "id": 25,
+ "name": "ElementaryTypeName",
+ "src": "1109:7:3"
+ }
+ ],
+ "id": 26,
+ "name": "VariableDeclaration",
+ "src": "1109:10:3"
+ }
+ ],
+ "id": 27,
+ "name": "ParameterList",
+ "src": "1108:12:3"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "bool"
+ },
+ "id": 31,
+ "name": "ElementaryTypeName",
+ "src": "1203:4:3"
+ }
+ ],
+ "id": 32,
+ "name": "VariableDeclaration",
+ "src": "1203:4:3"
+ }
+ ],
+ "id": 33,
+ "name": "ParameterList",
+ "src": "1202:6:3"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "modifier (uint256)",
+ "value": "validRemoveAuthorizedAddressAtIndexTx"
+ },
+ "id": 28,
+ "name": "Identifier",
+ "src": "1144:37:3"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "id"
+ },
+ "id": 29,
+ "name": "Identifier",
+ "src": "1182:2:3"
+ }
+ ],
+ "id": 30,
+ "name": "ModifierInvocation",
+ "src": "1144:41:3"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "hexvalue": "74727565",
+ "subdenomination": null,
+ "token": "true",
+ "type": "bool",
+ "value": "true"
+ },
+ "id": 34,
+ "name": "Literal",
+ "src": "1292:4:3"
+ }
+ ],
+ "id": 35,
+ "name": "Return",
+ "src": "1285:11:3"
+ }
+ ],
+ "id": 36,
+ "name": "Block",
+ "src": "1213:90:3"
+ }
+ ],
+ "id": 37,
+ "name": "FunctionDefinition",
+ "src": "1058:245:3"
+ },
+ {
+ "attributes": {
+ "constant": false,
+ "name": "isFunctionRemoveAuthorizedAddressAtIndex",
+ "payable": false,
+ "visibility": "public"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "data",
+ "type": "bytes memory"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "bytes"
+ },
+ "id": 38,
+ "name": "ElementaryTypeName",
+ "src": "1588:5:3"
+ }
+ ],
+ "id": 39,
+ "name": "VariableDeclaration",
+ "src": "1588:17:3"
+ }
+ ],
+ "id": 40,
+ "name": "ParameterList",
+ "src": "1587:19:3"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "bool"
+ },
+ "id": 41,
+ "name": "ElementaryTypeName",
+ "src": "1639:4:3"
+ }
+ ],
+ "id": 42,
+ "name": "VariableDeclaration",
+ "src": "1639:4:3"
+ }
+ ],
+ "id": 43,
+ "name": "ParameterList",
+ "src": "1638:6:3"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "==",
+ "type": "bool"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "bytes4",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (bytes memory,uint256) returns (bytes4)",
+ "value": "readBytes4"
+ },
+ "id": 44,
+ "name": "Identifier",
+ "src": "1666:10:3"
+ },
+ {
+ "attributes": {
+ "type": "bytes memory",
+ "value": "data"
+ },
+ "id": 45,
+ "name": "Identifier",
+ "src": "1677:4:3"
+ },
+ {
+ "attributes": {
+ "hexvalue": "30",
+ "subdenomination": null,
+ "token": null,
+ "type": "int_const 0",
+ "value": "0"
+ },
+ "id": 46,
+ "name": "Literal",
+ "src": "1683:1:3"
+ }
+ ],
+ "id": 47,
+ "name": "FunctionCall",
+ "src": "1666:19:3"
+ },
+ {
+ "attributes": {
+ "type": "bytes4",
+ "value": "REMOVE_AUTHORIZED_ADDRESS_AT_INDEX_SELECTOR"
+ },
+ "id": 48,
+ "name": "Identifier",
+ "src": "1689:43:3"
+ }
+ ],
+ "id": 49,
+ "name": "BinaryOperation",
+ "src": "1666:66:3"
+ }
+ ],
+ "id": 50,
+ "name": "Return",
+ "src": "1659:73:3"
+ }
+ ],
+ "id": 51,
+ "name": "Block",
+ "src": "1649:90:3"
+ }
+ ],
+ "id": 52,
+ "name": "FunctionDefinition",
+ "src": "1538:201:3"
+ },
+ {
+ "attributes": {
+ "constant": false,
+ "name": "publicReadBytes4",
+ "payable": false,
+ "visibility": "public"
+ },
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "b",
+ "type": "bytes memory"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "bytes"
+ },
+ "id": 53,
+ "name": "ElementaryTypeName",
+ "src": "2016:5:3"
+ }
+ ],
+ "id": 54,
+ "name": "VariableDeclaration",
+ "src": "2016:14:3"
+ },
+ {
+ "attributes": {
+ "name": "index",
+ "type": "uint256"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "uint256"
+ },
+ "id": 55,
+ "name": "ElementaryTypeName",
+ "src": "2040:7:3"
+ }
+ ],
+ "id": 56,
+ "name": "VariableDeclaration",
+ "src": "2040:13:3"
+ }
+ ],
+ "id": 57,
+ "name": "ParameterList",
+ "src": "2006:53:3"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "name": "result",
+ "type": "bytes4"
+ },
+ "children": [
+ {
+ "attributes": {
+ "name": "bytes4"
+ },
+ "id": 58,
+ "name": "ElementaryTypeName",
+ "src": "2092:6:3"
+ }
+ ],
+ "id": 59,
+ "name": "VariableDeclaration",
+ "src": "2092:13:3"
+ }
+ ],
+ "id": 60,
+ "name": "ParameterList",
+ "src": "2091:15:3"
+ },
+ {
+ "children": [
+ {
+ "children": [
+ {
+ "attributes": {
+ "operator": "=",
+ "type": "bytes4"
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "bytes4",
+ "value": "result"
+ },
+ "id": 61,
+ "name": "Identifier",
+ "src": "2121:6:3"
+ },
+ {
+ "attributes": {
+ "type": "bytes4",
+ "type_conversion": false
+ },
+ "children": [
+ {
+ "attributes": {
+ "type": "function (bytes memory,uint256) returns (bytes4)",
+ "value": "readBytes4"
+ },
+ "id": 62,
+ "name": "Identifier",
+ "src": "2130:10:3"
+ },
+ {
+ "attributes": {
+ "type": "bytes memory",
+ "value": "b"
+ },
+ "id": 63,
+ "name": "Identifier",
+ "src": "2141:1:3"
+ },
+ {
+ "attributes": {
+ "type": "uint256",
+ "value": "index"
+ },
+ "id": 64,
+ "name": "Identifier",
+ "src": "2144:5:3"
+ }
+ ],
+ "id": 65,
+ "name": "FunctionCall",
+ "src": "2130:20:3"
+ }
+ ],
+ "id": 66,
+ "name": "Assignment",
+ "src": "2121:29:3"
+ }
+ ],
+ "id": 67,
+ "name": "ExpressionStatement",
+ "src": "2121:29:3"
+ },
+ {
+ "children": [
+ {
+ "attributes": {
+ "type": "bytes4",
+ "value": "result"
+ },
+ "id": 68,
+ "name": "Identifier",
+ "src": "2167:6:3"
+ }
+ ],
+ "id": 69,
+ "name": "Return",
+ "src": "2160:13:3"
+ }
+ ],
+ "id": 70,
+ "name": "Block",
+ "src": "2111:69:3"
+ }
+ ],
+ "id": 71,
+ "name": "FunctionDefinition",
+ "src": "1981:199:3"
+ }
+ ],
+ "id": 72,
+ "name": "ContractDefinition",
+ "src": "703:1479:3"
+ }
+ ],
+ "name": "SourceUnit"
+ }
}
},
"sourceCodes": {
- "current/multisig/MultiSigWallet.sol": "pragma solidity ^0.4.10;\n\n/// @title Multisignature wallet - Allows multiple parties to agree on transactions before execution.\n/// @author Stefan George - <stefan.george@consensys.net>\ncontract MultiSigWallet {\n\n uint constant public MAX_OWNER_COUNT = 50;\n\n event Confirmation(address indexed sender, uint indexed transactionId);\n event Revocation(address indexed sender, uint indexed transactionId);\n event Submission(uint indexed transactionId);\n event Execution(uint indexed transactionId);\n event ExecutionFailure(uint indexed transactionId);\n event Deposit(address indexed sender, uint value);\n event OwnerAddition(address indexed owner);\n event OwnerRemoval(address indexed owner);\n event RequirementChange(uint required);\n\n mapping (uint => Transaction) public transactions;\n mapping (uint => mapping (address => bool)) public confirmations;\n mapping (address => bool) public isOwner;\n address[] public owners;\n uint public required;\n uint public transactionCount;\n\n struct Transaction {\n address destination;\n uint value;\n bytes data;\n bool executed;\n }\n\n modifier onlyWallet() {\n if (msg.sender != address(this))\n throw;\n _;\n }\n\n modifier ownerDoesNotExist(address owner) {\n if (isOwner[owner])\n throw;\n _;\n }\n\n modifier ownerExists(address owner) {\n if (!isOwner[owner])\n throw;\n _;\n }\n\n modifier transactionExists(uint transactionId) {\n if (transactions[transactionId].destination == 0)\n throw;\n _;\n }\n\n modifier confirmed(uint transactionId, address owner) {\n if (!confirmations[transactionId][owner])\n throw;\n _;\n }\n\n modifier notConfirmed(uint transactionId, address owner) {\n if (confirmations[transactionId][owner])\n throw;\n _;\n }\n\n modifier notExecuted(uint transactionId) {\n if (transactions[transactionId].executed)\n throw;\n _;\n }\n\n modifier notNull(address _address) {\n if (_address == 0)\n throw;\n _;\n }\n\n modifier validRequirement(uint ownerCount, uint _required) {\n if ( ownerCount > MAX_OWNER_COUNT\n || _required > ownerCount\n || _required == 0\n || ownerCount == 0)\n throw;\n _;\n }\n\n /// @dev Fallback function allows to deposit ether.\n function()\n payable\n {\n if (msg.value > 0)\n Deposit(msg.sender, msg.value);\n }\n\n /*\n * Public functions\n */\n /// @dev Contract constructor sets initial owners and required number of confirmations.\n /// @param _owners List of initial owners.\n /// @param _required Number of required confirmations.\n function MultiSigWallet(address[] _owners, uint _required)\n public\n validRequirement(_owners.length, _required)\n {\n for (uint i=0; i<_owners.length; i++) {\n if (isOwner[_owners[i]] || _owners[i] == 0)\n throw;\n isOwner[_owners[i]] = true;\n }\n owners = _owners;\n required = _required;\n }\n\n /// @dev Allows to add a new owner. Transaction has to be sent by wallet.\n /// @param owner Address of new owner.\n function addOwner(address owner)\n public\n onlyWallet\n ownerDoesNotExist(owner)\n notNull(owner)\n validRequirement(owners.length + 1, required)\n {\n isOwner[owner] = true;\n owners.push(owner);\n OwnerAddition(owner);\n }\n\n /// @dev Allows to remove an owner. Transaction has to be sent by wallet.\n /// @param owner Address of owner.\n function removeOwner(address owner)\n public\n onlyWallet\n ownerExists(owner)\n {\n isOwner[owner] = false;\n for (uint i=0; i<owners.length - 1; i++)\n if (owners[i] == owner) {\n owners[i] = owners[owners.length - 1];\n break;\n }\n owners.length -= 1;\n if (required > owners.length)\n changeRequirement(owners.length);\n OwnerRemoval(owner);\n }\n\n /// @dev Allows to replace an owner with a new owner. Transaction has to be sent by wallet.\n /// @param owner Address of owner to be replaced.\n /// @param owner Address of new owner.\n function replaceOwner(address owner, address newOwner)\n public\n onlyWallet\n ownerExists(owner)\n ownerDoesNotExist(newOwner)\n {\n for (uint i=0; i<owners.length; i++)\n if (owners[i] == owner) {\n owners[i] = newOwner;\n break;\n }\n isOwner[owner] = false;\n isOwner[newOwner] = true;\n OwnerRemoval(owner);\n OwnerAddition(newOwner);\n }\n\n /// @dev Allows to change the number of required confirmations. Transaction has to be sent by wallet.\n /// @param _required Number of required confirmations.\n function changeRequirement(uint _required)\n public\n onlyWallet\n validRequirement(owners.length, _required)\n {\n required = _required;\n RequirementChange(_required);\n }\n\n /// @dev Allows an owner to submit and confirm a transaction.\n /// @param destination Transaction target address.\n /// @param value Transaction ether value.\n /// @param data Transaction data payload.\n /// @return Returns transaction ID.\n function submitTransaction(address destination, uint value, bytes data)\n public\n returns (uint transactionId)\n {\n transactionId = addTransaction(destination, value, data);\n confirmTransaction(transactionId);\n }\n\n /// @dev Allows an owner to confirm a transaction.\n /// @param transactionId Transaction ID.\n function confirmTransaction(uint transactionId)\n public\n ownerExists(msg.sender)\n transactionExists(transactionId)\n notConfirmed(transactionId, msg.sender)\n {\n confirmations[transactionId][msg.sender] = true;\n Confirmation(msg.sender, transactionId);\n executeTransaction(transactionId);\n }\n\n /// @dev Allows an owner to revoke a confirmation for a transaction.\n /// @param transactionId Transaction ID.\n function revokeConfirmation(uint transactionId)\n public\n ownerExists(msg.sender)\n confirmed(transactionId, msg.sender)\n notExecuted(transactionId)\n {\n confirmations[transactionId][msg.sender] = false;\n Revocation(msg.sender, transactionId);\n }\n\n /// @dev Allows anyone to execute a confirmed transaction.\n /// @param transactionId Transaction ID.\n function executeTransaction(uint transactionId)\n public\n notExecuted(transactionId)\n {\n if (isConfirmed(transactionId)) {\n Transaction tx = transactions[transactionId];\n tx.executed = true;\n if (tx.destination.call.value(tx.value)(tx.data))\n Execution(transactionId);\n else {\n ExecutionFailure(transactionId);\n tx.executed = false;\n }\n }\n }\n\n /// @dev Returns the confirmation status of a transaction.\n /// @param transactionId Transaction ID.\n /// @return Confirmation status.\n function isConfirmed(uint transactionId)\n public\n constant\n returns (bool)\n {\n uint count = 0;\n for (uint i=0; i<owners.length; i++) {\n if (confirmations[transactionId][owners[i]])\n count += 1;\n if (count == required)\n return true;\n }\n }\n\n /*\n * Internal functions\n */\n /// @dev Adds a new transaction to the transaction mapping, if transaction does not exist yet.\n /// @param destination Transaction target address.\n /// @param value Transaction ether value.\n /// @param data Transaction data payload.\n /// @return Returns transaction ID.\n function addTransaction(address destination, uint value, bytes data)\n internal\n notNull(destination)\n returns (uint transactionId)\n {\n transactionId = transactionCount;\n transactions[transactionId] = Transaction({\n destination: destination,\n value: value,\n data: data,\n executed: false\n });\n transactionCount += 1;\n Submission(transactionId);\n }\n\n /*\n * Web3 call functions\n */\n /// @dev Returns number of confirmations of a transaction.\n /// @param transactionId Transaction ID.\n /// @return Number of confirmations.\n function getConfirmationCount(uint transactionId)\n public\n constant\n returns (uint count)\n {\n for (uint i=0; i<owners.length; i++)\n if (confirmations[transactionId][owners[i]])\n count += 1;\n }\n\n /// @dev Returns total number of transactions after filers are applied.\n /// @param pending Include pending transactions.\n /// @param executed Include executed transactions.\n /// @return Total number of transactions after filters are applied.\n function getTransactionCount(bool pending, bool executed)\n public\n constant\n returns (uint count)\n {\n for (uint i=0; i<transactionCount; i++)\n if ( pending && !transactions[i].executed\n || executed && transactions[i].executed)\n count += 1;\n }\n\n /// @dev Returns list of owners.\n /// @return List of owner addresses.\n function getOwners()\n public\n constant\n returns (address[])\n {\n return owners;\n }\n\n /// @dev Returns array with owner addresses, which confirmed transaction.\n /// @param transactionId Transaction ID.\n /// @return Returns array of owner addresses.\n function getConfirmations(uint transactionId)\n public\n constant\n returns (address[] _confirmations)\n {\n address[] memory confirmationsTemp = new address[](owners.length);\n uint count = 0;\n uint i;\n for (i=0; i<owners.length; i++)\n if (confirmations[transactionId][owners[i]]) {\n confirmationsTemp[count] = owners[i];\n count += 1;\n }\n _confirmations = new address[](count);\n for (i=0; i<count; i++)\n _confirmations[i] = confirmationsTemp[i];\n }\n\n /// @dev Returns list of transaction IDs in defined range.\n /// @param from Index start position of transaction array.\n /// @param to Index end position of transaction array.\n /// @param pending Include pending transactions.\n /// @param executed Include executed transactions.\n /// @return Returns array of transaction IDs.\n function getTransactionIds(uint from, uint to, bool pending, bool executed)\n public\n constant\n returns (uint[] _transactionIds)\n {\n uint[] memory transactionIdsTemp = new uint[](transactionCount);\n uint count = 0;\n uint i;\n for (i=0; i<transactionCount; i++)\n if ( pending && !transactions[i].executed\n || executed && transactions[i].executed)\n {\n transactionIdsTemp[count] = i;\n count += 1;\n }\n _transactionIds = new uint[](to - from);\n for (i=from; i<to; i++)\n _transactionIds[i - from] = transactionIdsTemp[i];\n }\n}\n",
- "current/multisig/MultiSigWalletWithTimeLock.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.10;\n\nimport \"./MultiSigWallet.sol\";\n\n/// @title Multisignature wallet with time lock- Allows multiple parties to execute a transaction after a time lock has passed.\n/// @author Amir Bandeali - <amir@0xProject.com>\ncontract MultiSigWalletWithTimeLock is MultiSigWallet {\n\n event ConfirmationTimeSet(uint indexed transactionId, uint confirmationTime);\n event TimeLockChange(uint secondsTimeLocked);\n\n uint public secondsTimeLocked;\n\n mapping (uint => uint) public confirmationTimes;\n\n modifier notFullyConfirmed(uint transactionId) {\n require(!isConfirmed(transactionId));\n _;\n }\n\n modifier fullyConfirmed(uint transactionId) {\n require(isConfirmed(transactionId));\n _;\n }\n\n modifier pastTimeLock(uint transactionId) {\n require(block.timestamp >= confirmationTimes[transactionId] + secondsTimeLocked);\n _;\n }\n\n /*\n * Public functions\n */\n\n /// @dev Contract constructor sets initial owners, required number of confirmations, and time lock.\n /// @param _owners List of initial owners.\n /// @param _required Number of required confirmations.\n /// @param _secondsTimeLocked Duration needed after a transaction is confirmed and before it becomes executable, in seconds.\n function MultiSigWalletWithTimeLock(address[] _owners, uint _required, uint _secondsTimeLocked)\n public\n MultiSigWallet(_owners, _required)\n {\n secondsTimeLocked = _secondsTimeLocked;\n }\n\n /// @dev Changes the duration of the time lock for transactions.\n /// @param _secondsTimeLocked Duration needed after a transaction is confirmed and before it becomes executable, in seconds.\n function changeTimeLock(uint _secondsTimeLocked)\n public\n onlyWallet\n {\n secondsTimeLocked = _secondsTimeLocked;\n TimeLockChange(_secondsTimeLocked);\n }\n\n /// @dev Allows an owner to confirm a transaction.\n /// @param transactionId Transaction ID.\n function confirmTransaction(uint transactionId)\n public\n ownerExists(msg.sender)\n transactionExists(transactionId)\n notConfirmed(transactionId, msg.sender)\n notFullyConfirmed(transactionId)\n {\n confirmations[transactionId][msg.sender] = true;\n Confirmation(msg.sender, transactionId);\n if (isConfirmed(transactionId)) {\n setConfirmationTime(transactionId, block.timestamp);\n }\n }\n\n /// @dev Allows an owner to revoke a confirmation for a transaction.\n /// @param transactionId Transaction ID.\n function revokeConfirmation(uint transactionId)\n public\n ownerExists(msg.sender)\n confirmed(transactionId, msg.sender)\n notExecuted(transactionId)\n notFullyConfirmed(transactionId)\n {\n confirmations[transactionId][msg.sender] = false;\n Revocation(msg.sender, transactionId);\n }\n\n /// @dev Allows anyone to execute a confirmed transaction.\n /// @param transactionId Transaction ID.\n function executeTransaction(uint transactionId)\n public\n notExecuted(transactionId)\n fullyConfirmed(transactionId)\n pastTimeLock(transactionId)\n {\n Transaction storage tx = transactions[transactionId];\n tx.executed = true;\n if (tx.destination.call.value(tx.value)(tx.data))\n Execution(transactionId);\n else {\n ExecutionFailure(transactionId);\n tx.executed = false;\n }\n }\n\n /*\n * Internal functions\n */\n\n /// @dev Sets the time of when a submission first passed.\n function setConfirmationTime(uint transactionId, uint confirmationTime)\n internal\n {\n confirmationTimes[transactionId] = confirmationTime;\n ConfirmationTimeSet(transactionId, confirmationTime);\n }\n}\n",
- "current/protocol/AssetProxyOwner/AssetProxyOwner.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.10;\n\nimport \"../../multisig/MultiSigWalletWithTimeLock.sol\";\nimport \"../../utils/LibBytes/LibBytes.sol\";\n\ncontract AssetProxyOwner is\n MultiSigWalletWithTimeLock\n{\n using LibBytes for bytes;\n\n event AssetProxyRegistration(address assetProxyContract, bool isRegistered);\n\n // Mapping of AssetProxy contract address =>\n // if this contract is allowed to call the AssetProxy's `removeAuthorizedAddressAtIndex` method without a time lock.\n mapping (address => bool) public isAssetProxyRegistered;\n\n bytes4 constant REMOVE_AUTHORIZED_ADDRESS_AT_INDEX_SELECTOR = bytes4(keccak256(\"removeAuthorizedAddressAtIndex(address,uint256)\"));\n\n /// @dev Function will revert if the transaction does not call `removeAuthorizedAddressAtIndex`\n /// on an approved AssetProxy contract.\n modifier validRemoveAuthorizedAddressAtIndexTx(uint256 transactionId) {\n Transaction storage tx = transactions[transactionId];\n require(isAssetProxyRegistered[tx.destination]);\n require(tx.data.readBytes4(0) == REMOVE_AUTHORIZED_ADDRESS_AT_INDEX_SELECTOR);\n _;\n }\n\n /// @dev Contract constructor sets initial owners, required number of confirmations,\n /// time lock, and list of AssetProxy addresses.\n /// @param _owners List of initial owners.\n /// @param _assetProxyContracts Array of AssetProxy contract addresses.\n /// @param _required Number of required confirmations.\n /// @param _secondsTimeLocked Duration needed after a transaction is confirmed and before it becomes executable, in seconds.\n function AssetProxyOwner(\n address[] memory _owners,\n address[] memory _assetProxyContracts,\n uint256 _required,\n uint256 _secondsTimeLocked\n )\n public\n MultiSigWalletWithTimeLock(_owners, _required, _secondsTimeLocked)\n {\n for (uint256 i = 0; i < _assetProxyContracts.length; i++) {\n address assetProxy = _assetProxyContracts[i];\n require(assetProxy != address(0));\n isAssetProxyRegistered[assetProxy] = true;\n }\n }\n\n /// @dev Registers or deregisters an AssetProxy to be able to execute\n /// `removeAuthorizedAddressAtIndex` without a timelock.\n /// @param assetProxyContract Address of AssetProxy contract.\n /// @param isRegistered Status of approval for AssetProxy contract.\n function registerAssetProxy(address assetProxyContract, bool isRegistered)\n public\n onlyWallet\n notNull(assetProxyContract)\n {\n isAssetProxyRegistered[assetProxyContract] = isRegistered;\n AssetProxyRegistration(assetProxyContract, isRegistered);\n }\n\n /// @dev Allows execution of `removeAuthorizedAddressAtIndex` without time lock.\n /// @param transactionId Transaction ID.\n function executeRemoveAuthorizedAddressAtIndex(uint256 transactionId)\n public\n notExecuted(transactionId)\n fullyConfirmed(transactionId)\n validRemoveAuthorizedAddressAtIndexTx(transactionId)\n {\n Transaction storage tx = transactions[transactionId];\n tx.executed = true;\n if (tx.destination.call.value(tx.value)(tx.data))\n Execution(transactionId);\n else {\n ExecutionFailure(transactionId);\n tx.executed = false;\n }\n }\n}\n",
- "current/test/TestAssetProxyOwner/TestAssetProxyOwner.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.24;\n\nimport \"../../protocol/AssetProxyOwner/AssetProxyOwner.sol\";\n\ncontract TestAssetProxyOwner is\n AssetProxyOwner\n{\n constructor(\n address[] memory _owners,\n address[] memory _assetProxyContracts,\n uint256 _required,\n uint256 _secondsTimeLocked\n )\n public\n AssetProxyOwner(_owners, _assetProxyContracts, _required, _secondsTimeLocked)\n {\n }\n \n function testValidRemoveAuthorizedAddressAtIndexTx(uint256 id)\n public\n validRemoveAuthorizedAddressAtIndexTx(id)\n returns (bool)\n {\n // Do nothing. We expect reverts through the modifier\n return true;\n }\n \n /// @dev Compares first 4 bytes of byte array to `removeAuthorizedAddressAtIndex` function selector.\n /// @param data Transaction data.\n /// @return Successful if data is a call to `removeAuthorizedAddressAtIndex`.\n function isFunctionRemoveAuthorizedAddressAtIndex(bytes memory data)\n public\n pure\n returns (bool)\n {\n return data.readBytes4(0) == REMOVE_AUTHORIZED_ADDRESS_AT_INDEX_SELECTOR;\n }\n}\n",
- "current/utils/LibBytes/LibBytes.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.24;\n\nlibrary LibBytes {\n\n using LibBytes for bytes;\n\n /// @dev Gets the memory address for a byte array.\n /// @param input Byte array to lookup.\n /// @return memoryAddress Memory address of byte array. This\n /// points to the header of the byte array which contains\n /// the length.\n function rawAddress(bytes memory input)\n internal\n pure\n returns (uint256 memoryAddress)\n {\n assembly {\n memoryAddress := input\n }\n return memoryAddress;\n }\n \n /// @dev Gets the memory address for the contents of a byte array.\n /// @param input Byte array to lookup.\n /// @return memoryAddress Memory address of the contents of the byte array.\n function contentAddress(bytes memory input)\n internal\n pure\n returns (uint256 memoryAddress)\n {\n assembly {\n memoryAddress := add(input, 32)\n }\n return memoryAddress;\n }\n\n /// @dev Copies `length` bytes from memory location `source` to `dest`.\n /// @param dest memory address to copy bytes to.\n /// @param source memory address to copy bytes from.\n /// @param length number of bytes to copy.\n function memCopy(\n uint256 dest,\n uint256 source,\n uint256 length\n )\n internal\n pure\n {\n if (length < 32) {\n // Handle a partial word by reading destination and masking\n // off the bits we are interested in.\n // This correctly handles overlap, zero lengths and source == dest\n assembly {\n let mask := sub(exp(256, sub(32, length)), 1)\n let s := and(mload(source), not(mask))\n let d := and(mload(dest), mask)\n mstore(dest, or(s, d))\n }\n } else {\n // Skip the O(length) loop when source == dest.\n if (source == dest) {\n return;\n }\n\n // For large copies we copy whole words at a time. The final\n // word is aligned to the end of the range (instead of after the\n // previous) to handle partial words. So a copy will look like this:\n //\n // ####\n // ####\n // ####\n // ####\n //\n // We handle overlap in the source and destination range by\n // changing the copying direction. This prevents us from\n // overwriting parts of source that we still need to copy.\n //\n // This correctly handles source == dest\n //\n if (source > dest) {\n assembly {\n // We subtract 32 from `sEnd` and `dEnd` because it\n // is easier to compare with in the loop, and these\n // are also the addresses we need for copying the\n // last bytes.\n length := sub(length, 32)\n let sEnd := add(source, length)\n let dEnd := add(dest, length)\n\n // Remember the last 32 bytes of source\n // This needs to be done here and not after the loop\n // because we may have overwritten the last bytes in\n // source already due to overlap.\n let last := mload(sEnd)\n\n // Copy whole words front to back\n // Note: the first check is always true,\n // this could have been a do-while loop.\n for {} lt(source, sEnd) {} {\n mstore(dest, mload(source))\n source := add(source, 32)\n dest := add(dest, 32)\n }\n \n // Write the last 32 bytes\n mstore(dEnd, last)\n }\n } else {\n assembly {\n // We subtract 32 from `sEnd` and `dEnd` because those\n // are the starting points when copying a word at the end.\n length := sub(length, 32)\n let sEnd := add(source, length)\n let dEnd := add(dest, length)\n\n // Remember the first 32 bytes of source\n // This needs to be done here and not after the loop\n // because we may have overwritten the first bytes in\n // source already due to overlap.\n let first := mload(source)\n\n // Copy whole words back to front\n // We use a signed comparisson here to allow dEnd to become\n // negative (happens when source and dest < 32). Valid\n // addresses in local memory will never be larger than\n // 2**255, so they can be safely re-interpreted as signed.\n // Note: the first check is always true,\n // this could have been a do-while loop.\n for {} slt(dest, dEnd) {} {\n mstore(dEnd, mload(sEnd))\n sEnd := sub(sEnd, 32)\n dEnd := sub(dEnd, 32)\n }\n \n // Write the first 32 bytes\n mstore(dest, first)\n }\n }\n }\n }\n \n /// @dev Returns a slices from a byte array.\n /// @param b The byte array to take a slice from.\n /// @param from The starting index for the slice (inclusive).\n /// @param to The final index for the slice (exclusive).\n /// @return result The slice containing bytes at indices [from, to)\n function slice(bytes memory b, uint256 from, uint256 to)\n internal\n pure\n returns (bytes memory result)\n {\n require(\n from <= to,\n \"FROM_LESS_THAN_TO_REQUIRED\"\n );\n require(\n to < b.length,\n \"TO_LESS_THAN_LENGTH_REQUIRED\"\n );\n \n // Create a new bytes structure and copy contents\n result = new bytes(to - from);\n memCopy(\n result.contentAddress(),\n b.contentAddress() + from,\n result.length);\n return result;\n }\n \n /// @dev Returns a slice from a byte array without preserving the input.\n /// @param b The byte array to take a slice from. Will be destroyed in the process.\n /// @param from The starting index for the slice (inclusive).\n /// @param to The final index for the slice (exclusive).\n /// @return result The slice containing bytes at indices [from, to)\n /// @dev When `from == 0`, the original array will match the slice. In other cases its state will be corrupted.\n function sliceDestructive(bytes memory b, uint256 from, uint256 to)\n internal\n pure\n returns (bytes memory result)\n {\n require(\n from <= to,\n \"FROM_LESS_THAN_TO_REQUIRED\"\n );\n require(\n to < b.length,\n \"TO_LESS_THAN_LENGTH_REQUIRED\"\n );\n \n // Create a new bytes structure around [from, to) in-place.\n assembly {\n result := add(b, from)\n mstore(result, sub(to, from))\n }\n return result;\n }\n\n /// @dev Pops the last byte off of a byte array by modifying its length.\n /// @param b Byte array that will be modified.\n /// @return The byte that was popped off.\n function popLastByte(bytes memory b)\n internal\n pure\n returns (bytes1 result)\n {\n require(\n b.length > 0,\n \"GREATER_THAN_ZERO_LENGTH_REQUIRED\"\n );\n\n // Store last byte.\n result = b[b.length - 1];\n\n assembly {\n // Decrement length of byte array.\n let newLen := sub(mload(b), 1)\n mstore(b, newLen)\n }\n return result;\n }\n\n /// @dev Pops the last 20 bytes off of a byte array by modifying its length.\n /// @param b Byte array that will be modified.\n /// @return The 20 byte address that was popped off.\n function popLast20Bytes(bytes memory b)\n internal\n pure\n returns (address result)\n {\n require(\n b.length >= 20,\n \"GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\"\n );\n\n // Store last 20 bytes.\n result = readAddress(b, b.length - 20);\n\n assembly {\n // Subtract 20 from byte array length.\n let newLen := sub(mload(b), 20)\n mstore(b, newLen)\n }\n return result;\n }\n\n /// @dev Tests equality of two byte arrays.\n /// @param lhs First byte array to compare.\n /// @param rhs Second byte array to compare.\n /// @return True if arrays are the same. False otherwise.\n function equals(\n bytes memory lhs,\n bytes memory rhs\n )\n internal\n pure\n returns (bool equal)\n {\n // Keccak gas cost is 30 + numWords * 6. This is a cheap way to compare.\n // We early exit on unequal lengths, but keccak would also correctly\n // handle this.\n return lhs.length == rhs.length && keccak256(lhs) == keccak256(rhs);\n }\n\n /// @dev Reads an address from a position in a byte array.\n /// @param b Byte array containing an address.\n /// @param index Index in byte array of address.\n /// @return address from byte array.\n function readAddress(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (address result)\n {\n require(\n b.length >= index + 20, // 20 is length of address\n \"GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\"\n );\n\n // Add offset to index:\n // 1. Arrays are prefixed by 32-byte length parameter (add 32 to index)\n // 2. Account for size difference between address length and 32-byte storage word (subtract 12 from index)\n index += 20;\n\n // Read address from array memory\n assembly {\n // 1. Add index to address of bytes array\n // 2. Load 32-byte word from memory\n // 3. Apply 20-byte mask to obtain address\n result := and(mload(add(b, index)), 0xffffffffffffffffffffffffffffffffffffffff)\n }\n return result;\n }\n\n /// @dev Writes an address into a specific position in a byte array.\n /// @param b Byte array to insert address into.\n /// @param index Index in byte array of address.\n /// @param input Address to put into byte array.\n function writeAddress(\n bytes memory b,\n uint256 index,\n address input\n )\n internal\n pure\n {\n require(\n b.length >= index + 20, // 20 is length of address\n \"GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\"\n );\n\n // Add offset to index:\n // 1. Arrays are prefixed by 32-byte length parameter (add 32 to index)\n // 2. Account for size difference between address length and 32-byte storage word (subtract 12 from index)\n index += 20;\n\n // Store address into array memory\n assembly {\n // The address occupies 20 bytes and mstore stores 32 bytes.\n // First fetch the 32-byte word where we'll be storing the address, then\n // apply a mask so we have only the bytes in the word that the address will not occupy.\n // Then combine these bytes with the address and store the 32 bytes back to memory with mstore.\n\n // 1. Add index to address of bytes array\n // 2. Load 32-byte word from memory\n // 3. Apply 12-byte mask to obtain extra bytes occupying word of memory where we'll store the address\n let neighbors := and(mload(add(b, index)), 0xffffffffffffffffffffffff0000000000000000000000000000000000000000)\n \n // Make sure input address is clean.\n // (Solidity does not guarantee this)\n input := and(input, 0xffffffffffffffffffffffffffffffffffffffff)\n\n // Store the neighbors and address into memory\n mstore(add(b, index), xor(input, neighbors))\n }\n }\n\n /// @dev Reads a bytes32 value from a position in a byte array.\n /// @param b Byte array containing a bytes32 value.\n /// @param index Index in byte array of bytes32 value.\n /// @return bytes32 value from byte array.\n function readBytes32(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (bytes32 result)\n {\n require(\n b.length >= index + 32,\n \"GREATER_OR_EQUAL_TO_32_LENGTH_REQUIRED\"\n );\n\n // Arrays are prefixed by a 256 bit length parameter\n index += 32;\n\n // Read the bytes32 from array memory\n assembly {\n result := mload(add(b, index))\n }\n return result;\n }\n\n /// @dev Writes a bytes32 into a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input bytes32 to put into byte array.\n function writeBytes32(\n bytes memory b,\n uint256 index,\n bytes32 input\n )\n internal\n pure\n {\n require(\n b.length >= index + 32,\n \"GREATER_OR_EQUAL_TO_32_LENGTH_REQUIRED\"\n );\n\n // Arrays are prefixed by a 256 bit length parameter\n index += 32;\n\n // Read the bytes32 from array memory\n assembly {\n mstore(add(b, index), input)\n }\n }\n\n /// @dev Reads a uint256 value from a position in a byte array.\n /// @param b Byte array containing a uint256 value.\n /// @param index Index in byte array of uint256 value.\n /// @return uint256 value from byte array.\n function readUint256(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (uint256 result)\n {\n return uint256(readBytes32(b, index));\n }\n\n /// @dev Writes a uint256 into a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input uint256 to put into byte array.\n function writeUint256(\n bytes memory b,\n uint256 index,\n uint256 input\n )\n internal\n pure\n {\n writeBytes32(b, index, bytes32(input));\n }\n\n /// @dev Reads an unpadded bytes4 value from a position in a byte array.\n /// @param b Byte array containing a bytes4 value.\n /// @param index Index in byte array of bytes4 value.\n /// @return bytes4 value from byte array.\n function readBytes4(\n bytes memory b,\n uint256 index)\n internal\n pure\n returns (bytes4 result)\n {\n require(\n b.length >= index + 4,\n \"GREATER_OR_EQUAL_TO_4_LENGTH_REQUIRED\"\n );\n assembly {\n result := mload(add(b, 32))\n // Solidity does not require us to clean the trailing bytes.\n // We do it anyway\n result := and(result, 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000)\n }\n return result;\n }\n\n /// @dev Reads nested bytes from a specific position.\n /// @dev NOTE: the returned value overlaps with the input value.\n /// Both should be treated as immutable.\n /// @param b Byte array containing nested bytes.\n /// @param index Index of nested bytes.\n /// @return result Nested bytes.\n function readBytesWithLength(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (bytes memory result)\n {\n // Read length of nested bytes\n uint256 nestedBytesLength = readUint256(b, index);\n index += 32;\n\n // Assert length of <b> is valid, given\n // length of nested bytes\n require(\n b.length >= index + nestedBytesLength,\n \"GREATER_OR_EQUAL_TO_NESTED_BYTES_LENGTH_REQUIRED\"\n );\n \n // Return a pointer to the byte array as it exists inside `b`\n assembly {\n result := add(b, index)\n }\n return result;\n }\n\n /// @dev Inserts bytes at a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input bytes to insert.\n function writeBytesWithLength(\n bytes memory b,\n uint256 index,\n bytes memory input\n )\n internal\n pure\n {\n // Assert length of <b> is valid, given\n // length of input\n require(\n b.length >= index + 32 /* 32 bytes to store length */ + input.length,\n \"GREATER_OR_EQUAL_TO_NESTED_BYTES_LENGTH_REQUIRED\"\n );\n\n // Copy <input> into <b>\n memCopy(\n b.contentAddress() + index,\n input.rawAddress(), // includes length of <input>\n input.length + 32 // +32 bytes to store <input> length\n );\n }\n\n /// @dev Performs a deep copy of a byte array onto another byte array of greater than or equal length.\n /// @param dest Byte array that will be overwritten with source bytes.\n /// @param source Byte array to copy onto dest bytes.\n function deepCopyBytes(\n bytes memory dest,\n bytes memory source\n )\n internal\n pure\n {\n uint256 sourceLen = source.length;\n // Dest length must be >= source length, or some bytes would not be copied.\n require(\n dest.length >= sourceLen,\n \"GREATER_OR_EQUAL_TO_SOURCE_BYTES_LENGTH_REQUIRED\"\n );\n memCopy(\n dest.contentAddress(),\n source.contentAddress(),\n sourceLen\n );\n }\n}\n"
+ "2.0.0/multisig/MultiSigWallet.sol": "// solhint-disable\npragma solidity ^0.4.10;\n\n\n/// @title Multisignature wallet - Allows multiple parties to agree on transactions before execution.\n/// @author Stefan George - <stefan.george@consensys.net>\ncontract MultiSigWallet {\n\n uint constant public MAX_OWNER_COUNT = 50;\n\n event Confirmation(address indexed sender, uint indexed transactionId);\n event Revocation(address indexed sender, uint indexed transactionId);\n event Submission(uint indexed transactionId);\n event Execution(uint indexed transactionId);\n event ExecutionFailure(uint indexed transactionId);\n event Deposit(address indexed sender, uint value);\n event OwnerAddition(address indexed owner);\n event OwnerRemoval(address indexed owner);\n event RequirementChange(uint required);\n\n mapping (uint => Transaction) public transactions;\n mapping (uint => mapping (address => bool)) public confirmations;\n mapping (address => bool) public isOwner;\n address[] public owners;\n uint public required;\n uint public transactionCount;\n\n struct Transaction {\n address destination;\n uint value;\n bytes data;\n bool executed;\n }\n\n modifier onlyWallet() {\n if (msg.sender != address(this))\n throw;\n _;\n }\n\n modifier ownerDoesNotExist(address owner) {\n if (isOwner[owner])\n throw;\n _;\n }\n\n modifier ownerExists(address owner) {\n if (!isOwner[owner])\n throw;\n _;\n }\n\n modifier transactionExists(uint transactionId) {\n if (transactions[transactionId].destination == 0)\n throw;\n _;\n }\n\n modifier confirmed(uint transactionId, address owner) {\n if (!confirmations[transactionId][owner])\n throw;\n _;\n }\n\n modifier notConfirmed(uint transactionId, address owner) {\n if (confirmations[transactionId][owner])\n throw;\n _;\n }\n\n modifier notExecuted(uint transactionId) {\n if (transactions[transactionId].executed)\n throw;\n _;\n }\n\n modifier notNull(address _address) {\n if (_address == 0)\n throw;\n _;\n }\n\n modifier validRequirement(uint ownerCount, uint _required) {\n if ( ownerCount > MAX_OWNER_COUNT\n || _required > ownerCount\n || _required == 0\n || ownerCount == 0)\n throw;\n _;\n }\n\n /// @dev Fallback function allows to deposit ether.\n function()\n payable\n {\n if (msg.value > 0)\n Deposit(msg.sender, msg.value);\n }\n\n /*\n * Public functions\n */\n /// @dev Contract constructor sets initial owners and required number of confirmations.\n /// @param _owners List of initial owners.\n /// @param _required Number of required confirmations.\n function MultiSigWallet(address[] _owners, uint _required)\n public\n validRequirement(_owners.length, _required)\n {\n for (uint i=0; i<_owners.length; i++) {\n if (isOwner[_owners[i]] || _owners[i] == 0)\n throw;\n isOwner[_owners[i]] = true;\n }\n owners = _owners;\n required = _required;\n }\n\n /// @dev Allows to add a new owner. Transaction has to be sent by wallet.\n /// @param owner Address of new owner.\n function addOwner(address owner)\n public\n onlyWallet\n ownerDoesNotExist(owner)\n notNull(owner)\n validRequirement(owners.length + 1, required)\n {\n isOwner[owner] = true;\n owners.push(owner);\n OwnerAddition(owner);\n }\n\n /// @dev Allows to remove an owner. Transaction has to be sent by wallet.\n /// @param owner Address of owner.\n function removeOwner(address owner)\n public\n onlyWallet\n ownerExists(owner)\n {\n isOwner[owner] = false;\n for (uint i=0; i<owners.length - 1; i++)\n if (owners[i] == owner) {\n owners[i] = owners[owners.length - 1];\n break;\n }\n owners.length -= 1;\n if (required > owners.length)\n changeRequirement(owners.length);\n OwnerRemoval(owner);\n }\n\n /// @dev Allows to replace an owner with a new owner. Transaction has to be sent by wallet.\n /// @param owner Address of owner to be replaced.\n /// @param owner Address of new owner.\n function replaceOwner(address owner, address newOwner)\n public\n onlyWallet\n ownerExists(owner)\n ownerDoesNotExist(newOwner)\n {\n for (uint i=0; i<owners.length; i++)\n if (owners[i] == owner) {\n owners[i] = newOwner;\n break;\n }\n isOwner[owner] = false;\n isOwner[newOwner] = true;\n OwnerRemoval(owner);\n OwnerAddition(newOwner);\n }\n\n /// @dev Allows to change the number of required confirmations. Transaction has to be sent by wallet.\n /// @param _required Number of required confirmations.\n function changeRequirement(uint _required)\n public\n onlyWallet\n validRequirement(owners.length, _required)\n {\n required = _required;\n RequirementChange(_required);\n }\n\n /// @dev Allows an owner to submit and confirm a transaction.\n /// @param destination Transaction target address.\n /// @param value Transaction ether value.\n /// @param data Transaction data payload.\n /// @return Returns transaction ID.\n function submitTransaction(address destination, uint value, bytes data)\n public\n returns (uint transactionId)\n {\n transactionId = addTransaction(destination, value, data);\n confirmTransaction(transactionId);\n }\n\n /// @dev Allows an owner to confirm a transaction.\n /// @param transactionId Transaction ID.\n function confirmTransaction(uint transactionId)\n public\n ownerExists(msg.sender)\n transactionExists(transactionId)\n notConfirmed(transactionId, msg.sender)\n {\n confirmations[transactionId][msg.sender] = true;\n Confirmation(msg.sender, transactionId);\n executeTransaction(transactionId);\n }\n\n /// @dev Allows an owner to revoke a confirmation for a transaction.\n /// @param transactionId Transaction ID.\n function revokeConfirmation(uint transactionId)\n public\n ownerExists(msg.sender)\n confirmed(transactionId, msg.sender)\n notExecuted(transactionId)\n {\n confirmations[transactionId][msg.sender] = false;\n Revocation(msg.sender, transactionId);\n }\n\n /// @dev Allows anyone to execute a confirmed transaction.\n /// @param transactionId Transaction ID.\n function executeTransaction(uint transactionId)\n public\n notExecuted(transactionId)\n {\n if (isConfirmed(transactionId)) {\n Transaction tx = transactions[transactionId];\n tx.executed = true;\n if (tx.destination.call.value(tx.value)(tx.data))\n Execution(transactionId);\n else {\n ExecutionFailure(transactionId);\n tx.executed = false;\n }\n }\n }\n\n /// @dev Returns the confirmation status of a transaction.\n /// @param transactionId Transaction ID.\n /// @return Confirmation status.\n function isConfirmed(uint transactionId)\n public\n constant\n returns (bool)\n {\n uint count = 0;\n for (uint i=0; i<owners.length; i++) {\n if (confirmations[transactionId][owners[i]])\n count += 1;\n if (count == required)\n return true;\n }\n }\n\n /*\n * Internal functions\n */\n /// @dev Adds a new transaction to the transaction mapping, if transaction does not exist yet.\n /// @param destination Transaction target address.\n /// @param value Transaction ether value.\n /// @param data Transaction data payload.\n /// @return Returns transaction ID.\n function addTransaction(address destination, uint value, bytes data)\n internal\n notNull(destination)\n returns (uint transactionId)\n {\n transactionId = transactionCount;\n transactions[transactionId] = Transaction({\n destination: destination,\n value: value,\n data: data,\n executed: false\n });\n transactionCount += 1;\n Submission(transactionId);\n }\n\n /*\n * Web3 call functions\n */\n /// @dev Returns number of confirmations of a transaction.\n /// @param transactionId Transaction ID.\n /// @return Number of confirmations.\n function getConfirmationCount(uint transactionId)\n public\n constant\n returns (uint count)\n {\n for (uint i=0; i<owners.length; i++)\n if (confirmations[transactionId][owners[i]])\n count += 1;\n }\n\n /// @dev Returns total number of transactions after filers are applied.\n /// @param pending Include pending transactions.\n /// @param executed Include executed transactions.\n /// @return Total number of transactions after filters are applied.\n function getTransactionCount(bool pending, bool executed)\n public\n constant\n returns (uint count)\n {\n for (uint i=0; i<transactionCount; i++)\n if ( pending && !transactions[i].executed\n || executed && transactions[i].executed)\n count += 1;\n }\n\n /// @dev Returns list of owners.\n /// @return List of owner addresses.\n function getOwners()\n public\n constant\n returns (address[])\n {\n return owners;\n }\n\n /// @dev Returns array with owner addresses, which confirmed transaction.\n /// @param transactionId Transaction ID.\n /// @return Returns array of owner addresses.\n function getConfirmations(uint transactionId)\n public\n constant\n returns (address[] _confirmations)\n {\n address[] memory confirmationsTemp = new address[](owners.length);\n uint count = 0;\n uint i;\n for (i=0; i<owners.length; i++)\n if (confirmations[transactionId][owners[i]]) {\n confirmationsTemp[count] = owners[i];\n count += 1;\n }\n _confirmations = new address[](count);\n for (i=0; i<count; i++)\n _confirmations[i] = confirmationsTemp[i];\n }\n\n /// @dev Returns list of transaction IDs in defined range.\n /// @param from Index start position of transaction array.\n /// @param to Index end position of transaction array.\n /// @param pending Include pending transactions.\n /// @param executed Include executed transactions.\n /// @return Returns array of transaction IDs.\n function getTransactionIds(uint from, uint to, bool pending, bool executed)\n public\n constant\n returns (uint[] _transactionIds)\n {\n uint[] memory transactionIdsTemp = new uint[](transactionCount);\n uint count = 0;\n uint i;\n for (i=0; i<transactionCount; i++)\n if ( pending && !transactions[i].executed\n || executed && transactions[i].executed)\n {\n transactionIdsTemp[count] = i;\n count += 1;\n }\n _transactionIds = new uint[](to - from);\n for (i=from; i<to; i++)\n _transactionIds[i - from] = transactionIdsTemp[i];\n }\n}\n",
+ "2.0.0/multisig/MultiSigWalletWithTimeLock.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\n// solhint-disable\npragma solidity ^0.4.10;\n\nimport \"./MultiSigWallet.sol\";\n\n\n/// @title Multisignature wallet with time lock- Allows multiple parties to execute a transaction after a time lock has passed.\n/// @author Amir Bandeali - <amir@0xProject.com>\ncontract MultiSigWalletWithTimeLock is MultiSigWallet {\n\n event ConfirmationTimeSet(uint indexed transactionId, uint confirmationTime);\n event TimeLockChange(uint secondsTimeLocked);\n\n uint public secondsTimeLocked;\n\n mapping (uint => uint) public confirmationTimes;\n\n modifier notFullyConfirmed(uint transactionId) {\n require(!isConfirmed(transactionId));\n _;\n }\n\n modifier fullyConfirmed(uint transactionId) {\n require(isConfirmed(transactionId));\n _;\n }\n\n modifier pastTimeLock(uint transactionId) {\n require(block.timestamp >= confirmationTimes[transactionId] + secondsTimeLocked);\n _;\n }\n\n /*\n * Public functions\n */\n\n /// @dev Contract constructor sets initial owners, required number of confirmations, and time lock.\n /// @param _owners List of initial owners.\n /// @param _required Number of required confirmations.\n /// @param _secondsTimeLocked Duration needed after a transaction is confirmed and before it becomes executable, in seconds.\n function MultiSigWalletWithTimeLock(address[] _owners, uint _required, uint _secondsTimeLocked)\n public\n MultiSigWallet(_owners, _required)\n {\n secondsTimeLocked = _secondsTimeLocked;\n }\n\n /// @dev Changes the duration of the time lock for transactions.\n /// @param _secondsTimeLocked Duration needed after a transaction is confirmed and before it becomes executable, in seconds.\n function changeTimeLock(uint _secondsTimeLocked)\n public\n onlyWallet\n {\n secondsTimeLocked = _secondsTimeLocked;\n TimeLockChange(_secondsTimeLocked);\n }\n\n /// @dev Allows an owner to confirm a transaction.\n /// @param transactionId Transaction ID.\n function confirmTransaction(uint transactionId)\n public\n ownerExists(msg.sender)\n transactionExists(transactionId)\n notConfirmed(transactionId, msg.sender)\n notFullyConfirmed(transactionId)\n {\n confirmations[transactionId][msg.sender] = true;\n Confirmation(msg.sender, transactionId);\n if (isConfirmed(transactionId)) {\n setConfirmationTime(transactionId, block.timestamp);\n }\n }\n\n /// @dev Allows an owner to revoke a confirmation for a transaction.\n /// @param transactionId Transaction ID.\n function revokeConfirmation(uint transactionId)\n public\n ownerExists(msg.sender)\n confirmed(transactionId, msg.sender)\n notExecuted(transactionId)\n notFullyConfirmed(transactionId)\n {\n confirmations[transactionId][msg.sender] = false;\n Revocation(msg.sender, transactionId);\n }\n\n /// @dev Allows anyone to execute a confirmed transaction.\n /// @param transactionId Transaction ID.\n function executeTransaction(uint transactionId)\n public\n notExecuted(transactionId)\n fullyConfirmed(transactionId)\n pastTimeLock(transactionId)\n {\n Transaction storage tx = transactions[transactionId];\n tx.executed = true;\n if (tx.destination.call.value(tx.value)(tx.data))\n Execution(transactionId);\n else {\n ExecutionFailure(transactionId);\n tx.executed = false;\n }\n }\n\n /*\n * Internal functions\n */\n\n /// @dev Sets the time of when a submission first passed.\n function setConfirmationTime(uint transactionId, uint confirmationTime)\n internal\n {\n confirmationTimes[transactionId] = confirmationTime;\n ConfirmationTimeSet(transactionId, confirmationTime);\n }\n}\n",
+ "2.0.0/protocol/AssetProxyOwner/AssetProxyOwner.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.10;\n\nimport \"../../multisig/MultiSigWalletWithTimeLock.sol\";\n\n\ncontract AssetProxyOwner is\n MultiSigWalletWithTimeLock\n{\n\n event AssetProxyRegistration(address assetProxyContract, bool isRegistered);\n\n // Mapping of AssetProxy contract address =>\n // if this contract is allowed to call the AssetProxy's `removeAuthorizedAddressAtIndex` method without a time lock.\n mapping (address => bool) public isAssetProxyRegistered;\n\n bytes4 constant internal REMOVE_AUTHORIZED_ADDRESS_AT_INDEX_SELECTOR = bytes4(keccak256(\"removeAuthorizedAddressAtIndex(address,uint256)\"));\n\n /// @dev Function will revert if the transaction does not call `removeAuthorizedAddressAtIndex`\n /// on an approved AssetProxy contract.\n modifier validRemoveAuthorizedAddressAtIndexTx(uint256 transactionId) {\n Transaction storage tx = transactions[transactionId];\n require(isAssetProxyRegistered[tx.destination]);\n require(readBytes4(tx.data, 0) == REMOVE_AUTHORIZED_ADDRESS_AT_INDEX_SELECTOR);\n _;\n }\n\n /// @dev Contract constructor sets initial owners, required number of confirmations,\n /// time lock, and list of AssetProxy addresses.\n /// @param _owners List of initial owners.\n /// @param _assetProxyContracts Array of AssetProxy contract addresses.\n /// @param _required Number of required confirmations.\n /// @param _secondsTimeLocked Duration needed after a transaction is confirmed and before it becomes executable, in seconds.\n function AssetProxyOwner(\n address[] memory _owners,\n address[] memory _assetProxyContracts,\n uint256 _required,\n uint256 _secondsTimeLocked\n )\n public\n MultiSigWalletWithTimeLock(_owners, _required, _secondsTimeLocked)\n {\n for (uint256 i = 0; i < _assetProxyContracts.length; i++) {\n address assetProxy = _assetProxyContracts[i];\n require(assetProxy != address(0));\n isAssetProxyRegistered[assetProxy] = true;\n }\n }\n\n /// @dev Registers or deregisters an AssetProxy to be able to execute\n /// `removeAuthorizedAddressAtIndex` without a timelock.\n /// @param assetProxyContract Address of AssetProxy contract.\n /// @param isRegistered Status of approval for AssetProxy contract.\n function registerAssetProxy(address assetProxyContract, bool isRegistered)\n public\n onlyWallet\n notNull(assetProxyContract)\n {\n isAssetProxyRegistered[assetProxyContract] = isRegistered;\n AssetProxyRegistration(assetProxyContract, isRegistered);\n }\n\n /// @dev Allows execution of `removeAuthorizedAddressAtIndex` without time lock.\n /// @param transactionId Transaction ID.\n function executeRemoveAuthorizedAddressAtIndex(uint256 transactionId)\n public\n notExecuted(transactionId)\n fullyConfirmed(transactionId)\n validRemoveAuthorizedAddressAtIndexTx(transactionId)\n {\n Transaction storage tx = transactions[transactionId];\n tx.executed = true;\n // solhint-disable-next-line avoid-call-value\n if (tx.destination.call.value(tx.value)(tx.data))\n Execution(transactionId);\n else {\n ExecutionFailure(transactionId);\n tx.executed = false;\n }\n }\n\n /// @dev Reads an unpadded bytes4 value from a position in a byte array.\n /// @param b Byte array containing a bytes4 value.\n /// @param index Index in byte array of bytes4 value.\n /// @return bytes4 value from byte array.\n function readBytes4(\n bytes memory b,\n uint256 index\n )\n internal\n returns (bytes4 result)\n {\n require(b.length >= index + 4);\n assembly {\n result := mload(add(b, 32))\n // Solidity does not require us to clean the trailing bytes.\n // We do it anyway\n result := and(result, 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000)\n }\n return result;\n }\n}\n",
+ "2.0.0/test/TestAssetProxyOwner/TestAssetProxyOwner.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.10;\n\nimport \"../../protocol/AssetProxyOwner/AssetProxyOwner.sol\";\n\n\n// solhint-disable no-empty-blocks\ncontract TestAssetProxyOwner is\n AssetProxyOwner\n{\n\n function TestAssetProxyOwner(\n address[] memory _owners,\n address[] memory _assetProxyContracts,\n uint256 _required,\n uint256 _secondsTimeLocked\n )\n public\n AssetProxyOwner(_owners, _assetProxyContracts, _required, _secondsTimeLocked)\n {}\n \n function testValidRemoveAuthorizedAddressAtIndexTx(uint256 id)\n public\n validRemoveAuthorizedAddressAtIndexTx(id)\n returns (bool)\n {\n // Do nothing. We expect reverts through the modifier\n return true;\n }\n \n /// @dev Compares first 4 bytes of byte array to `removeAuthorizedAddressAtIndex` function selector.\n /// @param data Transaction data.\n /// @return Successful if data is a call to `removeAuthorizedAddressAtIndex`.\n function isFunctionRemoveAuthorizedAddressAtIndex(bytes memory data)\n public\n returns (bool)\n {\n return readBytes4(data, 0) == REMOVE_AUTHORIZED_ADDRESS_AT_INDEX_SELECTOR;\n }\n\n /// @dev Reads an unpadded bytes4 value from a position in a byte array.\n /// @param b Byte array containing a bytes4 value.\n /// @param index Index in byte array of bytes4 value.\n /// @return bytes4 value from byte array.\n function publicReadBytes4(\n bytes memory b,\n uint256 index\n )\n public\n returns (bytes4 result)\n {\n result = readBytes4(b, index);\n return result;\n }\n}\n"
},
- "sourceTreeHashHex": "0xa7a36325bf2d8fa0e22ab069c659e21cd88f6381abcb6c276cc0ff32802471d4",
+ "sourceTreeHashHex": "0xfe242c83ed003ffe272f8b71d74dfda07c6fad38846d442a205839eae225dc5d",
"compiler": {
"name": "solc",
- "version": "soljson-v0.4.24+commit.e67f0147.js",
+ "version": "soljson-v0.4.10+commit.f0d539ae.js",
"settings": {
"optimizer": {
"enabled": true,
diff --git a/packages/migrations/artifacts/2.0.0/TestLibBytes.json b/packages/migrations/artifacts/2.0.0/TestLibBytes.json
index a79f13ffa..7e9505d70 100644
--- a/packages/migrations/artifacts/2.0.0/TestLibBytes.json
+++ b/packages/migrations/artifacts/2.0.0/TestLibBytes.json
@@ -376,31 +376,31 @@
"evm": {
"bytecode": {
"linkReferences": {},
- "object": "0x608060405234801561001057600080fd5b506112b8806100206000396000f3006080604052600436106100da5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630301d5e181146100df578063076eec081461011657806318c535d9146101435780633f2a25ec146101635780634b3687681461018357806378bbae9b146101a357806382e2fa24146101c357806384f87758146101f0578063a4b1965414610210578063b1840e8d1461023e578063b79650a41461026b578063be766f1b1461028b578063cc12cb28146102b8578063e3a85ce4146102e5578063f06f300d14610305575b600080fd5b3480156100eb57600080fd5b506100ff6100fa366004610b57565b610325565b60405161010d9291906110c1565b60405180910390f35b34801561012257600080fd5b50610136610131366004610bfd565b610339565b60405161010d9190611090565b34801561014f57600080fd5b5061013661015e366004610b94565b610354565b34801561016f57600080fd5b5061013661017e366004610c44565b610367565b34801561018f57600080fd5b5061013661019e366004610d02565b610384565b3480156101af57600080fd5b506101366101be366004610d74565b610397565b3480156101cf57600080fd5b506101e36101de366004610bfd565b6103e1565b60405161010d9190611058565b3480156101fc57600080fd5b5061013661020b366004610ca8565b6103f3565b34801561021c57600080fd5b5061023061022b366004610b57565b610406565b60405161010d9291906110a1565b34801561024a57600080fd5b5061025e610259366004610b94565b610413565b60405161010d9190611066565b34801561027757600080fd5b50610136610286366004610ca8565b610439565b34801561029757600080fd5b506102ab6102a6366004610bfd565b61044c565b60405161010d9190611074565b3480156102c457600080fd5b506102d86102d3366004610bfd565b61045e565b60405161010d9190611082565b3480156102f157600080fd5b506102ab610300366004610bfd565b610470565b34801561031157600080fd5b5061025e610320366004610b94565b610482565b6060600061033283610494565b9293915050565b606061034b838363ffffffff61056116565b90505b92915050565b606061036083836105bc565b5090919050565b606061037a84848463ffffffff61061916565b50825b9392505050565b606061037a84848463ffffffff6106a216565b606060008551838501111515156103ad57600080fd5b855185840111156103bd57600080fd5b6103c686610706565b90506103d78582018583018561070c565b5093949350505050565b600061034b838363ffffffff6107cf16565b606061037a84848463ffffffff61083016565b6060600061033283610876565b600061041e83610494565b5061042882610494565b5061034b838363ffffffff6108ef16565b606061037a84848463ffffffff610a1916565b600061034b838363ffffffff610a2416565b600061034b838363ffffffff610a6f16565b600061034b838363ffffffff610adc16565b600061034b838363ffffffff6108ef16565b60008082511115156104db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d290611101565b60405180910390fd5b815182907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061050b57fe5b016020015182517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01909252507f0100000000000000000000000000000000000000000000000000000000000000908190040290565b6060600061056f8484610adc565b90506020830192508083018451101515156105b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d2906110e1565b50500190565b805182518111156105f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d290611111565b61061461060584610706565b61060e84610706565b8361070c565b505050565b8251601483011115610657576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d290611121565b6014919092010180517fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091189052565b805182602001018351101515156106e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d2906110e1565b610614826106f285610706565b016106fc83610ae8565b835160200161070c565b60200190565b6020811015610736576001816020036101000a038019835116818551168082178652505050610614565b8282141561074357610614565b8282111561077d5760208103905080820181840181515b8285101561077557845186526020958601959094019361075a565b905250610614565b60208103905080820181840183515b818612156107c657825182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0928301929091019061078c565b85525050505050565b600081601401835110151515610811576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d290611121565b50016014015173ffffffffffffffffffffffffffffffffffffffff1690565b825160208301111561086e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d2906110f1565b910160200152565b600060148251101515156108b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d290611121565b6108c48260148451036107cf565b82517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec019092525090565b60008151835114801561034b5750816040518082805190602001908083835b6020831061094b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161090e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199092169116179052604051919093018190038120885190955088945090928392508401908083835b602083106109e057805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109a3565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902060001916149392505050565b610614838383610830565b600081602001835110151515610a66576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d2906110f1565b50016020015190565b600081600401835110151515610ab1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d290611131565b5050602001517fffffffff000000000000000000000000000000000000000000000000000000001690565b600061034b8383610a24565b90565b600061034b82356111b2565b600061034b8235610ae8565b6000601f82018313610b1457600080fd5b8135610b27610b2282611168565b611141565b91508082526020830160208301858383011115610b4357600080fd5b610b4e83828461121a565b50505092915050565b600060208284031215610b6957600080fd5b813567ffffffffffffffff811115610b8057600080fd5b610b8c84828501610b03565b949350505050565b60008060408385031215610ba757600080fd5b823567ffffffffffffffff811115610bbe57600080fd5b610bca85828601610b03565b925050602083013567ffffffffffffffff811115610be757600080fd5b610bf385828601610b03565b9150509250929050565b60008060408385031215610c1057600080fd5b823567ffffffffffffffff811115610c2757600080fd5b610c3385828601610b03565b9250506020610bf385828601610af7565b600080600060608486031215610c5957600080fd5b833567ffffffffffffffff811115610c7057600080fd5b610c7c86828701610b03565b9350506020610c8d86828701610af7565b9250506040610c9e86828701610aeb565b9150509250925092565b600080600060608486031215610cbd57600080fd5b833567ffffffffffffffff811115610cd457600080fd5b610ce086828701610b03565b9350506020610cf186828701610af7565b9250506040610c9e86828701610af7565b600080600060608486031215610d1757600080fd5b833567ffffffffffffffff811115610d2e57600080fd5b610d3a86828701610b03565b9350506020610d4b86828701610af7565b925050604084013567ffffffffffffffff811115610d6857600080fd5b610c9e86828701610b03565b60008060008060808587031215610d8a57600080fd5b843567ffffffffffffffff811115610da157600080fd5b610dad87828801610b03565b9450506020610dbe87828801610af7565b9350506040610dcf87828801610af7565b9250506060610de087828801610af7565b91505092959194509250565b610df5816111b2565b82525050565b610df5816111cb565b610df5816111d0565b610df581610ae8565b610df5816111f5565b6000610e2a826111ae565b808452610e3e816020860160208601611226565b610e4781611256565b9093016020019392505050565b603081527f475245415445525f4f525f455155414c5f544f5f4e45535445445f425954455360208201527f5f4c454e4754485f524551554952454400000000000000000000000000000000604082015260600190565b602681527f475245415445525f4f525f455155414c5f544f5f33325f4c454e4754485f524560208201527f5155495245440000000000000000000000000000000000000000000000000000604082015260600190565b602181527f475245415445525f5448414e5f5a45524f5f4c454e4754485f5245515549524560208201527f4400000000000000000000000000000000000000000000000000000000000000604082015260600190565b603081527f475245415445525f4f525f455155414c5f544f5f534f555243455f425954455360208201527f5f4c454e4754485f524551554952454400000000000000000000000000000000604082015260600190565b602681527f475245415445525f4f525f455155414c5f544f5f32305f4c454e4754485f524560208201527f5155495245440000000000000000000000000000000000000000000000000000604082015260600190565b602581527f475245415445525f4f525f455155414c5f544f5f345f4c454e4754485f52455160208201527f5549524544000000000000000000000000000000000000000000000000000000604082015260600190565b6020810161034e8284610dec565b6020810161034e8284610dfb565b6020810161034e8284610e0d565b6020810161034e8284610e16565b6020808252810161034b8184610e1f565b604080825281016110b28185610e1f565b905061037d6020830184610dec565b604080825281016110d28185610e1f565b905061037d6020830184610e04565b6020808252810161034e81610e54565b6020808252810161034e81610eaa565b6020808252810161034e81610f00565b6020808252810161034e81610f56565b6020808252810161034e81610fac565b6020808252810161034e81611002565b60405181810167ffffffffffffffff8111828210171561116057600080fd5b604052919050565b600067ffffffffffffffff82111561117f57600080fd5b506020601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160190565b5190565b73ffffffffffffffffffffffffffffffffffffffff1690565b151590565b7fff000000000000000000000000000000000000000000000000000000000000001690565b7fffffffff000000000000000000000000000000000000000000000000000000001690565b82818337506000910152565b60005b83811015611241578181015183820152602001611229565b83811115611250576000848401525b50505050565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016905600a265627a7a72305820a09f1c20c853f86425fa5b7abe0ba016f056cece7e075e7a528a56c0fe4205ed6c6578706572696d656e74616cf50037",
- "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x12B8 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xDA JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x301D5E1 DUP2 EQ PUSH2 0xDF JUMPI DUP1 PUSH4 0x76EEC08 EQ PUSH2 0x116 JUMPI DUP1 PUSH4 0x18C535D9 EQ PUSH2 0x143 JUMPI DUP1 PUSH4 0x3F2A25EC EQ PUSH2 0x163 JUMPI DUP1 PUSH4 0x4B368768 EQ PUSH2 0x183 JUMPI DUP1 PUSH4 0x78BBAE9B EQ PUSH2 0x1A3 JUMPI DUP1 PUSH4 0x82E2FA24 EQ PUSH2 0x1C3 JUMPI DUP1 PUSH4 0x84F87758 EQ PUSH2 0x1F0 JUMPI DUP1 PUSH4 0xA4B19654 EQ PUSH2 0x210 JUMPI DUP1 PUSH4 0xB1840E8D EQ PUSH2 0x23E JUMPI DUP1 PUSH4 0xB79650A4 EQ PUSH2 0x26B JUMPI DUP1 PUSH4 0xBE766F1B EQ PUSH2 0x28B JUMPI DUP1 PUSH4 0xCC12CB28 EQ PUSH2 0x2B8 JUMPI DUP1 PUSH4 0xE3A85CE4 EQ PUSH2 0x2E5 JUMPI DUP1 PUSH4 0xF06F300D EQ PUSH2 0x305 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xEB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFF PUSH2 0xFA CALLDATASIZE PUSH1 0x4 PUSH2 0xB57 JUMP JUMPDEST PUSH2 0x325 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x10D SWAP3 SWAP2 SWAP1 PUSH2 0x10C1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x122 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x136 PUSH2 0x131 CALLDATASIZE PUSH1 0x4 PUSH2 0xBFD JUMP JUMPDEST PUSH2 0x339 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x10D SWAP2 SWAP1 PUSH2 0x1090 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x14F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x136 PUSH2 0x15E CALLDATASIZE PUSH1 0x4 PUSH2 0xB94 JUMP JUMPDEST PUSH2 0x354 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x16F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x136 PUSH2 0x17E CALLDATASIZE PUSH1 0x4 PUSH2 0xC44 JUMP JUMPDEST PUSH2 0x367 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x18F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x136 PUSH2 0x19E CALLDATASIZE PUSH1 0x4 PUSH2 0xD02 JUMP JUMPDEST PUSH2 0x384 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x136 PUSH2 0x1BE CALLDATASIZE PUSH1 0x4 PUSH2 0xD74 JUMP JUMPDEST PUSH2 0x397 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E3 PUSH2 0x1DE CALLDATASIZE PUSH1 0x4 PUSH2 0xBFD JUMP JUMPDEST PUSH2 0x3E1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x10D SWAP2 SWAP1 PUSH2 0x1058 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x136 PUSH2 0x20B CALLDATASIZE PUSH1 0x4 PUSH2 0xCA8 JUMP JUMPDEST PUSH2 0x3F3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x21C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x230 PUSH2 0x22B CALLDATASIZE PUSH1 0x4 PUSH2 0xB57 JUMP JUMPDEST PUSH2 0x406 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x10D SWAP3 SWAP2 SWAP1 PUSH2 0x10A1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x24A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25E PUSH2 0x259 CALLDATASIZE PUSH1 0x4 PUSH2 0xB94 JUMP JUMPDEST PUSH2 0x413 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x10D SWAP2 SWAP1 PUSH2 0x1066 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x277 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x136 PUSH2 0x286 CALLDATASIZE PUSH1 0x4 PUSH2 0xCA8 JUMP JUMPDEST PUSH2 0x439 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x297 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AB PUSH2 0x2A6 CALLDATASIZE PUSH1 0x4 PUSH2 0xBFD JUMP JUMPDEST PUSH2 0x44C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x10D SWAP2 SWAP1 PUSH2 0x1074 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2D8 PUSH2 0x2D3 CALLDATASIZE PUSH1 0x4 PUSH2 0xBFD JUMP JUMPDEST PUSH2 0x45E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x10D SWAP2 SWAP1 PUSH2 0x1082 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AB PUSH2 0x300 CALLDATASIZE PUSH1 0x4 PUSH2 0xBFD JUMP JUMPDEST PUSH2 0x470 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x311 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25E PUSH2 0x320 CALLDATASIZE PUSH1 0x4 PUSH2 0xB94 JUMP JUMPDEST PUSH2 0x482 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x332 DUP4 PUSH2 0x494 JUMP JUMPDEST SWAP3 SWAP4 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x34B DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x561 AND JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x360 DUP4 DUP4 PUSH2 0x5BC JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x37A DUP5 DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x619 AND JUMP JUMPDEST POP DUP3 JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x37A DUP5 DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x6A2 AND JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP6 MLOAD DUP4 DUP6 ADD GT ISZERO ISZERO ISZERO PUSH2 0x3AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 MLOAD DUP6 DUP5 ADD GT ISZERO PUSH2 0x3BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3C6 DUP7 PUSH2 0x706 JUMP JUMPDEST SWAP1 POP PUSH2 0x3D7 DUP6 DUP3 ADD DUP6 DUP4 ADD DUP6 PUSH2 0x70C JUMP JUMPDEST POP SWAP4 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x34B DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x7CF AND JUMP JUMPDEST PUSH1 0x60 PUSH2 0x37A DUP5 DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x830 AND JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x332 DUP4 PUSH2 0x876 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x41E DUP4 PUSH2 0x494 JUMP JUMPDEST POP PUSH2 0x428 DUP3 PUSH2 0x494 JUMP JUMPDEST POP PUSH2 0x34B DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x8EF AND JUMP JUMPDEST PUSH1 0x60 PUSH2 0x37A DUP5 DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0xA19 AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x34B DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0xA24 AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x34B DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0xA6F AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x34B DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0xADC AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x34B DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x8EF AND JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 MLOAD GT ISZERO ISZERO PUSH2 0x4DB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4D2 SWAP1 PUSH2 0x1101 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 MLOAD DUP3 SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0x50B JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD DUP3 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP3 MSTORE POP PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV MUL SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x56F DUP5 DUP5 PUSH2 0xADC JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP4 ADD SWAP3 POP DUP1 DUP4 ADD DUP5 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x5B6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4D2 SWAP1 PUSH2 0x10E1 JUMP JUMPDEST POP POP ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD DUP3 MLOAD DUP2 GT ISZERO PUSH2 0x5F9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4D2 SWAP1 PUSH2 0x1111 JUMP JUMPDEST PUSH2 0x614 PUSH2 0x605 DUP5 PUSH2 0x706 JUMP JUMPDEST PUSH2 0x60E DUP5 PUSH2 0x706 JUMP JUMPDEST DUP4 PUSH2 0x70C JUMP JUMPDEST POP POP POP JUMP JUMPDEST DUP3 MLOAD PUSH1 0x14 DUP4 ADD GT ISZERO PUSH2 0x657 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4D2 SWAP1 PUSH2 0x1121 JUMP JUMPDEST PUSH1 0x14 SWAP2 SWAP1 SWAP3 ADD ADD DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 XOR SWAP1 MSTORE JUMP JUMPDEST DUP1 MLOAD DUP3 PUSH1 0x20 ADD ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x6E5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4D2 SWAP1 PUSH2 0x10E1 JUMP JUMPDEST PUSH2 0x614 DUP3 PUSH2 0x6F2 DUP6 PUSH2 0x706 JUMP JUMPDEST ADD PUSH2 0x6FC DUP4 PUSH2 0xAE8 JUMP JUMPDEST DUP4 MLOAD PUSH1 0x20 ADD PUSH2 0x70C JUMP JUMPDEST PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x736 JUMPI PUSH1 0x1 DUP2 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP4 MLOAD AND DUP2 DUP6 MLOAD AND DUP1 DUP3 OR DUP7 MSTORE POP POP POP PUSH2 0x614 JUMP JUMPDEST DUP3 DUP3 EQ ISZERO PUSH2 0x743 JUMPI PUSH2 0x614 JUMP JUMPDEST DUP3 DUP3 GT ISZERO PUSH2 0x77D JUMPI PUSH1 0x20 DUP2 SUB SWAP1 POP DUP1 DUP3 ADD DUP2 DUP5 ADD DUP2 MLOAD JUMPDEST DUP3 DUP6 LT ISZERO PUSH2 0x775 JUMPI DUP5 MLOAD DUP7 MSTORE PUSH1 0x20 SWAP6 DUP7 ADD SWAP6 SWAP1 SWAP5 ADD SWAP4 PUSH2 0x75A JUMP JUMPDEST SWAP1 MSTORE POP PUSH2 0x614 JUMP JUMPDEST PUSH1 0x20 DUP2 SUB SWAP1 POP DUP1 DUP3 ADD DUP2 DUP5 ADD DUP4 MLOAD JUMPDEST DUP2 DUP7 SLT ISZERO PUSH2 0x7C6 JUMPI DUP3 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP3 DUP4 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x78C JUMP JUMPDEST DUP6 MSTORE POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x14 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x811 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4D2 SWAP1 PUSH2 0x1121 JUMP JUMPDEST POP ADD PUSH1 0x14 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x20 DUP4 ADD GT ISZERO PUSH2 0x86E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4D2 SWAP1 PUSH2 0x10F1 JUMP JUMPDEST SWAP2 ADD PUSH1 0x20 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x14 DUP3 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x8B6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4D2 SWAP1 PUSH2 0x1121 JUMP JUMPDEST PUSH2 0x8C4 DUP3 PUSH1 0x14 DUP5 MLOAD SUB PUSH2 0x7CF JUMP JUMPDEST DUP3 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC ADD SWAP1 SWAP3 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP4 MLOAD EQ DUP1 ISZERO PUSH2 0x34B JUMPI POP DUP2 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x94B JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x90E JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP4 ADD DUP2 SWAP1 SUB DUP2 KECCAK256 DUP9 MLOAD SWAP1 SWAP6 POP DUP9 SWAP5 POP SWAP1 SWAP3 DUP4 SWAP3 POP DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x9E0 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x9A3 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 PUSH1 0x0 NOT AND EQ SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x614 DUP4 DUP4 DUP4 PUSH2 0x830 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x20 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0xA66 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4D2 SWAP1 PUSH2 0x10F1 JUMP JUMPDEST POP ADD PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x4 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0xAB1 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4D2 SWAP1 PUSH2 0x1131 JUMP JUMPDEST POP POP PUSH1 0x20 ADD MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x34B DUP4 DUP4 PUSH2 0xA24 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x34B DUP3 CALLDATALOAD PUSH2 0x11B2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x34B DUP3 CALLDATALOAD PUSH2 0xAE8 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0xB14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xB27 PUSH2 0xB22 DUP3 PUSH2 0x1168 JUMP JUMPDEST PUSH2 0x1141 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP4 ADD DUP6 DUP4 DUP4 ADD GT ISZERO PUSH2 0xB43 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB4E DUP4 DUP3 DUP5 PUSH2 0x121A JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xB69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xB80 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB8C DUP5 DUP3 DUP6 ADD PUSH2 0xB03 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xBA7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xBBE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xBCA DUP6 DUP3 DUP7 ADD PUSH2 0xB03 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xBE7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xBF3 DUP6 DUP3 DUP7 ADD PUSH2 0xB03 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xC10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xC27 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC33 DUP6 DUP3 DUP7 ADD PUSH2 0xB03 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0xBF3 DUP6 DUP3 DUP7 ADD PUSH2 0xAF7 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xC59 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xC70 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC7C DUP7 DUP3 DUP8 ADD PUSH2 0xB03 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0xC8D DUP7 DUP3 DUP8 ADD PUSH2 0xAF7 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0xC9E DUP7 DUP3 DUP8 ADD PUSH2 0xAEB JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xCBD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xCD4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xCE0 DUP7 DUP3 DUP8 ADD PUSH2 0xB03 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0xCF1 DUP7 DUP3 DUP8 ADD PUSH2 0xAF7 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0xC9E DUP7 DUP3 DUP8 ADD PUSH2 0xAF7 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xD17 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xD2E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xD3A DUP7 DUP3 DUP8 ADD PUSH2 0xB03 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0xD4B DUP7 DUP3 DUP8 ADD PUSH2 0xAF7 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xD68 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC9E DUP7 DUP3 DUP8 ADD PUSH2 0xB03 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xD8A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xDA1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xDAD DUP8 DUP3 DUP9 ADD PUSH2 0xB03 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0xDBE DUP8 DUP3 DUP9 ADD PUSH2 0xAF7 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 PUSH2 0xDCF DUP8 DUP3 DUP9 ADD PUSH2 0xAF7 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 PUSH2 0xDE0 DUP8 DUP3 DUP9 ADD PUSH2 0xAF7 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH2 0xDF5 DUP2 PUSH2 0x11B2 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0xDF5 DUP2 PUSH2 0x11CB JUMP JUMPDEST PUSH2 0xDF5 DUP2 PUSH2 0x11D0 JUMP JUMPDEST PUSH2 0xDF5 DUP2 PUSH2 0xAE8 JUMP JUMPDEST PUSH2 0xDF5 DUP2 PUSH2 0x11F5 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE2A DUP3 PUSH2 0x11AE JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH2 0xE3E DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x1226 JUMP JUMPDEST PUSH2 0xE47 DUP2 PUSH2 0x1256 JUMP JUMPDEST SWAP1 SWAP4 ADD PUSH1 0x20 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x30 DUP2 MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F4E45535445445F4259544553 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x5F4C454E4754485F524551554952454400000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F33325F4C454E4754485F5245 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x21 DUP2 MSTORE PUSH32 0x475245415445525F5448414E5F5A45524F5F4C454E4754485F52455155495245 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x4400000000000000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x30 DUP2 MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F534F555243455F4259544553 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x5F4C454E4754485F524551554952454400000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F32305F4C454E4754485F5245 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x25 DUP2 MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F345F4C454E4754485F524551 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x5549524544000000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x34E DUP3 DUP5 PUSH2 0xDEC JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x34E DUP3 DUP5 PUSH2 0xDFB JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x34E DUP3 DUP5 PUSH2 0xE0D JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x34E DUP3 DUP5 PUSH2 0xE16 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x34B DUP2 DUP5 PUSH2 0xE1F JUMP JUMPDEST PUSH1 0x40 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x10B2 DUP2 DUP6 PUSH2 0xE1F JUMP JUMPDEST SWAP1 POP PUSH2 0x37D PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0xDEC JUMP JUMPDEST PUSH1 0x40 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x10D2 DUP2 DUP6 PUSH2 0xE1F JUMP JUMPDEST SWAP1 POP PUSH2 0x37D PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0xE04 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x34E DUP2 PUSH2 0xE54 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x34E DUP2 PUSH2 0xEAA JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x34E DUP2 PUSH2 0xF00 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x34E DUP2 PUSH2 0xF56 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x34E DUP2 PUSH2 0xFAC JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x34E DUP2 PUSH2 0x1002 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x1160 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x117F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x1F SWAP2 SWAP1 SWAP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH32 0xFF00000000000000000000000000000000000000000000000000000000000000 AND SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND SWAP1 JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1241 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1229 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x1250 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP1 JUMP STOP LOG2 PUSH6 0x627A7A723058 KECCAK256 LOG0 SWAP16 SHR KECCAK256 0xc8 MSTORE8 0xf8 PUSH5 0x25FA5B7ABE SIGNEXTEND LOG0 AND CREATE JUMP 0xce 0xce PUSH31 0x75E7A528A56C0FE4205ED6C6578706572696D656E74616CF5003700000000 ",
- "sourceMap": "685:7079:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;685:7079:0;;;;;;;"
+ "object": "0x608060405234801561001057600080fd5b506114f8806100206000396000f3006080604052600436106100da5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630301d5e181146100df578063076eec08146101fb57806318c535d9146102cb5780633f2a25ec146103625780634b368768146103d957806378bbae9b1461047657806382e2fa24146104dc57806384f8775814610560578063a4b19654146105c2578063b1840e8d14610689578063b79650a414610734578063be766f1b14610796578063cc12cb2814610803578063e3a85ce414610893578063f06f300d146108ee575b600080fd5b3480156100eb57600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526101389436949293602493928401919081908401838280828437509497506109859650505050505050565b6040518080602001837effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001828103825284818151815260200191508051906020019080838360005b838110156101bf5781810151838201526020016101a7565b50505050905090810190601f1680156101ec5780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b34801561020757600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261025694369492936024939284019190819084018382808284375094975050933594506109999350505050565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610290578181015183820152602001610278565b50505050905090810190601f1680156102bd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102d757600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261025694369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a9998810197919650918201945092508291508401838280828437509497506109b29650505050505050565b34801561036e57600080fd5b506040805160206004803580820135601f8101849004840285018401909552848452610256943694929360249392840191908190840183828082843750949750508435955050505060209091013573ffffffffffffffffffffffffffffffffffffffff1690506109c5565b3480156103e557600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261025694369492936024939284019190819084018382808284375050604080516020601f818a01358b0180359182018390048302840183018552818452989b8a359b909a9099940197509195509182019350915081908401838280828437509497506109e09650505050505050565b34801561048257600080fd5b506040805160206004803580820135601f8101849004840285018401909552848452610256943694929360249392840191908190840183828082843750949750508435955050506020830135926040013591506109f39050565b3480156104e857600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526105379436949293602493928401919081908401838280828437509497505093359450610a3d9350505050565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561056c57600080fd5b506040805160206004803580820135601f8101849004840285018401909552848452610256943694929360249392840191908190840183828082843750949750508435955050506020909201359150610a4f9050565b3480156105ce57600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261061b943694929360249392840191908190840183828082843750949750610a629650505050505050565b60405180806020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182810382528481815181526020019150805190602001908083836000838110156101bf5781810151838201526020016101a7565b34801561069557600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261072094369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750610a6f9650505050505050565b604080519115158252519081900360200190f35b34801561074057600080fd5b506040805160206004803580820135601f8101849004840285018401909552848452610256943694929360249392840191908190840183828082843750949750508435955050506020909201359150610a959050565b3480156107a257600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526107f19436949293602493928401919081908401838280828437509497505093359450610aa89350505050565b60408051918252519081900360200190f35b34801561080f57600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261085e9436949293602493928401919081908401838280828437509497505093359450610aba9350505050565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b34801561089f57600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526107f19436949293602493928401919081908401838280828437509497505093359450610acc9350505050565b3480156108fa57600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261072094369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750610ade9650505050505050565b6060600061099283610af0565b9293915050565b60606109ab838363ffffffff610c0f16565b9392505050565b60606109be8383610cc5565b5090919050565b60606109d884848463ffffffff610d7d16565b509192915050565b60606109d884848463ffffffff610e6116565b60606000855183850111151515610a0957600080fd5b85518584011115610a1957600080fd5b610a2286610f20565b9050610a3385820185830185610f26565b5093949350505050565b60006109ab838363ffffffff610fe916565b60606109d884848463ffffffff6110a516565b6060600061099283611146565b6000610a7a83610af0565b50610a8482610af0565b506109ab838363ffffffff61121a16565b60606109d884848463ffffffff61134416565b60006109ab838363ffffffff61134f16565b60006109ab838363ffffffff6113f516565b60006109ab838363ffffffff6114bd16565b60006109ab838363ffffffff61121a16565b6000808251111515610b8957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f475245415445525f5448414e5f5a45524f5f4c454e4754485f5245515549524560448201527f4400000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b815182907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908110610bb957fe5b016020015182517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01909252507f0100000000000000000000000000000000000000000000000000000000000000908190040290565b60606000610c1d84846114bd565b9050602083019250808301845110151515610cbf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f475245415445525f4f525f455155414c5f544f5f4e45535445445f425954455360448201527f5f4c454e4754485f524551554952454400000000000000000000000000000000606482015290519081900360840190fd5b50500190565b80518251811115610d5d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f475245415445525f4f525f455155414c5f544f5f534f555243455f425954455360448201527f5f4c454e4754485f524551554952454400000000000000000000000000000000606482015290519081900360840190fd5b610d78610d6984610f20565b610d7284610f20565b83610f26565b505050565b8251601483011115610e1657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f475245415445525f4f525f455155414c5f544f5f32305f4c454e4754485f524560448201527f5155495245440000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6014919092010180517fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091189052565b80518260200101835110151515610eff57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f475245415445525f4f525f455155414c5f544f5f4e45535445445f425954455360448201527f5f4c454e4754485f524551554952454400000000000000000000000000000000606482015290519081900360840190fd5b610d7882610f0c85610f20565b01610f16836114c9565b8351602001610f26565b60200190565b6020811015610f50576001816020036101000a038019835116818551168082178652505050610d78565b82821415610f5d57610d78565b82821115610f975760208103905080820181840181515b82851015610f8f578451865260209586019590940193610f74565b905250610d78565b60208103905080820181840183515b81861215610fe057825182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09283019290910190610fa6565b85525050505050565b60008160140183511015151561108657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f475245415445525f4f525f455155414c5f544f5f32305f4c454e4754485f524560448201527f5155495245440000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b50016014015173ffffffffffffffffffffffffffffffffffffffff1690565b825160208301111561113e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f475245415445525f4f525f455155414c5f544f5f33325f4c454e4754485f524560448201527f5155495245440000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b910160200152565b600060148251101515156111e157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f475245415445525f4f525f455155414c5f544f5f32305f4c454e4754485f524560448201527f5155495245440000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6111ef826014845103610fe9565b82517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec019092525090565b6000815183511480156109ab5750816040518082805190602001908083835b6020831061127657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611239565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199092169116179052604051919093018190038120885190955088945090928392508401908083835b6020831061130b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016112ce565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902060001916149392505050565b610d788383836110a5565b6000816020018351101515156113ec57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f475245415445525f4f525f455155414c5f544f5f33325f4c454e4754485f524560448201527f5155495245440000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b50016020015190565b60008160040183511015151561149257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f475245415445525f4f525f455155414c5f544f5f345f4c454e4754485f52455160448201527f5549524544000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b5050602001517fffffffff000000000000000000000000000000000000000000000000000000001690565b60006109ab838361134f565b905600a165627a7a72305820ba7b4c0f930a784427242f01fcb14fd9900b2467aebb82d18d9264cfa7cad0c00029",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x14F8 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xDA JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x301D5E1 DUP2 EQ PUSH2 0xDF JUMPI DUP1 PUSH4 0x76EEC08 EQ PUSH2 0x1FB JUMPI DUP1 PUSH4 0x18C535D9 EQ PUSH2 0x2CB JUMPI DUP1 PUSH4 0x3F2A25EC EQ PUSH2 0x362 JUMPI DUP1 PUSH4 0x4B368768 EQ PUSH2 0x3D9 JUMPI DUP1 PUSH4 0x78BBAE9B EQ PUSH2 0x476 JUMPI DUP1 PUSH4 0x82E2FA24 EQ PUSH2 0x4DC JUMPI DUP1 PUSH4 0x84F87758 EQ PUSH2 0x560 JUMPI DUP1 PUSH4 0xA4B19654 EQ PUSH2 0x5C2 JUMPI DUP1 PUSH4 0xB1840E8D EQ PUSH2 0x689 JUMPI DUP1 PUSH4 0xB79650A4 EQ PUSH2 0x734 JUMPI DUP1 PUSH4 0xBE766F1B EQ PUSH2 0x796 JUMPI DUP1 PUSH4 0xCC12CB28 EQ PUSH2 0x803 JUMPI DUP1 PUSH4 0xE3A85CE4 EQ PUSH2 0x893 JUMPI DUP1 PUSH4 0xF06F300D EQ PUSH2 0x8EE JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xEB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 DUP1 CALLDATALOAD DUP1 DUP3 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x138 SWAP5 CALLDATASIZE SWAP5 SWAP3 SWAP4 PUSH1 0x24 SWAP4 SWAP3 DUP5 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x985 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP4 PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1BF JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1A7 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1EC 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 SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x207 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 DUP1 CALLDATALOAD DUP1 DUP3 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x256 SWAP5 CALLDATASIZE SWAP5 SWAP3 SWAP4 PUSH1 0x24 SWAP4 SWAP3 DUP5 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP POP SWAP4 CALLDATALOAD SWAP5 POP PUSH2 0x999 SWAP4 POP POP POP POP 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 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x290 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x278 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2BD 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 DUP1 ISZERO PUSH2 0x2D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 DUP1 CALLDATALOAD DUP1 DUP3 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x256 SWAP5 CALLDATASIZE SWAP5 SWAP3 SWAP4 PUSH1 0x24 SWAP4 SWAP3 DUP5 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F DUP10 CALLDATALOAD DUP12 ADD DUP1 CALLDATALOAD SWAP2 DUP3 ADD DUP4 SWAP1 DIV DUP4 MUL DUP5 ADD DUP4 ADD SWAP1 SWAP5 MSTORE DUP1 DUP4 MSTORE SWAP8 SWAP11 SWAP10 SWAP9 DUP2 ADD SWAP8 SWAP2 SWAP7 POP SWAP2 DUP3 ADD SWAP5 POP SWAP3 POP DUP3 SWAP2 POP DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x9B2 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x36E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 DUP1 CALLDATALOAD DUP1 DUP3 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x256 SWAP5 CALLDATASIZE SWAP5 SWAP3 SWAP4 PUSH1 0x24 SWAP4 SWAP3 DUP5 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP POP DUP5 CALLDATALOAD SWAP6 POP POP POP POP PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP PUSH2 0x9C5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 DUP1 CALLDATALOAD DUP1 DUP3 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x256 SWAP5 CALLDATASIZE SWAP5 SWAP3 SWAP4 PUSH1 0x24 SWAP4 SWAP3 DUP5 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F DUP2 DUP11 ADD CALLDATALOAD DUP12 ADD DUP1 CALLDATALOAD SWAP2 DUP3 ADD DUP4 SWAP1 DIV DUP4 MUL DUP5 ADD DUP4 ADD DUP6 MSTORE DUP2 DUP5 MSTORE SWAP9 SWAP12 DUP11 CALLDATALOAD SWAP12 SWAP1 SWAP11 SWAP1 SWAP10 SWAP5 ADD SWAP8 POP SWAP2 SWAP6 POP SWAP2 DUP3 ADD SWAP4 POP SWAP2 POP DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x9E0 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x482 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 DUP1 CALLDATALOAD DUP1 DUP3 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x256 SWAP5 CALLDATASIZE SWAP5 SWAP3 SWAP4 PUSH1 0x24 SWAP4 SWAP3 DUP5 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP POP DUP5 CALLDATALOAD SWAP6 POP POP POP PUSH1 0x20 DUP4 ADD CALLDATALOAD SWAP3 PUSH1 0x40 ADD CALLDATALOAD SWAP2 POP PUSH2 0x9F3 SWAP1 POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 DUP1 CALLDATALOAD DUP1 DUP3 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x537 SWAP5 CALLDATASIZE SWAP5 SWAP3 SWAP4 PUSH1 0x24 SWAP4 SWAP3 DUP5 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP POP SWAP4 CALLDATALOAD SWAP5 POP PUSH2 0xA3D SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x56C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 DUP1 CALLDATALOAD DUP1 DUP3 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x256 SWAP5 CALLDATASIZE SWAP5 SWAP3 SWAP4 PUSH1 0x24 SWAP4 SWAP3 DUP5 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP POP DUP5 CALLDATALOAD SWAP6 POP POP POP PUSH1 0x20 SWAP1 SWAP3 ADD CALLDATALOAD SWAP2 POP PUSH2 0xA4F SWAP1 POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 DUP1 CALLDATALOAD DUP1 DUP3 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x61B SWAP5 CALLDATASIZE SWAP5 SWAP3 SWAP4 PUSH1 0x24 SWAP4 SWAP3 DUP5 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0xA62 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 DUP2 LT ISZERO PUSH2 0x1BF JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1A7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x695 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 DUP1 CALLDATALOAD DUP1 DUP3 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x720 SWAP5 CALLDATASIZE SWAP5 SWAP3 SWAP4 PUSH1 0x24 SWAP4 SWAP3 DUP5 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F DUP10 CALLDATALOAD DUP12 ADD DUP1 CALLDATALOAD SWAP2 DUP3 ADD DUP4 SWAP1 DIV DUP4 MUL DUP5 ADD DUP4 ADD SWAP1 SWAP5 MSTORE DUP1 DUP4 MSTORE SWAP8 SWAP11 SWAP10 SWAP9 DUP2 ADD SWAP8 SWAP2 SWAP7 POP SWAP2 DUP3 ADD SWAP5 POP SWAP3 POP DUP3 SWAP2 POP DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0xA6F SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x740 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 DUP1 CALLDATALOAD DUP1 DUP3 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x256 SWAP5 CALLDATASIZE SWAP5 SWAP3 SWAP4 PUSH1 0x24 SWAP4 SWAP3 DUP5 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP POP DUP5 CALLDATALOAD SWAP6 POP POP POP PUSH1 0x20 SWAP1 SWAP3 ADD CALLDATALOAD SWAP2 POP PUSH2 0xA95 SWAP1 POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 DUP1 CALLDATALOAD DUP1 DUP3 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x7F1 SWAP5 CALLDATASIZE SWAP5 SWAP3 SWAP4 PUSH1 0x24 SWAP4 SWAP3 DUP5 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP POP SWAP4 CALLDATALOAD SWAP5 POP PUSH2 0xAA8 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x80F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 DUP1 CALLDATALOAD DUP1 DUP3 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x85E SWAP5 CALLDATASIZE SWAP5 SWAP3 SWAP4 PUSH1 0x24 SWAP4 SWAP3 DUP5 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP POP SWAP4 CALLDATALOAD SWAP5 POP PUSH2 0xABA SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x89F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 DUP1 CALLDATALOAD DUP1 DUP3 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x7F1 SWAP5 CALLDATASIZE SWAP5 SWAP3 SWAP4 PUSH1 0x24 SWAP4 SWAP3 DUP5 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP POP SWAP4 CALLDATALOAD SWAP5 POP PUSH2 0xACC SWAP4 POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 DUP1 CALLDATALOAD DUP1 DUP3 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x720 SWAP5 CALLDATASIZE SWAP5 SWAP3 SWAP4 PUSH1 0x24 SWAP4 SWAP3 DUP5 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F DUP10 CALLDATALOAD DUP12 ADD DUP1 CALLDATALOAD SWAP2 DUP3 ADD DUP4 SWAP1 DIV DUP4 MUL DUP5 ADD DUP4 ADD SWAP1 SWAP5 MSTORE DUP1 DUP4 MSTORE SWAP8 SWAP11 SWAP10 SWAP9 DUP2 ADD SWAP8 SWAP2 SWAP7 POP SWAP2 DUP3 ADD SWAP5 POP SWAP3 POP DUP3 SWAP2 POP DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0xADE SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x992 DUP4 PUSH2 0xAF0 JUMP JUMPDEST SWAP3 SWAP4 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x9AB DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0xC0F AND JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x9BE DUP4 DUP4 PUSH2 0xCC5 JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x9D8 DUP5 DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0xD7D AND JUMP JUMPDEST POP SWAP2 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x9D8 DUP5 DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0xE61 AND JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP6 MLOAD DUP4 DUP6 ADD GT ISZERO ISZERO ISZERO PUSH2 0xA09 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 MLOAD DUP6 DUP5 ADD GT ISZERO PUSH2 0xA19 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA22 DUP7 PUSH2 0xF20 JUMP JUMPDEST SWAP1 POP PUSH2 0xA33 DUP6 DUP3 ADD DUP6 DUP4 ADD DUP6 PUSH2 0xF26 JUMP JUMPDEST POP SWAP4 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x9AB DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0xFE9 AND JUMP JUMPDEST PUSH1 0x60 PUSH2 0x9D8 DUP5 DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x10A5 AND JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x992 DUP4 PUSH2 0x1146 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA7A DUP4 PUSH2 0xAF0 JUMP JUMPDEST POP PUSH2 0xA84 DUP3 PUSH2 0xAF0 JUMP JUMPDEST POP PUSH2 0x9AB DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x121A AND JUMP JUMPDEST PUSH1 0x60 PUSH2 0x9D8 DUP5 DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x1344 AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x9AB DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x134F AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x9AB DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x13F5 AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x9AB DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x14BD AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x9AB DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x121A AND JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 MLOAD GT ISZERO ISZERO PUSH2 0xB89 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x21 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475245415445525F5448414E5F5A45524F5F4C454E4754485F52455155495245 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x4400000000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x84 ADD SWAP1 REVERT JUMPDEST DUP2 MLOAD DUP3 SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0xBB9 JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD DUP3 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP3 MSTORE POP PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV MUL SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0xC1D DUP5 DUP5 PUSH2 0x14BD JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP4 ADD SWAP3 POP DUP1 DUP4 ADD DUP5 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0xCBF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x30 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F4E45535445445F4259544553 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x5F4C454E4754485F524551554952454400000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x84 ADD SWAP1 REVERT JUMPDEST POP POP ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD DUP3 MLOAD DUP2 GT ISZERO PUSH2 0xD5D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x30 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F534F555243455F4259544553 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x5F4C454E4754485F524551554952454400000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x84 ADD SWAP1 REVERT JUMPDEST PUSH2 0xD78 PUSH2 0xD69 DUP5 PUSH2 0xF20 JUMP JUMPDEST PUSH2 0xD72 DUP5 PUSH2 0xF20 JUMP JUMPDEST DUP4 PUSH2 0xF26 JUMP JUMPDEST POP POP POP JUMP JUMPDEST DUP3 MLOAD PUSH1 0x14 DUP4 ADD GT ISZERO PUSH2 0xE16 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F32305F4C454E4754485F5245 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x84 ADD SWAP1 REVERT JUMPDEST PUSH1 0x14 SWAP2 SWAP1 SWAP3 ADD ADD DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 XOR SWAP1 MSTORE JUMP JUMPDEST DUP1 MLOAD DUP3 PUSH1 0x20 ADD ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0xEFF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x30 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F4E45535445445F4259544553 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x5F4C454E4754485F524551554952454400000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x84 ADD SWAP1 REVERT JUMPDEST PUSH2 0xD78 DUP3 PUSH2 0xF0C DUP6 PUSH2 0xF20 JUMP JUMPDEST ADD PUSH2 0xF16 DUP4 PUSH2 0x14C9 JUMP JUMPDEST DUP4 MLOAD PUSH1 0x20 ADD PUSH2 0xF26 JUMP JUMPDEST PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xF50 JUMPI PUSH1 0x1 DUP2 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP4 MLOAD AND DUP2 DUP6 MLOAD AND DUP1 DUP3 OR DUP7 MSTORE POP POP POP PUSH2 0xD78 JUMP JUMPDEST DUP3 DUP3 EQ ISZERO PUSH2 0xF5D JUMPI PUSH2 0xD78 JUMP JUMPDEST DUP3 DUP3 GT ISZERO PUSH2 0xF97 JUMPI PUSH1 0x20 DUP2 SUB SWAP1 POP DUP1 DUP3 ADD DUP2 DUP5 ADD DUP2 MLOAD JUMPDEST DUP3 DUP6 LT ISZERO PUSH2 0xF8F JUMPI DUP5 MLOAD DUP7 MSTORE PUSH1 0x20 SWAP6 DUP7 ADD SWAP6 SWAP1 SWAP5 ADD SWAP4 PUSH2 0xF74 JUMP JUMPDEST SWAP1 MSTORE POP PUSH2 0xD78 JUMP JUMPDEST PUSH1 0x20 DUP2 SUB SWAP1 POP DUP1 DUP3 ADD DUP2 DUP5 ADD DUP4 MLOAD JUMPDEST DUP2 DUP7 SLT ISZERO PUSH2 0xFE0 JUMPI DUP3 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP3 DUP4 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 PUSH2 0xFA6 JUMP JUMPDEST DUP6 MSTORE POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x14 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x1086 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F32305F4C454E4754485F5245 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x84 ADD SWAP1 REVERT JUMPDEST POP ADD PUSH1 0x14 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x20 DUP4 ADD GT ISZERO PUSH2 0x113E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F33325F4C454E4754485F5245 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x84 ADD SWAP1 REVERT JUMPDEST SWAP2 ADD PUSH1 0x20 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x14 DUP3 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x11E1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F32305F4C454E4754485F5245 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x84 ADD SWAP1 REVERT JUMPDEST PUSH2 0x11EF DUP3 PUSH1 0x14 DUP5 MLOAD SUB PUSH2 0xFE9 JUMP JUMPDEST DUP3 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC ADD SWAP1 SWAP3 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP4 MLOAD EQ DUP1 ISZERO PUSH2 0x9AB JUMPI POP DUP2 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1276 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1239 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP4 ADD DUP2 SWAP1 SUB DUP2 KECCAK256 DUP9 MLOAD SWAP1 SWAP6 POP DUP9 SWAP5 POP SWAP1 SWAP3 DUP4 SWAP3 POP DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x130B JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x12CE JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 PUSH1 0x0 NOT AND EQ SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0xD78 DUP4 DUP4 DUP4 PUSH2 0x10A5 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x20 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x13EC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F33325F4C454E4754485F5245 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x84 ADD SWAP1 REVERT JUMPDEST POP ADD PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x4 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x1492 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F345F4C454E4754485F524551 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x5549524544000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x84 ADD SWAP1 REVERT JUMPDEST POP POP PUSH1 0x20 ADD MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x9AB DUP4 DUP4 PUSH2 0x134F JUMP JUMPDEST SWAP1 JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 0xba PUSH28 0x4C0F930A784427242F01FCB14FD9900B2467AEBB82D18D9264CFA7CA 0xd0 0xc0 STOP 0x29 ",
+ "sourceMap": "651:7079:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;651:7079:0;;;;;;;"
},
"deployedBytecode": {
"linkReferences": {},
- "object": "0x6080604052600436106100da5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630301d5e181146100df578063076eec081461011657806318c535d9146101435780633f2a25ec146101635780634b3687681461018357806378bbae9b146101a357806382e2fa24146101c357806384f87758146101f0578063a4b1965414610210578063b1840e8d1461023e578063b79650a41461026b578063be766f1b1461028b578063cc12cb28146102b8578063e3a85ce4146102e5578063f06f300d14610305575b600080fd5b3480156100eb57600080fd5b506100ff6100fa366004610b57565b610325565b60405161010d9291906110c1565b60405180910390f35b34801561012257600080fd5b50610136610131366004610bfd565b610339565b60405161010d9190611090565b34801561014f57600080fd5b5061013661015e366004610b94565b610354565b34801561016f57600080fd5b5061013661017e366004610c44565b610367565b34801561018f57600080fd5b5061013661019e366004610d02565b610384565b3480156101af57600080fd5b506101366101be366004610d74565b610397565b3480156101cf57600080fd5b506101e36101de366004610bfd565b6103e1565b60405161010d9190611058565b3480156101fc57600080fd5b5061013661020b366004610ca8565b6103f3565b34801561021c57600080fd5b5061023061022b366004610b57565b610406565b60405161010d9291906110a1565b34801561024a57600080fd5b5061025e610259366004610b94565b610413565b60405161010d9190611066565b34801561027757600080fd5b50610136610286366004610ca8565b610439565b34801561029757600080fd5b506102ab6102a6366004610bfd565b61044c565b60405161010d9190611074565b3480156102c457600080fd5b506102d86102d3366004610bfd565b61045e565b60405161010d9190611082565b3480156102f157600080fd5b506102ab610300366004610bfd565b610470565b34801561031157600080fd5b5061025e610320366004610b94565b610482565b6060600061033283610494565b9293915050565b606061034b838363ffffffff61056116565b90505b92915050565b606061036083836105bc565b5090919050565b606061037a84848463ffffffff61061916565b50825b9392505050565b606061037a84848463ffffffff6106a216565b606060008551838501111515156103ad57600080fd5b855185840111156103bd57600080fd5b6103c686610706565b90506103d78582018583018561070c565b5093949350505050565b600061034b838363ffffffff6107cf16565b606061037a84848463ffffffff61083016565b6060600061033283610876565b600061041e83610494565b5061042882610494565b5061034b838363ffffffff6108ef16565b606061037a84848463ffffffff610a1916565b600061034b838363ffffffff610a2416565b600061034b838363ffffffff610a6f16565b600061034b838363ffffffff610adc16565b600061034b838363ffffffff6108ef16565b60008082511115156104db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d290611101565b60405180910390fd5b815182907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061050b57fe5b016020015182517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01909252507f0100000000000000000000000000000000000000000000000000000000000000908190040290565b6060600061056f8484610adc565b90506020830192508083018451101515156105b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d2906110e1565b50500190565b805182518111156105f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d290611111565b61061461060584610706565b61060e84610706565b8361070c565b505050565b8251601483011115610657576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d290611121565b6014919092010180517fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091189052565b805182602001018351101515156106e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d2906110e1565b610614826106f285610706565b016106fc83610ae8565b835160200161070c565b60200190565b6020811015610736576001816020036101000a038019835116818551168082178652505050610614565b8282141561074357610614565b8282111561077d5760208103905080820181840181515b8285101561077557845186526020958601959094019361075a565b905250610614565b60208103905080820181840183515b818612156107c657825182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0928301929091019061078c565b85525050505050565b600081601401835110151515610811576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d290611121565b50016014015173ffffffffffffffffffffffffffffffffffffffff1690565b825160208301111561086e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d2906110f1565b910160200152565b600060148251101515156108b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d290611121565b6108c48260148451036107cf565b82517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec019092525090565b60008151835114801561034b5750816040518082805190602001908083835b6020831061094b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161090e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199092169116179052604051919093018190038120885190955088945090928392508401908083835b602083106109e057805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109a3565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902060001916149392505050565b610614838383610830565b600081602001835110151515610a66576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d2906110f1565b50016020015190565b600081600401835110151515610ab1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d290611131565b5050602001517fffffffff000000000000000000000000000000000000000000000000000000001690565b600061034b8383610a24565b90565b600061034b82356111b2565b600061034b8235610ae8565b6000601f82018313610b1457600080fd5b8135610b27610b2282611168565b611141565b91508082526020830160208301858383011115610b4357600080fd5b610b4e83828461121a565b50505092915050565b600060208284031215610b6957600080fd5b813567ffffffffffffffff811115610b8057600080fd5b610b8c84828501610b03565b949350505050565b60008060408385031215610ba757600080fd5b823567ffffffffffffffff811115610bbe57600080fd5b610bca85828601610b03565b925050602083013567ffffffffffffffff811115610be757600080fd5b610bf385828601610b03565b9150509250929050565b60008060408385031215610c1057600080fd5b823567ffffffffffffffff811115610c2757600080fd5b610c3385828601610b03565b9250506020610bf385828601610af7565b600080600060608486031215610c5957600080fd5b833567ffffffffffffffff811115610c7057600080fd5b610c7c86828701610b03565b9350506020610c8d86828701610af7565b9250506040610c9e86828701610aeb565b9150509250925092565b600080600060608486031215610cbd57600080fd5b833567ffffffffffffffff811115610cd457600080fd5b610ce086828701610b03565b9350506020610cf186828701610af7565b9250506040610c9e86828701610af7565b600080600060608486031215610d1757600080fd5b833567ffffffffffffffff811115610d2e57600080fd5b610d3a86828701610b03565b9350506020610d4b86828701610af7565b925050604084013567ffffffffffffffff811115610d6857600080fd5b610c9e86828701610b03565b60008060008060808587031215610d8a57600080fd5b843567ffffffffffffffff811115610da157600080fd5b610dad87828801610b03565b9450506020610dbe87828801610af7565b9350506040610dcf87828801610af7565b9250506060610de087828801610af7565b91505092959194509250565b610df5816111b2565b82525050565b610df5816111cb565b610df5816111d0565b610df581610ae8565b610df5816111f5565b6000610e2a826111ae565b808452610e3e816020860160208601611226565b610e4781611256565b9093016020019392505050565b603081527f475245415445525f4f525f455155414c5f544f5f4e45535445445f425954455360208201527f5f4c454e4754485f524551554952454400000000000000000000000000000000604082015260600190565b602681527f475245415445525f4f525f455155414c5f544f5f33325f4c454e4754485f524560208201527f5155495245440000000000000000000000000000000000000000000000000000604082015260600190565b602181527f475245415445525f5448414e5f5a45524f5f4c454e4754485f5245515549524560208201527f4400000000000000000000000000000000000000000000000000000000000000604082015260600190565b603081527f475245415445525f4f525f455155414c5f544f5f534f555243455f425954455360208201527f5f4c454e4754485f524551554952454400000000000000000000000000000000604082015260600190565b602681527f475245415445525f4f525f455155414c5f544f5f32305f4c454e4754485f524560208201527f5155495245440000000000000000000000000000000000000000000000000000604082015260600190565b602581527f475245415445525f4f525f455155414c5f544f5f345f4c454e4754485f52455160208201527f5549524544000000000000000000000000000000000000000000000000000000604082015260600190565b6020810161034e8284610dec565b6020810161034e8284610dfb565b6020810161034e8284610e0d565b6020810161034e8284610e16565b6020808252810161034b8184610e1f565b604080825281016110b28185610e1f565b905061037d6020830184610dec565b604080825281016110d28185610e1f565b905061037d6020830184610e04565b6020808252810161034e81610e54565b6020808252810161034e81610eaa565b6020808252810161034e81610f00565b6020808252810161034e81610f56565b6020808252810161034e81610fac565b6020808252810161034e81611002565b60405181810167ffffffffffffffff8111828210171561116057600080fd5b604052919050565b600067ffffffffffffffff82111561117f57600080fd5b506020601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160190565b5190565b73ffffffffffffffffffffffffffffffffffffffff1690565b151590565b7fff000000000000000000000000000000000000000000000000000000000000001690565b7fffffffff000000000000000000000000000000000000000000000000000000001690565b82818337506000910152565b60005b83811015611241578181015183820152602001611229565b83811115611250576000848401525b50505050565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016905600a265627a7a72305820a09f1c20c853f86425fa5b7abe0ba016f056cece7e075e7a528a56c0fe4205ed6c6578706572696d656e74616cf50037",
- "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xDA JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x301D5E1 DUP2 EQ PUSH2 0xDF JUMPI DUP1 PUSH4 0x76EEC08 EQ PUSH2 0x116 JUMPI DUP1 PUSH4 0x18C535D9 EQ PUSH2 0x143 JUMPI DUP1 PUSH4 0x3F2A25EC EQ PUSH2 0x163 JUMPI DUP1 PUSH4 0x4B368768 EQ PUSH2 0x183 JUMPI DUP1 PUSH4 0x78BBAE9B EQ PUSH2 0x1A3 JUMPI DUP1 PUSH4 0x82E2FA24 EQ PUSH2 0x1C3 JUMPI DUP1 PUSH4 0x84F87758 EQ PUSH2 0x1F0 JUMPI DUP1 PUSH4 0xA4B19654 EQ PUSH2 0x210 JUMPI DUP1 PUSH4 0xB1840E8D EQ PUSH2 0x23E JUMPI DUP1 PUSH4 0xB79650A4 EQ PUSH2 0x26B JUMPI DUP1 PUSH4 0xBE766F1B EQ PUSH2 0x28B JUMPI DUP1 PUSH4 0xCC12CB28 EQ PUSH2 0x2B8 JUMPI DUP1 PUSH4 0xE3A85CE4 EQ PUSH2 0x2E5 JUMPI DUP1 PUSH4 0xF06F300D EQ PUSH2 0x305 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xEB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFF PUSH2 0xFA CALLDATASIZE PUSH1 0x4 PUSH2 0xB57 JUMP JUMPDEST PUSH2 0x325 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x10D SWAP3 SWAP2 SWAP1 PUSH2 0x10C1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x122 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x136 PUSH2 0x131 CALLDATASIZE PUSH1 0x4 PUSH2 0xBFD JUMP JUMPDEST PUSH2 0x339 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x10D SWAP2 SWAP1 PUSH2 0x1090 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x14F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x136 PUSH2 0x15E CALLDATASIZE PUSH1 0x4 PUSH2 0xB94 JUMP JUMPDEST PUSH2 0x354 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x16F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x136 PUSH2 0x17E CALLDATASIZE PUSH1 0x4 PUSH2 0xC44 JUMP JUMPDEST PUSH2 0x367 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x18F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x136 PUSH2 0x19E CALLDATASIZE PUSH1 0x4 PUSH2 0xD02 JUMP JUMPDEST PUSH2 0x384 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x136 PUSH2 0x1BE CALLDATASIZE PUSH1 0x4 PUSH2 0xD74 JUMP JUMPDEST PUSH2 0x397 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E3 PUSH2 0x1DE CALLDATASIZE PUSH1 0x4 PUSH2 0xBFD JUMP JUMPDEST PUSH2 0x3E1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x10D SWAP2 SWAP1 PUSH2 0x1058 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x136 PUSH2 0x20B CALLDATASIZE PUSH1 0x4 PUSH2 0xCA8 JUMP JUMPDEST PUSH2 0x3F3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x21C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x230 PUSH2 0x22B CALLDATASIZE PUSH1 0x4 PUSH2 0xB57 JUMP JUMPDEST PUSH2 0x406 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x10D SWAP3 SWAP2 SWAP1 PUSH2 0x10A1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x24A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25E PUSH2 0x259 CALLDATASIZE PUSH1 0x4 PUSH2 0xB94 JUMP JUMPDEST PUSH2 0x413 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x10D SWAP2 SWAP1 PUSH2 0x1066 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x277 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x136 PUSH2 0x286 CALLDATASIZE PUSH1 0x4 PUSH2 0xCA8 JUMP JUMPDEST PUSH2 0x439 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x297 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AB PUSH2 0x2A6 CALLDATASIZE PUSH1 0x4 PUSH2 0xBFD JUMP JUMPDEST PUSH2 0x44C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x10D SWAP2 SWAP1 PUSH2 0x1074 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2D8 PUSH2 0x2D3 CALLDATASIZE PUSH1 0x4 PUSH2 0xBFD JUMP JUMPDEST PUSH2 0x45E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x10D SWAP2 SWAP1 PUSH2 0x1082 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AB PUSH2 0x300 CALLDATASIZE PUSH1 0x4 PUSH2 0xBFD JUMP JUMPDEST PUSH2 0x470 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x311 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25E PUSH2 0x320 CALLDATASIZE PUSH1 0x4 PUSH2 0xB94 JUMP JUMPDEST PUSH2 0x482 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x332 DUP4 PUSH2 0x494 JUMP JUMPDEST SWAP3 SWAP4 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x34B DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x561 AND JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x360 DUP4 DUP4 PUSH2 0x5BC JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x37A DUP5 DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x619 AND JUMP JUMPDEST POP DUP3 JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x37A DUP5 DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x6A2 AND JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP6 MLOAD DUP4 DUP6 ADD GT ISZERO ISZERO ISZERO PUSH2 0x3AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 MLOAD DUP6 DUP5 ADD GT ISZERO PUSH2 0x3BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3C6 DUP7 PUSH2 0x706 JUMP JUMPDEST SWAP1 POP PUSH2 0x3D7 DUP6 DUP3 ADD DUP6 DUP4 ADD DUP6 PUSH2 0x70C JUMP JUMPDEST POP SWAP4 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x34B DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x7CF AND JUMP JUMPDEST PUSH1 0x60 PUSH2 0x37A DUP5 DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x830 AND JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x332 DUP4 PUSH2 0x876 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x41E DUP4 PUSH2 0x494 JUMP JUMPDEST POP PUSH2 0x428 DUP3 PUSH2 0x494 JUMP JUMPDEST POP PUSH2 0x34B DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x8EF AND JUMP JUMPDEST PUSH1 0x60 PUSH2 0x37A DUP5 DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0xA19 AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x34B DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0xA24 AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x34B DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0xA6F AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x34B DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0xADC AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x34B DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x8EF AND JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 MLOAD GT ISZERO ISZERO PUSH2 0x4DB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4D2 SWAP1 PUSH2 0x1101 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 MLOAD DUP3 SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0x50B JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD DUP3 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP3 MSTORE POP PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV MUL SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x56F DUP5 DUP5 PUSH2 0xADC JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP4 ADD SWAP3 POP DUP1 DUP4 ADD DUP5 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x5B6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4D2 SWAP1 PUSH2 0x10E1 JUMP JUMPDEST POP POP ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD DUP3 MLOAD DUP2 GT ISZERO PUSH2 0x5F9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4D2 SWAP1 PUSH2 0x1111 JUMP JUMPDEST PUSH2 0x614 PUSH2 0x605 DUP5 PUSH2 0x706 JUMP JUMPDEST PUSH2 0x60E DUP5 PUSH2 0x706 JUMP JUMPDEST DUP4 PUSH2 0x70C JUMP JUMPDEST POP POP POP JUMP JUMPDEST DUP3 MLOAD PUSH1 0x14 DUP4 ADD GT ISZERO PUSH2 0x657 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4D2 SWAP1 PUSH2 0x1121 JUMP JUMPDEST PUSH1 0x14 SWAP2 SWAP1 SWAP3 ADD ADD DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 XOR SWAP1 MSTORE JUMP JUMPDEST DUP1 MLOAD DUP3 PUSH1 0x20 ADD ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x6E5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4D2 SWAP1 PUSH2 0x10E1 JUMP JUMPDEST PUSH2 0x614 DUP3 PUSH2 0x6F2 DUP6 PUSH2 0x706 JUMP JUMPDEST ADD PUSH2 0x6FC DUP4 PUSH2 0xAE8 JUMP JUMPDEST DUP4 MLOAD PUSH1 0x20 ADD PUSH2 0x70C JUMP JUMPDEST PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x736 JUMPI PUSH1 0x1 DUP2 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP4 MLOAD AND DUP2 DUP6 MLOAD AND DUP1 DUP3 OR DUP7 MSTORE POP POP POP PUSH2 0x614 JUMP JUMPDEST DUP3 DUP3 EQ ISZERO PUSH2 0x743 JUMPI PUSH2 0x614 JUMP JUMPDEST DUP3 DUP3 GT ISZERO PUSH2 0x77D JUMPI PUSH1 0x20 DUP2 SUB SWAP1 POP DUP1 DUP3 ADD DUP2 DUP5 ADD DUP2 MLOAD JUMPDEST DUP3 DUP6 LT ISZERO PUSH2 0x775 JUMPI DUP5 MLOAD DUP7 MSTORE PUSH1 0x20 SWAP6 DUP7 ADD SWAP6 SWAP1 SWAP5 ADD SWAP4 PUSH2 0x75A JUMP JUMPDEST SWAP1 MSTORE POP PUSH2 0x614 JUMP JUMPDEST PUSH1 0x20 DUP2 SUB SWAP1 POP DUP1 DUP3 ADD DUP2 DUP5 ADD DUP4 MLOAD JUMPDEST DUP2 DUP7 SLT ISZERO PUSH2 0x7C6 JUMPI DUP3 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP3 DUP4 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x78C JUMP JUMPDEST DUP6 MSTORE POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x14 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x811 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4D2 SWAP1 PUSH2 0x1121 JUMP JUMPDEST POP ADD PUSH1 0x14 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x20 DUP4 ADD GT ISZERO PUSH2 0x86E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4D2 SWAP1 PUSH2 0x10F1 JUMP JUMPDEST SWAP2 ADD PUSH1 0x20 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x14 DUP3 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x8B6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4D2 SWAP1 PUSH2 0x1121 JUMP JUMPDEST PUSH2 0x8C4 DUP3 PUSH1 0x14 DUP5 MLOAD SUB PUSH2 0x7CF JUMP JUMPDEST DUP3 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC ADD SWAP1 SWAP3 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP4 MLOAD EQ DUP1 ISZERO PUSH2 0x34B JUMPI POP DUP2 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x94B JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x90E JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP4 ADD DUP2 SWAP1 SUB DUP2 KECCAK256 DUP9 MLOAD SWAP1 SWAP6 POP DUP9 SWAP5 POP SWAP1 SWAP3 DUP4 SWAP3 POP DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x9E0 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x9A3 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 PUSH1 0x0 NOT AND EQ SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x614 DUP4 DUP4 DUP4 PUSH2 0x830 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x20 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0xA66 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4D2 SWAP1 PUSH2 0x10F1 JUMP JUMPDEST POP ADD PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x4 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0xAB1 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4D2 SWAP1 PUSH2 0x1131 JUMP JUMPDEST POP POP PUSH1 0x20 ADD MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x34B DUP4 DUP4 PUSH2 0xA24 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x34B DUP3 CALLDATALOAD PUSH2 0x11B2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x34B DUP3 CALLDATALOAD PUSH2 0xAE8 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0xB14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xB27 PUSH2 0xB22 DUP3 PUSH2 0x1168 JUMP JUMPDEST PUSH2 0x1141 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP4 ADD DUP6 DUP4 DUP4 ADD GT ISZERO PUSH2 0xB43 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB4E DUP4 DUP3 DUP5 PUSH2 0x121A JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xB69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xB80 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB8C DUP5 DUP3 DUP6 ADD PUSH2 0xB03 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xBA7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xBBE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xBCA DUP6 DUP3 DUP7 ADD PUSH2 0xB03 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xBE7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xBF3 DUP6 DUP3 DUP7 ADD PUSH2 0xB03 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xC10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xC27 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC33 DUP6 DUP3 DUP7 ADD PUSH2 0xB03 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0xBF3 DUP6 DUP3 DUP7 ADD PUSH2 0xAF7 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xC59 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xC70 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC7C DUP7 DUP3 DUP8 ADD PUSH2 0xB03 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0xC8D DUP7 DUP3 DUP8 ADD PUSH2 0xAF7 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0xC9E DUP7 DUP3 DUP8 ADD PUSH2 0xAEB JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xCBD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xCD4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xCE0 DUP7 DUP3 DUP8 ADD PUSH2 0xB03 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0xCF1 DUP7 DUP3 DUP8 ADD PUSH2 0xAF7 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0xC9E DUP7 DUP3 DUP8 ADD PUSH2 0xAF7 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xD17 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xD2E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xD3A DUP7 DUP3 DUP8 ADD PUSH2 0xB03 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0xD4B DUP7 DUP3 DUP8 ADD PUSH2 0xAF7 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xD68 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC9E DUP7 DUP3 DUP8 ADD PUSH2 0xB03 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xD8A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xDA1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xDAD DUP8 DUP3 DUP9 ADD PUSH2 0xB03 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0xDBE DUP8 DUP3 DUP9 ADD PUSH2 0xAF7 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 PUSH2 0xDCF DUP8 DUP3 DUP9 ADD PUSH2 0xAF7 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 PUSH2 0xDE0 DUP8 DUP3 DUP9 ADD PUSH2 0xAF7 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH2 0xDF5 DUP2 PUSH2 0x11B2 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0xDF5 DUP2 PUSH2 0x11CB JUMP JUMPDEST PUSH2 0xDF5 DUP2 PUSH2 0x11D0 JUMP JUMPDEST PUSH2 0xDF5 DUP2 PUSH2 0xAE8 JUMP JUMPDEST PUSH2 0xDF5 DUP2 PUSH2 0x11F5 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE2A DUP3 PUSH2 0x11AE JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH2 0xE3E DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x1226 JUMP JUMPDEST PUSH2 0xE47 DUP2 PUSH2 0x1256 JUMP JUMPDEST SWAP1 SWAP4 ADD PUSH1 0x20 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x30 DUP2 MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F4E45535445445F4259544553 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x5F4C454E4754485F524551554952454400000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F33325F4C454E4754485F5245 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x21 DUP2 MSTORE PUSH32 0x475245415445525F5448414E5F5A45524F5F4C454E4754485F52455155495245 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x4400000000000000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x30 DUP2 MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F534F555243455F4259544553 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x5F4C454E4754485F524551554952454400000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F32305F4C454E4754485F5245 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x25 DUP2 MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F345F4C454E4754485F524551 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x5549524544000000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x34E DUP3 DUP5 PUSH2 0xDEC JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x34E DUP3 DUP5 PUSH2 0xDFB JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x34E DUP3 DUP5 PUSH2 0xE0D JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x34E DUP3 DUP5 PUSH2 0xE16 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x34B DUP2 DUP5 PUSH2 0xE1F JUMP JUMPDEST PUSH1 0x40 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x10B2 DUP2 DUP6 PUSH2 0xE1F JUMP JUMPDEST SWAP1 POP PUSH2 0x37D PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0xDEC JUMP JUMPDEST PUSH1 0x40 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x10D2 DUP2 DUP6 PUSH2 0xE1F JUMP JUMPDEST SWAP1 POP PUSH2 0x37D PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0xE04 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x34E DUP2 PUSH2 0xE54 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x34E DUP2 PUSH2 0xEAA JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x34E DUP2 PUSH2 0xF00 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x34E DUP2 PUSH2 0xF56 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x34E DUP2 PUSH2 0xFAC JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x34E DUP2 PUSH2 0x1002 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x1160 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x117F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x1F SWAP2 SWAP1 SWAP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH32 0xFF00000000000000000000000000000000000000000000000000000000000000 AND SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND SWAP1 JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1241 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1229 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x1250 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP1 JUMP STOP LOG2 PUSH6 0x627A7A723058 KECCAK256 LOG0 SWAP16 SHR KECCAK256 0xc8 MSTORE8 0xf8 PUSH5 0x25FA5B7ABE SIGNEXTEND LOG0 AND CREATE JUMP 0xce 0xce PUSH31 0x75E7A528A56C0FE4205ED6C6578706572696D656E74616CF5003700000000 ",
- "sourceMap": "685:7079:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;923:190;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;923:190:0;;;;;;;;;;;;;;;;;;;;;;;;;;6000:235;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6000:235:0;;;;;;;;;;;;;;;;;2394:228;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2394:228:0;;;;;;;;;3287:230;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3287:230:0;;;;;;;;;6494:251;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6494:251:0;;;;;;;;;7114:648;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7114:648:0;;;;;;;;;2836:214;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2836:214:0;;;;;;;;;;;;;;;;;4203:230;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4203:230:0;;;;;;;;;1308:197;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1308:197:0;;;;;;;;;;;;;;;;;;1909:239;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1909:239:0;;;;;;;;;;;;;;;;;5119:230;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5119:230:0;;;;;;;;;3753:214;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3753:214:0;;;;;;;;;;;;;;;;;5591:211;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5591:211:0;;;;;;;;;;;;;;;;;4669:214;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4669:214:0;;;;;;;;;1718:181;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1718:181:0;;;;;;;;;923:190;1011:5;1025:13;1063:15;:1;:13;:15::i;:::-;1096:1;;923:190;-1:-1:-1;;923:190:0:o;6000:235::-;6133:19;6177:28;:1;6199:5;6177:28;:21;:28;:::i;:::-;6168:37;-1:-1:-1;6000:235:0;;;;;:::o;2394:228::-;2530:5;2558:36;2581:4;2587:6;2558:22;:36::i;:::-;-1:-1:-1;2611:4:0;;2394:228;-1:-1:-1;2394:228:0:o;3287:230::-;3436:5;3464:28;:1;3479:5;3486;3464:28;:14;:28;:::i;:::-;-1:-1:-1;3509:1:0;3287:230;;;;;;:::o;6494:251::-;6656:5;6684:36;:1;6707:5;6714;6684:36;:22;:36;:::i;7114:648::-;7315:5;7525:14;7415:3;:10;7405:6;7396;:15;:29;;7388:38;;;;;;;;7461:10;;7444:13;;;:27;;7436:36;;;;;;7542:20;:3;:18;:20::i;:::-;7525:37;;7635:56;7661:4;7652:6;:13;7676:6;7667;:15;7684:6;7635:16;:56::i;:::-;-1:-1:-1;7752:3:0;;7114:648;-1:-1:-1;;;;7114:648:0:o;2836:214::-;2961:14;3000:20;:1;3014:5;3000:20;:13;:20;:::i;4203:230::-;4352:5;4380:28;:1;4395:5;4402;4380:28;:14;:28;:::i;1308:197::-;1399:5;1413:14;1452:18;:1;:16;:18::i;1909:239::-;2016:10;2042:17;:3;:15;:17::i;:::-;;2069;:3;:15;:17::i;:::-;-1:-1:-1;2104:15:0;:3;2115;2104:15;:10;:15;:::i;5119:230::-;5268:5;5296:28;:1;5311:5;5318;5296:28;:14;:28;:::i;3753:214::-;3878:14;3917:20;:1;3931:5;3917:20;:13;:20;:::i;5591:211::-;5715:13;5753:19;:1;5766:5;5753:19;:12;:19;:::i;4669:214::-;4794:14;4833:20;:1;4847:5;4833:20;:13;:20;:::i;1718:181::-;1821:10;1855:15;:3;1866;1855:15;:10;:15;:::i;8118:448:1:-;8202:13;8263:1;8252;:8;:12;8231:92;;;;;;;;;;;;;;;;;;;;;;;;8373:8;;8371:1;;8373:12;;;;8371:15;;;;;;;;;;8485:8;;8481:16;;8510:17;;;-1:-1:-1;8371:15:1;;;;;;;8118:448::o;16204:672::-;16333:19;16407:25;16435:21;16447:1;16450:5;16435:11;:21::i;:::-;16407:49;;16475:2;16466:11;;;;16611:17;16603:5;:25;16591:1;:8;:37;;16570:132;;;;;;;;;;;;;;;;-1:-1:-1;;16824:13:1;;16204:672::o;17971:504::-;18120:13;;18248:11;;:24;-1:-1:-1;18248:24:1;18227:119;;;;;;;;;;;;;;18356:112;18377:21;:4;:19;:21::i;:::-;18412:23;:6;:21;:23::i;:::-;18449:9;18356:7;:112::i;:::-;17971:504;;;:::o;11196:1617::-;11359:8;;11379:2;11371:10;;-1:-1:-1;11359:22:1;11338:135;;;;;;;;;;;;;;11720:2;12409:13;;;;;12403:20;;12425:66;12399:93;12637:42;12626:54;;;12775:21;;;;12753:44;;11785:1022::o;17092:633::-;17399:5;:12;17355:5;17363:2;17355:10;:56;17343:1;:8;:68;;17322:163;;;;;;;;;;;;;;;;17529:189;17571:5;17550:18;:1;:16;:18::i;:::-;:26;17590:18;:5;:16;:18::i;:::-;17652:5;:12;17667:2;17652:17;17529:7;:189::i;1341:228::-;1520:2;1509:14;;1341:228::o;1808:4207::-;1958:2;1949:6;:11;1945:4064;;;2247:1;2237:6;2233:2;2229:15;2224:3;2220:25;2216:33;2298:4;2294:9;2285:6;2279:13;2275:29;2347:4;2340;2334:11;2330:22;2388:1;2385;2382:8;2376:4;2369:22;2186:219;;;;;;2509:4;2499:6;:14;2495:59;;;2533:7;;2495:59;3243:4;3234:6;:13;3230:2769;;;3569:2;3561:6;3557:15;3547:25;;3617:6;3609;3605:19;3667:6;3661:4;3657:17;3974:4;3968:11;4177:198;4195:4;4187:6;4184:16;4177:198;;;4243:13;;4230:27;;4304:2;4340:13;;;;4292:15;;;;4177:198;;;4464:18;;-1:-1:-1;3276:1224:1;;;4745:2;4737:6;4733:15;4723:25;;4793:6;4785;4781:19;4843:6;4837:4;4833:17;5153:6;5147:13;5667:191;5684:4;5678;5674:15;5667:191;;;5732:11;;5719:25;;5777:13;;;;;5823;;;;5667:191;;;5948:19;;-1:-1:-1;;1808:4207:1;;;:::o;10073:886::-;10194:14;10257:5;10265:2;10257:10;10245:1;:8;:22;;10224:135;;;;;;;;;;;;;;;;-1:-1:-1;10861:13:1;10606:2;10861:13;10855:20;10877:42;10851:69;;10073:886::o;13775:456::-;13938:8;;13958:2;13950:10;;-1:-1:-1;13938:22:1;13917:107;;;;;;;;;;;;;;14194:13;;14105:2;14194:13;14187:28;14173:52::o;8761:482::-;8848:14;8911:2;8899:1;:8;:14;;8878:99;;;;;;;;;;;;;;;;9029:29;9041:1;9055:2;9044:1;:8;:13;9029:11;:29::i;:::-;9161:8;;9157:17;;9187;;;-1:-1:-1;9020:38:1;8761:482::o;9456:403::-;9577:10;9806:3;:10;9792:3;:10;:24;:60;;;;;9848:3;9838:14;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;365:33;;9838:14:1;;;;;;;;;;;9820;;9838;;-1:-1:-1;9820:14:1;;-1:-1:-1;9838:14:1;;;;-1:-1:-1;9820:14:1;;;;9838;9820;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;9820:14:1;;;;;;;;;;;;;;;;:32;;;;9785:67;9456:403;-1:-1:-1;;;9456:403:1:o;14898:187::-;15040:38;15053:1;15056:5;15071;15040:12;:38::i;13049:490::-;13170:14;13233:5;13241:2;13233:10;13221:1;:8;:22;;13200:107;;;;;;;;;;;;;;;;-1:-1:-1;13486:13:1;13388:2;13486:13;13480:20;;13049:490::o;15327:554::-;15442:13;15504:5;15512:1;15504:9;15492:1;:8;:21;;15471:105;;;;;;;;;;;;;;;;-1:-1:-1;;15632:2:1;15625:10;15619:17;15775:66;15763:79;;15327:554::o;14467:195::-;14588:14;14633:21;14645:1;14648:5;14633:11;:21::i;922:215::-;1086:5;922:215::o;5:118:-1:-;;72:46;110:6;97:20;72:46;;130:118;;197:46;235:6;222:20;197:46;;256:440;;350:4;338:17;;334:27;-1:-1;324:2;;375:1;372;365:12;324:2;412:6;399:20;434:64;449:48;490:6;449:48;;;434:64;;;425:73;;518:6;511:5;504:21;554:4;546:6;542:17;587:4;580:5;576:16;622:3;613:6;608:3;604:16;601:25;598:2;;;639:1;636;629:12;598:2;649:41;683:6;678:3;673;649:41;;;317:379;;;;;;;;829:345;;942:2;930:9;921:7;917:23;913:32;910:2;;;958:1;955;948:12;910:2;993:31;;1044:18;1033:30;;1030:2;;;1076:1;1073;1066:12;1030:2;1096:62;1150:7;1141:6;1130:9;1126:22;1096:62;;;1086:72;904:270;-1:-1;;;;904:270;1181:574;;;1320:2;1308:9;1299:7;1295:23;1291:32;1288:2;;;1336:1;1333;1326:12;1288:2;1371:31;;1422:18;1411:30;;1408:2;;;1454:1;1451;1444:12;1408:2;1474:62;1528:7;1519:6;1508:9;1504:22;1474:62;;;1464:72;;1350:192;1601:2;1590:9;1586:18;1573:32;1625:18;1617:6;1614:30;1611:2;;;1657:1;1654;1647:12;1611:2;1677:62;1731:7;1722:6;1711:9;1707:22;1677:62;;;1667:72;;1552:193;1282:473;;;;;;1762:470;;;1892:2;1880:9;1871:7;1867:23;1863:32;1860:2;;;1908:1;1905;1898:12;1860:2;1943:31;;1994:18;1983:30;;1980:2;;;2026:1;2023;2016:12;1980:2;2046:62;2100:7;2091:6;2080:9;2076:22;2046:62;;;2036:72;;1922:192;2145:2;2163:53;2208:7;2199:6;2188:9;2184:22;2163:53;;2239:595;;;;2386:2;2374:9;2365:7;2361:23;2357:32;2354:2;;;2402:1;2399;2392:12;2354:2;2437:31;;2488:18;2477:30;;2474:2;;;2520:1;2517;2510:12;2474:2;2540:62;2594:7;2585:6;2574:9;2570:22;2540:62;;;2530:72;;2416:192;2639:2;2657:53;2702:7;2693:6;2682:9;2678:22;2657:53;;;2647:63;;2618:98;2747:2;2765:53;2810:7;2801:6;2790:9;2786:22;2765:53;;;2755:63;;2726:98;2348:486;;;;;;2841:595;;;;2988:2;2976:9;2967:7;2963:23;2959:32;2956:2;;;3004:1;3001;2994:12;2956:2;3039:31;;3090:18;3079:30;;3076:2;;;3122:1;3119;3112:12;3076:2;3142:62;3196:7;3187:6;3176:9;3172:22;3142:62;;;3132:72;;3018:192;3241:2;3259:53;3304:7;3295:6;3284:9;3280:22;3259:53;;;3249:63;;3220:98;3349:2;3367:53;3412:7;3403:6;3392:9;3388:22;3367:53;;3443:699;;;;3599:2;3587:9;3578:7;3574:23;3570:32;3567:2;;;3615:1;3612;3605:12;3567:2;3650:31;;3701:18;3690:30;;3687:2;;;3733:1;3730;3723:12;3687:2;3753:62;3807:7;3798:6;3787:9;3783:22;3753:62;;;3743:72;;3629:192;3852:2;3870:53;3915:7;3906:6;3895:9;3891:22;3870:53;;;3860:63;;3831:98;3988:2;3977:9;3973:18;3960:32;4012:18;4004:6;4001:30;3998:2;;;4044:1;4041;4034:12;3998:2;4064:62;4118:7;4109:6;4098:9;4094:22;4064:62;;4751:721;;;;;4915:3;4903:9;4894:7;4890:23;4886:33;4883:2;;;4932:1;4929;4922:12;4883:2;4967:31;;5018:18;5007:30;;5004:2;;;5050:1;5047;5040:12;5004:2;5070:62;5124:7;5115:6;5104:9;5100:22;5070:62;;;5060:72;;4946:192;5169:2;5187:53;5232:7;5223:6;5212:9;5208:22;5187:53;;;5177:63;;5148:98;5277:2;5295:53;5340:7;5331:6;5320:9;5316:22;5295:53;;;5285:63;;5256:98;5385:2;5403:53;5448:7;5439:6;5428:9;5424:22;5403:53;;;5393:63;;5364:98;4877:595;;;;;;;;5479:110;5552:31;5577:5;5552:31;;;5547:3;5540:44;5534:55;;;5596:101;5663:28;5685:5;5663:28;;5704:107;5775:30;5799:5;5775:30;;5818:110;5891:31;5916:5;5891:31;;5935:107;6006:30;6030:5;6006:30;;6049:297;;6149:38;6181:5;6149:38;;;6204:6;6199:3;6192:19;6216:63;6272:6;6265:4;6260:3;6256:14;6249:4;6242:5;6238:16;6216:63;;;6311:29;6333:6;6311:29;;;6291:50;;;6304:4;6291:50;;6129:217;-1:-1;;;6129:217;6354:397;6509:2;6497:15;;6546:66;6541:2;6532:12;;6525:88;6647:66;6642:2;6633:12;;6626:88;6742:2;6733:12;;6490:261;6760:397;6915:2;6903:15;;6952:66;6947:2;6938:12;;6931:88;7053:66;7048:2;7039:12;;7032:88;7148:2;7139:12;;6896:261;7166:397;7321:2;7309:15;;7358:66;7353:2;7344:12;;7337:88;7459:66;7454:2;7445:12;;7438:88;7554:2;7545:12;;7302:261;7572:397;7727:2;7715:15;;7764:66;7759:2;7750:12;;7743:88;7865:66;7860:2;7851:12;;7844:88;7960:2;7951:12;;7708:261;7978:397;8133:2;8121:15;;8170:66;8165:2;8156:12;;8149:88;8271:66;8266:2;8257:12;;8250:88;8366:2;8357:12;;8114:261;8384:397;8539:2;8527:15;;8576:66;8571:2;8562:12;;8555:88;8677:66;8672:2;8663:12;;8656:88;8772:2;8763:12;;8520:261;8906:193;9014:2;8999:18;;9028:61;9003:9;9062:6;9028:61;;9106:181;9208:2;9193:18;;9222:55;9197:9;9250:6;9222:55;;9294:193;9402:2;9387:18;;9416:61;9391:9;9450:6;9416:61;;9494:189;9600:2;9585:18;;9614:59;9589:9;9646:6;9614:59;;9690:277;9816:2;9830:47;;;9801:18;;9891:66;9801:18;9943:6;9891:66;;9974:378;10128:2;10142:47;;;10113:18;;10203:66;10113:18;10255:6;10203:66;;;10195:74;;10280:62;10338:2;10327:9;10323:18;10314:6;10280:62;;10359:374;10511:2;10525:47;;;10496:18;;10586:66;10496:18;10638:6;10586:66;;;10578:74;;10663:60;10719:2;10708:9;10704:18;10695:6;10663:60;;10740:387;10921:2;10935:47;;;10906:18;;10996:121;10906:18;10996:121;;11134:387;11315:2;11329:47;;;11300:18;;11390:121;11300:18;11390:121;;11528:387;11709:2;11723:47;;;11694:18;;11784:121;11694:18;11784:121;;11922:387;12103:2;12117:47;;;12088:18;;12178:121;12088:18;12178:121;;12316:387;12497:2;12511:47;;;12482:18;;12572:121;12482:18;12572:121;;12710:387;12891:2;12905:47;;;12876:18;;12966:121;12876:18;12966:121;;13304:256;13366:2;13360:9;13392:17;;;13467:18;13452:34;;13488:22;;;13449:62;13446:2;;;13524:1;13521;13514:12;13446:2;13540;13533:22;13344:216;;-1:-1;13344:216;13567:258;;13710:18;13702:6;13699:30;13696:2;;;13742:1;13739;13732:12;13696:2;-1:-1;13815:4;13786;13763:17;;;;13782:9;13759:33;13805:15;;13633:192;13832:91;13906:12;;13890:33;13930:128;14010:42;13999:54;;13982:76;14065:92;14138:13;14131:21;;14114:43;14164:151;14243:66;14232:78;;14215:100;14408:151;14487:66;14476:78;;14459:100;14960:145;15041:6;15036:3;15031;15018:30;-1:-1;15097:1;15079:16;;15072:27;15011:94;15114:268;15179:1;15186:101;15200:6;15197:1;15194:13;15186:101;;;15267:11;;;15261:18;15248:11;;;15241:39;15222:2;15215:10;15186:101;;;15302:6;15299:1;15296:13;15293:2;;;15367:1;15358:6;15353:3;15349:16;15342:27;15293:2;15163:219;;;;;15390:97;15478:2;15458:14;15474:7;15454:28;;15438:49"
+ "object": "0x6080604052600436106100da5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630301d5e181146100df578063076eec08146101fb57806318c535d9146102cb5780633f2a25ec146103625780634b368768146103d957806378bbae9b1461047657806382e2fa24146104dc57806384f8775814610560578063a4b19654146105c2578063b1840e8d14610689578063b79650a414610734578063be766f1b14610796578063cc12cb2814610803578063e3a85ce414610893578063f06f300d146108ee575b600080fd5b3480156100eb57600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526101389436949293602493928401919081908401838280828437509497506109859650505050505050565b6040518080602001837effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001828103825284818151815260200191508051906020019080838360005b838110156101bf5781810151838201526020016101a7565b50505050905090810190601f1680156101ec5780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b34801561020757600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261025694369492936024939284019190819084018382808284375094975050933594506109999350505050565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610290578181015183820152602001610278565b50505050905090810190601f1680156102bd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102d757600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261025694369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a9998810197919650918201945092508291508401838280828437509497506109b29650505050505050565b34801561036e57600080fd5b506040805160206004803580820135601f8101849004840285018401909552848452610256943694929360249392840191908190840183828082843750949750508435955050505060209091013573ffffffffffffffffffffffffffffffffffffffff1690506109c5565b3480156103e557600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261025694369492936024939284019190819084018382808284375050604080516020601f818a01358b0180359182018390048302840183018552818452989b8a359b909a9099940197509195509182019350915081908401838280828437509497506109e09650505050505050565b34801561048257600080fd5b506040805160206004803580820135601f8101849004840285018401909552848452610256943694929360249392840191908190840183828082843750949750508435955050506020830135926040013591506109f39050565b3480156104e857600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526105379436949293602493928401919081908401838280828437509497505093359450610a3d9350505050565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561056c57600080fd5b506040805160206004803580820135601f8101849004840285018401909552848452610256943694929360249392840191908190840183828082843750949750508435955050506020909201359150610a4f9050565b3480156105ce57600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261061b943694929360249392840191908190840183828082843750949750610a629650505050505050565b60405180806020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182810382528481815181526020019150805190602001908083836000838110156101bf5781810151838201526020016101a7565b34801561069557600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261072094369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750610a6f9650505050505050565b604080519115158252519081900360200190f35b34801561074057600080fd5b506040805160206004803580820135601f8101849004840285018401909552848452610256943694929360249392840191908190840183828082843750949750508435955050506020909201359150610a959050565b3480156107a257600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526107f19436949293602493928401919081908401838280828437509497505093359450610aa89350505050565b60408051918252519081900360200190f35b34801561080f57600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261085e9436949293602493928401919081908401838280828437509497505093359450610aba9350505050565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b34801561089f57600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526107f19436949293602493928401919081908401838280828437509497505093359450610acc9350505050565b3480156108fa57600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261072094369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750610ade9650505050505050565b6060600061099283610af0565b9293915050565b60606109ab838363ffffffff610c0f16565b9392505050565b60606109be8383610cc5565b5090919050565b60606109d884848463ffffffff610d7d16565b509192915050565b60606109d884848463ffffffff610e6116565b60606000855183850111151515610a0957600080fd5b85518584011115610a1957600080fd5b610a2286610f20565b9050610a3385820185830185610f26565b5093949350505050565b60006109ab838363ffffffff610fe916565b60606109d884848463ffffffff6110a516565b6060600061099283611146565b6000610a7a83610af0565b50610a8482610af0565b506109ab838363ffffffff61121a16565b60606109d884848463ffffffff61134416565b60006109ab838363ffffffff61134f16565b60006109ab838363ffffffff6113f516565b60006109ab838363ffffffff6114bd16565b60006109ab838363ffffffff61121a16565b6000808251111515610b8957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f475245415445525f5448414e5f5a45524f5f4c454e4754485f5245515549524560448201527f4400000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b815182907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908110610bb957fe5b016020015182517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01909252507f0100000000000000000000000000000000000000000000000000000000000000908190040290565b60606000610c1d84846114bd565b9050602083019250808301845110151515610cbf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f475245415445525f4f525f455155414c5f544f5f4e45535445445f425954455360448201527f5f4c454e4754485f524551554952454400000000000000000000000000000000606482015290519081900360840190fd5b50500190565b80518251811115610d5d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f475245415445525f4f525f455155414c5f544f5f534f555243455f425954455360448201527f5f4c454e4754485f524551554952454400000000000000000000000000000000606482015290519081900360840190fd5b610d78610d6984610f20565b610d7284610f20565b83610f26565b505050565b8251601483011115610e1657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f475245415445525f4f525f455155414c5f544f5f32305f4c454e4754485f524560448201527f5155495245440000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6014919092010180517fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091189052565b80518260200101835110151515610eff57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f475245415445525f4f525f455155414c5f544f5f4e45535445445f425954455360448201527f5f4c454e4754485f524551554952454400000000000000000000000000000000606482015290519081900360840190fd5b610d7882610f0c85610f20565b01610f16836114c9565b8351602001610f26565b60200190565b6020811015610f50576001816020036101000a038019835116818551168082178652505050610d78565b82821415610f5d57610d78565b82821115610f975760208103905080820181840181515b82851015610f8f578451865260209586019590940193610f74565b905250610d78565b60208103905080820181840183515b81861215610fe057825182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09283019290910190610fa6565b85525050505050565b60008160140183511015151561108657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f475245415445525f4f525f455155414c5f544f5f32305f4c454e4754485f524560448201527f5155495245440000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b50016014015173ffffffffffffffffffffffffffffffffffffffff1690565b825160208301111561113e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f475245415445525f4f525f455155414c5f544f5f33325f4c454e4754485f524560448201527f5155495245440000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b910160200152565b600060148251101515156111e157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f475245415445525f4f525f455155414c5f544f5f32305f4c454e4754485f524560448201527f5155495245440000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6111ef826014845103610fe9565b82517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec019092525090565b6000815183511480156109ab5750816040518082805190602001908083835b6020831061127657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611239565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199092169116179052604051919093018190038120885190955088945090928392508401908083835b6020831061130b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016112ce565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902060001916149392505050565b610d788383836110a5565b6000816020018351101515156113ec57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f475245415445525f4f525f455155414c5f544f5f33325f4c454e4754485f524560448201527f5155495245440000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b50016020015190565b60008160040183511015151561149257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f475245415445525f4f525f455155414c5f544f5f345f4c454e4754485f52455160448201527f5549524544000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b5050602001517fffffffff000000000000000000000000000000000000000000000000000000001690565b60006109ab838361134f565b905600a165627a7a72305820ba7b4c0f930a784427242f01fcb14fd9900b2467aebb82d18d9264cfa7cad0c00029",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xDA JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x301D5E1 DUP2 EQ PUSH2 0xDF JUMPI DUP1 PUSH4 0x76EEC08 EQ PUSH2 0x1FB JUMPI DUP1 PUSH4 0x18C535D9 EQ PUSH2 0x2CB JUMPI DUP1 PUSH4 0x3F2A25EC EQ PUSH2 0x362 JUMPI DUP1 PUSH4 0x4B368768 EQ PUSH2 0x3D9 JUMPI DUP1 PUSH4 0x78BBAE9B EQ PUSH2 0x476 JUMPI DUP1 PUSH4 0x82E2FA24 EQ PUSH2 0x4DC JUMPI DUP1 PUSH4 0x84F87758 EQ PUSH2 0x560 JUMPI DUP1 PUSH4 0xA4B19654 EQ PUSH2 0x5C2 JUMPI DUP1 PUSH4 0xB1840E8D EQ PUSH2 0x689 JUMPI DUP1 PUSH4 0xB79650A4 EQ PUSH2 0x734 JUMPI DUP1 PUSH4 0xBE766F1B EQ PUSH2 0x796 JUMPI DUP1 PUSH4 0xCC12CB28 EQ PUSH2 0x803 JUMPI DUP1 PUSH4 0xE3A85CE4 EQ PUSH2 0x893 JUMPI DUP1 PUSH4 0xF06F300D EQ PUSH2 0x8EE JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xEB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 DUP1 CALLDATALOAD DUP1 DUP3 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x138 SWAP5 CALLDATASIZE SWAP5 SWAP3 SWAP4 PUSH1 0x24 SWAP4 SWAP3 DUP5 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x985 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP4 PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1BF JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1A7 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1EC 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 SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x207 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 DUP1 CALLDATALOAD DUP1 DUP3 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x256 SWAP5 CALLDATASIZE SWAP5 SWAP3 SWAP4 PUSH1 0x24 SWAP4 SWAP3 DUP5 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP POP SWAP4 CALLDATALOAD SWAP5 POP PUSH2 0x999 SWAP4 POP POP POP POP 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 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x290 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x278 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2BD 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 DUP1 ISZERO PUSH2 0x2D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 DUP1 CALLDATALOAD DUP1 DUP3 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x256 SWAP5 CALLDATASIZE SWAP5 SWAP3 SWAP4 PUSH1 0x24 SWAP4 SWAP3 DUP5 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F DUP10 CALLDATALOAD DUP12 ADD DUP1 CALLDATALOAD SWAP2 DUP3 ADD DUP4 SWAP1 DIV DUP4 MUL DUP5 ADD DUP4 ADD SWAP1 SWAP5 MSTORE DUP1 DUP4 MSTORE SWAP8 SWAP11 SWAP10 SWAP9 DUP2 ADD SWAP8 SWAP2 SWAP7 POP SWAP2 DUP3 ADD SWAP5 POP SWAP3 POP DUP3 SWAP2 POP DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x9B2 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x36E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 DUP1 CALLDATALOAD DUP1 DUP3 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x256 SWAP5 CALLDATASIZE SWAP5 SWAP3 SWAP4 PUSH1 0x24 SWAP4 SWAP3 DUP5 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP POP DUP5 CALLDATALOAD SWAP6 POP POP POP POP PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP PUSH2 0x9C5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 DUP1 CALLDATALOAD DUP1 DUP3 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x256 SWAP5 CALLDATASIZE SWAP5 SWAP3 SWAP4 PUSH1 0x24 SWAP4 SWAP3 DUP5 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F DUP2 DUP11 ADD CALLDATALOAD DUP12 ADD DUP1 CALLDATALOAD SWAP2 DUP3 ADD DUP4 SWAP1 DIV DUP4 MUL DUP5 ADD DUP4 ADD DUP6 MSTORE DUP2 DUP5 MSTORE SWAP9 SWAP12 DUP11 CALLDATALOAD SWAP12 SWAP1 SWAP11 SWAP1 SWAP10 SWAP5 ADD SWAP8 POP SWAP2 SWAP6 POP SWAP2 DUP3 ADD SWAP4 POP SWAP2 POP DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x9E0 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x482 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 DUP1 CALLDATALOAD DUP1 DUP3 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x256 SWAP5 CALLDATASIZE SWAP5 SWAP3 SWAP4 PUSH1 0x24 SWAP4 SWAP3 DUP5 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP POP DUP5 CALLDATALOAD SWAP6 POP POP POP PUSH1 0x20 DUP4 ADD CALLDATALOAD SWAP3 PUSH1 0x40 ADD CALLDATALOAD SWAP2 POP PUSH2 0x9F3 SWAP1 POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 DUP1 CALLDATALOAD DUP1 DUP3 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x537 SWAP5 CALLDATASIZE SWAP5 SWAP3 SWAP4 PUSH1 0x24 SWAP4 SWAP3 DUP5 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP POP SWAP4 CALLDATALOAD SWAP5 POP PUSH2 0xA3D SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x56C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 DUP1 CALLDATALOAD DUP1 DUP3 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x256 SWAP5 CALLDATASIZE SWAP5 SWAP3 SWAP4 PUSH1 0x24 SWAP4 SWAP3 DUP5 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP POP DUP5 CALLDATALOAD SWAP6 POP POP POP PUSH1 0x20 SWAP1 SWAP3 ADD CALLDATALOAD SWAP2 POP PUSH2 0xA4F SWAP1 POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 DUP1 CALLDATALOAD DUP1 DUP3 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x61B SWAP5 CALLDATASIZE SWAP5 SWAP3 SWAP4 PUSH1 0x24 SWAP4 SWAP3 DUP5 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0xA62 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 DUP2 LT ISZERO PUSH2 0x1BF JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1A7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x695 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 DUP1 CALLDATALOAD DUP1 DUP3 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x720 SWAP5 CALLDATASIZE SWAP5 SWAP3 SWAP4 PUSH1 0x24 SWAP4 SWAP3 DUP5 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F DUP10 CALLDATALOAD DUP12 ADD DUP1 CALLDATALOAD SWAP2 DUP3 ADD DUP4 SWAP1 DIV DUP4 MUL DUP5 ADD DUP4 ADD SWAP1 SWAP5 MSTORE DUP1 DUP4 MSTORE SWAP8 SWAP11 SWAP10 SWAP9 DUP2 ADD SWAP8 SWAP2 SWAP7 POP SWAP2 DUP3 ADD SWAP5 POP SWAP3 POP DUP3 SWAP2 POP DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0xA6F SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x740 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 DUP1 CALLDATALOAD DUP1 DUP3 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x256 SWAP5 CALLDATASIZE SWAP5 SWAP3 SWAP4 PUSH1 0x24 SWAP4 SWAP3 DUP5 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP POP DUP5 CALLDATALOAD SWAP6 POP POP POP PUSH1 0x20 SWAP1 SWAP3 ADD CALLDATALOAD SWAP2 POP PUSH2 0xA95 SWAP1 POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 DUP1 CALLDATALOAD DUP1 DUP3 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x7F1 SWAP5 CALLDATASIZE SWAP5 SWAP3 SWAP4 PUSH1 0x24 SWAP4 SWAP3 DUP5 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP POP SWAP4 CALLDATALOAD SWAP5 POP PUSH2 0xAA8 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x80F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 DUP1 CALLDATALOAD DUP1 DUP3 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x85E SWAP5 CALLDATASIZE SWAP5 SWAP3 SWAP4 PUSH1 0x24 SWAP4 SWAP3 DUP5 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP POP SWAP4 CALLDATALOAD SWAP5 POP PUSH2 0xABA SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x89F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 DUP1 CALLDATALOAD DUP1 DUP3 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x7F1 SWAP5 CALLDATASIZE SWAP5 SWAP3 SWAP4 PUSH1 0x24 SWAP4 SWAP3 DUP5 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP POP SWAP4 CALLDATALOAD SWAP5 POP PUSH2 0xACC SWAP4 POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 DUP1 CALLDATALOAD DUP1 DUP3 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x720 SWAP5 CALLDATASIZE SWAP5 SWAP3 SWAP4 PUSH1 0x24 SWAP4 SWAP3 DUP5 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F DUP10 CALLDATALOAD DUP12 ADD DUP1 CALLDATALOAD SWAP2 DUP3 ADD DUP4 SWAP1 DIV DUP4 MUL DUP5 ADD DUP4 ADD SWAP1 SWAP5 MSTORE DUP1 DUP4 MSTORE SWAP8 SWAP11 SWAP10 SWAP9 DUP2 ADD SWAP8 SWAP2 SWAP7 POP SWAP2 DUP3 ADD SWAP5 POP SWAP3 POP DUP3 SWAP2 POP DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0xADE SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x992 DUP4 PUSH2 0xAF0 JUMP JUMPDEST SWAP3 SWAP4 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x9AB DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0xC0F AND JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x9BE DUP4 DUP4 PUSH2 0xCC5 JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x9D8 DUP5 DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0xD7D AND JUMP JUMPDEST POP SWAP2 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x9D8 DUP5 DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0xE61 AND JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP6 MLOAD DUP4 DUP6 ADD GT ISZERO ISZERO ISZERO PUSH2 0xA09 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 MLOAD DUP6 DUP5 ADD GT ISZERO PUSH2 0xA19 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA22 DUP7 PUSH2 0xF20 JUMP JUMPDEST SWAP1 POP PUSH2 0xA33 DUP6 DUP3 ADD DUP6 DUP4 ADD DUP6 PUSH2 0xF26 JUMP JUMPDEST POP SWAP4 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x9AB DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0xFE9 AND JUMP JUMPDEST PUSH1 0x60 PUSH2 0x9D8 DUP5 DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x10A5 AND JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x992 DUP4 PUSH2 0x1146 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA7A DUP4 PUSH2 0xAF0 JUMP JUMPDEST POP PUSH2 0xA84 DUP3 PUSH2 0xAF0 JUMP JUMPDEST POP PUSH2 0x9AB DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x121A AND JUMP JUMPDEST PUSH1 0x60 PUSH2 0x9D8 DUP5 DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x1344 AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x9AB DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x134F AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x9AB DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x13F5 AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x9AB DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x14BD AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x9AB DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x121A AND JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 MLOAD GT ISZERO ISZERO PUSH2 0xB89 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x21 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475245415445525F5448414E5F5A45524F5F4C454E4754485F52455155495245 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x4400000000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x84 ADD SWAP1 REVERT JUMPDEST DUP2 MLOAD DUP3 SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0xBB9 JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD DUP3 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP3 MSTORE POP PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV MUL SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0xC1D DUP5 DUP5 PUSH2 0x14BD JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP4 ADD SWAP3 POP DUP1 DUP4 ADD DUP5 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0xCBF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x30 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F4E45535445445F4259544553 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x5F4C454E4754485F524551554952454400000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x84 ADD SWAP1 REVERT JUMPDEST POP POP ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD DUP3 MLOAD DUP2 GT ISZERO PUSH2 0xD5D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x30 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F534F555243455F4259544553 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x5F4C454E4754485F524551554952454400000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x84 ADD SWAP1 REVERT JUMPDEST PUSH2 0xD78 PUSH2 0xD69 DUP5 PUSH2 0xF20 JUMP JUMPDEST PUSH2 0xD72 DUP5 PUSH2 0xF20 JUMP JUMPDEST DUP4 PUSH2 0xF26 JUMP JUMPDEST POP POP POP JUMP JUMPDEST DUP3 MLOAD PUSH1 0x14 DUP4 ADD GT ISZERO PUSH2 0xE16 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F32305F4C454E4754485F5245 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x84 ADD SWAP1 REVERT JUMPDEST PUSH1 0x14 SWAP2 SWAP1 SWAP3 ADD ADD DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 XOR SWAP1 MSTORE JUMP JUMPDEST DUP1 MLOAD DUP3 PUSH1 0x20 ADD ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0xEFF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x30 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F4E45535445445F4259544553 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x5F4C454E4754485F524551554952454400000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x84 ADD SWAP1 REVERT JUMPDEST PUSH2 0xD78 DUP3 PUSH2 0xF0C DUP6 PUSH2 0xF20 JUMP JUMPDEST ADD PUSH2 0xF16 DUP4 PUSH2 0x14C9 JUMP JUMPDEST DUP4 MLOAD PUSH1 0x20 ADD PUSH2 0xF26 JUMP JUMPDEST PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xF50 JUMPI PUSH1 0x1 DUP2 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP4 MLOAD AND DUP2 DUP6 MLOAD AND DUP1 DUP3 OR DUP7 MSTORE POP POP POP PUSH2 0xD78 JUMP JUMPDEST DUP3 DUP3 EQ ISZERO PUSH2 0xF5D JUMPI PUSH2 0xD78 JUMP JUMPDEST DUP3 DUP3 GT ISZERO PUSH2 0xF97 JUMPI PUSH1 0x20 DUP2 SUB SWAP1 POP DUP1 DUP3 ADD DUP2 DUP5 ADD DUP2 MLOAD JUMPDEST DUP3 DUP6 LT ISZERO PUSH2 0xF8F JUMPI DUP5 MLOAD DUP7 MSTORE PUSH1 0x20 SWAP6 DUP7 ADD SWAP6 SWAP1 SWAP5 ADD SWAP4 PUSH2 0xF74 JUMP JUMPDEST SWAP1 MSTORE POP PUSH2 0xD78 JUMP JUMPDEST PUSH1 0x20 DUP2 SUB SWAP1 POP DUP1 DUP3 ADD DUP2 DUP5 ADD DUP4 MLOAD JUMPDEST DUP2 DUP7 SLT ISZERO PUSH2 0xFE0 JUMPI DUP3 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP3 DUP4 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 PUSH2 0xFA6 JUMP JUMPDEST DUP6 MSTORE POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x14 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x1086 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F32305F4C454E4754485F5245 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x84 ADD SWAP1 REVERT JUMPDEST POP ADD PUSH1 0x14 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x20 DUP4 ADD GT ISZERO PUSH2 0x113E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F33325F4C454E4754485F5245 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x84 ADD SWAP1 REVERT JUMPDEST SWAP2 ADD PUSH1 0x20 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x14 DUP3 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x11E1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F32305F4C454E4754485F5245 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x84 ADD SWAP1 REVERT JUMPDEST PUSH2 0x11EF DUP3 PUSH1 0x14 DUP5 MLOAD SUB PUSH2 0xFE9 JUMP JUMPDEST DUP3 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC ADD SWAP1 SWAP3 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP4 MLOAD EQ DUP1 ISZERO PUSH2 0x9AB JUMPI POP DUP2 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1276 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1239 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP4 ADD DUP2 SWAP1 SUB DUP2 KECCAK256 DUP9 MLOAD SWAP1 SWAP6 POP DUP9 SWAP5 POP SWAP1 SWAP3 DUP4 SWAP3 POP DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x130B JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x12CE JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 PUSH1 0x0 NOT AND EQ SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0xD78 DUP4 DUP4 DUP4 PUSH2 0x10A5 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x20 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x13EC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F33325F4C454E4754485F5245 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x84 ADD SWAP1 REVERT JUMPDEST POP ADD PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x4 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x1492 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F345F4C454E4754485F524551 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x5549524544000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x84 ADD SWAP1 REVERT JUMPDEST POP POP PUSH1 0x20 ADD MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x9AB DUP4 DUP4 PUSH2 0x134F JUMP JUMPDEST SWAP1 JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 0xba PUSH28 0x4C0F930A784427242F01FCB14FD9900B2467AEBB82D18D9264CFA7CA 0xd0 0xc0 STOP 0x29 ",
+ "sourceMap": "651:7079:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;889:190;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;889:190:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;889:190:0;;-1:-1:-1;889:190:0;;-1:-1:-1;;;;;;;889:190:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;889:190:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5966:235;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5966:235:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5966:235:0;;-1:-1:-1;;5966:235:0;;;-1:-1:-1;5966:235:0;;-1:-1:-1;;;;5966:235:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;5966:235:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2360:228;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2360:228:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2360:228:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2360:228:0;;;;-1:-1:-1;2360:228:0;-1:-1:-1;2360:228:0;;-1:-1:-1;2360:228:0;;;;;;;;-1:-1:-1;2360:228:0;;-1:-1:-1;2360:228:0;;-1:-1:-1;;;;;;;2360:228:0;3253:230;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3253:230:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3253:230:0;;-1:-1:-1;;3253:230:0;;;-1:-1:-1;;;;3253:230:0;;;;;;;;-1:-1:-1;3253:230:0;;6460:251;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6460:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6460:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6460:251:0;;-1:-1:-1;6460:251:0;;;;-1:-1:-1;6460:251:0;-1:-1:-1;6460:251:0;;;;;;;;;;-1:-1:-1;6460:251:0;;-1:-1:-1;6460:251:0;;-1:-1:-1;;;;;;;6460:251:0;7080:648;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7080:648:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7080:648:0;;-1:-1:-1;;7080:648:0;;;-1:-1:-1;;;7080:648:0;;;;;;;;;-1:-1:-1;7080:648:0;;-1:-1:-1;7080:648:0;2802:214;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2802:214:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2802:214:0;;-1:-1:-1;;2802:214:0;;;-1:-1:-1;2802:214:0;;-1:-1:-1;;;;2802:214:0;;;;;;;;;;;;;;;;;;;;4169:230;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4169:230:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4169:230:0;;-1:-1:-1;;4169:230:0;;;-1:-1:-1;;;4169:230:0;;;;;;-1:-1:-1;4169:230:0;;-1:-1:-1;4169:230:0;1274:197;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1274:197:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1274:197:0;;-1:-1:-1;1274:197:0;;-1:-1:-1;;;;;;;1274:197:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1875:239:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1875:239:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1875:239:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1875:239:0;;;;-1:-1:-1;1875:239:0;-1:-1:-1;1875:239:0;;-1:-1:-1;1875:239:0;;;;;;;;-1:-1:-1;1875:239:0;;-1:-1:-1;1875:239:0;;-1:-1:-1;;;;;;;1875:239:0;;;;;;;;;;;;;;;;;;;5085:230;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5085:230:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5085:230:0;;-1:-1:-1;;5085:230:0;;;-1:-1:-1;;;5085:230:0;;;;;;-1:-1:-1;5085:230:0;;-1:-1:-1;5085:230:0;3719:214;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3719:214:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3719:214:0;;-1:-1:-1;;3719:214:0;;;-1:-1:-1;3719:214:0;;-1:-1:-1;;;;3719:214:0;;;;;;;;;;;;;;;;;5557:211;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5557:211:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5557:211:0;;-1:-1:-1;;5557:211:0;;;-1:-1:-1;5557:211:0;;-1:-1:-1;;;;5557:211:0;;;;;;;;;;;;;;;;;;;;4635:214;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4635:214:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4635:214:0;;-1:-1:-1;;4635:214:0;;;-1:-1:-1;4635:214:0;;-1:-1:-1;;;;4635:214:0;1684:181;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1684:181:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1684:181:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1684:181:0;;;;-1:-1:-1;1684:181:0;-1:-1:-1;1684:181:0;;-1:-1:-1;1684:181:0;;;;;;;;-1:-1:-1;1684:181:0;;-1:-1:-1;1684:181:0;;-1:-1:-1;;;;;;;1684:181:0;889:190;977:5;991:13;1029:15;:1;:13;:15::i;:::-;1062:1;;889:190;-1:-1:-1;;889:190:0:o;5966:235::-;6099:19;6143:28;:1;6165:5;6143:28;:21;:28;:::i;:::-;6134:37;5966:235;-1:-1:-1;;;5966:235:0:o;2360:228::-;2496:5;2524:36;2547:4;2553:6;2524:22;:36::i;:::-;-1:-1:-1;2577:4:0;;2360:228;-1:-1:-1;2360:228:0:o;3253:230::-;3402:5;3430:28;:1;3445:5;3452;3430:28;:14;:28;:::i;:::-;-1:-1:-1;3475:1:0;;3253:230;-1:-1:-1;;3253:230:0:o;6460:251::-;6622:5;6650:36;:1;6673:5;6680;6650:36;:22;:36;:::i;7080:648::-;7281:5;7491:14;7381:3;:10;7371:6;7362;:15;:29;;7354:38;;;;;;;;7427:10;;7410:13;;;:27;;7402:36;;;;;;7508:20;:3;:18;:20::i;:::-;7491:37;;7601:56;7627:4;7618:6;:13;7642:6;7633;:15;7650:6;7601:16;:56::i;:::-;-1:-1:-1;7718:3:0;;7080:648;-1:-1:-1;;;;7080:648:0:o;2802:214::-;2927:14;2966:20;:1;2980:5;2966:20;:13;:20;:::i;4169:230::-;4318:5;4346:28;:1;4361:5;4368;4346:28;:14;:28;:::i;1274:197::-;1365:5;1379:14;1418:18;:1;:16;:18::i;1875:239::-;1982:10;2008:17;:3;:15;:17::i;:::-;;2035;:3;:15;:17::i;:::-;-1:-1:-1;2070:15:0;:3;2081;2070:15;:10;:15;:::i;5085:230::-;5234:5;5262:28;:1;5277:5;5284;5262:28;:14;:28;:::i;3719:214::-;3844:14;3883:20;:1;3897:5;3883:20;:13;:20;:::i;5557:211::-;5681:13;5719:19;:1;5732:5;5719:19;:12;:19;:::i;4635:214::-;4760:14;4799:20;:1;4813:5;4799:20;:13;:20;:::i;1684:181::-;1787:10;1821:15;:3;1832;1821:15;:10;:15;:::i;8304:448:1:-;8388:13;8449:1;8438;:8;:12;8417:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8559:8;;8557:1;;8559:12;;;;8557:15;;;;;;;;;;8671:8;;8667:16;;8696:17;;;-1:-1:-1;8557:15:1;;;;;;;8304:448::o;16441:672::-;16570:19;16644:25;16672:21;16684:1;16687:5;16672:11;:21::i;:::-;16644:49;;16712:2;16703:11;;;;16848:17;16840:5;:25;16828:1;:8;:37;;16807:132;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17061:13:1;;16441:672::o;18206:504::-;18355:13;;18483:11;;:24;-1:-1:-1;18483:24:1;18462:119;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18591:112;18612:21;:4;:19;:21::i;:::-;18647:23;:6;:21;:23::i;:::-;18684:9;18591:7;:112::i;:::-;18206:504;;;:::o;11382:1663::-;11545:8;;11565:2;11557:10;;-1:-1:-1;11545:22:1;11524:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11906:2;12612:13;;;;;12606:20;;12644:66;12585:139;12869:42;12858:54;;;13007:21;;;;12985:44;;11971:1068::o;17329:631::-;17605:5;:12;17592:5;17600:2;17592:10;:25;17580:1;:8;:37;;17559:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17764:189;17806:5;17785:18;:1;:16;:18::i;:::-;:26;17825:18;:5;:16;:18::i;:::-;17887:5;:12;17902:2;17887:17;17764:7;:189::i;1341:228::-;1520:2;1509:14;;1341:228::o;1808:4337::-;1958:2;1949:6;:11;1945:4194;;;2247:1;2237:6;2233:2;2229:15;2224:3;2220:25;2216:33;2298:4;2294:9;2285:6;2279:13;2275:29;2347:4;2340;2334:11;2330:22;2388:1;2385;2382:8;2376:4;2369:22;2186:219;;;;;;2509:4;2499:6;:14;2495:59;;;2533:7;;2495:59;3243:4;3234:6;:13;3230:2899;;;3569:2;3561:6;3557:15;3547:25;;3617:6;3609;3605:19;3667:6;3661:4;3657:17;3974:4;3968:11;4242:198;4260:4;4252:6;4249:16;4242:198;;;4308:13;;4295:27;;4369:2;4405:13;;;;4357:15;;;;4242:198;;;4529:18;;-1:-1:-1;3276:1289:1;;;4810:2;4802:6;4798:15;4788:25;;4858:6;4850;4846:19;4908:6;4902:4;4898:17;5218:6;5212:13;5797:191;5814:4;5808;5804:15;5797:191;;;5862:11;;5849:25;;5907:13;;;;;5953;;;;5797:191;;;6078:19;;-1:-1:-1;;1808:4337:1;;;:::o;10259:886::-;10380:14;10443:5;10451:2;10443:10;10431:1;:8;:22;;10410:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11047:13:1;10792:2;11047:13;11041:20;11063:42;11037:69;;10259:886::o;14007:456::-;14170:8;;14190:2;14182:10;;-1:-1:-1;14170:22:1;14149:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14426:13;;14337:2;14426:13;14419:28;14405:52::o;8947:482::-;9034:14;9097:2;9085:1;:8;:14;;9064:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9215:29;9227:1;9241:2;9230:1;:8;:13;9215:11;:29::i;:::-;9347:8;;9343:17;;9373;;;-1:-1:-1;9206:38:1;8947:482::o;9642:403::-;9763:10;9992:3;:10;9978:3;:10;:24;:60;;;;;10034:3;10024:14;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;365:33;;10024:14:1;;;;;;;;;;;10006;;10024;;-1:-1:-1;10006:14:1;;-1:-1:-1;10024:14:1;;;;-1:-1:-1;10006:14:1;;;;10024;10006;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;10006:14:1;;;;;;;;;;;;;;;;:32;;;;9971:67;9642:403;-1:-1:-1;;;9642:403:1:o;15130:187::-;15272:38;15285:1;15288:5;15303;15272:12;:38::i;13281:490::-;13402:14;13465:5;13473:2;13465:10;13453:1;:8;:22;;13432:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13718:13:1;13620:2;13718:13;13712:20;;13281:490::o;15559:559::-;15679:13;15741:5;15749:1;15741:9;15729:1;:8;:21;;15708:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;15869:2:1;15862:10;15856:17;16012:66;16000:79;;15559:559::o;14699:195::-;14820:14;14865:21;14877:1;14880:5;14865:11;:21::i;922:215::-;1086:5;922:215::o"
}
}
},
"sources": {
- "current/test/TestLibBytes/TestLibBytes.sol": {
+ "2.0.0/test/TestLibBytes/TestLibBytes.sol": {
"id": 0
},
- "current/utils/LibBytes/LibBytes.sol": {
+ "2.0.0/utils/LibBytes/LibBytes.sol": {
"id": 1
}
},
"sourceCodes": {
- "current/test/TestLibBytes/TestLibBytes.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../../utils/LibBytes/LibBytes.sol\";\n\ncontract TestLibBytes {\n \n using LibBytes for bytes;\n\n /// @dev Pops the last byte off of a byte array by modifying its length.\n /// @param b Byte array that will be modified.\n /// @return The byte that was popped off.\n function publicPopLastByte(bytes memory b)\n public\n pure\n returns (bytes memory, bytes1 result)\n {\n result = b.popLastByte();\n return (b, result);\n }\n\n /// @dev Pops the last 20 bytes off of a byte array by modifying its length.\n /// @param b Byte array that will be modified.\n /// @return The 20 byte address that was popped off.\n function publicPopLast20Bytes(bytes memory b)\n public\n pure\n returns (bytes memory, address result)\n {\n result = b.popLast20Bytes();\n return (b, result);\n }\n\n /// @dev Tests equality of two byte arrays.\n /// @param lhs First byte array to compare.\n /// @param rhs Second byte array to compare.\n /// @return True if arrays are the same. False otherwise.\n function publicEquals(bytes memory lhs, bytes memory rhs)\n public\n pure\n returns (bool equal)\n {\n equal = lhs.equals(rhs);\n return equal;\n }\n \n function publicEqualsPop1(bytes memory lhs, bytes memory rhs)\n public\n pure\n returns (bool equal)\n {\n lhs.popLastByte();\n rhs.popLastByte();\n equal = lhs.equals(rhs);\n return equal;\n }\n\n /// @dev Performs a deep copy of a byte array onto another byte array of greater than or equal length.\n /// @param dest Byte array that will be overwritten with source bytes.\n /// @param source Byte array to copy onto dest bytes.\n function publicDeepCopyBytes(\n bytes memory dest,\n bytes memory source\n )\n public\n pure\n returns (bytes memory)\n {\n LibBytes.deepCopyBytes(dest, source);\n return dest;\n }\n\n /// @dev Reads an address from a position in a byte array.\n /// @param b Byte array containing an address.\n /// @param index Index in byte array of address.\n /// @return address from byte array.\n function publicReadAddress(\n bytes memory b,\n uint256 index\n )\n public\n pure\n returns (address result)\n {\n result = b.readAddress(index);\n return result;\n }\n\n /// @dev Writes an address into a specific position in a byte array.\n /// @param b Byte array to insert address into.\n /// @param index Index in byte array of address.\n /// @param input Address to put into byte array.\n function publicWriteAddress(\n bytes memory b,\n uint256 index,\n address input\n )\n public\n pure\n returns (bytes memory)\n {\n b.writeAddress(index, input);\n return b;\n }\n\n /// @dev Reads a bytes32 value from a position in a byte array.\n /// @param b Byte array containing a bytes32 value.\n /// @param index Index in byte array of bytes32 value.\n /// @return bytes32 value from byte array.\n function publicReadBytes32(\n bytes memory b,\n uint256 index\n )\n public\n pure\n returns (bytes32 result)\n {\n result = b.readBytes32(index);\n return result;\n }\n\n /// @dev Writes a bytes32 into a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input bytes32 to put into byte array.\n function publicWriteBytes32(\n bytes memory b,\n uint256 index,\n bytes32 input\n )\n public\n pure\n returns (bytes memory)\n {\n b.writeBytes32(index, input);\n return b;\n }\n\n /// @dev Reads a uint256 value from a position in a byte array.\n /// @param b Byte array containing a uint256 value.\n /// @param index Index in byte array of uint256 value.\n /// @return uint256 value from byte array.\n function publicReadUint256(\n bytes memory b,\n uint256 index\n )\n public\n pure\n returns (uint256 result)\n {\n result = b.readUint256(index);\n return result;\n }\n\n /// @dev Writes a uint256 into a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input uint256 to put into byte array.\n function publicWriteUint256(\n bytes memory b,\n uint256 index,\n uint256 input\n )\n public\n pure\n returns (bytes memory)\n {\n b.writeUint256(index, input);\n return b;\n }\n\n /// @dev Reads an unpadded bytes4 value from a position in a byte array.\n /// @param b Byte array containing a bytes4 value.\n /// @param index Index in byte array of bytes4 value.\n /// @return bytes4 value from byte array.\n function publicReadBytes4(\n bytes memory b,\n uint256 index\n )\n public\n pure\n returns (bytes4 result)\n {\n result = b.readBytes4(index);\n return result;\n }\n\n /// @dev Reads nested bytes from a specific position.\n /// @param b Byte array containing nested bytes.\n /// @param index Index of nested bytes.\n /// @return result Nested bytes.\n function publicReadBytesWithLength(\n bytes memory b,\n uint256 index\n )\n public\n pure\n returns (bytes memory result)\n {\n result = b.readBytesWithLength(index);\n return result;\n }\n\n /// @dev Inserts bytes at a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input bytes to insert.\n /// @return b Updated input byte array\n function publicWriteBytesWithLength(\n bytes memory b,\n uint256 index,\n bytes memory input\n )\n public\n pure\n returns (bytes memory)\n {\n b.writeBytesWithLength(index, input);\n return b;\n }\n \n /// @dev Copies a block of memory from one location to another.\n /// @param mem Memory contents we want to apply memCopy to\n /// @param dest Destination offset into <mem>.\n /// @param source Source offset into <mem>.\n /// @param length Length of bytes to copy from <source> to <dest>\n /// @return mem Memory contents after calling memCopy.\n function testMemcpy(\n bytes mem,\n uint256 dest,\n uint256 source,\n uint256 length\n )\n public // not external, we need input in memory\n pure\n returns (bytes)\n {\n // Sanity check. Overflows are not checked.\n require(source + length <= mem.length);\n require(dest + length <= mem.length);\n\n // Get pointer to memory contents\n uint256 offset = mem.contentAddress();\n\n // Execute memCopy adjusted for memory array location\n LibBytes.memCopy(offset + dest, offset + source, length);\n\n // Return modified memory contents\n return mem;\n }\n}\n",
- "current/utils/LibBytes/LibBytes.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.24;\n\nlibrary LibBytes {\n\n using LibBytes for bytes;\n\n /// @dev Gets the memory address for a byte array.\n /// @param input Byte array to lookup.\n /// @return memoryAddress Memory address of byte array. This\n /// points to the header of the byte array which contains\n /// the length.\n function rawAddress(bytes memory input)\n internal\n pure\n returns (uint256 memoryAddress)\n {\n assembly {\n memoryAddress := input\n }\n return memoryAddress;\n }\n \n /// @dev Gets the memory address for the contents of a byte array.\n /// @param input Byte array to lookup.\n /// @return memoryAddress Memory address of the contents of the byte array.\n function contentAddress(bytes memory input)\n internal\n pure\n returns (uint256 memoryAddress)\n {\n assembly {\n memoryAddress := add(input, 32)\n }\n return memoryAddress;\n }\n\n /// @dev Copies `length` bytes from memory location `source` to `dest`.\n /// @param dest memory address to copy bytes to.\n /// @param source memory address to copy bytes from.\n /// @param length number of bytes to copy.\n function memCopy(\n uint256 dest,\n uint256 source,\n uint256 length\n )\n internal\n pure\n {\n if (length < 32) {\n // Handle a partial word by reading destination and masking\n // off the bits we are interested in.\n // This correctly handles overlap, zero lengths and source == dest\n assembly {\n let mask := sub(exp(256, sub(32, length)), 1)\n let s := and(mload(source), not(mask))\n let d := and(mload(dest), mask)\n mstore(dest, or(s, d))\n }\n } else {\n // Skip the O(length) loop when source == dest.\n if (source == dest) {\n return;\n }\n\n // For large copies we copy whole words at a time. The final\n // word is aligned to the end of the range (instead of after the\n // previous) to handle partial words. So a copy will look like this:\n //\n // ####\n // ####\n // ####\n // ####\n //\n // We handle overlap in the source and destination range by\n // changing the copying direction. This prevents us from\n // overwriting parts of source that we still need to copy.\n //\n // This correctly handles source == dest\n //\n if (source > dest) {\n assembly {\n // We subtract 32 from `sEnd` and `dEnd` because it\n // is easier to compare with in the loop, and these\n // are also the addresses we need for copying the\n // last bytes.\n length := sub(length, 32)\n let sEnd := add(source, length)\n let dEnd := add(dest, length)\n\n // Remember the last 32 bytes of source\n // This needs to be done here and not after the loop\n // because we may have overwritten the last bytes in\n // source already due to overlap.\n let last := mload(sEnd)\n\n // Copy whole words front to back\n // Note: the first check is always true,\n // this could have been a do-while loop.\n for {} lt(source, sEnd) {} {\n mstore(dest, mload(source))\n source := add(source, 32)\n dest := add(dest, 32)\n }\n \n // Write the last 32 bytes\n mstore(dEnd, last)\n }\n } else {\n assembly {\n // We subtract 32 from `sEnd` and `dEnd` because those\n // are the starting points when copying a word at the end.\n length := sub(length, 32)\n let sEnd := add(source, length)\n let dEnd := add(dest, length)\n\n // Remember the first 32 bytes of source\n // This needs to be done here and not after the loop\n // because we may have overwritten the first bytes in\n // source already due to overlap.\n let first := mload(source)\n\n // Copy whole words back to front\n // We use a signed comparisson here to allow dEnd to become\n // negative (happens when source and dest < 32). Valid\n // addresses in local memory will never be larger than\n // 2**255, so they can be safely re-interpreted as signed.\n // Note: the first check is always true,\n // this could have been a do-while loop.\n for {} slt(dest, dEnd) {} {\n mstore(dEnd, mload(sEnd))\n sEnd := sub(sEnd, 32)\n dEnd := sub(dEnd, 32)\n }\n \n // Write the first 32 bytes\n mstore(dest, first)\n }\n }\n }\n }\n \n /// @dev Returns a slices from a byte array.\n /// @param b The byte array to take a slice from.\n /// @param from The starting index for the slice (inclusive).\n /// @param to The final index for the slice (exclusive).\n /// @return result The slice containing bytes at indices [from, to)\n function slice(bytes memory b, uint256 from, uint256 to)\n internal\n pure\n returns (bytes memory result)\n {\n require(\n from <= to,\n \"FROM_LESS_THAN_TO_REQUIRED\"\n );\n require(\n to < b.length,\n \"TO_LESS_THAN_LENGTH_REQUIRED\"\n );\n \n // Create a new bytes structure and copy contents\n result = new bytes(to - from);\n memCopy(\n result.contentAddress(),\n b.contentAddress() + from,\n result.length);\n return result;\n }\n \n /// @dev Returns a slice from a byte array without preserving the input.\n /// @param b The byte array to take a slice from. Will be destroyed in the process.\n /// @param from The starting index for the slice (inclusive).\n /// @param to The final index for the slice (exclusive).\n /// @return result The slice containing bytes at indices [from, to)\n /// @dev When `from == 0`, the original array will match the slice. In other cases its state will be corrupted.\n function sliceDestructive(bytes memory b, uint256 from, uint256 to)\n internal\n pure\n returns (bytes memory result)\n {\n require(\n from <= to,\n \"FROM_LESS_THAN_TO_REQUIRED\"\n );\n require(\n to < b.length,\n \"TO_LESS_THAN_LENGTH_REQUIRED\"\n );\n \n // Create a new bytes structure around [from, to) in-place.\n assembly {\n result := add(b, from)\n mstore(result, sub(to, from))\n }\n return result;\n }\n\n /// @dev Pops the last byte off of a byte array by modifying its length.\n /// @param b Byte array that will be modified.\n /// @return The byte that was popped off.\n function popLastByte(bytes memory b)\n internal\n pure\n returns (bytes1 result)\n {\n require(\n b.length > 0,\n \"GREATER_THAN_ZERO_LENGTH_REQUIRED\"\n );\n\n // Store last byte.\n result = b[b.length - 1];\n\n assembly {\n // Decrement length of byte array.\n let newLen := sub(mload(b), 1)\n mstore(b, newLen)\n }\n return result;\n }\n\n /// @dev Pops the last 20 bytes off of a byte array by modifying its length.\n /// @param b Byte array that will be modified.\n /// @return The 20 byte address that was popped off.\n function popLast20Bytes(bytes memory b)\n internal\n pure\n returns (address result)\n {\n require(\n b.length >= 20,\n \"GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\"\n );\n\n // Store last 20 bytes.\n result = readAddress(b, b.length - 20);\n\n assembly {\n // Subtract 20 from byte array length.\n let newLen := sub(mload(b), 20)\n mstore(b, newLen)\n }\n return result;\n }\n\n /// @dev Tests equality of two byte arrays.\n /// @param lhs First byte array to compare.\n /// @param rhs Second byte array to compare.\n /// @return True if arrays are the same. False otherwise.\n function equals(\n bytes memory lhs,\n bytes memory rhs\n )\n internal\n pure\n returns (bool equal)\n {\n // Keccak gas cost is 30 + numWords * 6. This is a cheap way to compare.\n // We early exit on unequal lengths, but keccak would also correctly\n // handle this.\n return lhs.length == rhs.length && keccak256(lhs) == keccak256(rhs);\n }\n\n /// @dev Reads an address from a position in a byte array.\n /// @param b Byte array containing an address.\n /// @param index Index in byte array of address.\n /// @return address from byte array.\n function readAddress(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (address result)\n {\n require(\n b.length >= index + 20, // 20 is length of address\n \"GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\"\n );\n\n // Add offset to index:\n // 1. Arrays are prefixed by 32-byte length parameter (add 32 to index)\n // 2. Account for size difference between address length and 32-byte storage word (subtract 12 from index)\n index += 20;\n\n // Read address from array memory\n assembly {\n // 1. Add index to address of bytes array\n // 2. Load 32-byte word from memory\n // 3. Apply 20-byte mask to obtain address\n result := and(mload(add(b, index)), 0xffffffffffffffffffffffffffffffffffffffff)\n }\n return result;\n }\n\n /// @dev Writes an address into a specific position in a byte array.\n /// @param b Byte array to insert address into.\n /// @param index Index in byte array of address.\n /// @param input Address to put into byte array.\n function writeAddress(\n bytes memory b,\n uint256 index,\n address input\n )\n internal\n pure\n {\n require(\n b.length >= index + 20, // 20 is length of address\n \"GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\"\n );\n\n // Add offset to index:\n // 1. Arrays are prefixed by 32-byte length parameter (add 32 to index)\n // 2. Account for size difference between address length and 32-byte storage word (subtract 12 from index)\n index += 20;\n\n // Store address into array memory\n assembly {\n // The address occupies 20 bytes and mstore stores 32 bytes.\n // First fetch the 32-byte word where we'll be storing the address, then\n // apply a mask so we have only the bytes in the word that the address will not occupy.\n // Then combine these bytes with the address and store the 32 bytes back to memory with mstore.\n\n // 1. Add index to address of bytes array\n // 2. Load 32-byte word from memory\n // 3. Apply 12-byte mask to obtain extra bytes occupying word of memory where we'll store the address\n let neighbors := and(mload(add(b, index)), 0xffffffffffffffffffffffff0000000000000000000000000000000000000000)\n \n // Make sure input address is clean.\n // (Solidity does not guarantee this)\n input := and(input, 0xffffffffffffffffffffffffffffffffffffffff)\n\n // Store the neighbors and address into memory\n mstore(add(b, index), xor(input, neighbors))\n }\n }\n\n /// @dev Reads a bytes32 value from a position in a byte array.\n /// @param b Byte array containing a bytes32 value.\n /// @param index Index in byte array of bytes32 value.\n /// @return bytes32 value from byte array.\n function readBytes32(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (bytes32 result)\n {\n require(\n b.length >= index + 32,\n \"GREATER_OR_EQUAL_TO_32_LENGTH_REQUIRED\"\n );\n\n // Arrays are prefixed by a 256 bit length parameter\n index += 32;\n\n // Read the bytes32 from array memory\n assembly {\n result := mload(add(b, index))\n }\n return result;\n }\n\n /// @dev Writes a bytes32 into a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input bytes32 to put into byte array.\n function writeBytes32(\n bytes memory b,\n uint256 index,\n bytes32 input\n )\n internal\n pure\n {\n require(\n b.length >= index + 32,\n \"GREATER_OR_EQUAL_TO_32_LENGTH_REQUIRED\"\n );\n\n // Arrays are prefixed by a 256 bit length parameter\n index += 32;\n\n // Read the bytes32 from array memory\n assembly {\n mstore(add(b, index), input)\n }\n }\n\n /// @dev Reads a uint256 value from a position in a byte array.\n /// @param b Byte array containing a uint256 value.\n /// @param index Index in byte array of uint256 value.\n /// @return uint256 value from byte array.\n function readUint256(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (uint256 result)\n {\n return uint256(readBytes32(b, index));\n }\n\n /// @dev Writes a uint256 into a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input uint256 to put into byte array.\n function writeUint256(\n bytes memory b,\n uint256 index,\n uint256 input\n )\n internal\n pure\n {\n writeBytes32(b, index, bytes32(input));\n }\n\n /// @dev Reads an unpadded bytes4 value from a position in a byte array.\n /// @param b Byte array containing a bytes4 value.\n /// @param index Index in byte array of bytes4 value.\n /// @return bytes4 value from byte array.\n function readBytes4(\n bytes memory b,\n uint256 index)\n internal\n pure\n returns (bytes4 result)\n {\n require(\n b.length >= index + 4,\n \"GREATER_OR_EQUAL_TO_4_LENGTH_REQUIRED\"\n );\n assembly {\n result := mload(add(b, 32))\n // Solidity does not require us to clean the trailing bytes.\n // We do it anyway\n result := and(result, 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000)\n }\n return result;\n }\n\n /// @dev Reads nested bytes from a specific position.\n /// @dev NOTE: the returned value overlaps with the input value.\n /// Both should be treated as immutable.\n /// @param b Byte array containing nested bytes.\n /// @param index Index of nested bytes.\n /// @return result Nested bytes.\n function readBytesWithLength(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (bytes memory result)\n {\n // Read length of nested bytes\n uint256 nestedBytesLength = readUint256(b, index);\n index += 32;\n\n // Assert length of <b> is valid, given\n // length of nested bytes\n require(\n b.length >= index + nestedBytesLength,\n \"GREATER_OR_EQUAL_TO_NESTED_BYTES_LENGTH_REQUIRED\"\n );\n \n // Return a pointer to the byte array as it exists inside `b`\n assembly {\n result := add(b, index)\n }\n return result;\n }\n\n /// @dev Inserts bytes at a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input bytes to insert.\n function writeBytesWithLength(\n bytes memory b,\n uint256 index,\n bytes memory input\n )\n internal\n pure\n {\n // Assert length of <b> is valid, given\n // length of input\n require(\n b.length >= index + 32 /* 32 bytes to store length */ + input.length,\n \"GREATER_OR_EQUAL_TO_NESTED_BYTES_LENGTH_REQUIRED\"\n );\n\n // Copy <input> into <b>\n memCopy(\n b.contentAddress() + index,\n input.rawAddress(), // includes length of <input>\n input.length + 32 // +32 bytes to store <input> length\n );\n }\n\n /// @dev Performs a deep copy of a byte array onto another byte array of greater than or equal length.\n /// @param dest Byte array that will be overwritten with source bytes.\n /// @param source Byte array to copy onto dest bytes.\n function deepCopyBytes(\n bytes memory dest,\n bytes memory source\n )\n internal\n pure\n {\n uint256 sourceLen = source.length;\n // Dest length must be >= source length, or some bytes would not be copied.\n require(\n dest.length >= sourceLen,\n \"GREATER_OR_EQUAL_TO_SOURCE_BYTES_LENGTH_REQUIRED\"\n );\n memCopy(\n dest.contentAddress(),\n source.contentAddress(),\n sourceLen\n );\n }\n}\n"
+ "2.0.0/test/TestLibBytes/TestLibBytes.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.24;\n\nimport \"../../utils/LibBytes/LibBytes.sol\";\n\n\ncontract TestLibBytes {\n \n using LibBytes for bytes;\n\n /// @dev Pops the last byte off of a byte array by modifying its length.\n /// @param b Byte array that will be modified.\n /// @return The byte that was popped off.\n function publicPopLastByte(bytes memory b)\n public\n pure\n returns (bytes memory, bytes1 result)\n {\n result = b.popLastByte();\n return (b, result);\n }\n\n /// @dev Pops the last 20 bytes off of a byte array by modifying its length.\n /// @param b Byte array that will be modified.\n /// @return The 20 byte address that was popped off.\n function publicPopLast20Bytes(bytes memory b)\n public\n pure\n returns (bytes memory, address result)\n {\n result = b.popLast20Bytes();\n return (b, result);\n }\n\n /// @dev Tests equality of two byte arrays.\n /// @param lhs First byte array to compare.\n /// @param rhs Second byte array to compare.\n /// @return True if arrays are the same. False otherwise.\n function publicEquals(bytes memory lhs, bytes memory rhs)\n public\n pure\n returns (bool equal)\n {\n equal = lhs.equals(rhs);\n return equal;\n }\n \n function publicEqualsPop1(bytes memory lhs, bytes memory rhs)\n public\n pure\n returns (bool equal)\n {\n lhs.popLastByte();\n rhs.popLastByte();\n equal = lhs.equals(rhs);\n return equal;\n }\n\n /// @dev Performs a deep copy of a byte array onto another byte array of greater than or equal length.\n /// @param dest Byte array that will be overwritten with source bytes.\n /// @param source Byte array to copy onto dest bytes.\n function publicDeepCopyBytes(\n bytes memory dest,\n bytes memory source\n )\n public\n pure\n returns (bytes memory)\n {\n LibBytes.deepCopyBytes(dest, source);\n return dest;\n }\n\n /// @dev Reads an address from a position in a byte array.\n /// @param b Byte array containing an address.\n /// @param index Index in byte array of address.\n /// @return address from byte array.\n function publicReadAddress(\n bytes memory b,\n uint256 index\n )\n public\n pure\n returns (address result)\n {\n result = b.readAddress(index);\n return result;\n }\n\n /// @dev Writes an address into a specific position in a byte array.\n /// @param b Byte array to insert address into.\n /// @param index Index in byte array of address.\n /// @param input Address to put into byte array.\n function publicWriteAddress(\n bytes memory b,\n uint256 index,\n address input\n )\n public\n pure\n returns (bytes memory)\n {\n b.writeAddress(index, input);\n return b;\n }\n\n /// @dev Reads a bytes32 value from a position in a byte array.\n /// @param b Byte array containing a bytes32 value.\n /// @param index Index in byte array of bytes32 value.\n /// @return bytes32 value from byte array.\n function publicReadBytes32(\n bytes memory b,\n uint256 index\n )\n public\n pure\n returns (bytes32 result)\n {\n result = b.readBytes32(index);\n return result;\n }\n\n /// @dev Writes a bytes32 into a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input bytes32 to put into byte array.\n function publicWriteBytes32(\n bytes memory b,\n uint256 index,\n bytes32 input\n )\n public\n pure\n returns (bytes memory)\n {\n b.writeBytes32(index, input);\n return b;\n }\n\n /// @dev Reads a uint256 value from a position in a byte array.\n /// @param b Byte array containing a uint256 value.\n /// @param index Index in byte array of uint256 value.\n /// @return uint256 value from byte array.\n function publicReadUint256(\n bytes memory b,\n uint256 index\n )\n public\n pure\n returns (uint256 result)\n {\n result = b.readUint256(index);\n return result;\n }\n\n /// @dev Writes a uint256 into a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input uint256 to put into byte array.\n function publicWriteUint256(\n bytes memory b,\n uint256 index,\n uint256 input\n )\n public\n pure\n returns (bytes memory)\n {\n b.writeUint256(index, input);\n return b;\n }\n\n /// @dev Reads an unpadded bytes4 value from a position in a byte array.\n /// @param b Byte array containing a bytes4 value.\n /// @param index Index in byte array of bytes4 value.\n /// @return bytes4 value from byte array.\n function publicReadBytes4(\n bytes memory b,\n uint256 index\n )\n public\n pure\n returns (bytes4 result)\n {\n result = b.readBytes4(index);\n return result;\n }\n\n /// @dev Reads nested bytes from a specific position.\n /// @param b Byte array containing nested bytes.\n /// @param index Index of nested bytes.\n /// @return result Nested bytes.\n function publicReadBytesWithLength(\n bytes memory b,\n uint256 index\n )\n public\n pure\n returns (bytes memory result)\n {\n result = b.readBytesWithLength(index);\n return result;\n }\n\n /// @dev Inserts bytes at a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input bytes to insert.\n /// @return b Updated input byte array\n function publicWriteBytesWithLength(\n bytes memory b,\n uint256 index,\n bytes memory input\n )\n public\n pure\n returns (bytes memory)\n {\n b.writeBytesWithLength(index, input);\n return b;\n }\n \n /// @dev Copies a block of memory from one location to another.\n /// @param mem Memory contents we want to apply memCopy to\n /// @param dest Destination offset into <mem>.\n /// @param source Source offset into <mem>.\n /// @param length Length of bytes to copy from <source> to <dest>\n /// @return mem Memory contents after calling memCopy.\n function testMemcpy(\n bytes mem,\n uint256 dest,\n uint256 source,\n uint256 length\n )\n public // not external, we need input in memory\n pure\n returns (bytes)\n {\n // Sanity check. Overflows are not checked.\n require(source + length <= mem.length);\n require(dest + length <= mem.length);\n\n // Get pointer to memory contents\n uint256 offset = mem.contentAddress();\n\n // Execute memCopy adjusted for memory array location\n LibBytes.memCopy(offset + dest, offset + source, length);\n\n // Return modified memory contents\n return mem;\n }\n}\n",
+ "2.0.0/utils/LibBytes/LibBytes.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.24;\n\n\nlibrary LibBytes {\n\n using LibBytes for bytes;\n\n /// @dev Gets the memory address for a byte array.\n /// @param input Byte array to lookup.\n /// @return memoryAddress Memory address of byte array. This\n /// points to the header of the byte array which contains\n /// the length.\n function rawAddress(bytes memory input)\n internal\n pure\n returns (uint256 memoryAddress)\n {\n assembly {\n memoryAddress := input\n }\n return memoryAddress;\n }\n \n /// @dev Gets the memory address for the contents of a byte array.\n /// @param input Byte array to lookup.\n /// @return memoryAddress Memory address of the contents of the byte array.\n function contentAddress(bytes memory input)\n internal\n pure\n returns (uint256 memoryAddress)\n {\n assembly {\n memoryAddress := add(input, 32)\n }\n return memoryAddress;\n }\n\n /// @dev Copies `length` bytes from memory location `source` to `dest`.\n /// @param dest memory address to copy bytes to.\n /// @param source memory address to copy bytes from.\n /// @param length number of bytes to copy.\n function memCopy(\n uint256 dest,\n uint256 source,\n uint256 length\n )\n internal\n pure\n {\n if (length < 32) {\n // Handle a partial word by reading destination and masking\n // off the bits we are interested in.\n // This correctly handles overlap, zero lengths and source == dest\n assembly {\n let mask := sub(exp(256, sub(32, length)), 1)\n let s := and(mload(source), not(mask))\n let d := and(mload(dest), mask)\n mstore(dest, or(s, d))\n }\n } else {\n // Skip the O(length) loop when source == dest.\n if (source == dest) {\n return;\n }\n\n // For large copies we copy whole words at a time. The final\n // word is aligned to the end of the range (instead of after the\n // previous) to handle partial words. So a copy will look like this:\n //\n // ####\n // ####\n // ####\n // ####\n //\n // We handle overlap in the source and destination range by\n // changing the copying direction. This prevents us from\n // overwriting parts of source that we still need to copy.\n //\n // This correctly handles source == dest\n //\n if (source > dest) {\n assembly {\n // We subtract 32 from `sEnd` and `dEnd` because it\n // is easier to compare with in the loop, and these\n // are also the addresses we need for copying the\n // last bytes.\n length := sub(length, 32)\n let sEnd := add(source, length)\n let dEnd := add(dest, length)\n\n // Remember the last 32 bytes of source\n // This needs to be done here and not after the loop\n // because we may have overwritten the last bytes in\n // source already due to overlap.\n let last := mload(sEnd)\n\n // Copy whole words front to back\n // Note: the first check is always true,\n // this could have been a do-while loop.\n // solhint-disable-next-line no-empty-blocks\n for {} lt(source, sEnd) {} {\n mstore(dest, mload(source))\n source := add(source, 32)\n dest := add(dest, 32)\n }\n \n // Write the last 32 bytes\n mstore(dEnd, last)\n }\n } else {\n assembly {\n // We subtract 32 from `sEnd` and `dEnd` because those\n // are the starting points when copying a word at the end.\n length := sub(length, 32)\n let sEnd := add(source, length)\n let dEnd := add(dest, length)\n\n // Remember the first 32 bytes of source\n // This needs to be done here and not after the loop\n // because we may have overwritten the first bytes in\n // source already due to overlap.\n let first := mload(source)\n\n // Copy whole words back to front\n // We use a signed comparisson here to allow dEnd to become\n // negative (happens when source and dest < 32). Valid\n // addresses in local memory will never be larger than\n // 2**255, so they can be safely re-interpreted as signed.\n // Note: the first check is always true,\n // this could have been a do-while loop.\n // solhint-disable-next-line no-empty-blocks\n for {} slt(dest, dEnd) {} {\n mstore(dEnd, mload(sEnd))\n sEnd := sub(sEnd, 32)\n dEnd := sub(dEnd, 32)\n }\n \n // Write the first 32 bytes\n mstore(dest, first)\n }\n }\n }\n }\n\n /// @dev Returns a slices from a byte array.\n /// @param b The byte array to take a slice from.\n /// @param from The starting index for the slice (inclusive).\n /// @param to The final index for the slice (exclusive).\n /// @return result The slice containing bytes at indices [from, to)\n function slice(\n bytes memory b,\n uint256 from,\n uint256 to\n )\n internal\n pure\n returns (bytes memory result)\n {\n require(\n from <= to,\n \"FROM_LESS_THAN_TO_REQUIRED\"\n );\n require(\n to < b.length,\n \"TO_LESS_THAN_LENGTH_REQUIRED\"\n );\n \n // Create a new bytes structure and copy contents\n result = new bytes(to - from);\n memCopy(\n result.contentAddress(),\n b.contentAddress() + from,\n result.length);\n return result;\n }\n \n /// @dev Returns a slice from a byte array without preserving the input.\n /// @param b The byte array to take a slice from. Will be destroyed in the process.\n /// @param from The starting index for the slice (inclusive).\n /// @param to The final index for the slice (exclusive).\n /// @return result The slice containing bytes at indices [from, to)\n /// @dev When `from == 0`, the original array will match the slice. In other cases its state will be corrupted.\n function sliceDestructive(\n bytes memory b,\n uint256 from,\n uint256 to\n )\n internal\n pure\n returns (bytes memory result)\n {\n require(\n from <= to,\n \"FROM_LESS_THAN_TO_REQUIRED\"\n );\n require(\n to < b.length,\n \"TO_LESS_THAN_LENGTH_REQUIRED\"\n );\n \n // Create a new bytes structure around [from, to) in-place.\n assembly {\n result := add(b, from)\n mstore(result, sub(to, from))\n }\n return result;\n }\n\n /// @dev Pops the last byte off of a byte array by modifying its length.\n /// @param b Byte array that will be modified.\n /// @return The byte that was popped off.\n function popLastByte(bytes memory b)\n internal\n pure\n returns (bytes1 result)\n {\n require(\n b.length > 0,\n \"GREATER_THAN_ZERO_LENGTH_REQUIRED\"\n );\n\n // Store last byte.\n result = b[b.length - 1];\n\n assembly {\n // Decrement length of byte array.\n let newLen := sub(mload(b), 1)\n mstore(b, newLen)\n }\n return result;\n }\n\n /// @dev Pops the last 20 bytes off of a byte array by modifying its length.\n /// @param b Byte array that will be modified.\n /// @return The 20 byte address that was popped off.\n function popLast20Bytes(bytes memory b)\n internal\n pure\n returns (address result)\n {\n require(\n b.length >= 20,\n \"GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\"\n );\n\n // Store last 20 bytes.\n result = readAddress(b, b.length - 20);\n\n assembly {\n // Subtract 20 from byte array length.\n let newLen := sub(mload(b), 20)\n mstore(b, newLen)\n }\n return result;\n }\n\n /// @dev Tests equality of two byte arrays.\n /// @param lhs First byte array to compare.\n /// @param rhs Second byte array to compare.\n /// @return True if arrays are the same. False otherwise.\n function equals(\n bytes memory lhs,\n bytes memory rhs\n )\n internal\n pure\n returns (bool equal)\n {\n // Keccak gas cost is 30 + numWords * 6. This is a cheap way to compare.\n // We early exit on unequal lengths, but keccak would also correctly\n // handle this.\n return lhs.length == rhs.length && keccak256(lhs) == keccak256(rhs);\n }\n\n /// @dev Reads an address from a position in a byte array.\n /// @param b Byte array containing an address.\n /// @param index Index in byte array of address.\n /// @return address from byte array.\n function readAddress(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (address result)\n {\n require(\n b.length >= index + 20, // 20 is length of address\n \"GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\"\n );\n\n // Add offset to index:\n // 1. Arrays are prefixed by 32-byte length parameter (add 32 to index)\n // 2. Account for size difference between address length and 32-byte storage word (subtract 12 from index)\n index += 20;\n\n // Read address from array memory\n assembly {\n // 1. Add index to address of bytes array\n // 2. Load 32-byte word from memory\n // 3. Apply 20-byte mask to obtain address\n result := and(mload(add(b, index)), 0xffffffffffffffffffffffffffffffffffffffff)\n }\n return result;\n }\n\n /// @dev Writes an address into a specific position in a byte array.\n /// @param b Byte array to insert address into.\n /// @param index Index in byte array of address.\n /// @param input Address to put into byte array.\n function writeAddress(\n bytes memory b,\n uint256 index,\n address input\n )\n internal\n pure\n {\n require(\n b.length >= index + 20, // 20 is length of address\n \"GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\"\n );\n\n // Add offset to index:\n // 1. Arrays are prefixed by 32-byte length parameter (add 32 to index)\n // 2. Account for size difference between address length and 32-byte storage word (subtract 12 from index)\n index += 20;\n\n // Store address into array memory\n assembly {\n // The address occupies 20 bytes and mstore stores 32 bytes.\n // First fetch the 32-byte word where we'll be storing the address, then\n // apply a mask so we have only the bytes in the word that the address will not occupy.\n // Then combine these bytes with the address and store the 32 bytes back to memory with mstore.\n\n // 1. Add index to address of bytes array\n // 2. Load 32-byte word from memory\n // 3. Apply 12-byte mask to obtain extra bytes occupying word of memory where we'll store the address\n let neighbors := and(\n mload(add(b, index)),\n 0xffffffffffffffffffffffff0000000000000000000000000000000000000000\n )\n \n // Make sure input address is clean.\n // (Solidity does not guarantee this)\n input := and(input, 0xffffffffffffffffffffffffffffffffffffffff)\n\n // Store the neighbors and address into memory\n mstore(add(b, index), xor(input, neighbors))\n }\n }\n\n /// @dev Reads a bytes32 value from a position in a byte array.\n /// @param b Byte array containing a bytes32 value.\n /// @param index Index in byte array of bytes32 value.\n /// @return bytes32 value from byte array.\n function readBytes32(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (bytes32 result)\n {\n require(\n b.length >= index + 32,\n \"GREATER_OR_EQUAL_TO_32_LENGTH_REQUIRED\"\n );\n\n // Arrays are prefixed by a 256 bit length parameter\n index += 32;\n\n // Read the bytes32 from array memory\n assembly {\n result := mload(add(b, index))\n }\n return result;\n }\n\n /// @dev Writes a bytes32 into a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input bytes32 to put into byte array.\n function writeBytes32(\n bytes memory b,\n uint256 index,\n bytes32 input\n )\n internal\n pure\n {\n require(\n b.length >= index + 32,\n \"GREATER_OR_EQUAL_TO_32_LENGTH_REQUIRED\"\n );\n\n // Arrays are prefixed by a 256 bit length parameter\n index += 32;\n\n // Read the bytes32 from array memory\n assembly {\n mstore(add(b, index), input)\n }\n }\n\n /// @dev Reads a uint256 value from a position in a byte array.\n /// @param b Byte array containing a uint256 value.\n /// @param index Index in byte array of uint256 value.\n /// @return uint256 value from byte array.\n function readUint256(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (uint256 result)\n {\n return uint256(readBytes32(b, index));\n }\n\n /// @dev Writes a uint256 into a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input uint256 to put into byte array.\n function writeUint256(\n bytes memory b,\n uint256 index,\n uint256 input\n )\n internal\n pure\n {\n writeBytes32(b, index, bytes32(input));\n }\n\n /// @dev Reads an unpadded bytes4 value from a position in a byte array.\n /// @param b Byte array containing a bytes4 value.\n /// @param index Index in byte array of bytes4 value.\n /// @return bytes4 value from byte array.\n function readBytes4(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (bytes4 result)\n {\n require(\n b.length >= index + 4,\n \"GREATER_OR_EQUAL_TO_4_LENGTH_REQUIRED\"\n );\n assembly {\n result := mload(add(b, 32))\n // Solidity does not require us to clean the trailing bytes.\n // We do it anyway\n result := and(result, 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000)\n }\n return result;\n }\n\n /// @dev Reads nested bytes from a specific position.\n /// @dev NOTE: the returned value overlaps with the input value.\n /// Both should be treated as immutable.\n /// @param b Byte array containing nested bytes.\n /// @param index Index of nested bytes.\n /// @return result Nested bytes.\n function readBytesWithLength(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (bytes memory result)\n {\n // Read length of nested bytes\n uint256 nestedBytesLength = readUint256(b, index);\n index += 32;\n\n // Assert length of <b> is valid, given\n // length of nested bytes\n require(\n b.length >= index + nestedBytesLength,\n \"GREATER_OR_EQUAL_TO_NESTED_BYTES_LENGTH_REQUIRED\"\n );\n \n // Return a pointer to the byte array as it exists inside `b`\n assembly {\n result := add(b, index)\n }\n return result;\n }\n\n /// @dev Inserts bytes at a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input bytes to insert.\n function writeBytesWithLength(\n bytes memory b,\n uint256 index,\n bytes memory input\n )\n internal\n pure\n {\n // Assert length of <b> is valid, given\n // length of input\n require(\n b.length >= index + 32 + input.length, // 32 bytes to store length\n \"GREATER_OR_EQUAL_TO_NESTED_BYTES_LENGTH_REQUIRED\"\n );\n\n // Copy <input> into <b>\n memCopy(\n b.contentAddress() + index,\n input.rawAddress(), // includes length of <input>\n input.length + 32 // +32 bytes to store <input> length\n );\n }\n\n /// @dev Performs a deep copy of a byte array onto another byte array of greater than or equal length.\n /// @param dest Byte array that will be overwritten with source bytes.\n /// @param source Byte array to copy onto dest bytes.\n function deepCopyBytes(\n bytes memory dest,\n bytes memory source\n )\n internal\n pure\n {\n uint256 sourceLen = source.length;\n // Dest length must be >= source length, or some bytes would not be copied.\n require(\n dest.length >= sourceLen,\n \"GREATER_OR_EQUAL_TO_SOURCE_BYTES_LENGTH_REQUIRED\"\n );\n memCopy(\n dest.contentAddress(),\n source.contentAddress(),\n sourceLen\n );\n }\n}\n"
},
- "sourceTreeHashHex": "0x0fd51dcc2ded34e0fa5a49f28cc52ff2aaf62c772a22a87ade5663c123565a05",
+ "sourceTreeHashHex": "0x576c249cc9fbe26dcf247612088418c48ae9deb865ccc461cf72c637a4acc6d0",
"compiler": {
"name": "solc",
"version": "soljson-v0.4.24+commit.e67f0147.js",
diff --git a/packages/migrations/artifacts/2.0.0/TestLibs.json b/packages/migrations/artifacts/2.0.0/TestLibs.json
index 7ff01e84d..969bb26ab 100644
--- a/packages/migrations/artifacts/2.0.0/TestLibs.json
+++ b/packages/migrations/artifacts/2.0.0/TestLibs.json
@@ -263,15 +263,15 @@
"evm": {
"bytecode": {
"linkReferences": {},
- "object": "0x7f454950373132446f6d61696e280000000000000000000000000000000000000060a09081527f737472696e67206e616d652c000000000000000000000000000000000000000060ad527f737472696e672076657273696f6e2c000000000000000000000000000000000060b9527f6164647265737320766572696679696e67436f6e74726163740000000000000060c8527f290000000000000000000000000000000000000000000000000000000000000060e1526042608081815260e26040819052909290918291908083835b60208310620000ef5780518252601f199092019160209182019101620000ce565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208285018552600b8084527f30782050726f746f636f6c000000000000000000000000000000000000000000928401928352945190965091945090928392508083835b60208310620001795780518252601f19909201916020918201910162000158565b51815160209384036101000a600019018019909216911617905260408051929094018290038220828501855260018084527f3200000000000000000000000000000000000000000000000000000000000000928401928352945190965091945090928392508083835b60208310620002035780518252601f199092019160209182019101620001e2565b51815160209384036101000a60001901801990921691161790526040519190930181900381206200023e9796955093503092019050620002d0565b6040516020818303038152906040526040518082805190602001908083835b602083106200027e5780518252601f1990920191602091820191016200025d565b5181516020939093036101000a600019018019909116921691909117905260405192018290039091206000555062000325915050565b620002bf8162000316565b82525050565b620002bf8162000322565b60808101620002e08287620002c5565b620002ef6020830186620002c5565b620002fe6040830185620002c5565b6200030d6060830184620002b4565b95945050505050565b600160a060020a031690565b90565b61128a80620003356000396000f30060806040526004361061008d5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663041e63fe81146100925780632624b2d9146100c8578063494d9297146100dd57806366758d7b146100f25780637d33c6ee1461011f5780638ae6331614610134578063d980208814610161578063e306f77914610181575b600080fd5b34801561009e57600080fd5b506100b26100ad3660046110d7565b610196565b6040516100bf919061119a565b60405180910390f35b3480156100d457600080fd5b506100b26101ab565b3480156100e957600080fd5b506100b26102ff565b3480156100fe57600080fd5b5061011261010d366004611067565b610457565b6040516100bf91906111a8565b34801561012b57600080fd5b506100b2610472565b34801561014057600080fd5b5061015461014f3660046110d7565b6106f2565b6040516100bf919061118c565b34801561016d57600080fd5b506100b261017c3660046110a2565b6106ff565b34801561018d57600080fd5b506100b261070a565b60006101a3848484610710565b949350505050565b604080517f454950373132446f6d61696e28000000000000000000000000000000000000006020808301919091527f737472696e67206e616d652c0000000000000000000000000000000000000000602d8301527f737472696e672076657273696f6e2c000000000000000000000000000000000060398301527f6164647265737320766572696679696e67436f6e74726163740000000000000060488301527f2900000000000000000000000000000000000000000000000000000000000000606183015282516042818403018152606290920192839052815191929182918401908083835b602083106102cf57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610292565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902081565b604080517f454950373132446f6d61696e28000000000000000000000000000000000000006020808301919091527f737472696e67206e616d652c0000000000000000000000000000000000000000602d8301527f737472696e672076657273696f6e2c000000000000000000000000000000000060398301527f6164647265737320766572696679696e67436f6e74726163740000000000000060488301527f29000000000000000000000000000000000000000000000000000000000000006061830152825160428184030181526062909201928390528151600093918291908401908083835b6020831061042557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016103e8565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020905090565b61045f610e1a565b6104698383610725565b50815b92915050565b604080517f4f726465722800000000000000000000000000000000000000000000000000006020808301919091527f61646472657373206d616b6572416464726573732c000000000000000000000060268301527f616464726573732074616b6572416464726573732c0000000000000000000000603b8301527f6164647265737320666565526563697069656e74416464726573732c0000000060508301527f616464726573732073656e646572416464726573732c00000000000000000000606c8301527f75696e74323536206d616b65724173736574416d6f756e742c0000000000000060828301527f75696e743235362074616b65724173736574416d6f756e742c00000000000000609b8301527f75696e74323536206d616b65724665652c00000000000000000000000000000060b48301527f75696e743235362074616b65724665652c00000000000000000000000000000060c58301527f75696e743235362065787069726174696f6e54696d655365636f6e64732c000060d68301527f75696e743235362073616c742c0000000000000000000000000000000000000060f48301527f6279746573206d616b65724173736574446174612c00000000000000000000006101018301527f62797465732074616b65724173736574446174610000000000000000000000006101168301527f290000000000000000000000000000000000000000000000000000000000000061012a830152825161010b81840301815261012b909201928390528151600093918291908401908083836020831061042557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016103e8565b60006101a3848484610787565b600061046c826107dd565b60005481565b60006101a361071f85846107f0565b8461081b565b815181516107339190610832565b8252602080830151908201516107499190610832565b6020830152604080830151908201516107629190610832565b60408301526060808301519082015161077b9190610832565b60609092019190915250565b60008060008480151561079657fe5b86850991508115156107ab57600092506107d4565b6107ca6107bb83620f42406107f0565b6107c588876107f0565b61081b565b6103e88111935090505b50509392505050565b600061046c6107eb83610841565b610c9a565b600082820283158061080c575082848281151561080957fe5b04145b151561081457fe5b9392505050565b600080828481151561082957fe5b04949350505050565b60008282018381101561081457fe5b604080517f4f726465722800000000000000000000000000000000000000000000000000006020808301919091527f61646472657373206d616b6572416464726573732c000000000000000000000060268301527f616464726573732074616b6572416464726573732c0000000000000000000000603b8301527f6164647265737320666565526563697069656e74416464726573732c0000000060508301527f616464726573732073656e646572416464726573732c00000000000000000000606c8301527f75696e74323536206d616b65724173736574416d6f756e742c0000000000000060828301527f75696e743235362074616b65724173736574416d6f756e742c00000000000000609b8301527f75696e74323536206d616b65724665652c00000000000000000000000000000060b48301527f75696e743235362074616b65724665652c00000000000000000000000000000060c58301527f75696e743235362065787069726174696f6e54696d655365636f6e64732c000060d68301527f75696e743235362073616c742c0000000000000000000000000000000000000060f48301527f6279746573206d616b65724173736574446174612c00000000000000000000006101018301527f62797465732074616b65724173736574446174610000000000000000000000006101168301527f290000000000000000000000000000000000000000000000000000000000000061012a830152825161010b81840301815261012b90920192839052815160009384938493849391929182918401908083835b60208310610ac957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a8c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930181900381206101408b0151805191995095509093508392850191508083835b60208310610b6457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b27565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930181900381206101608b0151805191985095509093508392850191508083835b60208310610bff57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610bc2565b5181516020939093036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909116921691909117905260405192018290039091207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0890180516101408b018051610160909c0180519a84529881529288526101a0822091529890525050509190525090919050565b60006040805190810160405280600281526020017f1901000000000000000000000000000000000000000000000000000000000000815250600054836040516020018084805190602001908083835b60208310610d2657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610ce9565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199092169116179052920194855250838101929092525060408051808403830181529281019081905282519293509182918401908083835b60208310610dca57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d8d565b5181516020939093036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199091169216919091179052604051920182900390912095945050505050565b608060405190810160405280600081526020016000815260200160008152602001600081525090565b6000610814823561122b565b6000601f82018313610e6057600080fd5b8135610e73610e6e826111dd565b6111b6565b91508082526020830160208301858383011115610e8f57600080fd5b610e9a838284611244565b50505092915050565b600060808284031215610eb557600080fd5b610ebf60806111b6565b90506000610ecd848461105b565b8252506020610ede8484830161105b565b6020830152506040610ef28482850161105b565b6040830152506060610f068482850161105b565b60608301525092915050565b60006101808284031215610f2557600080fd5b610f306101806111b6565b90506000610f3e8484610e43565b8252506020610f4f84848301610e43565b6020830152506040610f6384828501610e43565b6040830152506060610f7784828501610e43565b6060830152506080610f8b8482850161105b565b60808301525060a0610f9f8482850161105b565b60a08301525060c0610fb38482850161105b565b60c08301525060e0610fc78482850161105b565b60e083015250610100610fdc8482850161105b565b61010083015250610120610ff28482850161105b565b6101208301525061014082013567ffffffffffffffff81111561101457600080fd5b61102084828501610e4f565b6101408301525061016082013567ffffffffffffffff81111561104257600080fd5b61104e84828501610e4f565b6101608301525092915050565b60006108148235611228565b600080610100838503121561107b57600080fd5b60006110878585610ea3565b925050608061109885828601610ea3565b9150509250929050565b6000602082840312156110b457600080fd5b813567ffffffffffffffff8111156110cb57600080fd5b6101a384828501610f12565b6000806000606084860312156110ec57600080fd5b60006110f8868661105b565b93505060206111098682870161105b565b925050604061111a8682870161105b565b9150509250925092565b61112d81611223565b82525050565b61112d81611228565b8051608083019061114d8482611133565b5060208201516111606020850182611133565b5060408201516111736040850182611133565b5060608201516111866060850182611133565b50505050565b6020810161046c8284611124565b6020810161046c8284611133565b6080810161046c828461113c565b60405181810167ffffffffffffffff811182821017156111d557600080fd5b604052919050565b600067ffffffffffffffff8211156111f457600080fd5b506020601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160190565b151590565b90565b73ffffffffffffffffffffffffffffffffffffffff1690565b828183375060009101525600a265627a7a723058201a939c6ac796de03d4ed5d6faf5067c86664924647b984cd5006647dd0939efe6c6578706572696d656e74616cf50037",
- "opcodes": "PUSH32 0x454950373132446F6D61696E2800000000000000000000000000000000000000 PUSH1 0xA0 SWAP1 DUP2 MSTORE PUSH32 0x737472696E67206E616D652C0000000000000000000000000000000000000000 PUSH1 0xAD MSTORE PUSH32 0x737472696E672076657273696F6E2C0000000000000000000000000000000000 PUSH1 0xB9 MSTORE PUSH32 0x6164647265737320766572696679696E67436F6E747261637400000000000000 PUSH1 0xC8 MSTORE PUSH32 0x2900000000000000000000000000000000000000000000000000000000000000 PUSH1 0xE1 MSTORE PUSH1 0x42 PUSH1 0x80 DUP2 DUP2 MSTORE PUSH1 0xE2 PUSH1 0x40 DUP2 SWAP1 MSTORE SWAP1 SWAP3 SWAP1 SWAP2 DUP3 SWAP2 SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH3 0xEF JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH3 0xCE JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP5 ADD DUP3 SWAP1 SUB DUP3 KECCAK256 DUP3 DUP6 ADD DUP6 MSTORE PUSH1 0xB DUP1 DUP5 MSTORE PUSH32 0x30782050726F746F636F6C000000000000000000000000000000000000000000 SWAP3 DUP5 ADD SWAP3 DUP4 MSTORE SWAP5 MLOAD SWAP1 SWAP7 POP SWAP2 SWAP5 POP SWAP1 SWAP3 DUP4 SWAP3 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH3 0x179 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH3 0x158 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP5 ADD DUP3 SWAP1 SUB DUP3 KECCAK256 DUP3 DUP6 ADD DUP6 MSTORE PUSH1 0x1 DUP1 DUP5 MSTORE PUSH32 0x3200000000000000000000000000000000000000000000000000000000000000 SWAP3 DUP5 ADD SWAP3 DUP4 MSTORE SWAP5 MLOAD SWAP1 SWAP7 POP SWAP2 SWAP5 POP SWAP1 SWAP3 DUP4 SWAP3 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH3 0x203 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH3 0x1E2 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP4 ADD DUP2 SWAP1 SUB DUP2 KECCAK256 PUSH3 0x23E SWAP8 SWAP7 SWAP6 POP SWAP4 POP ADDRESS SWAP3 ADD SWAP1 POP PUSH3 0x2D0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH3 0x27E JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH3 0x25D JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 SWAP1 SWAP4 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP2 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP3 ADD DUP3 SWAP1 SUB SWAP1 SWAP2 KECCAK256 PUSH1 0x0 SSTORE POP PUSH3 0x325 SWAP2 POP POP JUMP JUMPDEST PUSH3 0x2BF DUP2 PUSH3 0x316 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH3 0x2BF DUP2 PUSH3 0x322 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH3 0x2E0 DUP3 DUP8 PUSH3 0x2C5 JUMP JUMPDEST PUSH3 0x2EF PUSH1 0x20 DUP4 ADD DUP7 PUSH3 0x2C5 JUMP JUMPDEST PUSH3 0x2FE PUSH1 0x40 DUP4 ADD DUP6 PUSH3 0x2C5 JUMP JUMPDEST PUSH3 0x30D PUSH1 0x60 DUP4 ADD DUP5 PUSH3 0x2B4 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0x128A DUP1 PUSH3 0x335 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x8D JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x41E63FE DUP2 EQ PUSH2 0x92 JUMPI DUP1 PUSH4 0x2624B2D9 EQ PUSH2 0xC8 JUMPI DUP1 PUSH4 0x494D9297 EQ PUSH2 0xDD JUMPI DUP1 PUSH4 0x66758D7B EQ PUSH2 0xF2 JUMPI DUP1 PUSH4 0x7D33C6EE EQ PUSH2 0x11F JUMPI DUP1 PUSH4 0x8AE63316 EQ PUSH2 0x134 JUMPI DUP1 PUSH4 0xD9802088 EQ PUSH2 0x161 JUMPI DUP1 PUSH4 0xE306F779 EQ PUSH2 0x181 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x9E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB2 PUSH2 0xAD CALLDATASIZE PUSH1 0x4 PUSH2 0x10D7 JUMP JUMPDEST PUSH2 0x196 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xBF SWAP2 SWAP1 PUSH2 0x119A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xD4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB2 PUSH2 0x1AB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB2 PUSH2 0x2FF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xFE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x112 PUSH2 0x10D CALLDATASIZE PUSH1 0x4 PUSH2 0x1067 JUMP JUMPDEST PUSH2 0x457 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xBF SWAP2 SWAP1 PUSH2 0x11A8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x12B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB2 PUSH2 0x472 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x140 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x154 PUSH2 0x14F CALLDATASIZE PUSH1 0x4 PUSH2 0x10D7 JUMP JUMPDEST PUSH2 0x6F2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xBF SWAP2 SWAP1 PUSH2 0x118C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x16D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB2 PUSH2 0x17C CALLDATASIZE PUSH1 0x4 PUSH2 0x10A2 JUMP JUMPDEST PUSH2 0x6FF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x18D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB2 PUSH2 0x70A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A3 DUP5 DUP5 DUP5 PUSH2 0x710 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x454950373132446F6D61696E2800000000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x737472696E67206E616D652C0000000000000000000000000000000000000000 PUSH1 0x2D DUP4 ADD MSTORE PUSH32 0x737472696E672076657273696F6E2C0000000000000000000000000000000000 PUSH1 0x39 DUP4 ADD MSTORE PUSH32 0x6164647265737320766572696679696E67436F6E747261637400000000000000 PUSH1 0x48 DUP4 ADD MSTORE PUSH32 0x2900000000000000000000000000000000000000000000000000000000000000 PUSH1 0x61 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x42 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x62 SWAP1 SWAP3 ADD SWAP3 DUP4 SWAP1 MSTORE DUP2 MLOAD SWAP2 SWAP3 SWAP2 DUP3 SWAP2 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x2CF JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x292 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 DUP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x454950373132446F6D61696E2800000000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x737472696E67206E616D652C0000000000000000000000000000000000000000 PUSH1 0x2D DUP4 ADD MSTORE PUSH32 0x737472696E672076657273696F6E2C0000000000000000000000000000000000 PUSH1 0x39 DUP4 ADD MSTORE PUSH32 0x6164647265737320766572696679696E67436F6E747261637400000000000000 PUSH1 0x48 DUP4 ADD MSTORE PUSH32 0x2900000000000000000000000000000000000000000000000000000000000000 PUSH1 0x61 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x42 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x62 SWAP1 SWAP3 ADD SWAP3 DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH1 0x0 SWAP4 SWAP2 DUP3 SWAP2 SWAP1 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x425 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x3E8 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x45F PUSH2 0xE1A JUMP JUMPDEST PUSH2 0x469 DUP4 DUP4 PUSH2 0x725 JUMP JUMPDEST POP DUP2 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x4F72646572280000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x61646472657373206D616B6572416464726573732C0000000000000000000000 PUSH1 0x26 DUP4 ADD MSTORE PUSH32 0x616464726573732074616B6572416464726573732C0000000000000000000000 PUSH1 0x3B DUP4 ADD MSTORE PUSH32 0x6164647265737320666565526563697069656E74416464726573732C00000000 PUSH1 0x50 DUP4 ADD MSTORE PUSH32 0x616464726573732073656E646572416464726573732C00000000000000000000 PUSH1 0x6C DUP4 ADD MSTORE PUSH32 0x75696E74323536206D616B65724173736574416D6F756E742C00000000000000 PUSH1 0x82 DUP4 ADD MSTORE PUSH32 0x75696E743235362074616B65724173736574416D6F756E742C00000000000000 PUSH1 0x9B DUP4 ADD MSTORE PUSH32 0x75696E74323536206D616B65724665652C000000000000000000000000000000 PUSH1 0xB4 DUP4 ADD MSTORE PUSH32 0x75696E743235362074616B65724665652C000000000000000000000000000000 PUSH1 0xC5 DUP4 ADD MSTORE PUSH32 0x75696E743235362065787069726174696F6E54696D655365636F6E64732C0000 PUSH1 0xD6 DUP4 ADD MSTORE PUSH32 0x75696E743235362073616C742C00000000000000000000000000000000000000 PUSH1 0xF4 DUP4 ADD MSTORE PUSH32 0x6279746573206D616B65724173736574446174612C0000000000000000000000 PUSH2 0x101 DUP4 ADD MSTORE PUSH32 0x62797465732074616B6572417373657444617461000000000000000000000000 PUSH2 0x116 DUP4 ADD MSTORE PUSH32 0x2900000000000000000000000000000000000000000000000000000000000000 PUSH2 0x12A DUP4 ADD MSTORE DUP3 MLOAD PUSH2 0x10B DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH2 0x12B SWAP1 SWAP3 ADD SWAP3 DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH1 0x0 SWAP4 SWAP2 DUP3 SWAP2 SWAP1 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x20 DUP4 LT PUSH2 0x425 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x3E8 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A3 DUP5 DUP5 DUP5 PUSH2 0x787 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x46C DUP3 PUSH2 0x7DD JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A3 PUSH2 0x71F DUP6 DUP5 PUSH2 0x7F0 JUMP JUMPDEST DUP5 PUSH2 0x81B JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD PUSH2 0x733 SWAP2 SWAP1 PUSH2 0x832 JUMP JUMPDEST DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MLOAD PUSH2 0x749 SWAP2 SWAP1 PUSH2 0x832 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MLOAD PUSH2 0x762 SWAP2 SWAP1 PUSH2 0x832 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MLOAD PUSH2 0x77B SWAP2 SWAP1 PUSH2 0x832 JUMP JUMPDEST PUSH1 0x60 SWAP1 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP5 DUP1 ISZERO ISZERO PUSH2 0x796 JUMPI INVALID JUMPDEST DUP7 DUP6 MULMOD SWAP2 POP DUP2 ISZERO ISZERO PUSH2 0x7AB JUMPI PUSH1 0x0 SWAP3 POP PUSH2 0x7D4 JUMP JUMPDEST PUSH2 0x7CA PUSH2 0x7BB DUP4 PUSH3 0xF4240 PUSH2 0x7F0 JUMP JUMPDEST PUSH2 0x7C5 DUP9 DUP8 PUSH2 0x7F0 JUMP JUMPDEST PUSH2 0x81B JUMP JUMPDEST PUSH2 0x3E8 DUP2 GT SWAP4 POP SWAP1 POP JUMPDEST POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x46C PUSH2 0x7EB DUP4 PUSH2 0x841 JUMP JUMPDEST PUSH2 0xC9A JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MUL DUP4 ISZERO DUP1 PUSH2 0x80C JUMPI POP DUP3 DUP5 DUP3 DUP2 ISZERO ISZERO PUSH2 0x809 JUMPI INVALID JUMPDEST DIV EQ JUMPDEST ISZERO ISZERO PUSH2 0x814 JUMPI INVALID JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 DUP5 DUP2 ISZERO ISZERO PUSH2 0x829 JUMPI INVALID JUMPDEST DIV SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x814 JUMPI INVALID JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x4F72646572280000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x61646472657373206D616B6572416464726573732C0000000000000000000000 PUSH1 0x26 DUP4 ADD MSTORE PUSH32 0x616464726573732074616B6572416464726573732C0000000000000000000000 PUSH1 0x3B DUP4 ADD MSTORE PUSH32 0x6164647265737320666565526563697069656E74416464726573732C00000000 PUSH1 0x50 DUP4 ADD MSTORE PUSH32 0x616464726573732073656E646572416464726573732C00000000000000000000 PUSH1 0x6C DUP4 ADD MSTORE PUSH32 0x75696E74323536206D616B65724173736574416D6F756E742C00000000000000 PUSH1 0x82 DUP4 ADD MSTORE PUSH32 0x75696E743235362074616B65724173736574416D6F756E742C00000000000000 PUSH1 0x9B DUP4 ADD MSTORE PUSH32 0x75696E74323536206D616B65724665652C000000000000000000000000000000 PUSH1 0xB4 DUP4 ADD MSTORE PUSH32 0x75696E743235362074616B65724665652C000000000000000000000000000000 PUSH1 0xC5 DUP4 ADD MSTORE PUSH32 0x75696E743235362065787069726174696F6E54696D655365636F6E64732C0000 PUSH1 0xD6 DUP4 ADD MSTORE PUSH32 0x75696E743235362073616C742C00000000000000000000000000000000000000 PUSH1 0xF4 DUP4 ADD MSTORE PUSH32 0x6279746573206D616B65724173736574446174612C0000000000000000000000 PUSH2 0x101 DUP4 ADD MSTORE PUSH32 0x62797465732074616B6572417373657444617461000000000000000000000000 PUSH2 0x116 DUP4 ADD MSTORE PUSH32 0x2900000000000000000000000000000000000000000000000000000000000000 PUSH2 0x12A DUP4 ADD MSTORE DUP3 MLOAD PUSH2 0x10B DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH2 0x12B SWAP1 SWAP3 ADD SWAP3 DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH1 0x0 SWAP4 DUP5 SWAP4 DUP5 SWAP4 DUP5 SWAP4 SWAP2 SWAP3 SWAP2 DUP3 SWAP2 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xAC9 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xA8C JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP4 ADD DUP2 SWAP1 SUB DUP2 KECCAK256 PUSH2 0x140 DUP12 ADD MLOAD DUP1 MLOAD SWAP2 SWAP10 POP SWAP6 POP SWAP1 SWAP4 POP DUP4 SWAP3 DUP6 ADD SWAP2 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xB64 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xB27 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP4 ADD DUP2 SWAP1 SUB DUP2 KECCAK256 PUSH2 0x160 DUP12 ADD MLOAD DUP1 MLOAD SWAP2 SWAP9 POP SWAP6 POP SWAP1 SWAP4 POP DUP4 SWAP3 DUP6 ADD SWAP2 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xBFF JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xBC2 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 SWAP1 SWAP4 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP2 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP3 ADD DUP3 SWAP1 SUB SWAP1 SWAP2 KECCAK256 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP10 ADD DUP1 MLOAD PUSH2 0x140 DUP12 ADD DUP1 MLOAD PUSH2 0x160 SWAP1 SWAP13 ADD DUP1 MLOAD SWAP11 DUP5 MSTORE SWAP9 DUP2 MSTORE SWAP3 DUP9 MSTORE PUSH2 0x1A0 DUP3 KECCAK256 SWAP2 MSTORE SWAP9 SWAP1 MSTORE POP POP POP SWAP2 SWAP1 MSTORE POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x0 SLOAD DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP5 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xD26 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xCE9 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP5 DUP6 MSTORE POP DUP4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP5 SUB DUP4 ADD DUP2 MSTORE SWAP3 DUP2 ADD SWAP1 DUP2 SWAP1 MSTORE DUP3 MLOAD SWAP3 SWAP4 POP SWAP2 DUP3 SWAP2 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xDCA JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xD8D JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 SWAP1 SWAP4 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP2 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP3 ADD DUP3 SWAP1 SUB SWAP1 SWAP2 KECCAK256 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x814 DUP3 CALLDATALOAD PUSH2 0x122B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0xE60 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xE73 PUSH2 0xE6E DUP3 PUSH2 0x11DD JUMP JUMPDEST PUSH2 0x11B6 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP4 ADD DUP6 DUP4 DUP4 ADD GT ISZERO PUSH2 0xE8F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xE9A DUP4 DUP3 DUP5 PUSH2 0x1244 JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xEB5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xEBF PUSH1 0x80 PUSH2 0x11B6 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xECD DUP5 DUP5 PUSH2 0x105B JUMP JUMPDEST DUP3 MSTORE POP PUSH1 0x20 PUSH2 0xEDE DUP5 DUP5 DUP4 ADD PUSH2 0x105B JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP PUSH1 0x40 PUSH2 0xEF2 DUP5 DUP3 DUP6 ADD PUSH2 0x105B JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 PUSH2 0xF06 DUP5 DUP3 DUP6 ADD PUSH2 0x105B JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x180 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xF25 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xF30 PUSH2 0x180 PUSH2 0x11B6 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xF3E DUP5 DUP5 PUSH2 0xE43 JUMP JUMPDEST DUP3 MSTORE POP PUSH1 0x20 PUSH2 0xF4F DUP5 DUP5 DUP4 ADD PUSH2 0xE43 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP PUSH1 0x40 PUSH2 0xF63 DUP5 DUP3 DUP6 ADD PUSH2 0xE43 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 PUSH2 0xF77 DUP5 DUP3 DUP6 ADD PUSH2 0xE43 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE POP PUSH1 0x80 PUSH2 0xF8B DUP5 DUP3 DUP6 ADD PUSH2 0x105B JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE POP PUSH1 0xA0 PUSH2 0xF9F DUP5 DUP3 DUP6 ADD PUSH2 0x105B JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE POP PUSH1 0xC0 PUSH2 0xFB3 DUP5 DUP3 DUP6 ADD PUSH2 0x105B JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE POP PUSH1 0xE0 PUSH2 0xFC7 DUP5 DUP3 DUP6 ADD PUSH2 0x105B JUMP JUMPDEST PUSH1 0xE0 DUP4 ADD MSTORE POP PUSH2 0x100 PUSH2 0xFDC DUP5 DUP3 DUP6 ADD PUSH2 0x105B JUMP JUMPDEST PUSH2 0x100 DUP4 ADD MSTORE POP PUSH2 0x120 PUSH2 0xFF2 DUP5 DUP3 DUP6 ADD PUSH2 0x105B JUMP JUMPDEST PUSH2 0x120 DUP4 ADD MSTORE POP PUSH2 0x140 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1014 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1020 DUP5 DUP3 DUP6 ADD PUSH2 0xE4F JUMP JUMPDEST PUSH2 0x140 DUP4 ADD MSTORE POP PUSH2 0x160 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1042 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x104E DUP5 DUP3 DUP6 ADD PUSH2 0xE4F JUMP JUMPDEST PUSH2 0x160 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x814 DUP3 CALLDATALOAD PUSH2 0x1228 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x100 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x107B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1087 DUP6 DUP6 PUSH2 0xEA3 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x80 PUSH2 0x1098 DUP6 DUP3 DUP7 ADD PUSH2 0xEA3 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x10B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x10CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1A3 DUP5 DUP3 DUP6 ADD PUSH2 0xF12 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x10EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x10F8 DUP7 DUP7 PUSH2 0x105B JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x1109 DUP7 DUP3 DUP8 ADD PUSH2 0x105B JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x111A DUP7 DUP3 DUP8 ADD PUSH2 0x105B JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH2 0x112D DUP2 PUSH2 0x1223 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x112D DUP2 PUSH2 0x1228 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x80 DUP4 ADD SWAP1 PUSH2 0x114D DUP5 DUP3 PUSH2 0x1133 JUMP JUMPDEST POP PUSH1 0x20 DUP3 ADD MLOAD PUSH2 0x1160 PUSH1 0x20 DUP6 ADD DUP3 PUSH2 0x1133 JUMP JUMPDEST POP PUSH1 0x40 DUP3 ADD MLOAD PUSH2 0x1173 PUSH1 0x40 DUP6 ADD DUP3 PUSH2 0x1133 JUMP JUMPDEST POP PUSH1 0x60 DUP3 ADD MLOAD PUSH2 0x1186 PUSH1 0x60 DUP6 ADD DUP3 PUSH2 0x1133 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x46C DUP3 DUP5 PUSH2 0x1124 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x46C DUP3 DUP5 PUSH2 0x1133 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x46C DUP3 DUP5 PUSH2 0x113C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x11D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x11F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x1F SWAP2 SWAP1 SWAP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND ADD SWAP1 JUMP JUMPDEST ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP STOP LOG2 PUSH6 0x627A7A723058 KECCAK256 BYTE SWAP4 SWAP13 PUSH11 0xC796DE03D4ED5D6FAF5067 0xc8 PUSH7 0x64924647B984CD POP MOD PUSH5 0x7DD0939EFE PUSH13 0x6578706572696D656E74616CF5 STOP CALLDATACOPY ",
- "sourceMap": "1015:148:0:-;;;;;;;;;;;;;;;;;22:32:-1;802:1525:4;6:49:-1;;;1015:148:0;802:1525:4;1015:148:0;;;802:1525:4;;1015:148:0;;;;;22:32:-1;1015:148:0;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;1005:159:0;;;;;;;;;;;;1423:18;;;;;;;;;;;;;;;;1407:36;;1005:159;;-1:-1:-1;1005:159:0;;-1:-1:-1;1407:36:0;;;;-1:-1:-1;1423:18:0;1407:36;1423:18;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;1407:36:0;;;;;;;;;;;;1473:21;;;;;274:1:-1;1473:21:0;;;;;;;;;;1457:39;;1407:36;;-1:-1:-1;1407:36:0;;-1:-1:-1;1457:39:0;;;;-1:-1:-1;274:1;1457:39:0;1473:21;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;1457:39:0;;;;;;;;;;;1334:199;;;;-1:-1:-1;1457:39:0;-1:-1:-1;1518:4:0;;1334:199;;-1:-1:-1;1334:199:0;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;1334:199:0;;;1324:210;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;;;;365:33;;1324:210:0;;;;;;;;;;-1:-1:-1;1303:231:0;-1:-1:-1;802:1525:4;;-1:-1:-1;;802:1525:4;5:110:-1;78:31;103:5;78:31;;;73:3;66:44;60:55;;;122:110;195:31;220:5;195:31;;239:497;431:3;416:19;;446:61;420:9;480:6;446:61;;;518:62;576:2;565:9;561:18;552:6;518:62;;;591;649:2;638:9;634:18;625:6;591:62;;;664;722:2;711:9;707:18;698:6;664:62;;;402:334;;;;;;;;743:128;-1:-1;;;;;812:54;;795:76;878:79;947:5;930:27;;802:1525:4;;;;;;"
+ "object": "0x7f454950373132446f6d61696e280000000000000000000000000000000000000060a09081527f737472696e67206e616d652c000000000000000000000000000000000000000060ad527f737472696e672076657273696f6e2c000000000000000000000000000000000060b9527f6164647265737320766572696679696e67436f6e74726163740000000000000060c8527f290000000000000000000000000000000000000000000000000000000000000060e1526042608081815260e26040819052909290918291908083835b60208310620000ef5780518252601f199092019160209182019101620000ce565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208285018552600b8084527f30782050726f746f636f6c000000000000000000000000000000000000000000928401928352945190965091945090928392508083835b60208310620001795780518252601f19909201916020918201910162000158565b51815160209384036101000a600019018019909216911617905260408051929094018290038220828501855260018084527f3200000000000000000000000000000000000000000000000000000000000000928401928352945190965091945090928392508083835b60208310620002035780518252601f199092019160209182019101620001e2565b51815160209384036101000a60001901801990921691161790526040519190930181900381206200023e9796955093503092019050620002d0565b6040516020818303038152906040526040518082805190602001908083835b602083106200027e5780518252601f1990920191602091820191016200025d565b5181516020939093036101000a600019018019909116921691909117905260405192018290039091206000555062000325915050565b620002bf8162000316565b82525050565b620002bf8162000322565b60808101620002e08287620002c5565b620002ef6020830186620002c5565b620002fe6040830185620002c5565b6200030d6060830184620002b4565b95945050505050565b600160a060020a031690565b90565b61134580620003356000396000f30060806040526004361061008d5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663041e63fe81146100925780632624b2d9146100c8578063494d9297146100dd57806366758d7b146100f25780637d33c6ee1461011f5780638ae6331614610134578063d980208814610161578063e306f77914610181575b600080fd5b34801561009e57600080fd5b506100b26100ad366004611152565b610196565b6040516100bf9190611245565b60405180910390f35b3480156100d457600080fd5b506100b26101ab565b3480156100e957600080fd5b506100b26102ff565b3480156100fe57600080fd5b5061011261010d3660046110e2565b610457565b6040516100bf9190611263565b34801561012b57600080fd5b506100b2610472565b34801561014057600080fd5b5061015461014f366004611152565b6106f2565b6040516100bf9190611237565b34801561016d57600080fd5b506100b261017c36600461111d565b6106ff565b34801561018d57600080fd5b506100b261070a565b60006101a3848484610710565b949350505050565b604080517f454950373132446f6d61696e28000000000000000000000000000000000000006020808301919091527f737472696e67206e616d652c0000000000000000000000000000000000000000602d8301527f737472696e672076657273696f6e2c000000000000000000000000000000000060398301527f6164647265737320766572696679696e67436f6e74726163740000000000000060488301527f2900000000000000000000000000000000000000000000000000000000000000606183015282516042818403018152606290920192839052815191929182918401908083835b602083106102cf57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610292565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902081565b604080517f454950373132446f6d61696e28000000000000000000000000000000000000006020808301919091527f737472696e67206e616d652c0000000000000000000000000000000000000000602d8301527f737472696e672076657273696f6e2c000000000000000000000000000000000060398301527f6164647265737320766572696679696e67436f6e74726163740000000000000060488301527f29000000000000000000000000000000000000000000000000000000000000006061830152825160428184030181526062909201928390528151600093918291908401908083835b6020831061042557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016103e8565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020905090565b61045f610e8e565b6104698383610725565b50815b92915050565b604080517f4f726465722800000000000000000000000000000000000000000000000000006020808301919091527f61646472657373206d616b6572416464726573732c000000000000000000000060268301527f616464726573732074616b6572416464726573732c0000000000000000000000603b8301527f6164647265737320666565526563697069656e74416464726573732c0000000060508301527f616464726573732073656e646572416464726573732c00000000000000000000606c8301527f75696e74323536206d616b65724173736574416d6f756e742c0000000000000060828301527f75696e743235362074616b65724173736574416d6f756e742c00000000000000609b8301527f75696e74323536206d616b65724665652c00000000000000000000000000000060b48301527f75696e743235362074616b65724665652c00000000000000000000000000000060c58301527f75696e743235362065787069726174696f6e54696d655365636f6e64732c000060d68301527f75696e743235362073616c742c0000000000000000000000000000000000000060f48301527f6279746573206d616b65724173736574446174612c00000000000000000000006101018301527f62797465732074616b65724173736574446174610000000000000000000000006101168301527f290000000000000000000000000000000000000000000000000000000000000061012a830152825161010b81840301815261012b909201928390528151600093918291908401908083836020831061042557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016103e8565b60006101a3848484610787565b600061046c826107dd565b60005481565b60006101a361071f85846107f0565b8461085f565b815181516107339190610876565b8252602080830151908201516107499190610876565b6020830152604080830151908201516107629190610876565b60408301526060808301519082015161077b9190610876565b60609092019190915250565b60008060008480151561079657fe5b86850991508115156107ab57600092506107d4565b6107ca6107bb83620f42406107f0565b6107c588876107f0565b61085f565b6103e88111935090505b50509392505050565b600061046c6107eb836108b5565b610d0e565b6000808315156108035760009150610858565b5082820282848281151561081357fe5b0414610854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90611253565b60405180910390fd5b8091505b5092915050565b600080828481151561086d57fe5b04949350505050565b600082820183811015610854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90611253565b604080517f4f726465722800000000000000000000000000000000000000000000000000006020808301919091527f61646472657373206d616b6572416464726573732c000000000000000000000060268301527f616464726573732074616b6572416464726573732c0000000000000000000000603b8301527f6164647265737320666565526563697069656e74416464726573732c0000000060508301527f616464726573732073656e646572416464726573732c00000000000000000000606c8301527f75696e74323536206d616b65724173736574416d6f756e742c0000000000000060828301527f75696e743235362074616b65724173736574416d6f756e742c00000000000000609b8301527f75696e74323536206d616b65724665652c00000000000000000000000000000060b48301527f75696e743235362074616b65724665652c00000000000000000000000000000060c58301527f75696e743235362065787069726174696f6e54696d655365636f6e64732c000060d68301527f75696e743235362073616c742c0000000000000000000000000000000000000060f48301527f6279746573206d616b65724173736574446174612c00000000000000000000006101018301527f62797465732074616b65724173736574446174610000000000000000000000006101168301527f290000000000000000000000000000000000000000000000000000000000000061012a830152825161010b81840301815261012b90920192839052815160009384938493849391929182918401908083835b60208310610b3d57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b00565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930181900381206101408b0151805191995095509093508392850191508083835b60208310610bd857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9b565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930181900381206101608b0151805191985095509093508392850191508083835b60208310610c7357805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c36565b5181516020939093036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909116921691909117905260405192018290039091207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0890180516101408b018051610160909c0180519a84529881529288526101a0822091529890525050509190525090919050565b60006040805190810160405280600281526020017f1901000000000000000000000000000000000000000000000000000000000000815250600054836040516020018084805190602001908083835b60208310610d9a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d5d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199092169116179052920194855250838101929092525060408051808403830181529281019081905282519293509182918401908083835b60208310610e3e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610e01565b5181516020939093036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199091169216919091179052604051920182900390912095945050505050565b608060405190810160405280600081526020016000815260200160008152602001600081525090565b6000610ec382356112e6565b9392505050565b6000601f82018313610edb57600080fd5b8135610eee610ee982611298565b611271565b91508082526020830160208301858383011115610f0a57600080fd5b610f158382846112ff565b50505092915050565b600060808284031215610f3057600080fd5b610f3a6080611271565b90506000610f4884846110d6565b8252506020610f59848483016110d6565b6020830152506040610f6d848285016110d6565b6040830152506060610f81848285016110d6565b60608301525092915050565b60006101808284031215610fa057600080fd5b610fab610180611271565b90506000610fb98484610eb7565b8252506020610fca84848301610eb7565b6020830152506040610fde84828501610eb7565b6040830152506060610ff284828501610eb7565b6060830152506080611006848285016110d6565b60808301525060a061101a848285016110d6565b60a08301525060c061102e848285016110d6565b60c08301525060e0611042848285016110d6565b60e083015250610100611057848285016110d6565b6101008301525061012061106d848285016110d6565b6101208301525061014082013567ffffffffffffffff81111561108f57600080fd5b61109b84828501610eca565b6101408301525061016082013567ffffffffffffffff8111156110bd57600080fd5b6110c984828501610eca565b6101608301525092915050565b6000610ec382356112e3565b60008061010083850312156110f657600080fd5b60006111028585610f1e565b925050608061111385828601610f1e565b9150509250929050565b60006020828403121561112f57600080fd5b813567ffffffffffffffff81111561114657600080fd5b6101a384828501610f8d565b60008060006060848603121561116757600080fd5b600061117386866110d6565b9350506020611184868287016110d6565b9250506040611195868287016110d6565b9150509250925092565b6111a8816112de565b82525050565b6111a8816112e3565b601081527f55494e543235365f4f564552464c4f5700000000000000000000000000000000602082015260400190565b805160808301906111f884826111ae565b50602082015161120b60208501826111ae565b50604082015161121e60408501826111ae565b50606082015161123160608501826111ae565b50505050565b6020810161046c828461119f565b6020810161046c82846111ae565b6020808252810161046c816111b7565b6080810161046c82846111e7565b60405181810167ffffffffffffffff8111828210171561129057600080fd5b604052919050565b600067ffffffffffffffff8211156112af57600080fd5b506020601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160190565b151590565b90565b73ffffffffffffffffffffffffffffffffffffffff1690565b828183375060009101525600a265627a7a72305820678f9838f15fee062e9427ddca3779eb0bbf5945c3cb0d5d147c6d79c913dddb6c6578706572696d656e74616cf50037",
+ "opcodes": "PUSH32 0x454950373132446F6D61696E2800000000000000000000000000000000000000 PUSH1 0xA0 SWAP1 DUP2 MSTORE PUSH32 0x737472696E67206E616D652C0000000000000000000000000000000000000000 PUSH1 0xAD MSTORE PUSH32 0x737472696E672076657273696F6E2C0000000000000000000000000000000000 PUSH1 0xB9 MSTORE PUSH32 0x6164647265737320766572696679696E67436F6E747261637400000000000000 PUSH1 0xC8 MSTORE PUSH32 0x2900000000000000000000000000000000000000000000000000000000000000 PUSH1 0xE1 MSTORE PUSH1 0x42 PUSH1 0x80 DUP2 DUP2 MSTORE PUSH1 0xE2 PUSH1 0x40 DUP2 SWAP1 MSTORE SWAP1 SWAP3 SWAP1 SWAP2 DUP3 SWAP2 SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH3 0xEF JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH3 0xCE JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP5 ADD DUP3 SWAP1 SUB DUP3 KECCAK256 DUP3 DUP6 ADD DUP6 MSTORE PUSH1 0xB DUP1 DUP5 MSTORE PUSH32 0x30782050726F746F636F6C000000000000000000000000000000000000000000 SWAP3 DUP5 ADD SWAP3 DUP4 MSTORE SWAP5 MLOAD SWAP1 SWAP7 POP SWAP2 SWAP5 POP SWAP1 SWAP3 DUP4 SWAP3 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH3 0x179 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH3 0x158 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP5 ADD DUP3 SWAP1 SUB DUP3 KECCAK256 DUP3 DUP6 ADD DUP6 MSTORE PUSH1 0x1 DUP1 DUP5 MSTORE PUSH32 0x3200000000000000000000000000000000000000000000000000000000000000 SWAP3 DUP5 ADD SWAP3 DUP4 MSTORE SWAP5 MLOAD SWAP1 SWAP7 POP SWAP2 SWAP5 POP SWAP1 SWAP3 DUP4 SWAP3 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH3 0x203 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH3 0x1E2 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP4 ADD DUP2 SWAP1 SUB DUP2 KECCAK256 PUSH3 0x23E SWAP8 SWAP7 SWAP6 POP SWAP4 POP ADDRESS SWAP3 ADD SWAP1 POP PUSH3 0x2D0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH3 0x27E JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH3 0x25D JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 SWAP1 SWAP4 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP2 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP3 ADD DUP3 SWAP1 SUB SWAP1 SWAP2 KECCAK256 PUSH1 0x0 SSTORE POP PUSH3 0x325 SWAP2 POP POP JUMP JUMPDEST PUSH3 0x2BF DUP2 PUSH3 0x316 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH3 0x2BF DUP2 PUSH3 0x322 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH3 0x2E0 DUP3 DUP8 PUSH3 0x2C5 JUMP JUMPDEST PUSH3 0x2EF PUSH1 0x20 DUP4 ADD DUP7 PUSH3 0x2C5 JUMP JUMPDEST PUSH3 0x2FE PUSH1 0x40 DUP4 ADD DUP6 PUSH3 0x2C5 JUMP JUMPDEST PUSH3 0x30D PUSH1 0x60 DUP4 ADD DUP5 PUSH3 0x2B4 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0x1345 DUP1 PUSH3 0x335 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x8D JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x41E63FE DUP2 EQ PUSH2 0x92 JUMPI DUP1 PUSH4 0x2624B2D9 EQ PUSH2 0xC8 JUMPI DUP1 PUSH4 0x494D9297 EQ PUSH2 0xDD JUMPI DUP1 PUSH4 0x66758D7B EQ PUSH2 0xF2 JUMPI DUP1 PUSH4 0x7D33C6EE EQ PUSH2 0x11F JUMPI DUP1 PUSH4 0x8AE63316 EQ PUSH2 0x134 JUMPI DUP1 PUSH4 0xD9802088 EQ PUSH2 0x161 JUMPI DUP1 PUSH4 0xE306F779 EQ PUSH2 0x181 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x9E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB2 PUSH2 0xAD CALLDATASIZE PUSH1 0x4 PUSH2 0x1152 JUMP JUMPDEST PUSH2 0x196 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xBF SWAP2 SWAP1 PUSH2 0x1245 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xD4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB2 PUSH2 0x1AB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB2 PUSH2 0x2FF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xFE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x112 PUSH2 0x10D CALLDATASIZE PUSH1 0x4 PUSH2 0x10E2 JUMP JUMPDEST PUSH2 0x457 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xBF SWAP2 SWAP1 PUSH2 0x1263 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x12B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB2 PUSH2 0x472 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x140 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x154 PUSH2 0x14F CALLDATASIZE PUSH1 0x4 PUSH2 0x1152 JUMP JUMPDEST PUSH2 0x6F2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xBF SWAP2 SWAP1 PUSH2 0x1237 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x16D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB2 PUSH2 0x17C CALLDATASIZE PUSH1 0x4 PUSH2 0x111D JUMP JUMPDEST PUSH2 0x6FF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x18D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB2 PUSH2 0x70A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A3 DUP5 DUP5 DUP5 PUSH2 0x710 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x454950373132446F6D61696E2800000000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x737472696E67206E616D652C0000000000000000000000000000000000000000 PUSH1 0x2D DUP4 ADD MSTORE PUSH32 0x737472696E672076657273696F6E2C0000000000000000000000000000000000 PUSH1 0x39 DUP4 ADD MSTORE PUSH32 0x6164647265737320766572696679696E67436F6E747261637400000000000000 PUSH1 0x48 DUP4 ADD MSTORE PUSH32 0x2900000000000000000000000000000000000000000000000000000000000000 PUSH1 0x61 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x42 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x62 SWAP1 SWAP3 ADD SWAP3 DUP4 SWAP1 MSTORE DUP2 MLOAD SWAP2 SWAP3 SWAP2 DUP3 SWAP2 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x2CF JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x292 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 DUP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x454950373132446F6D61696E2800000000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x737472696E67206E616D652C0000000000000000000000000000000000000000 PUSH1 0x2D DUP4 ADD MSTORE PUSH32 0x737472696E672076657273696F6E2C0000000000000000000000000000000000 PUSH1 0x39 DUP4 ADD MSTORE PUSH32 0x6164647265737320766572696679696E67436F6E747261637400000000000000 PUSH1 0x48 DUP4 ADD MSTORE PUSH32 0x2900000000000000000000000000000000000000000000000000000000000000 PUSH1 0x61 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x42 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x62 SWAP1 SWAP3 ADD SWAP3 DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH1 0x0 SWAP4 SWAP2 DUP3 SWAP2 SWAP1 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x425 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x3E8 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x45F PUSH2 0xE8E JUMP JUMPDEST PUSH2 0x469 DUP4 DUP4 PUSH2 0x725 JUMP JUMPDEST POP DUP2 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x4F72646572280000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x61646472657373206D616B6572416464726573732C0000000000000000000000 PUSH1 0x26 DUP4 ADD MSTORE PUSH32 0x616464726573732074616B6572416464726573732C0000000000000000000000 PUSH1 0x3B DUP4 ADD MSTORE PUSH32 0x6164647265737320666565526563697069656E74416464726573732C00000000 PUSH1 0x50 DUP4 ADD MSTORE PUSH32 0x616464726573732073656E646572416464726573732C00000000000000000000 PUSH1 0x6C DUP4 ADD MSTORE PUSH32 0x75696E74323536206D616B65724173736574416D6F756E742C00000000000000 PUSH1 0x82 DUP4 ADD MSTORE PUSH32 0x75696E743235362074616B65724173736574416D6F756E742C00000000000000 PUSH1 0x9B DUP4 ADD MSTORE PUSH32 0x75696E74323536206D616B65724665652C000000000000000000000000000000 PUSH1 0xB4 DUP4 ADD MSTORE PUSH32 0x75696E743235362074616B65724665652C000000000000000000000000000000 PUSH1 0xC5 DUP4 ADD MSTORE PUSH32 0x75696E743235362065787069726174696F6E54696D655365636F6E64732C0000 PUSH1 0xD6 DUP4 ADD MSTORE PUSH32 0x75696E743235362073616C742C00000000000000000000000000000000000000 PUSH1 0xF4 DUP4 ADD MSTORE PUSH32 0x6279746573206D616B65724173736574446174612C0000000000000000000000 PUSH2 0x101 DUP4 ADD MSTORE PUSH32 0x62797465732074616B6572417373657444617461000000000000000000000000 PUSH2 0x116 DUP4 ADD MSTORE PUSH32 0x2900000000000000000000000000000000000000000000000000000000000000 PUSH2 0x12A DUP4 ADD MSTORE DUP3 MLOAD PUSH2 0x10B DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH2 0x12B SWAP1 SWAP3 ADD SWAP3 DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH1 0x0 SWAP4 SWAP2 DUP3 SWAP2 SWAP1 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x20 DUP4 LT PUSH2 0x425 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x3E8 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A3 DUP5 DUP5 DUP5 PUSH2 0x787 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x46C DUP3 PUSH2 0x7DD JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A3 PUSH2 0x71F DUP6 DUP5 PUSH2 0x7F0 JUMP JUMPDEST DUP5 PUSH2 0x85F JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD PUSH2 0x733 SWAP2 SWAP1 PUSH2 0x876 JUMP JUMPDEST DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MLOAD PUSH2 0x749 SWAP2 SWAP1 PUSH2 0x876 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MLOAD PUSH2 0x762 SWAP2 SWAP1 PUSH2 0x876 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MLOAD PUSH2 0x77B SWAP2 SWAP1 PUSH2 0x876 JUMP JUMPDEST PUSH1 0x60 SWAP1 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP5 DUP1 ISZERO ISZERO PUSH2 0x796 JUMPI INVALID JUMPDEST DUP7 DUP6 MULMOD SWAP2 POP DUP2 ISZERO ISZERO PUSH2 0x7AB JUMPI PUSH1 0x0 SWAP3 POP PUSH2 0x7D4 JUMP JUMPDEST PUSH2 0x7CA PUSH2 0x7BB DUP4 PUSH3 0xF4240 PUSH2 0x7F0 JUMP JUMPDEST PUSH2 0x7C5 DUP9 DUP8 PUSH2 0x7F0 JUMP JUMPDEST PUSH2 0x85F JUMP JUMPDEST PUSH2 0x3E8 DUP2 GT SWAP4 POP SWAP1 POP JUMPDEST POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x46C PUSH2 0x7EB DUP4 PUSH2 0x8B5 JUMP JUMPDEST PUSH2 0xD0E JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 ISZERO ISZERO PUSH2 0x803 JUMPI PUSH1 0x0 SWAP2 POP PUSH2 0x858 JUMP JUMPDEST POP DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 ISZERO ISZERO PUSH2 0x813 JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x854 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x84B SWAP1 PUSH2 0x1253 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 SWAP2 POP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 DUP5 DUP2 ISZERO ISZERO PUSH2 0x86D JUMPI INVALID JUMPDEST DIV SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x854 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x84B SWAP1 PUSH2 0x1253 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x4F72646572280000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x61646472657373206D616B6572416464726573732C0000000000000000000000 PUSH1 0x26 DUP4 ADD MSTORE PUSH32 0x616464726573732074616B6572416464726573732C0000000000000000000000 PUSH1 0x3B DUP4 ADD MSTORE PUSH32 0x6164647265737320666565526563697069656E74416464726573732C00000000 PUSH1 0x50 DUP4 ADD MSTORE PUSH32 0x616464726573732073656E646572416464726573732C00000000000000000000 PUSH1 0x6C DUP4 ADD MSTORE PUSH32 0x75696E74323536206D616B65724173736574416D6F756E742C00000000000000 PUSH1 0x82 DUP4 ADD MSTORE PUSH32 0x75696E743235362074616B65724173736574416D6F756E742C00000000000000 PUSH1 0x9B DUP4 ADD MSTORE PUSH32 0x75696E74323536206D616B65724665652C000000000000000000000000000000 PUSH1 0xB4 DUP4 ADD MSTORE PUSH32 0x75696E743235362074616B65724665652C000000000000000000000000000000 PUSH1 0xC5 DUP4 ADD MSTORE PUSH32 0x75696E743235362065787069726174696F6E54696D655365636F6E64732C0000 PUSH1 0xD6 DUP4 ADD MSTORE PUSH32 0x75696E743235362073616C742C00000000000000000000000000000000000000 PUSH1 0xF4 DUP4 ADD MSTORE PUSH32 0x6279746573206D616B65724173736574446174612C0000000000000000000000 PUSH2 0x101 DUP4 ADD MSTORE PUSH32 0x62797465732074616B6572417373657444617461000000000000000000000000 PUSH2 0x116 DUP4 ADD MSTORE PUSH32 0x2900000000000000000000000000000000000000000000000000000000000000 PUSH2 0x12A DUP4 ADD MSTORE DUP3 MLOAD PUSH2 0x10B DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH2 0x12B SWAP1 SWAP3 ADD SWAP3 DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH1 0x0 SWAP4 DUP5 SWAP4 DUP5 SWAP4 DUP5 SWAP4 SWAP2 SWAP3 SWAP2 DUP3 SWAP2 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xB3D JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xB00 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP4 ADD DUP2 SWAP1 SUB DUP2 KECCAK256 PUSH2 0x140 DUP12 ADD MLOAD DUP1 MLOAD SWAP2 SWAP10 POP SWAP6 POP SWAP1 SWAP4 POP DUP4 SWAP3 DUP6 ADD SWAP2 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xBD8 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xB9B JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP4 ADD DUP2 SWAP1 SUB DUP2 KECCAK256 PUSH2 0x160 DUP12 ADD MLOAD DUP1 MLOAD SWAP2 SWAP9 POP SWAP6 POP SWAP1 SWAP4 POP DUP4 SWAP3 DUP6 ADD SWAP2 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xC73 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xC36 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 SWAP1 SWAP4 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP2 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP3 ADD DUP3 SWAP1 SUB SWAP1 SWAP2 KECCAK256 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP10 ADD DUP1 MLOAD PUSH2 0x140 DUP12 ADD DUP1 MLOAD PUSH2 0x160 SWAP1 SWAP13 ADD DUP1 MLOAD SWAP11 DUP5 MSTORE SWAP9 DUP2 MSTORE SWAP3 DUP9 MSTORE PUSH2 0x1A0 DUP3 KECCAK256 SWAP2 MSTORE SWAP9 SWAP1 MSTORE POP POP POP SWAP2 SWAP1 MSTORE POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x0 SLOAD DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP5 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xD9A JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xD5D JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP5 DUP6 MSTORE POP DUP4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP5 SUB DUP4 ADD DUP2 MSTORE SWAP3 DUP2 ADD SWAP1 DUP2 SWAP1 MSTORE DUP3 MLOAD SWAP3 SWAP4 POP SWAP2 DUP3 SWAP2 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xE3E JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xE01 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 SWAP1 SWAP4 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP2 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP3 ADD DUP3 SWAP1 SUB SWAP1 SWAP2 KECCAK256 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xEC3 DUP3 CALLDATALOAD PUSH2 0x12E6 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0xEDB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xEEE PUSH2 0xEE9 DUP3 PUSH2 0x1298 JUMP JUMPDEST PUSH2 0x1271 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP4 ADD DUP6 DUP4 DUP4 ADD GT ISZERO PUSH2 0xF0A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xF15 DUP4 DUP3 DUP5 PUSH2 0x12FF JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xF30 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xF3A PUSH1 0x80 PUSH2 0x1271 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xF48 DUP5 DUP5 PUSH2 0x10D6 JUMP JUMPDEST DUP3 MSTORE POP PUSH1 0x20 PUSH2 0xF59 DUP5 DUP5 DUP4 ADD PUSH2 0x10D6 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP PUSH1 0x40 PUSH2 0xF6D DUP5 DUP3 DUP6 ADD PUSH2 0x10D6 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 PUSH2 0xF81 DUP5 DUP3 DUP6 ADD PUSH2 0x10D6 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x180 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xFA0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xFAB PUSH2 0x180 PUSH2 0x1271 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xFB9 DUP5 DUP5 PUSH2 0xEB7 JUMP JUMPDEST DUP3 MSTORE POP PUSH1 0x20 PUSH2 0xFCA DUP5 DUP5 DUP4 ADD PUSH2 0xEB7 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP PUSH1 0x40 PUSH2 0xFDE DUP5 DUP3 DUP6 ADD PUSH2 0xEB7 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 PUSH2 0xFF2 DUP5 DUP3 DUP6 ADD PUSH2 0xEB7 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE POP PUSH1 0x80 PUSH2 0x1006 DUP5 DUP3 DUP6 ADD PUSH2 0x10D6 JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE POP PUSH1 0xA0 PUSH2 0x101A DUP5 DUP3 DUP6 ADD PUSH2 0x10D6 JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE POP PUSH1 0xC0 PUSH2 0x102E DUP5 DUP3 DUP6 ADD PUSH2 0x10D6 JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE POP PUSH1 0xE0 PUSH2 0x1042 DUP5 DUP3 DUP6 ADD PUSH2 0x10D6 JUMP JUMPDEST PUSH1 0xE0 DUP4 ADD MSTORE POP PUSH2 0x100 PUSH2 0x1057 DUP5 DUP3 DUP6 ADD PUSH2 0x10D6 JUMP JUMPDEST PUSH2 0x100 DUP4 ADD MSTORE POP PUSH2 0x120 PUSH2 0x106D DUP5 DUP3 DUP6 ADD PUSH2 0x10D6 JUMP JUMPDEST PUSH2 0x120 DUP4 ADD MSTORE POP PUSH2 0x140 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x108F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x109B DUP5 DUP3 DUP6 ADD PUSH2 0xECA JUMP JUMPDEST PUSH2 0x140 DUP4 ADD MSTORE POP PUSH2 0x160 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x10BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x10C9 DUP5 DUP3 DUP6 ADD PUSH2 0xECA JUMP JUMPDEST PUSH2 0x160 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xEC3 DUP3 CALLDATALOAD PUSH2 0x12E3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x100 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x10F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1102 DUP6 DUP6 PUSH2 0xF1E JUMP JUMPDEST SWAP3 POP POP PUSH1 0x80 PUSH2 0x1113 DUP6 DUP3 DUP7 ADD PUSH2 0xF1E JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x112F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1146 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1A3 DUP5 DUP3 DUP6 ADD PUSH2 0xF8D JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1167 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1173 DUP7 DUP7 PUSH2 0x10D6 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x1184 DUP7 DUP3 DUP8 ADD PUSH2 0x10D6 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x1195 DUP7 DUP3 DUP8 ADD PUSH2 0x10D6 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH2 0x11A8 DUP2 PUSH2 0x12DE JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x11A8 DUP2 PUSH2 0x12E3 JUMP JUMPDEST PUSH1 0x10 DUP2 MSTORE PUSH32 0x55494E543235365F4F564552464C4F5700000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x80 DUP4 ADD SWAP1 PUSH2 0x11F8 DUP5 DUP3 PUSH2 0x11AE JUMP JUMPDEST POP PUSH1 0x20 DUP3 ADD MLOAD PUSH2 0x120B PUSH1 0x20 DUP6 ADD DUP3 PUSH2 0x11AE JUMP JUMPDEST POP PUSH1 0x40 DUP3 ADD MLOAD PUSH2 0x121E PUSH1 0x40 DUP6 ADD DUP3 PUSH2 0x11AE JUMP JUMPDEST POP PUSH1 0x60 DUP3 ADD MLOAD PUSH2 0x1231 PUSH1 0x60 DUP6 ADD DUP3 PUSH2 0x11AE JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x46C DUP3 DUP5 PUSH2 0x119F JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x46C DUP3 DUP5 PUSH2 0x11AE JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x46C DUP2 PUSH2 0x11B7 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x46C DUP3 DUP5 PUSH2 0x11E7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x1290 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x12AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x1F SWAP2 SWAP1 SWAP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND ADD SWAP1 JUMP JUMPDEST ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP STOP LOG2 PUSH6 0x627A7A723058 KECCAK256 PUSH8 0x8F9838F15FEE062E SWAP5 0x27 0xdd 0xca CALLDATACOPY PUSH26 0xEB0BBF5945C3CB0D5D147C6D79C913DDDB6C6578706572696D65 PUSH15 0x74616CF50037000000000000000000 ",
+ "sourceMap": "1042:148:0:-;;;;;;;;;;;;;;;;;22:32:-1;802:1535:4;6:49:-1;;;1042:148:0;802:1535:4;1042:148:0;;;802:1535:4;;1042:148:0;;;;;22:32:-1;1042:148:0;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;1032:159:0;;;;;;;;;;;;1502:18;;;;;;;;;;;;;;;;1486:36;;1032:159;;-1:-1:-1;1032:159:0;;-1:-1:-1;1486:36:0;;;;-1:-1:-1;1502:18:0;1486:36;1502:18;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;1486:36:0;;;;;;;;;;;;1552:21;;;;;274:1:-1;1552:21:0;;;;;;;;;;1536:39;;1486:36;;-1:-1:-1;1486:36:0;;-1:-1:-1;1536:39:0;;;;-1:-1:-1;274:1;1536:39:0;1552:21;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;1536:39:0;;;;;;;;;;;1413:199;;;;-1:-1:-1;1536:39:0;-1:-1:-1;1597:4:0;;1413:199;;-1:-1:-1;1413:199:0;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;1413:199:0;;;1403:210;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;;;;365:33;;1403:210:0;;;;;;;;;;-1:-1:-1;1382:231:0;-1:-1:-1;802:1535:4;;-1:-1:-1;;802:1535:4;5:110:-1;78:31;103:5;78:31;;;73:3;66:44;60:55;;;122:110;195:31;220:5;195:31;;239:497;431:3;416:19;;446:61;420:9;480:6;446:61;;;518:62;576:2;565:9;561:18;552:6;518:62;;;591;649:2;638:9;634:18;625:6;591:62;;;664;722:2;711:9;707:18;698:6;664:62;;;402:334;;;;;;;;743:128;-1:-1;;;;;812:54;;795:76;878:79;947:5;930:27;;802:1535:4;;;;;;"
},
"deployedBytecode": {
"linkReferences": {},
- "object": "0x60806040526004361061008d5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663041e63fe81146100925780632624b2d9146100c8578063494d9297146100dd57806366758d7b146100f25780637d33c6ee1461011f5780638ae6331614610134578063d980208814610161578063e306f77914610181575b600080fd5b34801561009e57600080fd5b506100b26100ad3660046110d7565b610196565b6040516100bf919061119a565b60405180910390f35b3480156100d457600080fd5b506100b26101ab565b3480156100e957600080fd5b506100b26102ff565b3480156100fe57600080fd5b5061011261010d366004611067565b610457565b6040516100bf91906111a8565b34801561012b57600080fd5b506100b2610472565b34801561014057600080fd5b5061015461014f3660046110d7565b6106f2565b6040516100bf919061118c565b34801561016d57600080fd5b506100b261017c3660046110a2565b6106ff565b34801561018d57600080fd5b506100b261070a565b60006101a3848484610710565b949350505050565b604080517f454950373132446f6d61696e28000000000000000000000000000000000000006020808301919091527f737472696e67206e616d652c0000000000000000000000000000000000000000602d8301527f737472696e672076657273696f6e2c000000000000000000000000000000000060398301527f6164647265737320766572696679696e67436f6e74726163740000000000000060488301527f2900000000000000000000000000000000000000000000000000000000000000606183015282516042818403018152606290920192839052815191929182918401908083835b602083106102cf57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610292565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902081565b604080517f454950373132446f6d61696e28000000000000000000000000000000000000006020808301919091527f737472696e67206e616d652c0000000000000000000000000000000000000000602d8301527f737472696e672076657273696f6e2c000000000000000000000000000000000060398301527f6164647265737320766572696679696e67436f6e74726163740000000000000060488301527f29000000000000000000000000000000000000000000000000000000000000006061830152825160428184030181526062909201928390528151600093918291908401908083835b6020831061042557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016103e8565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020905090565b61045f610e1a565b6104698383610725565b50815b92915050565b604080517f4f726465722800000000000000000000000000000000000000000000000000006020808301919091527f61646472657373206d616b6572416464726573732c000000000000000000000060268301527f616464726573732074616b6572416464726573732c0000000000000000000000603b8301527f6164647265737320666565526563697069656e74416464726573732c0000000060508301527f616464726573732073656e646572416464726573732c00000000000000000000606c8301527f75696e74323536206d616b65724173736574416d6f756e742c0000000000000060828301527f75696e743235362074616b65724173736574416d6f756e742c00000000000000609b8301527f75696e74323536206d616b65724665652c00000000000000000000000000000060b48301527f75696e743235362074616b65724665652c00000000000000000000000000000060c58301527f75696e743235362065787069726174696f6e54696d655365636f6e64732c000060d68301527f75696e743235362073616c742c0000000000000000000000000000000000000060f48301527f6279746573206d616b65724173736574446174612c00000000000000000000006101018301527f62797465732074616b65724173736574446174610000000000000000000000006101168301527f290000000000000000000000000000000000000000000000000000000000000061012a830152825161010b81840301815261012b909201928390528151600093918291908401908083836020831061042557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016103e8565b60006101a3848484610787565b600061046c826107dd565b60005481565b60006101a361071f85846107f0565b8461081b565b815181516107339190610832565b8252602080830151908201516107499190610832565b6020830152604080830151908201516107629190610832565b60408301526060808301519082015161077b9190610832565b60609092019190915250565b60008060008480151561079657fe5b86850991508115156107ab57600092506107d4565b6107ca6107bb83620f42406107f0565b6107c588876107f0565b61081b565b6103e88111935090505b50509392505050565b600061046c6107eb83610841565b610c9a565b600082820283158061080c575082848281151561080957fe5b04145b151561081457fe5b9392505050565b600080828481151561082957fe5b04949350505050565b60008282018381101561081457fe5b604080517f4f726465722800000000000000000000000000000000000000000000000000006020808301919091527f61646472657373206d616b6572416464726573732c000000000000000000000060268301527f616464726573732074616b6572416464726573732c0000000000000000000000603b8301527f6164647265737320666565526563697069656e74416464726573732c0000000060508301527f616464726573732073656e646572416464726573732c00000000000000000000606c8301527f75696e74323536206d616b65724173736574416d6f756e742c0000000000000060828301527f75696e743235362074616b65724173736574416d6f756e742c00000000000000609b8301527f75696e74323536206d616b65724665652c00000000000000000000000000000060b48301527f75696e743235362074616b65724665652c00000000000000000000000000000060c58301527f75696e743235362065787069726174696f6e54696d655365636f6e64732c000060d68301527f75696e743235362073616c742c0000000000000000000000000000000000000060f48301527f6279746573206d616b65724173736574446174612c00000000000000000000006101018301527f62797465732074616b65724173736574446174610000000000000000000000006101168301527f290000000000000000000000000000000000000000000000000000000000000061012a830152825161010b81840301815261012b90920192839052815160009384938493849391929182918401908083835b60208310610ac957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a8c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930181900381206101408b0151805191995095509093508392850191508083835b60208310610b6457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b27565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930181900381206101608b0151805191985095509093508392850191508083835b60208310610bff57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610bc2565b5181516020939093036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909116921691909117905260405192018290039091207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0890180516101408b018051610160909c0180519a84529881529288526101a0822091529890525050509190525090919050565b60006040805190810160405280600281526020017f1901000000000000000000000000000000000000000000000000000000000000815250600054836040516020018084805190602001908083835b60208310610d2657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610ce9565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199092169116179052920194855250838101929092525060408051808403830181529281019081905282519293509182918401908083835b60208310610dca57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d8d565b5181516020939093036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199091169216919091179052604051920182900390912095945050505050565b608060405190810160405280600081526020016000815260200160008152602001600081525090565b6000610814823561122b565b6000601f82018313610e6057600080fd5b8135610e73610e6e826111dd565b6111b6565b91508082526020830160208301858383011115610e8f57600080fd5b610e9a838284611244565b50505092915050565b600060808284031215610eb557600080fd5b610ebf60806111b6565b90506000610ecd848461105b565b8252506020610ede8484830161105b565b6020830152506040610ef28482850161105b565b6040830152506060610f068482850161105b565b60608301525092915050565b60006101808284031215610f2557600080fd5b610f306101806111b6565b90506000610f3e8484610e43565b8252506020610f4f84848301610e43565b6020830152506040610f6384828501610e43565b6040830152506060610f7784828501610e43565b6060830152506080610f8b8482850161105b565b60808301525060a0610f9f8482850161105b565b60a08301525060c0610fb38482850161105b565b60c08301525060e0610fc78482850161105b565b60e083015250610100610fdc8482850161105b565b61010083015250610120610ff28482850161105b565b6101208301525061014082013567ffffffffffffffff81111561101457600080fd5b61102084828501610e4f565b6101408301525061016082013567ffffffffffffffff81111561104257600080fd5b61104e84828501610e4f565b6101608301525092915050565b60006108148235611228565b600080610100838503121561107b57600080fd5b60006110878585610ea3565b925050608061109885828601610ea3565b9150509250929050565b6000602082840312156110b457600080fd5b813567ffffffffffffffff8111156110cb57600080fd5b6101a384828501610f12565b6000806000606084860312156110ec57600080fd5b60006110f8868661105b565b93505060206111098682870161105b565b925050604061111a8682870161105b565b9150509250925092565b61112d81611223565b82525050565b61112d81611228565b8051608083019061114d8482611133565b5060208201516111606020850182611133565b5060408201516111736040850182611133565b5060608201516111866060850182611133565b50505050565b6020810161046c8284611124565b6020810161046c8284611133565b6080810161046c828461113c565b60405181810167ffffffffffffffff811182821017156111d557600080fd5b604052919050565b600067ffffffffffffffff8211156111f457600080fd5b506020601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160190565b151590565b90565b73ffffffffffffffffffffffffffffffffffffffff1690565b828183375060009101525600a265627a7a723058201a939c6ac796de03d4ed5d6faf5067c86664924647b984cd5006647dd0939efe6c6578706572696d656e74616cf50037",
- "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x8D JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x41E63FE DUP2 EQ PUSH2 0x92 JUMPI DUP1 PUSH4 0x2624B2D9 EQ PUSH2 0xC8 JUMPI DUP1 PUSH4 0x494D9297 EQ PUSH2 0xDD JUMPI DUP1 PUSH4 0x66758D7B EQ PUSH2 0xF2 JUMPI DUP1 PUSH4 0x7D33C6EE EQ PUSH2 0x11F JUMPI DUP1 PUSH4 0x8AE63316 EQ PUSH2 0x134 JUMPI DUP1 PUSH4 0xD9802088 EQ PUSH2 0x161 JUMPI DUP1 PUSH4 0xE306F779 EQ PUSH2 0x181 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x9E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB2 PUSH2 0xAD CALLDATASIZE PUSH1 0x4 PUSH2 0x10D7 JUMP JUMPDEST PUSH2 0x196 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xBF SWAP2 SWAP1 PUSH2 0x119A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xD4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB2 PUSH2 0x1AB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB2 PUSH2 0x2FF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xFE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x112 PUSH2 0x10D CALLDATASIZE PUSH1 0x4 PUSH2 0x1067 JUMP JUMPDEST PUSH2 0x457 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xBF SWAP2 SWAP1 PUSH2 0x11A8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x12B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB2 PUSH2 0x472 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x140 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x154 PUSH2 0x14F CALLDATASIZE PUSH1 0x4 PUSH2 0x10D7 JUMP JUMPDEST PUSH2 0x6F2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xBF SWAP2 SWAP1 PUSH2 0x118C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x16D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB2 PUSH2 0x17C CALLDATASIZE PUSH1 0x4 PUSH2 0x10A2 JUMP JUMPDEST PUSH2 0x6FF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x18D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB2 PUSH2 0x70A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A3 DUP5 DUP5 DUP5 PUSH2 0x710 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x454950373132446F6D61696E2800000000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x737472696E67206E616D652C0000000000000000000000000000000000000000 PUSH1 0x2D DUP4 ADD MSTORE PUSH32 0x737472696E672076657273696F6E2C0000000000000000000000000000000000 PUSH1 0x39 DUP4 ADD MSTORE PUSH32 0x6164647265737320766572696679696E67436F6E747261637400000000000000 PUSH1 0x48 DUP4 ADD MSTORE PUSH32 0x2900000000000000000000000000000000000000000000000000000000000000 PUSH1 0x61 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x42 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x62 SWAP1 SWAP3 ADD SWAP3 DUP4 SWAP1 MSTORE DUP2 MLOAD SWAP2 SWAP3 SWAP2 DUP3 SWAP2 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x2CF JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x292 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 DUP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x454950373132446F6D61696E2800000000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x737472696E67206E616D652C0000000000000000000000000000000000000000 PUSH1 0x2D DUP4 ADD MSTORE PUSH32 0x737472696E672076657273696F6E2C0000000000000000000000000000000000 PUSH1 0x39 DUP4 ADD MSTORE PUSH32 0x6164647265737320766572696679696E67436F6E747261637400000000000000 PUSH1 0x48 DUP4 ADD MSTORE PUSH32 0x2900000000000000000000000000000000000000000000000000000000000000 PUSH1 0x61 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x42 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x62 SWAP1 SWAP3 ADD SWAP3 DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH1 0x0 SWAP4 SWAP2 DUP3 SWAP2 SWAP1 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x425 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x3E8 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x45F PUSH2 0xE1A JUMP JUMPDEST PUSH2 0x469 DUP4 DUP4 PUSH2 0x725 JUMP JUMPDEST POP DUP2 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x4F72646572280000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x61646472657373206D616B6572416464726573732C0000000000000000000000 PUSH1 0x26 DUP4 ADD MSTORE PUSH32 0x616464726573732074616B6572416464726573732C0000000000000000000000 PUSH1 0x3B DUP4 ADD MSTORE PUSH32 0x6164647265737320666565526563697069656E74416464726573732C00000000 PUSH1 0x50 DUP4 ADD MSTORE PUSH32 0x616464726573732073656E646572416464726573732C00000000000000000000 PUSH1 0x6C DUP4 ADD MSTORE PUSH32 0x75696E74323536206D616B65724173736574416D6F756E742C00000000000000 PUSH1 0x82 DUP4 ADD MSTORE PUSH32 0x75696E743235362074616B65724173736574416D6F756E742C00000000000000 PUSH1 0x9B DUP4 ADD MSTORE PUSH32 0x75696E74323536206D616B65724665652C000000000000000000000000000000 PUSH1 0xB4 DUP4 ADD MSTORE PUSH32 0x75696E743235362074616B65724665652C000000000000000000000000000000 PUSH1 0xC5 DUP4 ADD MSTORE PUSH32 0x75696E743235362065787069726174696F6E54696D655365636F6E64732C0000 PUSH1 0xD6 DUP4 ADD MSTORE PUSH32 0x75696E743235362073616C742C00000000000000000000000000000000000000 PUSH1 0xF4 DUP4 ADD MSTORE PUSH32 0x6279746573206D616B65724173736574446174612C0000000000000000000000 PUSH2 0x101 DUP4 ADD MSTORE PUSH32 0x62797465732074616B6572417373657444617461000000000000000000000000 PUSH2 0x116 DUP4 ADD MSTORE PUSH32 0x2900000000000000000000000000000000000000000000000000000000000000 PUSH2 0x12A DUP4 ADD MSTORE DUP3 MLOAD PUSH2 0x10B DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH2 0x12B SWAP1 SWAP3 ADD SWAP3 DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH1 0x0 SWAP4 SWAP2 DUP3 SWAP2 SWAP1 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x20 DUP4 LT PUSH2 0x425 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x3E8 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A3 DUP5 DUP5 DUP5 PUSH2 0x787 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x46C DUP3 PUSH2 0x7DD JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A3 PUSH2 0x71F DUP6 DUP5 PUSH2 0x7F0 JUMP JUMPDEST DUP5 PUSH2 0x81B JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD PUSH2 0x733 SWAP2 SWAP1 PUSH2 0x832 JUMP JUMPDEST DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MLOAD PUSH2 0x749 SWAP2 SWAP1 PUSH2 0x832 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MLOAD PUSH2 0x762 SWAP2 SWAP1 PUSH2 0x832 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MLOAD PUSH2 0x77B SWAP2 SWAP1 PUSH2 0x832 JUMP JUMPDEST PUSH1 0x60 SWAP1 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP5 DUP1 ISZERO ISZERO PUSH2 0x796 JUMPI INVALID JUMPDEST DUP7 DUP6 MULMOD SWAP2 POP DUP2 ISZERO ISZERO PUSH2 0x7AB JUMPI PUSH1 0x0 SWAP3 POP PUSH2 0x7D4 JUMP JUMPDEST PUSH2 0x7CA PUSH2 0x7BB DUP4 PUSH3 0xF4240 PUSH2 0x7F0 JUMP JUMPDEST PUSH2 0x7C5 DUP9 DUP8 PUSH2 0x7F0 JUMP JUMPDEST PUSH2 0x81B JUMP JUMPDEST PUSH2 0x3E8 DUP2 GT SWAP4 POP SWAP1 POP JUMPDEST POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x46C PUSH2 0x7EB DUP4 PUSH2 0x841 JUMP JUMPDEST PUSH2 0xC9A JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MUL DUP4 ISZERO DUP1 PUSH2 0x80C JUMPI POP DUP3 DUP5 DUP3 DUP2 ISZERO ISZERO PUSH2 0x809 JUMPI INVALID JUMPDEST DIV EQ JUMPDEST ISZERO ISZERO PUSH2 0x814 JUMPI INVALID JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 DUP5 DUP2 ISZERO ISZERO PUSH2 0x829 JUMPI INVALID JUMPDEST DIV SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x814 JUMPI INVALID JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x4F72646572280000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x61646472657373206D616B6572416464726573732C0000000000000000000000 PUSH1 0x26 DUP4 ADD MSTORE PUSH32 0x616464726573732074616B6572416464726573732C0000000000000000000000 PUSH1 0x3B DUP4 ADD MSTORE PUSH32 0x6164647265737320666565526563697069656E74416464726573732C00000000 PUSH1 0x50 DUP4 ADD MSTORE PUSH32 0x616464726573732073656E646572416464726573732C00000000000000000000 PUSH1 0x6C DUP4 ADD MSTORE PUSH32 0x75696E74323536206D616B65724173736574416D6F756E742C00000000000000 PUSH1 0x82 DUP4 ADD MSTORE PUSH32 0x75696E743235362074616B65724173736574416D6F756E742C00000000000000 PUSH1 0x9B DUP4 ADD MSTORE PUSH32 0x75696E74323536206D616B65724665652C000000000000000000000000000000 PUSH1 0xB4 DUP4 ADD MSTORE PUSH32 0x75696E743235362074616B65724665652C000000000000000000000000000000 PUSH1 0xC5 DUP4 ADD MSTORE PUSH32 0x75696E743235362065787069726174696F6E54696D655365636F6E64732C0000 PUSH1 0xD6 DUP4 ADD MSTORE PUSH32 0x75696E743235362073616C742C00000000000000000000000000000000000000 PUSH1 0xF4 DUP4 ADD MSTORE PUSH32 0x6279746573206D616B65724173736574446174612C0000000000000000000000 PUSH2 0x101 DUP4 ADD MSTORE PUSH32 0x62797465732074616B6572417373657444617461000000000000000000000000 PUSH2 0x116 DUP4 ADD MSTORE PUSH32 0x2900000000000000000000000000000000000000000000000000000000000000 PUSH2 0x12A DUP4 ADD MSTORE DUP3 MLOAD PUSH2 0x10B DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH2 0x12B SWAP1 SWAP3 ADD SWAP3 DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH1 0x0 SWAP4 DUP5 SWAP4 DUP5 SWAP4 DUP5 SWAP4 SWAP2 SWAP3 SWAP2 DUP3 SWAP2 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xAC9 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xA8C JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP4 ADD DUP2 SWAP1 SUB DUP2 KECCAK256 PUSH2 0x140 DUP12 ADD MLOAD DUP1 MLOAD SWAP2 SWAP10 POP SWAP6 POP SWAP1 SWAP4 POP DUP4 SWAP3 DUP6 ADD SWAP2 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xB64 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xB27 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP4 ADD DUP2 SWAP1 SUB DUP2 KECCAK256 PUSH2 0x160 DUP12 ADD MLOAD DUP1 MLOAD SWAP2 SWAP9 POP SWAP6 POP SWAP1 SWAP4 POP DUP4 SWAP3 DUP6 ADD SWAP2 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xBFF JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xBC2 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 SWAP1 SWAP4 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP2 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP3 ADD DUP3 SWAP1 SUB SWAP1 SWAP2 KECCAK256 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP10 ADD DUP1 MLOAD PUSH2 0x140 DUP12 ADD DUP1 MLOAD PUSH2 0x160 SWAP1 SWAP13 ADD DUP1 MLOAD SWAP11 DUP5 MSTORE SWAP9 DUP2 MSTORE SWAP3 DUP9 MSTORE PUSH2 0x1A0 DUP3 KECCAK256 SWAP2 MSTORE SWAP9 SWAP1 MSTORE POP POP POP SWAP2 SWAP1 MSTORE POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x0 SLOAD DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP5 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xD26 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xCE9 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP5 DUP6 MSTORE POP DUP4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP5 SUB DUP4 ADD DUP2 MSTORE SWAP3 DUP2 ADD SWAP1 DUP2 SWAP1 MSTORE DUP3 MLOAD SWAP3 SWAP4 POP SWAP2 DUP3 SWAP2 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xDCA JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xD8D JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 SWAP1 SWAP4 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP2 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP3 ADD DUP3 SWAP1 SUB SWAP1 SWAP2 KECCAK256 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x814 DUP3 CALLDATALOAD PUSH2 0x122B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0xE60 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xE73 PUSH2 0xE6E DUP3 PUSH2 0x11DD JUMP JUMPDEST PUSH2 0x11B6 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP4 ADD DUP6 DUP4 DUP4 ADD GT ISZERO PUSH2 0xE8F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xE9A DUP4 DUP3 DUP5 PUSH2 0x1244 JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xEB5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xEBF PUSH1 0x80 PUSH2 0x11B6 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xECD DUP5 DUP5 PUSH2 0x105B JUMP JUMPDEST DUP3 MSTORE POP PUSH1 0x20 PUSH2 0xEDE DUP5 DUP5 DUP4 ADD PUSH2 0x105B JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP PUSH1 0x40 PUSH2 0xEF2 DUP5 DUP3 DUP6 ADD PUSH2 0x105B JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 PUSH2 0xF06 DUP5 DUP3 DUP6 ADD PUSH2 0x105B JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x180 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xF25 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xF30 PUSH2 0x180 PUSH2 0x11B6 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xF3E DUP5 DUP5 PUSH2 0xE43 JUMP JUMPDEST DUP3 MSTORE POP PUSH1 0x20 PUSH2 0xF4F DUP5 DUP5 DUP4 ADD PUSH2 0xE43 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP PUSH1 0x40 PUSH2 0xF63 DUP5 DUP3 DUP6 ADD PUSH2 0xE43 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 PUSH2 0xF77 DUP5 DUP3 DUP6 ADD PUSH2 0xE43 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE POP PUSH1 0x80 PUSH2 0xF8B DUP5 DUP3 DUP6 ADD PUSH2 0x105B JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE POP PUSH1 0xA0 PUSH2 0xF9F DUP5 DUP3 DUP6 ADD PUSH2 0x105B JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE POP PUSH1 0xC0 PUSH2 0xFB3 DUP5 DUP3 DUP6 ADD PUSH2 0x105B JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE POP PUSH1 0xE0 PUSH2 0xFC7 DUP5 DUP3 DUP6 ADD PUSH2 0x105B JUMP JUMPDEST PUSH1 0xE0 DUP4 ADD MSTORE POP PUSH2 0x100 PUSH2 0xFDC DUP5 DUP3 DUP6 ADD PUSH2 0x105B JUMP JUMPDEST PUSH2 0x100 DUP4 ADD MSTORE POP PUSH2 0x120 PUSH2 0xFF2 DUP5 DUP3 DUP6 ADD PUSH2 0x105B JUMP JUMPDEST PUSH2 0x120 DUP4 ADD MSTORE POP PUSH2 0x140 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1014 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1020 DUP5 DUP3 DUP6 ADD PUSH2 0xE4F JUMP JUMPDEST PUSH2 0x140 DUP4 ADD MSTORE POP PUSH2 0x160 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1042 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x104E DUP5 DUP3 DUP6 ADD PUSH2 0xE4F JUMP JUMPDEST PUSH2 0x160 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x814 DUP3 CALLDATALOAD PUSH2 0x1228 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x100 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x107B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1087 DUP6 DUP6 PUSH2 0xEA3 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x80 PUSH2 0x1098 DUP6 DUP3 DUP7 ADD PUSH2 0xEA3 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x10B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x10CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1A3 DUP5 DUP3 DUP6 ADD PUSH2 0xF12 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x10EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x10F8 DUP7 DUP7 PUSH2 0x105B JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x1109 DUP7 DUP3 DUP8 ADD PUSH2 0x105B JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x111A DUP7 DUP3 DUP8 ADD PUSH2 0x105B JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH2 0x112D DUP2 PUSH2 0x1223 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x112D DUP2 PUSH2 0x1228 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x80 DUP4 ADD SWAP1 PUSH2 0x114D DUP5 DUP3 PUSH2 0x1133 JUMP JUMPDEST POP PUSH1 0x20 DUP3 ADD MLOAD PUSH2 0x1160 PUSH1 0x20 DUP6 ADD DUP3 PUSH2 0x1133 JUMP JUMPDEST POP PUSH1 0x40 DUP3 ADD MLOAD PUSH2 0x1173 PUSH1 0x40 DUP6 ADD DUP3 PUSH2 0x1133 JUMP JUMPDEST POP PUSH1 0x60 DUP3 ADD MLOAD PUSH2 0x1186 PUSH1 0x60 DUP6 ADD DUP3 PUSH2 0x1133 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x46C DUP3 DUP5 PUSH2 0x1124 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x46C DUP3 DUP5 PUSH2 0x1133 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x46C DUP3 DUP5 PUSH2 0x113C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x11D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x11F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x1F SWAP2 SWAP1 SWAP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND ADD SWAP1 JUMP JUMPDEST ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP STOP LOG2 PUSH6 0x627A7A723058 KECCAK256 BYTE SWAP4 SWAP13 PUSH11 0xC796DE03D4ED5D6FAF5067 0xc8 PUSH7 0x64924647B984CD POP MOD PUSH5 0x7DD0939EFE PUSH13 0x6578706572696D656E74616CF5 STOP CALLDATACOPY ",
- "sourceMap": "802:1525:4:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;876:342;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;876:342:4;;;;;;;;;;;;;;;;;;;;;;;;;943:221:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;943:221:0;;;;1887:157:4;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1887:157:4;;;;2050:275;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2050:275:4;;;;;;;;;;;;;;;;;1745:136;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1745:136:4;;;;1224:319;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1224:319:4;;;;;;;;;;;;;;;;;1549:190;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1549:190:4;;;;;;;;;1219:33:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1219:33:0;;;;876:342:4;1034:21;1087:94;1117:9;1140:11;1165:6;1087:16;:94::i;:::-;1071:110;876:342;-1:-1:-1;;;;876:342:4:o;943:221:0:-;1015:148;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;1015:148:0;;;;;;;;1005:159;;1015:148;;;;;1005:159;;;;1015:148;1005:159;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1005:159:0;;;;;;;;;;;;;;;;943:221;:::o;1887:157:4:-;1015:148:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;1015:148:0;;;;;;;;1005:159;;1972:7:4;;1015:148:0;;;1005:159;;;;;1015:148;1005:159;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1005:159:0;;;;;;;;;;;;;;;;1995:42:4;;1887:157;:::o;2050:275::-;2200:11;;:::i;:::-;2234:51;2249:16;2267:17;2234:14;:51::i;:::-;-1:-1:-1;2302:16:4;2050:275;;;;;:::o;1745:136::-;769:457:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;769:457:3;;;;;;;;759:468;;1820:7:4;;769:457:3;;;759:468;;;;;769:457;759:468;66:2:-1;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;1224:319:4;1381:12;1419:93;1448:9;1471:11;1496:6;1419:15;:93::i;1549:190::-;1642:17;1687:19;1700:5;1687:12;:19::i;1219:33:0:-;;;;:::o;937:326:2:-;1091:21;1144:82;1165:26;1173:9;1184:6;1165:7;:26::i;:::-;1205:11;1144:7;:82::i;1772:648:1:-;1965:39;;2006:40;;1957:90;;1965:39;1957:7;:90::i;:::-;1915:132;;2107:39;;;;;2148:40;;;;2099:90;;2107:39;2099:7;:90::i;:::-;2057:39;;;:132;2239:29;;;;;2270:30;;;;2231:70;;2239:29;2231:7;:70::i;:::-;2199:29;;;:102;2351:29;;;;;2382:30;;;;2343:70;;2351:29;2343:7;:70::i;:::-;2311:29;;;;:102;;;;-1:-1:-1;1772:648:1:o;1502:555:2:-;1655:12;1683:17;1840:33;1729:11;1703:38;;;;;;;1718:9;1710:6;1703:38;1683:58;-1:-1:-1;1755:14:2;;1751:79;;;1792:5;1785:12;;;;1751:79;1876:98;1897:27;1905:9;1916:7;1897;:27::i;:::-;1938:26;1946:9;1957:6;1938:7;:26::i;:::-;1876:7;:98::i;:::-;2022:4;1994:32;;;-1:-1:-1;1840:134:2;-1:-1:-1;1502:555:2;;;;;;;;:::o;4126:202:3:-;4215:17;4260:35;4278:16;4288:5;4278:9;:16::i;:::-;4260:17;:35::i;84:180:5:-;164:7;196:5;;;218:6;;;:20;;;237:1;232;228;:5;;;;;;;;:10;218:20;211:28;;;;;;256:1;84:180;-1:-1:-1;;;84:180:5:o;270:142::-;350:7;373:6;386:1;382;:5;;;;;;;;;270:142;-1:-1:-1;;;;270:142:5:o;570:166::-;650:7;682:5;;;704:6;;;;697:14;;;4468:1528:3;769:457;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;769:457:3;;;;;;;;759:468;;4554:14;;;;;;;;769:457;;;;;759:468;;;;769:457;759:468;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;365:33;;759:468:3;;;;;;;;;;;4678:20;;;;4668:31;;759:468;;-1:-1:-1;4678:20:3;-1:-1:-1;759:468:3;;-1:-1:-1;759:468:3;;4668:31;;;-1:-1:-1;4668:31:3;759:468;4668:31;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;365:33;;4668:31:3;;;;;;;;;;;4748:20;;;;4738:31;;4668;;-1:-1:-1;4748:20:3;-1:-1:-1;4668:31:3;;-1:-1:-1;4668:31:3;;4738;;;-1:-1:-1;4738:31:3;4668;4738;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;;;;365:33;;4738:31:3;;;;;;;;;;5425:15;;;5419:22;;5484:3;5473:15;;5467:22;;5532:3;5521:15;;;5515:22;;5592:35;;;5640:43;;;5696;;;5788:3;5762:30;;5841;;5884;;;-1:-1:-1;;;5927:30:3;;;-1:-1:-1;5762:30:3;;4468:1528;-1:-1:-1;4468:1528:3:o;1737:205:0:-;1831:7;1888:13;;;;;;;;;;;;;;;;;;1903:18;;1923:10;1871:63;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;365:33;;1871:63:0;;;;;-1:-1:-1;1871:63:0;;;;;;;-1:-1:-1;1871:63:0;;;26:21:-1;;;22:32;;6:49;;1871:63:0;;;;;;;1861:74;;1871:63;;-1:-1:-1;1871:63:0;;;1861:74;;;;1871:63;1861:74;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;;;;365:33;;1861:74:0;;;;;;;;;;;;-1:-1:-1;;;;;1737:205:0:o;802:1525:4:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5:118:-1:-;;72:46;110:6;97:20;72:46;;131:432;;221:4;209:17;;205:27;-1:-1;195:2;;246:1;243;236:12;195:2;283:6;270:20;305:60;320:44;357:6;320:44;;;305:60;;;296:69;;385:6;378:5;371:21;421:4;413:6;409:17;454:4;447:5;443:16;489:3;480:6;475:3;471:16;468:25;465:2;;;506:1;503;496:12;465:2;516:41;550:6;545:3;540;516:41;;;188:375;;;;;;;;611:809;;728:4;716:9;711:3;707:19;703:30;700:2;;;746:1;743;736:12;700:2;764:20;779:4;764:20;;;755:29;-1:-1;852:1;883:49;928:3;908:9;883:49;;;859:74;;-1:-1;1012:2;1045:49;1090:3;1066:22;;;1045:49;;;1038:4;1031:5;1027:16;1020:75;954:152;1164:2;1197:49;1242:3;1233:6;1222:9;1218:22;1197:49;;;1190:4;1183:5;1179:16;1172:75;1116:142;1316:2;1349:49;1394:3;1385:6;1374:9;1370:22;1349:49;;;1342:4;1335:5;1331:16;1324:75;1268:142;694:726;;;;;1455:2208;;1566:5;1554:9;1549:3;1545:19;1541:31;1538:2;;;1585:1;1582;1575:12;1538:2;1603:21;1618:5;1603:21;;;1594:30;-1:-1;1682:1;1713:49;1758:3;1738:9;1713:49;;;1689:74;;-1:-1;1832:2;1865:49;1910:3;1886:22;;;1865:49;;;1858:4;1851:5;1847:16;1840:75;1784:142;1991:2;2024:49;2069:3;2060:6;2049:9;2045:22;2024:49;;;2017:4;2010:5;2006:16;1999:75;1936:149;2144:2;2177:49;2222:3;2213:6;2202:9;2198:22;2177:49;;;2170:4;2163:5;2159:16;2152:75;2095:143;2300:3;2334:49;2379:3;2370:6;2359:9;2355:22;2334:49;;;2327:4;2320:5;2316:16;2309:75;2248:147;2457:3;2491:49;2536:3;2527:6;2516:9;2512:22;2491:49;;;2484:4;2477:5;2473:16;2466:75;2405:147;2606:3;2640:49;2685:3;2676:6;2665:9;2661:22;2640:49;;;2633:4;2626:5;2622:16;2615:75;2562:139;2755:3;2789:49;2834:3;2825:6;2814:9;2810:22;2789:49;;;2782:4;2775:5;2771:16;2764:75;2711:139;2917:3;2952:49;2997:3;2988:6;2977:9;2973:22;2952:49;;;2944:5;2937;2933:17;2926:76;2860:153;3063:3;3098:49;3143:3;3134:6;3123:9;3119:22;3098:49;;;3090:5;3083;3079:17;3072:76;3023:136;3247:3;3236:9;3232:19;3219:33;3272:18;3264:6;3261:30;3258:2;;;3304:1;3301;3294:12;3258:2;3340:54;3390:3;3381:6;3370:9;3366:22;3340:54;;;3332:5;3325;3321:17;3314:81;3169:237;3494:3;3483:9;3479:19;3466:33;3519:18;3511:6;3508:30;3505:2;;;3551:1;3548;3541:12;3505:2;3587:54;3637:3;3628:6;3617:9;3613:22;3587:54;;;3579:5;3572;3568:17;3561:81;3416:237;1532:2131;;;;;3670:118;;3737:46;3775:6;3762:20;3737:46;;3795:480;;;3972:3;3960:9;3951:7;3947:23;3943:33;3940:2;;;3989:1;3986;3979:12;3940:2;4024:1;4041:81;4114:7;4094:9;4041:81;;;4031:91;;4003:125;4159:3;4178:81;4251:7;4242:6;4231:9;4227:22;4178:81;;;4168:91;;4138:127;3934:341;;;;;;4282:371;;4408:2;4396:9;4387:7;4383:23;4379:32;4376:2;;;4424:1;4421;4414:12;4376:2;4459:31;;4510:18;4499:30;;4496:2;;;4542:1;4539;4532:12;4496:2;4562:75;4629:7;4620:6;4609:9;4605:22;4562:75;;4660:491;;;;4798:2;4786:9;4777:7;4773:23;4769:32;4766:2;;;4814:1;4811;4804:12;4766:2;4849:1;4866:53;4911:7;4891:9;4866:53;;;4856:63;;4828:97;4956:2;4974:53;5019:7;5010:6;4999:9;4995:22;4974:53;;;4964:63;;4935:98;5064:2;5082:53;5127:7;5118:6;5107:9;5103:22;5082:53;;;5072:63;;5043:98;4760:391;;;;;;5158:101;5225:28;5247:5;5225:28;;;5220:3;5213:41;5207:52;;;5266:110;5339:31;5364:5;5339:31;;5460:886;5686:22;;5599:4;5590:14;;;5720:61;5594:3;5686:22;5720:61;;;5619:174;5887:4;5880:5;5876:16;5870:23;5905:62;5961:4;5956:3;5952:14;5939:11;5905:62;;;5803:176;6063:4;6056:5;6052:16;6046:23;6081:62;6137:4;6132:3;6128:14;6115:11;6081:62;;;5989:166;6239:4;6232:5;6228:16;6222:23;6257:62;6313:4;6308:3;6304:14;6291:11;6257:62;;;6165:166;5572:774;;;;6470:181;6572:2;6557:18;;6586:55;6561:9;6614:6;6586:55;;6658:193;6766:2;6751:18;;6780:61;6755:9;6814:6;6780:61;;6858:306;7022:3;7007:19;;7037:117;7011:9;7127:6;7037:117;;7371:256;7433:2;7427:9;7459:17;;;7534:18;7519:34;;7555:22;;;7516:62;7513:2;;;7591:1;7588;7581:12;7513:2;7607;7600:22;7411:216;;-1:-1;7411:216;7634:254;;7773:18;7765:6;7762:30;7759:2;;;7805:1;7802;7795:12;7759:2;-1:-1;7878:4;7849;7826:17;;;;7845:9;7822:33;7868:15;;7696:192;7895:92;7968:13;7961:21;;7944:43;7994:79;8063:5;8046:27;8166:128;8246:42;8235:54;;8218:76;8388:145;8469:6;8464:3;8459;8446:30;-1:-1;8525:1;8507:16;;8500:27;8439:94"
+ "object": "0x60806040526004361061008d5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663041e63fe81146100925780632624b2d9146100c8578063494d9297146100dd57806366758d7b146100f25780637d33c6ee1461011f5780638ae6331614610134578063d980208814610161578063e306f77914610181575b600080fd5b34801561009e57600080fd5b506100b26100ad366004611152565b610196565b6040516100bf9190611245565b60405180910390f35b3480156100d457600080fd5b506100b26101ab565b3480156100e957600080fd5b506100b26102ff565b3480156100fe57600080fd5b5061011261010d3660046110e2565b610457565b6040516100bf9190611263565b34801561012b57600080fd5b506100b2610472565b34801561014057600080fd5b5061015461014f366004611152565b6106f2565b6040516100bf9190611237565b34801561016d57600080fd5b506100b261017c36600461111d565b6106ff565b34801561018d57600080fd5b506100b261070a565b60006101a3848484610710565b949350505050565b604080517f454950373132446f6d61696e28000000000000000000000000000000000000006020808301919091527f737472696e67206e616d652c0000000000000000000000000000000000000000602d8301527f737472696e672076657273696f6e2c000000000000000000000000000000000060398301527f6164647265737320766572696679696e67436f6e74726163740000000000000060488301527f2900000000000000000000000000000000000000000000000000000000000000606183015282516042818403018152606290920192839052815191929182918401908083835b602083106102cf57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610292565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902081565b604080517f454950373132446f6d61696e28000000000000000000000000000000000000006020808301919091527f737472696e67206e616d652c0000000000000000000000000000000000000000602d8301527f737472696e672076657273696f6e2c000000000000000000000000000000000060398301527f6164647265737320766572696679696e67436f6e74726163740000000000000060488301527f29000000000000000000000000000000000000000000000000000000000000006061830152825160428184030181526062909201928390528151600093918291908401908083835b6020831061042557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016103e8565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020905090565b61045f610e8e565b6104698383610725565b50815b92915050565b604080517f4f726465722800000000000000000000000000000000000000000000000000006020808301919091527f61646472657373206d616b6572416464726573732c000000000000000000000060268301527f616464726573732074616b6572416464726573732c0000000000000000000000603b8301527f6164647265737320666565526563697069656e74416464726573732c0000000060508301527f616464726573732073656e646572416464726573732c00000000000000000000606c8301527f75696e74323536206d616b65724173736574416d6f756e742c0000000000000060828301527f75696e743235362074616b65724173736574416d6f756e742c00000000000000609b8301527f75696e74323536206d616b65724665652c00000000000000000000000000000060b48301527f75696e743235362074616b65724665652c00000000000000000000000000000060c58301527f75696e743235362065787069726174696f6e54696d655365636f6e64732c000060d68301527f75696e743235362073616c742c0000000000000000000000000000000000000060f48301527f6279746573206d616b65724173736574446174612c00000000000000000000006101018301527f62797465732074616b65724173736574446174610000000000000000000000006101168301527f290000000000000000000000000000000000000000000000000000000000000061012a830152825161010b81840301815261012b909201928390528151600093918291908401908083836020831061042557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016103e8565b60006101a3848484610787565b600061046c826107dd565b60005481565b60006101a361071f85846107f0565b8461085f565b815181516107339190610876565b8252602080830151908201516107499190610876565b6020830152604080830151908201516107629190610876565b60408301526060808301519082015161077b9190610876565b60609092019190915250565b60008060008480151561079657fe5b86850991508115156107ab57600092506107d4565b6107ca6107bb83620f42406107f0565b6107c588876107f0565b61085f565b6103e88111935090505b50509392505050565b600061046c6107eb836108b5565b610d0e565b6000808315156108035760009150610858565b5082820282848281151561081357fe5b0414610854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90611253565b60405180910390fd5b8091505b5092915050565b600080828481151561086d57fe5b04949350505050565b600082820183811015610854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90611253565b604080517f4f726465722800000000000000000000000000000000000000000000000000006020808301919091527f61646472657373206d616b6572416464726573732c000000000000000000000060268301527f616464726573732074616b6572416464726573732c0000000000000000000000603b8301527f6164647265737320666565526563697069656e74416464726573732c0000000060508301527f616464726573732073656e646572416464726573732c00000000000000000000606c8301527f75696e74323536206d616b65724173736574416d6f756e742c0000000000000060828301527f75696e743235362074616b65724173736574416d6f756e742c00000000000000609b8301527f75696e74323536206d616b65724665652c00000000000000000000000000000060b48301527f75696e743235362074616b65724665652c00000000000000000000000000000060c58301527f75696e743235362065787069726174696f6e54696d655365636f6e64732c000060d68301527f75696e743235362073616c742c0000000000000000000000000000000000000060f48301527f6279746573206d616b65724173736574446174612c00000000000000000000006101018301527f62797465732074616b65724173736574446174610000000000000000000000006101168301527f290000000000000000000000000000000000000000000000000000000000000061012a830152825161010b81840301815261012b90920192839052815160009384938493849391929182918401908083835b60208310610b3d57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b00565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930181900381206101408b0151805191995095509093508392850191508083835b60208310610bd857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9b565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930181900381206101608b0151805191985095509093508392850191508083835b60208310610c7357805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c36565b5181516020939093036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909116921691909117905260405192018290039091207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0890180516101408b018051610160909c0180519a84529881529288526101a0822091529890525050509190525090919050565b60006040805190810160405280600281526020017f1901000000000000000000000000000000000000000000000000000000000000815250600054836040516020018084805190602001908083835b60208310610d9a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d5d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199092169116179052920194855250838101929092525060408051808403830181529281019081905282519293509182918401908083835b60208310610e3e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610e01565b5181516020939093036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199091169216919091179052604051920182900390912095945050505050565b608060405190810160405280600081526020016000815260200160008152602001600081525090565b6000610ec382356112e6565b9392505050565b6000601f82018313610edb57600080fd5b8135610eee610ee982611298565b611271565b91508082526020830160208301858383011115610f0a57600080fd5b610f158382846112ff565b50505092915050565b600060808284031215610f3057600080fd5b610f3a6080611271565b90506000610f4884846110d6565b8252506020610f59848483016110d6565b6020830152506040610f6d848285016110d6565b6040830152506060610f81848285016110d6565b60608301525092915050565b60006101808284031215610fa057600080fd5b610fab610180611271565b90506000610fb98484610eb7565b8252506020610fca84848301610eb7565b6020830152506040610fde84828501610eb7565b6040830152506060610ff284828501610eb7565b6060830152506080611006848285016110d6565b60808301525060a061101a848285016110d6565b60a08301525060c061102e848285016110d6565b60c08301525060e0611042848285016110d6565b60e083015250610100611057848285016110d6565b6101008301525061012061106d848285016110d6565b6101208301525061014082013567ffffffffffffffff81111561108f57600080fd5b61109b84828501610eca565b6101408301525061016082013567ffffffffffffffff8111156110bd57600080fd5b6110c984828501610eca565b6101608301525092915050565b6000610ec382356112e3565b60008061010083850312156110f657600080fd5b60006111028585610f1e565b925050608061111385828601610f1e565b9150509250929050565b60006020828403121561112f57600080fd5b813567ffffffffffffffff81111561114657600080fd5b6101a384828501610f8d565b60008060006060848603121561116757600080fd5b600061117386866110d6565b9350506020611184868287016110d6565b9250506040611195868287016110d6565b9150509250925092565b6111a8816112de565b82525050565b6111a8816112e3565b601081527f55494e543235365f4f564552464c4f5700000000000000000000000000000000602082015260400190565b805160808301906111f884826111ae565b50602082015161120b60208501826111ae565b50604082015161121e60408501826111ae565b50606082015161123160608501826111ae565b50505050565b6020810161046c828461119f565b6020810161046c82846111ae565b6020808252810161046c816111b7565b6080810161046c82846111e7565b60405181810167ffffffffffffffff8111828210171561129057600080fd5b604052919050565b600067ffffffffffffffff8211156112af57600080fd5b506020601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160190565b151590565b90565b73ffffffffffffffffffffffffffffffffffffffff1690565b828183375060009101525600a265627a7a72305820678f9838f15fee062e9427ddca3779eb0bbf5945c3cb0d5d147c6d79c913dddb6c6578706572696d656e74616cf50037",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x8D JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x41E63FE DUP2 EQ PUSH2 0x92 JUMPI DUP1 PUSH4 0x2624B2D9 EQ PUSH2 0xC8 JUMPI DUP1 PUSH4 0x494D9297 EQ PUSH2 0xDD JUMPI DUP1 PUSH4 0x66758D7B EQ PUSH2 0xF2 JUMPI DUP1 PUSH4 0x7D33C6EE EQ PUSH2 0x11F JUMPI DUP1 PUSH4 0x8AE63316 EQ PUSH2 0x134 JUMPI DUP1 PUSH4 0xD9802088 EQ PUSH2 0x161 JUMPI DUP1 PUSH4 0xE306F779 EQ PUSH2 0x181 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x9E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB2 PUSH2 0xAD CALLDATASIZE PUSH1 0x4 PUSH2 0x1152 JUMP JUMPDEST PUSH2 0x196 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xBF SWAP2 SWAP1 PUSH2 0x1245 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xD4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB2 PUSH2 0x1AB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB2 PUSH2 0x2FF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xFE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x112 PUSH2 0x10D CALLDATASIZE PUSH1 0x4 PUSH2 0x10E2 JUMP JUMPDEST PUSH2 0x457 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xBF SWAP2 SWAP1 PUSH2 0x1263 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x12B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB2 PUSH2 0x472 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x140 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x154 PUSH2 0x14F CALLDATASIZE PUSH1 0x4 PUSH2 0x1152 JUMP JUMPDEST PUSH2 0x6F2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xBF SWAP2 SWAP1 PUSH2 0x1237 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x16D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB2 PUSH2 0x17C CALLDATASIZE PUSH1 0x4 PUSH2 0x111D JUMP JUMPDEST PUSH2 0x6FF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x18D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB2 PUSH2 0x70A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A3 DUP5 DUP5 DUP5 PUSH2 0x710 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x454950373132446F6D61696E2800000000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x737472696E67206E616D652C0000000000000000000000000000000000000000 PUSH1 0x2D DUP4 ADD MSTORE PUSH32 0x737472696E672076657273696F6E2C0000000000000000000000000000000000 PUSH1 0x39 DUP4 ADD MSTORE PUSH32 0x6164647265737320766572696679696E67436F6E747261637400000000000000 PUSH1 0x48 DUP4 ADD MSTORE PUSH32 0x2900000000000000000000000000000000000000000000000000000000000000 PUSH1 0x61 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x42 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x62 SWAP1 SWAP3 ADD SWAP3 DUP4 SWAP1 MSTORE DUP2 MLOAD SWAP2 SWAP3 SWAP2 DUP3 SWAP2 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x2CF JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x292 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 DUP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x454950373132446F6D61696E2800000000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x737472696E67206E616D652C0000000000000000000000000000000000000000 PUSH1 0x2D DUP4 ADD MSTORE PUSH32 0x737472696E672076657273696F6E2C0000000000000000000000000000000000 PUSH1 0x39 DUP4 ADD MSTORE PUSH32 0x6164647265737320766572696679696E67436F6E747261637400000000000000 PUSH1 0x48 DUP4 ADD MSTORE PUSH32 0x2900000000000000000000000000000000000000000000000000000000000000 PUSH1 0x61 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x42 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x62 SWAP1 SWAP3 ADD SWAP3 DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH1 0x0 SWAP4 SWAP2 DUP3 SWAP2 SWAP1 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x425 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x3E8 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x45F PUSH2 0xE8E JUMP JUMPDEST PUSH2 0x469 DUP4 DUP4 PUSH2 0x725 JUMP JUMPDEST POP DUP2 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x4F72646572280000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x61646472657373206D616B6572416464726573732C0000000000000000000000 PUSH1 0x26 DUP4 ADD MSTORE PUSH32 0x616464726573732074616B6572416464726573732C0000000000000000000000 PUSH1 0x3B DUP4 ADD MSTORE PUSH32 0x6164647265737320666565526563697069656E74416464726573732C00000000 PUSH1 0x50 DUP4 ADD MSTORE PUSH32 0x616464726573732073656E646572416464726573732C00000000000000000000 PUSH1 0x6C DUP4 ADD MSTORE PUSH32 0x75696E74323536206D616B65724173736574416D6F756E742C00000000000000 PUSH1 0x82 DUP4 ADD MSTORE PUSH32 0x75696E743235362074616B65724173736574416D6F756E742C00000000000000 PUSH1 0x9B DUP4 ADD MSTORE PUSH32 0x75696E74323536206D616B65724665652C000000000000000000000000000000 PUSH1 0xB4 DUP4 ADD MSTORE PUSH32 0x75696E743235362074616B65724665652C000000000000000000000000000000 PUSH1 0xC5 DUP4 ADD MSTORE PUSH32 0x75696E743235362065787069726174696F6E54696D655365636F6E64732C0000 PUSH1 0xD6 DUP4 ADD MSTORE PUSH32 0x75696E743235362073616C742C00000000000000000000000000000000000000 PUSH1 0xF4 DUP4 ADD MSTORE PUSH32 0x6279746573206D616B65724173736574446174612C0000000000000000000000 PUSH2 0x101 DUP4 ADD MSTORE PUSH32 0x62797465732074616B6572417373657444617461000000000000000000000000 PUSH2 0x116 DUP4 ADD MSTORE PUSH32 0x2900000000000000000000000000000000000000000000000000000000000000 PUSH2 0x12A DUP4 ADD MSTORE DUP3 MLOAD PUSH2 0x10B DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH2 0x12B SWAP1 SWAP3 ADD SWAP3 DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH1 0x0 SWAP4 SWAP2 DUP3 SWAP2 SWAP1 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x20 DUP4 LT PUSH2 0x425 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x3E8 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A3 DUP5 DUP5 DUP5 PUSH2 0x787 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x46C DUP3 PUSH2 0x7DD JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A3 PUSH2 0x71F DUP6 DUP5 PUSH2 0x7F0 JUMP JUMPDEST DUP5 PUSH2 0x85F JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD PUSH2 0x733 SWAP2 SWAP1 PUSH2 0x876 JUMP JUMPDEST DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MLOAD PUSH2 0x749 SWAP2 SWAP1 PUSH2 0x876 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MLOAD PUSH2 0x762 SWAP2 SWAP1 PUSH2 0x876 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MLOAD PUSH2 0x77B SWAP2 SWAP1 PUSH2 0x876 JUMP JUMPDEST PUSH1 0x60 SWAP1 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP5 DUP1 ISZERO ISZERO PUSH2 0x796 JUMPI INVALID JUMPDEST DUP7 DUP6 MULMOD SWAP2 POP DUP2 ISZERO ISZERO PUSH2 0x7AB JUMPI PUSH1 0x0 SWAP3 POP PUSH2 0x7D4 JUMP JUMPDEST PUSH2 0x7CA PUSH2 0x7BB DUP4 PUSH3 0xF4240 PUSH2 0x7F0 JUMP JUMPDEST PUSH2 0x7C5 DUP9 DUP8 PUSH2 0x7F0 JUMP JUMPDEST PUSH2 0x85F JUMP JUMPDEST PUSH2 0x3E8 DUP2 GT SWAP4 POP SWAP1 POP JUMPDEST POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x46C PUSH2 0x7EB DUP4 PUSH2 0x8B5 JUMP JUMPDEST PUSH2 0xD0E JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 ISZERO ISZERO PUSH2 0x803 JUMPI PUSH1 0x0 SWAP2 POP PUSH2 0x858 JUMP JUMPDEST POP DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 ISZERO ISZERO PUSH2 0x813 JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x854 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x84B SWAP1 PUSH2 0x1253 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 SWAP2 POP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 DUP5 DUP2 ISZERO ISZERO PUSH2 0x86D JUMPI INVALID JUMPDEST DIV SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x854 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x84B SWAP1 PUSH2 0x1253 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x4F72646572280000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x61646472657373206D616B6572416464726573732C0000000000000000000000 PUSH1 0x26 DUP4 ADD MSTORE PUSH32 0x616464726573732074616B6572416464726573732C0000000000000000000000 PUSH1 0x3B DUP4 ADD MSTORE PUSH32 0x6164647265737320666565526563697069656E74416464726573732C00000000 PUSH1 0x50 DUP4 ADD MSTORE PUSH32 0x616464726573732073656E646572416464726573732C00000000000000000000 PUSH1 0x6C DUP4 ADD MSTORE PUSH32 0x75696E74323536206D616B65724173736574416D6F756E742C00000000000000 PUSH1 0x82 DUP4 ADD MSTORE PUSH32 0x75696E743235362074616B65724173736574416D6F756E742C00000000000000 PUSH1 0x9B DUP4 ADD MSTORE PUSH32 0x75696E74323536206D616B65724665652C000000000000000000000000000000 PUSH1 0xB4 DUP4 ADD MSTORE PUSH32 0x75696E743235362074616B65724665652C000000000000000000000000000000 PUSH1 0xC5 DUP4 ADD MSTORE PUSH32 0x75696E743235362065787069726174696F6E54696D655365636F6E64732C0000 PUSH1 0xD6 DUP4 ADD MSTORE PUSH32 0x75696E743235362073616C742C00000000000000000000000000000000000000 PUSH1 0xF4 DUP4 ADD MSTORE PUSH32 0x6279746573206D616B65724173736574446174612C0000000000000000000000 PUSH2 0x101 DUP4 ADD MSTORE PUSH32 0x62797465732074616B6572417373657444617461000000000000000000000000 PUSH2 0x116 DUP4 ADD MSTORE PUSH32 0x2900000000000000000000000000000000000000000000000000000000000000 PUSH2 0x12A DUP4 ADD MSTORE DUP3 MLOAD PUSH2 0x10B DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH2 0x12B SWAP1 SWAP3 ADD SWAP3 DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH1 0x0 SWAP4 DUP5 SWAP4 DUP5 SWAP4 DUP5 SWAP4 SWAP2 SWAP3 SWAP2 DUP3 SWAP2 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xB3D JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xB00 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP4 ADD DUP2 SWAP1 SUB DUP2 KECCAK256 PUSH2 0x140 DUP12 ADD MLOAD DUP1 MLOAD SWAP2 SWAP10 POP SWAP6 POP SWAP1 SWAP4 POP DUP4 SWAP3 DUP6 ADD SWAP2 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xBD8 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xB9B JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP4 ADD DUP2 SWAP1 SUB DUP2 KECCAK256 PUSH2 0x160 DUP12 ADD MLOAD DUP1 MLOAD SWAP2 SWAP9 POP SWAP6 POP SWAP1 SWAP4 POP DUP4 SWAP3 DUP6 ADD SWAP2 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xC73 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xC36 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 SWAP1 SWAP4 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP2 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP3 ADD DUP3 SWAP1 SUB SWAP1 SWAP2 KECCAK256 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP10 ADD DUP1 MLOAD PUSH2 0x140 DUP12 ADD DUP1 MLOAD PUSH2 0x160 SWAP1 SWAP13 ADD DUP1 MLOAD SWAP11 DUP5 MSTORE SWAP9 DUP2 MSTORE SWAP3 DUP9 MSTORE PUSH2 0x1A0 DUP3 KECCAK256 SWAP2 MSTORE SWAP9 SWAP1 MSTORE POP POP POP SWAP2 SWAP1 MSTORE POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x0 SLOAD DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP5 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xD9A JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xD5D JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP5 DUP6 MSTORE POP DUP4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP5 SUB DUP4 ADD DUP2 MSTORE SWAP3 DUP2 ADD SWAP1 DUP2 SWAP1 MSTORE DUP3 MLOAD SWAP3 SWAP4 POP SWAP2 DUP3 SWAP2 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xE3E JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xE01 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 SWAP1 SWAP4 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP2 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP3 ADD DUP3 SWAP1 SUB SWAP1 SWAP2 KECCAK256 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xEC3 DUP3 CALLDATALOAD PUSH2 0x12E6 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0xEDB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xEEE PUSH2 0xEE9 DUP3 PUSH2 0x1298 JUMP JUMPDEST PUSH2 0x1271 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP4 ADD DUP6 DUP4 DUP4 ADD GT ISZERO PUSH2 0xF0A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xF15 DUP4 DUP3 DUP5 PUSH2 0x12FF JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xF30 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xF3A PUSH1 0x80 PUSH2 0x1271 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xF48 DUP5 DUP5 PUSH2 0x10D6 JUMP JUMPDEST DUP3 MSTORE POP PUSH1 0x20 PUSH2 0xF59 DUP5 DUP5 DUP4 ADD PUSH2 0x10D6 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP PUSH1 0x40 PUSH2 0xF6D DUP5 DUP3 DUP6 ADD PUSH2 0x10D6 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 PUSH2 0xF81 DUP5 DUP3 DUP6 ADD PUSH2 0x10D6 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x180 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xFA0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xFAB PUSH2 0x180 PUSH2 0x1271 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xFB9 DUP5 DUP5 PUSH2 0xEB7 JUMP JUMPDEST DUP3 MSTORE POP PUSH1 0x20 PUSH2 0xFCA DUP5 DUP5 DUP4 ADD PUSH2 0xEB7 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP PUSH1 0x40 PUSH2 0xFDE DUP5 DUP3 DUP6 ADD PUSH2 0xEB7 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 PUSH2 0xFF2 DUP5 DUP3 DUP6 ADD PUSH2 0xEB7 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE POP PUSH1 0x80 PUSH2 0x1006 DUP5 DUP3 DUP6 ADD PUSH2 0x10D6 JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE POP PUSH1 0xA0 PUSH2 0x101A DUP5 DUP3 DUP6 ADD PUSH2 0x10D6 JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE POP PUSH1 0xC0 PUSH2 0x102E DUP5 DUP3 DUP6 ADD PUSH2 0x10D6 JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE POP PUSH1 0xE0 PUSH2 0x1042 DUP5 DUP3 DUP6 ADD PUSH2 0x10D6 JUMP JUMPDEST PUSH1 0xE0 DUP4 ADD MSTORE POP PUSH2 0x100 PUSH2 0x1057 DUP5 DUP3 DUP6 ADD PUSH2 0x10D6 JUMP JUMPDEST PUSH2 0x100 DUP4 ADD MSTORE POP PUSH2 0x120 PUSH2 0x106D DUP5 DUP3 DUP6 ADD PUSH2 0x10D6 JUMP JUMPDEST PUSH2 0x120 DUP4 ADD MSTORE POP PUSH2 0x140 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x108F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x109B DUP5 DUP3 DUP6 ADD PUSH2 0xECA JUMP JUMPDEST PUSH2 0x140 DUP4 ADD MSTORE POP PUSH2 0x160 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x10BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x10C9 DUP5 DUP3 DUP6 ADD PUSH2 0xECA JUMP JUMPDEST PUSH2 0x160 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xEC3 DUP3 CALLDATALOAD PUSH2 0x12E3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x100 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x10F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1102 DUP6 DUP6 PUSH2 0xF1E JUMP JUMPDEST SWAP3 POP POP PUSH1 0x80 PUSH2 0x1113 DUP6 DUP3 DUP7 ADD PUSH2 0xF1E JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x112F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1146 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1A3 DUP5 DUP3 DUP6 ADD PUSH2 0xF8D JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1167 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1173 DUP7 DUP7 PUSH2 0x10D6 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x1184 DUP7 DUP3 DUP8 ADD PUSH2 0x10D6 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x1195 DUP7 DUP3 DUP8 ADD PUSH2 0x10D6 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH2 0x11A8 DUP2 PUSH2 0x12DE JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x11A8 DUP2 PUSH2 0x12E3 JUMP JUMPDEST PUSH1 0x10 DUP2 MSTORE PUSH32 0x55494E543235365F4F564552464C4F5700000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x80 DUP4 ADD SWAP1 PUSH2 0x11F8 DUP5 DUP3 PUSH2 0x11AE JUMP JUMPDEST POP PUSH1 0x20 DUP3 ADD MLOAD PUSH2 0x120B PUSH1 0x20 DUP6 ADD DUP3 PUSH2 0x11AE JUMP JUMPDEST POP PUSH1 0x40 DUP3 ADD MLOAD PUSH2 0x121E PUSH1 0x40 DUP6 ADD DUP3 PUSH2 0x11AE JUMP JUMPDEST POP PUSH1 0x60 DUP3 ADD MLOAD PUSH2 0x1231 PUSH1 0x60 DUP6 ADD DUP3 PUSH2 0x11AE JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x46C DUP3 DUP5 PUSH2 0x119F JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x46C DUP3 DUP5 PUSH2 0x11AE JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x46C DUP2 PUSH2 0x11B7 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x46C DUP3 DUP5 PUSH2 0x11E7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x1290 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x12AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x1F SWAP2 SWAP1 SWAP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND ADD SWAP1 JUMP JUMPDEST ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP STOP LOG2 PUSH6 0x627A7A723058 KECCAK256 PUSH8 0x8F9838F15FEE062E SWAP5 0x27 0xdd 0xca CALLDATACOPY PUSH26 0xEB0BBF5945C3CB0D5D147C6D79C913DDDB6C6578706572696D65 PUSH15 0x74616CF50037000000000000000000 ",
+ "sourceMap": "802:1535:4:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;876:347;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;876:347:4;;;;;;;;;;;;;;;;;;;;;;;;;970:221:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;970:221:0;;;;1897:157:4;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1897:157:4;;;;2060:275;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2060:275:4;;;;;;;;;;;;;;;;;1755:136;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1755:136:4;;;;1229:324;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1229:324:4;;;;;;;;;;;;;;;;;1559:190;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1559:190:4;;;;;;;;;1298:33:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1298:33:0;;;;876:347:4;1039:21;1092:94;1122:9;1145:11;1170:6;1092:16;:94::i;:::-;1076:110;876:347;-1:-1:-1;;;;876:347:4:o;970:221:0:-;1042:148;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;1042:148:0;;;;;;;;1032:159;;1042:148;;;;;1032:159;;;;1042:148;1032:159;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1032:159:0;;;;;;;;;;;;;;;;970:221;:::o;1897:157:4:-;1042:148:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;1042:148:0;;;;;;;;1032:159;;1982:7:4;;1042:148:0;;;1032:159;;;;;1042:148;1032:159;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1032:159:0;;;;;;;;;;;;;;;;2005:42:4;;1897:157;:::o;2060:275::-;2210:11;;:::i;:::-;2244:51;2259:16;2277:17;2244:14;:51::i;:::-;-1:-1:-1;2312:16:4;2060:275;;;;;:::o;1755:136::-;778:457:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;778:457:3;;;;;;;;768:468;;1830:7:4;;778:457:3;;;768:468;;;;;778:457;768:468;66:2:-1;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;1229:324:4;1391:12;1429:93;1458:9;1481:11;1506:6;1429:15;:93::i;1559:190::-;1652:17;1697:19;1710:5;1697:12;:19::i;1298:33:0:-;;;;:::o;937:326:2:-;1091:21;1144:82;1165:26;1173:9;1184:6;1165:7;:26::i;:::-;1205:11;1144:7;:82::i;1772:648:1:-;1965:39;;2006:40;;1957:90;;1965:39;1957:7;:90::i;:::-;1915:132;;2107:39;;;;;2148:40;;;;2099:90;;2107:39;2099:7;:90::i;:::-;2057:39;;;:132;2239:29;;;;;2270:30;;;;2231:70;;2239:29;2231:7;:70::i;:::-;2199:29;;;:102;2351:29;;;;;2382:30;;;;2343:70;;2351:29;2343:7;:70::i;:::-;2311:29;;;;:102;;;;-1:-1:-1;1772:648:1:o;1502:555:2:-;1655:12;1683:17;1840:33;1729:11;1703:38;;;;;;;1718:9;1710:6;1703:38;1683:58;-1:-1:-1;1755:14:2;;1751:79;;;1792:5;1785:12;;;;1751:79;1876:98;1897:27;1905:9;1916:7;1897;:27::i;:::-;1938:26;1946:9;1957:6;1938:7;:26::i;:::-;1876:7;:98::i;:::-;2022:4;1994:32;;;-1:-1:-1;1840:134:2;-1:-1:-1;1502:555:2;;;;;;;;:::o;4212:202:3:-;4301:17;4346:35;4364:16;4374:5;4364:9;:16::i;:::-;4346:17;:35::i;50:288:5:-;136:7;;163:6;;159:45;;;192:1;185:8;;;;159:45;-1:-1:-1;225:5:5;;;229:1;225;:5;261;;;;;;;;:10;240:73;;;;;;;;;;;;;;;;;;;;;;330:1;323:8;;50:288;;;;;;:::o;344:151::-;430:7;453:9;469:1;465;:5;;;;;;;;;344:151;-1:-1:-1;;;;344:151:5:o;714:230::-;800:7;835:5;;;871:6;;;;850:69;;;;;;;;;;;;;4554:1721:3;778:457;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;778:457:3;;;;;;;;768:468;;4640:14;;;;;;;;778:457;;;;;768:468;;;;778:457;768:468;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;365:33;;768:468:3;;;;;;;;;;;4764:20;;;;4754:31;;768:468;;-1:-1:-1;4764:20:3;-1:-1:-1;768:468:3;;-1:-1:-1;768:468:3;;4754:31;;;-1:-1:-1;4754:31:3;768:468;4754:31;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;365:33;;4754:31:3;;;;;;;;;;;4834:20;;;;4824:31;;4754;;-1:-1:-1;4834:20:3;-1:-1:-1;4754:31:3;;-1:-1:-1;4754:31:3;;4824;;;-1:-1:-1;4824:31:3;4754;4824;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;;;;365:33;;4824:31:3;;;;;;;;;;5586:15;;;5580:22;;5645:3;5634:15;;5628:22;;5693:3;5682:15;;;5676:22;;5812:35;;;5860:43;;;5916;;;6008:3;5982:30;;6120;;6163;;;-1:-1:-1;;;6206:30:3;;;-1:-1:-1;5982:30:3;;4554:1721;-1:-1:-1;4554:1721:3:o;1816:205:0:-;1910:7;1967:13;;;;;;;;;;;;;;;;;;1982:18;;2002:10;1950:63;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;365:33;;1950:63:0;;;;;-1:-1:-1;1950:63:0;;;;;;;-1:-1:-1;1950:63:0;;;26:21:-1;;;22:32;;6:49;;1950:63:0;;;;;;;1940:74;;1950:63;;-1:-1:-1;1950:63:0;;;1940:74;;;;1950:63;1940:74;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;;;;365:33;;1940:74:0;;;;;;;;;;;;-1:-1:-1;;;;;1816:205:0:o;802:1535:4:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5:118:-1:-;;72:46;110:6;97:20;72:46;;;63:55;57:66;-1:-1;;;57:66;131:432;;221:4;209:17;;205:27;-1:-1;195:2;;246:1;243;236:12;195:2;283:6;270:20;305:60;320:44;357:6;320:44;;;305:60;;;296:69;;385:6;378:5;371:21;421:4;413:6;409:17;454:4;447:5;443:16;489:3;480:6;475:3;471:16;468:25;465:2;;;506:1;503;496:12;465:2;516:41;550:6;545:3;540;516:41;;;188:375;;;;;;;;611:809;;728:4;716:9;711:3;707:19;703:30;700:2;;;746:1;743;736:12;700:2;764:20;779:4;764:20;;;755:29;-1:-1;852:1;883:49;928:3;908:9;883:49;;;859:74;;-1:-1;1012:2;1045:49;1090:3;1066:22;;;1045:49;;;1038:4;1031:5;1027:16;1020:75;954:152;1164:2;1197:49;1242:3;1233:6;1222:9;1218:22;1197:49;;;1190:4;1183:5;1179:16;1172:75;1116:142;1316:2;1349:49;1394:3;1385:6;1374:9;1370:22;1349:49;;;1342:4;1335:5;1331:16;1324:75;1268:142;694:726;;;;;1455:2208;;1566:5;1554:9;1549:3;1545:19;1541:31;1538:2;;;1585:1;1582;1575:12;1538:2;1603:21;1618:5;1603:21;;;1594:30;-1:-1;1682:1;1713:49;1758:3;1738:9;1713:49;;;1689:74;;-1:-1;1832:2;1865:49;1910:3;1886:22;;;1865:49;;;1858:4;1851:5;1847:16;1840:75;1784:142;1991:2;2024:49;2069:3;2060:6;2049:9;2045:22;2024:49;;;2017:4;2010:5;2006:16;1999:75;1936:149;2144:2;2177:49;2222:3;2213:6;2202:9;2198:22;2177:49;;;2170:4;2163:5;2159:16;2152:75;2095:143;2300:3;2334:49;2379:3;2370:6;2359:9;2355:22;2334:49;;;2327:4;2320:5;2316:16;2309:75;2248:147;2457:3;2491:49;2536:3;2527:6;2516:9;2512:22;2491:49;;;2484:4;2477:5;2473:16;2466:75;2405:147;2606:3;2640:49;2685:3;2676:6;2665:9;2661:22;2640:49;;;2633:4;2626:5;2622:16;2615:75;2562:139;2755:3;2789:49;2834:3;2825:6;2814:9;2810:22;2789:49;;;2782:4;2775:5;2771:16;2764:75;2711:139;2917:3;2952:49;2997:3;2988:6;2977:9;2973:22;2952:49;;;2944:5;2937;2933:17;2926:76;2860:153;3063:3;3098:49;3143:3;3134:6;3123:9;3119:22;3098:49;;;3090:5;3083;3079:17;3072:76;3023:136;3247:3;3236:9;3232:19;3219:33;3272:18;3264:6;3261:30;3258:2;;;3304:1;3301;3294:12;3258:2;3340:54;3390:3;3381:6;3370:9;3366:22;3340:54;;;3332:5;3325;3321:17;3314:81;3169:237;3494:3;3483:9;3479:19;3466:33;3519:18;3511:6;3508:30;3505:2;;;3551:1;3548;3541:12;3505:2;3587:54;3637:3;3628:6;3617:9;3613:22;3587:54;;;3579:5;3572;3568:17;3561:81;3416:237;1532:2131;;;;;3670:118;;3737:46;3775:6;3762:20;3737:46;;3795:480;;;3972:3;3960:9;3951:7;3947:23;3943:33;3940:2;;;3989:1;3986;3979:12;3940:2;4024:1;4041:81;4114:7;4094:9;4041:81;;;4031:91;;4003:125;4159:3;4178:81;4251:7;4242:6;4231:9;4227:22;4178:81;;;4168:91;;4138:127;3934:341;;;;;;4282:371;;4408:2;4396:9;4387:7;4383:23;4379:32;4376:2;;;4424:1;4421;4414:12;4376:2;4459:31;;4510:18;4499:30;;4496:2;;;4542:1;4539;4532:12;4496:2;4562:75;4629:7;4620:6;4609:9;4605:22;4562:75;;4660:491;;;;4798:2;4786:9;4777:7;4773:23;4769:32;4766:2;;;4814:1;4811;4804:12;4766:2;4849:1;4866:53;4911:7;4891:9;4866:53;;;4856:63;;4828:97;4956:2;4974:53;5019:7;5010:6;4999:9;4995:22;4974:53;;;4964:63;;4935:98;5064:2;5082:53;5127:7;5118:6;5107:9;5103:22;5082:53;;;5072:63;;5043:98;4760:391;;;;;;5158:101;5225:28;5247:5;5225:28;;;5220:3;5213:41;5207:52;;;5266:110;5339:31;5364:5;5339:31;;5384:296;5539:2;5527:15;;5576:66;5571:2;5562:12;;5555:88;5671:2;5662:12;;5520:160;5765:886;5991:22;;5904:4;5895:14;;;6025:61;5899:3;5991:22;6025:61;;;5924:174;6192:4;6185:5;6181:16;6175:23;6210:62;6266:4;6261:3;6257:14;6244:11;6210:62;;;6108:176;6368:4;6361:5;6357:16;6351:23;6386:62;6442:4;6437:3;6433:14;6420:11;6386:62;;;6294:166;6544:4;6537:5;6533:16;6527:23;6562:62;6618:4;6613:3;6609:14;6596:11;6562:62;;;6470:166;5877:774;;;;6775:181;6877:2;6862:18;;6891:55;6866:9;6919:6;6891:55;;6963:193;7071:2;7056:18;;7085:61;7060:9;7119:6;7085:61;;7163:387;7344:2;7358:47;;;7329:18;;7419:121;7329:18;7419:121;;7557:306;7721:3;7706:19;;7736:117;7710:9;7826:6;7736:117;;8070:256;8132:2;8126:9;8158:17;;;8233:18;8218:34;;8254:22;;;8215:62;8212:2;;;8290:1;8287;8280:12;8212:2;8306;8299:22;8110:216;;-1:-1;8110:216;8333:254;;8472:18;8464:6;8461:30;8458:2;;;8504:1;8501;8494:12;8458:2;-1:-1;8577:4;8548;8525:17;;;;8544:9;8521:33;8567:15;;8395:192;8594:92;8667:13;8660:21;;8643:43;8693:79;8762:5;8745:27;8865:128;8945:42;8934:54;;8917:76;9087:145;9168:6;9163:3;9158;9145:30;-1:-1;9224:1;9206:16;;9199:27;9138:94"
}
}
},
@@ -296,14 +296,14 @@
}
},
"sourceCodes": {
- "2.0.0/protocol/Exchange/libs/LibEIP712.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.24;\n\ncontract LibEIP712 {\n // EIP191 header for EIP712 prefix\n string constant EIP191_HEADER = \"\\x19\\x01\";\n\n // EIP712 Domain Name value\n string constant EIP712_DOMAIN_NAME = \"0x Protocol\";\n\n // EIP712 Domain Version value\n string constant EIP712_DOMAIN_VERSION = \"2\";\n\n // Hash of the EIP712 Domain Separator Schema\n bytes32 public constant EIP712_DOMAIN_SEPARATOR_SCHEMA_HASH = keccak256(abi.encodePacked(\n \"EIP712Domain(\",\n \"string name,\",\n \"string version,\",\n \"address verifyingContract\",\n \")\"\n ));\n\n // Hash of the EIP712 Domain Separator data\n bytes32 public EIP712_DOMAIN_HASH;\n\n constructor ()\n public\n {\n EIP712_DOMAIN_HASH = keccak256(abi.encode(\n EIP712_DOMAIN_SEPARATOR_SCHEMA_HASH,\n keccak256(bytes(EIP712_DOMAIN_NAME)),\n keccak256(bytes(EIP712_DOMAIN_VERSION)),\n address(this)\n ));\n }\n\n /// @dev Calculates EIP712 encoding for a hash struct in this EIP712 Domain.\n /// @param hashStruct The EIP712 hash struct.\n /// @return EIP712 hash applied to this EIP712 Domain.\n function hashEIP712Message(bytes32 hashStruct)\n internal\n view\n returns (bytes32)\n {\n return keccak256(abi.encodePacked(EIP191_HEADER, EIP712_DOMAIN_HASH, hashStruct));\n }\n}\n",
- "2.0.0/protocol/Exchange/libs/LibFillResults.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.24;\n\nimport \"../../../utils/SafeMath/SafeMath.sol\";\n\ncontract LibFillResults is\n SafeMath\n{\n\n struct FillResults {\n uint256 makerAssetFilledAmount; // Total amount of makerAsset(s) filled.\n uint256 takerAssetFilledAmount; // Total amount of takerAsset(s) filled.\n uint256 makerFeePaid; // Total amount of ZRX paid by maker(s) to feeRecipient(s).\n uint256 takerFeePaid; // Total amount of ZRX paid by taker to feeRecipients(s).\n }\n\n struct MatchedFillResults {\n FillResults left; // Amounts filled and fees paid of left order.\n FillResults right; // Amounts filled and fees paid of right order.\n uint256 leftMakerAssetSpreadAmount; // Spread between price of left and right order, denominated in the left order's makerAsset, paid to taker.\n }\n\n /// @dev Adds properties of both FillResults instances.\n /// Modifies the first FillResults instance specified.\n /// @param totalFillResults Fill results instance that will be added onto.\n /// @param singleFillResults Fill results instance that will be added to totalFillResults.\n function addFillResults(FillResults memory totalFillResults, FillResults memory singleFillResults)\n internal\n pure\n {\n totalFillResults.makerAssetFilledAmount = safeAdd(totalFillResults.makerAssetFilledAmount, singleFillResults.makerAssetFilledAmount);\n totalFillResults.takerAssetFilledAmount = safeAdd(totalFillResults.takerAssetFilledAmount, singleFillResults.takerAssetFilledAmount);\n totalFillResults.makerFeePaid = safeAdd(totalFillResults.makerFeePaid, singleFillResults.makerFeePaid);\n totalFillResults.takerFeePaid = safeAdd(totalFillResults.takerFeePaid, singleFillResults.takerFeePaid);\n }\n}\n",
- "2.0.0/protocol/Exchange/libs/LibMath.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.24;\n\nimport \"../../../utils/SafeMath/SafeMath.sol\";\n\ncontract LibMath is\n SafeMath\n{\n\n /// @dev Calculates partial value given a numerator and denominator.\n /// @param numerator Numerator.\n /// @param denominator Denominator.\n /// @param target Value to calculate partial of.\n /// @return Partial value of target.\n function getPartialAmount(\n uint256 numerator,\n uint256 denominator,\n uint256 target)\n internal\n pure\n returns (uint256 partialAmount)\n {\n partialAmount = safeDiv(\n safeMul(numerator, target),\n denominator\n );\n return partialAmount;\n }\n\n /// @dev Checks if rounding error > 0.1%.\n /// @param numerator Numerator.\n /// @param denominator Denominator.\n /// @param target Value to multiply with numerator/denominator.\n /// @return Rounding error is present.\n function isRoundingError(\n uint256 numerator,\n uint256 denominator,\n uint256 target)\n internal\n pure\n returns (bool isError)\n {\n uint256 remainder = mulmod(target, numerator, denominator);\n if (remainder == 0) {\n return false; // No rounding error.\n }\n\n uint256 errPercentageTimes1000000 = safeDiv(\n safeMul(remainder, 1000000),\n safeMul(numerator, target)\n );\n isError = errPercentageTimes1000000 > 1000;\n return isError;\n }\n}\n",
- "2.0.0/protocol/Exchange/libs/LibOrder.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.24;\n\nimport \"./LibEIP712.sol\";\n\ncontract LibOrder is\n LibEIP712\n{\n\n // Hash for the EIP712 Order Schema\n bytes32 constant EIP712_ORDER_SCHEMA_HASH = keccak256(abi.encodePacked(\n \"Order(\",\n \"address makerAddress,\",\n \"address takerAddress,\",\n \"address feeRecipientAddress,\",\n \"address senderAddress,\",\n \"uint256 makerAssetAmount,\",\n \"uint256 takerAssetAmount,\",\n \"uint256 makerFee,\",\n \"uint256 takerFee,\",\n \"uint256 expirationTimeSeconds,\",\n \"uint256 salt,\",\n \"bytes makerAssetData,\",\n \"bytes takerAssetData\",\n \")\"\n ));\n\n // A valid order remains fillable until it is expired, fully filled, or cancelled.\n // An order's state is unaffected by external factors, like account balances.\n enum OrderStatus {\n INVALID, // Default value\n INVALID_MAKER_ASSET_AMOUNT, // Order does not have a valid maker asset amount\n INVALID_TAKER_ASSET_AMOUNT, // Order does not have a valid taker asset amount\n FILLABLE, // Order is fillable\n EXPIRED, // Order has already expired\n FULLY_FILLED, // Order is fully filled\n CANCELLED // Order has been cancelled\n }\n\n struct Order {\n address makerAddress; // Address that created the order. \n address takerAddress; // Address that is allowed to fill the order. If set to 0, any address is allowed to fill the order. \n address feeRecipientAddress; // Address that will recieve fees when order is filled. \n address senderAddress; // Address that is allowed to call Exchange contract methods that affect this order. If set to 0, any address is allowed to call these methods.\n uint256 makerAssetAmount; // Amount of makerAsset being offered by maker. Must be greater than 0. \n uint256 takerAssetAmount; // Amount of takerAsset being bid on by maker. Must be greater than 0. \n uint256 makerFee; // Amount of ZRX paid to feeRecipient by maker when order is filled. If set to 0, no transfer of ZRX from maker to feeRecipient will be attempted.\n uint256 takerFee; // Amount of ZRX paid to feeRecipient by taker when order is filled. If set to 0, no transfer of ZRX from taker to feeRecipient will be attempted.\n uint256 expirationTimeSeconds; // Timestamp in seconds at which order expires. \n uint256 salt; // Arbitrary number to facilitate uniqueness of the order's hash. \n bytes makerAssetData; // Encoded data that can be decoded by a specified proxy contract when transferring makerAsset. The last byte references the id of this proxy.\n bytes takerAssetData; // Encoded data that can be decoded by a specified proxy contract when transferring takerAsset. The last byte references the id of this proxy.\n }\n\n struct OrderInfo {\n uint8 orderStatus; // Status that describes order's validity and fillability.\n bytes32 orderHash; // EIP712 hash of the order (see LibOrder.getOrderHash).\n uint256 orderTakerAssetFilledAmount; // Amount of order that has already been filled.\n }\n\n /// @dev Calculates Keccak-256 hash of the order.\n /// @param order The order structure.\n /// @return Keccak-256 EIP712 hash of the order.\n function getOrderHash(Order memory order)\n internal\n view\n returns (bytes32 orderHash)\n {\n orderHash = hashEIP712Message(hashOrder(order));\n return orderHash;\n }\n\n /// @dev Calculates EIP712 hash of the order.\n /// @param order The order structure.\n /// @return EIP712 hash of the order.\n function hashOrder(Order memory order)\n internal\n pure\n returns (bytes32 result)\n {\n bytes32 schemaHash = EIP712_ORDER_SCHEMA_HASH;\n bytes32 makerAssetDataHash = keccak256(order.makerAssetData);\n bytes32 takerAssetDataHash = keccak256(order.takerAssetData);\n // Assembly for more efficiently computing:\n // keccak256(abi.encode(\n // order.makerAddress,\n // order.takerAddress,\n // order.feeRecipientAddress,\n // order.senderAddress,\n // order.makerAssetAmount,\n // order.takerAssetAmount,\n // order.makerFee,\n // order.takerFee,\n // order.expirationTimeSeconds,\n // order.salt,\n // keccak256(order.makerAssetData),\n // keccak256(order.takerAssetData)\n // ));\n assembly {\n // Backup\n let temp1 := mload(sub(order, 32))\n let temp2 := mload(add(order, 320))\n let temp3 := mload(add(order, 352))\n \n // Hash in place\n mstore(sub(order, 32), schemaHash)\n mstore(add(order, 320), makerAssetDataHash)\n mstore(add(order, 352), takerAssetDataHash)\n result := keccak256(sub(order, 32), 416)\n \n // Restore\n mstore(sub(order, 32), temp1)\n mstore(add(order, 320), temp2)\n mstore(add(order, 352), temp3)\n }\n return result;\n }\n}\n",
- "2.0.0/test/TestLibs/TestLibs.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../../protocol/Exchange/libs/LibMath.sol\";\nimport \"../../protocol/Exchange/libs/LibOrder.sol\";\nimport \"../../protocol/Exchange/libs/LibFillResults.sol\";\n\ncontract TestLibs is \n LibMath,\n LibOrder,\n LibFillResults\n{\n function publicGetPartialAmount(\n uint256 numerator,\n uint256 denominator,\n uint256 target)\n public\n pure\n returns (uint256 partialAmount)\n {\n partialAmount = getPartialAmount(\n numerator,\n denominator,\n target\n );\n return partialAmount;\n }\n\n function publicIsRoundingError(\n uint256 numerator,\n uint256 denominator,\n uint256 target)\n public\n pure\n returns (bool isError)\n {\n isError = isRoundingError(\n numerator,\n denominator,\n target\n );\n return isError;\n }\n\n function publicGetOrderHash(Order memory order)\n public\n view\n returns (bytes32 orderHash)\n {\n orderHash = getOrderHash(order);\n return orderHash;\n }\n\n function getOrderSchemaHash()\n public\n pure\n returns (bytes32)\n {\n return EIP712_ORDER_SCHEMA_HASH;\n }\n\n function getDomainSeparatorSchemaHash()\n public\n pure\n returns (bytes32)\n {\n return EIP712_DOMAIN_SEPARATOR_SCHEMA_HASH;\n }\n\n function publicAddFillResults(FillResults memory totalFillResults, FillResults memory singleFillResults)\n public\n pure\n returns (FillResults memory)\n {\n addFillResults(totalFillResults, singleFillResults);\n return totalFillResults;\n }\n}\n",
- "2.0.0/utils/SafeMath/SafeMath.sol": "pragma solidity ^0.4.24;\npragma experimental ABIEncoderV2;\n\ncontract SafeMath {\n function safeMul(uint a, uint b)\n internal\n pure\n returns (uint256)\n {\n uint c = a * b;\n assert(a == 0 || c / a == b);\n return c;\n }\n\n function safeDiv(uint a, uint b)\n internal\n pure\n returns (uint256)\n {\n uint c = a / b;\n return c;\n }\n\n function safeSub(uint a, uint b)\n internal\n pure\n returns (uint256)\n {\n assert(b <= a);\n return a - b;\n }\n\n function safeAdd(uint a, uint b)\n internal\n pure\n returns (uint256)\n {\n uint c = a + b;\n assert(c >= a);\n return c;\n }\n\n function max64(uint64 a, uint64 b)\n internal\n pure\n returns (uint256)\n {\n return a >= b ? a : b;\n }\n\n function min64(uint64 a, uint64 b)\n internal\n pure\n returns (uint256)\n {\n return a < b ? a : b;\n }\n\n function max256(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n return a >= b ? a : b;\n }\n\n function min256(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n return a < b ? a : b;\n }\n}\n"
+ "2.0.0/protocol/Exchange/libs/LibEIP712.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.24;\n\n\ncontract LibEIP712 {\n // EIP191 header for EIP712 prefix\n string constant internal EIP191_HEADER = \"\\x19\\x01\";\n\n // EIP712 Domain Name value\n string constant internal EIP712_DOMAIN_NAME = \"0x Protocol\";\n\n // EIP712 Domain Version value\n string constant internal EIP712_DOMAIN_VERSION = \"2\";\n\n // Hash of the EIP712 Domain Separator Schema\n bytes32 public constant EIP712_DOMAIN_SEPARATOR_SCHEMA_HASH = keccak256(abi.encodePacked(\n \"EIP712Domain(\",\n \"string name,\",\n \"string version,\",\n \"address verifyingContract\",\n \")\"\n ));\n\n // Hash of the EIP712 Domain Separator data\n // solhint-disable-next-line var-name-mixedcase\n bytes32 public EIP712_DOMAIN_HASH;\n\n constructor ()\n public\n {\n EIP712_DOMAIN_HASH = keccak256(abi.encode(\n EIP712_DOMAIN_SEPARATOR_SCHEMA_HASH,\n keccak256(bytes(EIP712_DOMAIN_NAME)),\n keccak256(bytes(EIP712_DOMAIN_VERSION)),\n address(this)\n ));\n }\n\n /// @dev Calculates EIP712 encoding for a hash struct in this EIP712 Domain.\n /// @param hashStruct The EIP712 hash struct.\n /// @return EIP712 hash applied to this EIP712 Domain.\n function hashEIP712Message(bytes32 hashStruct)\n internal\n view\n returns (bytes32)\n {\n return keccak256(abi.encodePacked(EIP191_HEADER, EIP712_DOMAIN_HASH, hashStruct));\n }\n}\n",
+ "2.0.0/protocol/Exchange/libs/LibFillResults.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.24;\n\nimport \"../../../utils/SafeMath/SafeMath.sol\";\n\n\ncontract LibFillResults is\n SafeMath\n{\n\n struct FillResults {\n uint256 makerAssetFilledAmount; // Total amount of makerAsset(s) filled.\n uint256 takerAssetFilledAmount; // Total amount of takerAsset(s) filled.\n uint256 makerFeePaid; // Total amount of ZRX paid by maker(s) to feeRecipient(s).\n uint256 takerFeePaid; // Total amount of ZRX paid by taker to feeRecipients(s).\n }\n\n struct MatchedFillResults {\n FillResults left; // Amounts filled and fees paid of left order.\n FillResults right; // Amounts filled and fees paid of right order.\n uint256 leftMakerAssetSpreadAmount; // Spread between price of left and right order, denominated in the left order's makerAsset, paid to taker.\n }\n\n /// @dev Adds properties of both FillResults instances.\n /// Modifies the first FillResults instance specified.\n /// @param totalFillResults Fill results instance that will be added onto.\n /// @param singleFillResults Fill results instance that will be added to totalFillResults.\n function addFillResults(FillResults memory totalFillResults, FillResults memory singleFillResults)\n internal\n pure\n {\n totalFillResults.makerAssetFilledAmount = safeAdd(totalFillResults.makerAssetFilledAmount, singleFillResults.makerAssetFilledAmount);\n totalFillResults.takerAssetFilledAmount = safeAdd(totalFillResults.takerAssetFilledAmount, singleFillResults.takerAssetFilledAmount);\n totalFillResults.makerFeePaid = safeAdd(totalFillResults.makerFeePaid, singleFillResults.makerFeePaid);\n totalFillResults.takerFeePaid = safeAdd(totalFillResults.takerFeePaid, singleFillResults.takerFeePaid);\n }\n}\n",
+ "2.0.0/protocol/Exchange/libs/LibMath.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.24;\n\nimport \"../../../utils/SafeMath/SafeMath.sol\";\n\n\ncontract LibMath is\n SafeMath\n{\n\n /// @dev Calculates partial value given a numerator and denominator.\n /// @param numerator Numerator.\n /// @param denominator Denominator.\n /// @param target Value to calculate partial of.\n /// @return Partial value of target.\n function getPartialAmount(\n uint256 numerator,\n uint256 denominator,\n uint256 target)\n internal\n pure\n returns (uint256 partialAmount)\n {\n partialAmount = safeDiv(\n safeMul(numerator, target),\n denominator\n );\n return partialAmount;\n }\n\n /// @dev Checks if rounding error > 0.1%.\n /// @param numerator Numerator.\n /// @param denominator Denominator.\n /// @param target Value to multiply with numerator/denominator.\n /// @return Rounding error is present.\n function isRoundingError(\n uint256 numerator,\n uint256 denominator,\n uint256 target)\n internal\n pure\n returns (bool isError)\n {\n uint256 remainder = mulmod(target, numerator, denominator);\n if (remainder == 0) {\n return false; // No rounding error.\n }\n\n uint256 errPercentageTimes1000000 = safeDiv(\n safeMul(remainder, 1000000),\n safeMul(numerator, target)\n );\n isError = errPercentageTimes1000000 > 1000;\n return isError;\n }\n}\n",
+ "2.0.0/protocol/Exchange/libs/LibOrder.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.24;\n\nimport \"./LibEIP712.sol\";\n\n\ncontract LibOrder is\n LibEIP712\n{\n\n // Hash for the EIP712 Order Schema\n bytes32 constant internal EIP712_ORDER_SCHEMA_HASH = keccak256(abi.encodePacked(\n \"Order(\",\n \"address makerAddress,\",\n \"address takerAddress,\",\n \"address feeRecipientAddress,\",\n \"address senderAddress,\",\n \"uint256 makerAssetAmount,\",\n \"uint256 takerAssetAmount,\",\n \"uint256 makerFee,\",\n \"uint256 takerFee,\",\n \"uint256 expirationTimeSeconds,\",\n \"uint256 salt,\",\n \"bytes makerAssetData,\",\n \"bytes takerAssetData\",\n \")\"\n ));\n\n // A valid order remains fillable until it is expired, fully filled, or cancelled.\n // An order's state is unaffected by external factors, like account balances.\n enum OrderStatus {\n INVALID, // Default value\n INVALID_MAKER_ASSET_AMOUNT, // Order does not have a valid maker asset amount\n INVALID_TAKER_ASSET_AMOUNT, // Order does not have a valid taker asset amount\n FILLABLE, // Order is fillable\n EXPIRED, // Order has already expired\n FULLY_FILLED, // Order is fully filled\n CANCELLED // Order has been cancelled\n }\n\n // solhint-disable max-line-length\n struct Order {\n address makerAddress; // Address that created the order. \n address takerAddress; // Address that is allowed to fill the order. If set to 0, any address is allowed to fill the order. \n address feeRecipientAddress; // Address that will recieve fees when order is filled. \n address senderAddress; // Address that is allowed to call Exchange contract methods that affect this order. If set to 0, any address is allowed to call these methods.\n uint256 makerAssetAmount; // Amount of makerAsset being offered by maker. Must be greater than 0. \n uint256 takerAssetAmount; // Amount of takerAsset being bid on by maker. Must be greater than 0. \n uint256 makerFee; // Amount of ZRX paid to feeRecipient by maker when order is filled. If set to 0, no transfer of ZRX from maker to feeRecipient will be attempted.\n uint256 takerFee; // Amount of ZRX paid to feeRecipient by taker when order is filled. If set to 0, no transfer of ZRX from taker to feeRecipient will be attempted.\n uint256 expirationTimeSeconds; // Timestamp in seconds at which order expires. \n uint256 salt; // Arbitrary number to facilitate uniqueness of the order's hash. \n bytes makerAssetData; // Encoded data that can be decoded by a specified proxy contract when transferring makerAsset. The last byte references the id of this proxy.\n bytes takerAssetData; // Encoded data that can be decoded by a specified proxy contract when transferring takerAsset. The last byte references the id of this proxy.\n }\n // solhint-enable max-line-length\n\n struct OrderInfo {\n uint8 orderStatus; // Status that describes order's validity and fillability.\n bytes32 orderHash; // EIP712 hash of the order (see LibOrder.getOrderHash).\n uint256 orderTakerAssetFilledAmount; // Amount of order that has already been filled.\n }\n\n /// @dev Calculates Keccak-256 hash of the order.\n /// @param order The order structure.\n /// @return Keccak-256 EIP712 hash of the order.\n function getOrderHash(Order memory order)\n internal\n view\n returns (bytes32 orderHash)\n {\n orderHash = hashEIP712Message(hashOrder(order));\n return orderHash;\n }\n\n /// @dev Calculates EIP712 hash of the order.\n /// @param order The order structure.\n /// @return EIP712 hash of the order.\n function hashOrder(Order memory order)\n internal\n pure\n returns (bytes32 result)\n {\n bytes32 schemaHash = EIP712_ORDER_SCHEMA_HASH;\n bytes32 makerAssetDataHash = keccak256(order.makerAssetData);\n bytes32 takerAssetDataHash = keccak256(order.takerAssetData);\n\n // Assembly for more efficiently computing:\n // keccak256(abi.encode(\n // order.makerAddress,\n // order.takerAddress,\n // order.feeRecipientAddress,\n // order.senderAddress,\n // order.makerAssetAmount,\n // order.takerAssetAmount,\n // order.makerFee,\n // order.takerFee,\n // order.expirationTimeSeconds,\n // order.salt,\n // keccak256(order.makerAssetData),\n // keccak256(order.takerAssetData)\n // ));\n\n assembly {\n // Backup\n // solhint-disable-next-line space-after-comma\n let temp1 := mload(sub(order, 32))\n let temp2 := mload(add(order, 320))\n let temp3 := mload(add(order, 352))\n \n // Hash in place\n // solhint-disable-next-line space-after-comma\n mstore(sub(order, 32), schemaHash)\n mstore(add(order, 320), makerAssetDataHash)\n mstore(add(order, 352), takerAssetDataHash)\n result := keccak256(sub(order, 32), 416)\n \n // Restore\n // solhint-disable-next-line space-after-comma\n mstore(sub(order, 32), temp1)\n mstore(add(order, 320), temp2)\n mstore(add(order, 352), temp3)\n }\n return result;\n }\n}\n",
+ "2.0.0/test/TestLibs/TestLibs.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../../protocol/Exchange/libs/LibMath.sol\";\nimport \"../../protocol/Exchange/libs/LibOrder.sol\";\nimport \"../../protocol/Exchange/libs/LibFillResults.sol\";\n\n\ncontract TestLibs is \n LibMath,\n LibOrder,\n LibFillResults\n{\n function publicGetPartialAmount(\n uint256 numerator,\n uint256 denominator,\n uint256 target\n )\n public\n pure\n returns (uint256 partialAmount)\n {\n partialAmount = getPartialAmount(\n numerator,\n denominator,\n target\n );\n return partialAmount;\n }\n\n function publicIsRoundingError(\n uint256 numerator,\n uint256 denominator,\n uint256 target\n )\n public\n pure\n returns (bool isError)\n {\n isError = isRoundingError(\n numerator,\n denominator,\n target\n );\n return isError;\n }\n\n function publicGetOrderHash(Order memory order)\n public\n view\n returns (bytes32 orderHash)\n {\n orderHash = getOrderHash(order);\n return orderHash;\n }\n\n function getOrderSchemaHash()\n public\n pure\n returns (bytes32)\n {\n return EIP712_ORDER_SCHEMA_HASH;\n }\n\n function getDomainSeparatorSchemaHash()\n public\n pure\n returns (bytes32)\n {\n return EIP712_DOMAIN_SEPARATOR_SCHEMA_HASH;\n }\n\n function publicAddFillResults(FillResults memory totalFillResults, FillResults memory singleFillResults)\n public\n pure\n returns (FillResults memory)\n {\n addFillResults(totalFillResults, singleFillResults);\n return totalFillResults;\n }\n}\n",
+ "2.0.0/utils/SafeMath/SafeMath.sol": "pragma solidity 0.4.24;\n\n\ncontract SafeMath {\n function safeMul(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n if (a == 0) {\n return 0;\n }\n uint256 c = a * b;\n require(\n c / a == b,\n \"UINT256_OVERFLOW\"\n );\n return c;\n }\n\n function safeDiv(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n uint256 c = a / b;\n return c;\n }\n\n function safeSub(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n require(\n b <= a,\n \"UINT256_OVERFLOW\"\n );\n return a - b;\n }\n\n function safeAdd(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n uint256 c = a + b;\n require(\n c >= a,\n \"UINT256_OVERFLOW\"\n );\n return c;\n }\n\n function max64(uint64 a, uint64 b)\n internal\n pure\n returns (uint256)\n {\n return a >= b ? a : b;\n }\n\n function min64(uint64 a, uint64 b)\n internal\n pure\n returns (uint256)\n {\n return a < b ? a : b;\n }\n\n function max256(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n return a >= b ? a : b;\n }\n\n function min256(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n return a < b ? a : b;\n }\n}\n"
},
- "sourceTreeHashHex": "0x51747c74debfdb741122670c699ab3d86533aa3baa150b6d2b2e6d2a4750c907",
+ "sourceTreeHashHex": "0xfba376a2b8344e587fb09547c9ba4e17beff2c2bf73bda3839ada2102bb4ca5a",
"compiler": {
"name": "solc",
"version": "soljson-v0.4.24+commit.e67f0147.js",
diff --git a/packages/migrations/artifacts/2.0.0/TestSignatureValidator.json b/packages/migrations/artifacts/2.0.0/TestSignatureValidator.json
index 8b1ccb939..f8351f2c5 100644
--- a/packages/migrations/artifacts/2.0.0/TestSignatureValidator.json
+++ b/packages/migrations/artifacts/2.0.0/TestSignatureValidator.json
@@ -256,15 +256,15 @@
"evm": {
"bytecode": {
"linkReferences": {},
- "object": "0x7f454950373132446f6d61696e280000000000000000000000000000000000000060a09081527f737472696e67206e616d652c000000000000000000000000000000000000000060ad527f737472696e672076657273696f6e2c000000000000000000000000000000000060b9527f6164647265737320766572696679696e67436f6e74726163740000000000000060c8527f290000000000000000000000000000000000000000000000000000000000000060e1526042608081815260e26040819052909290918291908083835b60208310620000ef5780518252601f199092019160209182019101620000ce565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208285018552600b8084527f30782050726f746f636f6c000000000000000000000000000000000000000000928401928352945190965091945090928392508083835b60208310620001795780518252601f19909201916020918201910162000158565b51815160209384036101000a600019018019909216911617905260408051929094018290038220828501855260018084527f3200000000000000000000000000000000000000000000000000000000000000928401928352945190965091945090928392508083835b60208310620002035780518252601f199092019160209182019101620001e2565b51815160209384036101000a60001901801990921691161790526040519190930181900381206200023e9796955093503092019050620002d0565b6040516020818303038152906040526040518082805190602001908083835b602083106200027e5780518252601f1990920191602091820191016200025d565b5181516020939093036101000a600019018019909116921691909117905260405192018290039091206000555062000325915050565b620002bf8162000316565b82525050565b620002bf8162000322565b60808101620002e08287620002c5565b620002ef6020830186620002c5565b620002fe6040830185620002c5565b6200030d6060830184620002b4565b95945050505050565b600160a060020a031690565b90565b611f1780620003356000396000f3006080604052600436106100ae5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416632624b2d981146100b35780633683ef8e146100de578063642f2eaf1461010057806377fcce681461012d5780637b8e35141461014d57806382c174d01461016d578063936347021461018d578063abba41cc146101ad578063bfc8bfce146101cd578063e306f779146101ed578063eea086ba14610202575b600080fd5b3480156100bf57600080fd5b506100c8610224565b6040516100d59190611c78565b60405180910390f35b3480156100ea57600080fd5b506100fe6100f93660046117b5565b610378565b005b34801561010c57600080fd5b5061012061011b366004611778565b610451565b6040516100d59190611c6a565b34801561013957600080fd5b506100fe61014836600461172a565b610466565b34801561015957600080fd5b506101206101683660046116f0565b610511565b34801561017957600080fd5b50610120610188366004611796565b610531565b34801561019957600080fd5b506101206101a836600461181d565b610551565b3480156101b957600080fd5b506101206101c836600461181d565b610d77565b3480156101d957600080fd5b506100fe6101e8366004611882565b610d8c565b3480156101f957600080fd5b506100c8611007565b34801561020e57600080fd5b5061021761100d565b6040516100d59190611c5c565b604080517f454950373132446f6d61696e28000000000000000000000000000000000000006020808301919091527f737472696e67206e616d652c0000000000000000000000000000000000000000602d8301527f737472696e672076657273696f6e2c000000000000000000000000000000000060398301527f6164647265737320766572696679696e67436f6e74726163740000000000000060488301527f2900000000000000000000000000000000000000000000000000000000000000606183015282516042818403018152606290920192839052815191929182918401908083835b6020831061034857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161030b565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902081565b6103b3848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843750610551945050505050565b15156103f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb90611d51565b60405180910390fd5b5050600091825260016020818152604080852073ffffffffffffffffffffffffffffffffffffffff9094168552929052912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169091179055565b60036020526000908152604090205460ff1681565b6000610470611029565b73ffffffffffffffffffffffffffffffffffffffff8181166000818152600260209081526040808320948916808452949091529081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168715151790555192935090917fa8656e308026eeabce8f0bc18048433252318ab80ac79da0b3d3d8697dfba89190610504908690611c6a565b60405180910390a3505050565b600260209081526000928352604080842090915290825290205460ff1681565b600160209081526000928352604080842090915290825290205460ff1681565b6000806000806000806000806000895111151561059a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb90611d91565b6105a389611072565b7f010000000000000000000000000000000000000000000000000000000000000090049650600960ff881610610605576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb90611d31565b8660ff16600981111561061457fe5b9550600086600981111561062457fe5b141561065c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb90611d81565b600186600981111561066a57fe5b14156106b2578851156106a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb90611dd1565b60009750610d69565b60028660098111156106c057fe5b14156107fb578851604114610701576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb90611d11565b88600081518110151561071057fe5b01602001517f010000000000000000000000000000000000000000000000000000000000000090819004810204945061075089600163ffffffff61113616565b935061076389602163ffffffff61113616565b925060018b868686604051600081526020016040526040516107889493929190611cdc565b60206040516020810390808403906000865af11580156107ac573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015173ffffffffffffffffffffffffffffffffffffffff8c81169082161499509250610d699050565b600386600981111561080957fe5b14156109af57885160411461084a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb90611d11565b88600081518110151561085957fe5b01602001517f010000000000000000000000000000000000000000000000000000000000000090819004810204945061089989600163ffffffff61113616565b93506108ac89602163ffffffff61113616565b925060018b60405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c0182600019166000191681526020019150506040516020818303038152906040526040518082805190602001908083835b6020831061094d57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610910565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260408051929094018290038220600083529101928390526107889450925089918991508890611cdc565b60048660098111156109bd57fe5b1415610a1c578851156109fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb90611dd1565b73ffffffffffffffffffffffffffffffffffffffff8a1633149750610d69565b6005866009811115610a2a57fe5b1415610add576040517f1626ba7e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b1690631626ba7e90610a84908e908d90600401611cbc565b602060405180830381600087803b158015610a9e57600080fd5b505af1158015610ab2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610ad6919081019061175a565b9750610d69565b6006866009811115610aeb57fe5b1415610b9857610afa89611181565b73ffffffffffffffffffffffffffffffffffffffff808c1660009081526002602090815260408083209385168352929052205490915060ff161515610b425760009750610d69565b6040517f9363470200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690639363470290610a84908e908e908e90600401611c86565b6007866009811115610ba657fe5b1415610be65760008b815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8e16845290915290205460ff169750610d69565b6008866009811115610bf457fe5b1415610d37578851604114610c35576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb90611d11565b886000815181101515610c4457fe5b01602001517f0100000000000000000000000000000000000000000000000000000000000000908190048102049450610c8489600163ffffffff61113616565b9350610c9789602163ffffffff61113616565b925060018b60405160200180807f19457468657265756d205369676e6564204d6573736167653a0a200000000000815250601b0182600019166000191681526020019150506040516020818303038152906040526040518082805190602001908083836020831061094d57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610910565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb90611d31565b505050505050509392505050565b6000610d84848484610551565b949350505050565b60045460009073ffffffffffffffffffffffffffffffffffffffff1615610ddf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb90611da1565b610e22610e1d888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437506111fa945050505050565b61143b565b60008181526003602052604090205490915060ff1615610e6e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb90611d41565b73ffffffffffffffffffffffffffffffffffffffff86163314610f3f57610ec6818785858080601f01602080910402602001604051908101604052809392919081815260200183838082843750610551945050505050565b1515610efe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb90611dc1565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff88161790555b6000818152600360205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555130908690869080838380828437820191505092505050600060405180830381855af49150501515610fd6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb90611d61565b5050600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555050505050565b60005481565b60045473ffffffffffffffffffffffffffffffffffffffff1681565b600454600090819073ffffffffffffffffffffffffffffffffffffffff161561106a5760045473ffffffffffffffffffffffffffffffffffffffff1661106c565b335b92915050565b60008082511115156110b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb90611d71565b815182907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019081106110e057fe5b016020015182517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01909252507f0100000000000000000000000000000000000000000000000000000000000000908190040290565b600081602001835110151515611178576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb90611d21565b50016020015190565b600060148251101515156111c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb90611db1565b6111cf8260148451036115bb565b82517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec019092525090565b604080517f5a65726f45785472616e73616374696f6e2800000000000000000000000000006020808301919091527f75696e743235362073616c742c0000000000000000000000000000000000000060328301527f61646472657373207369676e6572416464726573732c00000000000000000000603f8301527f627974657320646174610000000000000000000000000000000000000000000060558301527f2900000000000000000000000000000000000000000000000000000000000000605f830152825180830384018152606090920192839052815160009384938493909282918401908083835b6020831061132357805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016112e6565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260405191909301819003812089519097508995509093508392850191508083835b602083106113b957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161137c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040805192909401829003822097825281019a909a525073ffffffffffffffffffffffffffffffffffffffff97909716968801969096525050606085015250506080909120919050565b60006040805190810160405280600281526020017f1901000000000000000000000000000000000000000000000000000000000000815250600054836040516020018084805190602001908083835b602083106114c757805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161148a565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199092169116179052920194855250838101929092525060408051808403830181529281019081905282519293509182918401908083835b6020831061156b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161152e565b5181516020939093036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199091169216919091179052604051920182900390912095945050505050565b6000816014018351101515156115fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb90611db1565b50016014015173ffffffffffffffffffffffffffffffffffffffff1690565b60006116288235611e52565b9392505050565b60006116288235611e6b565b60006116288251611e6b565b60006116288235611e70565b600080601f8301841361166557600080fd5b50813567ffffffffffffffff81111561167d57600080fd5b60208301915083600182028301111561169557600080fd5b9250929050565b6000601f820183136116ad57600080fd5b81356116c06116bb82611e08565b611de1565b915080825260208301602083018583830111156116dc57600080fd5b6116e7838284611e79565b50505092915050565b6000806040838503121561170357600080fd5b600061170f858561161c565b92505060206117208582860161161c565b9150509250929050565b6000806040838503121561173d57600080fd5b6000611749858561161c565b92505060206117208582860161162f565b60006020828403121561176c57600080fd5b6000610d84848461163b565b60006020828403121561178a57600080fd5b6000610d848484611647565b600080604083850312156117a957600080fd5b600061170f8585611647565b600080600080606085870312156117cb57600080fd5b60006117d78787611647565b94505060206117e88782880161161c565b935050604085013567ffffffffffffffff81111561180557600080fd5b61181187828801611653565b95989497509550505050565b60008060006060848603121561183257600080fd5b600061183e8686611647565b935050602061184f8682870161161c565b925050604084013567ffffffffffffffff81111561186c57600080fd5b6118788682870161169c565b9150509250925092565b6000806000806000806080878903121561189b57600080fd5b60006118a78989611647565b96505060206118b889828a0161161c565b955050604087013567ffffffffffffffff8111156118d557600080fd5b6118e189828a01611653565b9450945050606087013567ffffffffffffffff81111561190057600080fd5b61190c89828a01611653565b92509250509295509295509295565b61192481611e52565b82525050565b61192481611e6b565b61192481611e70565b600061194782611e4e565b80845261195b816020860160208601611e85565b61196481611eb5565b9093016020019392505050565b601281527f4c454e4754485f36355f52455155495245440000000000000000000000000000602082015260400190565b602681527f475245415445525f4f525f455155414c5f544f5f33325f4c454e4754485f524560208201527f5155495245440000000000000000000000000000000000000000000000000000604082015260600190565b601581527f5349474e41545552455f554e535550504f525445440000000000000000000000602082015260400190565b600f81527f494e56414c49445f54585f484153480000000000000000000000000000000000602082015260400190565b601181527f494e56414c49445f5349474e4154555245000000000000000000000000000000602082015260400190565b601081527f4641494c45445f455845435554494f4e00000000000000000000000000000000602082015260400190565b602181527f475245415445525f5448414e5f5a45524f5f4c454e4754485f5245515549524560208201527f4400000000000000000000000000000000000000000000000000000000000000604082015260600190565b601181527f5349474e41545552455f494c4c4547414c000000000000000000000000000000602082015260400190565b601e81527f4c454e4754485f475245415445525f5448414e5f305f52455155495245440000602082015260400190565b601281527f5245454e5452414e43595f494c4c4547414c0000000000000000000000000000602082015260400190565b602681527f475245415445525f4f525f455155414c5f544f5f32305f4c454e4754485f524560208201527f5155495245440000000000000000000000000000000000000000000000000000604082015260600190565b601481527f494e56414c49445f54585f5349474e4154555245000000000000000000000000602082015260400190565b601181527f4c454e4754485f305f5245515549524544000000000000000000000000000000602082015260400190565b61192481611e73565b6020810161106c828461191b565b6020810161106c828461192a565b6020810161106c8284611933565b60608101611c948286611933565b611ca1602083018561191b565b8181036040830152611cb3818461193c565b95945050505050565b60408101611cca8285611933565b8181036020830152610d84818461193c565b60808101611cea8287611933565b611cf76020830186611c53565b611d046040830185611933565b611cb36060830184611933565b6020808252810161106c81611971565b6020808252810161106c816119a1565b6020808252810161106c816119f7565b6020808252810161106c81611a27565b6020808252810161106c81611a57565b6020808252810161106c81611a87565b6020808252810161106c81611ab7565b6020808252810161106c81611b0d565b6020808252810161106c81611b3d565b6020808252810161106c81611b6d565b6020808252810161106c81611b9d565b6020808252810161106c81611bf3565b6020808252810161106c81611c23565b60405181810167ffffffffffffffff81118282101715611e0057600080fd5b604052919050565b600067ffffffffffffffff821115611e1f57600080fd5b506020601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160190565b5190565b73ffffffffffffffffffffffffffffffffffffffff1690565b151590565b90565b60ff1690565b82818337506000910152565b60005b83811015611ea0578181015183820152602001611e88565b83811115611eaf576000848401525b50505050565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016905600a265627a7a72305820d5d1fc7cdf191938ed19ecc0f71f0409858a61003bc9c13ead5c692ec9ef07146c6578706572696d656e74616cf50037",
- "opcodes": "PUSH32 0x454950373132446F6D61696E2800000000000000000000000000000000000000 PUSH1 0xA0 SWAP1 DUP2 MSTORE PUSH32 0x737472696E67206E616D652C0000000000000000000000000000000000000000 PUSH1 0xAD MSTORE PUSH32 0x737472696E672076657273696F6E2C0000000000000000000000000000000000 PUSH1 0xB9 MSTORE PUSH32 0x6164647265737320766572696679696E67436F6E747261637400000000000000 PUSH1 0xC8 MSTORE PUSH32 0x2900000000000000000000000000000000000000000000000000000000000000 PUSH1 0xE1 MSTORE PUSH1 0x42 PUSH1 0x80 DUP2 DUP2 MSTORE PUSH1 0xE2 PUSH1 0x40 DUP2 SWAP1 MSTORE SWAP1 SWAP3 SWAP1 SWAP2 DUP3 SWAP2 SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH3 0xEF JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH3 0xCE JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP5 ADD DUP3 SWAP1 SUB DUP3 KECCAK256 DUP3 DUP6 ADD DUP6 MSTORE PUSH1 0xB DUP1 DUP5 MSTORE PUSH32 0x30782050726F746F636F6C000000000000000000000000000000000000000000 SWAP3 DUP5 ADD SWAP3 DUP4 MSTORE SWAP5 MLOAD SWAP1 SWAP7 POP SWAP2 SWAP5 POP SWAP1 SWAP3 DUP4 SWAP3 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH3 0x179 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH3 0x158 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP5 ADD DUP3 SWAP1 SUB DUP3 KECCAK256 DUP3 DUP6 ADD DUP6 MSTORE PUSH1 0x1 DUP1 DUP5 MSTORE PUSH32 0x3200000000000000000000000000000000000000000000000000000000000000 SWAP3 DUP5 ADD SWAP3 DUP4 MSTORE SWAP5 MLOAD SWAP1 SWAP7 POP SWAP2 SWAP5 POP SWAP1 SWAP3 DUP4 SWAP3 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH3 0x203 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH3 0x1E2 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP4 ADD DUP2 SWAP1 SUB DUP2 KECCAK256 PUSH3 0x23E SWAP8 SWAP7 SWAP6 POP SWAP4 POP ADDRESS SWAP3 ADD SWAP1 POP PUSH3 0x2D0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH3 0x27E JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH3 0x25D JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 SWAP1 SWAP4 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP2 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP3 ADD DUP3 SWAP1 SUB SWAP1 SWAP2 KECCAK256 PUSH1 0x0 SSTORE POP PUSH3 0x325 SWAP2 POP POP JUMP JUMPDEST PUSH3 0x2BF DUP2 PUSH3 0x316 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH3 0x2BF DUP2 PUSH3 0x322 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH3 0x2E0 DUP3 DUP8 PUSH3 0x2C5 JUMP JUMPDEST PUSH3 0x2EF PUSH1 0x20 DUP4 ADD DUP7 PUSH3 0x2C5 JUMP JUMPDEST PUSH3 0x2FE PUSH1 0x40 DUP4 ADD DUP6 PUSH3 0x2C5 JUMP JUMPDEST PUSH3 0x30D PUSH1 0x60 DUP4 ADD DUP5 PUSH3 0x2B4 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0x1F17 DUP1 PUSH3 0x335 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xAE JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x2624B2D9 DUP2 EQ PUSH2 0xB3 JUMPI DUP1 PUSH4 0x3683EF8E EQ PUSH2 0xDE JUMPI DUP1 PUSH4 0x642F2EAF EQ PUSH2 0x100 JUMPI DUP1 PUSH4 0x77FCCE68 EQ PUSH2 0x12D JUMPI DUP1 PUSH4 0x7B8E3514 EQ PUSH2 0x14D JUMPI DUP1 PUSH4 0x82C174D0 EQ PUSH2 0x16D JUMPI DUP1 PUSH4 0x93634702 EQ PUSH2 0x18D JUMPI DUP1 PUSH4 0xABBA41CC EQ PUSH2 0x1AD JUMPI DUP1 PUSH4 0xBFC8BFCE EQ PUSH2 0x1CD JUMPI DUP1 PUSH4 0xE306F779 EQ PUSH2 0x1ED JUMPI DUP1 PUSH4 0xEEA086BA EQ PUSH2 0x202 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xBF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xC8 PUSH2 0x224 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD5 SWAP2 SWAP1 PUSH2 0x1C78 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xEA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFE PUSH2 0xF9 CALLDATASIZE PUSH1 0x4 PUSH2 0x17B5 JUMP JUMPDEST PUSH2 0x378 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x10C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x120 PUSH2 0x11B CALLDATASIZE PUSH1 0x4 PUSH2 0x1778 JUMP JUMPDEST PUSH2 0x451 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD5 SWAP2 SWAP1 PUSH2 0x1C6A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x139 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFE PUSH2 0x148 CALLDATASIZE PUSH1 0x4 PUSH2 0x172A JUMP JUMPDEST PUSH2 0x466 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x159 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x120 PUSH2 0x168 CALLDATASIZE PUSH1 0x4 PUSH2 0x16F0 JUMP JUMPDEST PUSH2 0x511 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x179 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x120 PUSH2 0x188 CALLDATASIZE PUSH1 0x4 PUSH2 0x1796 JUMP JUMPDEST PUSH2 0x531 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x199 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x120 PUSH2 0x1A8 CALLDATASIZE PUSH1 0x4 PUSH2 0x181D JUMP JUMPDEST PUSH2 0x551 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x120 PUSH2 0x1C8 CALLDATASIZE PUSH1 0x4 PUSH2 0x181D JUMP JUMPDEST PUSH2 0xD77 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFE PUSH2 0x1E8 CALLDATASIZE PUSH1 0x4 PUSH2 0x1882 JUMP JUMPDEST PUSH2 0xD8C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xC8 PUSH2 0x1007 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x20E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x217 PUSH2 0x100D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD5 SWAP2 SWAP1 PUSH2 0x1C5C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x454950373132446F6D61696E2800000000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x737472696E67206E616D652C0000000000000000000000000000000000000000 PUSH1 0x2D DUP4 ADD MSTORE PUSH32 0x737472696E672076657273696F6E2C0000000000000000000000000000000000 PUSH1 0x39 DUP4 ADD MSTORE PUSH32 0x6164647265737320766572696679696E67436F6E747261637400000000000000 PUSH1 0x48 DUP4 ADD MSTORE PUSH32 0x2900000000000000000000000000000000000000000000000000000000000000 PUSH1 0x61 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x42 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x62 SWAP1 SWAP3 ADD SWAP3 DUP4 SWAP1 MSTORE DUP2 MLOAD SWAP2 SWAP3 SWAP2 DUP3 SWAP2 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x348 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x30B JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 DUP2 JUMP JUMPDEST PUSH2 0x3B3 DUP5 DUP5 DUP5 DUP5 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY POP PUSH2 0x551 SWAP5 POP POP POP POP POP JUMP JUMPDEST ISZERO ISZERO PUSH2 0x3F4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EB SWAP1 PUSH2 0x1D51 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP6 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP5 AND DUP6 MSTORE SWAP3 SWAP1 MSTORE SWAP2 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x470 PUSH2 0x1029 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP10 AND DUP1 DUP5 MSTORE SWAP5 SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP8 ISZERO ISZERO OR SWAP1 SSTORE MLOAD SWAP3 SWAP4 POP SWAP1 SWAP2 PUSH32 0xA8656E308026EEABCE8F0BC18048433252318AB80AC79DA0B3D3D8697DFBA891 SWAP1 PUSH2 0x504 SWAP1 DUP7 SWAP1 PUSH2 0x1C6A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP10 MLOAD GT ISZERO ISZERO PUSH2 0x59A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EB SWAP1 PUSH2 0x1D91 JUMP JUMPDEST PUSH2 0x5A3 DUP10 PUSH2 0x1072 JUMP JUMPDEST PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DIV SWAP7 POP PUSH1 0x9 PUSH1 0xFF DUP9 AND LT PUSH2 0x605 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EB SWAP1 PUSH2 0x1D31 JUMP JUMPDEST DUP7 PUSH1 0xFF AND PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x614 JUMPI INVALID JUMPDEST SWAP6 POP PUSH1 0x0 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x624 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x65C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EB SWAP1 PUSH2 0x1D81 JUMP JUMPDEST PUSH1 0x1 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x66A JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x6B2 JUMPI DUP9 MLOAD ISZERO PUSH2 0x6A9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EB SWAP1 PUSH2 0x1DD1 JUMP JUMPDEST PUSH1 0x0 SWAP8 POP PUSH2 0xD69 JUMP JUMPDEST PUSH1 0x2 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x6C0 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x7FB JUMPI DUP9 MLOAD PUSH1 0x41 EQ PUSH2 0x701 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EB SWAP1 PUSH2 0x1D11 JUMP JUMPDEST DUP9 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x710 JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV DUP2 MUL DIV SWAP5 POP PUSH2 0x750 DUP10 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x1136 AND JUMP JUMPDEST SWAP4 POP PUSH2 0x763 DUP10 PUSH1 0x21 PUSH4 0xFFFFFFFF PUSH2 0x1136 AND JUMP JUMPDEST SWAP3 POP PUSH1 0x1 DUP12 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH2 0x788 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1CDC JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 PUSH1 0x0 DUP7 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x7AC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 DUP2 AND SWAP1 DUP3 AND EQ SWAP10 POP SWAP3 POP PUSH2 0xD69 SWAP1 POP JUMP JUMPDEST PUSH1 0x3 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x809 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x9AF JUMPI DUP9 MLOAD PUSH1 0x41 EQ PUSH2 0x84A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EB SWAP1 PUSH2 0x1D11 JUMP JUMPDEST DUP9 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x859 JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV DUP2 MUL DIV SWAP5 POP PUSH2 0x899 DUP10 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x1136 AND JUMP JUMPDEST SWAP4 POP PUSH2 0x8AC DUP10 PUSH1 0x21 PUSH4 0xFFFFFFFF PUSH2 0x1136 AND JUMP JUMPDEST SWAP3 POP PUSH1 0x1 DUP12 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP1 PUSH32 0x19457468657265756D205369676E6564204D6573736167653A0A333200000000 DUP2 MSTORE POP PUSH1 0x1C ADD DUP3 PUSH1 0x0 NOT AND PUSH1 0x0 NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x94D JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x910 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP5 ADD DUP3 SWAP1 SUB DUP3 KECCAK256 PUSH1 0x0 DUP4 MSTORE SWAP2 ADD SWAP3 DUP4 SWAP1 MSTORE PUSH2 0x788 SWAP5 POP SWAP3 POP DUP10 SWAP2 DUP10 SWAP2 POP DUP9 SWAP1 PUSH2 0x1CDC JUMP JUMPDEST PUSH1 0x4 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x9BD JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xA1C JUMPI DUP9 MLOAD ISZERO PUSH2 0x9FC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EB SWAP1 PUSH2 0x1DD1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND CALLER EQ SWAP8 POP PUSH2 0xD69 JUMP JUMPDEST PUSH1 0x5 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0xA2A JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xADD JUMPI PUSH1 0x40 MLOAD PUSH32 0x1626BA7E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND SWAP1 PUSH4 0x1626BA7E SWAP1 PUSH2 0xA84 SWAP1 DUP15 SWAP1 DUP14 SWAP1 PUSH1 0x4 ADD PUSH2 0x1CBC JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA9E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xAB2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0xAD6 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x175A JUMP JUMPDEST SWAP8 POP PUSH2 0xD69 JUMP JUMPDEST PUSH1 0x6 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0xAEB JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xB98 JUMPI PUSH2 0xAFA DUP10 PUSH2 0x1181 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP13 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP6 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF AND ISZERO ISZERO PUSH2 0xB42 JUMPI PUSH1 0x0 SWAP8 POP PUSH2 0xD69 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x9363470200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x93634702 SWAP1 PUSH2 0xA84 SWAP1 DUP15 SWAP1 DUP15 SWAP1 DUP15 SWAP1 PUSH1 0x4 ADD PUSH2 0x1C86 JUMP JUMPDEST PUSH1 0x7 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0xBA6 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xBE6 JUMPI PUSH1 0x0 DUP12 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP15 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP8 POP PUSH2 0xD69 JUMP JUMPDEST PUSH1 0x8 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0xBF4 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xD37 JUMPI DUP9 MLOAD PUSH1 0x41 EQ PUSH2 0xC35 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EB SWAP1 PUSH2 0x1D11 JUMP JUMPDEST DUP9 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xC44 JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV DUP2 MUL DIV SWAP5 POP PUSH2 0xC84 DUP10 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x1136 AND JUMP JUMPDEST SWAP4 POP PUSH2 0xC97 DUP10 PUSH1 0x21 PUSH4 0xFFFFFFFF PUSH2 0x1136 AND JUMP JUMPDEST SWAP3 POP PUSH1 0x1 DUP12 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP1 PUSH32 0x19457468657265756D205369676E6564204D6573736167653A0A200000000000 DUP2 MSTORE POP PUSH1 0x1B ADD DUP3 PUSH1 0x0 NOT AND PUSH1 0x0 NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x20 DUP4 LT PUSH2 0x94D JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x910 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EB SWAP1 PUSH2 0x1D31 JUMP JUMPDEST POP POP POP POP POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD84 DUP5 DUP5 DUP5 PUSH2 0x551 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0xDDF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EB SWAP1 PUSH2 0x1DA1 JUMP JUMPDEST PUSH2 0xE22 PUSH2 0xE1D DUP9 DUP9 DUP9 DUP9 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY POP PUSH2 0x11FA SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x143B JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF AND ISZERO PUSH2 0xE6E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EB SWAP1 PUSH2 0x1D41 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND CALLER EQ PUSH2 0xF3F JUMPI PUSH2 0xEC6 DUP2 DUP8 DUP6 DUP6 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY POP PUSH2 0x551 SWAP5 POP POP POP POP POP JUMP JUMPDEST ISZERO ISZERO PUSH2 0xEFE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EB SWAP1 PUSH2 0x1DC1 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND OR SWAP1 SSTORE JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD ADDRESS SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP1 DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY DUP3 ADD SWAP2 POP POP SWAP3 POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP ISZERO ISZERO PUSH2 0xFD6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EB SWAP1 PUSH2 0x1D61 JUMP JUMPDEST POP POP PUSH1 0x4 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x106A JUMPI PUSH1 0x4 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x106C JUMP JUMPDEST CALLER JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 MLOAD GT ISZERO ISZERO PUSH2 0x10B0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EB SWAP1 PUSH2 0x1D71 JUMP JUMPDEST DUP2 MLOAD DUP3 SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0x10E0 JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD DUP3 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP3 MSTORE POP PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x20 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x1178 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EB SWAP1 PUSH2 0x1D21 JUMP JUMPDEST POP ADD PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x14 DUP3 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x11C1 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EB SWAP1 PUSH2 0x1DB1 JUMP JUMPDEST PUSH2 0x11CF DUP3 PUSH1 0x14 DUP5 MLOAD SUB PUSH2 0x15BB JUMP JUMPDEST DUP3 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC ADD SWAP1 SWAP3 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x5A65726F45785472616E73616374696F6E280000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x75696E743235362073616C742C00000000000000000000000000000000000000 PUSH1 0x32 DUP4 ADD MSTORE PUSH32 0x61646472657373207369676E6572416464726573732C00000000000000000000 PUSH1 0x3F DUP4 ADD MSTORE PUSH32 0x6279746573206461746100000000000000000000000000000000000000000000 PUSH1 0x55 DUP4 ADD MSTORE PUSH32 0x2900000000000000000000000000000000000000000000000000000000000000 PUSH1 0x5F DUP4 ADD MSTORE DUP3 MLOAD DUP1 DUP4 SUB DUP5 ADD DUP2 MSTORE PUSH1 0x60 SWAP1 SWAP3 ADD SWAP3 DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH1 0x0 SWAP4 DUP5 SWAP4 DUP5 SWAP4 SWAP1 SWAP3 DUP3 SWAP2 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1323 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x12E6 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP4 ADD DUP2 SWAP1 SUB DUP2 KECCAK256 DUP10 MLOAD SWAP1 SWAP8 POP DUP10 SWAP6 POP SWAP1 SWAP4 POP DUP4 SWAP3 DUP6 ADD SWAP2 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x13B9 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x137C JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP5 ADD DUP3 SWAP1 SUB DUP3 KECCAK256 SWAP8 DUP3 MSTORE DUP2 ADD SWAP11 SWAP1 SWAP11 MSTORE POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP8 SWAP1 SWAP8 AND SWAP7 DUP9 ADD SWAP7 SWAP1 SWAP7 MSTORE POP POP PUSH1 0x60 DUP6 ADD MSTORE POP POP PUSH1 0x80 SWAP1 SWAP2 KECCAK256 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x0 SLOAD DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP5 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x14C7 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x148A JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP5 DUP6 MSTORE POP DUP4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP5 SUB DUP4 ADD DUP2 MSTORE SWAP3 DUP2 ADD SWAP1 DUP2 SWAP1 MSTORE DUP3 MLOAD SWAP3 SWAP4 POP SWAP2 DUP3 SWAP2 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x156B JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x152E JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 SWAP1 SWAP4 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP2 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP3 ADD DUP3 SWAP1 SUB SWAP1 SWAP2 KECCAK256 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x14 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x15FD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EB SWAP1 PUSH2 0x1DB1 JUMP JUMPDEST POP ADD PUSH1 0x14 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1628 DUP3 CALLDATALOAD PUSH2 0x1E52 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1628 DUP3 CALLDATALOAD PUSH2 0x1E6B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1628 DUP3 MLOAD PUSH2 0x1E6B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1628 DUP3 CALLDATALOAD PUSH2 0x1E70 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x1F DUP4 ADD DUP5 SGT PUSH2 0x1665 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x167D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x1 DUP3 MUL DUP4 ADD GT ISZERO PUSH2 0x1695 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0x16AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x16C0 PUSH2 0x16BB DUP3 PUSH2 0x1E08 JUMP JUMPDEST PUSH2 0x1DE1 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP4 ADD DUP6 DUP4 DUP4 ADD GT ISZERO PUSH2 0x16DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x16E7 DUP4 DUP3 DUP5 PUSH2 0x1E79 JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1703 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x170F DUP6 DUP6 PUSH2 0x161C JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x1720 DUP6 DUP3 DUP7 ADD PUSH2 0x161C JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x173D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1749 DUP6 DUP6 PUSH2 0x161C JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x1720 DUP6 DUP3 DUP7 ADD PUSH2 0x162F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x176C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xD84 DUP5 DUP5 PUSH2 0x163B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x178A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xD84 DUP5 DUP5 PUSH2 0x1647 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x17A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x170F DUP6 DUP6 PUSH2 0x1647 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x17CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x17D7 DUP8 DUP8 PUSH2 0x1647 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x17E8 DUP8 DUP3 DUP9 ADD PUSH2 0x161C JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1805 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1811 DUP8 DUP3 DUP9 ADD PUSH2 0x1653 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1832 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x183E DUP7 DUP7 PUSH2 0x1647 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x184F DUP7 DUP3 DUP8 ADD PUSH2 0x161C JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x186C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1878 DUP7 DUP3 DUP8 ADD PUSH2 0x169C JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x189B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x18A7 DUP10 DUP10 PUSH2 0x1647 JUMP JUMPDEST SWAP7 POP POP PUSH1 0x20 PUSH2 0x18B8 DUP10 DUP3 DUP11 ADD PUSH2 0x161C JUMP JUMPDEST SWAP6 POP POP PUSH1 0x40 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x18D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x18E1 DUP10 DUP3 DUP11 ADD PUSH2 0x1653 JUMP JUMPDEST SWAP5 POP SWAP5 POP POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1900 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x190C DUP10 DUP3 DUP11 ADD PUSH2 0x1653 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH2 0x1924 DUP2 PUSH2 0x1E52 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x1924 DUP2 PUSH2 0x1E6B JUMP JUMPDEST PUSH2 0x1924 DUP2 PUSH2 0x1E70 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1947 DUP3 PUSH2 0x1E4E JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH2 0x195B DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x1E85 JUMP JUMPDEST PUSH2 0x1964 DUP2 PUSH2 0x1EB5 JUMP JUMPDEST SWAP1 SWAP4 ADD PUSH1 0x20 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x12 DUP2 MSTORE PUSH32 0x4C454E4754485F36355F52455155495245440000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F33325F4C454E4754485F5245 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x15 DUP2 MSTORE PUSH32 0x5349474E41545552455F554E535550504F525445440000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0xF DUP2 MSTORE PUSH32 0x494E56414C49445F54585F484153480000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x11 DUP2 MSTORE PUSH32 0x494E56414C49445F5349474E4154555245000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x10 DUP2 MSTORE PUSH32 0x4641494C45445F455845435554494F4E00000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x21 DUP2 MSTORE PUSH32 0x475245415445525F5448414E5F5A45524F5F4C454E4754485F52455155495245 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x4400000000000000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x11 DUP2 MSTORE PUSH32 0x5349474E41545552455F494C4C4547414C000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1E DUP2 MSTORE PUSH32 0x4C454E4754485F475245415445525F5448414E5F305F52455155495245440000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x12 DUP2 MSTORE PUSH32 0x5245454E5452414E43595F494C4C4547414C0000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F32305F4C454E4754485F5245 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x14 DUP2 MSTORE PUSH32 0x494E56414C49445F54585F5349474E4154555245000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x11 DUP2 MSTORE PUSH32 0x4C454E4754485F305F5245515549524544000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH2 0x1924 DUP2 PUSH2 0x1E73 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x106C DUP3 DUP5 PUSH2 0x191B JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x106C DUP3 DUP5 PUSH2 0x192A JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x106C DUP3 DUP5 PUSH2 0x1933 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x1C94 DUP3 DUP7 PUSH2 0x1933 JUMP JUMPDEST PUSH2 0x1CA1 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x191B JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x1CB3 DUP2 DUP5 PUSH2 0x193C JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x1CCA DUP3 DUP6 PUSH2 0x1933 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0xD84 DUP2 DUP5 PUSH2 0x193C JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x1CEA DUP3 DUP8 PUSH2 0x1933 JUMP JUMPDEST PUSH2 0x1CF7 PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x1C53 JUMP JUMPDEST PUSH2 0x1D04 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x1933 JUMP JUMPDEST PUSH2 0x1CB3 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x1933 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x106C DUP2 PUSH2 0x1971 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x106C DUP2 PUSH2 0x19A1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x106C DUP2 PUSH2 0x19F7 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x106C DUP2 PUSH2 0x1A27 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x106C DUP2 PUSH2 0x1A57 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x106C DUP2 PUSH2 0x1A87 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x106C DUP2 PUSH2 0x1AB7 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x106C DUP2 PUSH2 0x1B0D JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x106C DUP2 PUSH2 0x1B3D JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x106C DUP2 PUSH2 0x1B6D JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x106C DUP2 PUSH2 0x1B9D JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x106C DUP2 PUSH2 0x1BF3 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x106C DUP2 PUSH2 0x1C23 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x1E00 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1E1F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x1F SWAP2 SWAP1 SWAP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0xFF AND SWAP1 JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1EA0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1E88 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x1EAF JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP1 JUMP STOP LOG2 PUSH6 0x627A7A723058 KECCAK256 0xd5 0xd1 0xfc PUSH29 0xDF191938ED19ECC0F71F0409858A61003BC9C13EAD5C692EC9EF07146C PUSH6 0x78706572696D PUSH6 0x6E74616CF500 CALLDATACOPY ",
- "sourceMap": "1015:148:6:-;;;;;;;;;;;;;;;;;22:32:-1;759:412:10;6:49:-1;;;1015:148:6;759:412:10;1015:148:6;;;759:412:10;;1015:148:6;;;;;22:32:-1;1015:148:6;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;1005:159:6;;;;;;;;;;;;1423:18;;;;;;;;;;;;;;;;1407:36;;1005:159;;-1:-1:-1;1005:159:6;;-1:-1:-1;1407:36:6;;;;-1:-1:-1;1423:18:6;1407:36;1423:18;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;1407:36:6;;;;;;;;;;;;1473:21;;;;;274:1:-1;1473:21:6;;;;;;;;;;1457:39;;1407:36;;-1:-1:-1;1407:36:6;;-1:-1:-1;1457:39:6;;;;-1:-1:-1;274:1;1457:39:6;1473:21;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;1457:39:6;;;;;;;;;;;1334:199;;;;-1:-1:-1;1457:39:6;-1:-1:-1;1518:4:6;;1334:199;;-1:-1:-1;1334:199:6;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;1334:199:6;;;1324:210;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;;;;365:33;;1324:210:6;;;;;;;;;;-1:-1:-1;1303:231:6;-1:-1:-1;759:412:10;;-1:-1:-1;;759:412:10;5:110:-1;78:31;103:5;78:31;;;73:3;66:44;60:55;;;122:110;195:31;220:5;195:31;;239:497;431:3;416:19;;446:61;420:9;480:6;446:61;;;518:62;576:2;565:9;561:18;552:6;518:62;;;591;649:2;638:9;634:18;625:6;591:62;;;664;722:2;711:9;707:18;698:6;664:62;;;402:334;;;;;;;;743:128;-1:-1;;;;;812:54;;795:76;878:79;947:5;930:27;;759:412:10;;;;;;"
+ "object": "0x7f454950373132446f6d61696e280000000000000000000000000000000000000060a09081527f737472696e67206e616d652c000000000000000000000000000000000000000060ad527f737472696e672076657273696f6e2c000000000000000000000000000000000060b9527f6164647265737320766572696679696e67436f6e74726163740000000000000060c8527f290000000000000000000000000000000000000000000000000000000000000060e1526042608081815260e26040819052909290918291908083835b60208310620000ef5780518252601f199092019160209182019101620000ce565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208285018552600b8084527f30782050726f746f636f6c000000000000000000000000000000000000000000928401928352945190965091945090928392508083835b60208310620001795780518252601f19909201916020918201910162000158565b51815160209384036101000a600019018019909216911617905260408051929094018290038220828501855260018084527f3200000000000000000000000000000000000000000000000000000000000000928401928352945190965091945090928392508083835b60208310620002035780518252601f199092019160209182019101620001e2565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208282019890985281840196909652606081019690965250306080808701919091528151808703909101815260a09095019081905284519093849350850191508083835b602083106200028e5780518252601f1990920191602091820191016200026d565b5181516000196020949094036101000a939093019283169219169190911790526040519201829003909120600055505050611d9c80620002cf6000396000f3006080604052600436106100ae5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416632624b2d981146100b35780633683ef8e146100da578063642f2eaf1461011a57806377fcce68146101465780637b8e35141461017957806382c174d0146101ad57806393634702146101de578063abba41cc14610254578063bfc8bfce146102ca578063e306f77914610314578063eea086ba14610329575b600080fd5b3480156100bf57600080fd5b506100c8610367565b60408051918252519081900360200190f35b3480156100e657600080fd5b5061011860048035906024803573ffffffffffffffffffffffffffffffffffffffff16916044359182019101356104bb565b005b34801561012657600080fd5b506101326004356105c0565b604080519115158252519081900360200190f35b34801561015257600080fd5b5061011873ffffffffffffffffffffffffffffffffffffffff6004351660243515156105d5565b34801561018557600080fd5b5061013273ffffffffffffffffffffffffffffffffffffffff6004358116906024351661067e565b3480156101b957600080fd5b5061013260043573ffffffffffffffffffffffffffffffffffffffff6024351661069e565b3480156101ea57600080fd5b50604080516020600460443581810135601f8101849004840285018401909552848452610132948235946024803573ffffffffffffffffffffffffffffffffffffffff16953695946064949201919081908401838280828437509497506106be9650505050505050565b34801561026057600080fd5b50604080516020600460443581810135601f8101849004840285018401909552848452610132948235946024803573ffffffffffffffffffffffffffffffffffffffff169536959460649492019190819084018382808284375094975061126d9650505050505050565b3480156102d657600080fd5b5061011860048035906024803573ffffffffffffffffffffffffffffffffffffffff1691604435808301929082013591606435918201910135611282565b34801561032057600080fd5b506100c86115ef565b34801561033557600080fd5b5061033e6115f5565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b604080517f454950373132446f6d61696e28000000000000000000000000000000000000006020808301919091527f737472696e67206e616d652c0000000000000000000000000000000000000000602d8301527f737472696e672076657273696f6e2c000000000000000000000000000000000060398301527f6164647265737320766572696679696e67436f6e74726163740000000000000060488301527f2900000000000000000000000000000000000000000000000000000000000000606183015282516042818403018152606290920192839052815191929182918401908083835b6020831061048b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161044e565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902081565b6104f6848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437506106be945050505050565b151561056357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f494e56414c49445f5349474e4154555245000000000000000000000000000000604482015290519081900360640190fd5b5050600091825260016020818152604080852073ffffffffffffffffffffffffffffffffffffffff9094168552929052912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169091179055565b60036020526000908152604090205460ff1681565b60006105df611611565b73ffffffffffffffffffffffffffffffffffffffff81811660008181526002602090815260408083209489168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001688151590811790915582519081529151949550929391927fa8656e308026eeabce8f0bc18048433252318ab80ac79da0b3d3d8697dfba89192918290030190a3505050565b600260209081526000928352604080842090915290825290205460ff1681565b600160209081526000928352604080842090915290825290205460ff1681565b6000806000806000806000806000895111151561073c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4c454e4754485f475245415445525f5448414e5f305f52455155495245440000604482015290519081900360640190fd5b6107458961165a565b7f010000000000000000000000000000000000000000000000000000000000000090049650600960ff8816106107dc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5349474e41545552455f554e535550504f525445440000000000000000000000604482015290519081900360640190fd5b8660ff1660098111156107eb57fe5b955060008660098111156107fb57fe5b141561086857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f5349474e41545552455f494c4c4547414c000000000000000000000000000000604482015290519081900360640190fd5b600186600981111561087657fe5b14156108f3578851156108ea57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4c454e4754485f305f5245515549524544000000000000000000000000000000604482015290519081900360640190fd5b6000975061125f565b600286600981111561090157fe5b1415610aa157885160411461097757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4c454e4754485f36355f52455155495245440000000000000000000000000000604482015290519081900360640190fd5b88600081518110151561098657fe5b01602001517f01000000000000000000000000000000000000000000000000000000000000009081900481020494506109c689600163ffffffff61177916565b93506109d989602163ffffffff61177916565b925060018b868686604051600081526020016040526040518085600019166000191681526020018460ff1660ff1681526020018360001916600019168152602001826000191660001916815260200194505050505060206040516020810390808403906000865af1158015610a52573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015173ffffffffffffffffffffffffffffffffffffffff8c8116908216149950925061125f9050565b6003866009811115610aaf57fe5b1415610ce0578851604114610b2557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4c454e4754485f36355f52455155495245440000000000000000000000000000604482015290519081900360640190fd5b886000815181101515610b3457fe5b01602001517f0100000000000000000000000000000000000000000000000000000000000000908190048102049450610b7489600163ffffffff61177916565b9350610b8789602163ffffffff61177916565b925060018b60405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c0182600019166000191681526020019150506040516020818303038152906040526040518082805190602001908083835b60208310610c2857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610beb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040805192909401829003822060008084528383018087529190915260ff8d1683860152606083018c9052608083018b9052935160a080840197509195507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019492819003909101925090865af1158015610a52573d6000803e3d6000fd5b6004866009811115610cee57fe5b1415610d8257885115610d6257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4c454e4754485f305f5245515549524544000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8a163314975061125f565b6005866009811115610d9057fe5b1415610eaa578973ffffffffffffffffffffffffffffffffffffffff16631626ba7e8c8b6040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610e2a578181015183820152602001610e12565b50505050905090810190601f168015610e575780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b158015610e7757600080fd5b505af1158015610e8b573d6000803e3d6000fd5b505050506040513d6020811015610ea157600080fd5b5051975061125f565b6006866009811115610eb857fe5b141561102457610ec78961181f565b73ffffffffffffffffffffffffffffffffffffffff808c1660009081526002602090815260408083209385168352929052205490915060ff161515610f0f576000975061125f565b8073ffffffffffffffffffffffffffffffffffffffff1663936347028c8c8c6040518463ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018084600019166000191681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610fd6578181015183820152602001610fbe565b50505050905090810190601f1680156110035780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b158015610e7757600080fd5b600786600981111561103257fe5b14156110725760008b815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8e16845290915290205460ff16975061125f565b600886600981111561108057fe5b14156111f85788516041146110f657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4c454e4754485f36355f52455155495245440000000000000000000000000000604482015290519081900360640190fd5b88600081518110151561110557fe5b01602001517f010000000000000000000000000000000000000000000000000000000000000090819004810204945061114589600163ffffffff61177916565b935061115889602163ffffffff61177916565b925060018b60405160200180807f19457468657265756d205369676e6564204d6573736167653a0a200000000000815250601b01826000191660001916815260200191505060405160208183030381529060405260405180828051906020019080838360208310610c2857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610beb565b604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5349474e41545552455f554e535550504f525445440000000000000000000000604482015290519081900360640190fd5b505050505050509392505050565b600061127a8484846106be565b949350505050565b60045460009073ffffffffffffffffffffffffffffffffffffffff161561130a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f5245454e5452414e43595f494c4c4547414c0000000000000000000000000000604482015290519081900360640190fd5b61134d611348888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437506118f3945050505050565b611b34565b60008181526003602052604090205490915060ff16156113ce57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f494e56414c49445f54585f484153480000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff861633146114d457611426818785858080601f016020809104026020016040519081016040528093929190818152602001838380828437506106be945050505050565b151561149357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f494e56414c49445f54585f5349474e4154555245000000000000000000000000604482015290519081900360640190fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff88161790555b6000818152600360205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555130908690869080838380828437820191505092505050600060405180830381855af491505015156115a057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4641494c45445f455845435554494f4e00000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff861633146115e657600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555b50505050505050565b60005481565b60045473ffffffffffffffffffffffffffffffffffffffff1681565b600454600090819073ffffffffffffffffffffffffffffffffffffffff16156116525760045473ffffffffffffffffffffffffffffffffffffffff16611654565b335b92915050565b60008082511115156116f357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f475245415445525f5448414e5f5a45524f5f4c454e4754485f5245515549524560448201527f4400000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b815182907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061172357fe5b016020015182517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01909252507f0100000000000000000000000000000000000000000000000000000000000000908190040290565b60008160200183511015151561181657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f475245415445525f4f525f455155414c5f544f5f33325f4c454e4754485f524560448201527f5155495245440000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b50016020015190565b600060148251101515156118ba57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f475245415445525f4f525f455155414c5f544f5f32305f4c454e4754485f524560448201527f5155495245440000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6118c8826014845103611cb4565b82517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec019092525090565b604080517f5a65726f45785472616e73616374696f6e2800000000000000000000000000006020808301919091527f75696e743235362073616c742c0000000000000000000000000000000000000060328301527f61646472657373207369676e6572416464726573732c00000000000000000000603f8301527f627974657320646174610000000000000000000000000000000000000000000060558301527f2900000000000000000000000000000000000000000000000000000000000000605f830152825180830384018152606090920192839052815160009384938493909282918401908083835b60208310611a1c57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016119df565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260405191909301819003812089519097508995509093508392850191508083835b60208310611ab257805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611a75565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040805192909401829003822097825281019a909a525073ffffffffffffffffffffffffffffffffffffffff97909716968801969096525050606085015250506080909120919050565b60006040805190810160405280600281526020017f1901000000000000000000000000000000000000000000000000000000000000815250600054836040516020018084805190602001908083835b60208310611bc057805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611b83565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199092169116179052920194855250838101929092525060408051808403830181529281019081905282519293509182918401908083835b60208310611c6457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611c27565b5181516020939093036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199091169216919091179052604051920182900390912095945050505050565b600081601401835110151515611d5157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f475245415445525f4f525f455155414c5f544f5f32305f4c454e4754485f524560448201527f5155495245440000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b50016014015173ffffffffffffffffffffffffffffffffffffffff16905600a165627a7a72305820c5570d84fe4a5b260f7dc2103749042b80976bea15de6f0e4c8ef4e5fe99bec80029",
+ "opcodes": "PUSH32 0x454950373132446F6D61696E2800000000000000000000000000000000000000 PUSH1 0xA0 SWAP1 DUP2 MSTORE PUSH32 0x737472696E67206E616D652C0000000000000000000000000000000000000000 PUSH1 0xAD MSTORE PUSH32 0x737472696E672076657273696F6E2C0000000000000000000000000000000000 PUSH1 0xB9 MSTORE PUSH32 0x6164647265737320766572696679696E67436F6E747261637400000000000000 PUSH1 0xC8 MSTORE PUSH32 0x2900000000000000000000000000000000000000000000000000000000000000 PUSH1 0xE1 MSTORE PUSH1 0x42 PUSH1 0x80 DUP2 DUP2 MSTORE PUSH1 0xE2 PUSH1 0x40 DUP2 SWAP1 MSTORE SWAP1 SWAP3 SWAP1 SWAP2 DUP3 SWAP2 SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH3 0xEF JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH3 0xCE JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP5 ADD DUP3 SWAP1 SUB DUP3 KECCAK256 DUP3 DUP6 ADD DUP6 MSTORE PUSH1 0xB DUP1 DUP5 MSTORE PUSH32 0x30782050726F746F636F6C000000000000000000000000000000000000000000 SWAP3 DUP5 ADD SWAP3 DUP4 MSTORE SWAP5 MLOAD SWAP1 SWAP7 POP SWAP2 SWAP5 POP SWAP1 SWAP3 DUP4 SWAP3 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH3 0x179 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH3 0x158 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP5 ADD DUP3 SWAP1 SUB DUP3 KECCAK256 DUP3 DUP6 ADD DUP6 MSTORE PUSH1 0x1 DUP1 DUP5 MSTORE PUSH32 0x3200000000000000000000000000000000000000000000000000000000000000 SWAP3 DUP5 ADD SWAP3 DUP4 MSTORE SWAP5 MLOAD SWAP1 SWAP7 POP SWAP2 SWAP5 POP SWAP1 SWAP3 DUP4 SWAP3 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH3 0x203 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH3 0x1E2 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH1 0x0 NOT ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP5 ADD DUP3 SWAP1 SUB DUP3 KECCAK256 DUP3 DUP3 ADD SWAP9 SWAP1 SWAP9 MSTORE DUP2 DUP5 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH1 0x60 DUP2 ADD SWAP7 SWAP1 SWAP7 MSTORE POP ADDRESS PUSH1 0x80 DUP1 DUP8 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MLOAD DUP1 DUP8 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xA0 SWAP1 SWAP6 ADD SWAP1 DUP2 SWAP1 MSTORE DUP5 MLOAD SWAP1 SWAP4 DUP5 SWAP4 POP DUP6 ADD SWAP2 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH3 0x28E JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH3 0x26D JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x0 NOT PUSH1 0x20 SWAP5 SWAP1 SWAP5 SUB PUSH2 0x100 EXP SWAP4 SWAP1 SWAP4 ADD SWAP3 DUP4 AND SWAP3 NOT AND SWAP2 SWAP1 SWAP2 OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP3 ADD DUP3 SWAP1 SUB SWAP1 SWAP2 KECCAK256 PUSH1 0x0 SSTORE POP POP POP PUSH2 0x1D9C DUP1 PUSH3 0x2CF PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xAE JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x2624B2D9 DUP2 EQ PUSH2 0xB3 JUMPI DUP1 PUSH4 0x3683EF8E EQ PUSH2 0xDA JUMPI DUP1 PUSH4 0x642F2EAF EQ PUSH2 0x11A JUMPI DUP1 PUSH4 0x77FCCE68 EQ PUSH2 0x146 JUMPI DUP1 PUSH4 0x7B8E3514 EQ PUSH2 0x179 JUMPI DUP1 PUSH4 0x82C174D0 EQ PUSH2 0x1AD JUMPI DUP1 PUSH4 0x93634702 EQ PUSH2 0x1DE JUMPI DUP1 PUSH4 0xABBA41CC EQ PUSH2 0x254 JUMPI DUP1 PUSH4 0xBFC8BFCE EQ PUSH2 0x2CA JUMPI DUP1 PUSH4 0xE306F779 EQ PUSH2 0x314 JUMPI DUP1 PUSH4 0xEEA086BA EQ PUSH2 0x329 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xBF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xC8 PUSH2 0x367 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x118 PUSH1 0x4 DUP1 CALLDATALOAD SWAP1 PUSH1 0x24 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH1 0x44 CALLDATALOAD SWAP2 DUP3 ADD SWAP2 ADD CALLDATALOAD PUSH2 0x4BB JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x126 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x132 PUSH1 0x4 CALLDATALOAD PUSH2 0x5C0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x152 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x118 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD ISZERO ISZERO PUSH2 0x5D5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x185 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x132 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH2 0x67E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x132 PUSH1 0x4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD AND PUSH2 0x69E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 PUSH1 0x44 CALLDATALOAD DUP2 DUP2 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x132 SWAP5 DUP3 CALLDATALOAD SWAP5 PUSH1 0x24 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP6 CALLDATASIZE SWAP6 SWAP5 PUSH1 0x64 SWAP5 SWAP3 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x6BE SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x260 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 PUSH1 0x44 CALLDATALOAD DUP2 DUP2 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x132 SWAP5 DUP3 CALLDATALOAD SWAP5 PUSH1 0x24 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP6 CALLDATASIZE SWAP6 SWAP5 PUSH1 0x64 SWAP5 SWAP3 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x126D SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x118 PUSH1 0x4 DUP1 CALLDATALOAD SWAP1 PUSH1 0x24 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH1 0x44 CALLDATALOAD DUP1 DUP4 ADD SWAP3 SWAP1 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x64 CALLDATALOAD SWAP2 DUP3 ADD SWAP2 ADD CALLDATALOAD PUSH2 0x1282 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x320 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xC8 PUSH2 0x15EF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x335 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33E PUSH2 0x15F5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x454950373132446F6D61696E2800000000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x737472696E67206E616D652C0000000000000000000000000000000000000000 PUSH1 0x2D DUP4 ADD MSTORE PUSH32 0x737472696E672076657273696F6E2C0000000000000000000000000000000000 PUSH1 0x39 DUP4 ADD MSTORE PUSH32 0x6164647265737320766572696679696E67436F6E747261637400000000000000 PUSH1 0x48 DUP4 ADD MSTORE PUSH32 0x2900000000000000000000000000000000000000000000000000000000000000 PUSH1 0x61 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x42 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x62 SWAP1 SWAP3 ADD SWAP3 DUP4 SWAP1 MSTORE DUP2 MLOAD SWAP2 SWAP3 SWAP2 DUP3 SWAP2 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x48B JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x44E JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 DUP2 JUMP JUMPDEST PUSH2 0x4F6 DUP5 DUP5 DUP5 DUP5 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY POP PUSH2 0x6BE SWAP5 POP POP POP POP POP JUMP JUMPDEST ISZERO ISZERO PUSH2 0x563 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E56414C49445F5349474E4154555245000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP6 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP5 AND DUP6 MSTORE SWAP3 SWAP1 MSTORE SWAP2 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5DF PUSH2 0x1611 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP10 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP9 ISZERO ISZERO SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP3 MLOAD SWAP1 DUP2 MSTORE SWAP2 MLOAD SWAP5 SWAP6 POP SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xA8656E308026EEABCE8F0BC18048433252318AB80AC79DA0B3D3D8697DFBA891 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP10 MLOAD GT ISZERO ISZERO PUSH2 0x73C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C454E4754485F475245415445525F5448414E5F305F52455155495245440000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x745 DUP10 PUSH2 0x165A JUMP JUMPDEST PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DIV SWAP7 POP PUSH1 0x9 PUSH1 0xFF DUP9 AND LT PUSH2 0x7DC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5349474E41545552455F554E535550504F525445440000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP7 PUSH1 0xFF AND PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x7EB JUMPI INVALID JUMPDEST SWAP6 POP PUSH1 0x0 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x7FB JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x868 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5349474E41545552455F494C4C4547414C000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x876 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x8F3 JUMPI DUP9 MLOAD ISZERO PUSH2 0x8EA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C454E4754485F305F5245515549524544000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 SWAP8 POP PUSH2 0x125F JUMP JUMPDEST PUSH1 0x2 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x901 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xAA1 JUMPI DUP9 MLOAD PUSH1 0x41 EQ PUSH2 0x977 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C454E4754485F36355F52455155495245440000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP9 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x986 JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV DUP2 MUL DIV SWAP5 POP PUSH2 0x9C6 DUP10 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x1779 AND JUMP JUMPDEST SWAP4 POP PUSH2 0x9D9 DUP10 PUSH1 0x21 PUSH4 0xFFFFFFFF PUSH2 0x1779 AND JUMP JUMPDEST SWAP3 POP PUSH1 0x1 DUP12 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP6 PUSH1 0x0 NOT AND PUSH1 0x0 NOT AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0xFF AND PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0x0 NOT AND PUSH1 0x0 NOT AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 PUSH1 0x0 NOT AND PUSH1 0x0 NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP5 POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 PUSH1 0x0 DUP7 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xA52 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 DUP2 AND SWAP1 DUP3 AND EQ SWAP10 POP SWAP3 POP PUSH2 0x125F SWAP1 POP JUMP JUMPDEST PUSH1 0x3 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0xAAF JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xCE0 JUMPI DUP9 MLOAD PUSH1 0x41 EQ PUSH2 0xB25 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C454E4754485F36355F52455155495245440000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP9 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xB34 JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV DUP2 MUL DIV SWAP5 POP PUSH2 0xB74 DUP10 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x1779 AND JUMP JUMPDEST SWAP4 POP PUSH2 0xB87 DUP10 PUSH1 0x21 PUSH4 0xFFFFFFFF PUSH2 0x1779 AND JUMP JUMPDEST SWAP3 POP PUSH1 0x1 DUP12 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP1 PUSH32 0x19457468657265756D205369676E6564204D6573736167653A0A333200000000 DUP2 MSTORE POP PUSH1 0x1C ADD DUP3 PUSH1 0x0 NOT AND PUSH1 0x0 NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xC28 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xBEB JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP5 ADD DUP3 SWAP1 SUB DUP3 KECCAK256 PUSH1 0x0 DUP1 DUP5 MSTORE DUP4 DUP4 ADD DUP1 DUP8 MSTORE SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xFF DUP14 AND DUP4 DUP7 ADD MSTORE PUSH1 0x60 DUP4 ADD DUP13 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP12 SWAP1 MSTORE SWAP4 MLOAD PUSH1 0xA0 DUP1 DUP5 ADD SWAP8 POP SWAP2 SWAP6 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 ADD SWAP5 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP3 POP SWAP1 DUP7 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xA52 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x4 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0xCEE JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xD82 JUMPI DUP9 MLOAD ISZERO PUSH2 0xD62 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C454E4754485F305F5245515549524544000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND CALLER EQ SWAP8 POP PUSH2 0x125F JUMP JUMPDEST PUSH1 0x5 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0xD90 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xEAA JUMPI DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x1626BA7E DUP13 DUP12 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH29 0x100000000000000000000000000000000000000000000000000000000 MUL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH1 0x0 NOT AND PUSH1 0x0 NOT AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xE2A JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xE12 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xE57 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 SWAP4 POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE77 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xE8B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xEA1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP8 POP PUSH2 0x125F JUMP JUMPDEST PUSH1 0x6 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0xEB8 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x1024 JUMPI PUSH2 0xEC7 DUP10 PUSH2 0x181F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP13 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP6 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF AND ISZERO ISZERO PUSH2 0xF0F JUMPI PUSH1 0x0 SWAP8 POP PUSH2 0x125F JUMP JUMPDEST DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x93634702 DUP13 DUP13 DUP13 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH29 0x100000000000000000000000000000000000000000000000000000000 MUL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 PUSH1 0x0 NOT AND PUSH1 0x0 NOT AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xFD6 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xFBE JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1003 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 SWAP5 POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE77 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x7 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x1032 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x1072 JUMPI PUSH1 0x0 DUP12 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP15 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP8 POP PUSH2 0x125F JUMP JUMPDEST PUSH1 0x8 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x1080 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x11F8 JUMPI DUP9 MLOAD PUSH1 0x41 EQ PUSH2 0x10F6 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C454E4754485F36355F52455155495245440000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP9 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1105 JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV DUP2 MUL DIV SWAP5 POP PUSH2 0x1145 DUP10 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x1779 AND JUMP JUMPDEST SWAP4 POP PUSH2 0x1158 DUP10 PUSH1 0x21 PUSH4 0xFFFFFFFF PUSH2 0x1779 AND JUMP JUMPDEST SWAP3 POP PUSH1 0x1 DUP12 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP1 PUSH32 0x19457468657265756D205369676E6564204D6573736167653A0A200000000000 DUP2 MSTORE POP PUSH1 0x1B ADD DUP3 PUSH1 0x0 NOT AND PUSH1 0x0 NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x20 DUP4 LT PUSH2 0xC28 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xBEB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5349474E41545552455F554E535550504F525445440000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP POP POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x127A DUP5 DUP5 DUP5 PUSH2 0x6BE JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x130A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5245454E5452414E43595F494C4C4547414C0000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x134D PUSH2 0x1348 DUP9 DUP9 DUP9 DUP9 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY POP PUSH2 0x18F3 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1B34 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF AND ISZERO PUSH2 0x13CE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E56414C49445F54585F484153480000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND CALLER EQ PUSH2 0x14D4 JUMPI PUSH2 0x1426 DUP2 DUP8 DUP6 DUP6 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY POP PUSH2 0x6BE SWAP5 POP POP POP POP POP JUMP JUMPDEST ISZERO ISZERO PUSH2 0x1493 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E56414C49445F54585F5349474E4154555245000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND OR SWAP1 SSTORE JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD ADDRESS SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP1 DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY DUP3 ADD SWAP2 POP POP SWAP3 POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP ISZERO ISZERO PUSH2 0x15A0 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4641494C45445F455845435554494F4E00000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND CALLER EQ PUSH2 0x15E6 JUMPI PUSH1 0x4 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x1652 JUMPI PUSH1 0x4 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1654 JUMP JUMPDEST CALLER JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 MLOAD GT ISZERO ISZERO PUSH2 0x16F3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x21 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475245415445525F5448414E5F5A45524F5F4C454E4754485F52455155495245 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x4400000000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x84 ADD SWAP1 REVERT JUMPDEST DUP2 MLOAD DUP3 SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0x1723 JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD DUP3 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP3 MSTORE POP PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x20 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x1816 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F33325F4C454E4754485F5245 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x84 ADD SWAP1 REVERT JUMPDEST POP ADD PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x14 DUP3 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x18BA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F32305F4C454E4754485F5245 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x84 ADD SWAP1 REVERT JUMPDEST PUSH2 0x18C8 DUP3 PUSH1 0x14 DUP5 MLOAD SUB PUSH2 0x1CB4 JUMP JUMPDEST DUP3 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC ADD SWAP1 SWAP3 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x5A65726F45785472616E73616374696F6E280000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x75696E743235362073616C742C00000000000000000000000000000000000000 PUSH1 0x32 DUP4 ADD MSTORE PUSH32 0x61646472657373207369676E6572416464726573732C00000000000000000000 PUSH1 0x3F DUP4 ADD MSTORE PUSH32 0x6279746573206461746100000000000000000000000000000000000000000000 PUSH1 0x55 DUP4 ADD MSTORE PUSH32 0x2900000000000000000000000000000000000000000000000000000000000000 PUSH1 0x5F DUP4 ADD MSTORE DUP3 MLOAD DUP1 DUP4 SUB DUP5 ADD DUP2 MSTORE PUSH1 0x60 SWAP1 SWAP3 ADD SWAP3 DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH1 0x0 SWAP4 DUP5 SWAP4 DUP5 SWAP4 SWAP1 SWAP3 DUP3 SWAP2 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1A1C JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x19DF JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP4 ADD DUP2 SWAP1 SUB DUP2 KECCAK256 DUP10 MLOAD SWAP1 SWAP8 POP DUP10 SWAP6 POP SWAP1 SWAP4 POP DUP4 SWAP3 DUP6 ADD SWAP2 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1AB2 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1A75 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP5 ADD DUP3 SWAP1 SUB DUP3 KECCAK256 SWAP8 DUP3 MSTORE DUP2 ADD SWAP11 SWAP1 SWAP11 MSTORE POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP8 SWAP1 SWAP8 AND SWAP7 DUP9 ADD SWAP7 SWAP1 SWAP7 MSTORE POP POP PUSH1 0x60 DUP6 ADD MSTORE POP POP PUSH1 0x80 SWAP1 SWAP2 KECCAK256 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x0 SLOAD DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP5 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1BC0 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1B83 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP5 DUP6 MSTORE POP DUP4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP5 SUB DUP4 ADD DUP2 MSTORE SWAP3 DUP2 ADD SWAP1 DUP2 SWAP1 MSTORE DUP3 MLOAD SWAP3 SWAP4 POP SWAP2 DUP3 SWAP2 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1C64 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1C27 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 SWAP1 SWAP4 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP2 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP3 ADD DUP3 SWAP1 SUB SWAP1 SWAP2 KECCAK256 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x14 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x1D51 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F32305F4C454E4754485F5245 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x84 ADD SWAP1 REVERT JUMPDEST POP ADD PUSH1 0x14 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 0xc5 JUMPI 0xd DUP5 INVALID 0x4a JUMPDEST 0x26 0xf PUSH30 0xC2103749042B80976BEA15DE6F0E4C8EF4E5FE99BEC80029000000000000 ",
+ "sourceMap": "1042:148:6:-;;;;;;;;;;;;;;;;;22:32:-1;725:412:10;6:49:-1;;;1042:148:6;725:412:10;1042:148:6;;;725:412:10;;1042:148:6;;;;;22:32:-1;1042:148:6;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;1032:159:6;;;;;;;;;;;;1502:18;;;;;;;;;;;;;;;;1486:36;;1032:159;;-1:-1:-1;1032:159:6;;-1:-1:-1;1486:36:6;;;;-1:-1:-1;1502:18:6;1486:36;1502:18;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;1486:36:6;;;;;;;;;;;;1552:21;;;;;274:1:-1;1552:21:6;;;;;;;;;;1536:39;;1486:36;;-1:-1:-1;1486:36:6;;-1:-1:-1;1536:39:6;;;;-1:-1:-1;274:1;1536:39:6;1552:21;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;1536:39:6;;;;;;;;;;;;1413:199;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1597:4:6;1413:199;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1413:199:6;;;;;;;;1403:210;;1413:199;;;;-1:-1:-1;1403:210:6;;;-1:-1:-1;1403:210:6;1413:199;1403:210;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;-1:-1;;263:2;259:12;;;;254:3;250:22;246:30;;;;340:21;;;311:9;;295:26;377:20;;;;365:33;;1403:210:6;;;;;;;;;;-1:-1:-1;1382:231:6;-1:-1:-1;;;725:412:10;;;;;;"
},
"deployedBytecode": {
"linkReferences": {},
- "object": "0x6080604052600436106100ae5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416632624b2d981146100b35780633683ef8e146100de578063642f2eaf1461010057806377fcce681461012d5780637b8e35141461014d57806382c174d01461016d578063936347021461018d578063abba41cc146101ad578063bfc8bfce146101cd578063e306f779146101ed578063eea086ba14610202575b600080fd5b3480156100bf57600080fd5b506100c8610224565b6040516100d59190611c78565b60405180910390f35b3480156100ea57600080fd5b506100fe6100f93660046117b5565b610378565b005b34801561010c57600080fd5b5061012061011b366004611778565b610451565b6040516100d59190611c6a565b34801561013957600080fd5b506100fe61014836600461172a565b610466565b34801561015957600080fd5b506101206101683660046116f0565b610511565b34801561017957600080fd5b50610120610188366004611796565b610531565b34801561019957600080fd5b506101206101a836600461181d565b610551565b3480156101b957600080fd5b506101206101c836600461181d565b610d77565b3480156101d957600080fd5b506100fe6101e8366004611882565b610d8c565b3480156101f957600080fd5b506100c8611007565b34801561020e57600080fd5b5061021761100d565b6040516100d59190611c5c565b604080517f454950373132446f6d61696e28000000000000000000000000000000000000006020808301919091527f737472696e67206e616d652c0000000000000000000000000000000000000000602d8301527f737472696e672076657273696f6e2c000000000000000000000000000000000060398301527f6164647265737320766572696679696e67436f6e74726163740000000000000060488301527f2900000000000000000000000000000000000000000000000000000000000000606183015282516042818403018152606290920192839052815191929182918401908083835b6020831061034857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161030b565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902081565b6103b3848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843750610551945050505050565b15156103f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb90611d51565b60405180910390fd5b5050600091825260016020818152604080852073ffffffffffffffffffffffffffffffffffffffff9094168552929052912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169091179055565b60036020526000908152604090205460ff1681565b6000610470611029565b73ffffffffffffffffffffffffffffffffffffffff8181166000818152600260209081526040808320948916808452949091529081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168715151790555192935090917fa8656e308026eeabce8f0bc18048433252318ab80ac79da0b3d3d8697dfba89190610504908690611c6a565b60405180910390a3505050565b600260209081526000928352604080842090915290825290205460ff1681565b600160209081526000928352604080842090915290825290205460ff1681565b6000806000806000806000806000895111151561059a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb90611d91565b6105a389611072565b7f010000000000000000000000000000000000000000000000000000000000000090049650600960ff881610610605576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb90611d31565b8660ff16600981111561061457fe5b9550600086600981111561062457fe5b141561065c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb90611d81565b600186600981111561066a57fe5b14156106b2578851156106a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb90611dd1565b60009750610d69565b60028660098111156106c057fe5b14156107fb578851604114610701576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb90611d11565b88600081518110151561071057fe5b01602001517f010000000000000000000000000000000000000000000000000000000000000090819004810204945061075089600163ffffffff61113616565b935061076389602163ffffffff61113616565b925060018b868686604051600081526020016040526040516107889493929190611cdc565b60206040516020810390808403906000865af11580156107ac573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015173ffffffffffffffffffffffffffffffffffffffff8c81169082161499509250610d699050565b600386600981111561080957fe5b14156109af57885160411461084a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb90611d11565b88600081518110151561085957fe5b01602001517f010000000000000000000000000000000000000000000000000000000000000090819004810204945061089989600163ffffffff61113616565b93506108ac89602163ffffffff61113616565b925060018b60405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c0182600019166000191681526020019150506040516020818303038152906040526040518082805190602001908083835b6020831061094d57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610910565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260408051929094018290038220600083529101928390526107889450925089918991508890611cdc565b60048660098111156109bd57fe5b1415610a1c578851156109fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb90611dd1565b73ffffffffffffffffffffffffffffffffffffffff8a1633149750610d69565b6005866009811115610a2a57fe5b1415610add576040517f1626ba7e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b1690631626ba7e90610a84908e908d90600401611cbc565b602060405180830381600087803b158015610a9e57600080fd5b505af1158015610ab2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610ad6919081019061175a565b9750610d69565b6006866009811115610aeb57fe5b1415610b9857610afa89611181565b73ffffffffffffffffffffffffffffffffffffffff808c1660009081526002602090815260408083209385168352929052205490915060ff161515610b425760009750610d69565b6040517f9363470200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690639363470290610a84908e908e908e90600401611c86565b6007866009811115610ba657fe5b1415610be65760008b815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8e16845290915290205460ff169750610d69565b6008866009811115610bf457fe5b1415610d37578851604114610c35576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb90611d11565b886000815181101515610c4457fe5b01602001517f0100000000000000000000000000000000000000000000000000000000000000908190048102049450610c8489600163ffffffff61113616565b9350610c9789602163ffffffff61113616565b925060018b60405160200180807f19457468657265756d205369676e6564204d6573736167653a0a200000000000815250601b0182600019166000191681526020019150506040516020818303038152906040526040518082805190602001908083836020831061094d57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610910565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb90611d31565b505050505050509392505050565b6000610d84848484610551565b949350505050565b60045460009073ffffffffffffffffffffffffffffffffffffffff1615610ddf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb90611da1565b610e22610e1d888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437506111fa945050505050565b61143b565b60008181526003602052604090205490915060ff1615610e6e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb90611d41565b73ffffffffffffffffffffffffffffffffffffffff86163314610f3f57610ec6818785858080601f01602080910402602001604051908101604052809392919081815260200183838082843750610551945050505050565b1515610efe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb90611dc1565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff88161790555b6000818152600360205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555130908690869080838380828437820191505092505050600060405180830381855af49150501515610fd6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb90611d61565b5050600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555050505050565b60005481565b60045473ffffffffffffffffffffffffffffffffffffffff1681565b600454600090819073ffffffffffffffffffffffffffffffffffffffff161561106a5760045473ffffffffffffffffffffffffffffffffffffffff1661106c565b335b92915050565b60008082511115156110b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb90611d71565b815182907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019081106110e057fe5b016020015182517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01909252507f0100000000000000000000000000000000000000000000000000000000000000908190040290565b600081602001835110151515611178576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb90611d21565b50016020015190565b600060148251101515156111c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb90611db1565b6111cf8260148451036115bb565b82517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec019092525090565b604080517f5a65726f45785472616e73616374696f6e2800000000000000000000000000006020808301919091527f75696e743235362073616c742c0000000000000000000000000000000000000060328301527f61646472657373207369676e6572416464726573732c00000000000000000000603f8301527f627974657320646174610000000000000000000000000000000000000000000060558301527f2900000000000000000000000000000000000000000000000000000000000000605f830152825180830384018152606090920192839052815160009384938493909282918401908083835b6020831061132357805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016112e6565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260405191909301819003812089519097508995509093508392850191508083835b602083106113b957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161137c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040805192909401829003822097825281019a909a525073ffffffffffffffffffffffffffffffffffffffff97909716968801969096525050606085015250506080909120919050565b60006040805190810160405280600281526020017f1901000000000000000000000000000000000000000000000000000000000000815250600054836040516020018084805190602001908083835b602083106114c757805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161148a565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199092169116179052920194855250838101929092525060408051808403830181529281019081905282519293509182918401908083835b6020831061156b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161152e565b5181516020939093036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199091169216919091179052604051920182900390912095945050505050565b6000816014018351101515156115fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb90611db1565b50016014015173ffffffffffffffffffffffffffffffffffffffff1690565b60006116288235611e52565b9392505050565b60006116288235611e6b565b60006116288251611e6b565b60006116288235611e70565b600080601f8301841361166557600080fd5b50813567ffffffffffffffff81111561167d57600080fd5b60208301915083600182028301111561169557600080fd5b9250929050565b6000601f820183136116ad57600080fd5b81356116c06116bb82611e08565b611de1565b915080825260208301602083018583830111156116dc57600080fd5b6116e7838284611e79565b50505092915050565b6000806040838503121561170357600080fd5b600061170f858561161c565b92505060206117208582860161161c565b9150509250929050565b6000806040838503121561173d57600080fd5b6000611749858561161c565b92505060206117208582860161162f565b60006020828403121561176c57600080fd5b6000610d84848461163b565b60006020828403121561178a57600080fd5b6000610d848484611647565b600080604083850312156117a957600080fd5b600061170f8585611647565b600080600080606085870312156117cb57600080fd5b60006117d78787611647565b94505060206117e88782880161161c565b935050604085013567ffffffffffffffff81111561180557600080fd5b61181187828801611653565b95989497509550505050565b60008060006060848603121561183257600080fd5b600061183e8686611647565b935050602061184f8682870161161c565b925050604084013567ffffffffffffffff81111561186c57600080fd5b6118788682870161169c565b9150509250925092565b6000806000806000806080878903121561189b57600080fd5b60006118a78989611647565b96505060206118b889828a0161161c565b955050604087013567ffffffffffffffff8111156118d557600080fd5b6118e189828a01611653565b9450945050606087013567ffffffffffffffff81111561190057600080fd5b61190c89828a01611653565b92509250509295509295509295565b61192481611e52565b82525050565b61192481611e6b565b61192481611e70565b600061194782611e4e565b80845261195b816020860160208601611e85565b61196481611eb5565b9093016020019392505050565b601281527f4c454e4754485f36355f52455155495245440000000000000000000000000000602082015260400190565b602681527f475245415445525f4f525f455155414c5f544f5f33325f4c454e4754485f524560208201527f5155495245440000000000000000000000000000000000000000000000000000604082015260600190565b601581527f5349474e41545552455f554e535550504f525445440000000000000000000000602082015260400190565b600f81527f494e56414c49445f54585f484153480000000000000000000000000000000000602082015260400190565b601181527f494e56414c49445f5349474e4154555245000000000000000000000000000000602082015260400190565b601081527f4641494c45445f455845435554494f4e00000000000000000000000000000000602082015260400190565b602181527f475245415445525f5448414e5f5a45524f5f4c454e4754485f5245515549524560208201527f4400000000000000000000000000000000000000000000000000000000000000604082015260600190565b601181527f5349474e41545552455f494c4c4547414c000000000000000000000000000000602082015260400190565b601e81527f4c454e4754485f475245415445525f5448414e5f305f52455155495245440000602082015260400190565b601281527f5245454e5452414e43595f494c4c4547414c0000000000000000000000000000602082015260400190565b602681527f475245415445525f4f525f455155414c5f544f5f32305f4c454e4754485f524560208201527f5155495245440000000000000000000000000000000000000000000000000000604082015260600190565b601481527f494e56414c49445f54585f5349474e4154555245000000000000000000000000602082015260400190565b601181527f4c454e4754485f305f5245515549524544000000000000000000000000000000602082015260400190565b61192481611e73565b6020810161106c828461191b565b6020810161106c828461192a565b6020810161106c8284611933565b60608101611c948286611933565b611ca1602083018561191b565b8181036040830152611cb3818461193c565b95945050505050565b60408101611cca8285611933565b8181036020830152610d84818461193c565b60808101611cea8287611933565b611cf76020830186611c53565b611d046040830185611933565b611cb36060830184611933565b6020808252810161106c81611971565b6020808252810161106c816119a1565b6020808252810161106c816119f7565b6020808252810161106c81611a27565b6020808252810161106c81611a57565b6020808252810161106c81611a87565b6020808252810161106c81611ab7565b6020808252810161106c81611b0d565b6020808252810161106c81611b3d565b6020808252810161106c81611b6d565b6020808252810161106c81611b9d565b6020808252810161106c81611bf3565b6020808252810161106c81611c23565b60405181810167ffffffffffffffff81118282101715611e0057600080fd5b604052919050565b600067ffffffffffffffff821115611e1f57600080fd5b506020601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160190565b5190565b73ffffffffffffffffffffffffffffffffffffffff1690565b151590565b90565b60ff1690565b82818337506000910152565b60005b83811015611ea0578181015183820152602001611e88565b83811115611eaf576000848401525b50505050565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016905600a265627a7a72305820d5d1fc7cdf191938ed19ecc0f71f0409858a61003bc9c13ead5c692ec9ef07146c6578706572696d656e74616cf50037",
- "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xAE JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x2624B2D9 DUP2 EQ PUSH2 0xB3 JUMPI DUP1 PUSH4 0x3683EF8E EQ PUSH2 0xDE JUMPI DUP1 PUSH4 0x642F2EAF EQ PUSH2 0x100 JUMPI DUP1 PUSH4 0x77FCCE68 EQ PUSH2 0x12D JUMPI DUP1 PUSH4 0x7B8E3514 EQ PUSH2 0x14D JUMPI DUP1 PUSH4 0x82C174D0 EQ PUSH2 0x16D JUMPI DUP1 PUSH4 0x93634702 EQ PUSH2 0x18D JUMPI DUP1 PUSH4 0xABBA41CC EQ PUSH2 0x1AD JUMPI DUP1 PUSH4 0xBFC8BFCE EQ PUSH2 0x1CD JUMPI DUP1 PUSH4 0xE306F779 EQ PUSH2 0x1ED JUMPI DUP1 PUSH4 0xEEA086BA EQ PUSH2 0x202 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xBF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xC8 PUSH2 0x224 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD5 SWAP2 SWAP1 PUSH2 0x1C78 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xEA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFE PUSH2 0xF9 CALLDATASIZE PUSH1 0x4 PUSH2 0x17B5 JUMP JUMPDEST PUSH2 0x378 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x10C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x120 PUSH2 0x11B CALLDATASIZE PUSH1 0x4 PUSH2 0x1778 JUMP JUMPDEST PUSH2 0x451 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD5 SWAP2 SWAP1 PUSH2 0x1C6A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x139 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFE PUSH2 0x148 CALLDATASIZE PUSH1 0x4 PUSH2 0x172A JUMP JUMPDEST PUSH2 0x466 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x159 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x120 PUSH2 0x168 CALLDATASIZE PUSH1 0x4 PUSH2 0x16F0 JUMP JUMPDEST PUSH2 0x511 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x179 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x120 PUSH2 0x188 CALLDATASIZE PUSH1 0x4 PUSH2 0x1796 JUMP JUMPDEST PUSH2 0x531 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x199 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x120 PUSH2 0x1A8 CALLDATASIZE PUSH1 0x4 PUSH2 0x181D JUMP JUMPDEST PUSH2 0x551 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x120 PUSH2 0x1C8 CALLDATASIZE PUSH1 0x4 PUSH2 0x181D JUMP JUMPDEST PUSH2 0xD77 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFE PUSH2 0x1E8 CALLDATASIZE PUSH1 0x4 PUSH2 0x1882 JUMP JUMPDEST PUSH2 0xD8C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xC8 PUSH2 0x1007 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x20E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x217 PUSH2 0x100D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD5 SWAP2 SWAP1 PUSH2 0x1C5C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x454950373132446F6D61696E2800000000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x737472696E67206E616D652C0000000000000000000000000000000000000000 PUSH1 0x2D DUP4 ADD MSTORE PUSH32 0x737472696E672076657273696F6E2C0000000000000000000000000000000000 PUSH1 0x39 DUP4 ADD MSTORE PUSH32 0x6164647265737320766572696679696E67436F6E747261637400000000000000 PUSH1 0x48 DUP4 ADD MSTORE PUSH32 0x2900000000000000000000000000000000000000000000000000000000000000 PUSH1 0x61 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x42 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x62 SWAP1 SWAP3 ADD SWAP3 DUP4 SWAP1 MSTORE DUP2 MLOAD SWAP2 SWAP3 SWAP2 DUP3 SWAP2 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x348 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x30B JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 DUP2 JUMP JUMPDEST PUSH2 0x3B3 DUP5 DUP5 DUP5 DUP5 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY POP PUSH2 0x551 SWAP5 POP POP POP POP POP JUMP JUMPDEST ISZERO ISZERO PUSH2 0x3F4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EB SWAP1 PUSH2 0x1D51 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP6 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP5 AND DUP6 MSTORE SWAP3 SWAP1 MSTORE SWAP2 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x470 PUSH2 0x1029 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP10 AND DUP1 DUP5 MSTORE SWAP5 SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP8 ISZERO ISZERO OR SWAP1 SSTORE MLOAD SWAP3 SWAP4 POP SWAP1 SWAP2 PUSH32 0xA8656E308026EEABCE8F0BC18048433252318AB80AC79DA0B3D3D8697DFBA891 SWAP1 PUSH2 0x504 SWAP1 DUP7 SWAP1 PUSH2 0x1C6A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP10 MLOAD GT ISZERO ISZERO PUSH2 0x59A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EB SWAP1 PUSH2 0x1D91 JUMP JUMPDEST PUSH2 0x5A3 DUP10 PUSH2 0x1072 JUMP JUMPDEST PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DIV SWAP7 POP PUSH1 0x9 PUSH1 0xFF DUP9 AND LT PUSH2 0x605 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EB SWAP1 PUSH2 0x1D31 JUMP JUMPDEST DUP7 PUSH1 0xFF AND PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x614 JUMPI INVALID JUMPDEST SWAP6 POP PUSH1 0x0 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x624 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x65C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EB SWAP1 PUSH2 0x1D81 JUMP JUMPDEST PUSH1 0x1 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x66A JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x6B2 JUMPI DUP9 MLOAD ISZERO PUSH2 0x6A9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EB SWAP1 PUSH2 0x1DD1 JUMP JUMPDEST PUSH1 0x0 SWAP8 POP PUSH2 0xD69 JUMP JUMPDEST PUSH1 0x2 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x6C0 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x7FB JUMPI DUP9 MLOAD PUSH1 0x41 EQ PUSH2 0x701 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EB SWAP1 PUSH2 0x1D11 JUMP JUMPDEST DUP9 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x710 JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV DUP2 MUL DIV SWAP5 POP PUSH2 0x750 DUP10 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x1136 AND JUMP JUMPDEST SWAP4 POP PUSH2 0x763 DUP10 PUSH1 0x21 PUSH4 0xFFFFFFFF PUSH2 0x1136 AND JUMP JUMPDEST SWAP3 POP PUSH1 0x1 DUP12 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH2 0x788 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1CDC JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 PUSH1 0x0 DUP7 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x7AC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 DUP2 AND SWAP1 DUP3 AND EQ SWAP10 POP SWAP3 POP PUSH2 0xD69 SWAP1 POP JUMP JUMPDEST PUSH1 0x3 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x809 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x9AF JUMPI DUP9 MLOAD PUSH1 0x41 EQ PUSH2 0x84A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EB SWAP1 PUSH2 0x1D11 JUMP JUMPDEST DUP9 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x859 JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV DUP2 MUL DIV SWAP5 POP PUSH2 0x899 DUP10 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x1136 AND JUMP JUMPDEST SWAP4 POP PUSH2 0x8AC DUP10 PUSH1 0x21 PUSH4 0xFFFFFFFF PUSH2 0x1136 AND JUMP JUMPDEST SWAP3 POP PUSH1 0x1 DUP12 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP1 PUSH32 0x19457468657265756D205369676E6564204D6573736167653A0A333200000000 DUP2 MSTORE POP PUSH1 0x1C ADD DUP3 PUSH1 0x0 NOT AND PUSH1 0x0 NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x94D JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x910 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP5 ADD DUP3 SWAP1 SUB DUP3 KECCAK256 PUSH1 0x0 DUP4 MSTORE SWAP2 ADD SWAP3 DUP4 SWAP1 MSTORE PUSH2 0x788 SWAP5 POP SWAP3 POP DUP10 SWAP2 DUP10 SWAP2 POP DUP9 SWAP1 PUSH2 0x1CDC JUMP JUMPDEST PUSH1 0x4 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x9BD JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xA1C JUMPI DUP9 MLOAD ISZERO PUSH2 0x9FC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EB SWAP1 PUSH2 0x1DD1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND CALLER EQ SWAP8 POP PUSH2 0xD69 JUMP JUMPDEST PUSH1 0x5 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0xA2A JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xADD JUMPI PUSH1 0x40 MLOAD PUSH32 0x1626BA7E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND SWAP1 PUSH4 0x1626BA7E SWAP1 PUSH2 0xA84 SWAP1 DUP15 SWAP1 DUP14 SWAP1 PUSH1 0x4 ADD PUSH2 0x1CBC JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA9E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xAB2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0xAD6 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x175A JUMP JUMPDEST SWAP8 POP PUSH2 0xD69 JUMP JUMPDEST PUSH1 0x6 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0xAEB JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xB98 JUMPI PUSH2 0xAFA DUP10 PUSH2 0x1181 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP13 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP6 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF AND ISZERO ISZERO PUSH2 0xB42 JUMPI PUSH1 0x0 SWAP8 POP PUSH2 0xD69 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x9363470200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x93634702 SWAP1 PUSH2 0xA84 SWAP1 DUP15 SWAP1 DUP15 SWAP1 DUP15 SWAP1 PUSH1 0x4 ADD PUSH2 0x1C86 JUMP JUMPDEST PUSH1 0x7 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0xBA6 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xBE6 JUMPI PUSH1 0x0 DUP12 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP15 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP8 POP PUSH2 0xD69 JUMP JUMPDEST PUSH1 0x8 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0xBF4 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xD37 JUMPI DUP9 MLOAD PUSH1 0x41 EQ PUSH2 0xC35 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EB SWAP1 PUSH2 0x1D11 JUMP JUMPDEST DUP9 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xC44 JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV DUP2 MUL DIV SWAP5 POP PUSH2 0xC84 DUP10 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x1136 AND JUMP JUMPDEST SWAP4 POP PUSH2 0xC97 DUP10 PUSH1 0x21 PUSH4 0xFFFFFFFF PUSH2 0x1136 AND JUMP JUMPDEST SWAP3 POP PUSH1 0x1 DUP12 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP1 PUSH32 0x19457468657265756D205369676E6564204D6573736167653A0A200000000000 DUP2 MSTORE POP PUSH1 0x1B ADD DUP3 PUSH1 0x0 NOT AND PUSH1 0x0 NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x20 DUP4 LT PUSH2 0x94D JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x910 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EB SWAP1 PUSH2 0x1D31 JUMP JUMPDEST POP POP POP POP POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD84 DUP5 DUP5 DUP5 PUSH2 0x551 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0xDDF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EB SWAP1 PUSH2 0x1DA1 JUMP JUMPDEST PUSH2 0xE22 PUSH2 0xE1D DUP9 DUP9 DUP9 DUP9 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY POP PUSH2 0x11FA SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x143B JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF AND ISZERO PUSH2 0xE6E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EB SWAP1 PUSH2 0x1D41 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND CALLER EQ PUSH2 0xF3F JUMPI PUSH2 0xEC6 DUP2 DUP8 DUP6 DUP6 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY POP PUSH2 0x551 SWAP5 POP POP POP POP POP JUMP JUMPDEST ISZERO ISZERO PUSH2 0xEFE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EB SWAP1 PUSH2 0x1DC1 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND OR SWAP1 SSTORE JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD ADDRESS SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP1 DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY DUP3 ADD SWAP2 POP POP SWAP3 POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP ISZERO ISZERO PUSH2 0xFD6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EB SWAP1 PUSH2 0x1D61 JUMP JUMPDEST POP POP PUSH1 0x4 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x106A JUMPI PUSH1 0x4 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x106C JUMP JUMPDEST CALLER JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 MLOAD GT ISZERO ISZERO PUSH2 0x10B0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EB SWAP1 PUSH2 0x1D71 JUMP JUMPDEST DUP2 MLOAD DUP3 SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0x10E0 JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD DUP3 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP3 MSTORE POP PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x20 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x1178 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EB SWAP1 PUSH2 0x1D21 JUMP JUMPDEST POP ADD PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x14 DUP3 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x11C1 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EB SWAP1 PUSH2 0x1DB1 JUMP JUMPDEST PUSH2 0x11CF DUP3 PUSH1 0x14 DUP5 MLOAD SUB PUSH2 0x15BB JUMP JUMPDEST DUP3 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC ADD SWAP1 SWAP3 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x5A65726F45785472616E73616374696F6E280000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x75696E743235362073616C742C00000000000000000000000000000000000000 PUSH1 0x32 DUP4 ADD MSTORE PUSH32 0x61646472657373207369676E6572416464726573732C00000000000000000000 PUSH1 0x3F DUP4 ADD MSTORE PUSH32 0x6279746573206461746100000000000000000000000000000000000000000000 PUSH1 0x55 DUP4 ADD MSTORE PUSH32 0x2900000000000000000000000000000000000000000000000000000000000000 PUSH1 0x5F DUP4 ADD MSTORE DUP3 MLOAD DUP1 DUP4 SUB DUP5 ADD DUP2 MSTORE PUSH1 0x60 SWAP1 SWAP3 ADD SWAP3 DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH1 0x0 SWAP4 DUP5 SWAP4 DUP5 SWAP4 SWAP1 SWAP3 DUP3 SWAP2 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1323 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x12E6 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP4 ADD DUP2 SWAP1 SUB DUP2 KECCAK256 DUP10 MLOAD SWAP1 SWAP8 POP DUP10 SWAP6 POP SWAP1 SWAP4 POP DUP4 SWAP3 DUP6 ADD SWAP2 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x13B9 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x137C JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP5 ADD DUP3 SWAP1 SUB DUP3 KECCAK256 SWAP8 DUP3 MSTORE DUP2 ADD SWAP11 SWAP1 SWAP11 MSTORE POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP8 SWAP1 SWAP8 AND SWAP7 DUP9 ADD SWAP7 SWAP1 SWAP7 MSTORE POP POP PUSH1 0x60 DUP6 ADD MSTORE POP POP PUSH1 0x80 SWAP1 SWAP2 KECCAK256 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x0 SLOAD DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP5 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x14C7 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x148A JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP5 DUP6 MSTORE POP DUP4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP5 SUB DUP4 ADD DUP2 MSTORE SWAP3 DUP2 ADD SWAP1 DUP2 SWAP1 MSTORE DUP3 MLOAD SWAP3 SWAP4 POP SWAP2 DUP3 SWAP2 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x156B JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x152E JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 SWAP1 SWAP4 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP2 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP3 ADD DUP3 SWAP1 SUB SWAP1 SWAP2 KECCAK256 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x14 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x15FD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3EB SWAP1 PUSH2 0x1DB1 JUMP JUMPDEST POP ADD PUSH1 0x14 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1628 DUP3 CALLDATALOAD PUSH2 0x1E52 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1628 DUP3 CALLDATALOAD PUSH2 0x1E6B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1628 DUP3 MLOAD PUSH2 0x1E6B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1628 DUP3 CALLDATALOAD PUSH2 0x1E70 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x1F DUP4 ADD DUP5 SGT PUSH2 0x1665 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x167D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x1 DUP3 MUL DUP4 ADD GT ISZERO PUSH2 0x1695 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0x16AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x16C0 PUSH2 0x16BB DUP3 PUSH2 0x1E08 JUMP JUMPDEST PUSH2 0x1DE1 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP4 ADD DUP6 DUP4 DUP4 ADD GT ISZERO PUSH2 0x16DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x16E7 DUP4 DUP3 DUP5 PUSH2 0x1E79 JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1703 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x170F DUP6 DUP6 PUSH2 0x161C JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x1720 DUP6 DUP3 DUP7 ADD PUSH2 0x161C JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x173D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1749 DUP6 DUP6 PUSH2 0x161C JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x1720 DUP6 DUP3 DUP7 ADD PUSH2 0x162F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x176C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xD84 DUP5 DUP5 PUSH2 0x163B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x178A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xD84 DUP5 DUP5 PUSH2 0x1647 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x17A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x170F DUP6 DUP6 PUSH2 0x1647 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x17CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x17D7 DUP8 DUP8 PUSH2 0x1647 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x17E8 DUP8 DUP3 DUP9 ADD PUSH2 0x161C JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1805 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1811 DUP8 DUP3 DUP9 ADD PUSH2 0x1653 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1832 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x183E DUP7 DUP7 PUSH2 0x1647 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x184F DUP7 DUP3 DUP8 ADD PUSH2 0x161C JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x186C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1878 DUP7 DUP3 DUP8 ADD PUSH2 0x169C JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x189B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x18A7 DUP10 DUP10 PUSH2 0x1647 JUMP JUMPDEST SWAP7 POP POP PUSH1 0x20 PUSH2 0x18B8 DUP10 DUP3 DUP11 ADD PUSH2 0x161C JUMP JUMPDEST SWAP6 POP POP PUSH1 0x40 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x18D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x18E1 DUP10 DUP3 DUP11 ADD PUSH2 0x1653 JUMP JUMPDEST SWAP5 POP SWAP5 POP POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1900 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x190C DUP10 DUP3 DUP11 ADD PUSH2 0x1653 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH2 0x1924 DUP2 PUSH2 0x1E52 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x1924 DUP2 PUSH2 0x1E6B JUMP JUMPDEST PUSH2 0x1924 DUP2 PUSH2 0x1E70 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1947 DUP3 PUSH2 0x1E4E JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH2 0x195B DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x1E85 JUMP JUMPDEST PUSH2 0x1964 DUP2 PUSH2 0x1EB5 JUMP JUMPDEST SWAP1 SWAP4 ADD PUSH1 0x20 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x12 DUP2 MSTORE PUSH32 0x4C454E4754485F36355F52455155495245440000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F33325F4C454E4754485F5245 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x15 DUP2 MSTORE PUSH32 0x5349474E41545552455F554E535550504F525445440000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0xF DUP2 MSTORE PUSH32 0x494E56414C49445F54585F484153480000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x11 DUP2 MSTORE PUSH32 0x494E56414C49445F5349474E4154555245000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x10 DUP2 MSTORE PUSH32 0x4641494C45445F455845435554494F4E00000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x21 DUP2 MSTORE PUSH32 0x475245415445525F5448414E5F5A45524F5F4C454E4754485F52455155495245 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x4400000000000000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x11 DUP2 MSTORE PUSH32 0x5349474E41545552455F494C4C4547414C000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1E DUP2 MSTORE PUSH32 0x4C454E4754485F475245415445525F5448414E5F305F52455155495245440000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x12 DUP2 MSTORE PUSH32 0x5245454E5452414E43595F494C4C4547414C0000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x26 DUP2 MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F32305F4C454E4754485F5245 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x14 DUP2 MSTORE PUSH32 0x494E56414C49445F54585F5349474E4154555245000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x11 DUP2 MSTORE PUSH32 0x4C454E4754485F305F5245515549524544000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH2 0x1924 DUP2 PUSH2 0x1E73 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x106C DUP3 DUP5 PUSH2 0x191B JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x106C DUP3 DUP5 PUSH2 0x192A JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x106C DUP3 DUP5 PUSH2 0x1933 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x1C94 DUP3 DUP7 PUSH2 0x1933 JUMP JUMPDEST PUSH2 0x1CA1 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x191B JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x1CB3 DUP2 DUP5 PUSH2 0x193C JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x1CCA DUP3 DUP6 PUSH2 0x1933 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0xD84 DUP2 DUP5 PUSH2 0x193C JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x1CEA DUP3 DUP8 PUSH2 0x1933 JUMP JUMPDEST PUSH2 0x1CF7 PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x1C53 JUMP JUMPDEST PUSH2 0x1D04 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x1933 JUMP JUMPDEST PUSH2 0x1CB3 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x1933 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x106C DUP2 PUSH2 0x1971 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x106C DUP2 PUSH2 0x19A1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x106C DUP2 PUSH2 0x19F7 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x106C DUP2 PUSH2 0x1A27 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x106C DUP2 PUSH2 0x1A57 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x106C DUP2 PUSH2 0x1A87 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x106C DUP2 PUSH2 0x1AB7 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x106C DUP2 PUSH2 0x1B0D JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x106C DUP2 PUSH2 0x1B3D JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x106C DUP2 PUSH2 0x1B6D JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x106C DUP2 PUSH2 0x1B9D JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x106C DUP2 PUSH2 0x1BF3 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x106C DUP2 PUSH2 0x1C23 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x1E00 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1E1F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x1F SWAP2 SWAP1 SWAP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0xFF AND SWAP1 JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1EA0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1E88 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x1EAF JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP1 JUMP STOP LOG2 PUSH6 0x627A7A723058 KECCAK256 0xd5 0xd1 0xfc PUSH29 0xDF191938ED19ECC0F71F0409858A61003BC9C13EAD5C692EC9EF07146C PUSH6 0x78706572696D PUSH6 0x6E74616CF500 CALLDATACOPY ",
- "sourceMap": "759:412:10:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;943:221:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;943:221:6;;;;;;;;;;;;;;;;;;;;1493:360:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1493:360:0;;;;;;;;;;;968:45:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;968:45:1;;;;;;;;;;;;;;;;;2090:391:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2090:391:0;;;;;;;;;1087:71;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1087:71:0;;;;;;;;;967:63;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;967:63:0;;;;;;;;;2853:6765;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2853:6765:0;;;;;;;;;852:317:10;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;852:317:10;;;;;;;;;2887:1449:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2887:1449:1;;;;;;;;;1219:33:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1219:33:6;;;;1065:36:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1065:36:1;;;;;;;;;;;;943:221:6;1015:148;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;1015:148:6;;;;;;;;1005:159;;1015:148;;;;;1005:159;;;;1015:148;1005:159;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1005:159:6;;;;;;;;;;;;;;;;943:221;:::o;1493:360:0:-;1646:110;1680:4;1702:13;1733:9;;1646:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1646:16:0;;-1:-1:-1;;;;;1646:110:0:i;:::-;1625:174;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1809:15:0;;;;1842:4;1809:15;;;;;;;;:30;;;;;;;;;;;:37;;;;;;;;;1493:360::o;968:45:1:-;;;;;;;;;;;;;;;:::o;2090:391:0:-;2223:21;2247:26;:24;:26::i;:::-;2283:32;;;;;;;;:17;:32;;;;;;;;:50;;;;;;;;;;;;;;:61;;;;;;;;;;2359:115;2283:32;;-1:-1:-1;2283:50:0;;2359:115;;;;2283:61;;2359:115;;;;;;;;;;2090:391;;;:::o;1087:71::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;967:63::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2853:6765::-;3015:12;3305:22;3558:27;3679:7;3696:9;3715;3734:17;7463:24;3196:1;3177:9;:16;:20;3156:97;;;;;;;;;;;;;;;;3336:23;:9;:21;:23::i;:::-;3330:30;;;;-1:-1:-1;3416:29:0;3391:55;;;;3370:123;;;;;;;;;;;;;;3602:16;3588:31;;;;;;;;;;3558:61;-1:-1:-1;4101:21:0;4084:13;:38;;;;;;;;;4080:5188;;;4138:27;;;;;;;;;;;4080:5188;4447:21;4430:13;:38;;;;;;;;;4426:4842;;;4509:16;;:21;4484:97;;;;;;;;;;;;;;4605:5;;-1:-1:-1;4624:14:0;;4426:4842;4711:20;4694:13;:37;;;;;;;;;4690:4578;;;4772:16;;4792:2;4772:22;4747:99;;;;;;;;;;;;;;4870:9;4880:1;4870:12;;;;;;;;;;;;;;;;;;;;;4864:19;;-1:-1:-1;4901:24:0;:9;4923:1;4901:24;:21;:24;:::i;:::-;4897:28;-1:-1:-1;4943:25:0;:9;4965:2;4943:25;:21;:25;:::i;:::-;4939:29;;4994:24;5004:4;5010:1;5013;5016;4994:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;4994:24:0;;;;;5042:26;;;;;;;;;-1:-1:-1;4994:24:0;-1:-1:-1;5082:14:0;;-1:-1:-1;5082:14:0;4690:4578;5173:21;5156:13;:38;;;;;;;;;5152:4116;;;5235:16;;5255:2;5235:22;5210:99;;;;;;;;;;;;;;5333:9;5343:1;5333:12;;;;;;;;;;;;;;;;;;;;;5327:19;;-1:-1:-1;5364:24:0;:9;5386:1;5364:24;:21;:24;:::i;:::-;5360:28;-1:-1:-1;5406:25:0;:9;5428:2;5406:25;:21;:25;:::i;:::-;5402:29;;5457:225;5588:4;5494:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;5494:116:0;;;5484:127;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;365:33;;5484:127:0;;;;;;;;;;;;-1:-1:-1;5457:225:0;;;;;;;;;;-1:-1:-1;5484:127:0;-1:-1:-1;5629:1:0;;5648;;-1:-1:-1;5667:1:0;;5457:225;;5152:4116;6350:20;6333:13;:37;;;;;;;;;6329:2939;;;6411:16;;:21;6386:97;;;;;;;;;;;;;;6507:27;;;6524:10;6507:27;;-1:-1:-1;6548:14:0;;6329:2939;6732:20;6715:13;:37;;;;;;;;;6711:2557;;;6778:56;;;;;:39;;;;;;:56;;6818:4;;6824:9;;6778:56;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6778:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6778:56:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;6778:56:0;;;;;;;;;6768:66;-1:-1:-1;6848:14:0;;6711:2557;7361:23;7344:13;:40;;;;;;;;;7340:1928;;;7490:26;:9;:24;:26::i;:::-;7601:32;;;;;;;;:17;:32;;;;;;;;:50;;;;;;;;;;7463:53;;-1:-1:-1;7601:50:0;;7600:51;7596:102;;;7678:5;7671:12;;;;7596:102;7721:139;;;;;:45;;;;;;:139;;7784:4;;7806:13;;7837:9;;7721:139;;;;7340:1928;7996:23;7979:13;:40;;;;;;;;;7975:1293;;;8045:15;;;;:9;:15;;;;;;;;:30;;;;;;;;;;;;;;-1:-1:-1;8089:14:0;;7975:1293;8669:20;8652:13;:37;;;;;;;;;8648:620;;;8730:16;;8750:2;8730:22;8705:99;;;;;;;;;;;;;;8828:9;8838:1;8828:12;;;;;;;;;;;;;;;;;;;;;8822:19;;-1:-1:-1;8859:24:0;:9;8881:1;8859:24;:21;:24;:::i;:::-;8855:28;-1:-1:-1;8901:25:0;:9;8923:2;8901:25;:21;:25;:::i;:::-;8897:29;;8952:227;9085:4;8989:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;8989:118:0;;;8979:129;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;8648:620:0;9580:31;;;;;;;;;;;2853:6765;;;;;;;;;;;;;:::o;852:317:10:-;1013:12;1051:87;1081:4;1099:6;1119:9;1051:16;:87::i;:::-;1041:97;852:317;-1:-1:-1;;;;852:317:10:o;2887:1449:1:-;3101:21;;3191:23;;3101:35;:21;:35;3080:100;;;;;;;;;;;;;;3217:113;3235:94;3270:4;3288:13;3315:4;;3235:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3235:21:1;;-1:-1:-1;;;;;3235:94:1:i;:::-;3217:17;:113::i;:::-;3417:29;;;;:12;:29;;;;;;3191:139;;-1:-1:-1;3417:29:1;;3416:30;3395:92;;;;;;;;;;;;;;3573:27;;;3590:10;3573:27;3569:410;;3675:137;3713:15;3750:13;3785:9;;3675:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3675:16:1;;-1:-1:-1;;;;;3675:137:1:i;:::-;3650:216;;;;;;;;;;;;;;;;3931:21;:37;;;;;;;;;;3569:410;4020:29;;;;:12;:29;;;;;;;:36;;;;4052:4;4020:36;;;4087:32;4095:4;;4114;;;;4087:32;4114:4;;;;4087:32;;;;;;;;;;;;;;;;;;;;;;;;4066:95;;;;;;;;;;;;;;;;-1:-1:-1;;4295:21:1;:34;;;;;;-1:-1:-1;;;;;2887:1449:1:o;1219:33:6:-;;;;:::o;1065:36:1:-;;;;;;:::o;4780:241::-;4911:21;;4863:7;;;;4911:35;:21;:35;:72;;4962:21;;;;4911:72;;;4949:10;4911:72;4886:97;4780:241;-1:-1:-1;;4780:241:1:o;8118:448:11:-;8202:13;8263:1;8252;:8;:12;8231:92;;;;;;;;;;;;;;;;8373:8;;8371:1;;8373:12;;;;8371:15;;;;;;;;;;8485:8;;8481:16;;8510:17;;;-1:-1:-1;8371:15:11;;;;;;;8118:448::o;13049:490::-;13170:14;13233:5;13241:2;13233:10;13221:1;:8;:22;;13200:107;;;;;;;;;;;;;;;;-1:-1:-1;13486:13:11;13388:2;13486:13;13480:20;;13049:490::o;8761:482::-;8848:14;8911:2;8899:1;:8;:14;;8878:99;;;;;;;;;;;;;;;;9029:29;9041:1;9055:2;9044:1;:8;:13;9029:11;:29::i;:::-;9161:8;;9157:17;;9187;;;-1:-1:-1;9020:38:11;8761:482::o;1669:893:1:-;1228:146;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;6:49;;1228:146:1;;;;;;;;1218:157;;1833:14;;;;;;1228:146;;;;1218:157;;;;1228:146;1218:157;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;365:33;;1218:157:1;;;;;;;;;;;1950:15;;1218:157;;-1:-1:-1;1950:15:1;;-1:-1:-1;1218:157:1;;-1:-1:-1;1218:157:1;;1950:15;;;-1:-1:-1;1950:15:1;1218:157;1950:15;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;365:33;;1950:15:1;;;;;;;;;;;;2263:26;;;2309:15;;2302:29;;;;-1:-1:-1;2387:42:1;2368:62;;;;2351:15;;;2344:87;;;;-1:-1:-1;;2463:2:1;2451:15;;2444:33;-1:-1:-1;;2518:3:1;2500:22;;;;1669:893;-1:-1:-1;1669:893:1:o;1737:205:6:-;1831:7;1888:13;;;;;;;;;;;;;;;;;;1903:18;;1923:10;1871:63;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;365:33;;1871:63:6;;;;;-1:-1:-1;1871:63:6;;;;;;;-1:-1:-1;1871:63:6;;;26:21:-1;;;22:32;;6:49;;1871:63:6;;;;;;;1861:74;;1871:63;;-1:-1:-1;1871:63:6;;;1861:74;;;;1871:63;1861:74;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;;;;365:33;;1861:74:6;;;;;;;;;;;;-1:-1:-1;;;;;1737:205:6:o;10073:886:11:-;10194:14;10257:5;10265:2;10257:10;10245:1;:8;:22;;10224:135;;;;;;;;;;;;;;;;-1:-1:-1;10861:13:11;10606:2;10861:13;10855:20;10877:42;10851:69;;10073:886::o;5:118:-1:-;;72:46;110:6;97:20;72:46;;;63:55;57:66;-1:-1;;;57:66;130:112;;194:43;229:6;216:20;194:43;;249:116;;324:36;352:6;346:13;324:36;;372:118;;439:46;477:6;464:20;439:46;;511:335;;;618:4;606:17;;602:27;-1:-1;592:2;;643:1;640;633:12;592:2;-1:-1;663:20;;703:18;692:30;;689:2;;;735:1;732;725:12;689:2;769:4;761:6;757:17;745:29;;819:3;812;804:6;800:16;790:8;786:31;783:40;780:2;;;836:1;833;826:12;780:2;585:261;;;;;;855:440;;949:4;937:17;;933:27;-1:-1;923:2;;974:1;971;964:12;923:2;1011:6;998:20;1033:64;1048:48;1089:6;1048:48;;;1033:64;;;1024:73;;1117:6;1110:5;1103:21;1153:4;1145:6;1141:17;1186:4;1179:5;1175:16;1221:3;1212:6;1207:3;1203:16;1200:25;1197:2;;;1238:1;1235;1228:12;1197:2;1248:41;1282:6;1277:3;1272;1248:41;;;916:379;;;;;;;;1428:366;;;1549:2;1537:9;1528:7;1524:23;1520:32;1517:2;;;1565:1;1562;1555:12;1517:2;1600:1;1617:53;1662:7;1642:9;1617:53;;;1607:63;;1579:97;1707:2;1725:53;1770:7;1761:6;1750:9;1746:22;1725:53;;;1715:63;;1686:98;1511:283;;;;;;1801:360;;;1919:2;1907:9;1898:7;1894:23;1890:32;1887:2;;;1935:1;1932;1925:12;1887:2;1970:1;1987:53;2032:7;2012:9;1987:53;;;1977:63;;1949:97;2077:2;2095:50;2137:7;2128:6;2117:9;2113:22;2095:50;;2168:257;;2280:2;2268:9;2259:7;2255:23;2251:32;2248:2;;;2296:1;2293;2286:12;2248:2;2331:1;2348:61;2401:7;2381:9;2348:61;;2432:241;;2536:2;2524:9;2515:7;2511:23;2507:32;2504:2;;;2552:1;2549;2542:12;2504:2;2587:1;2604:53;2649:7;2629:9;2604:53;;2680:366;;;2801:2;2789:9;2780:7;2776:23;2772:32;2769:2;;;2817:1;2814;2807:12;2769:2;2852:1;2869:53;2914:7;2894:9;2869:53;;3053:615;;;;;3210:2;3198:9;3189:7;3185:23;3181:32;3178:2;;;3226:1;3223;3216:12;3178:2;3261:1;3278:53;3323:7;3303:9;3278:53;;;3268:63;;3240:97;3368:2;3386:53;3431:7;3422:6;3411:9;3407:22;3386:53;;;3376:63;;3347:98;3504:2;3493:9;3489:18;3476:32;3528:18;3520:6;3517:30;3514:2;;;3560:1;3557;3550:12;3514:2;3588:64;3644:7;3635:6;3624:9;3620:22;3588:64;;;3172:496;;;;-1:-1;3570:82;-1:-1;;;;3172:496;3675:595;;;;3822:2;3810:9;3801:7;3797:23;3793:32;3790:2;;;3838:1;3835;3828:12;3790:2;3873:1;3890:53;3935:7;3915:9;3890:53;;;3880:63;;3852:97;3980:2;3998:53;4043:7;4034:6;4023:9;4019:22;3998:53;;;3988:63;;3959:98;4116:2;4105:9;4101:18;4088:32;4140:18;4132:6;4129:30;4126:2;;;4172:1;4169;4162:12;4126:2;4192:62;4246:7;4237:6;4226:9;4222:22;4192:62;;;4182:72;;4067:193;3784:486;;;;;;4277:865;;;;;;;4470:3;4458:9;4449:7;4445:23;4441:33;4438:2;;;4487:1;4484;4477:12;4438:2;4522:1;4539:53;4584:7;4564:9;4539:53;;;4529:63;;4501:97;4629:2;4647:53;4692:7;4683:6;4672:9;4668:22;4647:53;;;4637:63;;4608:98;4765:2;4754:9;4750:18;4737:32;4789:18;4781:6;4778:30;4775:2;;;4821:1;4818;4811:12;4775:2;4849:64;4905:7;4896:6;4885:9;4881:22;4849:64;;;4831:82;;;;4716:203;4978:2;4967:9;4963:18;4950:32;5002:18;4994:6;4991:30;4988:2;;;5034:1;5031;5024:12;4988:2;5062:64;5118:7;5109:6;5098:9;5094:22;5062:64;;;5044:82;;;;4929:203;4432:710;;;;;;;;;5149:110;5222:31;5247:5;5222:31;;;5217:3;5210:44;5204:55;;;5266:101;5333:28;5355:5;5333:28;;5374:110;5447:31;5472:5;5447:31;;5491:297;;5591:38;5623:5;5591:38;;;5646:6;5641:3;5634:19;5658:63;5714:6;5707:4;5702:3;5698:14;5691:4;5684:5;5680:16;5658:63;;;5753:29;5775:6;5753:29;;;5733:50;;;5746:4;5733:50;;5571:217;-1:-1;;;5571:217;5796:296;5951:2;5939:15;;5988:66;5983:2;5974:12;;5967:88;6083:2;6074:12;;5932:160;6101:397;6256:2;6244:15;;6293:66;6288:2;6279:12;;6272:88;6394:66;6389:2;6380:12;;6373:88;6489:2;6480:12;;6237:261;6507:296;6662:2;6650:15;;6699:66;6694:2;6685:12;;6678:88;6794:2;6785:12;;6643:160;6812:296;6967:2;6955:15;;7004:66;6999:2;6990:12;;6983:88;7099:2;7090:12;;6948:160;7117:296;7272:2;7260:15;;7309:66;7304:2;7295:12;;7288:88;7404:2;7395:12;;7253:160;7422:296;7577:2;7565:15;;7614:66;7609:2;7600:12;;7593:88;7709:2;7700:12;;7558:160;7727:397;7882:2;7870:15;;7919:66;7914:2;7905:12;;7898:88;8020:66;8015:2;8006:12;;7999:88;8115:2;8106:12;;7863:261;8133:296;8288:2;8276:15;;8325:66;8320:2;8311:12;;8304:88;8420:2;8411:12;;8269:160;8438:296;8593:2;8581:15;;8630:66;8625:2;8616:12;;8609:88;8725:2;8716:12;;8574:160;8743:296;8898:2;8886:15;;8935:66;8930:2;8921:12;;8914:88;9030:2;9021:12;;8879:160;9048:397;9203:2;9191:15;;9240:66;9235:2;9226:12;;9219:88;9341:66;9336:2;9327:12;;9320:88;9436:2;9427:12;;9184:261;9454:296;9609:2;9597:15;;9646:66;9641:2;9632:12;;9625:88;9741:2;9732:12;;9590:160;9759:296;9914:2;9902:15;;9951:66;9946:2;9937:12;;9930:88;10046:2;10037:12;;9895:160;10063:104;10132:29;10155:5;10132:29;;10174:193;10282:2;10267:18;;10296:61;10271:9;10330:6;10296:61;;10374:181;10476:2;10461:18;;10490:55;10465:9;10518:6;10490:55;;10562:193;10670:2;10655:18;;10684:61;10659:9;10718:6;10684:61;;10762:479;10944:2;10929:18;;10958:61;10933:9;10992:6;10958:61;;;11030:62;11088:2;11077:9;11073:18;11064:6;11030:62;;;11140:9;11134:4;11130:20;11125:2;11114:9;11110:18;11103:48;11165:66;11226:4;11217:6;11165:66;;;11157:74;10915:326;-1:-1;;;;;10915:326;11248:378;11402:2;11387:18;;11416:61;11391:9;11450:6;11416:61;;;11525:9;11519:4;11515:20;11510:2;11499:9;11495:18;11488:48;11550:66;11611:4;11602:6;11550:66;;11633:489;11821:3;11806:19;;11836:61;11810:9;11870:6;11836:61;;;11908:58;11962:2;11951:9;11947:18;11938:6;11908:58;;;11977:62;12035:2;12024:9;12020:18;12011:6;11977:62;;;12050;12108:2;12097:9;12093:18;12084:6;12050:62;;12129:387;12310:2;12324:47;;;12295:18;;12385:121;12295:18;12385:121;;12523:387;12704:2;12718:47;;;12689:18;;12779:121;12689:18;12779:121;;12917:387;13098:2;13112:47;;;13083:18;;13173:121;13083:18;13173:121;;13311:387;13492:2;13506:47;;;13477:18;;13567:121;13477:18;13567:121;;13705:387;13886:2;13900:47;;;13871:18;;13961:121;13871:18;13961:121;;14099:387;14280:2;14294:47;;;14265:18;;14355:121;14265:18;14355:121;;14493:387;14674:2;14688:47;;;14659:18;;14749:121;14659:18;14749:121;;14887:387;15068:2;15082:47;;;15053:18;;15143:121;15053:18;15143:121;;15281:387;15462:2;15476:47;;;15447:18;;15537:121;15447:18;15537:121;;15675:387;15856:2;15870:47;;;15841:18;;15931:121;15841:18;15931:121;;16069:387;16250:2;16264:47;;;16235:18;;16325:121;16235:18;16325:121;;16463:387;16644:2;16658:47;;;16629:18;;16719:121;16629:18;16719:121;;16857:387;17038:2;17052:47;;;17023:18;;17113:121;17023:18;17113:121;;17251:256;17313:2;17307:9;17339:17;;;17414:18;17399:34;;17435:22;;;17396:62;17393:2;;;17471:1;17468;17461:12;17393:2;17487;17480:22;17291:216;;-1:-1;17291:216;17514:258;;17657:18;17649:6;17646:30;17643:2;;;17689:1;17686;17679:12;17643:2;-1:-1;17762:4;17733;17710:17;;;;17729:9;17706:33;17752:15;;17580:192;17779:91;17853:12;;17837:33;17877:128;17957:42;17946:54;;17929:76;18012:92;18085:13;18078:21;;18061:43;18111:79;18180:5;18163:27;18197:88;18275:4;18264:16;;18247:38;18699:145;18780:6;18775:3;18770;18757:30;-1:-1;18836:1;18818:16;;18811:27;18750:94;18853:268;18918:1;18925:101;18939:6;18936:1;18933:13;18925:101;;;19006:11;;;19000:18;18987:11;;;18980:39;18961:2;18954:10;18925:101;;;19041:6;19038:1;19035:13;19032:2;;;19106:1;19097:6;19092:3;19088:16;19081:27;19032:2;18902:219;;;;;19129:97;19217:2;19197:14;19213:7;19193:28;;19177:49"
+ "object": "0x6080604052600436106100ae5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416632624b2d981146100b35780633683ef8e146100da578063642f2eaf1461011a57806377fcce68146101465780637b8e35141461017957806382c174d0146101ad57806393634702146101de578063abba41cc14610254578063bfc8bfce146102ca578063e306f77914610314578063eea086ba14610329575b600080fd5b3480156100bf57600080fd5b506100c8610367565b60408051918252519081900360200190f35b3480156100e657600080fd5b5061011860048035906024803573ffffffffffffffffffffffffffffffffffffffff16916044359182019101356104bb565b005b34801561012657600080fd5b506101326004356105c0565b604080519115158252519081900360200190f35b34801561015257600080fd5b5061011873ffffffffffffffffffffffffffffffffffffffff6004351660243515156105d5565b34801561018557600080fd5b5061013273ffffffffffffffffffffffffffffffffffffffff6004358116906024351661067e565b3480156101b957600080fd5b5061013260043573ffffffffffffffffffffffffffffffffffffffff6024351661069e565b3480156101ea57600080fd5b50604080516020600460443581810135601f8101849004840285018401909552848452610132948235946024803573ffffffffffffffffffffffffffffffffffffffff16953695946064949201919081908401838280828437509497506106be9650505050505050565b34801561026057600080fd5b50604080516020600460443581810135601f8101849004840285018401909552848452610132948235946024803573ffffffffffffffffffffffffffffffffffffffff169536959460649492019190819084018382808284375094975061126d9650505050505050565b3480156102d657600080fd5b5061011860048035906024803573ffffffffffffffffffffffffffffffffffffffff1691604435808301929082013591606435918201910135611282565b34801561032057600080fd5b506100c86115ef565b34801561033557600080fd5b5061033e6115f5565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b604080517f454950373132446f6d61696e28000000000000000000000000000000000000006020808301919091527f737472696e67206e616d652c0000000000000000000000000000000000000000602d8301527f737472696e672076657273696f6e2c000000000000000000000000000000000060398301527f6164647265737320766572696679696e67436f6e74726163740000000000000060488301527f2900000000000000000000000000000000000000000000000000000000000000606183015282516042818403018152606290920192839052815191929182918401908083835b6020831061048b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161044e565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902081565b6104f6848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437506106be945050505050565b151561056357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f494e56414c49445f5349474e4154555245000000000000000000000000000000604482015290519081900360640190fd5b5050600091825260016020818152604080852073ffffffffffffffffffffffffffffffffffffffff9094168552929052912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169091179055565b60036020526000908152604090205460ff1681565b60006105df611611565b73ffffffffffffffffffffffffffffffffffffffff81811660008181526002602090815260408083209489168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001688151590811790915582519081529151949550929391927fa8656e308026eeabce8f0bc18048433252318ab80ac79da0b3d3d8697dfba89192918290030190a3505050565b600260209081526000928352604080842090915290825290205460ff1681565b600160209081526000928352604080842090915290825290205460ff1681565b6000806000806000806000806000895111151561073c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4c454e4754485f475245415445525f5448414e5f305f52455155495245440000604482015290519081900360640190fd5b6107458961165a565b7f010000000000000000000000000000000000000000000000000000000000000090049650600960ff8816106107dc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5349474e41545552455f554e535550504f525445440000000000000000000000604482015290519081900360640190fd5b8660ff1660098111156107eb57fe5b955060008660098111156107fb57fe5b141561086857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f5349474e41545552455f494c4c4547414c000000000000000000000000000000604482015290519081900360640190fd5b600186600981111561087657fe5b14156108f3578851156108ea57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4c454e4754485f305f5245515549524544000000000000000000000000000000604482015290519081900360640190fd5b6000975061125f565b600286600981111561090157fe5b1415610aa157885160411461097757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4c454e4754485f36355f52455155495245440000000000000000000000000000604482015290519081900360640190fd5b88600081518110151561098657fe5b01602001517f01000000000000000000000000000000000000000000000000000000000000009081900481020494506109c689600163ffffffff61177916565b93506109d989602163ffffffff61177916565b925060018b868686604051600081526020016040526040518085600019166000191681526020018460ff1660ff1681526020018360001916600019168152602001826000191660001916815260200194505050505060206040516020810390808403906000865af1158015610a52573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015173ffffffffffffffffffffffffffffffffffffffff8c8116908216149950925061125f9050565b6003866009811115610aaf57fe5b1415610ce0578851604114610b2557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4c454e4754485f36355f52455155495245440000000000000000000000000000604482015290519081900360640190fd5b886000815181101515610b3457fe5b01602001517f0100000000000000000000000000000000000000000000000000000000000000908190048102049450610b7489600163ffffffff61177916565b9350610b8789602163ffffffff61177916565b925060018b60405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c0182600019166000191681526020019150506040516020818303038152906040526040518082805190602001908083835b60208310610c2857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610beb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040805192909401829003822060008084528383018087529190915260ff8d1683860152606083018c9052608083018b9052935160a080840197509195507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019492819003909101925090865af1158015610a52573d6000803e3d6000fd5b6004866009811115610cee57fe5b1415610d8257885115610d6257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4c454e4754485f305f5245515549524544000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8a163314975061125f565b6005866009811115610d9057fe5b1415610eaa578973ffffffffffffffffffffffffffffffffffffffff16631626ba7e8c8b6040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610e2a578181015183820152602001610e12565b50505050905090810190601f168015610e575780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b158015610e7757600080fd5b505af1158015610e8b573d6000803e3d6000fd5b505050506040513d6020811015610ea157600080fd5b5051975061125f565b6006866009811115610eb857fe5b141561102457610ec78961181f565b73ffffffffffffffffffffffffffffffffffffffff808c1660009081526002602090815260408083209385168352929052205490915060ff161515610f0f576000975061125f565b8073ffffffffffffffffffffffffffffffffffffffff1663936347028c8c8c6040518463ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018084600019166000191681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610fd6578181015183820152602001610fbe565b50505050905090810190601f1680156110035780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b158015610e7757600080fd5b600786600981111561103257fe5b14156110725760008b815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8e16845290915290205460ff16975061125f565b600886600981111561108057fe5b14156111f85788516041146110f657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4c454e4754485f36355f52455155495245440000000000000000000000000000604482015290519081900360640190fd5b88600081518110151561110557fe5b01602001517f010000000000000000000000000000000000000000000000000000000000000090819004810204945061114589600163ffffffff61177916565b935061115889602163ffffffff61177916565b925060018b60405160200180807f19457468657265756d205369676e6564204d6573736167653a0a200000000000815250601b01826000191660001916815260200191505060405160208183030381529060405260405180828051906020019080838360208310610c2857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610beb565b604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5349474e41545552455f554e535550504f525445440000000000000000000000604482015290519081900360640190fd5b505050505050509392505050565b600061127a8484846106be565b949350505050565b60045460009073ffffffffffffffffffffffffffffffffffffffff161561130a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f5245454e5452414e43595f494c4c4547414c0000000000000000000000000000604482015290519081900360640190fd5b61134d611348888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437506118f3945050505050565b611b34565b60008181526003602052604090205490915060ff16156113ce57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f494e56414c49445f54585f484153480000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff861633146114d457611426818785858080601f016020809104026020016040519081016040528093929190818152602001838380828437506106be945050505050565b151561149357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f494e56414c49445f54585f5349474e4154555245000000000000000000000000604482015290519081900360640190fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff88161790555b6000818152600360205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555130908690869080838380828437820191505092505050600060405180830381855af491505015156115a057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4641494c45445f455845435554494f4e00000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff861633146115e657600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555b50505050505050565b60005481565b60045473ffffffffffffffffffffffffffffffffffffffff1681565b600454600090819073ffffffffffffffffffffffffffffffffffffffff16156116525760045473ffffffffffffffffffffffffffffffffffffffff16611654565b335b92915050565b60008082511115156116f357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f475245415445525f5448414e5f5a45524f5f4c454e4754485f5245515549524560448201527f4400000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b815182907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061172357fe5b016020015182517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01909252507f0100000000000000000000000000000000000000000000000000000000000000908190040290565b60008160200183511015151561181657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f475245415445525f4f525f455155414c5f544f5f33325f4c454e4754485f524560448201527f5155495245440000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b50016020015190565b600060148251101515156118ba57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f475245415445525f4f525f455155414c5f544f5f32305f4c454e4754485f524560448201527f5155495245440000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6118c8826014845103611cb4565b82517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec019092525090565b604080517f5a65726f45785472616e73616374696f6e2800000000000000000000000000006020808301919091527f75696e743235362073616c742c0000000000000000000000000000000000000060328301527f61646472657373207369676e6572416464726573732c00000000000000000000603f8301527f627974657320646174610000000000000000000000000000000000000000000060558301527f2900000000000000000000000000000000000000000000000000000000000000605f830152825180830384018152606090920192839052815160009384938493909282918401908083835b60208310611a1c57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016119df565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260405191909301819003812089519097508995509093508392850191508083835b60208310611ab257805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611a75565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040805192909401829003822097825281019a909a525073ffffffffffffffffffffffffffffffffffffffff97909716968801969096525050606085015250506080909120919050565b60006040805190810160405280600281526020017f1901000000000000000000000000000000000000000000000000000000000000815250600054836040516020018084805190602001908083835b60208310611bc057805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611b83565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199092169116179052920194855250838101929092525060408051808403830181529281019081905282519293509182918401908083835b60208310611c6457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611c27565b5181516020939093036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199091169216919091179052604051920182900390912095945050505050565b600081601401835110151515611d5157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f475245415445525f4f525f455155414c5f544f5f32305f4c454e4754485f524560448201527f5155495245440000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b50016014015173ffffffffffffffffffffffffffffffffffffffff16905600a165627a7a72305820c5570d84fe4a5b260f7dc2103749042b80976bea15de6f0e4c8ef4e5fe99bec80029",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xAE JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x2624B2D9 DUP2 EQ PUSH2 0xB3 JUMPI DUP1 PUSH4 0x3683EF8E EQ PUSH2 0xDA JUMPI DUP1 PUSH4 0x642F2EAF EQ PUSH2 0x11A JUMPI DUP1 PUSH4 0x77FCCE68 EQ PUSH2 0x146 JUMPI DUP1 PUSH4 0x7B8E3514 EQ PUSH2 0x179 JUMPI DUP1 PUSH4 0x82C174D0 EQ PUSH2 0x1AD JUMPI DUP1 PUSH4 0x93634702 EQ PUSH2 0x1DE JUMPI DUP1 PUSH4 0xABBA41CC EQ PUSH2 0x254 JUMPI DUP1 PUSH4 0xBFC8BFCE EQ PUSH2 0x2CA JUMPI DUP1 PUSH4 0xE306F779 EQ PUSH2 0x314 JUMPI DUP1 PUSH4 0xEEA086BA EQ PUSH2 0x329 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xBF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xC8 PUSH2 0x367 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x118 PUSH1 0x4 DUP1 CALLDATALOAD SWAP1 PUSH1 0x24 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH1 0x44 CALLDATALOAD SWAP2 DUP3 ADD SWAP2 ADD CALLDATALOAD PUSH2 0x4BB JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x126 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x132 PUSH1 0x4 CALLDATALOAD PUSH2 0x5C0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x152 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x118 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD ISZERO ISZERO PUSH2 0x5D5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x185 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x132 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH2 0x67E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x132 PUSH1 0x4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD AND PUSH2 0x69E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 PUSH1 0x44 CALLDATALOAD DUP2 DUP2 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x132 SWAP5 DUP3 CALLDATALOAD SWAP5 PUSH1 0x24 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP6 CALLDATASIZE SWAP6 SWAP5 PUSH1 0x64 SWAP5 SWAP3 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x6BE SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x260 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 PUSH1 0x44 CALLDATALOAD DUP2 DUP2 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x132 SWAP5 DUP3 CALLDATALOAD SWAP5 PUSH1 0x24 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP6 CALLDATASIZE SWAP6 SWAP5 PUSH1 0x64 SWAP5 SWAP3 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x126D SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x118 PUSH1 0x4 DUP1 CALLDATALOAD SWAP1 PUSH1 0x24 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH1 0x44 CALLDATALOAD DUP1 DUP4 ADD SWAP3 SWAP1 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x64 CALLDATALOAD SWAP2 DUP3 ADD SWAP2 ADD CALLDATALOAD PUSH2 0x1282 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x320 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xC8 PUSH2 0x15EF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x335 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33E PUSH2 0x15F5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x454950373132446F6D61696E2800000000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x737472696E67206E616D652C0000000000000000000000000000000000000000 PUSH1 0x2D DUP4 ADD MSTORE PUSH32 0x737472696E672076657273696F6E2C0000000000000000000000000000000000 PUSH1 0x39 DUP4 ADD MSTORE PUSH32 0x6164647265737320766572696679696E67436F6E747261637400000000000000 PUSH1 0x48 DUP4 ADD MSTORE PUSH32 0x2900000000000000000000000000000000000000000000000000000000000000 PUSH1 0x61 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x42 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x62 SWAP1 SWAP3 ADD SWAP3 DUP4 SWAP1 MSTORE DUP2 MLOAD SWAP2 SWAP3 SWAP2 DUP3 SWAP2 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x48B JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x44E JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 DUP2 JUMP JUMPDEST PUSH2 0x4F6 DUP5 DUP5 DUP5 DUP5 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY POP PUSH2 0x6BE SWAP5 POP POP POP POP POP JUMP JUMPDEST ISZERO ISZERO PUSH2 0x563 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E56414C49445F5349474E4154555245000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP6 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP5 AND DUP6 MSTORE SWAP3 SWAP1 MSTORE SWAP2 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5DF PUSH2 0x1611 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP10 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP9 ISZERO ISZERO SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP3 MLOAD SWAP1 DUP2 MSTORE SWAP2 MLOAD SWAP5 SWAP6 POP SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xA8656E308026EEABCE8F0BC18048433252318AB80AC79DA0B3D3D8697DFBA891 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP10 MLOAD GT ISZERO ISZERO PUSH2 0x73C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C454E4754485F475245415445525F5448414E5F305F52455155495245440000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x745 DUP10 PUSH2 0x165A JUMP JUMPDEST PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DIV SWAP7 POP PUSH1 0x9 PUSH1 0xFF DUP9 AND LT PUSH2 0x7DC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5349474E41545552455F554E535550504F525445440000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP7 PUSH1 0xFF AND PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x7EB JUMPI INVALID JUMPDEST SWAP6 POP PUSH1 0x0 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x7FB JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x868 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5349474E41545552455F494C4C4547414C000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x876 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x8F3 JUMPI DUP9 MLOAD ISZERO PUSH2 0x8EA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C454E4754485F305F5245515549524544000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 SWAP8 POP PUSH2 0x125F JUMP JUMPDEST PUSH1 0x2 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x901 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xAA1 JUMPI DUP9 MLOAD PUSH1 0x41 EQ PUSH2 0x977 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C454E4754485F36355F52455155495245440000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP9 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x986 JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV DUP2 MUL DIV SWAP5 POP PUSH2 0x9C6 DUP10 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x1779 AND JUMP JUMPDEST SWAP4 POP PUSH2 0x9D9 DUP10 PUSH1 0x21 PUSH4 0xFFFFFFFF PUSH2 0x1779 AND JUMP JUMPDEST SWAP3 POP PUSH1 0x1 DUP12 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP6 PUSH1 0x0 NOT AND PUSH1 0x0 NOT AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0xFF AND PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0x0 NOT AND PUSH1 0x0 NOT AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 PUSH1 0x0 NOT AND PUSH1 0x0 NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP5 POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 PUSH1 0x0 DUP7 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xA52 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 DUP2 AND SWAP1 DUP3 AND EQ SWAP10 POP SWAP3 POP PUSH2 0x125F SWAP1 POP JUMP JUMPDEST PUSH1 0x3 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0xAAF JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xCE0 JUMPI DUP9 MLOAD PUSH1 0x41 EQ PUSH2 0xB25 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C454E4754485F36355F52455155495245440000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP9 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0xB34 JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV DUP2 MUL DIV SWAP5 POP PUSH2 0xB74 DUP10 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x1779 AND JUMP JUMPDEST SWAP4 POP PUSH2 0xB87 DUP10 PUSH1 0x21 PUSH4 0xFFFFFFFF PUSH2 0x1779 AND JUMP JUMPDEST SWAP3 POP PUSH1 0x1 DUP12 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP1 PUSH32 0x19457468657265756D205369676E6564204D6573736167653A0A333200000000 DUP2 MSTORE POP PUSH1 0x1C ADD DUP3 PUSH1 0x0 NOT AND PUSH1 0x0 NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xC28 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xBEB JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP5 ADD DUP3 SWAP1 SUB DUP3 KECCAK256 PUSH1 0x0 DUP1 DUP5 MSTORE DUP4 DUP4 ADD DUP1 DUP8 MSTORE SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xFF DUP14 AND DUP4 DUP7 ADD MSTORE PUSH1 0x60 DUP4 ADD DUP13 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP12 SWAP1 MSTORE SWAP4 MLOAD PUSH1 0xA0 DUP1 DUP5 ADD SWAP8 POP SWAP2 SWAP6 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 ADD SWAP5 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP3 POP SWAP1 DUP7 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xA52 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x4 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0xCEE JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xD82 JUMPI DUP9 MLOAD ISZERO PUSH2 0xD62 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C454E4754485F305F5245515549524544000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND CALLER EQ SWAP8 POP PUSH2 0x125F JUMP JUMPDEST PUSH1 0x5 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0xD90 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xEAA JUMPI DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x1626BA7E DUP13 DUP12 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH29 0x100000000000000000000000000000000000000000000000000000000 MUL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH1 0x0 NOT AND PUSH1 0x0 NOT AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xE2A JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xE12 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xE57 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 SWAP4 POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE77 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xE8B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xEA1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP8 POP PUSH2 0x125F JUMP JUMPDEST PUSH1 0x6 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0xEB8 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x1024 JUMPI PUSH2 0xEC7 DUP10 PUSH2 0x181F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP13 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP6 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF AND ISZERO ISZERO PUSH2 0xF0F JUMPI PUSH1 0x0 SWAP8 POP PUSH2 0x125F JUMP JUMPDEST DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x93634702 DUP13 DUP13 DUP13 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH29 0x100000000000000000000000000000000000000000000000000000000 MUL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 PUSH1 0x0 NOT AND PUSH1 0x0 NOT AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xFD6 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xFBE JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1003 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 SWAP5 POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE77 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x7 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x1032 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x1072 JUMPI PUSH1 0x0 DUP12 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP15 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP8 POP PUSH2 0x125F JUMP JUMPDEST PUSH1 0x8 DUP7 PUSH1 0x9 DUP2 GT ISZERO PUSH2 0x1080 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x11F8 JUMPI DUP9 MLOAD PUSH1 0x41 EQ PUSH2 0x10F6 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C454E4754485F36355F52455155495245440000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP9 PUSH1 0x0 DUP2 MLOAD DUP2 LT ISZERO ISZERO PUSH2 0x1105 JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV DUP2 MUL DIV SWAP5 POP PUSH2 0x1145 DUP10 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x1779 AND JUMP JUMPDEST SWAP4 POP PUSH2 0x1158 DUP10 PUSH1 0x21 PUSH4 0xFFFFFFFF PUSH2 0x1779 AND JUMP JUMPDEST SWAP3 POP PUSH1 0x1 DUP12 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP1 PUSH32 0x19457468657265756D205369676E6564204D6573736167653A0A200000000000 DUP2 MSTORE POP PUSH1 0x1B ADD DUP3 PUSH1 0x0 NOT AND PUSH1 0x0 NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x20 DUP4 LT PUSH2 0xC28 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xBEB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5349474E41545552455F554E535550504F525445440000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP POP POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x127A DUP5 DUP5 DUP5 PUSH2 0x6BE JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x130A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5245454E5452414E43595F494C4C4547414C0000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x134D PUSH2 0x1348 DUP9 DUP9 DUP9 DUP9 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY POP PUSH2 0x18F3 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1B34 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF AND ISZERO PUSH2 0x13CE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E56414C49445F54585F484153480000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND CALLER EQ PUSH2 0x14D4 JUMPI PUSH2 0x1426 DUP2 DUP8 DUP6 DUP6 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY POP PUSH2 0x6BE SWAP5 POP POP POP POP POP JUMP JUMPDEST ISZERO ISZERO PUSH2 0x1493 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E56414C49445F54585F5349474E4154555245000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND OR SWAP1 SSTORE JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD ADDRESS SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP1 DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY DUP3 ADD SWAP2 POP POP SWAP3 POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP ISZERO ISZERO PUSH2 0x15A0 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4641494C45445F455845435554494F4E00000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND CALLER EQ PUSH2 0x15E6 JUMPI PUSH1 0x4 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x1652 JUMPI PUSH1 0x4 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1654 JUMP JUMPDEST CALLER JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 MLOAD GT ISZERO ISZERO PUSH2 0x16F3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x21 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475245415445525F5448414E5F5A45524F5F4C454E4754485F52455155495245 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x4400000000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x84 ADD SWAP1 REVERT JUMPDEST DUP2 MLOAD DUP3 SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0x1723 JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD DUP3 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP3 MSTORE POP PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x20 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x1816 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F33325F4C454E4754485F5245 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x84 ADD SWAP1 REVERT JUMPDEST POP ADD PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x14 DUP3 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x18BA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F32305F4C454E4754485F5245 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x84 ADD SWAP1 REVERT JUMPDEST PUSH2 0x18C8 DUP3 PUSH1 0x14 DUP5 MLOAD SUB PUSH2 0x1CB4 JUMP JUMPDEST DUP3 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC ADD SWAP1 SWAP3 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x5A65726F45785472616E73616374696F6E280000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x75696E743235362073616C742C00000000000000000000000000000000000000 PUSH1 0x32 DUP4 ADD MSTORE PUSH32 0x61646472657373207369676E6572416464726573732C00000000000000000000 PUSH1 0x3F DUP4 ADD MSTORE PUSH32 0x6279746573206461746100000000000000000000000000000000000000000000 PUSH1 0x55 DUP4 ADD MSTORE PUSH32 0x2900000000000000000000000000000000000000000000000000000000000000 PUSH1 0x5F DUP4 ADD MSTORE DUP3 MLOAD DUP1 DUP4 SUB DUP5 ADD DUP2 MSTORE PUSH1 0x60 SWAP1 SWAP3 ADD SWAP3 DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH1 0x0 SWAP4 DUP5 SWAP4 DUP5 SWAP4 SWAP1 SWAP3 DUP3 SWAP2 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1A1C JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x19DF JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP4 ADD DUP2 SWAP1 SUB DUP2 KECCAK256 DUP10 MLOAD SWAP1 SWAP8 POP DUP10 SWAP6 POP SWAP1 SWAP4 POP DUP4 SWAP3 DUP6 ADD SWAP2 POP DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1AB2 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1A75 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 SWAP1 SWAP5 ADD DUP3 SWAP1 SUB DUP3 KECCAK256 SWAP8 DUP3 MSTORE DUP2 ADD SWAP11 SWAP1 SWAP11 MSTORE POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP8 SWAP1 SWAP8 AND SWAP7 DUP9 ADD SWAP7 SWAP1 SWAP7 MSTORE POP POP PUSH1 0x60 DUP6 ADD MSTORE POP POP PUSH1 0x80 SWAP1 SWAP2 KECCAK256 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x0 SLOAD DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP5 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1BC0 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1B83 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP5 DUP6 MSTORE POP DUP4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP5 SUB DUP4 ADD DUP2 MSTORE SWAP3 DUP2 ADD SWAP1 DUP2 SWAP1 MSTORE DUP3 MLOAD SWAP3 SWAP4 POP SWAP2 DUP3 SWAP2 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1C64 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1C27 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 SWAP1 SWAP4 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP2 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 MSTORE PUSH1 0x40 MLOAD SWAP3 ADD DUP3 SWAP1 SUB SWAP1 SWAP2 KECCAK256 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x14 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x1D51 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F32305F4C454E4754485F5245 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x84 ADD SWAP1 REVERT JUMPDEST POP ADD PUSH1 0x14 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 0xc5 JUMPI 0xd DUP5 INVALID 0x4a JUMPDEST 0x26 0xf PUSH30 0xC2103749042B80976BEA15DE6F0E4C8EF4E5FE99BEC80029000000000000 ",
+ "sourceMap": "725:412:10:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;970:221:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;970:221:6;;;;;;;;;;;;;;;;;;;;1493:360:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1493:360:0;;;;;;;;;;;;;;;;;;;;;;;968:45:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;968:45:1;;;;;;;;;;;;;;;;;;;;;;;2090:391:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2090:391:0;;;;;;;;;;;1087:71;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1087:71:0;;;;;;;;;;;;967:63;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;967:63:0;;;;;;;;;2853:6652;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2853:6652:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2853:6652:0;;-1:-1:-1;2853:6652:0;;-1:-1:-1;;;;;;;2853:6652:0;818:317:10;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;818:317:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;818:317:10;;-1:-1:-1;818:317:10;;-1:-1:-1;;;;;;;818:317:10;1710:1456:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1710:1456:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1298:33:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1298:33:6;;;;1065:36:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1065:36:1;;;;;;;;;;;;;;;;;;;;;;;970:221:6;1042:148;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;1042:148:6;;;;;;;;1032:159;;1042:148;;;;;1032:159;;;;1042:148;1032:159;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1032:159:6;;;;;;;;;;;;;;;;970:221;:::o;1493:360:0:-;1646:110;1680:4;1702:13;1733:9;;1646:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1646:16:0;;-1:-1:-1;;;;;1646:110:0:i;:::-;1625:174;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1809:15:0;;;;1842:4;1809:15;;;;;;;;:30;;;;;;;;;;;:37;;;;;;;;;1493:360::o;968:45:1:-;;;;;;;;;;;;;;;:::o;2090:391:0:-;2223:21;2247:26;:24;:26::i;:::-;2283:32;;;;;;;;:17;:32;;;;;;;;:50;;;;;;;;;;;;;:61;;;;;;;;;;;;;2359:115;;;;;;;2283:32;;-1:-1:-1;2283:50:0;;:32;;2359:115;;;;;;;;;2090:391;;;:::o;1087:71::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;967:63::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2853:6652::-;3015:12;3192:22;3445:27;3566:7;3583:9;3602;3621:17;7350:24;3083:1;3064:9;:16;:20;3043:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3223:23;:9;:21;:23::i;:::-;3217:30;;;;-1:-1:-1;3303:29:0;3278:55;;;;3257:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3489:16;3475:31;;;;;;;;;;3445:61;-1:-1:-1;3988:21:0;3971:13;:38;;;;;;;;;3967:5188;;;4025:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3967:5188;4334:21;4317:13;:38;;;;;;;;;4313:4842;;;4396:16;;:21;4371:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4492:5;;-1:-1:-1;4511:14:0;;4313:4842;4598:20;4581:13;:37;;;;;;;;;4577:4578;;;4659:16;;4679:2;4659:22;4634:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4757:9;4767:1;4757:12;;;;;;;;;;;;;;;;;;;;;4751:19;;-1:-1:-1;4788:24:0;:9;4810:1;4788:24;:21;:24;:::i;:::-;4784:28;-1:-1:-1;4830:25:0;:9;4852:2;4830:25;:21;:25;:::i;:::-;4826:29;;4881:24;4891:4;4897:1;4900;4903;4881:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;4881:24:0;;;;;4929:26;;;;;;;;;-1:-1:-1;4881:24:0;-1:-1:-1;4969:14:0;;-1:-1:-1;4969:14:0;4577:4578;5060:21;5043:13;:38;;;;;;;;;5039:4116;;;5122:16;;5142:2;5122:22;5097:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5220:9;5230:1;5220:12;;;;;;;;;;;;;;;;;;;;;5214:19;;-1:-1:-1;5251:24:0;:9;5273:1;5251:24;:21;:24;:::i;:::-;5247:28;-1:-1:-1;5293:25:0;:9;5315:2;5293:25;:21;:25;:::i;:::-;5289:29;;5344:225;5475:4;5381:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;5381:116:0;;;5371:127;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;365:33;;5371:127:0;;;;;;;;;;;;-1:-1:-1;5344:225:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;263:2;;-1:-1;;5344:225:0;;;;;;;;;;;-1:-1:-1;5344:225:0;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5039:4116:0;6237:20;6220:13;:37;;;;;;;;;6216:2939;;;6298:16;;:21;6273:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6394:27;;;6411:10;6394:27;;-1:-1:-1;6435:14:0;;6216:2939;6619:20;6602:13;:37;;;;;;;;;6598:2557;;;6673:13;6665:39;;;6705:4;6711:9;6665:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;6665:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6665:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6665:56:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6665:56:0;;-1:-1:-1;6735:14:0;;6598:2557;7248:23;7231:13;:40;;;;;;;;;7227:1928;;;7377:26;:9;:24;:26::i;:::-;7488:32;;;;;;;;:17;:32;;;;;;;;:50;;;;;;;;;;7350:53;;-1:-1:-1;7488:50:0;;7487:51;7483:102;;;7565:5;7558:12;;;;7483:102;7619:16;7608:45;;;7671:4;7693:13;7724:9;7608:139;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;7608:139:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;7227:1928:0;7883:23;7866:13;:40;;;;;;;;;7862:1293;;;7932:15;;;;:9;:15;;;;;;;;:30;;;;;;;;;;;;;;-1:-1:-1;7976:14:0;;7862:1293;8556:20;8539:13;:37;;;;;;;;;8535:620;;;8617:16;;8637:2;8617:22;8592:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8715:9;8725:1;8715:12;;;;;;;;;;;;;;;;;;;;;8709:19;;-1:-1:-1;8746:24:0;:9;8768:1;8746:24;:21;:24;:::i;:::-;8742:28;-1:-1:-1;8788:25:0;:9;8810:2;8788:25;:21;:25;:::i;:::-;8784:29;;8839:227;8972:4;8876:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;8876:118:0;;;8866:129;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;8535:620:0;9467:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2853:6652;;;;;;;;;;;;;:::o;818:317:10:-;979:12;1017:87;1047:4;1065:6;1085:9;1017:16;:87::i;:::-;1007:97;818:317;-1:-1:-1;;;;818:317:10:o;1710:1456:1:-;1924:21;;2014:23;;1924:35;:21;:35;1903:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2040:113;2058:94;2093:4;2111:13;2138:4;;2058:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2058:21:1;;-1:-1:-1;;;;;2058:94:1:i;:::-;2040:17;:113::i;:::-;2240:29;;;;:12;:29;;;;;;2014:139;;-1:-1:-1;2240:29:1;;2239:30;2218:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2396:27;;;2413:10;2396:27;2392:410;;2498:137;2536:15;2573:13;2608:9;;2498:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2498:16:1;;-1:-1:-1;;;;;2498:137:1:i;:::-;2473:216;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2754:21;:37;;;;;;;;;;2392:410;2843:29;;;;:12;:29;;;;;;;:36;;;;2875:4;2843:36;;;2910:32;2918:4;;2937;;;;2910:32;2937:4;;;;2910:32;;;;;;;;;;;;;;;;;;;;;;;;2889:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3072:27;;;3089:10;3072:27;3068:92;;3115:21;:34;;;;;;3068:92;1710:1456;;;;;;;:::o;1298:33:6:-;;;;:::o;1065:36:1:-;;;;;;:::o;4805:241::-;4936:21;;4888:7;;;;4936:35;:21;:35;:72;;4987:21;;;;4936:72;;;4974:10;4936:72;4911:97;4805:241;-1:-1:-1;;4805:241:1:o;8304:448:11:-;8388:13;8449:1;8438;:8;:12;8417:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8559:8;;8557:1;;8559:12;;;;8557:15;;;;;;;;;;8671:8;;8667:16;;8696:17;;;-1:-1:-1;8557:15:11;;;;;;;8304:448::o;13281:490::-;13402:14;13465:5;13473:2;13465:10;13453:1;:8;:22;;13432:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13718:13:11;13620:2;13718:13;13712:20;;13281:490::o;8947:482::-;9034:14;9097:2;9085:1;:8;:14;;9064:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9215:29;9227:1;9241:2;9230:1;:8;:13;9215:11;:29::i;:::-;9347:8;;9343:17;;9373;;;-1:-1:-1;9206:38:11;8947:482::o;3459:902:1:-;1237:146;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;6:49;;1237:146:1;;;;;;;;1227:157;;3623:14;;;;;;1237:146;;;;1227:157;;;;1237:146;1227:157;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;365:33;;1227:157:1;;;;;;;;;;;3740:15;;1227:157;;-1:-1:-1;3740:15:1;;-1:-1:-1;1227:157:1;;-1:-1:-1;1227:157:1;;3740:15;;;-1:-1:-1;3740:15:1;1227:157;3740:15;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;365:33;;3740:15:1;;;;;;;;;;;;4062:26;;;4108:15;;4101:29;;;;-1:-1:-1;4186:42:1;4167:62;;;;4150:15;;;4143:87;;;;-1:-1:-1;;4262:2:1;4250:15;;4243:33;-1:-1:-1;;4317:3:1;4299:22;;;;3459:902;-1:-1:-1;3459:902:1:o;1816:205:6:-;1910:7;1967:13;;;;;;;;;;;;;;;;;;1982:18;;2002:10;1950:63;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;365:33;;1950:63:6;;;;;-1:-1:-1;1950:63:6;;;;;;;-1:-1:-1;1950:63:6;;;26:21:-1;;;22:32;;6:49;;1950:63:6;;;;;;;1940:74;;1950:63;;-1:-1:-1;1950:63:6;;;1940:74;;;;1950:63;1940:74;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;;;;365:33;;1940:74:6;;;;;;;;;;;;-1:-1:-1;;;;;1816:205:6:o;10259:886:11:-;10380:14;10443:5;10451:2;10443:10;10431:1;:8;:22;;10410:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11047:13:11;10792:2;11047:13;11041:20;11063:42;11037:69;;10259:886::o"
}
}
},
@@ -307,20 +307,20 @@
}
},
"sourceCodes": {
- "2.0.0/protocol/Exchange/MixinSignatureValidator.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.24;\n\nimport \"../../utils/LibBytes/LibBytes.sol\";\nimport \"./mixins/MSignatureValidator.sol\";\nimport \"./mixins/MTransactions.sol\";\nimport \"./interfaces/IWallet.sol\";\nimport \"./interfaces/IValidator.sol\";\n\ncontract MixinSignatureValidator is\n MSignatureValidator,\n MTransactions\n{\n using LibBytes for bytes;\n \n // Mapping of hash => signer => signed\n mapping (bytes32 => mapping (address => bool)) public preSigned;\n\n // Mapping of signer => validator => approved\n mapping (address => mapping (address => bool)) public allowedValidators;\n\n /// @dev Approves a hash on-chain using any valid signature type.\n /// After presigning a hash, the preSign signature type will become valid for that hash and signer.\n /// @param signerAddress Address that should have signed the given hash.\n /// @param signature Proof that the hash has been signed by signer.\n function preSign(\n bytes32 hash,\n address signerAddress,\n bytes signature\n )\n external\n {\n require(\n isValidSignature(\n hash,\n signerAddress,\n signature\n ),\n \"INVALID_SIGNATURE\"\n );\n preSigned[hash][signerAddress] = true;\n }\n\n /// @dev Approves/unnapproves a Validator contract to verify signatures on signer's behalf.\n /// @param validatorAddress Address of Validator contract.\n /// @param approval Approval or disapproval of Validator contract.\n function setSignatureValidatorApproval(\n address validatorAddress,\n bool approval\n )\n external\n {\n address signerAddress = getCurrentContextAddress();\n allowedValidators[signerAddress][validatorAddress] = approval;\n emit SignatureValidatorApproval(\n signerAddress,\n validatorAddress,\n approval\n );\n }\n\n /// @dev Verifies that a hash has been signed by the given signer.\n /// @param hash Any 32 byte hash.\n /// @param signerAddress Address that should have signed the given hash.\n /// @param signature Proof that the hash has been signed by signer.\n /// @return True if the address recovered from the provided signature matches the input signer address.\n function isValidSignature(\n bytes32 hash,\n address signerAddress,\n bytes memory signature\n )\n public\n view\n returns (bool isValid)\n {\n // TODO: Domain separation: make hash depend on role. (Taker sig should not be valid as maker sig, etc.)\n require(\n signature.length > 0,\n \"LENGTH_GREATER_THAN_0_REQUIRED\"\n );\n\n // Ensure signature is supported\n uint8 signatureTypeRaw = uint8(signature.popLastByte());\n require(\n signatureTypeRaw < uint8(SignatureType.NSignatureTypes),\n \"SIGNATURE_UNSUPPORTED\"\n );\n\n // Pop last byte off of signature byte array.\n SignatureType signatureType = SignatureType(signatureTypeRaw);\n\n // Variables are not scoped in Solidity.\n uint8 v;\n bytes32 r;\n bytes32 s;\n address recovered;\n\n // Always illegal signature.\n // This is always an implicit option since a signer can create a\n // signature array with invalid type or length. We may as well make\n // it an explicit option. This aids testing and analysis. It is\n // also the initialization value for the enum type.\n if (signatureType == SignatureType.Illegal) {\n revert(\"SIGNATURE_ILLEGAL\");\n\n // Always invalid signature.\n // Like Illegal, this is always implicitly available and therefore\n // offered explicitly. It can be implicitly created by providing\n // a correctly formatted but incorrect signature.\n } else if (signatureType == SignatureType.Invalid) {\n require(\n signature.length == 0,\n \"LENGTH_0_REQUIRED\"\n );\n isValid = false;\n return isValid;\n\n // Signature using EIP712\n } else if (signatureType == SignatureType.EIP712) {\n require(\n signature.length == 65,\n \"LENGTH_65_REQUIRED\"\n );\n v = uint8(signature[0]);\n r = signature.readBytes32(1);\n s = signature.readBytes32(33);\n recovered = ecrecover(hash, v, r, s);\n isValid = signerAddress == recovered;\n return isValid;\n\n // Signed using web3.eth_sign\n } else if (signatureType == SignatureType.EthSign) {\n require(\n signature.length == 65,\n \"LENGTH_65_REQUIRED\"\n );\n v = uint8(signature[0]);\n r = signature.readBytes32(1);\n s = signature.readBytes32(33);\n recovered = ecrecover(\n keccak256(abi.encodePacked(\n \"\\x19Ethereum Signed Message:\\n32\",\n hash\n )),\n v,\n r,\n s\n );\n isValid = signerAddress == recovered;\n return isValid;\n\n // Implicitly signed by caller.\n // The signer has initiated the call. In the case of non-contract\n // accounts it means the transaction itself was signed.\n // Example: let's say for a particular operation three signatures\n // A, B and C are required. To submit the transaction, A and B can\n // give a signature to C, who can then submit the transaction using\n // `Caller` for his own signature. Or A and C can sign and B can\n // submit using `Caller`. Having `Caller` allows this flexibility.\n } else if (signatureType == SignatureType.Caller) {\n require(\n signature.length == 0,\n \"LENGTH_0_REQUIRED\"\n );\n isValid = signerAddress == msg.sender;\n return isValid;\n\n // Signature verified by wallet contract.\n // If used with an order, the maker of the order is the wallet contract.\n } else if (signatureType == SignatureType.Wallet) {\n isValid = IWallet(signerAddress).isValidSignature(hash, signature);\n return isValid;\n\n // Signature verified by validator contract.\n // If used with an order, the maker of the order can still be an EOA.\n // A signature using this type should be encoded as:\n // | Offset | Length | Contents |\n // | 0x00 | x | Signature to validate |\n // | 0x00 + x | 20 | Address of validator contract |\n // | 0x14 + x | 1 | Signature type is always \"\\x06\" |\n } else if (signatureType == SignatureType.Validator) {\n // Pop last 20 bytes off of signature byte array.\n\n address validatorAddress = signature.popLast20Bytes();\n \n // Ensure signer has approved validator.\n if (!allowedValidators[signerAddress][validatorAddress]) {\n return false;\n }\n isValid = IValidator(validatorAddress).isValidSignature(\n hash,\n signerAddress,\n signature\n );\n return isValid;\n\n // Signer signed hash previously using the preSign function.\n } else if (signatureType == SignatureType.PreSigned) {\n isValid = preSigned[hash][signerAddress];\n return isValid;\n\n // Signature from Trezor hardware wallet.\n // It differs from web3.eth_sign in the encoding of message length\n // (Bitcoin varint encoding vs ascii-decimal, the latter is not\n // self-terminating which leads to ambiguities).\n // See also:\n // https://en.bitcoin.it/wiki/Protocol_documentation#Variable_length_integer\n // https://github.com/trezor/trezor-mcu/blob/master/firmware/ethereum.c#L602\n // https://github.com/trezor/trezor-mcu/blob/master/firmware/crypto.c#L36\n } else if (signatureType == SignatureType.Trezor) {\n require(\n signature.length == 65,\n \"LENGTH_65_REQUIRED\"\n );\n v = uint8(signature[0]);\n r = signature.readBytes32(1);\n s = signature.readBytes32(33);\n recovered = ecrecover(\n keccak256(abi.encodePacked(\n \"\\x19Ethereum Signed Message:\\n\\x20\",\n hash\n )),\n v,\n r,\n s\n );\n isValid = signerAddress == recovered;\n return isValid;\n }\n\n // Anything else is illegal (We do not return false because\n // the signature may actually be valid, just not in a format\n // that we currently support. In this case returning false\n // may lead the caller to incorrectly believe that the\n // signature was invalid.)\n revert(\"SIGNATURE_UNSUPPORTED\");\n }\n}\n",
- "2.0.0/protocol/Exchange/MixinTransactions.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*/\npragma solidity ^0.4.24;\n\nimport \"./libs/LibExchangeErrors.sol\";\nimport \"./mixins/MSignatureValidator.sol\";\nimport \"./mixins/MTransactions.sol\";\nimport \"./libs/LibEIP712.sol\";\n\ncontract MixinTransactions is\n LibEIP712,\n MSignatureValidator,\n MTransactions\n{\n\n // Mapping of transaction hash => executed\n // This prevents transactions from being executed more than once.\n mapping (bytes32 => bool) public transactions;\n\n // Address of current transaction signer\n address public currentContextAddress;\n\n // Hash for the EIP712 ZeroEx Transaction Schema\n bytes32 constant EIP712_ZEROEX_TRANSACTION_SCHEMA_HASH = keccak256(abi.encodePacked(\n \"ZeroExTransaction(\",\n \"uint256 salt,\",\n \"address signerAddress,\",\n \"bytes data\",\n \")\"\n ));\n\n /// @dev Calculates EIP712 hash of the Transaction.\n /// @param salt Arbitrary number to ensure uniqueness of transaction hash.\n /// @param signerAddress Address of transaction signer.\n /// @param data AbiV2 encoded calldata.\n /// @return EIP712 hash of the Transaction.\n function hashZeroExTransaction(\n uint256 salt,\n address signerAddress,\n bytes memory data\n )\n internal\n pure\n returns (bytes32 result)\n {\n bytes32 schemaHash = EIP712_ZEROEX_TRANSACTION_SCHEMA_HASH;\n bytes32 dataHash = keccak256(data);\n // Assembly for more efficiently computing:\n // keccak256(abi.encode(\n // EIP712_ZEROEX_TRANSACTION_SCHEMA_HASH,\n // salt,\n // signerAddress,\n // keccak256(data)\n // ));\n assembly {\n let memPtr := mload(64)\n mstore(memPtr, schemaHash)\n mstore(add(memPtr, 32), salt)\n mstore(add(memPtr, 64), and(signerAddress, 0xffffffffffffffffffffffffffffffffffffffff))\n mstore(add(memPtr, 96), dataHash)\n result := keccak256(memPtr, 128)\n }\n\n return result;\n }\n\n /// @dev Executes an exchange method call in the context of signer.\n /// @param salt Arbitrary number to ensure uniqueness of transaction hash.\n /// @param signerAddress Address of transaction signer.\n /// @param data AbiV2 encoded calldata.\n /// @param signature Proof of signer transaction by signer.\n function executeTransaction(\n uint256 salt,\n address signerAddress,\n bytes data,\n bytes signature\n )\n external\n {\n // Prevent reentrancy\n require(\n currentContextAddress == address(0),\n \"REENTRANCY_ILLEGAL\"\n );\n\n bytes32 transactionHash = hashEIP712Message(hashZeroExTransaction(\n salt,\n signerAddress,\n data\n ));\n\n // Validate transaction has not been executed\n require(\n !transactions[transactionHash],\n \"INVALID_TX_HASH\"\n );\n\n // Transaction always valid if signer is sender of transaction\n if (signerAddress != msg.sender) {\n // Validate signature\n require(\n isValidSignature(\n transactionHash,\n signerAddress,\n signature\n ),\n \"INVALID_TX_SIGNATURE\"\n );\n\n // Set the current transaction signer\n currentContextAddress = signerAddress;\n }\n\n // Execute transaction\n transactions[transactionHash] = true;\n require(\n address(this).delegatecall(data),\n \"FAILED_EXECUTION\"\n );\n\n // Reset current transaction signer\n // TODO: Check if gas is paid when currentContextAddress is already 0.\n currentContextAddress = address(0);\n }\n\n /// @dev The current function will be called in the context of this address (either 0x transaction signer or `msg.sender`).\n /// If calling a fill function, this address will represent the taker.\n /// If calling a cancel function, this address will represent the maker.\n /// @return Signer of 0x transaction if entry point is `executeTransaction`.\n /// `msg.sender` if entry point is any other function.\n function getCurrentContextAddress()\n internal\n view\n returns (address)\n {\n address contextAddress = currentContextAddress == address(0) ? msg.sender : currentContextAddress;\n return contextAddress;\n }\n}\n",
- "2.0.0/protocol/Exchange/interfaces/ISignatureValidator.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.24;\n\ncontract ISignatureValidator {\n\n /// @dev Approves a hash on-chain using any valid signature type.\n /// After presigning a hash, the preSign signature type will become valid for that hash and signer.\n /// @param signerAddress Address that should have signed the given hash.\n /// @param signature Proof that the hash has been signed by signer.\n function preSign(\n bytes32 hash,\n address signerAddress,\n bytes signature\n )\n external;\n \n /// @dev Approves/unnapproves a Validator contract to verify signatures on signer's behalf.\n /// @param validatorAddress Address of Validator contract.\n /// @param approval Approval or disapproval of Validator contract.\n function setSignatureValidatorApproval(\n address validatorAddress,\n bool approval\n )\n external;\n\n /// @dev Verifies that a signature is valid.\n /// @param hash Message hash that is signed.\n /// @param signerAddress Address of signer.\n /// @param signature Proof of signing.\n /// @return Validity of order signature.\n function isValidSignature(\n bytes32 hash,\n address signerAddress,\n bytes memory signature\n )\n public\n view\n returns (bool isValid);\n}\n",
- "2.0.0/protocol/Exchange/interfaces/ITransactions.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*/\npragma solidity ^0.4.24;\n\ncontract ITransactions {\n\n /// @dev Executes an exchange method call in the context of signer.\n /// @param salt Arbitrary number to ensure uniqueness of transaction hash.\n /// @param signerAddress Address of transaction signer.\n /// @param data AbiV2 encoded calldata.\n /// @param signature Proof of signer transaction by signer.\n function executeTransaction(\n uint256 salt,\n address signerAddress,\n bytes data,\n bytes signature\n )\n external;\n}\n",
- "2.0.0/protocol/Exchange/interfaces/IValidator.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.23;\n\ncontract IValidator {\n\n /// @dev Verifies that a signature is valid.\n /// @param hash Message hash that is signed.\n /// @param signerAddress Address that should have signed the given hash.\n /// @param signature Proof of signing.\n /// @return Validity of order signature.\n function isValidSignature(\n bytes32 hash,\n address signerAddress,\n bytes signature\n )\n external\n view\n returns (bool isValid);\n}\n",
- "2.0.0/protocol/Exchange/interfaces/IWallet.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.24;\n\ncontract IWallet {\n\n /// @dev Verifies that a signature is valid.\n /// @param hash Message hash that is signed.\n /// @param signature Proof of signing.\n /// @return Validity of order signature.\n function isValidSignature(\n bytes32 hash,\n bytes signature\n )\n external\n view\n returns (bool isValid);\n}\n",
- "2.0.0/protocol/Exchange/libs/LibEIP712.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.24;\n\ncontract LibEIP712 {\n // EIP191 header for EIP712 prefix\n string constant EIP191_HEADER = \"\\x19\\x01\";\n\n // EIP712 Domain Name value\n string constant EIP712_DOMAIN_NAME = \"0x Protocol\";\n\n // EIP712 Domain Version value\n string constant EIP712_DOMAIN_VERSION = \"2\";\n\n // Hash of the EIP712 Domain Separator Schema\n bytes32 public constant EIP712_DOMAIN_SEPARATOR_SCHEMA_HASH = keccak256(abi.encodePacked(\n \"EIP712Domain(\",\n \"string name,\",\n \"string version,\",\n \"address verifyingContract\",\n \")\"\n ));\n\n // Hash of the EIP712 Domain Separator data\n bytes32 public EIP712_DOMAIN_HASH;\n\n constructor ()\n public\n {\n EIP712_DOMAIN_HASH = keccak256(abi.encode(\n EIP712_DOMAIN_SEPARATOR_SCHEMA_HASH,\n keccak256(bytes(EIP712_DOMAIN_NAME)),\n keccak256(bytes(EIP712_DOMAIN_VERSION)),\n address(this)\n ));\n }\n\n /// @dev Calculates EIP712 encoding for a hash struct in this EIP712 Domain.\n /// @param hashStruct The EIP712 hash struct.\n /// @return EIP712 hash applied to this EIP712 Domain.\n function hashEIP712Message(bytes32 hashStruct)\n internal\n view\n returns (bytes32)\n {\n return keccak256(abi.encodePacked(EIP191_HEADER, EIP712_DOMAIN_HASH, hashStruct));\n }\n}\n",
- "2.0.0/protocol/Exchange/libs/LibExchangeErrors.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.24;\n\n/// @dev This contract documents the revert reasons used in the Exchange contract.\n/// This contract is intended to serve as a reference, but is not actually used for efficiency reasons.\ncontract LibExchangeErrors {\n\n /// Order validation errors ///\n string constant ORDER_UNFILLABLE = \"ORDER_UNFILLABLE\"; // Order cannot be filled.\n string constant INVALID_MAKER = \"INVALID_MAKER\"; // Invalid makerAddress.\n string constant INVALID_TAKER = \"INVALID_TAKER\"; // Invalid takerAddress.\n string constant INVALID_SENDER = \"INVALID_SENDER\"; // Invalid `msg.sender`.\n string constant INVALID_ORDER_SIGNATURE = \"INVALID_ORDER_SIGNATURE\"; // Signature validation failed. \n \n /// fillOrder validation errors ///\n string constant INVALID_TAKER_AMOUNT = \"INVALID_TAKER_AMOUNT\"; // takerAssetFillAmount cannot equal 0.\n string constant ROUNDING_ERROR = \"ROUNDING_ERROR\"; // Rounding error greater than 0.1% of takerAssetFillAmount. \n \n /// Signature validation errors ///\n string constant INVALID_SIGNATURE = \"INVALID_SIGNATURE\"; // Signature validation failed. \n string constant SIGNATURE_ILLEGAL = \"SIGNATURE_ILLEGAL\"; // Signature type is illegal.\n string constant SIGNATURE_UNSUPPORTED = \"SIGNATURE_UNSUPPORTED\"; // Signature type unsupported.\n \n /// cancelOrdersUptTo errors ///\n string constant INVALID_NEW_ORDER_EPOCH = \"INVALID_NEW_ORDER_EPOCH\"; // Specified salt must be greater than or equal to existing orderEpoch.\n\n /// fillOrKillOrder errors ///\n string constant COMPLETE_FILL_FAILED = \"COMPLETE_FILL_FAILED\"; // Desired takerAssetFillAmount could not be completely filled. \n\n /// matchOrders errors ///\n string constant NEGATIVE_SPREAD_REQUIRED = \"NEGATIVE_SPREAD_REQUIRED\"; // Matched orders must have a negative spread.\n\n /// Transaction errors ///\n string constant REENTRANCY_ILLEGAL = \"REENTRANCY_ILLEGAL\"; // Recursive reentrancy is not allowed. \n string constant INVALID_TX_HASH = \"INVALID_TX_HASH\"; // Transaction has already been executed. \n string constant INVALID_TX_SIGNATURE = \"INVALID_TX_SIGNATURE\"; // Signature validation failed. \n string constant FAILED_EXECUTION = \"FAILED_EXECUTION\"; // Transaction execution failed. \n \n /// registerAssetProxy errors ///\n string constant ASSET_PROXY_ALREADY_EXISTS = \"ASSET_PROXY_ALREADY_EXISTS\"; // AssetProxy with same id already exists.\n\n /// dispatchTransferFrom errors ///\n string constant ASSET_PROXY_DOES_NOT_EXIST = \"ASSET_PROXY_DOES_NOT_EXIST\"; // No assetProxy registered at given id.\n string constant TRANSFER_FAILED = \"TRANSFER_FAILED\"; // Asset transfer unsuccesful.\n\n /// Length validation errors ///\n string constant LENGTH_GREATER_THAN_0_REQUIRED = \"LENGTH_GREATER_THAN_0_REQUIRED\"; // Byte array must have a length greater than 0.\n string constant LENGTH_GREATER_THAN_3_REQUIRED = \"LENGTH_GREATER_THAN_3_REQUIRED\"; // Byte array must have a length greater than 3.\n string constant LENGTH_0_REQUIRED = \"LENGTH_0_REQUIRED\"; // Byte array must have a length of 0.\n string constant LENGTH_65_REQUIRED = \"LENGTH_65_REQUIRED\"; // Byte array must have a length of 65.\n}\n",
- "2.0.0/protocol/Exchange/mixins/MSignatureValidator.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.24;\n\nimport \"../interfaces/ISignatureValidator.sol\";\n\ncontract MSignatureValidator is\n ISignatureValidator\n{\n event SignatureValidatorApproval(\n address indexed signerAddress, // Address that approves or disapproves a contract to verify signatures.\n address indexed validatorAddress, // Address of signature validator contract.\n bool approved // Approval or disapproval of validator contract.\n );\n\n // Allowed signature types.\n enum SignatureType {\n Illegal, // 0x00, default value\n Invalid, // 0x01\n EIP712, // 0x02\n EthSign, // 0x03\n Caller, // 0x04\n Wallet, // 0x05\n Validator, // 0x06\n PreSigned, // 0x07\n Trezor, // 0x08\n NSignatureTypes // 0x09, number of signature types. Always leave at end.\n }\n}\n",
- "2.0.0/protocol/Exchange/mixins/MTransactions.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*/\npragma solidity ^0.4.24;\n\nimport \"../interfaces/ITransactions.sol\";\n\ncontract MTransactions is\n ITransactions\n{\n\n /// @dev The current function will be called in the context of this address (either 0x transaction signer or `msg.sender`).\n /// If calling a fill function, this address will represent the taker.\n /// If calling a cancel function, this address will represent the maker.\n /// @return Signer of 0x transaction if entry point is `executeTransaction`.\n /// `msg.sender` if entry point is any other function.\n function getCurrentContextAddress()\n internal\n view\n returns (address);\n}\n",
- "2.0.0/test/TestSignatureValidator/TestSignatureValidator.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../../protocol/Exchange/MixinSignatureValidator.sol\";\nimport \"../../protocol/Exchange/MixinTransactions.sol\";\n\ncontract TestSignatureValidator is\n MixinSignatureValidator,\n MixinTransactions\n{\n\n function publicIsValidSignature(\n bytes32 hash,\n address signer,\n bytes memory signature\n )\n public\n view\n returns (bool isValid)\n {\n isValid = isValidSignature(\n hash,\n signer,\n signature\n );\n return isValid;\n }\n}\n",
- "2.0.0/utils/LibBytes/LibBytes.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.24;\n\nlibrary LibBytes {\n\n using LibBytes for bytes;\n\n /// @dev Gets the memory address for a byte array.\n /// @param input Byte array to lookup.\n /// @return memoryAddress Memory address of byte array. This\n /// points to the header of the byte array which contains\n /// the length.\n function rawAddress(bytes memory input)\n internal\n pure\n returns (uint256 memoryAddress)\n {\n assembly {\n memoryAddress := input\n }\n return memoryAddress;\n }\n \n /// @dev Gets the memory address for the contents of a byte array.\n /// @param input Byte array to lookup.\n /// @return memoryAddress Memory address of the contents of the byte array.\n function contentAddress(bytes memory input)\n internal\n pure\n returns (uint256 memoryAddress)\n {\n assembly {\n memoryAddress := add(input, 32)\n }\n return memoryAddress;\n }\n\n /// @dev Copies `length` bytes from memory location `source` to `dest`.\n /// @param dest memory address to copy bytes to.\n /// @param source memory address to copy bytes from.\n /// @param length number of bytes to copy.\n function memCopy(\n uint256 dest,\n uint256 source,\n uint256 length\n )\n internal\n pure\n {\n if (length < 32) {\n // Handle a partial word by reading destination and masking\n // off the bits we are interested in.\n // This correctly handles overlap, zero lengths and source == dest\n assembly {\n let mask := sub(exp(256, sub(32, length)), 1)\n let s := and(mload(source), not(mask))\n let d := and(mload(dest), mask)\n mstore(dest, or(s, d))\n }\n } else {\n // Skip the O(length) loop when source == dest.\n if (source == dest) {\n return;\n }\n\n // For large copies we copy whole words at a time. The final\n // word is aligned to the end of the range (instead of after the\n // previous) to handle partial words. So a copy will look like this:\n //\n // ####\n // ####\n // ####\n // ####\n //\n // We handle overlap in the source and destination range by\n // changing the copying direction. This prevents us from\n // overwriting parts of source that we still need to copy.\n //\n // This correctly handles source == dest\n //\n if (source > dest) {\n assembly {\n // We subtract 32 from `sEnd` and `dEnd` because it\n // is easier to compare with in the loop, and these\n // are also the addresses we need for copying the\n // last bytes.\n length := sub(length, 32)\n let sEnd := add(source, length)\n let dEnd := add(dest, length)\n\n // Remember the last 32 bytes of source\n // This needs to be done here and not after the loop\n // because we may have overwritten the last bytes in\n // source already due to overlap.\n let last := mload(sEnd)\n\n // Copy whole words front to back\n // Note: the first check is always true,\n // this could have been a do-while loop.\n for {} lt(source, sEnd) {} {\n mstore(dest, mload(source))\n source := add(source, 32)\n dest := add(dest, 32)\n }\n \n // Write the last 32 bytes\n mstore(dEnd, last)\n }\n } else {\n assembly {\n // We subtract 32 from `sEnd` and `dEnd` because those\n // are the starting points when copying a word at the end.\n length := sub(length, 32)\n let sEnd := add(source, length)\n let dEnd := add(dest, length)\n\n // Remember the first 32 bytes of source\n // This needs to be done here and not after the loop\n // because we may have overwritten the first bytes in\n // source already due to overlap.\n let first := mload(source)\n\n // Copy whole words back to front\n // We use a signed comparisson here to allow dEnd to become\n // negative (happens when source and dest < 32). Valid\n // addresses in local memory will never be larger than\n // 2**255, so they can be safely re-interpreted as signed.\n // Note: the first check is always true,\n // this could have been a do-while loop.\n for {} slt(dest, dEnd) {} {\n mstore(dEnd, mload(sEnd))\n sEnd := sub(sEnd, 32)\n dEnd := sub(dEnd, 32)\n }\n \n // Write the first 32 bytes\n mstore(dest, first)\n }\n }\n }\n }\n \n /// @dev Returns a slices from a byte array.\n /// @param b The byte array to take a slice from.\n /// @param from The starting index for the slice (inclusive).\n /// @param to The final index for the slice (exclusive).\n /// @return result The slice containing bytes at indices [from, to)\n function slice(bytes memory b, uint256 from, uint256 to)\n internal\n pure\n returns (bytes memory result)\n {\n require(\n from <= to,\n \"FROM_LESS_THAN_TO_REQUIRED\"\n );\n require(\n to < b.length,\n \"TO_LESS_THAN_LENGTH_REQUIRED\"\n );\n \n // Create a new bytes structure and copy contents\n result = new bytes(to - from);\n memCopy(\n result.contentAddress(),\n b.contentAddress() + from,\n result.length);\n return result;\n }\n \n /// @dev Returns a slice from a byte array without preserving the input.\n /// @param b The byte array to take a slice from. Will be destroyed in the process.\n /// @param from The starting index for the slice (inclusive).\n /// @param to The final index for the slice (exclusive).\n /// @return result The slice containing bytes at indices [from, to)\n /// @dev When `from == 0`, the original array will match the slice. In other cases its state will be corrupted.\n function sliceDestructive(bytes memory b, uint256 from, uint256 to)\n internal\n pure\n returns (bytes memory result)\n {\n require(\n from <= to,\n \"FROM_LESS_THAN_TO_REQUIRED\"\n );\n require(\n to < b.length,\n \"TO_LESS_THAN_LENGTH_REQUIRED\"\n );\n \n // Create a new bytes structure around [from, to) in-place.\n assembly {\n result := add(b, from)\n mstore(result, sub(to, from))\n }\n return result;\n }\n\n /// @dev Pops the last byte off of a byte array by modifying its length.\n /// @param b Byte array that will be modified.\n /// @return The byte that was popped off.\n function popLastByte(bytes memory b)\n internal\n pure\n returns (bytes1 result)\n {\n require(\n b.length > 0,\n \"GREATER_THAN_ZERO_LENGTH_REQUIRED\"\n );\n\n // Store last byte.\n result = b[b.length - 1];\n\n assembly {\n // Decrement length of byte array.\n let newLen := sub(mload(b), 1)\n mstore(b, newLen)\n }\n return result;\n }\n\n /// @dev Pops the last 20 bytes off of a byte array by modifying its length.\n /// @param b Byte array that will be modified.\n /// @return The 20 byte address that was popped off.\n function popLast20Bytes(bytes memory b)\n internal\n pure\n returns (address result)\n {\n require(\n b.length >= 20,\n \"GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\"\n );\n\n // Store last 20 bytes.\n result = readAddress(b, b.length - 20);\n\n assembly {\n // Subtract 20 from byte array length.\n let newLen := sub(mload(b), 20)\n mstore(b, newLen)\n }\n return result;\n }\n\n /// @dev Tests equality of two byte arrays.\n /// @param lhs First byte array to compare.\n /// @param rhs Second byte array to compare.\n /// @return True if arrays are the same. False otherwise.\n function equals(\n bytes memory lhs,\n bytes memory rhs\n )\n internal\n pure\n returns (bool equal)\n {\n // Keccak gas cost is 30 + numWords * 6. This is a cheap way to compare.\n // We early exit on unequal lengths, but keccak would also correctly\n // handle this.\n return lhs.length == rhs.length && keccak256(lhs) == keccak256(rhs);\n }\n\n /// @dev Reads an address from a position in a byte array.\n /// @param b Byte array containing an address.\n /// @param index Index in byte array of address.\n /// @return address from byte array.\n function readAddress(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (address result)\n {\n require(\n b.length >= index + 20, // 20 is length of address\n \"GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\"\n );\n\n // Add offset to index:\n // 1. Arrays are prefixed by 32-byte length parameter (add 32 to index)\n // 2. Account for size difference between address length and 32-byte storage word (subtract 12 from index)\n index += 20;\n\n // Read address from array memory\n assembly {\n // 1. Add index to address of bytes array\n // 2. Load 32-byte word from memory\n // 3. Apply 20-byte mask to obtain address\n result := and(mload(add(b, index)), 0xffffffffffffffffffffffffffffffffffffffff)\n }\n return result;\n }\n\n /// @dev Writes an address into a specific position in a byte array.\n /// @param b Byte array to insert address into.\n /// @param index Index in byte array of address.\n /// @param input Address to put into byte array.\n function writeAddress(\n bytes memory b,\n uint256 index,\n address input\n )\n internal\n pure\n {\n require(\n b.length >= index + 20, // 20 is length of address\n \"GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\"\n );\n\n // Add offset to index:\n // 1. Arrays are prefixed by 32-byte length parameter (add 32 to index)\n // 2. Account for size difference between address length and 32-byte storage word (subtract 12 from index)\n index += 20;\n\n // Store address into array memory\n assembly {\n // The address occupies 20 bytes and mstore stores 32 bytes.\n // First fetch the 32-byte word where we'll be storing the address, then\n // apply a mask so we have only the bytes in the word that the address will not occupy.\n // Then combine these bytes with the address and store the 32 bytes back to memory with mstore.\n\n // 1. Add index to address of bytes array\n // 2. Load 32-byte word from memory\n // 3. Apply 12-byte mask to obtain extra bytes occupying word of memory where we'll store the address\n let neighbors := and(mload(add(b, index)), 0xffffffffffffffffffffffff0000000000000000000000000000000000000000)\n \n // Make sure input address is clean.\n // (Solidity does not guarantee this)\n input := and(input, 0xffffffffffffffffffffffffffffffffffffffff)\n\n // Store the neighbors and address into memory\n mstore(add(b, index), xor(input, neighbors))\n }\n }\n\n /// @dev Reads a bytes32 value from a position in a byte array.\n /// @param b Byte array containing a bytes32 value.\n /// @param index Index in byte array of bytes32 value.\n /// @return bytes32 value from byte array.\n function readBytes32(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (bytes32 result)\n {\n require(\n b.length >= index + 32,\n \"GREATER_OR_EQUAL_TO_32_LENGTH_REQUIRED\"\n );\n\n // Arrays are prefixed by a 256 bit length parameter\n index += 32;\n\n // Read the bytes32 from array memory\n assembly {\n result := mload(add(b, index))\n }\n return result;\n }\n\n /// @dev Writes a bytes32 into a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input bytes32 to put into byte array.\n function writeBytes32(\n bytes memory b,\n uint256 index,\n bytes32 input\n )\n internal\n pure\n {\n require(\n b.length >= index + 32,\n \"GREATER_OR_EQUAL_TO_32_LENGTH_REQUIRED\"\n );\n\n // Arrays are prefixed by a 256 bit length parameter\n index += 32;\n\n // Read the bytes32 from array memory\n assembly {\n mstore(add(b, index), input)\n }\n }\n\n /// @dev Reads a uint256 value from a position in a byte array.\n /// @param b Byte array containing a uint256 value.\n /// @param index Index in byte array of uint256 value.\n /// @return uint256 value from byte array.\n function readUint256(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (uint256 result)\n {\n return uint256(readBytes32(b, index));\n }\n\n /// @dev Writes a uint256 into a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input uint256 to put into byte array.\n function writeUint256(\n bytes memory b,\n uint256 index,\n uint256 input\n )\n internal\n pure\n {\n writeBytes32(b, index, bytes32(input));\n }\n\n /// @dev Reads an unpadded bytes4 value from a position in a byte array.\n /// @param b Byte array containing a bytes4 value.\n /// @param index Index in byte array of bytes4 value.\n /// @return bytes4 value from byte array.\n function readBytes4(\n bytes memory b,\n uint256 index)\n internal\n pure\n returns (bytes4 result)\n {\n require(\n b.length >= index + 4,\n \"GREATER_OR_EQUAL_TO_4_LENGTH_REQUIRED\"\n );\n assembly {\n result := mload(add(b, 32))\n // Solidity does not require us to clean the trailing bytes.\n // We do it anyway\n result := and(result, 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000)\n }\n return result;\n }\n\n /// @dev Reads nested bytes from a specific position.\n /// @dev NOTE: the returned value overlaps with the input value.\n /// Both should be treated as immutable.\n /// @param b Byte array containing nested bytes.\n /// @param index Index of nested bytes.\n /// @return result Nested bytes.\n function readBytesWithLength(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (bytes memory result)\n {\n // Read length of nested bytes\n uint256 nestedBytesLength = readUint256(b, index);\n index += 32;\n\n // Assert length of <b> is valid, given\n // length of nested bytes\n require(\n b.length >= index + nestedBytesLength,\n \"GREATER_OR_EQUAL_TO_NESTED_BYTES_LENGTH_REQUIRED\"\n );\n \n // Return a pointer to the byte array as it exists inside `b`\n assembly {\n result := add(b, index)\n }\n return result;\n }\n\n /// @dev Inserts bytes at a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input bytes to insert.\n function writeBytesWithLength(\n bytes memory b,\n uint256 index,\n bytes memory input\n )\n internal\n pure\n {\n // Assert length of <b> is valid, given\n // length of input\n require(\n b.length >= index + 32 /* 32 bytes to store length */ + input.length,\n \"GREATER_OR_EQUAL_TO_NESTED_BYTES_LENGTH_REQUIRED\"\n );\n\n // Copy <input> into <b>\n memCopy(\n b.contentAddress() + index,\n input.rawAddress(), // includes length of <input>\n input.length + 32 // +32 bytes to store <input> length\n );\n }\n\n /// @dev Performs a deep copy of a byte array onto another byte array of greater than or equal length.\n /// @param dest Byte array that will be overwritten with source bytes.\n /// @param source Byte array to copy onto dest bytes.\n function deepCopyBytes(\n bytes memory dest,\n bytes memory source\n )\n internal\n pure\n {\n uint256 sourceLen = source.length;\n // Dest length must be >= source length, or some bytes would not be copied.\n require(\n dest.length >= sourceLen,\n \"GREATER_OR_EQUAL_TO_SOURCE_BYTES_LENGTH_REQUIRED\"\n );\n memCopy(\n dest.contentAddress(),\n source.contentAddress(),\n sourceLen\n );\n }\n}\n"
+ "2.0.0/protocol/Exchange/MixinSignatureValidator.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.24;\n\nimport \"../../utils/LibBytes/LibBytes.sol\";\nimport \"./mixins/MSignatureValidator.sol\";\nimport \"./mixins/MTransactions.sol\";\nimport \"./interfaces/IWallet.sol\";\nimport \"./interfaces/IValidator.sol\";\n\n\ncontract MixinSignatureValidator is\n MSignatureValidator,\n MTransactions\n{\n using LibBytes for bytes;\n \n // Mapping of hash => signer => signed\n mapping (bytes32 => mapping (address => bool)) public preSigned;\n\n // Mapping of signer => validator => approved\n mapping (address => mapping (address => bool)) public allowedValidators;\n\n /// @dev Approves a hash on-chain using any valid signature type.\n /// After presigning a hash, the preSign signature type will become valid for that hash and signer.\n /// @param signerAddress Address that should have signed the given hash.\n /// @param signature Proof that the hash has been signed by signer.\n function preSign(\n bytes32 hash,\n address signerAddress,\n bytes signature\n )\n external\n {\n require(\n isValidSignature(\n hash,\n signerAddress,\n signature\n ),\n \"INVALID_SIGNATURE\"\n );\n preSigned[hash][signerAddress] = true;\n }\n\n /// @dev Approves/unnapproves a Validator contract to verify signatures on signer's behalf.\n /// @param validatorAddress Address of Validator contract.\n /// @param approval Approval or disapproval of Validator contract.\n function setSignatureValidatorApproval(\n address validatorAddress,\n bool approval\n )\n external\n {\n address signerAddress = getCurrentContextAddress();\n allowedValidators[signerAddress][validatorAddress] = approval;\n emit SignatureValidatorApproval(\n signerAddress,\n validatorAddress,\n approval\n );\n }\n\n /// @dev Verifies that a hash has been signed by the given signer.\n /// @param hash Any 32 byte hash.\n /// @param signerAddress Address that should have signed the given hash.\n /// @param signature Proof that the hash has been signed by signer.\n /// @return True if the address recovered from the provided signature matches the input signer address.\n function isValidSignature(\n bytes32 hash,\n address signerAddress,\n bytes memory signature\n )\n public\n view\n returns (bool isValid)\n {\n require(\n signature.length > 0,\n \"LENGTH_GREATER_THAN_0_REQUIRED\"\n );\n\n // Ensure signature is supported\n uint8 signatureTypeRaw = uint8(signature.popLastByte());\n require(\n signatureTypeRaw < uint8(SignatureType.NSignatureTypes),\n \"SIGNATURE_UNSUPPORTED\"\n );\n\n // Pop last byte off of signature byte array.\n SignatureType signatureType = SignatureType(signatureTypeRaw);\n\n // Variables are not scoped in Solidity.\n uint8 v;\n bytes32 r;\n bytes32 s;\n address recovered;\n\n // Always illegal signature.\n // This is always an implicit option since a signer can create a\n // signature array with invalid type or length. We may as well make\n // it an explicit option. This aids testing and analysis. It is\n // also the initialization value for the enum type.\n if (signatureType == SignatureType.Illegal) {\n revert(\"SIGNATURE_ILLEGAL\");\n\n // Always invalid signature.\n // Like Illegal, this is always implicitly available and therefore\n // offered explicitly. It can be implicitly created by providing\n // a correctly formatted but incorrect signature.\n } else if (signatureType == SignatureType.Invalid) {\n require(\n signature.length == 0,\n \"LENGTH_0_REQUIRED\"\n );\n isValid = false;\n return isValid;\n\n // Signature using EIP712\n } else if (signatureType == SignatureType.EIP712) {\n require(\n signature.length == 65,\n \"LENGTH_65_REQUIRED\"\n );\n v = uint8(signature[0]);\n r = signature.readBytes32(1);\n s = signature.readBytes32(33);\n recovered = ecrecover(hash, v, r, s);\n isValid = signerAddress == recovered;\n return isValid;\n\n // Signed using web3.eth_sign\n } else if (signatureType == SignatureType.EthSign) {\n require(\n signature.length == 65,\n \"LENGTH_65_REQUIRED\"\n );\n v = uint8(signature[0]);\n r = signature.readBytes32(1);\n s = signature.readBytes32(33);\n recovered = ecrecover(\n keccak256(abi.encodePacked(\n \"\\x19Ethereum Signed Message:\\n32\",\n hash\n )),\n v,\n r,\n s\n );\n isValid = signerAddress == recovered;\n return isValid;\n\n // Implicitly signed by caller.\n // The signer has initiated the call. In the case of non-contract\n // accounts it means the transaction itself was signed.\n // Example: let's say for a particular operation three signatures\n // A, B and C are required. To submit the transaction, A and B can\n // give a signature to C, who can then submit the transaction using\n // `Caller` for his own signature. Or A and C can sign and B can\n // submit using `Caller`. Having `Caller` allows this flexibility.\n } else if (signatureType == SignatureType.Caller) {\n require(\n signature.length == 0,\n \"LENGTH_0_REQUIRED\"\n );\n isValid = signerAddress == msg.sender;\n return isValid;\n\n // Signature verified by wallet contract.\n // If used with an order, the maker of the order is the wallet contract.\n } else if (signatureType == SignatureType.Wallet) {\n isValid = IWallet(signerAddress).isValidSignature(hash, signature);\n return isValid;\n\n // Signature verified by validator contract.\n // If used with an order, the maker of the order can still be an EOA.\n // A signature using this type should be encoded as:\n // | Offset | Length | Contents |\n // | 0x00 | x | Signature to validate |\n // | 0x00 + x | 20 | Address of validator contract |\n // | 0x14 + x | 1 | Signature type is always \"\\x06\" |\n } else if (signatureType == SignatureType.Validator) {\n // Pop last 20 bytes off of signature byte array.\n\n address validatorAddress = signature.popLast20Bytes();\n \n // Ensure signer has approved validator.\n if (!allowedValidators[signerAddress][validatorAddress]) {\n return false;\n }\n isValid = IValidator(validatorAddress).isValidSignature(\n hash,\n signerAddress,\n signature\n );\n return isValid;\n\n // Signer signed hash previously using the preSign function.\n } else if (signatureType == SignatureType.PreSigned) {\n isValid = preSigned[hash][signerAddress];\n return isValid;\n\n // Signature from Trezor hardware wallet.\n // It differs from web3.eth_sign in the encoding of message length\n // (Bitcoin varint encoding vs ascii-decimal, the latter is not\n // self-terminating which leads to ambiguities).\n // See also:\n // https://en.bitcoin.it/wiki/Protocol_documentation#Variable_length_integer\n // https://github.com/trezor/trezor-mcu/blob/master/firmware/ethereum.c#L602\n // https://github.com/trezor/trezor-mcu/blob/master/firmware/crypto.c#L36\n } else if (signatureType == SignatureType.Trezor) {\n require(\n signature.length == 65,\n \"LENGTH_65_REQUIRED\"\n );\n v = uint8(signature[0]);\n r = signature.readBytes32(1);\n s = signature.readBytes32(33);\n recovered = ecrecover(\n keccak256(abi.encodePacked(\n \"\\x19Ethereum Signed Message:\\n\\x20\",\n hash\n )),\n v,\n r,\n s\n );\n isValid = signerAddress == recovered;\n return isValid;\n }\n\n // Anything else is illegal (We do not return false because\n // the signature may actually be valid, just not in a format\n // that we currently support. In this case returning false\n // may lead the caller to incorrectly believe that the\n // signature was invalid.)\n revert(\"SIGNATURE_UNSUPPORTED\");\n }\n}\n",
+ "2.0.0/protocol/Exchange/MixinTransactions.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*/\npragma solidity 0.4.24;\n\nimport \"./libs/LibExchangeErrors.sol\";\nimport \"./mixins/MSignatureValidator.sol\";\nimport \"./mixins/MTransactions.sol\";\nimport \"./libs/LibEIP712.sol\";\n\n\ncontract MixinTransactions is\n LibEIP712,\n MSignatureValidator,\n MTransactions\n{\n\n // Mapping of transaction hash => executed\n // This prevents transactions from being executed more than once.\n mapping (bytes32 => bool) public transactions;\n\n // Address of current transaction signer\n address public currentContextAddress;\n\n // Hash for the EIP712 ZeroEx Transaction Schema\n bytes32 constant internal EIP712_ZEROEX_TRANSACTION_SCHEMA_HASH = keccak256(abi.encodePacked(\n \"ZeroExTransaction(\",\n \"uint256 salt,\",\n \"address signerAddress,\",\n \"bytes data\",\n \")\"\n ));\n\n /// @dev Executes an exchange method call in the context of signer.\n /// @param salt Arbitrary number to ensure uniqueness of transaction hash.\n /// @param signerAddress Address of transaction signer.\n /// @param data AbiV2 encoded calldata.\n /// @param signature Proof of signer transaction by signer.\n function executeTransaction(\n uint256 salt,\n address signerAddress,\n bytes data,\n bytes signature\n )\n external\n {\n // Prevent reentrancy\n require(\n currentContextAddress == address(0),\n \"REENTRANCY_ILLEGAL\"\n );\n\n bytes32 transactionHash = hashEIP712Message(hashZeroExTransaction(\n salt,\n signerAddress,\n data\n ));\n\n // Validate transaction has not been executed\n require(\n !transactions[transactionHash],\n \"INVALID_TX_HASH\"\n );\n\n // Transaction always valid if signer is sender of transaction\n if (signerAddress != msg.sender) {\n // Validate signature\n require(\n isValidSignature(\n transactionHash,\n signerAddress,\n signature\n ),\n \"INVALID_TX_SIGNATURE\"\n );\n\n // Set the current transaction signer\n currentContextAddress = signerAddress;\n }\n\n // Execute transaction\n transactions[transactionHash] = true;\n require(\n address(this).delegatecall(data),\n \"FAILED_EXECUTION\"\n );\n\n // Reset current transaction signer if it was previously updated\n if (signerAddress != msg.sender) {\n currentContextAddress = address(0);\n }\n }\n\n /// @dev Calculates EIP712 hash of the Transaction.\n /// @param salt Arbitrary number to ensure uniqueness of transaction hash.\n /// @param signerAddress Address of transaction signer.\n /// @param data AbiV2 encoded calldata.\n /// @return EIP712 hash of the Transaction.\n function hashZeroExTransaction(\n uint256 salt,\n address signerAddress,\n bytes memory data\n )\n internal\n pure\n returns (bytes32 result)\n {\n bytes32 schemaHash = EIP712_ZEROEX_TRANSACTION_SCHEMA_HASH;\n bytes32 dataHash = keccak256(data);\n\n // Assembly for more efficiently computing:\n // keccak256(abi.encode(\n // EIP712_ZEROEX_TRANSACTION_SCHEMA_HASH,\n // salt,\n // signerAddress,\n // keccak256(data)\n // ));\n\n assembly {\n let memPtr := mload(64)\n mstore(memPtr, schemaHash)\n mstore(add(memPtr, 32), salt)\n mstore(add(memPtr, 64), and(signerAddress, 0xffffffffffffffffffffffffffffffffffffffff))\n mstore(add(memPtr, 96), dataHash)\n result := keccak256(memPtr, 128)\n }\n\n return result;\n }\n\n /// @dev The current function will be called in the context of this address (either 0x transaction signer or `msg.sender`).\n /// If calling a fill function, this address will represent the taker.\n /// If calling a cancel function, this address will represent the maker.\n /// @return Signer of 0x transaction if entry point is `executeTransaction`.\n /// `msg.sender` if entry point is any other function.\n function getCurrentContextAddress()\n internal\n view\n returns (address)\n {\n address contextAddress = currentContextAddress == address(0) ? msg.sender : currentContextAddress;\n return contextAddress;\n }\n}\n",
+ "2.0.0/protocol/Exchange/interfaces/ISignatureValidator.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.24;\n\n\ncontract ISignatureValidator {\n\n /// @dev Approves a hash on-chain using any valid signature type.\n /// After presigning a hash, the preSign signature type will become valid for that hash and signer.\n /// @param signerAddress Address that should have signed the given hash.\n /// @param signature Proof that the hash has been signed by signer.\n function preSign(\n bytes32 hash,\n address signerAddress,\n bytes signature\n )\n external;\n \n /// @dev Approves/unnapproves a Validator contract to verify signatures on signer's behalf.\n /// @param validatorAddress Address of Validator contract.\n /// @param approval Approval or disapproval of Validator contract.\n function setSignatureValidatorApproval(\n address validatorAddress,\n bool approval\n )\n external;\n\n /// @dev Verifies that a signature is valid.\n /// @param hash Message hash that is signed.\n /// @param signerAddress Address of signer.\n /// @param signature Proof of signing.\n /// @return Validity of order signature.\n function isValidSignature(\n bytes32 hash,\n address signerAddress,\n bytes memory signature\n )\n public\n view\n returns (bool isValid);\n}\n",
+ "2.0.0/protocol/Exchange/interfaces/ITransactions.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*/\npragma solidity 0.4.24;\n\n\ncontract ITransactions {\n\n /// @dev Executes an exchange method call in the context of signer.\n /// @param salt Arbitrary number to ensure uniqueness of transaction hash.\n /// @param signerAddress Address of transaction signer.\n /// @param data AbiV2 encoded calldata.\n /// @param signature Proof of signer transaction by signer.\n function executeTransaction(\n uint256 salt,\n address signerAddress,\n bytes data,\n bytes signature\n )\n external;\n}\n",
+ "2.0.0/protocol/Exchange/interfaces/IValidator.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.24;\n\n\ncontract IValidator {\n\n /// @dev Verifies that a signature is valid.\n /// @param hash Message hash that is signed.\n /// @param signerAddress Address that should have signed the given hash.\n /// @param signature Proof of signing.\n /// @return Validity of order signature.\n function isValidSignature(\n bytes32 hash,\n address signerAddress,\n bytes signature\n )\n external\n view\n returns (bool isValid);\n}\n",
+ "2.0.0/protocol/Exchange/interfaces/IWallet.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.24;\n\n\ncontract IWallet {\n\n /// @dev Verifies that a signature is valid.\n /// @param hash Message hash that is signed.\n /// @param signature Proof of signing.\n /// @return Validity of order signature.\n function isValidSignature(\n bytes32 hash,\n bytes signature\n )\n external\n view\n returns (bool isValid);\n}\n",
+ "2.0.0/protocol/Exchange/libs/LibEIP712.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.24;\n\n\ncontract LibEIP712 {\n // EIP191 header for EIP712 prefix\n string constant internal EIP191_HEADER = \"\\x19\\x01\";\n\n // EIP712 Domain Name value\n string constant internal EIP712_DOMAIN_NAME = \"0x Protocol\";\n\n // EIP712 Domain Version value\n string constant internal EIP712_DOMAIN_VERSION = \"2\";\n\n // Hash of the EIP712 Domain Separator Schema\n bytes32 public constant EIP712_DOMAIN_SEPARATOR_SCHEMA_HASH = keccak256(abi.encodePacked(\n \"EIP712Domain(\",\n \"string name,\",\n \"string version,\",\n \"address verifyingContract\",\n \")\"\n ));\n\n // Hash of the EIP712 Domain Separator data\n // solhint-disable-next-line var-name-mixedcase\n bytes32 public EIP712_DOMAIN_HASH;\n\n constructor ()\n public\n {\n EIP712_DOMAIN_HASH = keccak256(abi.encode(\n EIP712_DOMAIN_SEPARATOR_SCHEMA_HASH,\n keccak256(bytes(EIP712_DOMAIN_NAME)),\n keccak256(bytes(EIP712_DOMAIN_VERSION)),\n address(this)\n ));\n }\n\n /// @dev Calculates EIP712 encoding for a hash struct in this EIP712 Domain.\n /// @param hashStruct The EIP712 hash struct.\n /// @return EIP712 hash applied to this EIP712 Domain.\n function hashEIP712Message(bytes32 hashStruct)\n internal\n view\n returns (bytes32)\n {\n return keccak256(abi.encodePacked(EIP191_HEADER, EIP712_DOMAIN_HASH, hashStruct));\n }\n}\n",
+ "2.0.0/protocol/Exchange/libs/LibExchangeErrors.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\n// solhint-disable\npragma solidity 0.4.24;\n\n\n/// @dev This contract documents the revert reasons used in the Exchange contract.\n/// This contract is intended to serve as a reference, but is not actually used for efficiency reasons.\ncontract LibExchangeErrors {\n\n /// Order validation errors ///\n string constant ORDER_UNFILLABLE = \"ORDER_UNFILLABLE\"; // Order cannot be filled.\n string constant INVALID_MAKER = \"INVALID_MAKER\"; // Invalid makerAddress.\n string constant INVALID_TAKER = \"INVALID_TAKER\"; // Invalid takerAddress.\n string constant INVALID_SENDER = \"INVALID_SENDER\"; // Invalid `msg.sender`.\n string constant INVALID_ORDER_SIGNATURE = \"INVALID_ORDER_SIGNATURE\"; // Signature validation failed. \n \n /// fillOrder validation errors ///\n string constant INVALID_TAKER_AMOUNT = \"INVALID_TAKER_AMOUNT\"; // takerAssetFillAmount cannot equal 0.\n string constant ROUNDING_ERROR = \"ROUNDING_ERROR\"; // Rounding error greater than 0.1% of takerAssetFillAmount. \n \n /// Signature validation errors ///\n string constant INVALID_SIGNATURE = \"INVALID_SIGNATURE\"; // Signature validation failed. \n string constant SIGNATURE_ILLEGAL = \"SIGNATURE_ILLEGAL\"; // Signature type is illegal.\n string constant SIGNATURE_UNSUPPORTED = \"SIGNATURE_UNSUPPORTED\"; // Signature type unsupported.\n \n /// cancelOrdersUptTo errors ///\n string constant INVALID_NEW_ORDER_EPOCH = \"INVALID_NEW_ORDER_EPOCH\"; // Specified salt must be greater than or equal to existing orderEpoch.\n\n /// fillOrKillOrder errors ///\n string constant COMPLETE_FILL_FAILED = \"COMPLETE_FILL_FAILED\"; // Desired takerAssetFillAmount could not be completely filled. \n\n /// matchOrders errors ///\n string constant NEGATIVE_SPREAD_REQUIRED = \"NEGATIVE_SPREAD_REQUIRED\"; // Matched orders must have a negative spread.\n\n /// Transaction errors ///\n string constant REENTRANCY_ILLEGAL = \"REENTRANCY_ILLEGAL\"; // Recursive reentrancy is not allowed. \n string constant INVALID_TX_HASH = \"INVALID_TX_HASH\"; // Transaction has already been executed. \n string constant INVALID_TX_SIGNATURE = \"INVALID_TX_SIGNATURE\"; // Signature validation failed. \n string constant FAILED_EXECUTION = \"FAILED_EXECUTION\"; // Transaction execution failed. \n \n /// registerAssetProxy errors ///\n string constant ASSET_PROXY_ALREADY_EXISTS = \"ASSET_PROXY_ALREADY_EXISTS\"; // AssetProxy with same id already exists.\n\n /// dispatchTransferFrom errors ///\n string constant ASSET_PROXY_DOES_NOT_EXIST = \"ASSET_PROXY_DOES_NOT_EXIST\"; // No assetProxy registered at given id.\n string constant TRANSFER_FAILED = \"TRANSFER_FAILED\"; // Asset transfer unsuccesful.\n\n /// Length validation errors ///\n string constant LENGTH_GREATER_THAN_0_REQUIRED = \"LENGTH_GREATER_THAN_0_REQUIRED\"; // Byte array must have a length greater than 0.\n string constant LENGTH_GREATER_THAN_3_REQUIRED = \"LENGTH_GREATER_THAN_3_REQUIRED\"; // Byte array must have a length greater than 3.\n string constant LENGTH_0_REQUIRED = \"LENGTH_0_REQUIRED\"; // Byte array must have a length of 0.\n string constant LENGTH_65_REQUIRED = \"LENGTH_65_REQUIRED\"; // Byte array must have a length of 65.\n}\n",
+ "2.0.0/protocol/Exchange/mixins/MSignatureValidator.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.24;\n\nimport \"../interfaces/ISignatureValidator.sol\";\n\n\ncontract MSignatureValidator is\n ISignatureValidator\n{\n event SignatureValidatorApproval(\n address indexed signerAddress, // Address that approves or disapproves a contract to verify signatures.\n address indexed validatorAddress, // Address of signature validator contract.\n bool approved // Approval or disapproval of validator contract.\n );\n\n // Allowed signature types.\n enum SignatureType {\n Illegal, // 0x00, default value\n Invalid, // 0x01\n EIP712, // 0x02\n EthSign, // 0x03\n Caller, // 0x04\n Wallet, // 0x05\n Validator, // 0x06\n PreSigned, // 0x07\n Trezor, // 0x08\n NSignatureTypes // 0x09, number of signature types. Always leave at end.\n }\n}\n",
+ "2.0.0/protocol/Exchange/mixins/MTransactions.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*/\npragma solidity 0.4.24;\n\nimport \"../interfaces/ITransactions.sol\";\n\n\ncontract MTransactions is\n ITransactions\n{\n\n /// @dev The current function will be called in the context of this address (either 0x transaction signer or `msg.sender`).\n /// If calling a fill function, this address will represent the taker.\n /// If calling a cancel function, this address will represent the maker.\n /// @return Signer of 0x transaction if entry point is `executeTransaction`.\n /// `msg.sender` if entry point is any other function.\n function getCurrentContextAddress()\n internal\n view\n returns (address);\n}\n",
+ "2.0.0/test/TestSignatureValidator/TestSignatureValidator.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.24;\n\nimport \"../../protocol/Exchange/MixinSignatureValidator.sol\";\nimport \"../../protocol/Exchange/MixinTransactions.sol\";\n\n\ncontract TestSignatureValidator is\n MixinSignatureValidator,\n MixinTransactions\n{\n\n function publicIsValidSignature(\n bytes32 hash,\n address signer,\n bytes memory signature\n )\n public\n view\n returns (bool isValid)\n {\n isValid = isValidSignature(\n hash,\n signer,\n signature\n );\n return isValid;\n }\n}\n",
+ "2.0.0/utils/LibBytes/LibBytes.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.24;\n\n\nlibrary LibBytes {\n\n using LibBytes for bytes;\n\n /// @dev Gets the memory address for a byte array.\n /// @param input Byte array to lookup.\n /// @return memoryAddress Memory address of byte array. This\n /// points to the header of the byte array which contains\n /// the length.\n function rawAddress(bytes memory input)\n internal\n pure\n returns (uint256 memoryAddress)\n {\n assembly {\n memoryAddress := input\n }\n return memoryAddress;\n }\n \n /// @dev Gets the memory address for the contents of a byte array.\n /// @param input Byte array to lookup.\n /// @return memoryAddress Memory address of the contents of the byte array.\n function contentAddress(bytes memory input)\n internal\n pure\n returns (uint256 memoryAddress)\n {\n assembly {\n memoryAddress := add(input, 32)\n }\n return memoryAddress;\n }\n\n /// @dev Copies `length` bytes from memory location `source` to `dest`.\n /// @param dest memory address to copy bytes to.\n /// @param source memory address to copy bytes from.\n /// @param length number of bytes to copy.\n function memCopy(\n uint256 dest,\n uint256 source,\n uint256 length\n )\n internal\n pure\n {\n if (length < 32) {\n // Handle a partial word by reading destination and masking\n // off the bits we are interested in.\n // This correctly handles overlap, zero lengths and source == dest\n assembly {\n let mask := sub(exp(256, sub(32, length)), 1)\n let s := and(mload(source), not(mask))\n let d := and(mload(dest), mask)\n mstore(dest, or(s, d))\n }\n } else {\n // Skip the O(length) loop when source == dest.\n if (source == dest) {\n return;\n }\n\n // For large copies we copy whole words at a time. The final\n // word is aligned to the end of the range (instead of after the\n // previous) to handle partial words. So a copy will look like this:\n //\n // ####\n // ####\n // ####\n // ####\n //\n // We handle overlap in the source and destination range by\n // changing the copying direction. This prevents us from\n // overwriting parts of source that we still need to copy.\n //\n // This correctly handles source == dest\n //\n if (source > dest) {\n assembly {\n // We subtract 32 from `sEnd` and `dEnd` because it\n // is easier to compare with in the loop, and these\n // are also the addresses we need for copying the\n // last bytes.\n length := sub(length, 32)\n let sEnd := add(source, length)\n let dEnd := add(dest, length)\n\n // Remember the last 32 bytes of source\n // This needs to be done here and not after the loop\n // because we may have overwritten the last bytes in\n // source already due to overlap.\n let last := mload(sEnd)\n\n // Copy whole words front to back\n // Note: the first check is always true,\n // this could have been a do-while loop.\n // solhint-disable-next-line no-empty-blocks\n for {} lt(source, sEnd) {} {\n mstore(dest, mload(source))\n source := add(source, 32)\n dest := add(dest, 32)\n }\n \n // Write the last 32 bytes\n mstore(dEnd, last)\n }\n } else {\n assembly {\n // We subtract 32 from `sEnd` and `dEnd` because those\n // are the starting points when copying a word at the end.\n length := sub(length, 32)\n let sEnd := add(source, length)\n let dEnd := add(dest, length)\n\n // Remember the first 32 bytes of source\n // This needs to be done here and not after the loop\n // because we may have overwritten the first bytes in\n // source already due to overlap.\n let first := mload(source)\n\n // Copy whole words back to front\n // We use a signed comparisson here to allow dEnd to become\n // negative (happens when source and dest < 32). Valid\n // addresses in local memory will never be larger than\n // 2**255, so they can be safely re-interpreted as signed.\n // Note: the first check is always true,\n // this could have been a do-while loop.\n // solhint-disable-next-line no-empty-blocks\n for {} slt(dest, dEnd) {} {\n mstore(dEnd, mload(sEnd))\n sEnd := sub(sEnd, 32)\n dEnd := sub(dEnd, 32)\n }\n \n // Write the first 32 bytes\n mstore(dest, first)\n }\n }\n }\n }\n\n /// @dev Returns a slices from a byte array.\n /// @param b The byte array to take a slice from.\n /// @param from The starting index for the slice (inclusive).\n /// @param to The final index for the slice (exclusive).\n /// @return result The slice containing bytes at indices [from, to)\n function slice(\n bytes memory b,\n uint256 from,\n uint256 to\n )\n internal\n pure\n returns (bytes memory result)\n {\n require(\n from <= to,\n \"FROM_LESS_THAN_TO_REQUIRED\"\n );\n require(\n to < b.length,\n \"TO_LESS_THAN_LENGTH_REQUIRED\"\n );\n \n // Create a new bytes structure and copy contents\n result = new bytes(to - from);\n memCopy(\n result.contentAddress(),\n b.contentAddress() + from,\n result.length);\n return result;\n }\n \n /// @dev Returns a slice from a byte array without preserving the input.\n /// @param b The byte array to take a slice from. Will be destroyed in the process.\n /// @param from The starting index for the slice (inclusive).\n /// @param to The final index for the slice (exclusive).\n /// @return result The slice containing bytes at indices [from, to)\n /// @dev When `from == 0`, the original array will match the slice. In other cases its state will be corrupted.\n function sliceDestructive(\n bytes memory b,\n uint256 from,\n uint256 to\n )\n internal\n pure\n returns (bytes memory result)\n {\n require(\n from <= to,\n \"FROM_LESS_THAN_TO_REQUIRED\"\n );\n require(\n to < b.length,\n \"TO_LESS_THAN_LENGTH_REQUIRED\"\n );\n \n // Create a new bytes structure around [from, to) in-place.\n assembly {\n result := add(b, from)\n mstore(result, sub(to, from))\n }\n return result;\n }\n\n /// @dev Pops the last byte off of a byte array by modifying its length.\n /// @param b Byte array that will be modified.\n /// @return The byte that was popped off.\n function popLastByte(bytes memory b)\n internal\n pure\n returns (bytes1 result)\n {\n require(\n b.length > 0,\n \"GREATER_THAN_ZERO_LENGTH_REQUIRED\"\n );\n\n // Store last byte.\n result = b[b.length - 1];\n\n assembly {\n // Decrement length of byte array.\n let newLen := sub(mload(b), 1)\n mstore(b, newLen)\n }\n return result;\n }\n\n /// @dev Pops the last 20 bytes off of a byte array by modifying its length.\n /// @param b Byte array that will be modified.\n /// @return The 20 byte address that was popped off.\n function popLast20Bytes(bytes memory b)\n internal\n pure\n returns (address result)\n {\n require(\n b.length >= 20,\n \"GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\"\n );\n\n // Store last 20 bytes.\n result = readAddress(b, b.length - 20);\n\n assembly {\n // Subtract 20 from byte array length.\n let newLen := sub(mload(b), 20)\n mstore(b, newLen)\n }\n return result;\n }\n\n /// @dev Tests equality of two byte arrays.\n /// @param lhs First byte array to compare.\n /// @param rhs Second byte array to compare.\n /// @return True if arrays are the same. False otherwise.\n function equals(\n bytes memory lhs,\n bytes memory rhs\n )\n internal\n pure\n returns (bool equal)\n {\n // Keccak gas cost is 30 + numWords * 6. This is a cheap way to compare.\n // We early exit on unequal lengths, but keccak would also correctly\n // handle this.\n return lhs.length == rhs.length && keccak256(lhs) == keccak256(rhs);\n }\n\n /// @dev Reads an address from a position in a byte array.\n /// @param b Byte array containing an address.\n /// @param index Index in byte array of address.\n /// @return address from byte array.\n function readAddress(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (address result)\n {\n require(\n b.length >= index + 20, // 20 is length of address\n \"GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\"\n );\n\n // Add offset to index:\n // 1. Arrays are prefixed by 32-byte length parameter (add 32 to index)\n // 2. Account for size difference between address length and 32-byte storage word (subtract 12 from index)\n index += 20;\n\n // Read address from array memory\n assembly {\n // 1. Add index to address of bytes array\n // 2. Load 32-byte word from memory\n // 3. Apply 20-byte mask to obtain address\n result := and(mload(add(b, index)), 0xffffffffffffffffffffffffffffffffffffffff)\n }\n return result;\n }\n\n /// @dev Writes an address into a specific position in a byte array.\n /// @param b Byte array to insert address into.\n /// @param index Index in byte array of address.\n /// @param input Address to put into byte array.\n function writeAddress(\n bytes memory b,\n uint256 index,\n address input\n )\n internal\n pure\n {\n require(\n b.length >= index + 20, // 20 is length of address\n \"GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\"\n );\n\n // Add offset to index:\n // 1. Arrays are prefixed by 32-byte length parameter (add 32 to index)\n // 2. Account for size difference between address length and 32-byte storage word (subtract 12 from index)\n index += 20;\n\n // Store address into array memory\n assembly {\n // The address occupies 20 bytes and mstore stores 32 bytes.\n // First fetch the 32-byte word where we'll be storing the address, then\n // apply a mask so we have only the bytes in the word that the address will not occupy.\n // Then combine these bytes with the address and store the 32 bytes back to memory with mstore.\n\n // 1. Add index to address of bytes array\n // 2. Load 32-byte word from memory\n // 3. Apply 12-byte mask to obtain extra bytes occupying word of memory where we'll store the address\n let neighbors := and(\n mload(add(b, index)),\n 0xffffffffffffffffffffffff0000000000000000000000000000000000000000\n )\n \n // Make sure input address is clean.\n // (Solidity does not guarantee this)\n input := and(input, 0xffffffffffffffffffffffffffffffffffffffff)\n\n // Store the neighbors and address into memory\n mstore(add(b, index), xor(input, neighbors))\n }\n }\n\n /// @dev Reads a bytes32 value from a position in a byte array.\n /// @param b Byte array containing a bytes32 value.\n /// @param index Index in byte array of bytes32 value.\n /// @return bytes32 value from byte array.\n function readBytes32(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (bytes32 result)\n {\n require(\n b.length >= index + 32,\n \"GREATER_OR_EQUAL_TO_32_LENGTH_REQUIRED\"\n );\n\n // Arrays are prefixed by a 256 bit length parameter\n index += 32;\n\n // Read the bytes32 from array memory\n assembly {\n result := mload(add(b, index))\n }\n return result;\n }\n\n /// @dev Writes a bytes32 into a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input bytes32 to put into byte array.\n function writeBytes32(\n bytes memory b,\n uint256 index,\n bytes32 input\n )\n internal\n pure\n {\n require(\n b.length >= index + 32,\n \"GREATER_OR_EQUAL_TO_32_LENGTH_REQUIRED\"\n );\n\n // Arrays are prefixed by a 256 bit length parameter\n index += 32;\n\n // Read the bytes32 from array memory\n assembly {\n mstore(add(b, index), input)\n }\n }\n\n /// @dev Reads a uint256 value from a position in a byte array.\n /// @param b Byte array containing a uint256 value.\n /// @param index Index in byte array of uint256 value.\n /// @return uint256 value from byte array.\n function readUint256(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (uint256 result)\n {\n return uint256(readBytes32(b, index));\n }\n\n /// @dev Writes a uint256 into a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input uint256 to put into byte array.\n function writeUint256(\n bytes memory b,\n uint256 index,\n uint256 input\n )\n internal\n pure\n {\n writeBytes32(b, index, bytes32(input));\n }\n\n /// @dev Reads an unpadded bytes4 value from a position in a byte array.\n /// @param b Byte array containing a bytes4 value.\n /// @param index Index in byte array of bytes4 value.\n /// @return bytes4 value from byte array.\n function readBytes4(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (bytes4 result)\n {\n require(\n b.length >= index + 4,\n \"GREATER_OR_EQUAL_TO_4_LENGTH_REQUIRED\"\n );\n assembly {\n result := mload(add(b, 32))\n // Solidity does not require us to clean the trailing bytes.\n // We do it anyway\n result := and(result, 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000)\n }\n return result;\n }\n\n /// @dev Reads nested bytes from a specific position.\n /// @dev NOTE: the returned value overlaps with the input value.\n /// Both should be treated as immutable.\n /// @param b Byte array containing nested bytes.\n /// @param index Index of nested bytes.\n /// @return result Nested bytes.\n function readBytesWithLength(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (bytes memory result)\n {\n // Read length of nested bytes\n uint256 nestedBytesLength = readUint256(b, index);\n index += 32;\n\n // Assert length of <b> is valid, given\n // length of nested bytes\n require(\n b.length >= index + nestedBytesLength,\n \"GREATER_OR_EQUAL_TO_NESTED_BYTES_LENGTH_REQUIRED\"\n );\n \n // Return a pointer to the byte array as it exists inside `b`\n assembly {\n result := add(b, index)\n }\n return result;\n }\n\n /// @dev Inserts bytes at a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input bytes to insert.\n function writeBytesWithLength(\n bytes memory b,\n uint256 index,\n bytes memory input\n )\n internal\n pure\n {\n // Assert length of <b> is valid, given\n // length of input\n require(\n b.length >= index + 32 + input.length, // 32 bytes to store length\n \"GREATER_OR_EQUAL_TO_NESTED_BYTES_LENGTH_REQUIRED\"\n );\n\n // Copy <input> into <b>\n memCopy(\n b.contentAddress() + index,\n input.rawAddress(), // includes length of <input>\n input.length + 32 // +32 bytes to store <input> length\n );\n }\n\n /// @dev Performs a deep copy of a byte array onto another byte array of greater than or equal length.\n /// @param dest Byte array that will be overwritten with source bytes.\n /// @param source Byte array to copy onto dest bytes.\n function deepCopyBytes(\n bytes memory dest,\n bytes memory source\n )\n internal\n pure\n {\n uint256 sourceLen = source.length;\n // Dest length must be >= source length, or some bytes would not be copied.\n require(\n dest.length >= sourceLen,\n \"GREATER_OR_EQUAL_TO_SOURCE_BYTES_LENGTH_REQUIRED\"\n );\n memCopy(\n dest.contentAddress(),\n source.contentAddress(),\n sourceLen\n );\n }\n}\n"
},
- "sourceTreeHashHex": "0x1f44c34360dc311f3eca216d111cf6ed79c9a9ce9fd51d5d2bd4134f86c4676c",
+ "sourceTreeHashHex": "0xfc7d04cf523780b69b850dd0a4143f621b1e02531ffddef786af097498be8723",
"compiler": {
"name": "solc",
"version": "soljson-v0.4.24+commit.e67f0147.js",
diff --git a/packages/migrations/artifacts/2.0.0/TestValidator.json b/packages/migrations/artifacts/2.0.0/TestValidator.json
index 86696368e..fbb81433a 100644
--- a/packages/migrations/artifacts/2.0.0/TestValidator.json
+++ b/packages/migrations/artifacts/2.0.0/TestValidator.json
@@ -45,31 +45,31 @@
"evm": {
"bytecode": {
"linkReferences": {},
- "object": "0x608060405234801561001057600080fd5b50604051602080610134833981016040525160008054600160a060020a03909216600160a060020a031990921691909117905560e3806100516000396000f300608060405260043610603e5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416639363470281146043575b600080fd5b348015604e57600080fd5b50607e60048035906024803573ffffffffffffffffffffffffffffffffffffffff16916044359182019101356092565b604080519115158252519081900360200190f35b505060005473ffffffffffffffffffffffffffffffffffffffff9081169116149190505600a165627a7a72305820d56af815348fc993337c155cb13340d950e982ab65a940dff32a1d25f78ca9bb0029",
- "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP1 PUSH2 0x134 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 MSTORE MLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0xE3 DUP1 PUSH2 0x51 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH1 0x3E JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x93634702 DUP2 EQ PUSH1 0x43 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH1 0x4E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x7E PUSH1 0x4 DUP1 CALLDATALOAD SWAP1 PUSH1 0x24 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH1 0x44 CALLDATALOAD SWAP2 DUP3 ADD SWAP2 ADD CALLDATALOAD PUSH1 0x92 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST POP POP PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP2 AND EQ SWAP2 SWAP1 POP JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 0xd5 PUSH11 0xF815348FC993337C155CB1 CALLER BLOCKHASH 0xd9 POP 0xe9 DUP3 0xab PUSH6 0xA940DFF32A1D 0x25 0xf7 DUP13 0xa9 0xbb STOP 0x29 ",
- "sourceMap": "667:864:1:-;;;916:84;8:9:-1;5:2;;;30:1;27;20:12;5:2;916:84:1;;;;;;;;;;;;;967:12;:26;;-1:-1:-1;;;;;967:26:1;;;-1:-1:-1;;;;;;967:26:1;;;;;;;;;667:864;;;;;;"
+ "object": "0x608060405234801561001057600080fd5b50604051602080610134833981016040525160008054600160a060020a03909216600160a060020a031990921691909117905560e3806100516000396000f300608060405260043610603e5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416639363470281146043575b600080fd5b348015604e57600080fd5b50607e60048035906024803573ffffffffffffffffffffffffffffffffffffffff16916044359182019101356092565b604080519115158252519081900360200190f35b505060005473ffffffffffffffffffffffffffffffffffffffff9081169116149190505600a165627a7a72305820d9ff38e223fed81fc27fa163d79eee48b3957563fafa97170dee28cd838d91e60029",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP1 PUSH2 0x134 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 MSTORE MLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0xE3 DUP1 PUSH2 0x51 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH1 0x3E JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x93634702 DUP2 EQ PUSH1 0x43 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH1 0x4E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x7E PUSH1 0x4 DUP1 CALLDATALOAD SWAP1 PUSH1 0x24 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH1 0x44 CALLDATALOAD SWAP2 DUP3 ADD SWAP2 ADD CALLDATALOAD PUSH1 0x92 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST POP POP PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP2 AND EQ SWAP2 SWAP1 POP JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 0xd9 SELFDESTRUCT CODESIZE 0xe2 0x23 INVALID 0xd8 0x1f 0xc2 PUSH32 0xA163D79EEE48B3957563FAFA97170DEE28CD838D91E600290000000000000000 ",
+ "sourceMap": "667:1000:1:-;;;977:84;8:9:-1;5:2;;;30:1;27;20:12;5:2;977:84:1;;;;;;;;;;;;;1028:12;:26;;-1:-1:-1;;;;;1028:26:1;;;-1:-1:-1;;;;;;1028:26:1;;;;;;;;;667:1000;;;;;;"
},
"deployedBytecode": {
"linkReferences": {},
- "object": "0x608060405260043610603e5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416639363470281146043575b600080fd5b348015604e57600080fd5b50607e60048035906024803573ffffffffffffffffffffffffffffffffffffffff16916044359182019101356092565b604080519115158252519081900360200190f35b505060005473ffffffffffffffffffffffffffffffffffffffff9081169116149190505600a165627a7a72305820d56af815348fc993337c155cb13340d950e982ab65a940dff32a1d25f78ca9bb0029",
- "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH1 0x3E JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x93634702 DUP2 EQ PUSH1 0x43 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH1 0x4E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x7E PUSH1 0x4 DUP1 CALLDATALOAD SWAP1 PUSH1 0x24 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH1 0x44 CALLDATALOAD SWAP2 DUP3 ADD SWAP2 ADD CALLDATALOAD PUSH1 0x92 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST POP POP PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP2 AND EQ SWAP2 SWAP1 POP JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 0xd5 PUSH11 0xF815348FC993337C155CB1 CALLER BLOCKHASH 0xd9 POP 0xe9 DUP3 0xab PUSH6 0xA940DFF32A1D 0x25 0xf7 DUP13 0xa9 0xbb STOP 0x29 ",
- "sourceMap": "667:864:1:-;;;;;;;;;;;;;;;;;;;;;;;1299:230;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1299:230:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1456:12:1;1509;;;;;1492:29;;;;1299:230;-1:-1:-1;1299:230:1:o"
+ "object": "0x608060405260043610603e5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416639363470281146043575b600080fd5b348015604e57600080fd5b50607e60048035906024803573ffffffffffffffffffffffffffffffffffffffff16916044359182019101356092565b604080519115158252519081900360200190f35b505060005473ffffffffffffffffffffffffffffffffffffffff9081169116149190505600a165627a7a72305820d9ff38e223fed81fc27fa163d79eee48b3957563fafa97170dee28cd838d91e60029",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH1 0x3E JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x93634702 DUP2 EQ PUSH1 0x43 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH1 0x4E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x7E PUSH1 0x4 DUP1 CALLDATALOAD SWAP1 PUSH1 0x24 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH1 0x44 CALLDATALOAD SWAP2 DUP3 ADD SWAP2 ADD CALLDATALOAD PUSH1 0x92 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST POP POP PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP2 AND EQ SWAP2 SWAP1 POP JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 0xd9 SELFDESTRUCT CODESIZE 0xe2 0x23 INVALID 0xd8 0x1f 0xc2 PUSH32 0xA163D79EEE48B3957563FAFA97170DEE28CD838D91E600290000000000000000 ",
+ "sourceMap": "667:1000:1:-;;;;;;;;;;;;;;;;;;;;;;;1398:230;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1398:230:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1555:12:1;1608;;;;;1591:29;;;;1398:230;-1:-1:-1;1398:230:1:o"
}
}
},
"sources": {
- "current/protocol/Exchange/interfaces/IValidator.sol": {
+ "2.0.0/protocol/Exchange/interfaces/IValidator.sol": {
"id": 0
},
- "current/test/TestValidator/TestValidator.sol": {
+ "2.0.0/test/TestValidator/TestValidator.sol": {
"id": 1
}
},
"sourceCodes": {
- "current/protocol/Exchange/interfaces/IValidator.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.23;\n\ncontract IValidator {\n\n /// @dev Verifies that a signature is valid.\n /// @param hash Message hash that is signed.\n /// @param signerAddress Address that should have signed the given hash.\n /// @param signature Proof of signing.\n /// @return Validity of order signature.\n function isValidSignature(\n bytes32 hash,\n address signerAddress,\n bytes signature\n )\n external\n view\n returns (bool isValid);\n}\n",
- "current/test/TestValidator/TestValidator.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.24;\n\nimport \"../../protocol/Exchange/interfaces/IValidator.sol\";\n\ncontract TestValidator is \n IValidator\n{\n\n // The single valid signer for this wallet.\n address VALID_SIGNER;\n\n /// @dev constructs a new `TestValidator` with a single valid signer.\n /// @param validSigner The sole, valid signer.\n constructor (address validSigner) public {\n VALID_SIGNER = validSigner;\n }\n\n /// @dev Verifies that a signature is valid. `signer` must match `VALID_SIGNER`.\n /// @param hash Message hash that is signed.\n /// @param signerAddress Address that should have signed the given hash.\n /// @param signature Proof of signing.\n /// @return Validity of signature.\n function isValidSignature(\n bytes32 hash,\n address signerAddress,\n bytes signature\n )\n external\n view\n returns (bool isValid)\n {\n return (signerAddress == VALID_SIGNER);\n }\n}\n"
+ "2.0.0/protocol/Exchange/interfaces/IValidator.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.24;\n\n\ncontract IValidator {\n\n /// @dev Verifies that a signature is valid.\n /// @param hash Message hash that is signed.\n /// @param signerAddress Address that should have signed the given hash.\n /// @param signature Proof of signing.\n /// @return Validity of order signature.\n function isValidSignature(\n bytes32 hash,\n address signerAddress,\n bytes signature\n )\n external\n view\n returns (bool isValid);\n}\n",
+ "2.0.0/test/TestValidator/TestValidator.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.24;\n\nimport \"../../protocol/Exchange/interfaces/IValidator.sol\";\n\n\ncontract TestValidator is \n IValidator\n{\n\n // The single valid signer for this wallet.\n // solhint-disable-next-line var-name-mixedcase\n address internal VALID_SIGNER;\n\n /// @dev constructs a new `TestValidator` with a single valid signer.\n /// @param validSigner The sole, valid signer.\n constructor (address validSigner) public {\n VALID_SIGNER = validSigner;\n }\n\n /// @dev Verifies that a signature is valid. `signer` must match `VALID_SIGNER`.\n /// @param hash Message hash that is signed.\n /// @param signerAddress Address that should have signed the given hash.\n /// @param signature Proof of signing.\n /// @return Validity of signature.\n // solhint-disable no-unused-vars\n function isValidSignature(\n bytes32 hash,\n address signerAddress,\n bytes signature\n )\n external\n view\n returns (bool isValid)\n {\n return (signerAddress == VALID_SIGNER);\n }\n // solhint-enable no-unused-vars\n}\n"
},
- "sourceTreeHashHex": "0x46c9bcd1eaeb97a053a035d7aa8867b98dd8dc7a9faf39d5e2fa41e911c728ee",
+ "sourceTreeHashHex": "0x3aab123236e3d7692e368430b803197db0cab02b088bba7835223dadbee10077",
"compiler": {
"name": "solc",
"version": "soljson-v0.4.24+commit.e67f0147.js",
diff --git a/packages/migrations/artifacts/2.0.0/TestWallet.json b/packages/migrations/artifacts/2.0.0/TestWallet.json
index 9fccc3af2..d54bb98fa 100644
--- a/packages/migrations/artifacts/2.0.0/TestWallet.json
+++ b/packages/migrations/artifacts/2.0.0/TestWallet.json
@@ -41,35 +41,35 @@
"evm": {
"bytecode": {
"linkReferences": {},
- "object": "0x608060405234801561001057600080fd5b5060405160208061047b833981016040525160008054600160a060020a03909216600160a060020a0319909216919091179055610429806100526000396000f3006080604052600436106100405763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416631626ba7e8114610045575b600080fd5b34801561005157600080fd5b5061006960048035906024803590810191013561007d565b604080519115158252519081900360200190f35b60408051808201909152601281527f4c454e4754485f36355f524551554952454400000000000000000000000000006020820152600090819081908190819060418714610162576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561012757818101518382015260200161010f565b50505050905090810190601f1680156101545780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508686600081811061017057fe5b905001357f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f010000000000000000000000000000000000000000000000000000000000000090049350610244600188888080601f01602080910402602001604051908101604052809392919081815260200183838082843750949594505063ffffffff6103571692505050565b925061028a602188888080601f01602080910402602001604051908101604052809392919081815260200183838082843750949594505063ffffffff6103571692505050565b60408051600080825260208083018085528d905260ff8916838501526060830188905260808301859052925193955060019360a080840194937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0830193908390039091019190865af1158015610304573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015160005473ffffffffffffffffffffffffffffffffffffffff9182169116149998505050505050505050565b6000816020018351101515156103f457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f475245415445525f4f525f455155414c5f544f5f33325f4c454e4754485f524560448201527f5155495245440000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b500160200151905600a165627a7a72305820d817e32b048d68177e036fc9d50938ad2b187df87872bb26259988d9a2d73cd80029",
- "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP1 PUSH2 0x47B DUP4 CODECOPY DUP2 ADD PUSH1 0x40 MSTORE MLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x429 DUP1 PUSH2 0x52 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x40 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x1626BA7E DUP2 EQ PUSH2 0x45 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x51 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x69 PUSH1 0x4 DUP1 CALLDATALOAD SWAP1 PUSH1 0x24 DUP1 CALLDATALOAD SWAP1 DUP2 ADD SWAP2 ADD CALLDATALOAD PUSH2 0x7D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x12 DUP2 MSTORE PUSH32 0x4C454E4754485F36355F52455155495245440000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH1 0x41 DUP8 EQ PUSH2 0x162 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x127 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x10F JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x154 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 REVERT JUMPDEST POP DUP7 DUP7 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0x170 JUMPI INVALID JUMPDEST SWAP1 POP ADD CALLDATALOAD PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DIV PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 MUL PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DIV SWAP4 POP PUSH2 0x244 PUSH1 0x1 DUP9 DUP9 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP6 SWAP5 POP POP PUSH4 0xFFFFFFFF PUSH2 0x357 AND SWAP3 POP POP POP JUMP JUMPDEST SWAP3 POP PUSH2 0x28A PUSH1 0x21 DUP9 DUP9 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP6 SWAP5 POP POP PUSH4 0xFFFFFFFF PUSH2 0x357 AND SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD DUP1 DUP6 MSTORE DUP14 SWAP1 MSTORE PUSH1 0xFF DUP10 AND DUP4 DUP6 ADD MSTORE PUSH1 0x60 DUP4 ADD DUP9 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP6 SWAP1 MSTORE SWAP3 MLOAD SWAP4 SWAP6 POP PUSH1 0x1 SWAP4 PUSH1 0xA0 DUP1 DUP5 ADD SWAP5 SWAP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP4 ADD SWAP4 SWAP1 DUP4 SWAP1 SUB SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP7 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x304 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 ADD MLOAD PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND SWAP2 AND EQ SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x20 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x3F4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F33325F4C454E4754485F5245 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x84 ADD SWAP1 REVERT JUMPDEST POP ADD PUSH1 0x20 ADD MLOAD SWAP1 JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 0xd8 OR 0xe3 0x2b DIV DUP14 PUSH9 0x177E036FC9D50938AD 0x2b XOR PUSH30 0xF87872BB26259988D9A2D73CD80029000000000000000000000000000000 ",
- "sourceMap": "708:1194:1:-;;;1022:84;8:9:-1;5:2;;;30:1;27;20:12;5:2;1022:84:1;;;;;;;;;;;;;1073:12;:26;;-1:-1:-1;;;;;1073:26:1;;;-1:-1:-1;;;;;;1073:26:1;;;;;;;;;708:1194;;;;;;"
+ "object": "0x608060405234801561001057600080fd5b5060405160208061040a833981016040525160008054600160a060020a03909216600160a060020a03199092169190911790556103b8806100526000396000f3006080604052600436106100405763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416631626ba7e8114610045575b600080fd5b34801561005157600080fd5b5061006960048035906024803590810191013561007d565b604080519115158252519081900360200190f35b600080808080604186146100f257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4c454e4754485f36355f52455155495245440000000000000000000000000000604482015290519081900360640190fd5b868660008181106100ff57fe5b905001357f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f0100000000000000000000000000000000000000000000000000000000000000900493506101d3600188888080601f01602080910402602001604051908101604052809392919081815260200183838082843750949594505063ffffffff6102e61692505050565b9250610219602188888080601f01602080910402602001604051908101604052809392919081815260200183838082843750949594505063ffffffff6102e61692505050565b60408051600080825260208083018085528d905260ff8916838501526060830188905260808301859052925193955060019360a080840194937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0830193908390039091019190865af1158015610293573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015160005473ffffffffffffffffffffffffffffffffffffffff9182169116149998505050505050505050565b60008160200183511015151561038357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f475245415445525f4f525f455155414c5f544f5f33325f4c454e4754485f524560448201527f5155495245440000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b500160200151905600a165627a7a723058208825aaf9d7959cb0be8576f99e10a1c04cd0b7ca2689235aaebe344ec32d3f4e0029",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP1 PUSH2 0x40A DUP4 CODECOPY DUP2 ADD PUSH1 0x40 MSTORE MLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x3B8 DUP1 PUSH2 0x52 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x40 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x1626BA7E DUP2 EQ PUSH2 0x45 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x51 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x69 PUSH1 0x4 DUP1 CALLDATALOAD SWAP1 PUSH1 0x24 DUP1 CALLDATALOAD SWAP1 DUP2 ADD SWAP2 ADD CALLDATALOAD PUSH2 0x7D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH1 0x0 DUP1 DUP1 DUP1 DUP1 PUSH1 0x41 DUP7 EQ PUSH2 0xF2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C454E4754485F36355F52455155495245440000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP7 DUP7 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0xFF JUMPI INVALID JUMPDEST SWAP1 POP ADD CALLDATALOAD PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DIV PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 MUL PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DIV SWAP4 POP PUSH2 0x1D3 PUSH1 0x1 DUP9 DUP9 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP6 SWAP5 POP POP PUSH4 0xFFFFFFFF PUSH2 0x2E6 AND SWAP3 POP POP POP JUMP JUMPDEST SWAP3 POP PUSH2 0x219 PUSH1 0x21 DUP9 DUP9 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP6 SWAP5 POP POP PUSH4 0xFFFFFFFF PUSH2 0x2E6 AND SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD DUP1 DUP6 MSTORE DUP14 SWAP1 MSTORE PUSH1 0xFF DUP10 AND DUP4 DUP6 ADD MSTORE PUSH1 0x60 DUP4 ADD DUP9 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP6 SWAP1 MSTORE SWAP3 MLOAD SWAP4 SWAP6 POP PUSH1 0x1 SWAP4 PUSH1 0xA0 DUP1 DUP5 ADD SWAP5 SWAP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP4 ADD SWAP4 SWAP1 DUP4 SWAP1 SUB SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP7 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x293 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 ADD MLOAD PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND SWAP2 AND EQ SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x20 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x383 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F33325F4C454E4754485F5245 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x84 ADD SWAP1 REVERT JUMPDEST POP ADD PUSH1 0x20 ADD MLOAD SWAP1 JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 DUP9 0x25 0xaa 0xf9 0xd7 SWAP6 SWAP13 0xb0 0xbe DUP6 PUSH23 0xF99E10A1C04CD0B7CA2689235AAEBE344EC32D3F4E0029 ",
+ "sourceMap": "708:1193:1:-;;;1019:84;8:9:-1;5:2;;;30:1;27;20:12;5:2;1019:84:1;;;;;;;;;;;;;1070:12;:26;;-1:-1:-1;;;;;1070:26:1;;;-1:-1:-1;;;;;;1070:26:1;;;;;;;;;708:1193;;;;;;"
},
"deployedBytecode": {
"linkReferences": {},
- "object": "0x6080604052600436106100405763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416631626ba7e8114610045575b600080fd5b34801561005157600080fd5b5061006960048035906024803590810191013561007d565b604080519115158252519081900360200190f35b60408051808201909152601281527f4c454e4754485f36355f524551554952454400000000000000000000000000006020820152600090819081908190819060418714610162576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561012757818101518382015260200161010f565b50505050905090810190601f1680156101545780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508686600081811061017057fe5b905001357f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f010000000000000000000000000000000000000000000000000000000000000090049350610244600188888080601f01602080910402602001604051908101604052809392919081815260200183838082843750949594505063ffffffff6103571692505050565b925061028a602188888080601f01602080910402602001604051908101604052809392919081815260200183838082843750949594505063ffffffff6103571692505050565b60408051600080825260208083018085528d905260ff8916838501526060830188905260808301859052925193955060019360a080840194937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0830193908390039091019190865af1158015610304573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015160005473ffffffffffffffffffffffffffffffffffffffff9182169116149998505050505050505050565b6000816020018351101515156103f457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f475245415445525f4f525f455155414c5f544f5f33325f4c454e4754485f524560448201527f5155495245440000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b500160200151905600a165627a7a72305820d817e32b048d68177e036fc9d50938ad2b187df87872bb26259988d9a2d73cd80029",
- "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x40 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x1626BA7E DUP2 EQ PUSH2 0x45 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x51 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x69 PUSH1 0x4 DUP1 CALLDATALOAD SWAP1 PUSH1 0x24 DUP1 CALLDATALOAD SWAP1 DUP2 ADD SWAP2 ADD CALLDATALOAD PUSH2 0x7D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x12 DUP2 MSTORE PUSH32 0x4C454E4754485F36355F52455155495245440000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH1 0x41 DUP8 EQ PUSH2 0x162 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x127 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x10F JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x154 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 REVERT JUMPDEST POP DUP7 DUP7 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0x170 JUMPI INVALID JUMPDEST SWAP1 POP ADD CALLDATALOAD PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DIV PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 MUL PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DIV SWAP4 POP PUSH2 0x244 PUSH1 0x1 DUP9 DUP9 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP6 SWAP5 POP POP PUSH4 0xFFFFFFFF PUSH2 0x357 AND SWAP3 POP POP POP JUMP JUMPDEST SWAP3 POP PUSH2 0x28A PUSH1 0x21 DUP9 DUP9 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP6 SWAP5 POP POP PUSH4 0xFFFFFFFF PUSH2 0x357 AND SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD DUP1 DUP6 MSTORE DUP14 SWAP1 MSTORE PUSH1 0xFF DUP10 AND DUP4 DUP6 ADD MSTORE PUSH1 0x60 DUP4 ADD DUP9 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP6 SWAP1 MSTORE SWAP3 MLOAD SWAP4 SWAP6 POP PUSH1 0x1 SWAP4 PUSH1 0xA0 DUP1 DUP5 ADD SWAP5 SWAP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP4 ADD SWAP4 SWAP1 DUP4 SWAP1 SUB SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP7 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x304 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 ADD MLOAD PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND SWAP2 AND EQ SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x20 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x3F4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F33325F4C454E4754485F5245 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x84 ADD SWAP1 REVERT JUMPDEST POP ADD PUSH1 0x20 ADD MLOAD SWAP1 JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 0xd8 OR 0xe3 0x2b DIV DUP14 PUSH9 0x177E036FC9D50938AD 0x2b XOR PUSH30 0xF87872BB26259988D9A2D73CD80029000000000000000000000000000000 ",
- "sourceMap": "708:1194:1:-;;;;;;;;;;;;;;;;;;;;;;;1354:546;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1354:546:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1577:18;;;;;;;;;;;;;;;;;1486:12;;;;;;;;;;1561:2;1535:28;;1514:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;1514:91:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1632:15:1;;1648:1;1632:18;;;;;;;;;;;;;;;;;;;1626:25;;;1616:35;;1673:30;1701:1;1673:15;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1673:27:1;;:30;-1:-1:-1;;1673:30:1;:27;:30;;-1:-1:-1;;;1673:30:1:i;:::-;1661:42;;1725:31;1753:2;1725:15;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1725:27:1;;:31;-1:-1:-1;;1725:31:1;:27;:31;;-1:-1:-1;;;1725:31:1:i;:::-;1793:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1713:43;;-1:-1:-1;1793:24:1;;;;;;;;-1:-1:-1;1793:24:1;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;1793:24:1;;;;;1837:12;;:32;;;;:12;;:32;;1354:546;-1:-1:-1;;;;;;;;;1354:546:1:o;13049:490:2:-;13170:14;13233:5;13241:2;13233:10;13221:1;:8;:22;;13200:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13486:13:2;13388:2;13486:13;13480:20;;13049:490::o"
+ "object": "0x6080604052600436106100405763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416631626ba7e8114610045575b600080fd5b34801561005157600080fd5b5061006960048035906024803590810191013561007d565b604080519115158252519081900360200190f35b600080808080604186146100f257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4c454e4754485f36355f52455155495245440000000000000000000000000000604482015290519081900360640190fd5b868660008181106100ff57fe5b905001357f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f0100000000000000000000000000000000000000000000000000000000000000900493506101d3600188888080601f01602080910402602001604051908101604052809392919081815260200183838082843750949594505063ffffffff6102e61692505050565b9250610219602188888080601f01602080910402602001604051908101604052809392919081815260200183838082843750949594505063ffffffff6102e61692505050565b60408051600080825260208083018085528d905260ff8916838501526060830188905260808301859052925193955060019360a080840194937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0830193908390039091019190865af1158015610293573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015160005473ffffffffffffffffffffffffffffffffffffffff9182169116149998505050505050505050565b60008160200183511015151561038357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f475245415445525f4f525f455155414c5f544f5f33325f4c454e4754485f524560448201527f5155495245440000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b500160200151905600a165627a7a723058208825aaf9d7959cb0be8576f99e10a1c04cd0b7ca2689235aaebe344ec32d3f4e0029",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x40 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x1626BA7E DUP2 EQ PUSH2 0x45 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x51 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x69 PUSH1 0x4 DUP1 CALLDATALOAD SWAP1 PUSH1 0x24 DUP1 CALLDATALOAD SWAP1 DUP2 ADD SWAP2 ADD CALLDATALOAD PUSH2 0x7D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH1 0x0 DUP1 DUP1 DUP1 DUP1 PUSH1 0x41 DUP7 EQ PUSH2 0xF2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C454E4754485F36355F52455155495245440000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP7 DUP7 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0xFF JUMPI INVALID JUMPDEST SWAP1 POP ADD CALLDATALOAD PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DIV PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 MUL PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH32 0x100000000000000000000000000000000000000000000000000000000000000 SWAP1 DIV SWAP4 POP PUSH2 0x1D3 PUSH1 0x1 DUP9 DUP9 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP6 SWAP5 POP POP PUSH4 0xFFFFFFFF PUSH2 0x2E6 AND SWAP3 POP POP POP JUMP JUMPDEST SWAP3 POP PUSH2 0x219 PUSH1 0x21 DUP9 DUP9 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP6 SWAP5 POP POP PUSH4 0xFFFFFFFF PUSH2 0x2E6 AND SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD DUP1 DUP6 MSTORE DUP14 SWAP1 MSTORE PUSH1 0xFF DUP10 AND DUP4 DUP6 ADD MSTORE PUSH1 0x60 DUP4 ADD DUP9 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP6 SWAP1 MSTORE SWAP3 MLOAD SWAP4 SWAP6 POP PUSH1 0x1 SWAP4 PUSH1 0xA0 DUP1 DUP5 ADD SWAP5 SWAP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP4 ADD SWAP4 SWAP1 DUP4 SWAP1 SUB SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP7 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x293 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 ADD MLOAD PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND SWAP2 AND EQ SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x20 ADD DUP4 MLOAD LT ISZERO ISZERO ISZERO PUSH2 0x383 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475245415445525F4F525F455155414C5F544F5F33325F4C454E4754485F5245 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x5155495245440000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x84 ADD SWAP1 REVERT JUMPDEST POP ADD PUSH1 0x20 ADD MLOAD SWAP1 JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 DUP9 0x25 0xaa 0xf9 0xd7 SWAP6 SWAP13 0xb0 0xbe DUP6 PUSH23 0xF99E10A1C04CD0B7CA2689235AAEBE344EC32D3F4E0029 ",
+ "sourceMap": "708:1193:1:-;;;;;;;;;;;;;;;;;;;;;;;1351:548;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1351:548:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1483:12;;;;;1558:2;1532:28;;1511:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1631:15;;1647:1;1631:18;;;;;;;;;;;;;;;;;;;1625:25;;;1615:35;;1672:30;1700:1;1672:15;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1672:27:1;;:30;-1:-1:-1;;1672:30:1;:27;:30;;-1:-1:-1;;;1672:30:1:i;:::-;1660:42;;1724:31;1752:2;1724:15;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1724:27:1;;:31;-1:-1:-1;;1724:31:1;:27;:31;;-1:-1:-1;;;1724:31:1:i;:::-;1792:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1712:43;;-1:-1:-1;1792:24:1;;;;;;;;-1:-1:-1;1792:24:1;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;1792:24:1;;;;;1836:12;;:32;;;;:12;;:32;;1351:548;-1:-1:-1;;;;;;;;;1351:548:1:o;13281:490:2:-;13402:14;13465:5;13473:2;13465:10;13453:1;:8;:22;;13432:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13718:13:2;13620:2;13718:13;13712:20;;13281:490::o"
}
}
},
"sources": {
- "current/protocol/Exchange/interfaces/IWallet.sol": {
+ "2.0.0/protocol/Exchange/interfaces/IWallet.sol": {
"id": 0
},
- "current/test/TestWallet/TestWallet.sol": {
+ "2.0.0/test/TestWallet/TestWallet.sol": {
"id": 1
},
- "current/utils/LibBytes/LibBytes.sol": {
+ "2.0.0/utils/LibBytes/LibBytes.sol": {
"id": 2
}
},
"sourceCodes": {
- "current/protocol/Exchange/interfaces/IWallet.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.24;\n\ncontract IWallet {\n\n /// @dev Verifies that a signature is valid.\n /// @param hash Message hash that is signed.\n /// @param signature Proof of signing.\n /// @return Validity of order signature.\n function isValidSignature(\n bytes32 hash,\n bytes signature\n )\n external\n view\n returns (bool isValid);\n}\n",
- "current/test/TestWallet/TestWallet.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.24;\n\nimport \"../../protocol/Exchange/interfaces/IWallet.sol\";\nimport \"../../utils/LibBytes/LibBytes.sol\";\n\ncontract TestWallet is \n IWallet\n{\n using LibBytes for bytes;\n\n string constant LENGTH_65_REQUIRED = \"LENGTH_65_REQUIRED\";\n\n // The owner of this wallet.\n address WALLET_OWNER;\n\n /// @dev constructs a new `TestWallet` with a single owner.\n /// @param walletOwner The owner of this wallet.\n constructor (address walletOwner) public {\n WALLET_OWNER = walletOwner;\n }\n\n /// @dev Validates an EIP712 signature.\n /// The signer must match the owner of this wallet.\n /// @param hash Message hash that is signed.\n /// @param eip712Signature Proof of signing.\n /// @return Validity of signature.\n function isValidSignature(\n bytes32 hash,\n bytes eip712Signature\n )\n external\n view\n returns (bool isValid)\n {\n require(\n eip712Signature.length == 65,\n LENGTH_65_REQUIRED\n );\n\n uint8 v = uint8(eip712Signature[0]);\n bytes32 r = eip712Signature.readBytes32(1);\n bytes32 s = eip712Signature.readBytes32(33);\n address recoveredAddress = ecrecover(hash, v, r, s);\n isValid = WALLET_OWNER == recoveredAddress;\n return isValid;\n }\n}\n",
- "current/utils/LibBytes/LibBytes.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.24;\n\nlibrary LibBytes {\n\n using LibBytes for bytes;\n\n /// @dev Gets the memory address for a byte array.\n /// @param input Byte array to lookup.\n /// @return memoryAddress Memory address of byte array. This\n /// points to the header of the byte array which contains\n /// the length.\n function rawAddress(bytes memory input)\n internal\n pure\n returns (uint256 memoryAddress)\n {\n assembly {\n memoryAddress := input\n }\n return memoryAddress;\n }\n \n /// @dev Gets the memory address for the contents of a byte array.\n /// @param input Byte array to lookup.\n /// @return memoryAddress Memory address of the contents of the byte array.\n function contentAddress(bytes memory input)\n internal\n pure\n returns (uint256 memoryAddress)\n {\n assembly {\n memoryAddress := add(input, 32)\n }\n return memoryAddress;\n }\n\n /// @dev Copies `length` bytes from memory location `source` to `dest`.\n /// @param dest memory address to copy bytes to.\n /// @param source memory address to copy bytes from.\n /// @param length number of bytes to copy.\n function memCopy(\n uint256 dest,\n uint256 source,\n uint256 length\n )\n internal\n pure\n {\n if (length < 32) {\n // Handle a partial word by reading destination and masking\n // off the bits we are interested in.\n // This correctly handles overlap, zero lengths and source == dest\n assembly {\n let mask := sub(exp(256, sub(32, length)), 1)\n let s := and(mload(source), not(mask))\n let d := and(mload(dest), mask)\n mstore(dest, or(s, d))\n }\n } else {\n // Skip the O(length) loop when source == dest.\n if (source == dest) {\n return;\n }\n\n // For large copies we copy whole words at a time. The final\n // word is aligned to the end of the range (instead of after the\n // previous) to handle partial words. So a copy will look like this:\n //\n // ####\n // ####\n // ####\n // ####\n //\n // We handle overlap in the source and destination range by\n // changing the copying direction. This prevents us from\n // overwriting parts of source that we still need to copy.\n //\n // This correctly handles source == dest\n //\n if (source > dest) {\n assembly {\n // We subtract 32 from `sEnd` and `dEnd` because it\n // is easier to compare with in the loop, and these\n // are also the addresses we need for copying the\n // last bytes.\n length := sub(length, 32)\n let sEnd := add(source, length)\n let dEnd := add(dest, length)\n\n // Remember the last 32 bytes of source\n // This needs to be done here and not after the loop\n // because we may have overwritten the last bytes in\n // source already due to overlap.\n let last := mload(sEnd)\n\n // Copy whole words front to back\n // Note: the first check is always true,\n // this could have been a do-while loop.\n for {} lt(source, sEnd) {} {\n mstore(dest, mload(source))\n source := add(source, 32)\n dest := add(dest, 32)\n }\n \n // Write the last 32 bytes\n mstore(dEnd, last)\n }\n } else {\n assembly {\n // We subtract 32 from `sEnd` and `dEnd` because those\n // are the starting points when copying a word at the end.\n length := sub(length, 32)\n let sEnd := add(source, length)\n let dEnd := add(dest, length)\n\n // Remember the first 32 bytes of source\n // This needs to be done here and not after the loop\n // because we may have overwritten the first bytes in\n // source already due to overlap.\n let first := mload(source)\n\n // Copy whole words back to front\n // We use a signed comparisson here to allow dEnd to become\n // negative (happens when source and dest < 32). Valid\n // addresses in local memory will never be larger than\n // 2**255, so they can be safely re-interpreted as signed.\n // Note: the first check is always true,\n // this could have been a do-while loop.\n for {} slt(dest, dEnd) {} {\n mstore(dEnd, mload(sEnd))\n sEnd := sub(sEnd, 32)\n dEnd := sub(dEnd, 32)\n }\n \n // Write the first 32 bytes\n mstore(dest, first)\n }\n }\n }\n }\n \n /// @dev Returns a slices from a byte array.\n /// @param b The byte array to take a slice from.\n /// @param from The starting index for the slice (inclusive).\n /// @param to The final index for the slice (exclusive).\n /// @return result The slice containing bytes at indices [from, to)\n function slice(bytes memory b, uint256 from, uint256 to)\n internal\n pure\n returns (bytes memory result)\n {\n require(\n from <= to,\n \"FROM_LESS_THAN_TO_REQUIRED\"\n );\n require(\n to < b.length,\n \"TO_LESS_THAN_LENGTH_REQUIRED\"\n );\n \n // Create a new bytes structure and copy contents\n result = new bytes(to - from);\n memCopy(\n result.contentAddress(),\n b.contentAddress() + from,\n result.length);\n return result;\n }\n \n /// @dev Returns a slice from a byte array without preserving the input.\n /// @param b The byte array to take a slice from. Will be destroyed in the process.\n /// @param from The starting index for the slice (inclusive).\n /// @param to The final index for the slice (exclusive).\n /// @return result The slice containing bytes at indices [from, to)\n /// @dev When `from == 0`, the original array will match the slice. In other cases its state will be corrupted.\n function sliceDestructive(bytes memory b, uint256 from, uint256 to)\n internal\n pure\n returns (bytes memory result)\n {\n require(\n from <= to,\n \"FROM_LESS_THAN_TO_REQUIRED\"\n );\n require(\n to < b.length,\n \"TO_LESS_THAN_LENGTH_REQUIRED\"\n );\n \n // Create a new bytes structure around [from, to) in-place.\n assembly {\n result := add(b, from)\n mstore(result, sub(to, from))\n }\n return result;\n }\n\n /// @dev Pops the last byte off of a byte array by modifying its length.\n /// @param b Byte array that will be modified.\n /// @return The byte that was popped off.\n function popLastByte(bytes memory b)\n internal\n pure\n returns (bytes1 result)\n {\n require(\n b.length > 0,\n \"GREATER_THAN_ZERO_LENGTH_REQUIRED\"\n );\n\n // Store last byte.\n result = b[b.length - 1];\n\n assembly {\n // Decrement length of byte array.\n let newLen := sub(mload(b), 1)\n mstore(b, newLen)\n }\n return result;\n }\n\n /// @dev Pops the last 20 bytes off of a byte array by modifying its length.\n /// @param b Byte array that will be modified.\n /// @return The 20 byte address that was popped off.\n function popLast20Bytes(bytes memory b)\n internal\n pure\n returns (address result)\n {\n require(\n b.length >= 20,\n \"GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\"\n );\n\n // Store last 20 bytes.\n result = readAddress(b, b.length - 20);\n\n assembly {\n // Subtract 20 from byte array length.\n let newLen := sub(mload(b), 20)\n mstore(b, newLen)\n }\n return result;\n }\n\n /// @dev Tests equality of two byte arrays.\n /// @param lhs First byte array to compare.\n /// @param rhs Second byte array to compare.\n /// @return True if arrays are the same. False otherwise.\n function equals(\n bytes memory lhs,\n bytes memory rhs\n )\n internal\n pure\n returns (bool equal)\n {\n // Keccak gas cost is 30 + numWords * 6. This is a cheap way to compare.\n // We early exit on unequal lengths, but keccak would also correctly\n // handle this.\n return lhs.length == rhs.length && keccak256(lhs) == keccak256(rhs);\n }\n\n /// @dev Reads an address from a position in a byte array.\n /// @param b Byte array containing an address.\n /// @param index Index in byte array of address.\n /// @return address from byte array.\n function readAddress(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (address result)\n {\n require(\n b.length >= index + 20, // 20 is length of address\n \"GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\"\n );\n\n // Add offset to index:\n // 1. Arrays are prefixed by 32-byte length parameter (add 32 to index)\n // 2. Account for size difference between address length and 32-byte storage word (subtract 12 from index)\n index += 20;\n\n // Read address from array memory\n assembly {\n // 1. Add index to address of bytes array\n // 2. Load 32-byte word from memory\n // 3. Apply 20-byte mask to obtain address\n result := and(mload(add(b, index)), 0xffffffffffffffffffffffffffffffffffffffff)\n }\n return result;\n }\n\n /// @dev Writes an address into a specific position in a byte array.\n /// @param b Byte array to insert address into.\n /// @param index Index in byte array of address.\n /// @param input Address to put into byte array.\n function writeAddress(\n bytes memory b,\n uint256 index,\n address input\n )\n internal\n pure\n {\n require(\n b.length >= index + 20, // 20 is length of address\n \"GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\"\n );\n\n // Add offset to index:\n // 1. Arrays are prefixed by 32-byte length parameter (add 32 to index)\n // 2. Account for size difference between address length and 32-byte storage word (subtract 12 from index)\n index += 20;\n\n // Store address into array memory\n assembly {\n // The address occupies 20 bytes and mstore stores 32 bytes.\n // First fetch the 32-byte word where we'll be storing the address, then\n // apply a mask so we have only the bytes in the word that the address will not occupy.\n // Then combine these bytes with the address and store the 32 bytes back to memory with mstore.\n\n // 1. Add index to address of bytes array\n // 2. Load 32-byte word from memory\n // 3. Apply 12-byte mask to obtain extra bytes occupying word of memory where we'll store the address\n let neighbors := and(mload(add(b, index)), 0xffffffffffffffffffffffff0000000000000000000000000000000000000000)\n \n // Make sure input address is clean.\n // (Solidity does not guarantee this)\n input := and(input, 0xffffffffffffffffffffffffffffffffffffffff)\n\n // Store the neighbors and address into memory\n mstore(add(b, index), xor(input, neighbors))\n }\n }\n\n /// @dev Reads a bytes32 value from a position in a byte array.\n /// @param b Byte array containing a bytes32 value.\n /// @param index Index in byte array of bytes32 value.\n /// @return bytes32 value from byte array.\n function readBytes32(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (bytes32 result)\n {\n require(\n b.length >= index + 32,\n \"GREATER_OR_EQUAL_TO_32_LENGTH_REQUIRED\"\n );\n\n // Arrays are prefixed by a 256 bit length parameter\n index += 32;\n\n // Read the bytes32 from array memory\n assembly {\n result := mload(add(b, index))\n }\n return result;\n }\n\n /// @dev Writes a bytes32 into a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input bytes32 to put into byte array.\n function writeBytes32(\n bytes memory b,\n uint256 index,\n bytes32 input\n )\n internal\n pure\n {\n require(\n b.length >= index + 32,\n \"GREATER_OR_EQUAL_TO_32_LENGTH_REQUIRED\"\n );\n\n // Arrays are prefixed by a 256 bit length parameter\n index += 32;\n\n // Read the bytes32 from array memory\n assembly {\n mstore(add(b, index), input)\n }\n }\n\n /// @dev Reads a uint256 value from a position in a byte array.\n /// @param b Byte array containing a uint256 value.\n /// @param index Index in byte array of uint256 value.\n /// @return uint256 value from byte array.\n function readUint256(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (uint256 result)\n {\n return uint256(readBytes32(b, index));\n }\n\n /// @dev Writes a uint256 into a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input uint256 to put into byte array.\n function writeUint256(\n bytes memory b,\n uint256 index,\n uint256 input\n )\n internal\n pure\n {\n writeBytes32(b, index, bytes32(input));\n }\n\n /// @dev Reads an unpadded bytes4 value from a position in a byte array.\n /// @param b Byte array containing a bytes4 value.\n /// @param index Index in byte array of bytes4 value.\n /// @return bytes4 value from byte array.\n function readBytes4(\n bytes memory b,\n uint256 index)\n internal\n pure\n returns (bytes4 result)\n {\n require(\n b.length >= index + 4,\n \"GREATER_OR_EQUAL_TO_4_LENGTH_REQUIRED\"\n );\n assembly {\n result := mload(add(b, 32))\n // Solidity does not require us to clean the trailing bytes.\n // We do it anyway\n result := and(result, 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000)\n }\n return result;\n }\n\n /// @dev Reads nested bytes from a specific position.\n /// @dev NOTE: the returned value overlaps with the input value.\n /// Both should be treated as immutable.\n /// @param b Byte array containing nested bytes.\n /// @param index Index of nested bytes.\n /// @return result Nested bytes.\n function readBytesWithLength(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (bytes memory result)\n {\n // Read length of nested bytes\n uint256 nestedBytesLength = readUint256(b, index);\n index += 32;\n\n // Assert length of <b> is valid, given\n // length of nested bytes\n require(\n b.length >= index + nestedBytesLength,\n \"GREATER_OR_EQUAL_TO_NESTED_BYTES_LENGTH_REQUIRED\"\n );\n \n // Return a pointer to the byte array as it exists inside `b`\n assembly {\n result := add(b, index)\n }\n return result;\n }\n\n /// @dev Inserts bytes at a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input bytes to insert.\n function writeBytesWithLength(\n bytes memory b,\n uint256 index,\n bytes memory input\n )\n internal\n pure\n {\n // Assert length of <b> is valid, given\n // length of input\n require(\n b.length >= index + 32 /* 32 bytes to store length */ + input.length,\n \"GREATER_OR_EQUAL_TO_NESTED_BYTES_LENGTH_REQUIRED\"\n );\n\n // Copy <input> into <b>\n memCopy(\n b.contentAddress() + index,\n input.rawAddress(), // includes length of <input>\n input.length + 32 // +32 bytes to store <input> length\n );\n }\n\n /// @dev Performs a deep copy of a byte array onto another byte array of greater than or equal length.\n /// @param dest Byte array that will be overwritten with source bytes.\n /// @param source Byte array to copy onto dest bytes.\n function deepCopyBytes(\n bytes memory dest,\n bytes memory source\n )\n internal\n pure\n {\n uint256 sourceLen = source.length;\n // Dest length must be >= source length, or some bytes would not be copied.\n require(\n dest.length >= sourceLen,\n \"GREATER_OR_EQUAL_TO_SOURCE_BYTES_LENGTH_REQUIRED\"\n );\n memCopy(\n dest.contentAddress(),\n source.contentAddress(),\n sourceLen\n );\n }\n}\n"
+ "2.0.0/protocol/Exchange/interfaces/IWallet.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.24;\n\n\ncontract IWallet {\n\n /// @dev Verifies that a signature is valid.\n /// @param hash Message hash that is signed.\n /// @param signature Proof of signing.\n /// @return Validity of order signature.\n function isValidSignature(\n bytes32 hash,\n bytes signature\n )\n external\n view\n returns (bool isValid);\n}\n",
+ "2.0.0/test/TestWallet/TestWallet.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.24;\n\nimport \"../../protocol/Exchange/interfaces/IWallet.sol\";\nimport \"../../utils/LibBytes/LibBytes.sol\";\n\n\ncontract TestWallet is \n IWallet\n{\n using LibBytes for bytes;\n\n // The owner of this wallet.\n // solhint-disable-next-line var-name-mixedcase\n address internal WALLET_OWNER;\n\n /// @dev constructs a new `TestWallet` with a single owner.\n /// @param walletOwner The owner of this wallet.\n constructor (address walletOwner) public {\n WALLET_OWNER = walletOwner;\n }\n\n /// @dev Validates an EIP712 signature.\n /// The signer must match the owner of this wallet.\n /// @param hash Message hash that is signed.\n /// @param eip712Signature Proof of signing.\n /// @return Validity of signature.\n function isValidSignature(\n bytes32 hash,\n bytes eip712Signature\n )\n external\n view\n returns (bool isValid)\n {\n require(\n eip712Signature.length == 65,\n \"LENGTH_65_REQUIRED\"\n );\n\n uint8 v = uint8(eip712Signature[0]);\n bytes32 r = eip712Signature.readBytes32(1);\n bytes32 s = eip712Signature.readBytes32(33);\n address recoveredAddress = ecrecover(hash, v, r, s);\n isValid = WALLET_OWNER == recoveredAddress;\n return isValid;\n }\n}\n",
+ "2.0.0/utils/LibBytes/LibBytes.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.24;\n\n\nlibrary LibBytes {\n\n using LibBytes for bytes;\n\n /// @dev Gets the memory address for a byte array.\n /// @param input Byte array to lookup.\n /// @return memoryAddress Memory address of byte array. This\n /// points to the header of the byte array which contains\n /// the length.\n function rawAddress(bytes memory input)\n internal\n pure\n returns (uint256 memoryAddress)\n {\n assembly {\n memoryAddress := input\n }\n return memoryAddress;\n }\n \n /// @dev Gets the memory address for the contents of a byte array.\n /// @param input Byte array to lookup.\n /// @return memoryAddress Memory address of the contents of the byte array.\n function contentAddress(bytes memory input)\n internal\n pure\n returns (uint256 memoryAddress)\n {\n assembly {\n memoryAddress := add(input, 32)\n }\n return memoryAddress;\n }\n\n /// @dev Copies `length` bytes from memory location `source` to `dest`.\n /// @param dest memory address to copy bytes to.\n /// @param source memory address to copy bytes from.\n /// @param length number of bytes to copy.\n function memCopy(\n uint256 dest,\n uint256 source,\n uint256 length\n )\n internal\n pure\n {\n if (length < 32) {\n // Handle a partial word by reading destination and masking\n // off the bits we are interested in.\n // This correctly handles overlap, zero lengths and source == dest\n assembly {\n let mask := sub(exp(256, sub(32, length)), 1)\n let s := and(mload(source), not(mask))\n let d := and(mload(dest), mask)\n mstore(dest, or(s, d))\n }\n } else {\n // Skip the O(length) loop when source == dest.\n if (source == dest) {\n return;\n }\n\n // For large copies we copy whole words at a time. The final\n // word is aligned to the end of the range (instead of after the\n // previous) to handle partial words. So a copy will look like this:\n //\n // ####\n // ####\n // ####\n // ####\n //\n // We handle overlap in the source and destination range by\n // changing the copying direction. This prevents us from\n // overwriting parts of source that we still need to copy.\n //\n // This correctly handles source == dest\n //\n if (source > dest) {\n assembly {\n // We subtract 32 from `sEnd` and `dEnd` because it\n // is easier to compare with in the loop, and these\n // are also the addresses we need for copying the\n // last bytes.\n length := sub(length, 32)\n let sEnd := add(source, length)\n let dEnd := add(dest, length)\n\n // Remember the last 32 bytes of source\n // This needs to be done here and not after the loop\n // because we may have overwritten the last bytes in\n // source already due to overlap.\n let last := mload(sEnd)\n\n // Copy whole words front to back\n // Note: the first check is always true,\n // this could have been a do-while loop.\n // solhint-disable-next-line no-empty-blocks\n for {} lt(source, sEnd) {} {\n mstore(dest, mload(source))\n source := add(source, 32)\n dest := add(dest, 32)\n }\n \n // Write the last 32 bytes\n mstore(dEnd, last)\n }\n } else {\n assembly {\n // We subtract 32 from `sEnd` and `dEnd` because those\n // are the starting points when copying a word at the end.\n length := sub(length, 32)\n let sEnd := add(source, length)\n let dEnd := add(dest, length)\n\n // Remember the first 32 bytes of source\n // This needs to be done here and not after the loop\n // because we may have overwritten the first bytes in\n // source already due to overlap.\n let first := mload(source)\n\n // Copy whole words back to front\n // We use a signed comparisson here to allow dEnd to become\n // negative (happens when source and dest < 32). Valid\n // addresses in local memory will never be larger than\n // 2**255, so they can be safely re-interpreted as signed.\n // Note: the first check is always true,\n // this could have been a do-while loop.\n // solhint-disable-next-line no-empty-blocks\n for {} slt(dest, dEnd) {} {\n mstore(dEnd, mload(sEnd))\n sEnd := sub(sEnd, 32)\n dEnd := sub(dEnd, 32)\n }\n \n // Write the first 32 bytes\n mstore(dest, first)\n }\n }\n }\n }\n\n /// @dev Returns a slices from a byte array.\n /// @param b The byte array to take a slice from.\n /// @param from The starting index for the slice (inclusive).\n /// @param to The final index for the slice (exclusive).\n /// @return result The slice containing bytes at indices [from, to)\n function slice(\n bytes memory b,\n uint256 from,\n uint256 to\n )\n internal\n pure\n returns (bytes memory result)\n {\n require(\n from <= to,\n \"FROM_LESS_THAN_TO_REQUIRED\"\n );\n require(\n to < b.length,\n \"TO_LESS_THAN_LENGTH_REQUIRED\"\n );\n \n // Create a new bytes structure and copy contents\n result = new bytes(to - from);\n memCopy(\n result.contentAddress(),\n b.contentAddress() + from,\n result.length);\n return result;\n }\n \n /// @dev Returns a slice from a byte array without preserving the input.\n /// @param b The byte array to take a slice from. Will be destroyed in the process.\n /// @param from The starting index for the slice (inclusive).\n /// @param to The final index for the slice (exclusive).\n /// @return result The slice containing bytes at indices [from, to)\n /// @dev When `from == 0`, the original array will match the slice. In other cases its state will be corrupted.\n function sliceDestructive(\n bytes memory b,\n uint256 from,\n uint256 to\n )\n internal\n pure\n returns (bytes memory result)\n {\n require(\n from <= to,\n \"FROM_LESS_THAN_TO_REQUIRED\"\n );\n require(\n to < b.length,\n \"TO_LESS_THAN_LENGTH_REQUIRED\"\n );\n \n // Create a new bytes structure around [from, to) in-place.\n assembly {\n result := add(b, from)\n mstore(result, sub(to, from))\n }\n return result;\n }\n\n /// @dev Pops the last byte off of a byte array by modifying its length.\n /// @param b Byte array that will be modified.\n /// @return The byte that was popped off.\n function popLastByte(bytes memory b)\n internal\n pure\n returns (bytes1 result)\n {\n require(\n b.length > 0,\n \"GREATER_THAN_ZERO_LENGTH_REQUIRED\"\n );\n\n // Store last byte.\n result = b[b.length - 1];\n\n assembly {\n // Decrement length of byte array.\n let newLen := sub(mload(b), 1)\n mstore(b, newLen)\n }\n return result;\n }\n\n /// @dev Pops the last 20 bytes off of a byte array by modifying its length.\n /// @param b Byte array that will be modified.\n /// @return The 20 byte address that was popped off.\n function popLast20Bytes(bytes memory b)\n internal\n pure\n returns (address result)\n {\n require(\n b.length >= 20,\n \"GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\"\n );\n\n // Store last 20 bytes.\n result = readAddress(b, b.length - 20);\n\n assembly {\n // Subtract 20 from byte array length.\n let newLen := sub(mload(b), 20)\n mstore(b, newLen)\n }\n return result;\n }\n\n /// @dev Tests equality of two byte arrays.\n /// @param lhs First byte array to compare.\n /// @param rhs Second byte array to compare.\n /// @return True if arrays are the same. False otherwise.\n function equals(\n bytes memory lhs,\n bytes memory rhs\n )\n internal\n pure\n returns (bool equal)\n {\n // Keccak gas cost is 30 + numWords * 6. This is a cheap way to compare.\n // We early exit on unequal lengths, but keccak would also correctly\n // handle this.\n return lhs.length == rhs.length && keccak256(lhs) == keccak256(rhs);\n }\n\n /// @dev Reads an address from a position in a byte array.\n /// @param b Byte array containing an address.\n /// @param index Index in byte array of address.\n /// @return address from byte array.\n function readAddress(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (address result)\n {\n require(\n b.length >= index + 20, // 20 is length of address\n \"GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\"\n );\n\n // Add offset to index:\n // 1. Arrays are prefixed by 32-byte length parameter (add 32 to index)\n // 2. Account for size difference between address length and 32-byte storage word (subtract 12 from index)\n index += 20;\n\n // Read address from array memory\n assembly {\n // 1. Add index to address of bytes array\n // 2. Load 32-byte word from memory\n // 3. Apply 20-byte mask to obtain address\n result := and(mload(add(b, index)), 0xffffffffffffffffffffffffffffffffffffffff)\n }\n return result;\n }\n\n /// @dev Writes an address into a specific position in a byte array.\n /// @param b Byte array to insert address into.\n /// @param index Index in byte array of address.\n /// @param input Address to put into byte array.\n function writeAddress(\n bytes memory b,\n uint256 index,\n address input\n )\n internal\n pure\n {\n require(\n b.length >= index + 20, // 20 is length of address\n \"GREATER_OR_EQUAL_TO_20_LENGTH_REQUIRED\"\n );\n\n // Add offset to index:\n // 1. Arrays are prefixed by 32-byte length parameter (add 32 to index)\n // 2. Account for size difference between address length and 32-byte storage word (subtract 12 from index)\n index += 20;\n\n // Store address into array memory\n assembly {\n // The address occupies 20 bytes and mstore stores 32 bytes.\n // First fetch the 32-byte word where we'll be storing the address, then\n // apply a mask so we have only the bytes in the word that the address will not occupy.\n // Then combine these bytes with the address and store the 32 bytes back to memory with mstore.\n\n // 1. Add index to address of bytes array\n // 2. Load 32-byte word from memory\n // 3. Apply 12-byte mask to obtain extra bytes occupying word of memory where we'll store the address\n let neighbors := and(\n mload(add(b, index)),\n 0xffffffffffffffffffffffff0000000000000000000000000000000000000000\n )\n \n // Make sure input address is clean.\n // (Solidity does not guarantee this)\n input := and(input, 0xffffffffffffffffffffffffffffffffffffffff)\n\n // Store the neighbors and address into memory\n mstore(add(b, index), xor(input, neighbors))\n }\n }\n\n /// @dev Reads a bytes32 value from a position in a byte array.\n /// @param b Byte array containing a bytes32 value.\n /// @param index Index in byte array of bytes32 value.\n /// @return bytes32 value from byte array.\n function readBytes32(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (bytes32 result)\n {\n require(\n b.length >= index + 32,\n \"GREATER_OR_EQUAL_TO_32_LENGTH_REQUIRED\"\n );\n\n // Arrays are prefixed by a 256 bit length parameter\n index += 32;\n\n // Read the bytes32 from array memory\n assembly {\n result := mload(add(b, index))\n }\n return result;\n }\n\n /// @dev Writes a bytes32 into a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input bytes32 to put into byte array.\n function writeBytes32(\n bytes memory b,\n uint256 index,\n bytes32 input\n )\n internal\n pure\n {\n require(\n b.length >= index + 32,\n \"GREATER_OR_EQUAL_TO_32_LENGTH_REQUIRED\"\n );\n\n // Arrays are prefixed by a 256 bit length parameter\n index += 32;\n\n // Read the bytes32 from array memory\n assembly {\n mstore(add(b, index), input)\n }\n }\n\n /// @dev Reads a uint256 value from a position in a byte array.\n /// @param b Byte array containing a uint256 value.\n /// @param index Index in byte array of uint256 value.\n /// @return uint256 value from byte array.\n function readUint256(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (uint256 result)\n {\n return uint256(readBytes32(b, index));\n }\n\n /// @dev Writes a uint256 into a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input uint256 to put into byte array.\n function writeUint256(\n bytes memory b,\n uint256 index,\n uint256 input\n )\n internal\n pure\n {\n writeBytes32(b, index, bytes32(input));\n }\n\n /// @dev Reads an unpadded bytes4 value from a position in a byte array.\n /// @param b Byte array containing a bytes4 value.\n /// @param index Index in byte array of bytes4 value.\n /// @return bytes4 value from byte array.\n function readBytes4(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (bytes4 result)\n {\n require(\n b.length >= index + 4,\n \"GREATER_OR_EQUAL_TO_4_LENGTH_REQUIRED\"\n );\n assembly {\n result := mload(add(b, 32))\n // Solidity does not require us to clean the trailing bytes.\n // We do it anyway\n result := and(result, 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000)\n }\n return result;\n }\n\n /// @dev Reads nested bytes from a specific position.\n /// @dev NOTE: the returned value overlaps with the input value.\n /// Both should be treated as immutable.\n /// @param b Byte array containing nested bytes.\n /// @param index Index of nested bytes.\n /// @return result Nested bytes.\n function readBytesWithLength(\n bytes memory b,\n uint256 index\n )\n internal\n pure\n returns (bytes memory result)\n {\n // Read length of nested bytes\n uint256 nestedBytesLength = readUint256(b, index);\n index += 32;\n\n // Assert length of <b> is valid, given\n // length of nested bytes\n require(\n b.length >= index + nestedBytesLength,\n \"GREATER_OR_EQUAL_TO_NESTED_BYTES_LENGTH_REQUIRED\"\n );\n \n // Return a pointer to the byte array as it exists inside `b`\n assembly {\n result := add(b, index)\n }\n return result;\n }\n\n /// @dev Inserts bytes at a specific position in a byte array.\n /// @param b Byte array to insert <input> into.\n /// @param index Index in byte array of <input>.\n /// @param input bytes to insert.\n function writeBytesWithLength(\n bytes memory b,\n uint256 index,\n bytes memory input\n )\n internal\n pure\n {\n // Assert length of <b> is valid, given\n // length of input\n require(\n b.length >= index + 32 + input.length, // 32 bytes to store length\n \"GREATER_OR_EQUAL_TO_NESTED_BYTES_LENGTH_REQUIRED\"\n );\n\n // Copy <input> into <b>\n memCopy(\n b.contentAddress() + index,\n input.rawAddress(), // includes length of <input>\n input.length + 32 // +32 bytes to store <input> length\n );\n }\n\n /// @dev Performs a deep copy of a byte array onto another byte array of greater than or equal length.\n /// @param dest Byte array that will be overwritten with source bytes.\n /// @param source Byte array to copy onto dest bytes.\n function deepCopyBytes(\n bytes memory dest,\n bytes memory source\n )\n internal\n pure\n {\n uint256 sourceLen = source.length;\n // Dest length must be >= source length, or some bytes would not be copied.\n require(\n dest.length >= sourceLen,\n \"GREATER_OR_EQUAL_TO_SOURCE_BYTES_LENGTH_REQUIRED\"\n );\n memCopy(\n dest.contentAddress(),\n source.contentAddress(),\n sourceLen\n );\n }\n}\n"
},
- "sourceTreeHashHex": "0x0798ff83c483b74a8204aca904c73d83edecb6324c5e7660630b2f7fc4ff9bee",
+ "sourceTreeHashHex": "0x6371bfeaaf096ad3212420412e4507c6cef266a4df89047f9e5086ec4c4b7bdb",
"compiler": {
"name": "solc",
"version": "soljson-v0.4.24+commit.e67f0147.js",
diff --git a/packages/migrations/artifacts/2.0.0/TokenRegistry.json b/packages/migrations/artifacts/2.0.0/TokenRegistry.json
index 9c7403464..0ed4df473 100644
--- a/packages/migrations/artifacts/2.0.0/TokenRegistry.json
+++ b/packages/migrations/artifacts/2.0.0/TokenRegistry.json
@@ -548,29 +548,29 @@
"evm": {
"bytecode": {
"linkReferences": {},
- "object": "0x608060405260008054600160a060020a03191633179055612d9a806100256000396000f3006080604052600436106100e55763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166313baf1e681146100ea5780632fbfeba91461011d5780633550b6d91461019f57806356318820146101f85780637abccac91461026c5780638da5cb5b14610484578063a880319d14610499578063c370c86d146105d0578063e486033914610644578063e5df8b8414610672578063e73fc0c31461068a578063ee8c24b8146106e3578063eef05f6514610748578063efa74f1f146107bc578063f036417f14610815578063f2fde38b14610889575b600080fd5b3480156100f657600080fd5b5061011b73ffffffffffffffffffffffffffffffffffffffff600435166024356108b7565b005b34801561012957600080fd5b506040805160206004803580820135601f8101849004840285018401909552848452610176943694929360249392840191908190840183828082843750949750610efb9650505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156101ab57600080fd5b506040805160206004803580820135601f8101849004840285018401909552848452610176943694929360249392840191908190840183828082843750949750610fb59650505050505050565b34801561020457600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261011b95833573ffffffffffffffffffffffffffffffffffffffff169536956044949193909101919081908401838280828437509497506110069650505050505050565b34801561027857600080fd5b5061029a73ffffffffffffffffffffffffffffffffffffffff600435166111d8565b604051808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001806020018660ff1660ff168152602001806020018060200185810385528a818151815260200191508051906020019080838360005b83811015610321578181015183820152602001610309565b50505050905090810190601f16801561034e5780820380516001836020036101000a031916815260200191505b5085810384528951815289516020918201918b019080838360005b83811015610381578181015183820152602001610369565b50505050905090810190601f1680156103ae5780820380516001836020036101000a031916815260200191505b50858103835287518152875160209182019189019080838360005b838110156103e15781810151838201526020016103c9565b50505050905090810190601f16801561040e5780820380516001836020036101000a031916815260200191505b50858103825286518152865160209182019188019080838360005b83811015610441578181015183820152602001610429565b50505050905090810190601f16801561046e5780820380516001836020036101000a031916815260200191505b509a505050505050505050505060405180910390f35b34801561049057600080fd5b50610176611528565b3480156104a557600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261011b95833573ffffffffffffffffffffffffffffffffffffffff1695369560449491939091019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375050604080516020601f818a01358b0180359182018390048302840183018552818452989b60ff8b35169b909a90999401975091955091820193509150819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a9998810197919650918201945092508291508401838280828437509497506115449650505050505050565b3480156105dc57600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261011b95833573ffffffffffffffffffffffffffffffffffffffff16953695604494919390910191908190840183828082843750949750611cbc9650505050505050565b34801561065057600080fd5b5061029a73ffffffffffffffffffffffffffffffffffffffff600435166120d9565b34801561067e57600080fd5b506101766004356123ce565b34801561069657600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261029a9436949293602493928401919081908401838280828437509497506124039650505050505050565b3480156106ef57600080fd5b506106f86124e3565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561073457818101518382015260200161071c565b505050509050019250505060405180910390f35b34801561075457600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261011b95833573ffffffffffffffffffffffffffffffffffffffff169536956044949193909101919081908401838280828437509497506125539650505050505050565b3480156107c857600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261029a94369492936024939284019190819084018382808284375094975061271e9650505050505050565b34801561082157600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261011b95833573ffffffffffffffffffffffffffffffffffffffff169536956044949193909101919081908401838280828437509497506127799650505050505050565b34801561089557600080fd5b5061011b73ffffffffffffffffffffffffffffffffffffffff60043516612b95565b6000805473ffffffffffffffffffffffffffffffffffffffff1633146108dc57600080fd5b73ffffffffffffffffffffffffffffffffffffffff808416600090815260016020526040902054849116151561091157600080fd5b8373ffffffffffffffffffffffffffffffffffffffff1660048481548110151561093757fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff161461096357600080fd5b600480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061099357fe5b6000918252602090912001546004805473ffffffffffffffffffffffffffffffffffffffff90921691859081106109c657fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190610a459082612c19565b5073ffffffffffffffffffffffffffffffffffffffff80851660009081526001602081815260409283902080546003820154855160ff90911695810186905260a0808252838601805460027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9882161561010002989098011687900491830182905293995091909616957f32c54f1e2ea75844ded7517e7dbcd3895da7cd0c28f9ab9f9cf6ecf5f83762c695929489019360048a019260058b0192918291908201906060830190608084019060c08501908b908015610b655780601f10610b3a57610100808354040283529160200191610b65565b820191906000526020600020905b815481529060010190602001808311610b4857829003601f168201915b50508581038452895460027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010060018416150201909116048082526020909101908a908015610bf75780601f10610bcc57610100808354040283529160200191610bf7565b820191906000526020600020905b815481529060010190602001808311610bda57829003601f168201915b50508581038352875460027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600184161502019091160480825260209091019088908015610c895780601f10610c5e57610100808354040283529160200191610c89565b820191906000526020600020905b815481529060010190602001808311610c6c57829003601f168201915b50508581038252865460027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600184161502019091160480825260209091019087908015610d1b5780601f10610cf057610100808354040283529160200191610d1b565b820191906000526020600020905b815481529060010190602001808311610cfe57829003601f168201915b5050995050505050505050505060405180910390a26002826002016040518082805460018160011615610100020316600290048015610d915780601f10610d6f576101008083540402835291820191610d91565b820191906000526020600020905b815481529060010190602001808311610d7d575b5050915050908152602001604051809103902060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556003826001016040518082805460018160011615610100020316600290048015610e285780601f10610e06576101008083540402835291820191610e28565b820191906000526020600020905b815481529060010190602001808311610e14575b50509283525050604080516020928190038301902080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690915573ffffffffffffffffffffffffffffffffffffffff871660009081526001938490529182208054909116815591610e9f90830182612c42565b610ead600283016000612c42565b6003820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055610ee5600483016000612c42565b610ef3600583016000612c42565b505050505050565b60006003826040518082805190602001908083835b60208310610f4d57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610f10565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905292019485525060405193849003019092205473ffffffffffffffffffffffffffffffffffffffff16949350505050565b600060028260405180828051906020019080838360208310610f4d57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610f10565b6000805473ffffffffffffffffffffffffffffffffffffffff16331461102b57600080fd5b73ffffffffffffffffffffffffffffffffffffffff808416600090815260016020526040902054849116151561106057600080fd5b73ffffffffffffffffffffffffffffffffffffffff84166000818152600160208181526040928390208351848152600582018054600295811615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116949094049481018590529096507fc3168fdc13112e44a031057dbf6c609b33353addb4d8037d24543e22cbfe2acd93889282919082019060608301908690801561114c5780601f106111215761010080835404028352916020019161114c565b820191906000526020600020905b81548152906001019060200180831161112f57829003601f168201915b5050838103825284518152845160209182019186019080838360005b83811015611180578181015183820152602001611168565b50505050905090810190601f1680156111ad5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a282516111d19060058401906020860190612c86565b5050505050565b600060608060006060806111ea612d04565b73ffffffffffffffffffffffffffffffffffffffff888116600090815260016020818152604092839020835160c0810185528154909516855280830180548551600261010096831615969096027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190911694909404601f8101849004840285018401909552848452909385830193928301828280156112cb5780601f106112a0576101008083540402835291602001916112cb565b820191906000526020600020905b8154815290600101906020018083116112ae57829003601f168201915b5050509183525050600282810180546040805160206001841615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190931694909404601f8101839004830285018301909152808452938101939083018282801561137b5780601f106113505761010080835404028352916020019161137b565b820191906000526020600020905b81548152906001019060200180831161135e57829003601f168201915b5050509183525050600382015460ff1660208083019190915260048301805460408051601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600186161561010002019094169390930492830185900485028101850182528281529401939283018282801561143a5780601f1061140f5761010080835404028352916020019161143a565b820191906000526020600020905b81548152906001019060200180831161141d57829003601f168201915b505050918352505060058201805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f81018490048402820184019092528181529382019392918301828280156114ec5780601f106114c1576101008083540402835291602001916114ec565b820191906000526020600020905b8154815290600101906020018083116114cf57829003601f168201915b5050509190925250508151602083015160408401516060850151608086015160a090960151939e929d50909b5099509297509550909350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff16331461156857600080fd5b73ffffffffffffffffffffffffffffffffffffffff8087166000908152600160205260409020548791161561159c57600080fd5b8673ffffffffffffffffffffffffffffffffffffffff811615156115bf57600080fd5b85600073ffffffffffffffffffffffffffffffffffffffff166002826040518082805190602001908083835b6020831061162857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016115eb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905292019485525060405193849003019092205473ffffffffffffffffffffffffffffffffffffffff16929092149150611699905057600080fd5b87600073ffffffffffffffffffffffffffffffffffffffff166003826040518082805190602001908083835b6020831061170257805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016116c5565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905292019485525060405193849003019092205473ffffffffffffffffffffffffffffffffffffffff16929092149150611773905057600080fd5b6040805160c08101825273ffffffffffffffffffffffffffffffffffffffff8c811680835260208084018e81528486018e905260ff8d166060860152608085018c905260a085018b90526000928352600180835295909220845181547fffffffffffffffffffffffff00000000000000000000000000000000000000001694169390931783559051805193949293611812938501929190910190612c86565b506040820151805161182e916002840191602090910190612c86565b5060608201516003820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff90921691909117905560808201518051611882916004840191602090910190612c86565b5060a0820151805161189e916005840191602090910190612c86565b5050600480546001810182556000919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8d161790555060405188518b916002918b9190819060208401908083835b6020831061196657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611929565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199092169116179052920194855250604051938490038101842080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff969096169590951790945550508a518c926003928d9290918291908401908083835b60208310611a4757805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611a0a565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905292019485525060408051948590038201852080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff97881617905560ff8d169085015260a08085528e51908501528d51948f16947fd8d928b0b50ca11d9dc273236b46f3526515b03602f71f3a6af4f45bd9fa9144948f94508e93508d928d928d92918291828201916060840191608085019160c0860191908c019080838360005b83811015611b4f578181015183820152602001611b37565b50505050905090810190601f168015611b7c5780820380516001836020036101000a031916815260200191505b5085810384528951815289516020918201918b019080838360005b83811015611baf578181015183820152602001611b97565b50505050905090810190601f168015611bdc5780820380516001836020036101000a031916815260200191505b50858103835287518152875160209182019189019080838360005b83811015611c0f578181015183820152602001611bf7565b50505050905090810190601f168015611c3c5780820380516001836020036101000a031916815260200191505b50858103825286518152865160209182019188019080838360005b83811015611c6f578181015183820152602001611c57565b50505050905090810190601f168015611c9c5780820380516001836020036101000a031916815260200191505b50995050505050505050505060405180910390a250505050505050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff163314611ce157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8084166000908152600160205260409020548491161515611d1657600080fd5b82600073ffffffffffffffffffffffffffffffffffffffff166003826040518082805190602001908083835b60208310611d7f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611d42565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905292019485525060405193849003019092205473ffffffffffffffffffffffffffffffffffffffff16929092149150611df0905057600080fd5b73ffffffffffffffffffffffffffffffffffffffff851660008181526001602081815260409283902083518481528184018054600295811615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116949094049481018590529097507f4a6dbfc867b179991dec22ff19960f0a94d8d9d891fc556f547764670340e8ae938992829190820190606083019086908015611edb5780601f10611eb057610100808354040283529160200191611edb565b820191906000526020600020905b815481529060010190602001808311611ebe57829003601f168201915b5050838103825284518152845160209182019186019080838360005b83811015611f0f578181015183820152602001611ef7565b50505050905090810190601f168015611f3c5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a26003836001016040518082805460018160011615610100020316600290048015611fac5780601f10611f8a576101008083540402835291820191611fac565b820191906000526020600020905b815481529060010190602001808311611f98575b50509283525050604051908190036020908101822080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905585518792600392889282918401908083835b6020831061203657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611ff9565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905292019485525060405193849003810190932080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9590951694909417909355508551610ef392506001860191870190612c86565b600160208181526000928352604092839020805481840180548651600261010097831615979097027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190911695909504601f810185900485028601850190965285855273ffffffffffffffffffffffffffffffffffffffff909116949193929091908301828280156121ad5780601f10612182576101008083540402835291602001916121ad565b820191906000526020600020905b81548152906001019060200180831161219057829003601f168201915b50505060028085018054604080516020601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600187161502019094169590950492830185900485028101850190915281815295969594509092509083018282801561225d5780601f106122325761010080835404028352916020019161225d565b820191906000526020600020905b81548152906001019060200180831161224057829003601f168201915b50505050600383015460048401805460408051602060026101006001861615027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f8101849004840282018401909252818152959660ff90941695939450908301828280156123165780601f106122eb57610100808354040283529160200191612316565b820191906000526020600020905b8154815290600101906020018083116122f957829003601f168201915b5050505060058301805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f81018490048402820184019092528181529495949350908301828280156123c45780601f10612399576101008083540402835291602001916123c4565b820191906000526020600020905b8154815290600101906020018083116123a757829003601f168201915b5050505050905086565b60048054829081106123dc57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6000606080600060608060006003886040518082805190602001908083835b6020831061245f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612422565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905292019485525060405193849003019092205473ffffffffffffffffffffffffffffffffffffffff1692506124ce91508290506111d8565b949d939c50919a509850965090945092505050565b6060600480548060200260200160405190810160405280929190818152602001828054801561254857602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161251d575b505050505090505b90565b6000805473ffffffffffffffffffffffffffffffffffffffff16331461257857600080fd5b73ffffffffffffffffffffffffffffffffffffffff80841660009081526001602052604090205484911615156125ad57600080fd5b73ffffffffffffffffffffffffffffffffffffffff84166000818152600160208181526040928390208351848152600482018054600295811615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116949094049481018590529096507f5b19f79ac4e8cfa820815502e11615f1a449e28155dc289ec5cac1a11f9086949388928291908201906060830190869080156126995780601f1061266e57610100808354040283529160200191612699565b820191906000526020600020905b81548152906001019060200180831161267c57829003601f168201915b5050838103825284518152845160209182019186019080838360005b838110156126cd5781810151838201526020016126b5565b50505050905090810190601f1680156126fa5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a282516111d19060048401906020860190612c86565b6000606080600060608060006002886040518082805190602001908083836020831061245f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612422565b6000805473ffffffffffffffffffffffffffffffffffffffff16331461279e57600080fd5b73ffffffffffffffffffffffffffffffffffffffff80841660009081526001602052604090205484911615156127d357600080fd5b82600073ffffffffffffffffffffffffffffffffffffffff166002826040518082805190602001908083835b6020831061283c57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016127ff565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905292019485525060405193849003019092205473ffffffffffffffffffffffffffffffffffffffff169290921491506128ad905057600080fd5b73ffffffffffffffffffffffffffffffffffffffff851660008181526001602081815260409283902083518481526002808301805495861615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01909516049481018590529097507f53d878a6530e56c9bc96548fa0a8cae4f1d1f49c86b0e934c086b992ebb6998f9389928291908201906060830190869080156129975780601f1061296c57610100808354040283529160200191612997565b820191906000526020600020905b81548152906001019060200180831161297a57829003601f168201915b5050838103825284518152845160209182019186019080838360005b838110156129cb5781810151838201526020016129b3565b50505050905090810190601f1680156129f85780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a26002836002016040518082805460018160011615610100020316600290048015612a685780601f10612a46576101008083540402835291820191612a68565b820191906000526020600020905b815481529060010190602001808311612a54575b50509283525050604051908190036020908101822080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905585518792600292889282918401908083835b60208310612af257805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612ab5565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905292019485525060405193849003810190932080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9590951694909417909355508551610ef392506002860191870190612c86565b60005473ffffffffffffffffffffffffffffffffffffffff163314612bb957600080fd5b73ffffffffffffffffffffffffffffffffffffffff811615612c1657600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b815481835581811115612c3d57600083815260209020612c3d918101908301612d54565b505050565b50805460018160011615610100020316600290046000825580601f10612c685750612c16565b601f016020900490600052602060002090810190612c169190612d54565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612cc757805160ff1916838001178555612cf4565b82800160010185558215612cf4579182015b82811115612cf4578251825591602001919060010190612cd9565b50612d00929150612d54565b5090565b60c060405190810160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020016060815260200160608152602001600060ff16815260200160608152602001606081525090565b61255091905b80821115612d005760008155600101612d5a5600a165627a7a7230582084e95a0a2a2f6b98236222635755a082c937f66b7dd9529673a6c9fe221f8eb00029",
- "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB NOT AND CALLER OR SWAP1 SSTORE PUSH2 0x2D9A DUP1 PUSH2 0x25 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xE5 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x13BAF1E6 DUP2 EQ PUSH2 0xEA JUMPI DUP1 PUSH4 0x2FBFEBA9 EQ PUSH2 0x11D JUMPI DUP1 PUSH4 0x3550B6D9 EQ PUSH2 0x19F JUMPI DUP1 PUSH4 0x56318820 EQ PUSH2 0x1F8 JUMPI DUP1 PUSH4 0x7ABCCAC9 EQ PUSH2 0x26C JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x484 JUMPI DUP1 PUSH4 0xA880319D EQ PUSH2 0x499 JUMPI DUP1 PUSH4 0xC370C86D EQ PUSH2 0x5D0 JUMPI DUP1 PUSH4 0xE4860339 EQ PUSH2 0x644 JUMPI DUP1 PUSH4 0xE5DF8B84 EQ PUSH2 0x672 JUMPI DUP1 PUSH4 0xE73FC0C3 EQ PUSH2 0x68A JUMPI DUP1 PUSH4 0xEE8C24B8 EQ PUSH2 0x6E3 JUMPI DUP1 PUSH4 0xEEF05F65 EQ PUSH2 0x748 JUMPI DUP1 PUSH4 0xEFA74F1F EQ PUSH2 0x7BC JUMPI DUP1 PUSH4 0xF036417F EQ PUSH2 0x815 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x889 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11B PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD PUSH2 0x8B7 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x129 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 DUP1 CALLDATALOAD DUP1 DUP3 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x176 SWAP5 CALLDATASIZE SWAP5 SWAP3 SWAP4 PUSH1 0x24 SWAP4 SWAP3 DUP5 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0xEFB SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 DUP1 CALLDATALOAD DUP1 DUP3 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x176 SWAP5 CALLDATASIZE SWAP5 SWAP3 SWAP4 PUSH1 0x24 SWAP4 SWAP3 DUP5 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0xFB5 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x204 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 PUSH1 0x24 DUP1 CALLDATALOAD DUP3 DUP2 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP6 SWAP1 DIV DUP6 MUL DUP7 ADD DUP6 ADD SWAP1 SWAP7 MSTORE DUP6 DUP6 MSTORE PUSH2 0x11B SWAP6 DUP4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP6 CALLDATASIZE SWAP6 PUSH1 0x44 SWAP5 SWAP2 SWAP4 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x1006 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x278 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x29A PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x11D8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP7 PUSH1 0xFF AND PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP6 DUP2 SUB DUP6 MSTORE DUP11 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x321 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x309 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x34E 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 DUP6 DUP2 SUB DUP5 MSTORE DUP10 MLOAD DUP2 MSTORE DUP10 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP12 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x381 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x369 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x3AE 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 DUP6 DUP2 SUB DUP4 MSTORE DUP8 MLOAD DUP2 MSTORE DUP8 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP10 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3E1 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3C9 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x40E 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 DUP6 DUP2 SUB DUP3 MSTORE DUP7 MLOAD DUP2 MSTORE DUP7 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP9 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x441 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x429 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x46E 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 SWAP11 POP POP POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x490 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x176 PUSH2 0x1528 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 PUSH1 0x24 DUP1 CALLDATALOAD DUP3 DUP2 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP6 SWAP1 DIV DUP6 MUL DUP7 ADD DUP6 ADD SWAP1 SWAP7 MSTORE DUP6 DUP6 MSTORE PUSH2 0x11B SWAP6 DUP4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP6 CALLDATASIZE SWAP6 PUSH1 0x44 SWAP5 SWAP2 SWAP4 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F DUP10 CALLDATALOAD DUP12 ADD DUP1 CALLDATALOAD SWAP2 DUP3 ADD DUP4 SWAP1 DIV DUP4 MUL DUP5 ADD DUP4 ADD SWAP1 SWAP5 MSTORE DUP1 DUP4 MSTORE SWAP8 SWAP11 SWAP10 SWAP9 DUP2 ADD SWAP8 SWAP2 SWAP7 POP SWAP2 DUP3 ADD SWAP5 POP SWAP3 POP DUP3 SWAP2 POP DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F DUP2 DUP11 ADD CALLDATALOAD DUP12 ADD DUP1 CALLDATALOAD SWAP2 DUP3 ADD DUP4 SWAP1 DIV DUP4 MUL DUP5 ADD DUP4 ADD DUP6 MSTORE DUP2 DUP5 MSTORE SWAP9 SWAP12 PUSH1 0xFF DUP12 CALLDATALOAD AND SWAP12 SWAP1 SWAP11 SWAP1 SWAP10 SWAP5 ADD SWAP8 POP SWAP2 SWAP6 POP SWAP2 DUP3 ADD SWAP4 POP SWAP2 POP DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F DUP10 CALLDATALOAD DUP12 ADD DUP1 CALLDATALOAD SWAP2 DUP3 ADD DUP4 SWAP1 DIV DUP4 MUL DUP5 ADD DUP4 ADD SWAP1 SWAP5 MSTORE DUP1 DUP4 MSTORE SWAP8 SWAP11 SWAP10 SWAP9 DUP2 ADD SWAP8 SWAP2 SWAP7 POP SWAP2 DUP3 ADD SWAP5 POP SWAP3 POP DUP3 SWAP2 POP DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x1544 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 PUSH1 0x24 DUP1 CALLDATALOAD DUP3 DUP2 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP6 SWAP1 DIV DUP6 MUL DUP7 ADD DUP6 ADD SWAP1 SWAP7 MSTORE DUP6 DUP6 MSTORE PUSH2 0x11B SWAP6 DUP4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP6 CALLDATASIZE SWAP6 PUSH1 0x44 SWAP5 SWAP2 SWAP4 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x1CBC SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x650 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x29A PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x20D9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x67E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x176 PUSH1 0x4 CALLDATALOAD PUSH2 0x23CE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x696 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 DUP1 CALLDATALOAD DUP1 DUP3 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x29A SWAP5 CALLDATASIZE SWAP5 SWAP3 SWAP4 PUSH1 0x24 SWAP4 SWAP3 DUP5 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x2403 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6F8 PUSH2 0x24E3 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 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x734 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x71C JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x754 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 PUSH1 0x24 DUP1 CALLDATALOAD DUP3 DUP2 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP6 SWAP1 DIV DUP6 MUL DUP7 ADD DUP6 ADD SWAP1 SWAP7 MSTORE DUP6 DUP6 MSTORE PUSH2 0x11B SWAP6 DUP4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP6 CALLDATASIZE SWAP6 PUSH1 0x44 SWAP5 SWAP2 SWAP4 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x2553 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 DUP1 CALLDATALOAD DUP1 DUP3 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x29A SWAP5 CALLDATASIZE SWAP5 SWAP3 SWAP4 PUSH1 0x24 SWAP4 SWAP3 DUP5 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x271E SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x821 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 PUSH1 0x24 DUP1 CALLDATALOAD DUP3 DUP2 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP6 SWAP1 DIV DUP6 MUL DUP7 ADD DUP6 ADD SWAP1 SWAP7 MSTORE DUP6 DUP6 MSTORE PUSH2 0x11B SWAP6 DUP4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP6 CALLDATASIZE SWAP6 PUSH1 0x44 SWAP5 SWAP2 SWAP4 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x2779 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x895 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11B PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x2B95 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x8DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP5 SWAP2 AND ISZERO ISZERO PUSH2 0x911 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x4 DUP5 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x937 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x963 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0x993 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x4 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 DUP6 SWAP1 DUP2 LT PUSH2 0x9C6 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x4 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 PUSH2 0xA45 SWAP1 DUP3 PUSH2 0x2C19 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x3 DUP3 ADD SLOAD DUP6 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND SWAP6 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0xA0 DUP1 DUP3 MSTORE DUP4 DUP7 ADD DUP1 SLOAD PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP9 DUP3 AND ISZERO PUSH2 0x100 MUL SWAP9 SWAP1 SWAP9 ADD AND DUP8 SWAP1 DIV SWAP2 DUP4 ADD DUP3 SWAP1 MSTORE SWAP4 SWAP10 POP SWAP2 SWAP1 SWAP7 AND SWAP6 PUSH32 0x32C54F1E2EA75844DED7517E7DBCD3895DA7CD0C28F9AB9F9CF6ECF5F83762C6 SWAP6 SWAP3 SWAP5 DUP10 ADD SWAP4 PUSH1 0x4 DUP11 ADD SWAP3 PUSH1 0x5 DUP12 ADD SWAP3 SWAP2 DUP3 SWAP2 SWAP1 DUP3 ADD SWAP1 PUSH1 0x60 DUP4 ADD SWAP1 PUSH1 0x80 DUP5 ADD SWAP1 PUSH1 0xC0 DUP6 ADD SWAP1 DUP12 SWAP1 DUP1 ISZERO PUSH2 0xB65 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xB3A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xB65 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xB48 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP DUP6 DUP2 SUB DUP5 MSTORE DUP10 SLOAD PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP5 AND ISZERO MUL ADD SWAP1 SWAP2 AND DIV DUP1 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 DUP11 SWAP1 DUP1 ISZERO PUSH2 0xBF7 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xBCC JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xBF7 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xBDA JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP DUP6 DUP2 SUB DUP4 MSTORE DUP8 SLOAD PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP5 AND ISZERO MUL ADD SWAP1 SWAP2 AND DIV DUP1 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 DUP9 SWAP1 DUP1 ISZERO PUSH2 0xC89 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xC5E JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xC89 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xC6C JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP DUP6 DUP2 SUB DUP3 MSTORE DUP7 SLOAD PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP5 AND ISZERO MUL ADD SWAP1 SWAP2 AND DIV DUP1 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 DUP8 SWAP1 DUP1 ISZERO PUSH2 0xD1B JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xCF0 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xD1B JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xCFE JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP SWAP10 POP POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH1 0x2 DUP3 PUSH1 0x2 ADD PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV DUP1 ISZERO PUSH2 0xD91 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xD6F JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 DUP3 ADD SWAP2 PUSH2 0xD91 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xD7D JUMPI JUMPDEST POP POP SWAP2 POP POP SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 SSTORE PUSH1 0x3 DUP3 PUSH1 0x1 ADD PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV DUP1 ISZERO PUSH2 0xE28 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xE06 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 DUP3 ADD SWAP2 PUSH2 0xE28 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xE14 JUMPI JUMPDEST POP POP SWAP3 DUP4 MSTORE POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 SWAP3 DUP2 SWAP1 SUB DUP4 ADD SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 AND SWAP1 SWAP2 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 SWAP4 DUP5 SWAP1 MSTORE SWAP2 DUP3 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 AND DUP2 SSTORE SWAP2 PUSH2 0xE9F SWAP1 DUP4 ADD DUP3 PUSH2 0x2C42 JUMP JUMPDEST PUSH2 0xEAD PUSH1 0x2 DUP4 ADD PUSH1 0x0 PUSH2 0x2C42 JUMP JUMPDEST PUSH1 0x3 DUP3 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE PUSH2 0xEE5 PUSH1 0x4 DUP4 ADD PUSH1 0x0 PUSH2 0x2C42 JUMP JUMPDEST PUSH2 0xEF3 PUSH1 0x5 DUP4 ADD PUSH1 0x0 PUSH2 0x2C42 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x3 DUP3 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xF4D JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xF10 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP5 DUP6 MSTORE POP PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP1 SUB ADD SWAP1 SWAP3 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x2 DUP3 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x20 DUP4 LT PUSH2 0xF4D JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xF10 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x102B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP5 SWAP2 AND ISZERO ISZERO PUSH2 0x1060 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 DUP4 MLOAD DUP5 DUP2 MSTORE PUSH1 0x5 DUP3 ADD DUP1 SLOAD PUSH1 0x2 SWAP6 DUP2 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD AND SWAP5 SWAP1 SWAP5 DIV SWAP5 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 SWAP7 POP PUSH32 0xC3168FDC13112E44A031057DBF6C609B33353ADDB4D8037D24543E22CBFE2ACD SWAP4 DUP9 SWAP3 DUP3 SWAP2 SWAP1 DUP3 ADD SWAP1 PUSH1 0x60 DUP4 ADD SWAP1 DUP7 SWAP1 DUP1 ISZERO PUSH2 0x114C JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1121 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x114C JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x112F JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP DUP4 DUP2 SUB DUP3 MSTORE DUP5 MLOAD DUP2 MSTORE DUP5 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP7 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1180 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1168 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x11AD 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 SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 DUP3 MLOAD PUSH2 0x11D1 SWAP1 PUSH1 0x5 DUP5 ADD SWAP1 PUSH1 0x20 DUP7 ADD SWAP1 PUSH2 0x2C86 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP1 PUSH1 0x0 PUSH1 0x60 DUP1 PUSH2 0x11EA PUSH2 0x2D04 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 DUP4 MLOAD PUSH1 0xC0 DUP2 ADD DUP6 MSTORE DUP2 SLOAD SWAP1 SWAP6 AND DUP6 MSTORE DUP1 DUP4 ADD DUP1 SLOAD DUP6 MLOAD PUSH1 0x2 PUSH2 0x100 SWAP7 DUP4 AND ISZERO SWAP7 SWAP1 SWAP7 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP2 AND SWAP5 SWAP1 SWAP5 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE SWAP1 SWAP4 DUP6 DUP4 ADD SWAP4 SWAP3 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x12CB JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x12A0 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x12CB JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x12AE JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP SWAP2 DUP4 MSTORE POP POP PUSH1 0x2 DUP3 DUP2 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1 DUP5 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP4 AND SWAP5 SWAP1 SWAP5 DIV PUSH1 0x1F DUP2 ADD DUP4 SWAP1 DIV DUP4 MUL DUP6 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP1 DUP5 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x137B JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1350 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x137B JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x135E JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP SWAP2 DUP4 MSTORE POP POP PUSH1 0x3 DUP3 ADD SLOAD PUSH1 0xFF AND PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x4 DUP4 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 DUP7 AND ISZERO PUSH2 0x100 MUL ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV SWAP3 DUP4 ADD DUP6 SWAP1 DIV DUP6 MUL DUP2 ADD DUP6 ADD DUP3 MSTORE DUP3 DUP2 MSTORE SWAP5 ADD SWAP4 SWAP3 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x143A JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x140F JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x143A JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x141D JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP SWAP2 DUP4 MSTORE POP POP PUSH1 0x5 DUP3 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP4 DUP3 ADD SWAP4 SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x14EC JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x14C1 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x14EC JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x14CF JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP SWAP2 SWAP1 SWAP3 MSTORE POP POP DUP2 MLOAD PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0x60 DUP6 ADD MLOAD PUSH1 0x80 DUP7 ADD MLOAD PUSH1 0xA0 SWAP1 SWAP7 ADD MLOAD SWAP4 SWAP15 SWAP3 SWAP14 POP SWAP1 SWAP12 POP SWAP10 POP SWAP3 SWAP8 POP SWAP6 POP SWAP1 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x1568 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP8 SWAP2 AND ISZERO PUSH2 0x159C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO ISZERO PUSH2 0x15BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 DUP3 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1628 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x15EB JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP5 DUP6 MSTORE POP PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP1 SUB ADD SWAP1 SWAP3 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 SWAP1 SWAP3 EQ SWAP2 POP PUSH2 0x1699 SWAP1 POP JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x3 DUP3 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1702 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x16C5 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP5 DUP6 MSTORE POP PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP1 SUB ADD SWAP1 SWAP3 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 SWAP1 SWAP3 EQ SWAP2 POP PUSH2 0x1773 SWAP1 POP JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xC0 DUP2 ADD DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 DUP2 AND DUP1 DUP4 MSTORE PUSH1 0x20 DUP1 DUP5 ADD DUP15 DUP2 MSTORE DUP5 DUP7 ADD DUP15 SWAP1 MSTORE PUSH1 0xFF DUP14 AND PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x80 DUP6 ADD DUP13 SWAP1 MSTORE PUSH1 0xA0 DUP6 ADD DUP12 SWAP1 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x1 DUP1 DUP4 MSTORE SWAP6 SWAP1 SWAP3 KECCAK256 DUP5 MLOAD DUP2 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP5 AND SWAP4 SWAP1 SWAP4 OR DUP4 SSTORE SWAP1 MLOAD DUP1 MLOAD SWAP4 SWAP5 SWAP3 SWAP4 PUSH2 0x1812 SWAP4 DUP6 ADD SWAP3 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x2C86 JUMP JUMPDEST POP PUSH1 0x40 DUP3 ADD MLOAD DUP1 MLOAD PUSH2 0x182E SWAP2 PUSH1 0x2 DUP5 ADD SWAP2 PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x2C86 JUMP JUMPDEST POP PUSH1 0x60 DUP3 ADD MLOAD PUSH1 0x3 DUP3 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0xFF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x80 DUP3 ADD MLOAD DUP1 MLOAD PUSH2 0x1882 SWAP2 PUSH1 0x4 DUP5 ADD SWAP2 PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x2C86 JUMP JUMPDEST POP PUSH1 0xA0 DUP3 ADD MLOAD DUP1 MLOAD PUSH2 0x189E SWAP2 PUSH1 0x5 DUP5 ADD SWAP2 PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x2C86 JUMP JUMPDEST POP POP PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 DUP2 ADD DUP3 SSTORE PUSH1 0x0 SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP14 AND OR SWAP1 SSTORE POP PUSH1 0x40 MLOAD DUP9 MLOAD DUP12 SWAP2 PUSH1 0x2 SWAP2 DUP12 SWAP2 SWAP1 DUP2 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1966 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1929 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP5 DUP6 MSTORE POP PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP1 SUB DUP2 ADD DUP5 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP7 SWAP1 SWAP7 AND SWAP6 SWAP1 SWAP6 OR SWAP1 SWAP5 SSTORE POP POP DUP11 MLOAD DUP13 SWAP3 PUSH1 0x3 SWAP3 DUP14 SWAP3 SWAP1 SWAP2 DUP3 SWAP2 SWAP1 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1A47 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1A0A JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP5 DUP6 MSTORE POP PUSH1 0x40 DUP1 MLOAD SWAP5 DUP6 SWAP1 SUB DUP3 ADD DUP6 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP8 DUP9 AND OR SWAP1 SSTORE PUSH1 0xFF DUP14 AND SWAP1 DUP6 ADD MSTORE PUSH1 0xA0 DUP1 DUP6 MSTORE DUP15 MLOAD SWAP1 DUP6 ADD MSTORE DUP14 MLOAD SWAP5 DUP16 AND SWAP5 PUSH32 0xD8D928B0B50CA11D9DC273236B46F3526515B03602F71F3A6AF4F45BD9FA9144 SWAP5 DUP16 SWAP5 POP DUP15 SWAP4 POP DUP14 SWAP3 DUP14 SWAP3 DUP14 SWAP3 SWAP2 DUP3 SWAP2 DUP3 DUP3 ADD SWAP2 PUSH1 0x60 DUP5 ADD SWAP2 PUSH1 0x80 DUP6 ADD SWAP2 PUSH1 0xC0 DUP7 ADD SWAP2 SWAP1 DUP13 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1B4F JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1B37 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1B7C 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 DUP6 DUP2 SUB DUP5 MSTORE DUP10 MLOAD DUP2 MSTORE DUP10 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP12 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1BAF JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1B97 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1BDC 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 DUP6 DUP2 SUB DUP4 MSTORE DUP8 MLOAD DUP2 MSTORE DUP8 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP10 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1C0F JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1BF7 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1C3C 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 DUP6 DUP2 SUB DUP3 MSTORE DUP7 MLOAD DUP2 MSTORE DUP7 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP9 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1C6F JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1C57 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1C9C 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 SWAP10 POP POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x1CE1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP5 SWAP2 AND ISZERO ISZERO PUSH2 0x1D16 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x3 DUP3 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1D7F JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1D42 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP5 DUP6 MSTORE POP PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP1 SUB ADD SWAP1 SWAP3 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 SWAP1 SWAP3 EQ SWAP2 POP PUSH2 0x1DF0 SWAP1 POP JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 DUP4 MLOAD DUP5 DUP2 MSTORE DUP2 DUP5 ADD DUP1 SLOAD PUSH1 0x2 SWAP6 DUP2 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD AND SWAP5 SWAP1 SWAP5 DIV SWAP5 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 SWAP8 POP PUSH32 0x4A6DBFC867B179991DEC22FF19960F0A94D8D9D891FC556F547764670340E8AE SWAP4 DUP10 SWAP3 DUP3 SWAP2 SWAP1 DUP3 ADD SWAP1 PUSH1 0x60 DUP4 ADD SWAP1 DUP7 SWAP1 DUP1 ISZERO PUSH2 0x1EDB JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1EB0 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1EDB JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1EBE JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP DUP4 DUP2 SUB DUP3 MSTORE DUP5 MLOAD DUP2 MSTORE DUP5 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP7 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1F0F JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1EF7 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1F3C 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 SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH1 0x3 DUP4 PUSH1 0x1 ADD PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV DUP1 ISZERO PUSH2 0x1FAC JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1F8A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 DUP3 ADD SWAP2 PUSH2 0x1FAC JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1F98 JUMPI JUMPDEST POP POP SWAP3 DUP4 MSTORE POP POP PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 SWAP1 DUP2 ADD DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE DUP6 MLOAD DUP8 SWAP3 PUSH1 0x3 SWAP3 DUP9 SWAP3 DUP3 SWAP2 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x2036 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1FF9 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP5 DUP6 MSTORE POP PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP1 SUB DUP2 ADD SWAP1 SWAP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 OR SWAP1 SWAP4 SSTORE POP DUP6 MLOAD PUSH2 0xEF3 SWAP3 POP PUSH1 0x1 DUP7 ADD SWAP2 DUP8 ADD SWAP1 PUSH2 0x2C86 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 DUP1 SLOAD DUP2 DUP5 ADD DUP1 SLOAD DUP7 MLOAD PUSH1 0x2 PUSH2 0x100 SWAP8 DUP4 AND ISZERO SWAP8 SWAP1 SWAP8 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP2 AND SWAP6 SWAP1 SWAP6 DIV PUSH1 0x1F DUP2 ADD DUP6 SWAP1 DIV DUP6 MUL DUP7 ADD DUP6 ADD SWAP1 SWAP7 MSTORE DUP6 DUP6 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP5 SWAP2 SWAP4 SWAP3 SWAP1 SWAP2 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x21AD JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2182 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x21AD JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x2190 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP PUSH1 0x2 DUP1 DUP6 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP8 AND ISZERO MUL ADD SWAP1 SWAP5 AND SWAP6 SWAP1 SWAP6 DIV SWAP3 DUP4 ADD DUP6 SWAP1 DIV DUP6 MUL DUP2 ADD DUP6 ADD SWAP1 SWAP2 MSTORE DUP2 DUP2 MSTORE SWAP6 SWAP7 SWAP6 SWAP5 POP SWAP1 SWAP3 POP SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x225D JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2232 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x225D JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x2240 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP PUSH1 0x3 DUP4 ADD SLOAD PUSH1 0x4 DUP5 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH2 0x100 PUSH1 0x1 DUP7 AND ISZERO MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP6 SWAP7 PUSH1 0xFF SWAP1 SWAP5 AND SWAP6 SWAP4 SWAP5 POP SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x2316 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x22EB JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x2316 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x22F9 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP PUSH1 0x5 DUP4 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP5 SWAP6 SWAP5 SWAP4 POP SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x23C4 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2399 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x23C4 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x23A7 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP DUP7 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD DUP3 SWAP1 DUP2 LT PUSH2 0x23DC JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP1 PUSH1 0x0 PUSH1 0x60 DUP1 PUSH1 0x0 PUSH1 0x3 DUP9 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x245F JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x2422 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP5 DUP6 MSTORE POP PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP1 SUB ADD SWAP1 SWAP3 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 POP PUSH2 0x24CE SWAP2 POP DUP3 SWAP1 POP PUSH2 0x11D8 JUMP JUMPDEST SWAP5 SWAP14 SWAP4 SWAP13 POP SWAP2 SWAP11 POP SWAP9 POP SWAP7 POP SWAP1 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x2548 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x251D JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x2578 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP5 SWAP2 AND ISZERO ISZERO PUSH2 0x25AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 DUP4 MLOAD DUP5 DUP2 MSTORE PUSH1 0x4 DUP3 ADD DUP1 SLOAD PUSH1 0x2 SWAP6 DUP2 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD AND SWAP5 SWAP1 SWAP5 DIV SWAP5 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 SWAP7 POP PUSH32 0x5B19F79AC4E8CFA820815502E11615F1A449E28155DC289EC5CAC1A11F908694 SWAP4 DUP9 SWAP3 DUP3 SWAP2 SWAP1 DUP3 ADD SWAP1 PUSH1 0x60 DUP4 ADD SWAP1 DUP7 SWAP1 DUP1 ISZERO PUSH2 0x2699 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x266E JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x2699 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x267C JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP DUP4 DUP2 SUB DUP3 MSTORE DUP5 MLOAD DUP2 MSTORE DUP5 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP7 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x26CD JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x26B5 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x26FA 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 SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 DUP3 MLOAD PUSH2 0x11D1 SWAP1 PUSH1 0x4 DUP5 ADD SWAP1 PUSH1 0x20 DUP7 ADD SWAP1 PUSH2 0x2C86 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP1 PUSH1 0x0 PUSH1 0x60 DUP1 PUSH1 0x0 PUSH1 0x2 DUP9 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x20 DUP4 LT PUSH2 0x245F JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x2422 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x279E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP5 SWAP2 AND ISZERO ISZERO PUSH2 0x27D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 DUP3 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x283C JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x27FF JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP5 DUP6 MSTORE POP PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP1 SUB ADD SWAP1 SWAP3 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 SWAP1 SWAP3 EQ SWAP2 POP PUSH2 0x28AD SWAP1 POP JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 DUP4 MLOAD DUP5 DUP2 MSTORE PUSH1 0x2 DUP1 DUP4 ADD DUP1 SLOAD SWAP6 DUP7 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP6 AND DIV SWAP5 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 SWAP8 POP PUSH32 0x53D878A6530E56C9BC96548FA0A8CAE4F1D1F49C86B0E934C086B992EBB6998F SWAP4 DUP10 SWAP3 DUP3 SWAP2 SWAP1 DUP3 ADD SWAP1 PUSH1 0x60 DUP4 ADD SWAP1 DUP7 SWAP1 DUP1 ISZERO PUSH2 0x2997 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x296C JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x2997 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x297A JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP DUP4 DUP2 SUB DUP3 MSTORE DUP5 MLOAD DUP2 MSTORE DUP5 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP7 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x29CB JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x29B3 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x29F8 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 SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH1 0x2 DUP4 PUSH1 0x2 ADD PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV DUP1 ISZERO PUSH2 0x2A68 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2A46 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 DUP3 ADD SWAP2 PUSH2 0x2A68 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x2A54 JUMPI JUMPDEST POP POP SWAP3 DUP4 MSTORE POP POP PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 SWAP1 DUP2 ADD DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE DUP6 MLOAD DUP8 SWAP3 PUSH1 0x2 SWAP3 DUP9 SWAP3 DUP3 SWAP2 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x2AF2 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x2AB5 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP5 DUP6 MSTORE POP PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP1 SUB DUP2 ADD SWAP1 SWAP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 OR SWAP1 SWAP4 SSTORE POP DUP6 MLOAD PUSH2 0xEF3 SWAP3 POP PUSH1 0x2 DUP7 ADD SWAP2 DUP8 ADD SWAP1 PUSH2 0x2C86 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x2BB9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0x2C16 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND OR SWAP1 SSTORE JUMPDEST POP JUMP JUMPDEST DUP2 SLOAD DUP2 DUP4 SSTORE DUP2 DUP2 GT ISZERO PUSH2 0x2C3D JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 PUSH2 0x2C3D SWAP2 DUP2 ADD SWAP1 DUP4 ADD PUSH2 0x2D54 JUMP JUMPDEST POP POP POP JUMP JUMPDEST POP DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV PUSH1 0x0 DUP3 SSTORE DUP1 PUSH1 0x1F LT PUSH2 0x2C68 JUMPI POP PUSH2 0x2C16 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP1 PUSH2 0x2C16 SWAP2 SWAP1 PUSH2 0x2D54 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0x2CC7 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x2CF4 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x2CF4 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x2CF4 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x2CD9 JUMP JUMPDEST POP PUSH2 0x2D00 SWAP3 SWAP2 POP PUSH2 0x2D54 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0xC0 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x2550 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x2D00 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x2D5A JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 DUP5 0xe9 GAS EXP 0x2a 0x2f PUSH12 0x98236222635755A082C937F6 PUSH12 0x7DD9529673A6C9FE221F8EB0 STOP 0x29 ",
+ "object": "0x608060405260008054600160a060020a03191633179055612d9a806100256000396000f3006080604052600436106100e55763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166313baf1e681146100ea5780632fbfeba91461011d5780633550b6d91461019f57806356318820146101f85780637abccac91461026c5780638da5cb5b14610484578063a880319d14610499578063c370c86d146105d0578063e486033914610644578063e5df8b8414610672578063e73fc0c31461068a578063ee8c24b8146106e3578063eef05f6514610748578063efa74f1f146107bc578063f036417f14610815578063f2fde38b14610889575b600080fd5b3480156100f657600080fd5b5061011b73ffffffffffffffffffffffffffffffffffffffff600435166024356108b7565b005b34801561012957600080fd5b506040805160206004803580820135601f8101849004840285018401909552848452610176943694929360249392840191908190840183828082843750949750610efb9650505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156101ab57600080fd5b506040805160206004803580820135601f8101849004840285018401909552848452610176943694929360249392840191908190840183828082843750949750610fb59650505050505050565b34801561020457600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261011b95833573ffffffffffffffffffffffffffffffffffffffff169536956044949193909101919081908401838280828437509497506110069650505050505050565b34801561027857600080fd5b5061029a73ffffffffffffffffffffffffffffffffffffffff600435166111d8565b604051808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001806020018660ff1660ff168152602001806020018060200185810385528a818151815260200191508051906020019080838360005b83811015610321578181015183820152602001610309565b50505050905090810190601f16801561034e5780820380516001836020036101000a031916815260200191505b5085810384528951815289516020918201918b019080838360005b83811015610381578181015183820152602001610369565b50505050905090810190601f1680156103ae5780820380516001836020036101000a031916815260200191505b50858103835287518152875160209182019189019080838360005b838110156103e15781810151838201526020016103c9565b50505050905090810190601f16801561040e5780820380516001836020036101000a031916815260200191505b50858103825286518152865160209182019188019080838360005b83811015610441578181015183820152602001610429565b50505050905090810190601f16801561046e5780820380516001836020036101000a031916815260200191505b509a505050505050505050505060405180910390f35b34801561049057600080fd5b50610176611528565b3480156104a557600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261011b95833573ffffffffffffffffffffffffffffffffffffffff1695369560449491939091019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375050604080516020601f818a01358b0180359182018390048302840183018552818452989b60ff8b35169b909a90999401975091955091820193509150819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a9998810197919650918201945092508291508401838280828437509497506115449650505050505050565b3480156105dc57600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261011b95833573ffffffffffffffffffffffffffffffffffffffff16953695604494919390910191908190840183828082843750949750611cbc9650505050505050565b34801561065057600080fd5b5061029a73ffffffffffffffffffffffffffffffffffffffff600435166120d9565b34801561067e57600080fd5b506101766004356123ce565b34801561069657600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261029a9436949293602493928401919081908401838280828437509497506124039650505050505050565b3480156106ef57600080fd5b506106f86124e3565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561073457818101518382015260200161071c565b505050509050019250505060405180910390f35b34801561075457600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261011b95833573ffffffffffffffffffffffffffffffffffffffff169536956044949193909101919081908401838280828437509497506125539650505050505050565b3480156107c857600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261029a94369492936024939284019190819084018382808284375094975061271e9650505050505050565b34801561082157600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261011b95833573ffffffffffffffffffffffffffffffffffffffff169536956044949193909101919081908401838280828437509497506127799650505050505050565b34801561089557600080fd5b5061011b73ffffffffffffffffffffffffffffffffffffffff60043516612b95565b6000805473ffffffffffffffffffffffffffffffffffffffff1633146108dc57600080fd5b73ffffffffffffffffffffffffffffffffffffffff808416600090815260016020526040902054849116151561091157600080fd5b8373ffffffffffffffffffffffffffffffffffffffff1660048481548110151561093757fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff161461096357600080fd5b600480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061099357fe5b6000918252602090912001546004805473ffffffffffffffffffffffffffffffffffffffff90921691859081106109c657fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190610a459082612c19565b5073ffffffffffffffffffffffffffffffffffffffff80851660009081526001602081815260409283902080546003820154855160ff90911695810186905260a0808252838601805460027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9882161561010002989098011687900491830182905293995091909616957f32c54f1e2ea75844ded7517e7dbcd3895da7cd0c28f9ab9f9cf6ecf5f83762c695929489019360048a019260058b0192918291908201906060830190608084019060c08501908b908015610b655780601f10610b3a57610100808354040283529160200191610b65565b820191906000526020600020905b815481529060010190602001808311610b4857829003601f168201915b50508581038452895460027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010060018416150201909116048082526020909101908a908015610bf75780601f10610bcc57610100808354040283529160200191610bf7565b820191906000526020600020905b815481529060010190602001808311610bda57829003601f168201915b50508581038352875460027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600184161502019091160480825260209091019088908015610c895780601f10610c5e57610100808354040283529160200191610c89565b820191906000526020600020905b815481529060010190602001808311610c6c57829003601f168201915b50508581038252865460027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600184161502019091160480825260209091019087908015610d1b5780601f10610cf057610100808354040283529160200191610d1b565b820191906000526020600020905b815481529060010190602001808311610cfe57829003601f168201915b5050995050505050505050505060405180910390a26002826002016040518082805460018160011615610100020316600290048015610d915780601f10610d6f576101008083540402835291820191610d91565b820191906000526020600020905b815481529060010190602001808311610d7d575b5050915050908152602001604051809103902060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556003826001016040518082805460018160011615610100020316600290048015610e285780601f10610e06576101008083540402835291820191610e28565b820191906000526020600020905b815481529060010190602001808311610e14575b50509283525050604080516020928190038301902080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690915573ffffffffffffffffffffffffffffffffffffffff871660009081526001938490529182208054909116815591610e9f90830182612c42565b610ead600283016000612c42565b6003820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055610ee5600483016000612c42565b610ef3600583016000612c42565b505050505050565b60006003826040518082805190602001908083835b60208310610f4d57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610f10565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905292019485525060405193849003019092205473ffffffffffffffffffffffffffffffffffffffff16949350505050565b600060028260405180828051906020019080838360208310610f4d57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610f10565b6000805473ffffffffffffffffffffffffffffffffffffffff16331461102b57600080fd5b73ffffffffffffffffffffffffffffffffffffffff808416600090815260016020526040902054849116151561106057600080fd5b73ffffffffffffffffffffffffffffffffffffffff84166000818152600160208181526040928390208351848152600582018054600295811615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116949094049481018590529096507fc3168fdc13112e44a031057dbf6c609b33353addb4d8037d24543e22cbfe2acd93889282919082019060608301908690801561114c5780601f106111215761010080835404028352916020019161114c565b820191906000526020600020905b81548152906001019060200180831161112f57829003601f168201915b5050838103825284518152845160209182019186019080838360005b83811015611180578181015183820152602001611168565b50505050905090810190601f1680156111ad5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a282516111d19060058401906020860190612c86565b5050505050565b600060608060006060806111ea612d04565b73ffffffffffffffffffffffffffffffffffffffff888116600090815260016020818152604092839020835160c0810185528154909516855280830180548551600261010096831615969096027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190911694909404601f8101849004840285018401909552848452909385830193928301828280156112cb5780601f106112a0576101008083540402835291602001916112cb565b820191906000526020600020905b8154815290600101906020018083116112ae57829003601f168201915b5050509183525050600282810180546040805160206001841615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190931694909404601f8101839004830285018301909152808452938101939083018282801561137b5780601f106113505761010080835404028352916020019161137b565b820191906000526020600020905b81548152906001019060200180831161135e57829003601f168201915b5050509183525050600382015460ff1660208083019190915260048301805460408051601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600186161561010002019094169390930492830185900485028101850182528281529401939283018282801561143a5780601f1061140f5761010080835404028352916020019161143a565b820191906000526020600020905b81548152906001019060200180831161141d57829003601f168201915b505050918352505060058201805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f81018490048402820184019092528181529382019392918301828280156114ec5780601f106114c1576101008083540402835291602001916114ec565b820191906000526020600020905b8154815290600101906020018083116114cf57829003601f168201915b5050509190925250508151602083015160408401516060850151608086015160a090960151939e929d50909b5099509297509550909350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff16331461156857600080fd5b73ffffffffffffffffffffffffffffffffffffffff8087166000908152600160205260409020548791161561159c57600080fd5b8673ffffffffffffffffffffffffffffffffffffffff811615156115bf57600080fd5b85600073ffffffffffffffffffffffffffffffffffffffff166002826040518082805190602001908083835b6020831061162857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016115eb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905292019485525060405193849003019092205473ffffffffffffffffffffffffffffffffffffffff16929092149150611699905057600080fd5b87600073ffffffffffffffffffffffffffffffffffffffff166003826040518082805190602001908083835b6020831061170257805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016116c5565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905292019485525060405193849003019092205473ffffffffffffffffffffffffffffffffffffffff16929092149150611773905057600080fd5b6040805160c08101825273ffffffffffffffffffffffffffffffffffffffff8c811680835260208084018e81528486018e905260ff8d166060860152608085018c905260a085018b90526000928352600180835295909220845181547fffffffffffffffffffffffff00000000000000000000000000000000000000001694169390931783559051805193949293611812938501929190910190612c86565b506040820151805161182e916002840191602090910190612c86565b5060608201516003820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff90921691909117905560808201518051611882916004840191602090910190612c86565b5060a0820151805161189e916005840191602090910190612c86565b5050600480546001810182556000919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8d161790555060405188518b916002918b9190819060208401908083835b6020831061196657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611929565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199092169116179052920194855250604051938490038101842080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff969096169590951790945550508a518c926003928d9290918291908401908083835b60208310611a4757805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611a0a565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905292019485525060408051948590038201852080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff97881617905560ff8d169085015260a08085528e51908501528d51948f16947fd8d928b0b50ca11d9dc273236b46f3526515b03602f71f3a6af4f45bd9fa9144948f94508e93508d928d928d92918291828201916060840191608085019160c0860191908c019080838360005b83811015611b4f578181015183820152602001611b37565b50505050905090810190601f168015611b7c5780820380516001836020036101000a031916815260200191505b5085810384528951815289516020918201918b019080838360005b83811015611baf578181015183820152602001611b97565b50505050905090810190601f168015611bdc5780820380516001836020036101000a031916815260200191505b50858103835287518152875160209182019189019080838360005b83811015611c0f578181015183820152602001611bf7565b50505050905090810190601f168015611c3c5780820380516001836020036101000a031916815260200191505b50858103825286518152865160209182019188019080838360005b83811015611c6f578181015183820152602001611c57565b50505050905090810190601f168015611c9c5780820380516001836020036101000a031916815260200191505b50995050505050505050505060405180910390a250505050505050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff163314611ce157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8084166000908152600160205260409020548491161515611d1657600080fd5b82600073ffffffffffffffffffffffffffffffffffffffff166003826040518082805190602001908083835b60208310611d7f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611d42565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905292019485525060405193849003019092205473ffffffffffffffffffffffffffffffffffffffff16929092149150611df0905057600080fd5b73ffffffffffffffffffffffffffffffffffffffff851660008181526001602081815260409283902083518481528184018054600295811615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116949094049481018590529097507f4a6dbfc867b179991dec22ff19960f0a94d8d9d891fc556f547764670340e8ae938992829190820190606083019086908015611edb5780601f10611eb057610100808354040283529160200191611edb565b820191906000526020600020905b815481529060010190602001808311611ebe57829003601f168201915b5050838103825284518152845160209182019186019080838360005b83811015611f0f578181015183820152602001611ef7565b50505050905090810190601f168015611f3c5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a26003836001016040518082805460018160011615610100020316600290048015611fac5780601f10611f8a576101008083540402835291820191611fac565b820191906000526020600020905b815481529060010190602001808311611f98575b50509283525050604051908190036020908101822080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905585518792600392889282918401908083835b6020831061203657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611ff9565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905292019485525060405193849003810190932080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9590951694909417909355508551610ef392506001860191870190612c86565b600160208181526000928352604092839020805481840180548651600261010097831615979097027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190911695909504601f810185900485028601850190965285855273ffffffffffffffffffffffffffffffffffffffff909116949193929091908301828280156121ad5780601f10612182576101008083540402835291602001916121ad565b820191906000526020600020905b81548152906001019060200180831161219057829003601f168201915b50505060028085018054604080516020601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600187161502019094169590950492830185900485028101850190915281815295969594509092509083018282801561225d5780601f106122325761010080835404028352916020019161225d565b820191906000526020600020905b81548152906001019060200180831161224057829003601f168201915b50505050600383015460048401805460408051602060026101006001861615027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f8101849004840282018401909252818152959660ff90941695939450908301828280156123165780601f106122eb57610100808354040283529160200191612316565b820191906000526020600020905b8154815290600101906020018083116122f957829003601f168201915b5050505060058301805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f81018490048402820184019092528181529495949350908301828280156123c45780601f10612399576101008083540402835291602001916123c4565b820191906000526020600020905b8154815290600101906020018083116123a757829003601f168201915b5050505050905086565b60048054829081106123dc57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6000606080600060608060006003886040518082805190602001908083835b6020831061245f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612422565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905292019485525060405193849003019092205473ffffffffffffffffffffffffffffffffffffffff1692506124ce91508290506111d8565b949d939c50919a509850965090945092505050565b6060600480548060200260200160405190810160405280929190818152602001828054801561254857602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161251d575b505050505090505b90565b6000805473ffffffffffffffffffffffffffffffffffffffff16331461257857600080fd5b73ffffffffffffffffffffffffffffffffffffffff80841660009081526001602052604090205484911615156125ad57600080fd5b73ffffffffffffffffffffffffffffffffffffffff84166000818152600160208181526040928390208351848152600482018054600295811615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116949094049481018590529096507f5b19f79ac4e8cfa820815502e11615f1a449e28155dc289ec5cac1a11f9086949388928291908201906060830190869080156126995780601f1061266e57610100808354040283529160200191612699565b820191906000526020600020905b81548152906001019060200180831161267c57829003601f168201915b5050838103825284518152845160209182019186019080838360005b838110156126cd5781810151838201526020016126b5565b50505050905090810190601f1680156126fa5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a282516111d19060048401906020860190612c86565b6000606080600060608060006002886040518082805190602001908083836020831061245f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612422565b6000805473ffffffffffffffffffffffffffffffffffffffff16331461279e57600080fd5b73ffffffffffffffffffffffffffffffffffffffff80841660009081526001602052604090205484911615156127d357600080fd5b82600073ffffffffffffffffffffffffffffffffffffffff166002826040518082805190602001908083835b6020831061283c57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016127ff565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905292019485525060405193849003019092205473ffffffffffffffffffffffffffffffffffffffff169290921491506128ad905057600080fd5b73ffffffffffffffffffffffffffffffffffffffff851660008181526001602081815260409283902083518481526002808301805495861615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01909516049481018590529097507f53d878a6530e56c9bc96548fa0a8cae4f1d1f49c86b0e934c086b992ebb6998f9389928291908201906060830190869080156129975780601f1061296c57610100808354040283529160200191612997565b820191906000526020600020905b81548152906001019060200180831161297a57829003601f168201915b5050838103825284518152845160209182019186019080838360005b838110156129cb5781810151838201526020016129b3565b50505050905090810190601f1680156129f85780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a26002836002016040518082805460018160011615610100020316600290048015612a685780601f10612a46576101008083540402835291820191612a68565b820191906000526020600020905b815481529060010190602001808311612a54575b50509283525050604051908190036020908101822080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905585518792600292889282918401908083835b60208310612af257805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612ab5565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905292019485525060405193849003810190932080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9590951694909417909355508551610ef392506002860191870190612c86565b60005473ffffffffffffffffffffffffffffffffffffffff163314612bb957600080fd5b73ffffffffffffffffffffffffffffffffffffffff811615612c1657600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b815481835581811115612c3d57600083815260209020612c3d918101908301612d54565b505050565b50805460018160011615610100020316600290046000825580601f10612c685750612c16565b601f016020900490600052602060002090810190612c169190612d54565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612cc757805160ff1916838001178555612cf4565b82800160010185558215612cf4579182015b82811115612cf4578251825591602001919060010190612cd9565b50612d00929150612d54565b5090565b60c060405190810160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020016060815260200160608152602001600060ff16815260200160608152602001606081525090565b61255091905b80821115612d005760008155600101612d5a5600a165627a7a72305820a2b015e1c6a978406b24e8687202ced017fe0b041c7b9b9d741eb9bcb14a014e0029",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB NOT AND CALLER OR SWAP1 SSTORE PUSH2 0x2D9A DUP1 PUSH2 0x25 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xE5 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x13BAF1E6 DUP2 EQ PUSH2 0xEA JUMPI DUP1 PUSH4 0x2FBFEBA9 EQ PUSH2 0x11D JUMPI DUP1 PUSH4 0x3550B6D9 EQ PUSH2 0x19F JUMPI DUP1 PUSH4 0x56318820 EQ PUSH2 0x1F8 JUMPI DUP1 PUSH4 0x7ABCCAC9 EQ PUSH2 0x26C JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x484 JUMPI DUP1 PUSH4 0xA880319D EQ PUSH2 0x499 JUMPI DUP1 PUSH4 0xC370C86D EQ PUSH2 0x5D0 JUMPI DUP1 PUSH4 0xE4860339 EQ PUSH2 0x644 JUMPI DUP1 PUSH4 0xE5DF8B84 EQ PUSH2 0x672 JUMPI DUP1 PUSH4 0xE73FC0C3 EQ PUSH2 0x68A JUMPI DUP1 PUSH4 0xEE8C24B8 EQ PUSH2 0x6E3 JUMPI DUP1 PUSH4 0xEEF05F65 EQ PUSH2 0x748 JUMPI DUP1 PUSH4 0xEFA74F1F EQ PUSH2 0x7BC JUMPI DUP1 PUSH4 0xF036417F EQ PUSH2 0x815 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x889 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11B PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD PUSH2 0x8B7 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x129 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 DUP1 CALLDATALOAD DUP1 DUP3 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x176 SWAP5 CALLDATASIZE SWAP5 SWAP3 SWAP4 PUSH1 0x24 SWAP4 SWAP3 DUP5 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0xEFB SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 DUP1 CALLDATALOAD DUP1 DUP3 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x176 SWAP5 CALLDATASIZE SWAP5 SWAP3 SWAP4 PUSH1 0x24 SWAP4 SWAP3 DUP5 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0xFB5 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x204 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 PUSH1 0x24 DUP1 CALLDATALOAD DUP3 DUP2 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP6 SWAP1 DIV DUP6 MUL DUP7 ADD DUP6 ADD SWAP1 SWAP7 MSTORE DUP6 DUP6 MSTORE PUSH2 0x11B SWAP6 DUP4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP6 CALLDATASIZE SWAP6 PUSH1 0x44 SWAP5 SWAP2 SWAP4 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x1006 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x278 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x29A PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x11D8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP7 PUSH1 0xFF AND PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP6 DUP2 SUB DUP6 MSTORE DUP11 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x321 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x309 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x34E 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 DUP6 DUP2 SUB DUP5 MSTORE DUP10 MLOAD DUP2 MSTORE DUP10 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP12 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x381 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x369 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x3AE 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 DUP6 DUP2 SUB DUP4 MSTORE DUP8 MLOAD DUP2 MSTORE DUP8 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP10 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3E1 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3C9 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x40E 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 DUP6 DUP2 SUB DUP3 MSTORE DUP7 MLOAD DUP2 MSTORE DUP7 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP9 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x441 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x429 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x46E 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 SWAP11 POP POP POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x490 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x176 PUSH2 0x1528 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 PUSH1 0x24 DUP1 CALLDATALOAD DUP3 DUP2 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP6 SWAP1 DIV DUP6 MUL DUP7 ADD DUP6 ADD SWAP1 SWAP7 MSTORE DUP6 DUP6 MSTORE PUSH2 0x11B SWAP6 DUP4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP6 CALLDATASIZE SWAP6 PUSH1 0x44 SWAP5 SWAP2 SWAP4 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F DUP10 CALLDATALOAD DUP12 ADD DUP1 CALLDATALOAD SWAP2 DUP3 ADD DUP4 SWAP1 DIV DUP4 MUL DUP5 ADD DUP4 ADD SWAP1 SWAP5 MSTORE DUP1 DUP4 MSTORE SWAP8 SWAP11 SWAP10 SWAP9 DUP2 ADD SWAP8 SWAP2 SWAP7 POP SWAP2 DUP3 ADD SWAP5 POP SWAP3 POP DUP3 SWAP2 POP DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F DUP2 DUP11 ADD CALLDATALOAD DUP12 ADD DUP1 CALLDATALOAD SWAP2 DUP3 ADD DUP4 SWAP1 DIV DUP4 MUL DUP5 ADD DUP4 ADD DUP6 MSTORE DUP2 DUP5 MSTORE SWAP9 SWAP12 PUSH1 0xFF DUP12 CALLDATALOAD AND SWAP12 SWAP1 SWAP11 SWAP1 SWAP10 SWAP5 ADD SWAP8 POP SWAP2 SWAP6 POP SWAP2 DUP3 ADD SWAP4 POP SWAP2 POP DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F DUP10 CALLDATALOAD DUP12 ADD DUP1 CALLDATALOAD SWAP2 DUP3 ADD DUP4 SWAP1 DIV DUP4 MUL DUP5 ADD DUP4 ADD SWAP1 SWAP5 MSTORE DUP1 DUP4 MSTORE SWAP8 SWAP11 SWAP10 SWAP9 DUP2 ADD SWAP8 SWAP2 SWAP7 POP SWAP2 DUP3 ADD SWAP5 POP SWAP3 POP DUP3 SWAP2 POP DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x1544 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 PUSH1 0x24 DUP1 CALLDATALOAD DUP3 DUP2 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP6 SWAP1 DIV DUP6 MUL DUP7 ADD DUP6 ADD SWAP1 SWAP7 MSTORE DUP6 DUP6 MSTORE PUSH2 0x11B SWAP6 DUP4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP6 CALLDATASIZE SWAP6 PUSH1 0x44 SWAP5 SWAP2 SWAP4 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x1CBC SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x650 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x29A PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x20D9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x67E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x176 PUSH1 0x4 CALLDATALOAD PUSH2 0x23CE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x696 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 DUP1 CALLDATALOAD DUP1 DUP3 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x29A SWAP5 CALLDATASIZE SWAP5 SWAP3 SWAP4 PUSH1 0x24 SWAP4 SWAP3 DUP5 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x2403 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6F8 PUSH2 0x24E3 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 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x734 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x71C JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x754 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 PUSH1 0x24 DUP1 CALLDATALOAD DUP3 DUP2 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP6 SWAP1 DIV DUP6 MUL DUP7 ADD DUP6 ADD SWAP1 SWAP7 MSTORE DUP6 DUP6 MSTORE PUSH2 0x11B SWAP6 DUP4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP6 CALLDATASIZE SWAP6 PUSH1 0x44 SWAP5 SWAP2 SWAP4 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x2553 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 DUP1 CALLDATALOAD DUP1 DUP3 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x29A SWAP5 CALLDATASIZE SWAP5 SWAP3 SWAP4 PUSH1 0x24 SWAP4 SWAP3 DUP5 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x271E SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x821 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 PUSH1 0x24 DUP1 CALLDATALOAD DUP3 DUP2 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP6 SWAP1 DIV DUP6 MUL DUP7 ADD DUP6 ADD SWAP1 SWAP7 MSTORE DUP6 DUP6 MSTORE PUSH2 0x11B SWAP6 DUP4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP6 CALLDATASIZE SWAP6 PUSH1 0x44 SWAP5 SWAP2 SWAP4 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x2779 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x895 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11B PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x2B95 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x8DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP5 SWAP2 AND ISZERO ISZERO PUSH2 0x911 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x4 DUP5 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x937 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x963 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0x993 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x4 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 DUP6 SWAP1 DUP2 LT PUSH2 0x9C6 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x4 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 PUSH2 0xA45 SWAP1 DUP3 PUSH2 0x2C19 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x3 DUP3 ADD SLOAD DUP6 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND SWAP6 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0xA0 DUP1 DUP3 MSTORE DUP4 DUP7 ADD DUP1 SLOAD PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP9 DUP3 AND ISZERO PUSH2 0x100 MUL SWAP9 SWAP1 SWAP9 ADD AND DUP8 SWAP1 DIV SWAP2 DUP4 ADD DUP3 SWAP1 MSTORE SWAP4 SWAP10 POP SWAP2 SWAP1 SWAP7 AND SWAP6 PUSH32 0x32C54F1E2EA75844DED7517E7DBCD3895DA7CD0C28F9AB9F9CF6ECF5F83762C6 SWAP6 SWAP3 SWAP5 DUP10 ADD SWAP4 PUSH1 0x4 DUP11 ADD SWAP3 PUSH1 0x5 DUP12 ADD SWAP3 SWAP2 DUP3 SWAP2 SWAP1 DUP3 ADD SWAP1 PUSH1 0x60 DUP4 ADD SWAP1 PUSH1 0x80 DUP5 ADD SWAP1 PUSH1 0xC0 DUP6 ADD SWAP1 DUP12 SWAP1 DUP1 ISZERO PUSH2 0xB65 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xB3A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xB65 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xB48 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP DUP6 DUP2 SUB DUP5 MSTORE DUP10 SLOAD PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP5 AND ISZERO MUL ADD SWAP1 SWAP2 AND DIV DUP1 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 DUP11 SWAP1 DUP1 ISZERO PUSH2 0xBF7 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xBCC JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xBF7 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xBDA JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP DUP6 DUP2 SUB DUP4 MSTORE DUP8 SLOAD PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP5 AND ISZERO MUL ADD SWAP1 SWAP2 AND DIV DUP1 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 DUP9 SWAP1 DUP1 ISZERO PUSH2 0xC89 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xC5E JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xC89 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xC6C JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP DUP6 DUP2 SUB DUP3 MSTORE DUP7 SLOAD PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP5 AND ISZERO MUL ADD SWAP1 SWAP2 AND DIV DUP1 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 DUP8 SWAP1 DUP1 ISZERO PUSH2 0xD1B JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xCF0 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xD1B JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xCFE JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP SWAP10 POP POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH1 0x2 DUP3 PUSH1 0x2 ADD PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV DUP1 ISZERO PUSH2 0xD91 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xD6F JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 DUP3 ADD SWAP2 PUSH2 0xD91 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xD7D JUMPI JUMPDEST POP POP SWAP2 POP POP SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 SSTORE PUSH1 0x3 DUP3 PUSH1 0x1 ADD PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV DUP1 ISZERO PUSH2 0xE28 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xE06 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 DUP3 ADD SWAP2 PUSH2 0xE28 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xE14 JUMPI JUMPDEST POP POP SWAP3 DUP4 MSTORE POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 SWAP3 DUP2 SWAP1 SUB DUP4 ADD SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 AND SWAP1 SWAP2 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 SWAP4 DUP5 SWAP1 MSTORE SWAP2 DUP3 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 AND DUP2 SSTORE SWAP2 PUSH2 0xE9F SWAP1 DUP4 ADD DUP3 PUSH2 0x2C42 JUMP JUMPDEST PUSH2 0xEAD PUSH1 0x2 DUP4 ADD PUSH1 0x0 PUSH2 0x2C42 JUMP JUMPDEST PUSH1 0x3 DUP3 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE PUSH2 0xEE5 PUSH1 0x4 DUP4 ADD PUSH1 0x0 PUSH2 0x2C42 JUMP JUMPDEST PUSH2 0xEF3 PUSH1 0x5 DUP4 ADD PUSH1 0x0 PUSH2 0x2C42 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x3 DUP3 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xF4D JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xF10 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP5 DUP6 MSTORE POP PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP1 SUB ADD SWAP1 SWAP3 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x2 DUP3 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x20 DUP4 LT PUSH2 0xF4D JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xF10 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x102B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP5 SWAP2 AND ISZERO ISZERO PUSH2 0x1060 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 DUP4 MLOAD DUP5 DUP2 MSTORE PUSH1 0x5 DUP3 ADD DUP1 SLOAD PUSH1 0x2 SWAP6 DUP2 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD AND SWAP5 SWAP1 SWAP5 DIV SWAP5 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 SWAP7 POP PUSH32 0xC3168FDC13112E44A031057DBF6C609B33353ADDB4D8037D24543E22CBFE2ACD SWAP4 DUP9 SWAP3 DUP3 SWAP2 SWAP1 DUP3 ADD SWAP1 PUSH1 0x60 DUP4 ADD SWAP1 DUP7 SWAP1 DUP1 ISZERO PUSH2 0x114C JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1121 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x114C JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x112F JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP DUP4 DUP2 SUB DUP3 MSTORE DUP5 MLOAD DUP2 MSTORE DUP5 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP7 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1180 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1168 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x11AD 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 SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 DUP3 MLOAD PUSH2 0x11D1 SWAP1 PUSH1 0x5 DUP5 ADD SWAP1 PUSH1 0x20 DUP7 ADD SWAP1 PUSH2 0x2C86 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP1 PUSH1 0x0 PUSH1 0x60 DUP1 PUSH2 0x11EA PUSH2 0x2D04 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 DUP4 MLOAD PUSH1 0xC0 DUP2 ADD DUP6 MSTORE DUP2 SLOAD SWAP1 SWAP6 AND DUP6 MSTORE DUP1 DUP4 ADD DUP1 SLOAD DUP6 MLOAD PUSH1 0x2 PUSH2 0x100 SWAP7 DUP4 AND ISZERO SWAP7 SWAP1 SWAP7 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP2 AND SWAP5 SWAP1 SWAP5 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE SWAP1 SWAP4 DUP6 DUP4 ADD SWAP4 SWAP3 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x12CB JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x12A0 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x12CB JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x12AE JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP SWAP2 DUP4 MSTORE POP POP PUSH1 0x2 DUP3 DUP2 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1 DUP5 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP4 AND SWAP5 SWAP1 SWAP5 DIV PUSH1 0x1F DUP2 ADD DUP4 SWAP1 DIV DUP4 MUL DUP6 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP1 DUP5 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x137B JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1350 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x137B JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x135E JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP SWAP2 DUP4 MSTORE POP POP PUSH1 0x3 DUP3 ADD SLOAD PUSH1 0xFF AND PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x4 DUP4 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 DUP7 AND ISZERO PUSH2 0x100 MUL ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV SWAP3 DUP4 ADD DUP6 SWAP1 DIV DUP6 MUL DUP2 ADD DUP6 ADD DUP3 MSTORE DUP3 DUP2 MSTORE SWAP5 ADD SWAP4 SWAP3 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x143A JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x140F JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x143A JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x141D JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP SWAP2 DUP4 MSTORE POP POP PUSH1 0x5 DUP3 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP4 DUP3 ADD SWAP4 SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x14EC JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x14C1 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x14EC JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x14CF JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP SWAP2 SWAP1 SWAP3 MSTORE POP POP DUP2 MLOAD PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0x60 DUP6 ADD MLOAD PUSH1 0x80 DUP7 ADD MLOAD PUSH1 0xA0 SWAP1 SWAP7 ADD MLOAD SWAP4 SWAP15 SWAP3 SWAP14 POP SWAP1 SWAP12 POP SWAP10 POP SWAP3 SWAP8 POP SWAP6 POP SWAP1 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x1568 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP8 SWAP2 AND ISZERO PUSH2 0x159C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO ISZERO PUSH2 0x15BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 DUP3 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1628 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x15EB JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP5 DUP6 MSTORE POP PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP1 SUB ADD SWAP1 SWAP3 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 SWAP1 SWAP3 EQ SWAP2 POP PUSH2 0x1699 SWAP1 POP JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x3 DUP3 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1702 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x16C5 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP5 DUP6 MSTORE POP PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP1 SUB ADD SWAP1 SWAP3 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 SWAP1 SWAP3 EQ SWAP2 POP PUSH2 0x1773 SWAP1 POP JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xC0 DUP2 ADD DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 DUP2 AND DUP1 DUP4 MSTORE PUSH1 0x20 DUP1 DUP5 ADD DUP15 DUP2 MSTORE DUP5 DUP7 ADD DUP15 SWAP1 MSTORE PUSH1 0xFF DUP14 AND PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x80 DUP6 ADD DUP13 SWAP1 MSTORE PUSH1 0xA0 DUP6 ADD DUP12 SWAP1 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x1 DUP1 DUP4 MSTORE SWAP6 SWAP1 SWAP3 KECCAK256 DUP5 MLOAD DUP2 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP5 AND SWAP4 SWAP1 SWAP4 OR DUP4 SSTORE SWAP1 MLOAD DUP1 MLOAD SWAP4 SWAP5 SWAP3 SWAP4 PUSH2 0x1812 SWAP4 DUP6 ADD SWAP3 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x2C86 JUMP JUMPDEST POP PUSH1 0x40 DUP3 ADD MLOAD DUP1 MLOAD PUSH2 0x182E SWAP2 PUSH1 0x2 DUP5 ADD SWAP2 PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x2C86 JUMP JUMPDEST POP PUSH1 0x60 DUP3 ADD MLOAD PUSH1 0x3 DUP3 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0xFF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x80 DUP3 ADD MLOAD DUP1 MLOAD PUSH2 0x1882 SWAP2 PUSH1 0x4 DUP5 ADD SWAP2 PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x2C86 JUMP JUMPDEST POP PUSH1 0xA0 DUP3 ADD MLOAD DUP1 MLOAD PUSH2 0x189E SWAP2 PUSH1 0x5 DUP5 ADD SWAP2 PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x2C86 JUMP JUMPDEST POP POP PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 DUP2 ADD DUP3 SSTORE PUSH1 0x0 SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP14 AND OR SWAP1 SSTORE POP PUSH1 0x40 MLOAD DUP9 MLOAD DUP12 SWAP2 PUSH1 0x2 SWAP2 DUP12 SWAP2 SWAP1 DUP2 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1966 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1929 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP5 DUP6 MSTORE POP PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP1 SUB DUP2 ADD DUP5 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP7 SWAP1 SWAP7 AND SWAP6 SWAP1 SWAP6 OR SWAP1 SWAP5 SSTORE POP POP DUP11 MLOAD DUP13 SWAP3 PUSH1 0x3 SWAP3 DUP14 SWAP3 SWAP1 SWAP2 DUP3 SWAP2 SWAP1 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1A47 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1A0A JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP5 DUP6 MSTORE POP PUSH1 0x40 DUP1 MLOAD SWAP5 DUP6 SWAP1 SUB DUP3 ADD DUP6 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP8 DUP9 AND OR SWAP1 SSTORE PUSH1 0xFF DUP14 AND SWAP1 DUP6 ADD MSTORE PUSH1 0xA0 DUP1 DUP6 MSTORE DUP15 MLOAD SWAP1 DUP6 ADD MSTORE DUP14 MLOAD SWAP5 DUP16 AND SWAP5 PUSH32 0xD8D928B0B50CA11D9DC273236B46F3526515B03602F71F3A6AF4F45BD9FA9144 SWAP5 DUP16 SWAP5 POP DUP15 SWAP4 POP DUP14 SWAP3 DUP14 SWAP3 DUP14 SWAP3 SWAP2 DUP3 SWAP2 DUP3 DUP3 ADD SWAP2 PUSH1 0x60 DUP5 ADD SWAP2 PUSH1 0x80 DUP6 ADD SWAP2 PUSH1 0xC0 DUP7 ADD SWAP2 SWAP1 DUP13 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1B4F JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1B37 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1B7C 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 DUP6 DUP2 SUB DUP5 MSTORE DUP10 MLOAD DUP2 MSTORE DUP10 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP12 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1BAF JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1B97 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1BDC 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 DUP6 DUP2 SUB DUP4 MSTORE DUP8 MLOAD DUP2 MSTORE DUP8 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP10 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1C0F JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1BF7 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1C3C 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 DUP6 DUP2 SUB DUP3 MSTORE DUP7 MLOAD DUP2 MSTORE DUP7 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP9 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1C6F JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1C57 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1C9C 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 SWAP10 POP POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x1CE1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP5 SWAP2 AND ISZERO ISZERO PUSH2 0x1D16 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x3 DUP3 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1D7F JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1D42 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP5 DUP6 MSTORE POP PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP1 SUB ADD SWAP1 SWAP3 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 SWAP1 SWAP3 EQ SWAP2 POP PUSH2 0x1DF0 SWAP1 POP JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 DUP4 MLOAD DUP5 DUP2 MSTORE DUP2 DUP5 ADD DUP1 SLOAD PUSH1 0x2 SWAP6 DUP2 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD AND SWAP5 SWAP1 SWAP5 DIV SWAP5 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 SWAP8 POP PUSH32 0x4A6DBFC867B179991DEC22FF19960F0A94D8D9D891FC556F547764670340E8AE SWAP4 DUP10 SWAP3 DUP3 SWAP2 SWAP1 DUP3 ADD SWAP1 PUSH1 0x60 DUP4 ADD SWAP1 DUP7 SWAP1 DUP1 ISZERO PUSH2 0x1EDB JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1EB0 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1EDB JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1EBE JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP DUP4 DUP2 SUB DUP3 MSTORE DUP5 MLOAD DUP2 MSTORE DUP5 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP7 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1F0F JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1EF7 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1F3C 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 SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH1 0x3 DUP4 PUSH1 0x1 ADD PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV DUP1 ISZERO PUSH2 0x1FAC JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1F8A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 DUP3 ADD SWAP2 PUSH2 0x1FAC JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1F98 JUMPI JUMPDEST POP POP SWAP3 DUP4 MSTORE POP POP PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 SWAP1 DUP2 ADD DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE DUP6 MLOAD DUP8 SWAP3 PUSH1 0x3 SWAP3 DUP9 SWAP3 DUP3 SWAP2 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x2036 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1FF9 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP5 DUP6 MSTORE POP PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP1 SUB DUP2 ADD SWAP1 SWAP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 OR SWAP1 SWAP4 SSTORE POP DUP6 MLOAD PUSH2 0xEF3 SWAP3 POP PUSH1 0x1 DUP7 ADD SWAP2 DUP8 ADD SWAP1 PUSH2 0x2C86 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 DUP1 SLOAD DUP2 DUP5 ADD DUP1 SLOAD DUP7 MLOAD PUSH1 0x2 PUSH2 0x100 SWAP8 DUP4 AND ISZERO SWAP8 SWAP1 SWAP8 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP2 AND SWAP6 SWAP1 SWAP6 DIV PUSH1 0x1F DUP2 ADD DUP6 SWAP1 DIV DUP6 MUL DUP7 ADD DUP6 ADD SWAP1 SWAP7 MSTORE DUP6 DUP6 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP5 SWAP2 SWAP4 SWAP3 SWAP1 SWAP2 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x21AD JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2182 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x21AD JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x2190 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP PUSH1 0x2 DUP1 DUP6 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP8 AND ISZERO MUL ADD SWAP1 SWAP5 AND SWAP6 SWAP1 SWAP6 DIV SWAP3 DUP4 ADD DUP6 SWAP1 DIV DUP6 MUL DUP2 ADD DUP6 ADD SWAP1 SWAP2 MSTORE DUP2 DUP2 MSTORE SWAP6 SWAP7 SWAP6 SWAP5 POP SWAP1 SWAP3 POP SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x225D JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2232 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x225D JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x2240 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP PUSH1 0x3 DUP4 ADD SLOAD PUSH1 0x4 DUP5 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH2 0x100 PUSH1 0x1 DUP7 AND ISZERO MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP6 SWAP7 PUSH1 0xFF SWAP1 SWAP5 AND SWAP6 SWAP4 SWAP5 POP SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x2316 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x22EB JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x2316 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x22F9 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP PUSH1 0x5 DUP4 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP5 SWAP6 SWAP5 SWAP4 POP SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x23C4 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2399 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x23C4 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x23A7 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP DUP7 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD DUP3 SWAP1 DUP2 LT PUSH2 0x23DC JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP1 PUSH1 0x0 PUSH1 0x60 DUP1 PUSH1 0x0 PUSH1 0x3 DUP9 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x245F JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x2422 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP5 DUP6 MSTORE POP PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP1 SUB ADD SWAP1 SWAP3 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 POP PUSH2 0x24CE SWAP2 POP DUP3 SWAP1 POP PUSH2 0x11D8 JUMP JUMPDEST SWAP5 SWAP14 SWAP4 SWAP13 POP SWAP2 SWAP11 POP SWAP9 POP SWAP7 POP SWAP1 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x2548 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x251D JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x2578 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP5 SWAP2 AND ISZERO ISZERO PUSH2 0x25AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 DUP4 MLOAD DUP5 DUP2 MSTORE PUSH1 0x4 DUP3 ADD DUP1 SLOAD PUSH1 0x2 SWAP6 DUP2 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD AND SWAP5 SWAP1 SWAP5 DIV SWAP5 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 SWAP7 POP PUSH32 0x5B19F79AC4E8CFA820815502E11615F1A449E28155DC289EC5CAC1A11F908694 SWAP4 DUP9 SWAP3 DUP3 SWAP2 SWAP1 DUP3 ADD SWAP1 PUSH1 0x60 DUP4 ADD SWAP1 DUP7 SWAP1 DUP1 ISZERO PUSH2 0x2699 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x266E JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x2699 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x267C JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP DUP4 DUP2 SUB DUP3 MSTORE DUP5 MLOAD DUP2 MSTORE DUP5 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP7 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x26CD JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x26B5 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x26FA 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 SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 DUP3 MLOAD PUSH2 0x11D1 SWAP1 PUSH1 0x4 DUP5 ADD SWAP1 PUSH1 0x20 DUP7 ADD SWAP1 PUSH2 0x2C86 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP1 PUSH1 0x0 PUSH1 0x60 DUP1 PUSH1 0x0 PUSH1 0x2 DUP9 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x20 DUP4 LT PUSH2 0x245F JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x2422 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x279E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP5 SWAP2 AND ISZERO ISZERO PUSH2 0x27D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 DUP3 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x283C JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x27FF JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP5 DUP6 MSTORE POP PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP1 SUB ADD SWAP1 SWAP3 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 SWAP1 SWAP3 EQ SWAP2 POP PUSH2 0x28AD SWAP1 POP JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 DUP4 MLOAD DUP5 DUP2 MSTORE PUSH1 0x2 DUP1 DUP4 ADD DUP1 SLOAD SWAP6 DUP7 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP6 AND DIV SWAP5 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 SWAP8 POP PUSH32 0x53D878A6530E56C9BC96548FA0A8CAE4F1D1F49C86B0E934C086B992EBB6998F SWAP4 DUP10 SWAP3 DUP3 SWAP2 SWAP1 DUP3 ADD SWAP1 PUSH1 0x60 DUP4 ADD SWAP1 DUP7 SWAP1 DUP1 ISZERO PUSH2 0x2997 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x296C JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x2997 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x297A JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP DUP4 DUP2 SUB DUP3 MSTORE DUP5 MLOAD DUP2 MSTORE DUP5 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP7 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x29CB JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x29B3 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x29F8 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 SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH1 0x2 DUP4 PUSH1 0x2 ADD PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV DUP1 ISZERO PUSH2 0x2A68 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2A46 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 DUP3 ADD SWAP2 PUSH2 0x2A68 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x2A54 JUMPI JUMPDEST POP POP SWAP3 DUP4 MSTORE POP POP PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 SWAP1 DUP2 ADD DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE DUP6 MLOAD DUP8 SWAP3 PUSH1 0x2 SWAP3 DUP9 SWAP3 DUP3 SWAP2 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x2AF2 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x2AB5 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP5 DUP6 MSTORE POP PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP1 SUB DUP2 ADD SWAP1 SWAP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 OR SWAP1 SWAP4 SSTORE POP DUP6 MLOAD PUSH2 0xEF3 SWAP3 POP PUSH1 0x2 DUP7 ADD SWAP2 DUP8 ADD SWAP1 PUSH2 0x2C86 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x2BB9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0x2C16 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND OR SWAP1 SSTORE JUMPDEST POP JUMP JUMPDEST DUP2 SLOAD DUP2 DUP4 SSTORE DUP2 DUP2 GT ISZERO PUSH2 0x2C3D JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 PUSH2 0x2C3D SWAP2 DUP2 ADD SWAP1 DUP4 ADD PUSH2 0x2D54 JUMP JUMPDEST POP POP POP JUMP JUMPDEST POP DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV PUSH1 0x0 DUP3 SSTORE DUP1 PUSH1 0x1F LT PUSH2 0x2C68 JUMPI POP PUSH2 0x2C16 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP1 PUSH2 0x2C16 SWAP2 SWAP1 PUSH2 0x2D54 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0x2CC7 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x2CF4 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x2CF4 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x2CF4 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x2CD9 JUMP JUMPDEST POP PUSH2 0x2D00 SWAP3 SWAP2 POP PUSH2 0x2D54 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0xC0 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x2550 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x2D00 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x2D5A JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 LOG2 0xb0 ISZERO 0xe1 0xc6 0xa9 PUSH25 0x406B24E8687202CED017FE0B041C7B9B9D741EB9BCB14A014E STOP 0x29 ",
"sourceMap": "886:8364:1:-;;;282:5:0;:18;;-1:-1:-1;;;;;;282:18:0;290:10;282:18;;;886:8364:1;;;;;;"
},
"deployedBytecode": {
"linkReferences": {},
- "object": "0x6080604052600436106100e55763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166313baf1e681146100ea5780632fbfeba91461011d5780633550b6d91461019f57806356318820146101f85780637abccac91461026c5780638da5cb5b14610484578063a880319d14610499578063c370c86d146105d0578063e486033914610644578063e5df8b8414610672578063e73fc0c31461068a578063ee8c24b8146106e3578063eef05f6514610748578063efa74f1f146107bc578063f036417f14610815578063f2fde38b14610889575b600080fd5b3480156100f657600080fd5b5061011b73ffffffffffffffffffffffffffffffffffffffff600435166024356108b7565b005b34801561012957600080fd5b506040805160206004803580820135601f8101849004840285018401909552848452610176943694929360249392840191908190840183828082843750949750610efb9650505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156101ab57600080fd5b506040805160206004803580820135601f8101849004840285018401909552848452610176943694929360249392840191908190840183828082843750949750610fb59650505050505050565b34801561020457600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261011b95833573ffffffffffffffffffffffffffffffffffffffff169536956044949193909101919081908401838280828437509497506110069650505050505050565b34801561027857600080fd5b5061029a73ffffffffffffffffffffffffffffffffffffffff600435166111d8565b604051808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001806020018660ff1660ff168152602001806020018060200185810385528a818151815260200191508051906020019080838360005b83811015610321578181015183820152602001610309565b50505050905090810190601f16801561034e5780820380516001836020036101000a031916815260200191505b5085810384528951815289516020918201918b019080838360005b83811015610381578181015183820152602001610369565b50505050905090810190601f1680156103ae5780820380516001836020036101000a031916815260200191505b50858103835287518152875160209182019189019080838360005b838110156103e15781810151838201526020016103c9565b50505050905090810190601f16801561040e5780820380516001836020036101000a031916815260200191505b50858103825286518152865160209182019188019080838360005b83811015610441578181015183820152602001610429565b50505050905090810190601f16801561046e5780820380516001836020036101000a031916815260200191505b509a505050505050505050505060405180910390f35b34801561049057600080fd5b50610176611528565b3480156104a557600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261011b95833573ffffffffffffffffffffffffffffffffffffffff1695369560449491939091019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375050604080516020601f818a01358b0180359182018390048302840183018552818452989b60ff8b35169b909a90999401975091955091820193509150819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a9998810197919650918201945092508291508401838280828437509497506115449650505050505050565b3480156105dc57600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261011b95833573ffffffffffffffffffffffffffffffffffffffff16953695604494919390910191908190840183828082843750949750611cbc9650505050505050565b34801561065057600080fd5b5061029a73ffffffffffffffffffffffffffffffffffffffff600435166120d9565b34801561067e57600080fd5b506101766004356123ce565b34801561069657600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261029a9436949293602493928401919081908401838280828437509497506124039650505050505050565b3480156106ef57600080fd5b506106f86124e3565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561073457818101518382015260200161071c565b505050509050019250505060405180910390f35b34801561075457600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261011b95833573ffffffffffffffffffffffffffffffffffffffff169536956044949193909101919081908401838280828437509497506125539650505050505050565b3480156107c857600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261029a94369492936024939284019190819084018382808284375094975061271e9650505050505050565b34801561082157600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261011b95833573ffffffffffffffffffffffffffffffffffffffff169536956044949193909101919081908401838280828437509497506127799650505050505050565b34801561089557600080fd5b5061011b73ffffffffffffffffffffffffffffffffffffffff60043516612b95565b6000805473ffffffffffffffffffffffffffffffffffffffff1633146108dc57600080fd5b73ffffffffffffffffffffffffffffffffffffffff808416600090815260016020526040902054849116151561091157600080fd5b8373ffffffffffffffffffffffffffffffffffffffff1660048481548110151561093757fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff161461096357600080fd5b600480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061099357fe5b6000918252602090912001546004805473ffffffffffffffffffffffffffffffffffffffff90921691859081106109c657fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190610a459082612c19565b5073ffffffffffffffffffffffffffffffffffffffff80851660009081526001602081815260409283902080546003820154855160ff90911695810186905260a0808252838601805460027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9882161561010002989098011687900491830182905293995091909616957f32c54f1e2ea75844ded7517e7dbcd3895da7cd0c28f9ab9f9cf6ecf5f83762c695929489019360048a019260058b0192918291908201906060830190608084019060c08501908b908015610b655780601f10610b3a57610100808354040283529160200191610b65565b820191906000526020600020905b815481529060010190602001808311610b4857829003601f168201915b50508581038452895460027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010060018416150201909116048082526020909101908a908015610bf75780601f10610bcc57610100808354040283529160200191610bf7565b820191906000526020600020905b815481529060010190602001808311610bda57829003601f168201915b50508581038352875460027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600184161502019091160480825260209091019088908015610c895780601f10610c5e57610100808354040283529160200191610c89565b820191906000526020600020905b815481529060010190602001808311610c6c57829003601f168201915b50508581038252865460027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600184161502019091160480825260209091019087908015610d1b5780601f10610cf057610100808354040283529160200191610d1b565b820191906000526020600020905b815481529060010190602001808311610cfe57829003601f168201915b5050995050505050505050505060405180910390a26002826002016040518082805460018160011615610100020316600290048015610d915780601f10610d6f576101008083540402835291820191610d91565b820191906000526020600020905b815481529060010190602001808311610d7d575b5050915050908152602001604051809103902060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556003826001016040518082805460018160011615610100020316600290048015610e285780601f10610e06576101008083540402835291820191610e28565b820191906000526020600020905b815481529060010190602001808311610e14575b50509283525050604080516020928190038301902080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690915573ffffffffffffffffffffffffffffffffffffffff871660009081526001938490529182208054909116815591610e9f90830182612c42565b610ead600283016000612c42565b6003820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055610ee5600483016000612c42565b610ef3600583016000612c42565b505050505050565b60006003826040518082805190602001908083835b60208310610f4d57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610f10565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905292019485525060405193849003019092205473ffffffffffffffffffffffffffffffffffffffff16949350505050565b600060028260405180828051906020019080838360208310610f4d57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610f10565b6000805473ffffffffffffffffffffffffffffffffffffffff16331461102b57600080fd5b73ffffffffffffffffffffffffffffffffffffffff808416600090815260016020526040902054849116151561106057600080fd5b73ffffffffffffffffffffffffffffffffffffffff84166000818152600160208181526040928390208351848152600582018054600295811615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116949094049481018590529096507fc3168fdc13112e44a031057dbf6c609b33353addb4d8037d24543e22cbfe2acd93889282919082019060608301908690801561114c5780601f106111215761010080835404028352916020019161114c565b820191906000526020600020905b81548152906001019060200180831161112f57829003601f168201915b5050838103825284518152845160209182019186019080838360005b83811015611180578181015183820152602001611168565b50505050905090810190601f1680156111ad5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a282516111d19060058401906020860190612c86565b5050505050565b600060608060006060806111ea612d04565b73ffffffffffffffffffffffffffffffffffffffff888116600090815260016020818152604092839020835160c0810185528154909516855280830180548551600261010096831615969096027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190911694909404601f8101849004840285018401909552848452909385830193928301828280156112cb5780601f106112a0576101008083540402835291602001916112cb565b820191906000526020600020905b8154815290600101906020018083116112ae57829003601f168201915b5050509183525050600282810180546040805160206001841615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190931694909404601f8101839004830285018301909152808452938101939083018282801561137b5780601f106113505761010080835404028352916020019161137b565b820191906000526020600020905b81548152906001019060200180831161135e57829003601f168201915b5050509183525050600382015460ff1660208083019190915260048301805460408051601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600186161561010002019094169390930492830185900485028101850182528281529401939283018282801561143a5780601f1061140f5761010080835404028352916020019161143a565b820191906000526020600020905b81548152906001019060200180831161141d57829003601f168201915b505050918352505060058201805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f81018490048402820184019092528181529382019392918301828280156114ec5780601f106114c1576101008083540402835291602001916114ec565b820191906000526020600020905b8154815290600101906020018083116114cf57829003601f168201915b5050509190925250508151602083015160408401516060850151608086015160a090960151939e929d50909b5099509297509550909350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff16331461156857600080fd5b73ffffffffffffffffffffffffffffffffffffffff8087166000908152600160205260409020548791161561159c57600080fd5b8673ffffffffffffffffffffffffffffffffffffffff811615156115bf57600080fd5b85600073ffffffffffffffffffffffffffffffffffffffff166002826040518082805190602001908083835b6020831061162857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016115eb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905292019485525060405193849003019092205473ffffffffffffffffffffffffffffffffffffffff16929092149150611699905057600080fd5b87600073ffffffffffffffffffffffffffffffffffffffff166003826040518082805190602001908083835b6020831061170257805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016116c5565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905292019485525060405193849003019092205473ffffffffffffffffffffffffffffffffffffffff16929092149150611773905057600080fd5b6040805160c08101825273ffffffffffffffffffffffffffffffffffffffff8c811680835260208084018e81528486018e905260ff8d166060860152608085018c905260a085018b90526000928352600180835295909220845181547fffffffffffffffffffffffff00000000000000000000000000000000000000001694169390931783559051805193949293611812938501929190910190612c86565b506040820151805161182e916002840191602090910190612c86565b5060608201516003820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff90921691909117905560808201518051611882916004840191602090910190612c86565b5060a0820151805161189e916005840191602090910190612c86565b5050600480546001810182556000919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8d161790555060405188518b916002918b9190819060208401908083835b6020831061196657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611929565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199092169116179052920194855250604051938490038101842080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff969096169590951790945550508a518c926003928d9290918291908401908083835b60208310611a4757805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611a0a565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905292019485525060408051948590038201852080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff97881617905560ff8d169085015260a08085528e51908501528d51948f16947fd8d928b0b50ca11d9dc273236b46f3526515b03602f71f3a6af4f45bd9fa9144948f94508e93508d928d928d92918291828201916060840191608085019160c0860191908c019080838360005b83811015611b4f578181015183820152602001611b37565b50505050905090810190601f168015611b7c5780820380516001836020036101000a031916815260200191505b5085810384528951815289516020918201918b019080838360005b83811015611baf578181015183820152602001611b97565b50505050905090810190601f168015611bdc5780820380516001836020036101000a031916815260200191505b50858103835287518152875160209182019189019080838360005b83811015611c0f578181015183820152602001611bf7565b50505050905090810190601f168015611c3c5780820380516001836020036101000a031916815260200191505b50858103825286518152865160209182019188019080838360005b83811015611c6f578181015183820152602001611c57565b50505050905090810190601f168015611c9c5780820380516001836020036101000a031916815260200191505b50995050505050505050505060405180910390a250505050505050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff163314611ce157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8084166000908152600160205260409020548491161515611d1657600080fd5b82600073ffffffffffffffffffffffffffffffffffffffff166003826040518082805190602001908083835b60208310611d7f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611d42565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905292019485525060405193849003019092205473ffffffffffffffffffffffffffffffffffffffff16929092149150611df0905057600080fd5b73ffffffffffffffffffffffffffffffffffffffff851660008181526001602081815260409283902083518481528184018054600295811615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116949094049481018590529097507f4a6dbfc867b179991dec22ff19960f0a94d8d9d891fc556f547764670340e8ae938992829190820190606083019086908015611edb5780601f10611eb057610100808354040283529160200191611edb565b820191906000526020600020905b815481529060010190602001808311611ebe57829003601f168201915b5050838103825284518152845160209182019186019080838360005b83811015611f0f578181015183820152602001611ef7565b50505050905090810190601f168015611f3c5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a26003836001016040518082805460018160011615610100020316600290048015611fac5780601f10611f8a576101008083540402835291820191611fac565b820191906000526020600020905b815481529060010190602001808311611f98575b50509283525050604051908190036020908101822080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905585518792600392889282918401908083835b6020831061203657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611ff9565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905292019485525060405193849003810190932080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9590951694909417909355508551610ef392506001860191870190612c86565b600160208181526000928352604092839020805481840180548651600261010097831615979097027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190911695909504601f810185900485028601850190965285855273ffffffffffffffffffffffffffffffffffffffff909116949193929091908301828280156121ad5780601f10612182576101008083540402835291602001916121ad565b820191906000526020600020905b81548152906001019060200180831161219057829003601f168201915b50505060028085018054604080516020601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600187161502019094169590950492830185900485028101850190915281815295969594509092509083018282801561225d5780601f106122325761010080835404028352916020019161225d565b820191906000526020600020905b81548152906001019060200180831161224057829003601f168201915b50505050600383015460048401805460408051602060026101006001861615027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f8101849004840282018401909252818152959660ff90941695939450908301828280156123165780601f106122eb57610100808354040283529160200191612316565b820191906000526020600020905b8154815290600101906020018083116122f957829003601f168201915b5050505060058301805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f81018490048402820184019092528181529495949350908301828280156123c45780601f10612399576101008083540402835291602001916123c4565b820191906000526020600020905b8154815290600101906020018083116123a757829003601f168201915b5050505050905086565b60048054829081106123dc57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6000606080600060608060006003886040518082805190602001908083835b6020831061245f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612422565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905292019485525060405193849003019092205473ffffffffffffffffffffffffffffffffffffffff1692506124ce91508290506111d8565b949d939c50919a509850965090945092505050565b6060600480548060200260200160405190810160405280929190818152602001828054801561254857602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161251d575b505050505090505b90565b6000805473ffffffffffffffffffffffffffffffffffffffff16331461257857600080fd5b73ffffffffffffffffffffffffffffffffffffffff80841660009081526001602052604090205484911615156125ad57600080fd5b73ffffffffffffffffffffffffffffffffffffffff84166000818152600160208181526040928390208351848152600482018054600295811615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116949094049481018590529096507f5b19f79ac4e8cfa820815502e11615f1a449e28155dc289ec5cac1a11f9086949388928291908201906060830190869080156126995780601f1061266e57610100808354040283529160200191612699565b820191906000526020600020905b81548152906001019060200180831161267c57829003601f168201915b5050838103825284518152845160209182019186019080838360005b838110156126cd5781810151838201526020016126b5565b50505050905090810190601f1680156126fa5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a282516111d19060048401906020860190612c86565b6000606080600060608060006002886040518082805190602001908083836020831061245f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612422565b6000805473ffffffffffffffffffffffffffffffffffffffff16331461279e57600080fd5b73ffffffffffffffffffffffffffffffffffffffff80841660009081526001602052604090205484911615156127d357600080fd5b82600073ffffffffffffffffffffffffffffffffffffffff166002826040518082805190602001908083835b6020831061283c57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016127ff565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905292019485525060405193849003019092205473ffffffffffffffffffffffffffffffffffffffff169290921491506128ad905057600080fd5b73ffffffffffffffffffffffffffffffffffffffff851660008181526001602081815260409283902083518481526002808301805495861615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01909516049481018590529097507f53d878a6530e56c9bc96548fa0a8cae4f1d1f49c86b0e934c086b992ebb6998f9389928291908201906060830190869080156129975780601f1061296c57610100808354040283529160200191612997565b820191906000526020600020905b81548152906001019060200180831161297a57829003601f168201915b5050838103825284518152845160209182019186019080838360005b838110156129cb5781810151838201526020016129b3565b50505050905090810190601f1680156129f85780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a26002836002016040518082805460018160011615610100020316600290048015612a685780601f10612a46576101008083540402835291820191612a68565b820191906000526020600020905b815481529060010190602001808311612a54575b50509283525050604051908190036020908101822080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905585518792600292889282918401908083835b60208310612af257805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612ab5565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905292019485525060405193849003810190932080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9590951694909417909355508551610ef392506002860191870190612c86565b60005473ffffffffffffffffffffffffffffffffffffffff163314612bb957600080fd5b73ffffffffffffffffffffffffffffffffffffffff811615612c1657600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b815481835581811115612c3d57600083815260209020612c3d918101908301612d54565b505050565b50805460018160011615610100020316600290046000825580601f10612c685750612c16565b601f016020900490600052602060002090810190612c169190612d54565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612cc757805160ff1916838001178555612cf4565b82800160010185558215612cf4579182015b82811115612cf4578251825591602001919060010190612cd9565b50612d00929150612d54565b5090565b60c060405190810160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020016060815260200160608152602001600060ff16815260200160608152602001606081525090565b61255091905b80821115612d005760008155600101612d5a5600a165627a7a7230582084e95a0a2a2f6b98236222635755a082c937f66b7dd9529673a6c9fe221f8eb00029",
- "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xE5 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x13BAF1E6 DUP2 EQ PUSH2 0xEA JUMPI DUP1 PUSH4 0x2FBFEBA9 EQ PUSH2 0x11D JUMPI DUP1 PUSH4 0x3550B6D9 EQ PUSH2 0x19F JUMPI DUP1 PUSH4 0x56318820 EQ PUSH2 0x1F8 JUMPI DUP1 PUSH4 0x7ABCCAC9 EQ PUSH2 0x26C JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x484 JUMPI DUP1 PUSH4 0xA880319D EQ PUSH2 0x499 JUMPI DUP1 PUSH4 0xC370C86D EQ PUSH2 0x5D0 JUMPI DUP1 PUSH4 0xE4860339 EQ PUSH2 0x644 JUMPI DUP1 PUSH4 0xE5DF8B84 EQ PUSH2 0x672 JUMPI DUP1 PUSH4 0xE73FC0C3 EQ PUSH2 0x68A JUMPI DUP1 PUSH4 0xEE8C24B8 EQ PUSH2 0x6E3 JUMPI DUP1 PUSH4 0xEEF05F65 EQ PUSH2 0x748 JUMPI DUP1 PUSH4 0xEFA74F1F EQ PUSH2 0x7BC JUMPI DUP1 PUSH4 0xF036417F EQ PUSH2 0x815 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x889 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11B PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD PUSH2 0x8B7 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x129 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 DUP1 CALLDATALOAD DUP1 DUP3 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x176 SWAP5 CALLDATASIZE SWAP5 SWAP3 SWAP4 PUSH1 0x24 SWAP4 SWAP3 DUP5 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0xEFB SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 DUP1 CALLDATALOAD DUP1 DUP3 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x176 SWAP5 CALLDATASIZE SWAP5 SWAP3 SWAP4 PUSH1 0x24 SWAP4 SWAP3 DUP5 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0xFB5 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x204 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 PUSH1 0x24 DUP1 CALLDATALOAD DUP3 DUP2 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP6 SWAP1 DIV DUP6 MUL DUP7 ADD DUP6 ADD SWAP1 SWAP7 MSTORE DUP6 DUP6 MSTORE PUSH2 0x11B SWAP6 DUP4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP6 CALLDATASIZE SWAP6 PUSH1 0x44 SWAP5 SWAP2 SWAP4 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x1006 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x278 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x29A PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x11D8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP7 PUSH1 0xFF AND PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP6 DUP2 SUB DUP6 MSTORE DUP11 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x321 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x309 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x34E 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 DUP6 DUP2 SUB DUP5 MSTORE DUP10 MLOAD DUP2 MSTORE DUP10 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP12 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x381 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x369 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x3AE 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 DUP6 DUP2 SUB DUP4 MSTORE DUP8 MLOAD DUP2 MSTORE DUP8 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP10 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3E1 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3C9 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x40E 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 DUP6 DUP2 SUB DUP3 MSTORE DUP7 MLOAD DUP2 MSTORE DUP7 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP9 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x441 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x429 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x46E 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 SWAP11 POP POP POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x490 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x176 PUSH2 0x1528 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 PUSH1 0x24 DUP1 CALLDATALOAD DUP3 DUP2 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP6 SWAP1 DIV DUP6 MUL DUP7 ADD DUP6 ADD SWAP1 SWAP7 MSTORE DUP6 DUP6 MSTORE PUSH2 0x11B SWAP6 DUP4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP6 CALLDATASIZE SWAP6 PUSH1 0x44 SWAP5 SWAP2 SWAP4 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F DUP10 CALLDATALOAD DUP12 ADD DUP1 CALLDATALOAD SWAP2 DUP3 ADD DUP4 SWAP1 DIV DUP4 MUL DUP5 ADD DUP4 ADD SWAP1 SWAP5 MSTORE DUP1 DUP4 MSTORE SWAP8 SWAP11 SWAP10 SWAP9 DUP2 ADD SWAP8 SWAP2 SWAP7 POP SWAP2 DUP3 ADD SWAP5 POP SWAP3 POP DUP3 SWAP2 POP DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F DUP2 DUP11 ADD CALLDATALOAD DUP12 ADD DUP1 CALLDATALOAD SWAP2 DUP3 ADD DUP4 SWAP1 DIV DUP4 MUL DUP5 ADD DUP4 ADD DUP6 MSTORE DUP2 DUP5 MSTORE SWAP9 SWAP12 PUSH1 0xFF DUP12 CALLDATALOAD AND SWAP12 SWAP1 SWAP11 SWAP1 SWAP10 SWAP5 ADD SWAP8 POP SWAP2 SWAP6 POP SWAP2 DUP3 ADD SWAP4 POP SWAP2 POP DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F DUP10 CALLDATALOAD DUP12 ADD DUP1 CALLDATALOAD SWAP2 DUP3 ADD DUP4 SWAP1 DIV DUP4 MUL DUP5 ADD DUP4 ADD SWAP1 SWAP5 MSTORE DUP1 DUP4 MSTORE SWAP8 SWAP11 SWAP10 SWAP9 DUP2 ADD SWAP8 SWAP2 SWAP7 POP SWAP2 DUP3 ADD SWAP5 POP SWAP3 POP DUP3 SWAP2 POP DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x1544 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 PUSH1 0x24 DUP1 CALLDATALOAD DUP3 DUP2 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP6 SWAP1 DIV DUP6 MUL DUP7 ADD DUP6 ADD SWAP1 SWAP7 MSTORE DUP6 DUP6 MSTORE PUSH2 0x11B SWAP6 DUP4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP6 CALLDATASIZE SWAP6 PUSH1 0x44 SWAP5 SWAP2 SWAP4 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x1CBC SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x650 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x29A PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x20D9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x67E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x176 PUSH1 0x4 CALLDATALOAD PUSH2 0x23CE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x696 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 DUP1 CALLDATALOAD DUP1 DUP3 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x29A SWAP5 CALLDATASIZE SWAP5 SWAP3 SWAP4 PUSH1 0x24 SWAP4 SWAP3 DUP5 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x2403 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6F8 PUSH2 0x24E3 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 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x734 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x71C JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x754 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 PUSH1 0x24 DUP1 CALLDATALOAD DUP3 DUP2 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP6 SWAP1 DIV DUP6 MUL DUP7 ADD DUP6 ADD SWAP1 SWAP7 MSTORE DUP6 DUP6 MSTORE PUSH2 0x11B SWAP6 DUP4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP6 CALLDATASIZE SWAP6 PUSH1 0x44 SWAP5 SWAP2 SWAP4 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x2553 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 DUP1 CALLDATALOAD DUP1 DUP3 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x29A SWAP5 CALLDATASIZE SWAP5 SWAP3 SWAP4 PUSH1 0x24 SWAP4 SWAP3 DUP5 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x271E SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x821 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 PUSH1 0x24 DUP1 CALLDATALOAD DUP3 DUP2 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP6 SWAP1 DIV DUP6 MUL DUP7 ADD DUP6 ADD SWAP1 SWAP7 MSTORE DUP6 DUP6 MSTORE PUSH2 0x11B SWAP6 DUP4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP6 CALLDATASIZE SWAP6 PUSH1 0x44 SWAP5 SWAP2 SWAP4 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x2779 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x895 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11B PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x2B95 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x8DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP5 SWAP2 AND ISZERO ISZERO PUSH2 0x911 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x4 DUP5 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x937 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x963 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0x993 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x4 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 DUP6 SWAP1 DUP2 LT PUSH2 0x9C6 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x4 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 PUSH2 0xA45 SWAP1 DUP3 PUSH2 0x2C19 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x3 DUP3 ADD SLOAD DUP6 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND SWAP6 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0xA0 DUP1 DUP3 MSTORE DUP4 DUP7 ADD DUP1 SLOAD PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP9 DUP3 AND ISZERO PUSH2 0x100 MUL SWAP9 SWAP1 SWAP9 ADD AND DUP8 SWAP1 DIV SWAP2 DUP4 ADD DUP3 SWAP1 MSTORE SWAP4 SWAP10 POP SWAP2 SWAP1 SWAP7 AND SWAP6 PUSH32 0x32C54F1E2EA75844DED7517E7DBCD3895DA7CD0C28F9AB9F9CF6ECF5F83762C6 SWAP6 SWAP3 SWAP5 DUP10 ADD SWAP4 PUSH1 0x4 DUP11 ADD SWAP3 PUSH1 0x5 DUP12 ADD SWAP3 SWAP2 DUP3 SWAP2 SWAP1 DUP3 ADD SWAP1 PUSH1 0x60 DUP4 ADD SWAP1 PUSH1 0x80 DUP5 ADD SWAP1 PUSH1 0xC0 DUP6 ADD SWAP1 DUP12 SWAP1 DUP1 ISZERO PUSH2 0xB65 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xB3A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xB65 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xB48 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP DUP6 DUP2 SUB DUP5 MSTORE DUP10 SLOAD PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP5 AND ISZERO MUL ADD SWAP1 SWAP2 AND DIV DUP1 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 DUP11 SWAP1 DUP1 ISZERO PUSH2 0xBF7 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xBCC JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xBF7 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xBDA JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP DUP6 DUP2 SUB DUP4 MSTORE DUP8 SLOAD PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP5 AND ISZERO MUL ADD SWAP1 SWAP2 AND DIV DUP1 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 DUP9 SWAP1 DUP1 ISZERO PUSH2 0xC89 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xC5E JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xC89 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xC6C JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP DUP6 DUP2 SUB DUP3 MSTORE DUP7 SLOAD PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP5 AND ISZERO MUL ADD SWAP1 SWAP2 AND DIV DUP1 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 DUP8 SWAP1 DUP1 ISZERO PUSH2 0xD1B JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xCF0 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xD1B JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xCFE JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP SWAP10 POP POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH1 0x2 DUP3 PUSH1 0x2 ADD PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV DUP1 ISZERO PUSH2 0xD91 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xD6F JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 DUP3 ADD SWAP2 PUSH2 0xD91 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xD7D JUMPI JUMPDEST POP POP SWAP2 POP POP SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 SSTORE PUSH1 0x3 DUP3 PUSH1 0x1 ADD PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV DUP1 ISZERO PUSH2 0xE28 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xE06 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 DUP3 ADD SWAP2 PUSH2 0xE28 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xE14 JUMPI JUMPDEST POP POP SWAP3 DUP4 MSTORE POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 SWAP3 DUP2 SWAP1 SUB DUP4 ADD SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 AND SWAP1 SWAP2 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 SWAP4 DUP5 SWAP1 MSTORE SWAP2 DUP3 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 AND DUP2 SSTORE SWAP2 PUSH2 0xE9F SWAP1 DUP4 ADD DUP3 PUSH2 0x2C42 JUMP JUMPDEST PUSH2 0xEAD PUSH1 0x2 DUP4 ADD PUSH1 0x0 PUSH2 0x2C42 JUMP JUMPDEST PUSH1 0x3 DUP3 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE PUSH2 0xEE5 PUSH1 0x4 DUP4 ADD PUSH1 0x0 PUSH2 0x2C42 JUMP JUMPDEST PUSH2 0xEF3 PUSH1 0x5 DUP4 ADD PUSH1 0x0 PUSH2 0x2C42 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x3 DUP3 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xF4D JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xF10 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP5 DUP6 MSTORE POP PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP1 SUB ADD SWAP1 SWAP3 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x2 DUP3 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x20 DUP4 LT PUSH2 0xF4D JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xF10 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x102B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP5 SWAP2 AND ISZERO ISZERO PUSH2 0x1060 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 DUP4 MLOAD DUP5 DUP2 MSTORE PUSH1 0x5 DUP3 ADD DUP1 SLOAD PUSH1 0x2 SWAP6 DUP2 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD AND SWAP5 SWAP1 SWAP5 DIV SWAP5 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 SWAP7 POP PUSH32 0xC3168FDC13112E44A031057DBF6C609B33353ADDB4D8037D24543E22CBFE2ACD SWAP4 DUP9 SWAP3 DUP3 SWAP2 SWAP1 DUP3 ADD SWAP1 PUSH1 0x60 DUP4 ADD SWAP1 DUP7 SWAP1 DUP1 ISZERO PUSH2 0x114C JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1121 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x114C JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x112F JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP DUP4 DUP2 SUB DUP3 MSTORE DUP5 MLOAD DUP2 MSTORE DUP5 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP7 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1180 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1168 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x11AD 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 SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 DUP3 MLOAD PUSH2 0x11D1 SWAP1 PUSH1 0x5 DUP5 ADD SWAP1 PUSH1 0x20 DUP7 ADD SWAP1 PUSH2 0x2C86 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP1 PUSH1 0x0 PUSH1 0x60 DUP1 PUSH2 0x11EA PUSH2 0x2D04 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 DUP4 MLOAD PUSH1 0xC0 DUP2 ADD DUP6 MSTORE DUP2 SLOAD SWAP1 SWAP6 AND DUP6 MSTORE DUP1 DUP4 ADD DUP1 SLOAD DUP6 MLOAD PUSH1 0x2 PUSH2 0x100 SWAP7 DUP4 AND ISZERO SWAP7 SWAP1 SWAP7 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP2 AND SWAP5 SWAP1 SWAP5 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE SWAP1 SWAP4 DUP6 DUP4 ADD SWAP4 SWAP3 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x12CB JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x12A0 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x12CB JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x12AE JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP SWAP2 DUP4 MSTORE POP POP PUSH1 0x2 DUP3 DUP2 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1 DUP5 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP4 AND SWAP5 SWAP1 SWAP5 DIV PUSH1 0x1F DUP2 ADD DUP4 SWAP1 DIV DUP4 MUL DUP6 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP1 DUP5 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x137B JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1350 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x137B JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x135E JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP SWAP2 DUP4 MSTORE POP POP PUSH1 0x3 DUP3 ADD SLOAD PUSH1 0xFF AND PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x4 DUP4 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 DUP7 AND ISZERO PUSH2 0x100 MUL ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV SWAP3 DUP4 ADD DUP6 SWAP1 DIV DUP6 MUL DUP2 ADD DUP6 ADD DUP3 MSTORE DUP3 DUP2 MSTORE SWAP5 ADD SWAP4 SWAP3 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x143A JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x140F JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x143A JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x141D JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP SWAP2 DUP4 MSTORE POP POP PUSH1 0x5 DUP3 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP4 DUP3 ADD SWAP4 SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x14EC JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x14C1 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x14EC JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x14CF JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP SWAP2 SWAP1 SWAP3 MSTORE POP POP DUP2 MLOAD PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0x60 DUP6 ADD MLOAD PUSH1 0x80 DUP7 ADD MLOAD PUSH1 0xA0 SWAP1 SWAP7 ADD MLOAD SWAP4 SWAP15 SWAP3 SWAP14 POP SWAP1 SWAP12 POP SWAP10 POP SWAP3 SWAP8 POP SWAP6 POP SWAP1 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x1568 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP8 SWAP2 AND ISZERO PUSH2 0x159C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO ISZERO PUSH2 0x15BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 DUP3 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1628 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x15EB JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP5 DUP6 MSTORE POP PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP1 SUB ADD SWAP1 SWAP3 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 SWAP1 SWAP3 EQ SWAP2 POP PUSH2 0x1699 SWAP1 POP JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x3 DUP3 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1702 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x16C5 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP5 DUP6 MSTORE POP PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP1 SUB ADD SWAP1 SWAP3 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 SWAP1 SWAP3 EQ SWAP2 POP PUSH2 0x1773 SWAP1 POP JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xC0 DUP2 ADD DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 DUP2 AND DUP1 DUP4 MSTORE PUSH1 0x20 DUP1 DUP5 ADD DUP15 DUP2 MSTORE DUP5 DUP7 ADD DUP15 SWAP1 MSTORE PUSH1 0xFF DUP14 AND PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x80 DUP6 ADD DUP13 SWAP1 MSTORE PUSH1 0xA0 DUP6 ADD DUP12 SWAP1 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x1 DUP1 DUP4 MSTORE SWAP6 SWAP1 SWAP3 KECCAK256 DUP5 MLOAD DUP2 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP5 AND SWAP4 SWAP1 SWAP4 OR DUP4 SSTORE SWAP1 MLOAD DUP1 MLOAD SWAP4 SWAP5 SWAP3 SWAP4 PUSH2 0x1812 SWAP4 DUP6 ADD SWAP3 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x2C86 JUMP JUMPDEST POP PUSH1 0x40 DUP3 ADD MLOAD DUP1 MLOAD PUSH2 0x182E SWAP2 PUSH1 0x2 DUP5 ADD SWAP2 PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x2C86 JUMP JUMPDEST POP PUSH1 0x60 DUP3 ADD MLOAD PUSH1 0x3 DUP3 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0xFF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x80 DUP3 ADD MLOAD DUP1 MLOAD PUSH2 0x1882 SWAP2 PUSH1 0x4 DUP5 ADD SWAP2 PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x2C86 JUMP JUMPDEST POP PUSH1 0xA0 DUP3 ADD MLOAD DUP1 MLOAD PUSH2 0x189E SWAP2 PUSH1 0x5 DUP5 ADD SWAP2 PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x2C86 JUMP JUMPDEST POP POP PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 DUP2 ADD DUP3 SSTORE PUSH1 0x0 SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP14 AND OR SWAP1 SSTORE POP PUSH1 0x40 MLOAD DUP9 MLOAD DUP12 SWAP2 PUSH1 0x2 SWAP2 DUP12 SWAP2 SWAP1 DUP2 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1966 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1929 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP5 DUP6 MSTORE POP PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP1 SUB DUP2 ADD DUP5 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP7 SWAP1 SWAP7 AND SWAP6 SWAP1 SWAP6 OR SWAP1 SWAP5 SSTORE POP POP DUP11 MLOAD DUP13 SWAP3 PUSH1 0x3 SWAP3 DUP14 SWAP3 SWAP1 SWAP2 DUP3 SWAP2 SWAP1 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1A47 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1A0A JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP5 DUP6 MSTORE POP PUSH1 0x40 DUP1 MLOAD SWAP5 DUP6 SWAP1 SUB DUP3 ADD DUP6 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP8 DUP9 AND OR SWAP1 SSTORE PUSH1 0xFF DUP14 AND SWAP1 DUP6 ADD MSTORE PUSH1 0xA0 DUP1 DUP6 MSTORE DUP15 MLOAD SWAP1 DUP6 ADD MSTORE DUP14 MLOAD SWAP5 DUP16 AND SWAP5 PUSH32 0xD8D928B0B50CA11D9DC273236B46F3526515B03602F71F3A6AF4F45BD9FA9144 SWAP5 DUP16 SWAP5 POP DUP15 SWAP4 POP DUP14 SWAP3 DUP14 SWAP3 DUP14 SWAP3 SWAP2 DUP3 SWAP2 DUP3 DUP3 ADD SWAP2 PUSH1 0x60 DUP5 ADD SWAP2 PUSH1 0x80 DUP6 ADD SWAP2 PUSH1 0xC0 DUP7 ADD SWAP2 SWAP1 DUP13 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1B4F JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1B37 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1B7C 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 DUP6 DUP2 SUB DUP5 MSTORE DUP10 MLOAD DUP2 MSTORE DUP10 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP12 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1BAF JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1B97 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1BDC 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 DUP6 DUP2 SUB DUP4 MSTORE DUP8 MLOAD DUP2 MSTORE DUP8 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP10 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1C0F JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1BF7 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1C3C 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 DUP6 DUP2 SUB DUP3 MSTORE DUP7 MLOAD DUP2 MSTORE DUP7 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP9 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1C6F JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1C57 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1C9C 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 SWAP10 POP POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x1CE1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP5 SWAP2 AND ISZERO ISZERO PUSH2 0x1D16 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x3 DUP3 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1D7F JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1D42 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP5 DUP6 MSTORE POP PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP1 SUB ADD SWAP1 SWAP3 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 SWAP1 SWAP3 EQ SWAP2 POP PUSH2 0x1DF0 SWAP1 POP JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 DUP4 MLOAD DUP5 DUP2 MSTORE DUP2 DUP5 ADD DUP1 SLOAD PUSH1 0x2 SWAP6 DUP2 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD AND SWAP5 SWAP1 SWAP5 DIV SWAP5 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 SWAP8 POP PUSH32 0x4A6DBFC867B179991DEC22FF19960F0A94D8D9D891FC556F547764670340E8AE SWAP4 DUP10 SWAP3 DUP3 SWAP2 SWAP1 DUP3 ADD SWAP1 PUSH1 0x60 DUP4 ADD SWAP1 DUP7 SWAP1 DUP1 ISZERO PUSH2 0x1EDB JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1EB0 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1EDB JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1EBE JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP DUP4 DUP2 SUB DUP3 MSTORE DUP5 MLOAD DUP2 MSTORE DUP5 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP7 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1F0F JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1EF7 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1F3C 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 SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH1 0x3 DUP4 PUSH1 0x1 ADD PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV DUP1 ISZERO PUSH2 0x1FAC JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1F8A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 DUP3 ADD SWAP2 PUSH2 0x1FAC JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1F98 JUMPI JUMPDEST POP POP SWAP3 DUP4 MSTORE POP POP PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 SWAP1 DUP2 ADD DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE DUP6 MLOAD DUP8 SWAP3 PUSH1 0x3 SWAP3 DUP9 SWAP3 DUP3 SWAP2 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x2036 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1FF9 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP5 DUP6 MSTORE POP PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP1 SUB DUP2 ADD SWAP1 SWAP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 OR SWAP1 SWAP4 SSTORE POP DUP6 MLOAD PUSH2 0xEF3 SWAP3 POP PUSH1 0x1 DUP7 ADD SWAP2 DUP8 ADD SWAP1 PUSH2 0x2C86 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 DUP1 SLOAD DUP2 DUP5 ADD DUP1 SLOAD DUP7 MLOAD PUSH1 0x2 PUSH2 0x100 SWAP8 DUP4 AND ISZERO SWAP8 SWAP1 SWAP8 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP2 AND SWAP6 SWAP1 SWAP6 DIV PUSH1 0x1F DUP2 ADD DUP6 SWAP1 DIV DUP6 MUL DUP7 ADD DUP6 ADD SWAP1 SWAP7 MSTORE DUP6 DUP6 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP5 SWAP2 SWAP4 SWAP3 SWAP1 SWAP2 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x21AD JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2182 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x21AD JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x2190 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP PUSH1 0x2 DUP1 DUP6 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP8 AND ISZERO MUL ADD SWAP1 SWAP5 AND SWAP6 SWAP1 SWAP6 DIV SWAP3 DUP4 ADD DUP6 SWAP1 DIV DUP6 MUL DUP2 ADD DUP6 ADD SWAP1 SWAP2 MSTORE DUP2 DUP2 MSTORE SWAP6 SWAP7 SWAP6 SWAP5 POP SWAP1 SWAP3 POP SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x225D JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2232 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x225D JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x2240 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP PUSH1 0x3 DUP4 ADD SLOAD PUSH1 0x4 DUP5 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH2 0x100 PUSH1 0x1 DUP7 AND ISZERO MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP6 SWAP7 PUSH1 0xFF SWAP1 SWAP5 AND SWAP6 SWAP4 SWAP5 POP SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x2316 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x22EB JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x2316 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x22F9 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP PUSH1 0x5 DUP4 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP5 SWAP6 SWAP5 SWAP4 POP SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x23C4 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2399 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x23C4 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x23A7 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP DUP7 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD DUP3 SWAP1 DUP2 LT PUSH2 0x23DC JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP1 PUSH1 0x0 PUSH1 0x60 DUP1 PUSH1 0x0 PUSH1 0x3 DUP9 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x245F JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x2422 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP5 DUP6 MSTORE POP PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP1 SUB ADD SWAP1 SWAP3 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 POP PUSH2 0x24CE SWAP2 POP DUP3 SWAP1 POP PUSH2 0x11D8 JUMP JUMPDEST SWAP5 SWAP14 SWAP4 SWAP13 POP SWAP2 SWAP11 POP SWAP9 POP SWAP7 POP SWAP1 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x2548 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x251D JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x2578 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP5 SWAP2 AND ISZERO ISZERO PUSH2 0x25AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 DUP4 MLOAD DUP5 DUP2 MSTORE PUSH1 0x4 DUP3 ADD DUP1 SLOAD PUSH1 0x2 SWAP6 DUP2 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD AND SWAP5 SWAP1 SWAP5 DIV SWAP5 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 SWAP7 POP PUSH32 0x5B19F79AC4E8CFA820815502E11615F1A449E28155DC289EC5CAC1A11F908694 SWAP4 DUP9 SWAP3 DUP3 SWAP2 SWAP1 DUP3 ADD SWAP1 PUSH1 0x60 DUP4 ADD SWAP1 DUP7 SWAP1 DUP1 ISZERO PUSH2 0x2699 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x266E JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x2699 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x267C JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP DUP4 DUP2 SUB DUP3 MSTORE DUP5 MLOAD DUP2 MSTORE DUP5 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP7 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x26CD JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x26B5 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x26FA 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 SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 DUP3 MLOAD PUSH2 0x11D1 SWAP1 PUSH1 0x4 DUP5 ADD SWAP1 PUSH1 0x20 DUP7 ADD SWAP1 PUSH2 0x2C86 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP1 PUSH1 0x0 PUSH1 0x60 DUP1 PUSH1 0x0 PUSH1 0x2 DUP9 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x20 DUP4 LT PUSH2 0x245F JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x2422 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x279E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP5 SWAP2 AND ISZERO ISZERO PUSH2 0x27D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 DUP3 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x283C JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x27FF JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP5 DUP6 MSTORE POP PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP1 SUB ADD SWAP1 SWAP3 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 SWAP1 SWAP3 EQ SWAP2 POP PUSH2 0x28AD SWAP1 POP JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 DUP4 MLOAD DUP5 DUP2 MSTORE PUSH1 0x2 DUP1 DUP4 ADD DUP1 SLOAD SWAP6 DUP7 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP6 AND DIV SWAP5 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 SWAP8 POP PUSH32 0x53D878A6530E56C9BC96548FA0A8CAE4F1D1F49C86B0E934C086B992EBB6998F SWAP4 DUP10 SWAP3 DUP3 SWAP2 SWAP1 DUP3 ADD SWAP1 PUSH1 0x60 DUP4 ADD SWAP1 DUP7 SWAP1 DUP1 ISZERO PUSH2 0x2997 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x296C JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x2997 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x297A JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP DUP4 DUP2 SUB DUP3 MSTORE DUP5 MLOAD DUP2 MSTORE DUP5 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP7 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x29CB JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x29B3 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x29F8 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 SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH1 0x2 DUP4 PUSH1 0x2 ADD PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV DUP1 ISZERO PUSH2 0x2A68 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2A46 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 DUP3 ADD SWAP2 PUSH2 0x2A68 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x2A54 JUMPI JUMPDEST POP POP SWAP3 DUP4 MSTORE POP POP PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 SWAP1 DUP2 ADD DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE DUP6 MLOAD DUP8 SWAP3 PUSH1 0x2 SWAP3 DUP9 SWAP3 DUP3 SWAP2 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x2AF2 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x2AB5 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP5 DUP6 MSTORE POP PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP1 SUB DUP2 ADD SWAP1 SWAP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 OR SWAP1 SWAP4 SSTORE POP DUP6 MLOAD PUSH2 0xEF3 SWAP3 POP PUSH1 0x2 DUP7 ADD SWAP2 DUP8 ADD SWAP1 PUSH2 0x2C86 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x2BB9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0x2C16 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND OR SWAP1 SSTORE JUMPDEST POP JUMP JUMPDEST DUP2 SLOAD DUP2 DUP4 SSTORE DUP2 DUP2 GT ISZERO PUSH2 0x2C3D JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 PUSH2 0x2C3D SWAP2 DUP2 ADD SWAP1 DUP4 ADD PUSH2 0x2D54 JUMP JUMPDEST POP POP POP JUMP JUMPDEST POP DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV PUSH1 0x0 DUP3 SSTORE DUP1 PUSH1 0x1F LT PUSH2 0x2C68 JUMPI POP PUSH2 0x2C16 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP1 PUSH2 0x2C16 SWAP2 SWAP1 PUSH2 0x2D54 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0x2CC7 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x2CF4 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x2CF4 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x2CF4 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x2CD9 JUMP JUMPDEST POP PUSH2 0x2D00 SWAP3 SWAP2 POP PUSH2 0x2D54 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0xC0 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x2550 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x2D00 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x2D5A JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 DUP5 0xe9 GAS EXP 0x2a 0x2f PUSH12 0x98236222635755A082C937F6 PUSH12 0x7DD9529673A6C9FE221F8EB0 STOP 0x29 ",
+ "object": "0x6080604052600436106100e55763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166313baf1e681146100ea5780632fbfeba91461011d5780633550b6d91461019f57806356318820146101f85780637abccac91461026c5780638da5cb5b14610484578063a880319d14610499578063c370c86d146105d0578063e486033914610644578063e5df8b8414610672578063e73fc0c31461068a578063ee8c24b8146106e3578063eef05f6514610748578063efa74f1f146107bc578063f036417f14610815578063f2fde38b14610889575b600080fd5b3480156100f657600080fd5b5061011b73ffffffffffffffffffffffffffffffffffffffff600435166024356108b7565b005b34801561012957600080fd5b506040805160206004803580820135601f8101849004840285018401909552848452610176943694929360249392840191908190840183828082843750949750610efb9650505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156101ab57600080fd5b506040805160206004803580820135601f8101849004840285018401909552848452610176943694929360249392840191908190840183828082843750949750610fb59650505050505050565b34801561020457600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261011b95833573ffffffffffffffffffffffffffffffffffffffff169536956044949193909101919081908401838280828437509497506110069650505050505050565b34801561027857600080fd5b5061029a73ffffffffffffffffffffffffffffffffffffffff600435166111d8565b604051808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001806020018660ff1660ff168152602001806020018060200185810385528a818151815260200191508051906020019080838360005b83811015610321578181015183820152602001610309565b50505050905090810190601f16801561034e5780820380516001836020036101000a031916815260200191505b5085810384528951815289516020918201918b019080838360005b83811015610381578181015183820152602001610369565b50505050905090810190601f1680156103ae5780820380516001836020036101000a031916815260200191505b50858103835287518152875160209182019189019080838360005b838110156103e15781810151838201526020016103c9565b50505050905090810190601f16801561040e5780820380516001836020036101000a031916815260200191505b50858103825286518152865160209182019188019080838360005b83811015610441578181015183820152602001610429565b50505050905090810190601f16801561046e5780820380516001836020036101000a031916815260200191505b509a505050505050505050505060405180910390f35b34801561049057600080fd5b50610176611528565b3480156104a557600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261011b95833573ffffffffffffffffffffffffffffffffffffffff1695369560449491939091019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375050604080516020601f818a01358b0180359182018390048302840183018552818452989b60ff8b35169b909a90999401975091955091820193509150819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a9998810197919650918201945092508291508401838280828437509497506115449650505050505050565b3480156105dc57600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261011b95833573ffffffffffffffffffffffffffffffffffffffff16953695604494919390910191908190840183828082843750949750611cbc9650505050505050565b34801561065057600080fd5b5061029a73ffffffffffffffffffffffffffffffffffffffff600435166120d9565b34801561067e57600080fd5b506101766004356123ce565b34801561069657600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261029a9436949293602493928401919081908401838280828437509497506124039650505050505050565b3480156106ef57600080fd5b506106f86124e3565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561073457818101518382015260200161071c565b505050509050019250505060405180910390f35b34801561075457600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261011b95833573ffffffffffffffffffffffffffffffffffffffff169536956044949193909101919081908401838280828437509497506125539650505050505050565b3480156107c857600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261029a94369492936024939284019190819084018382808284375094975061271e9650505050505050565b34801561082157600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261011b95833573ffffffffffffffffffffffffffffffffffffffff169536956044949193909101919081908401838280828437509497506127799650505050505050565b34801561089557600080fd5b5061011b73ffffffffffffffffffffffffffffffffffffffff60043516612b95565b6000805473ffffffffffffffffffffffffffffffffffffffff1633146108dc57600080fd5b73ffffffffffffffffffffffffffffffffffffffff808416600090815260016020526040902054849116151561091157600080fd5b8373ffffffffffffffffffffffffffffffffffffffff1660048481548110151561093757fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff161461096357600080fd5b600480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061099357fe5b6000918252602090912001546004805473ffffffffffffffffffffffffffffffffffffffff90921691859081106109c657fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190610a459082612c19565b5073ffffffffffffffffffffffffffffffffffffffff80851660009081526001602081815260409283902080546003820154855160ff90911695810186905260a0808252838601805460027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9882161561010002989098011687900491830182905293995091909616957f32c54f1e2ea75844ded7517e7dbcd3895da7cd0c28f9ab9f9cf6ecf5f83762c695929489019360048a019260058b0192918291908201906060830190608084019060c08501908b908015610b655780601f10610b3a57610100808354040283529160200191610b65565b820191906000526020600020905b815481529060010190602001808311610b4857829003601f168201915b50508581038452895460027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010060018416150201909116048082526020909101908a908015610bf75780601f10610bcc57610100808354040283529160200191610bf7565b820191906000526020600020905b815481529060010190602001808311610bda57829003601f168201915b50508581038352875460027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600184161502019091160480825260209091019088908015610c895780601f10610c5e57610100808354040283529160200191610c89565b820191906000526020600020905b815481529060010190602001808311610c6c57829003601f168201915b50508581038252865460027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600184161502019091160480825260209091019087908015610d1b5780601f10610cf057610100808354040283529160200191610d1b565b820191906000526020600020905b815481529060010190602001808311610cfe57829003601f168201915b5050995050505050505050505060405180910390a26002826002016040518082805460018160011615610100020316600290048015610d915780601f10610d6f576101008083540402835291820191610d91565b820191906000526020600020905b815481529060010190602001808311610d7d575b5050915050908152602001604051809103902060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556003826001016040518082805460018160011615610100020316600290048015610e285780601f10610e06576101008083540402835291820191610e28565b820191906000526020600020905b815481529060010190602001808311610e14575b50509283525050604080516020928190038301902080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690915573ffffffffffffffffffffffffffffffffffffffff871660009081526001938490529182208054909116815591610e9f90830182612c42565b610ead600283016000612c42565b6003820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055610ee5600483016000612c42565b610ef3600583016000612c42565b505050505050565b60006003826040518082805190602001908083835b60208310610f4d57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610f10565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905292019485525060405193849003019092205473ffffffffffffffffffffffffffffffffffffffff16949350505050565b600060028260405180828051906020019080838360208310610f4d57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610f10565b6000805473ffffffffffffffffffffffffffffffffffffffff16331461102b57600080fd5b73ffffffffffffffffffffffffffffffffffffffff808416600090815260016020526040902054849116151561106057600080fd5b73ffffffffffffffffffffffffffffffffffffffff84166000818152600160208181526040928390208351848152600582018054600295811615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116949094049481018590529096507fc3168fdc13112e44a031057dbf6c609b33353addb4d8037d24543e22cbfe2acd93889282919082019060608301908690801561114c5780601f106111215761010080835404028352916020019161114c565b820191906000526020600020905b81548152906001019060200180831161112f57829003601f168201915b5050838103825284518152845160209182019186019080838360005b83811015611180578181015183820152602001611168565b50505050905090810190601f1680156111ad5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a282516111d19060058401906020860190612c86565b5050505050565b600060608060006060806111ea612d04565b73ffffffffffffffffffffffffffffffffffffffff888116600090815260016020818152604092839020835160c0810185528154909516855280830180548551600261010096831615969096027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190911694909404601f8101849004840285018401909552848452909385830193928301828280156112cb5780601f106112a0576101008083540402835291602001916112cb565b820191906000526020600020905b8154815290600101906020018083116112ae57829003601f168201915b5050509183525050600282810180546040805160206001841615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190931694909404601f8101839004830285018301909152808452938101939083018282801561137b5780601f106113505761010080835404028352916020019161137b565b820191906000526020600020905b81548152906001019060200180831161135e57829003601f168201915b5050509183525050600382015460ff1660208083019190915260048301805460408051601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600186161561010002019094169390930492830185900485028101850182528281529401939283018282801561143a5780601f1061140f5761010080835404028352916020019161143a565b820191906000526020600020905b81548152906001019060200180831161141d57829003601f168201915b505050918352505060058201805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f81018490048402820184019092528181529382019392918301828280156114ec5780601f106114c1576101008083540402835291602001916114ec565b820191906000526020600020905b8154815290600101906020018083116114cf57829003601f168201915b5050509190925250508151602083015160408401516060850151608086015160a090960151939e929d50909b5099509297509550909350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff16331461156857600080fd5b73ffffffffffffffffffffffffffffffffffffffff8087166000908152600160205260409020548791161561159c57600080fd5b8673ffffffffffffffffffffffffffffffffffffffff811615156115bf57600080fd5b85600073ffffffffffffffffffffffffffffffffffffffff166002826040518082805190602001908083835b6020831061162857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016115eb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905292019485525060405193849003019092205473ffffffffffffffffffffffffffffffffffffffff16929092149150611699905057600080fd5b87600073ffffffffffffffffffffffffffffffffffffffff166003826040518082805190602001908083835b6020831061170257805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016116c5565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905292019485525060405193849003019092205473ffffffffffffffffffffffffffffffffffffffff16929092149150611773905057600080fd5b6040805160c08101825273ffffffffffffffffffffffffffffffffffffffff8c811680835260208084018e81528486018e905260ff8d166060860152608085018c905260a085018b90526000928352600180835295909220845181547fffffffffffffffffffffffff00000000000000000000000000000000000000001694169390931783559051805193949293611812938501929190910190612c86565b506040820151805161182e916002840191602090910190612c86565b5060608201516003820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff90921691909117905560808201518051611882916004840191602090910190612c86565b5060a0820151805161189e916005840191602090910190612c86565b5050600480546001810182556000919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8d161790555060405188518b916002918b9190819060208401908083835b6020831061196657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611929565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199092169116179052920194855250604051938490038101842080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff969096169590951790945550508a518c926003928d9290918291908401908083835b60208310611a4757805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611a0a565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905292019485525060408051948590038201852080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff97881617905560ff8d169085015260a08085528e51908501528d51948f16947fd8d928b0b50ca11d9dc273236b46f3526515b03602f71f3a6af4f45bd9fa9144948f94508e93508d928d928d92918291828201916060840191608085019160c0860191908c019080838360005b83811015611b4f578181015183820152602001611b37565b50505050905090810190601f168015611b7c5780820380516001836020036101000a031916815260200191505b5085810384528951815289516020918201918b019080838360005b83811015611baf578181015183820152602001611b97565b50505050905090810190601f168015611bdc5780820380516001836020036101000a031916815260200191505b50858103835287518152875160209182019189019080838360005b83811015611c0f578181015183820152602001611bf7565b50505050905090810190601f168015611c3c5780820380516001836020036101000a031916815260200191505b50858103825286518152865160209182019188019080838360005b83811015611c6f578181015183820152602001611c57565b50505050905090810190601f168015611c9c5780820380516001836020036101000a031916815260200191505b50995050505050505050505060405180910390a250505050505050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff163314611ce157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8084166000908152600160205260409020548491161515611d1657600080fd5b82600073ffffffffffffffffffffffffffffffffffffffff166003826040518082805190602001908083835b60208310611d7f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611d42565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905292019485525060405193849003019092205473ffffffffffffffffffffffffffffffffffffffff16929092149150611df0905057600080fd5b73ffffffffffffffffffffffffffffffffffffffff851660008181526001602081815260409283902083518481528184018054600295811615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116949094049481018590529097507f4a6dbfc867b179991dec22ff19960f0a94d8d9d891fc556f547764670340e8ae938992829190820190606083019086908015611edb5780601f10611eb057610100808354040283529160200191611edb565b820191906000526020600020905b815481529060010190602001808311611ebe57829003601f168201915b5050838103825284518152845160209182019186019080838360005b83811015611f0f578181015183820152602001611ef7565b50505050905090810190601f168015611f3c5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a26003836001016040518082805460018160011615610100020316600290048015611fac5780601f10611f8a576101008083540402835291820191611fac565b820191906000526020600020905b815481529060010190602001808311611f98575b50509283525050604051908190036020908101822080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905585518792600392889282918401908083835b6020831061203657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611ff9565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905292019485525060405193849003810190932080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9590951694909417909355508551610ef392506001860191870190612c86565b600160208181526000928352604092839020805481840180548651600261010097831615979097027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190911695909504601f810185900485028601850190965285855273ffffffffffffffffffffffffffffffffffffffff909116949193929091908301828280156121ad5780601f10612182576101008083540402835291602001916121ad565b820191906000526020600020905b81548152906001019060200180831161219057829003601f168201915b50505060028085018054604080516020601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600187161502019094169590950492830185900485028101850190915281815295969594509092509083018282801561225d5780601f106122325761010080835404028352916020019161225d565b820191906000526020600020905b81548152906001019060200180831161224057829003601f168201915b50505050600383015460048401805460408051602060026101006001861615027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f8101849004840282018401909252818152959660ff90941695939450908301828280156123165780601f106122eb57610100808354040283529160200191612316565b820191906000526020600020905b8154815290600101906020018083116122f957829003601f168201915b5050505060058301805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f81018490048402820184019092528181529495949350908301828280156123c45780601f10612399576101008083540402835291602001916123c4565b820191906000526020600020905b8154815290600101906020018083116123a757829003601f168201915b5050505050905086565b60048054829081106123dc57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6000606080600060608060006003886040518082805190602001908083835b6020831061245f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612422565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905292019485525060405193849003019092205473ffffffffffffffffffffffffffffffffffffffff1692506124ce91508290506111d8565b949d939c50919a509850965090945092505050565b6060600480548060200260200160405190810160405280929190818152602001828054801561254857602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161251d575b505050505090505b90565b6000805473ffffffffffffffffffffffffffffffffffffffff16331461257857600080fd5b73ffffffffffffffffffffffffffffffffffffffff80841660009081526001602052604090205484911615156125ad57600080fd5b73ffffffffffffffffffffffffffffffffffffffff84166000818152600160208181526040928390208351848152600482018054600295811615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116949094049481018590529096507f5b19f79ac4e8cfa820815502e11615f1a449e28155dc289ec5cac1a11f9086949388928291908201906060830190869080156126995780601f1061266e57610100808354040283529160200191612699565b820191906000526020600020905b81548152906001019060200180831161267c57829003601f168201915b5050838103825284518152845160209182019186019080838360005b838110156126cd5781810151838201526020016126b5565b50505050905090810190601f1680156126fa5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a282516111d19060048401906020860190612c86565b6000606080600060608060006002886040518082805190602001908083836020831061245f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612422565b6000805473ffffffffffffffffffffffffffffffffffffffff16331461279e57600080fd5b73ffffffffffffffffffffffffffffffffffffffff80841660009081526001602052604090205484911615156127d357600080fd5b82600073ffffffffffffffffffffffffffffffffffffffff166002826040518082805190602001908083835b6020831061283c57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016127ff565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905292019485525060405193849003019092205473ffffffffffffffffffffffffffffffffffffffff169290921491506128ad905057600080fd5b73ffffffffffffffffffffffffffffffffffffffff851660008181526001602081815260409283902083518481526002808301805495861615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01909516049481018590529097507f53d878a6530e56c9bc96548fa0a8cae4f1d1f49c86b0e934c086b992ebb6998f9389928291908201906060830190869080156129975780601f1061296c57610100808354040283529160200191612997565b820191906000526020600020905b81548152906001019060200180831161297a57829003601f168201915b5050838103825284518152845160209182019186019080838360005b838110156129cb5781810151838201526020016129b3565b50505050905090810190601f1680156129f85780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a26002836002016040518082805460018160011615610100020316600290048015612a685780601f10612a46576101008083540402835291820191612a68565b820191906000526020600020905b815481529060010190602001808311612a54575b50509283525050604051908190036020908101822080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905585518792600292889282918401908083835b60208310612af257805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612ab5565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905292019485525060405193849003810190932080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9590951694909417909355508551610ef392506002860191870190612c86565b60005473ffffffffffffffffffffffffffffffffffffffff163314612bb957600080fd5b73ffffffffffffffffffffffffffffffffffffffff811615612c1657600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b815481835581811115612c3d57600083815260209020612c3d918101908301612d54565b505050565b50805460018160011615610100020316600290046000825580601f10612c685750612c16565b601f016020900490600052602060002090810190612c169190612d54565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612cc757805160ff1916838001178555612cf4565b82800160010185558215612cf4579182015b82811115612cf4578251825591602001919060010190612cd9565b50612d00929150612d54565b5090565b60c060405190810160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020016060815260200160608152602001600060ff16815260200160608152602001606081525090565b61255091905b80821115612d005760008155600101612d5a5600a165627a7a72305820a2b015e1c6a978406b24e8687202ced017fe0b041c7b9b9d741eb9bcb14a014e0029",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xE5 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x13BAF1E6 DUP2 EQ PUSH2 0xEA JUMPI DUP1 PUSH4 0x2FBFEBA9 EQ PUSH2 0x11D JUMPI DUP1 PUSH4 0x3550B6D9 EQ PUSH2 0x19F JUMPI DUP1 PUSH4 0x56318820 EQ PUSH2 0x1F8 JUMPI DUP1 PUSH4 0x7ABCCAC9 EQ PUSH2 0x26C JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x484 JUMPI DUP1 PUSH4 0xA880319D EQ PUSH2 0x499 JUMPI DUP1 PUSH4 0xC370C86D EQ PUSH2 0x5D0 JUMPI DUP1 PUSH4 0xE4860339 EQ PUSH2 0x644 JUMPI DUP1 PUSH4 0xE5DF8B84 EQ PUSH2 0x672 JUMPI DUP1 PUSH4 0xE73FC0C3 EQ PUSH2 0x68A JUMPI DUP1 PUSH4 0xEE8C24B8 EQ PUSH2 0x6E3 JUMPI DUP1 PUSH4 0xEEF05F65 EQ PUSH2 0x748 JUMPI DUP1 PUSH4 0xEFA74F1F EQ PUSH2 0x7BC JUMPI DUP1 PUSH4 0xF036417F EQ PUSH2 0x815 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x889 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11B PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD PUSH2 0x8B7 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x129 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 DUP1 CALLDATALOAD DUP1 DUP3 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x176 SWAP5 CALLDATASIZE SWAP5 SWAP3 SWAP4 PUSH1 0x24 SWAP4 SWAP3 DUP5 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0xEFB SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 DUP1 CALLDATALOAD DUP1 DUP3 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x176 SWAP5 CALLDATASIZE SWAP5 SWAP3 SWAP4 PUSH1 0x24 SWAP4 SWAP3 DUP5 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0xFB5 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x204 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 PUSH1 0x24 DUP1 CALLDATALOAD DUP3 DUP2 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP6 SWAP1 DIV DUP6 MUL DUP7 ADD DUP6 ADD SWAP1 SWAP7 MSTORE DUP6 DUP6 MSTORE PUSH2 0x11B SWAP6 DUP4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP6 CALLDATASIZE SWAP6 PUSH1 0x44 SWAP5 SWAP2 SWAP4 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x1006 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x278 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x29A PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x11D8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP7 PUSH1 0xFF AND PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP6 DUP2 SUB DUP6 MSTORE DUP11 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x321 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x309 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x34E 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 DUP6 DUP2 SUB DUP5 MSTORE DUP10 MLOAD DUP2 MSTORE DUP10 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP12 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x381 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x369 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x3AE 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 DUP6 DUP2 SUB DUP4 MSTORE DUP8 MLOAD DUP2 MSTORE DUP8 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP10 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3E1 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3C9 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x40E 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 DUP6 DUP2 SUB DUP3 MSTORE DUP7 MLOAD DUP2 MSTORE DUP7 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP9 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x441 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x429 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x46E 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 SWAP11 POP POP POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x490 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x176 PUSH2 0x1528 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 PUSH1 0x24 DUP1 CALLDATALOAD DUP3 DUP2 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP6 SWAP1 DIV DUP6 MUL DUP7 ADD DUP6 ADD SWAP1 SWAP7 MSTORE DUP6 DUP6 MSTORE PUSH2 0x11B SWAP6 DUP4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP6 CALLDATASIZE SWAP6 PUSH1 0x44 SWAP5 SWAP2 SWAP4 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F DUP10 CALLDATALOAD DUP12 ADD DUP1 CALLDATALOAD SWAP2 DUP3 ADD DUP4 SWAP1 DIV DUP4 MUL DUP5 ADD DUP4 ADD SWAP1 SWAP5 MSTORE DUP1 DUP4 MSTORE SWAP8 SWAP11 SWAP10 SWAP9 DUP2 ADD SWAP8 SWAP2 SWAP7 POP SWAP2 DUP3 ADD SWAP5 POP SWAP3 POP DUP3 SWAP2 POP DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F DUP2 DUP11 ADD CALLDATALOAD DUP12 ADD DUP1 CALLDATALOAD SWAP2 DUP3 ADD DUP4 SWAP1 DIV DUP4 MUL DUP5 ADD DUP4 ADD DUP6 MSTORE DUP2 DUP5 MSTORE SWAP9 SWAP12 PUSH1 0xFF DUP12 CALLDATALOAD AND SWAP12 SWAP1 SWAP11 SWAP1 SWAP10 SWAP5 ADD SWAP8 POP SWAP2 SWAP6 POP SWAP2 DUP3 ADD SWAP4 POP SWAP2 POP DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F DUP10 CALLDATALOAD DUP12 ADD DUP1 CALLDATALOAD SWAP2 DUP3 ADD DUP4 SWAP1 DIV DUP4 MUL DUP5 ADD DUP4 ADD SWAP1 SWAP5 MSTORE DUP1 DUP4 MSTORE SWAP8 SWAP11 SWAP10 SWAP9 DUP2 ADD SWAP8 SWAP2 SWAP7 POP SWAP2 DUP3 ADD SWAP5 POP SWAP3 POP DUP3 SWAP2 POP DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x1544 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 PUSH1 0x24 DUP1 CALLDATALOAD DUP3 DUP2 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP6 SWAP1 DIV DUP6 MUL DUP7 ADD DUP6 ADD SWAP1 SWAP7 MSTORE DUP6 DUP6 MSTORE PUSH2 0x11B SWAP6 DUP4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP6 CALLDATASIZE SWAP6 PUSH1 0x44 SWAP5 SWAP2 SWAP4 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x1CBC SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x650 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x29A PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x20D9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x67E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x176 PUSH1 0x4 CALLDATALOAD PUSH2 0x23CE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x696 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 DUP1 CALLDATALOAD DUP1 DUP3 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x29A SWAP5 CALLDATASIZE SWAP5 SWAP3 SWAP4 PUSH1 0x24 SWAP4 SWAP3 DUP5 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x2403 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6F8 PUSH2 0x24E3 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 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x734 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x71C JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x754 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 PUSH1 0x24 DUP1 CALLDATALOAD DUP3 DUP2 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP6 SWAP1 DIV DUP6 MUL DUP7 ADD DUP6 ADD SWAP1 SWAP7 MSTORE DUP6 DUP6 MSTORE PUSH2 0x11B SWAP6 DUP4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP6 CALLDATASIZE SWAP6 PUSH1 0x44 SWAP5 SWAP2 SWAP4 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x2553 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 DUP1 CALLDATALOAD DUP1 DUP3 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE PUSH2 0x29A SWAP5 CALLDATASIZE SWAP5 SWAP3 SWAP4 PUSH1 0x24 SWAP4 SWAP3 DUP5 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x271E SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x821 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x4 PUSH1 0x24 DUP1 CALLDATALOAD DUP3 DUP2 ADD CALLDATALOAD PUSH1 0x1F DUP2 ADD DUP6 SWAP1 DIV DUP6 MUL DUP7 ADD DUP6 ADD SWAP1 SWAP7 MSTORE DUP6 DUP6 MSTORE PUSH2 0x11B SWAP6 DUP4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP6 CALLDATASIZE SWAP6 PUSH1 0x44 SWAP5 SWAP2 SWAP4 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY POP SWAP5 SWAP8 POP PUSH2 0x2779 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x895 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11B PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x2B95 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x8DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP5 SWAP2 AND ISZERO ISZERO PUSH2 0x911 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x4 DUP5 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x937 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x963 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0x993 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x4 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 DUP6 SWAP1 DUP2 LT PUSH2 0x9C6 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x4 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 PUSH2 0xA45 SWAP1 DUP3 PUSH2 0x2C19 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x3 DUP3 ADD SLOAD DUP6 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND SWAP6 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0xA0 DUP1 DUP3 MSTORE DUP4 DUP7 ADD DUP1 SLOAD PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP9 DUP3 AND ISZERO PUSH2 0x100 MUL SWAP9 SWAP1 SWAP9 ADD AND DUP8 SWAP1 DIV SWAP2 DUP4 ADD DUP3 SWAP1 MSTORE SWAP4 SWAP10 POP SWAP2 SWAP1 SWAP7 AND SWAP6 PUSH32 0x32C54F1E2EA75844DED7517E7DBCD3895DA7CD0C28F9AB9F9CF6ECF5F83762C6 SWAP6 SWAP3 SWAP5 DUP10 ADD SWAP4 PUSH1 0x4 DUP11 ADD SWAP3 PUSH1 0x5 DUP12 ADD SWAP3 SWAP2 DUP3 SWAP2 SWAP1 DUP3 ADD SWAP1 PUSH1 0x60 DUP4 ADD SWAP1 PUSH1 0x80 DUP5 ADD SWAP1 PUSH1 0xC0 DUP6 ADD SWAP1 DUP12 SWAP1 DUP1 ISZERO PUSH2 0xB65 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xB3A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xB65 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xB48 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP DUP6 DUP2 SUB DUP5 MSTORE DUP10 SLOAD PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP5 AND ISZERO MUL ADD SWAP1 SWAP2 AND DIV DUP1 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 DUP11 SWAP1 DUP1 ISZERO PUSH2 0xBF7 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xBCC JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xBF7 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xBDA JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP DUP6 DUP2 SUB DUP4 MSTORE DUP8 SLOAD PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP5 AND ISZERO MUL ADD SWAP1 SWAP2 AND DIV DUP1 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 DUP9 SWAP1 DUP1 ISZERO PUSH2 0xC89 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xC5E JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xC89 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xC6C JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP DUP6 DUP2 SUB DUP3 MSTORE DUP7 SLOAD PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP5 AND ISZERO MUL ADD SWAP1 SWAP2 AND DIV DUP1 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 DUP8 SWAP1 DUP1 ISZERO PUSH2 0xD1B JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xCF0 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xD1B JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xCFE JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP SWAP10 POP POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH1 0x2 DUP3 PUSH1 0x2 ADD PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV DUP1 ISZERO PUSH2 0xD91 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xD6F JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 DUP3 ADD SWAP2 PUSH2 0xD91 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xD7D JUMPI JUMPDEST POP POP SWAP2 POP POP SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 SSTORE PUSH1 0x3 DUP3 PUSH1 0x1 ADD PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV DUP1 ISZERO PUSH2 0xE28 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xE06 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 DUP3 ADD SWAP2 PUSH2 0xE28 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xE14 JUMPI JUMPDEST POP POP SWAP3 DUP4 MSTORE POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 SWAP3 DUP2 SWAP1 SUB DUP4 ADD SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 AND SWAP1 SWAP2 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 SWAP4 DUP5 SWAP1 MSTORE SWAP2 DUP3 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 AND DUP2 SSTORE SWAP2 PUSH2 0xE9F SWAP1 DUP4 ADD DUP3 PUSH2 0x2C42 JUMP JUMPDEST PUSH2 0xEAD PUSH1 0x2 DUP4 ADD PUSH1 0x0 PUSH2 0x2C42 JUMP JUMPDEST PUSH1 0x3 DUP3 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE PUSH2 0xEE5 PUSH1 0x4 DUP4 ADD PUSH1 0x0 PUSH2 0x2C42 JUMP JUMPDEST PUSH2 0xEF3 PUSH1 0x5 DUP4 ADD PUSH1 0x0 PUSH2 0x2C42 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x3 DUP3 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xF4D JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xF10 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP5 DUP6 MSTORE POP PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP1 SUB ADD SWAP1 SWAP3 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x2 DUP3 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x20 DUP4 LT PUSH2 0xF4D JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xF10 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x102B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP5 SWAP2 AND ISZERO ISZERO PUSH2 0x1060 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 DUP4 MLOAD DUP5 DUP2 MSTORE PUSH1 0x5 DUP3 ADD DUP1 SLOAD PUSH1 0x2 SWAP6 DUP2 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD AND SWAP5 SWAP1 SWAP5 DIV SWAP5 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 SWAP7 POP PUSH32 0xC3168FDC13112E44A031057DBF6C609B33353ADDB4D8037D24543E22CBFE2ACD SWAP4 DUP9 SWAP3 DUP3 SWAP2 SWAP1 DUP3 ADD SWAP1 PUSH1 0x60 DUP4 ADD SWAP1 DUP7 SWAP1 DUP1 ISZERO PUSH2 0x114C JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1121 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x114C JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x112F JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP DUP4 DUP2 SUB DUP3 MSTORE DUP5 MLOAD DUP2 MSTORE DUP5 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP7 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1180 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1168 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x11AD 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 SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 DUP3 MLOAD PUSH2 0x11D1 SWAP1 PUSH1 0x5 DUP5 ADD SWAP1 PUSH1 0x20 DUP7 ADD SWAP1 PUSH2 0x2C86 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP1 PUSH1 0x0 PUSH1 0x60 DUP1 PUSH2 0x11EA PUSH2 0x2D04 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 DUP4 MLOAD PUSH1 0xC0 DUP2 ADD DUP6 MSTORE DUP2 SLOAD SWAP1 SWAP6 AND DUP6 MSTORE DUP1 DUP4 ADD DUP1 SLOAD DUP6 MLOAD PUSH1 0x2 PUSH2 0x100 SWAP7 DUP4 AND ISZERO SWAP7 SWAP1 SWAP7 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP2 AND SWAP5 SWAP1 SWAP5 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP5 MSTORE SWAP1 SWAP4 DUP6 DUP4 ADD SWAP4 SWAP3 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x12CB JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x12A0 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x12CB JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x12AE JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP SWAP2 DUP4 MSTORE POP POP PUSH1 0x2 DUP3 DUP2 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1 DUP5 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP4 AND SWAP5 SWAP1 SWAP5 DIV PUSH1 0x1F DUP2 ADD DUP4 SWAP1 DIV DUP4 MUL DUP6 ADD DUP4 ADD SWAP1 SWAP2 MSTORE DUP1 DUP5 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x137B JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1350 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x137B JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x135E JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP SWAP2 DUP4 MSTORE POP POP PUSH1 0x3 DUP3 ADD SLOAD PUSH1 0xFF AND PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x4 DUP4 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 DUP7 AND ISZERO PUSH2 0x100 MUL ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV SWAP3 DUP4 ADD DUP6 SWAP1 DIV DUP6 MUL DUP2 ADD DUP6 ADD DUP3 MSTORE DUP3 DUP2 MSTORE SWAP5 ADD SWAP4 SWAP3 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x143A JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x140F JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x143A JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x141D JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP SWAP2 DUP4 MSTORE POP POP PUSH1 0x5 DUP3 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP4 DUP3 ADD SWAP4 SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x14EC JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x14C1 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x14EC JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x14CF JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP SWAP2 SWAP1 SWAP3 MSTORE POP POP DUP2 MLOAD PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0x60 DUP6 ADD MLOAD PUSH1 0x80 DUP7 ADD MLOAD PUSH1 0xA0 SWAP1 SWAP7 ADD MLOAD SWAP4 SWAP15 SWAP3 SWAP14 POP SWAP1 SWAP12 POP SWAP10 POP SWAP3 SWAP8 POP SWAP6 POP SWAP1 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x1568 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP8 SWAP2 AND ISZERO PUSH2 0x159C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO ISZERO PUSH2 0x15BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 DUP3 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1628 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x15EB JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP5 DUP6 MSTORE POP PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP1 SUB ADD SWAP1 SWAP3 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 SWAP1 SWAP3 EQ SWAP2 POP PUSH2 0x1699 SWAP1 POP JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x3 DUP3 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1702 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x16C5 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP5 DUP6 MSTORE POP PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP1 SUB ADD SWAP1 SWAP3 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 SWAP1 SWAP3 EQ SWAP2 POP PUSH2 0x1773 SWAP1 POP JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xC0 DUP2 ADD DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 DUP2 AND DUP1 DUP4 MSTORE PUSH1 0x20 DUP1 DUP5 ADD DUP15 DUP2 MSTORE DUP5 DUP7 ADD DUP15 SWAP1 MSTORE PUSH1 0xFF DUP14 AND PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x80 DUP6 ADD DUP13 SWAP1 MSTORE PUSH1 0xA0 DUP6 ADD DUP12 SWAP1 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x1 DUP1 DUP4 MSTORE SWAP6 SWAP1 SWAP3 KECCAK256 DUP5 MLOAD DUP2 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP5 AND SWAP4 SWAP1 SWAP4 OR DUP4 SSTORE SWAP1 MLOAD DUP1 MLOAD SWAP4 SWAP5 SWAP3 SWAP4 PUSH2 0x1812 SWAP4 DUP6 ADD SWAP3 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x2C86 JUMP JUMPDEST POP PUSH1 0x40 DUP3 ADD MLOAD DUP1 MLOAD PUSH2 0x182E SWAP2 PUSH1 0x2 DUP5 ADD SWAP2 PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x2C86 JUMP JUMPDEST POP PUSH1 0x60 DUP3 ADD MLOAD PUSH1 0x3 DUP3 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0xFF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x80 DUP3 ADD MLOAD DUP1 MLOAD PUSH2 0x1882 SWAP2 PUSH1 0x4 DUP5 ADD SWAP2 PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x2C86 JUMP JUMPDEST POP PUSH1 0xA0 DUP3 ADD MLOAD DUP1 MLOAD PUSH2 0x189E SWAP2 PUSH1 0x5 DUP5 ADD SWAP2 PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x2C86 JUMP JUMPDEST POP POP PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 DUP2 ADD DUP3 SSTORE PUSH1 0x0 SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP14 AND OR SWAP1 SSTORE POP PUSH1 0x40 MLOAD DUP9 MLOAD DUP12 SWAP2 PUSH1 0x2 SWAP2 DUP12 SWAP2 SWAP1 DUP2 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1966 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1929 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP5 DUP6 MSTORE POP PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP1 SUB DUP2 ADD DUP5 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP7 SWAP1 SWAP7 AND SWAP6 SWAP1 SWAP6 OR SWAP1 SWAP5 SSTORE POP POP DUP11 MLOAD DUP13 SWAP3 PUSH1 0x3 SWAP3 DUP14 SWAP3 SWAP1 SWAP2 DUP3 SWAP2 SWAP1 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1A47 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1A0A JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP5 DUP6 MSTORE POP PUSH1 0x40 DUP1 MLOAD SWAP5 DUP6 SWAP1 SUB DUP3 ADD DUP6 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP8 DUP9 AND OR SWAP1 SSTORE PUSH1 0xFF DUP14 AND SWAP1 DUP6 ADD MSTORE PUSH1 0xA0 DUP1 DUP6 MSTORE DUP15 MLOAD SWAP1 DUP6 ADD MSTORE DUP14 MLOAD SWAP5 DUP16 AND SWAP5 PUSH32 0xD8D928B0B50CA11D9DC273236B46F3526515B03602F71F3A6AF4F45BD9FA9144 SWAP5 DUP16 SWAP5 POP DUP15 SWAP4 POP DUP14 SWAP3 DUP14 SWAP3 DUP14 SWAP3 SWAP2 DUP3 SWAP2 DUP3 DUP3 ADD SWAP2 PUSH1 0x60 DUP5 ADD SWAP2 PUSH1 0x80 DUP6 ADD SWAP2 PUSH1 0xC0 DUP7 ADD SWAP2 SWAP1 DUP13 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1B4F JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1B37 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1B7C 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 DUP6 DUP2 SUB DUP5 MSTORE DUP10 MLOAD DUP2 MSTORE DUP10 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP12 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1BAF JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1B97 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1BDC 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 DUP6 DUP2 SUB DUP4 MSTORE DUP8 MLOAD DUP2 MSTORE DUP8 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP10 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1C0F JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1BF7 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1C3C 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 DUP6 DUP2 SUB DUP3 MSTORE DUP7 MLOAD DUP2 MSTORE DUP7 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP9 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1C6F JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1C57 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1C9C 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 SWAP10 POP POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x1CE1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP5 SWAP2 AND ISZERO ISZERO PUSH2 0x1D16 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x3 DUP3 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1D7F JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1D42 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP5 DUP6 MSTORE POP PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP1 SUB ADD SWAP1 SWAP3 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 SWAP1 SWAP3 EQ SWAP2 POP PUSH2 0x1DF0 SWAP1 POP JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 DUP4 MLOAD DUP5 DUP2 MSTORE DUP2 DUP5 ADD DUP1 SLOAD PUSH1 0x2 SWAP6 DUP2 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD AND SWAP5 SWAP1 SWAP5 DIV SWAP5 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 SWAP8 POP PUSH32 0x4A6DBFC867B179991DEC22FF19960F0A94D8D9D891FC556F547764670340E8AE SWAP4 DUP10 SWAP3 DUP3 SWAP2 SWAP1 DUP3 ADD SWAP1 PUSH1 0x60 DUP4 ADD SWAP1 DUP7 SWAP1 DUP1 ISZERO PUSH2 0x1EDB JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1EB0 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1EDB JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1EBE JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP DUP4 DUP2 SUB DUP3 MSTORE DUP5 MLOAD DUP2 MSTORE DUP5 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP7 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1F0F JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1EF7 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1F3C 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 SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH1 0x3 DUP4 PUSH1 0x1 ADD PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV DUP1 ISZERO PUSH2 0x1FAC JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1F8A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 DUP3 ADD SWAP2 PUSH2 0x1FAC JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1F98 JUMPI JUMPDEST POP POP SWAP3 DUP4 MSTORE POP POP PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 SWAP1 DUP2 ADD DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE DUP6 MLOAD DUP8 SWAP3 PUSH1 0x3 SWAP3 DUP9 SWAP3 DUP3 SWAP2 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x2036 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1FF9 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP5 DUP6 MSTORE POP PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP1 SUB DUP2 ADD SWAP1 SWAP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 OR SWAP1 SWAP4 SSTORE POP DUP6 MLOAD PUSH2 0xEF3 SWAP3 POP PUSH1 0x1 DUP7 ADD SWAP2 DUP8 ADD SWAP1 PUSH2 0x2C86 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 DUP1 SLOAD DUP2 DUP5 ADD DUP1 SLOAD DUP7 MLOAD PUSH1 0x2 PUSH2 0x100 SWAP8 DUP4 AND ISZERO SWAP8 SWAP1 SWAP8 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP2 AND SWAP6 SWAP1 SWAP6 DIV PUSH1 0x1F DUP2 ADD DUP6 SWAP1 DIV DUP6 MUL DUP7 ADD DUP6 ADD SWAP1 SWAP7 MSTORE DUP6 DUP6 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP5 SWAP2 SWAP4 SWAP3 SWAP1 SWAP2 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x21AD JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2182 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x21AD JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x2190 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP PUSH1 0x2 DUP1 DUP6 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP8 AND ISZERO MUL ADD SWAP1 SWAP5 AND SWAP6 SWAP1 SWAP6 DIV SWAP3 DUP4 ADD DUP6 SWAP1 DIV DUP6 MUL DUP2 ADD DUP6 ADD SWAP1 SWAP2 MSTORE DUP2 DUP2 MSTORE SWAP6 SWAP7 SWAP6 SWAP5 POP SWAP1 SWAP3 POP SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x225D JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2232 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x225D JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x2240 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP PUSH1 0x3 DUP4 ADD SLOAD PUSH1 0x4 DUP5 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH2 0x100 PUSH1 0x1 DUP7 AND ISZERO MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP6 SWAP7 PUSH1 0xFF SWAP1 SWAP5 AND SWAP6 SWAP4 SWAP5 POP SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x2316 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x22EB JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x2316 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x22F9 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP PUSH1 0x5 DUP4 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP5 SWAP6 SWAP5 SWAP4 POP SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x23C4 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2399 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x23C4 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x23A7 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP DUP7 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD DUP3 SWAP1 DUP2 LT PUSH2 0x23DC JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP1 PUSH1 0x0 PUSH1 0x60 DUP1 PUSH1 0x0 PUSH1 0x3 DUP9 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x245F JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x2422 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP5 DUP6 MSTORE POP PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP1 SUB ADD SWAP1 SWAP3 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 POP PUSH2 0x24CE SWAP2 POP DUP3 SWAP1 POP PUSH2 0x11D8 JUMP JUMPDEST SWAP5 SWAP14 SWAP4 SWAP13 POP SWAP2 SWAP11 POP SWAP9 POP SWAP7 POP SWAP1 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x2548 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x251D JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x2578 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP5 SWAP2 AND ISZERO ISZERO PUSH2 0x25AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 DUP4 MLOAD DUP5 DUP2 MSTORE PUSH1 0x4 DUP3 ADD DUP1 SLOAD PUSH1 0x2 SWAP6 DUP2 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD AND SWAP5 SWAP1 SWAP5 DIV SWAP5 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 SWAP7 POP PUSH32 0x5B19F79AC4E8CFA820815502E11615F1A449E28155DC289EC5CAC1A11F908694 SWAP4 DUP9 SWAP3 DUP3 SWAP2 SWAP1 DUP3 ADD SWAP1 PUSH1 0x60 DUP4 ADD SWAP1 DUP7 SWAP1 DUP1 ISZERO PUSH2 0x2699 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x266E JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x2699 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x267C JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP DUP4 DUP2 SUB DUP3 MSTORE DUP5 MLOAD DUP2 MSTORE DUP5 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP7 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x26CD JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x26B5 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x26FA 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 SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 DUP3 MLOAD PUSH2 0x11D1 SWAP1 PUSH1 0x4 DUP5 ADD SWAP1 PUSH1 0x20 DUP7 ADD SWAP1 PUSH2 0x2C86 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP1 PUSH1 0x0 PUSH1 0x60 DUP1 PUSH1 0x0 PUSH1 0x2 DUP9 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x20 DUP4 LT PUSH2 0x245F JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x2422 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x279E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP5 SWAP2 AND ISZERO ISZERO PUSH2 0x27D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 DUP3 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x283C JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x27FF JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP5 DUP6 MSTORE POP PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP1 SUB ADD SWAP1 SWAP3 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 SWAP1 SWAP3 EQ SWAP2 POP PUSH2 0x28AD SWAP1 POP JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 DUP4 MLOAD DUP5 DUP2 MSTORE PUSH1 0x2 DUP1 DUP4 ADD DUP1 SLOAD SWAP6 DUP7 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP6 AND DIV SWAP5 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 SWAP8 POP PUSH32 0x53D878A6530E56C9BC96548FA0A8CAE4F1D1F49C86B0E934C086B992EBB6998F SWAP4 DUP10 SWAP3 DUP3 SWAP2 SWAP1 DUP3 ADD SWAP1 PUSH1 0x60 DUP4 ADD SWAP1 DUP7 SWAP1 DUP1 ISZERO PUSH2 0x2997 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x296C JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x2997 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x297A JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP DUP4 DUP2 SUB DUP3 MSTORE DUP5 MLOAD DUP2 MSTORE DUP5 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP7 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x29CB JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x29B3 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x29F8 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 SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH1 0x2 DUP4 PUSH1 0x2 ADD PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV DUP1 ISZERO PUSH2 0x2A68 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2A46 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 DUP3 ADD SWAP2 PUSH2 0x2A68 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x2A54 JUMPI JUMPDEST POP POP SWAP3 DUP4 MSTORE POP POP PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 SWAP1 DUP2 ADD DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE DUP6 MLOAD DUP8 SWAP3 PUSH1 0x2 SWAP3 DUP9 SWAP3 DUP3 SWAP2 DUP5 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x2AF2 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x2AB5 JUMP JUMPDEST MLOAD DUP2 MLOAD PUSH1 0x20 SWAP4 DUP5 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP3 AND SWAP2 AND OR SWAP1 MSTORE SWAP3 ADD SWAP5 DUP6 MSTORE POP PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP1 SUB DUP2 ADD SWAP1 SWAP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 OR SWAP1 SWAP4 SSTORE POP DUP6 MLOAD PUSH2 0xEF3 SWAP3 POP PUSH1 0x2 DUP7 ADD SWAP2 DUP8 ADD SWAP1 PUSH2 0x2C86 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x2BB9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0x2C16 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND OR SWAP1 SSTORE JUMPDEST POP JUMP JUMPDEST DUP2 SLOAD DUP2 DUP4 SSTORE DUP2 DUP2 GT ISZERO PUSH2 0x2C3D JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 PUSH2 0x2C3D SWAP2 DUP2 ADD SWAP1 DUP4 ADD PUSH2 0x2D54 JUMP JUMPDEST POP POP POP JUMP JUMPDEST POP DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV PUSH1 0x0 DUP3 SSTORE DUP1 PUSH1 0x1F LT PUSH2 0x2C68 JUMPI POP PUSH2 0x2C16 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP1 PUSH2 0x2C16 SWAP2 SWAP1 PUSH2 0x2D54 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0x2CC7 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x2CF4 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x2CF4 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x2CF4 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x2CD9 JUMP JUMPDEST POP PUSH2 0x2D00 SWAP3 SWAP2 POP PUSH2 0x2D54 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0xC0 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x2550 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x2D00 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x2D5A JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 LOG2 0xb0 ISZERO 0xe1 0xc6 0xa9 PUSH25 0x406B24E8687202CED017FE0B041C7B9B9D741EB9BCB14A014E STOP 0x29 ",
"sourceMap": "886:8364:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3940:650;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3940:650:1;;;;;;;;;;;7067:114;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7067:114:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7067:114:1;;-1:-1:-1;7067:114:1;;-1:-1:-1;;;;;;;7067:114:1;;;;;;;;;;;;;;;;;;;;6781:122;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6781:122:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6781:122:1;;-1:-1:-1;6781:122:1;;-1:-1:-1;;;;;;;6781:122:1;6273:295;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6273:295:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6273:295:1;;-1:-1:-1;6273:295:1;;-1:-1:-1;;;;;;;6273:295:1;7345:550;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7345:550:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;7345:550:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7345:550:1;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;7345:550:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7345:550:1;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;7345:550:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7345:550:1;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;7345:550:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;223:20:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;223:20:0;;;;2960:852:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2960:852:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2960:852:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2960:852:1;;;;-1:-1:-1;2960:852:1;-1:-1:-1;2960:852:1;;-1:-1:-1;2960:852:1;;;;;;;;-1:-1:-1;;2960:852:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2960:852:1;;-1:-1:-1;2960:852:1;;;;-1:-1:-1;2960:852:1;-1:-1:-1;2960:852:1;;;;;;;;;;-1:-1:-1;;2960:852:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2960:852:1;;;;-1:-1:-1;2960:852:1;-1:-1:-1;2960:852:1;;-1:-1:-1;2960:852:1;;;;;;;;-1:-1:-1;2960:852:1;;-1:-1:-1;2960:852:1;;-1:-1:-1;;;;;;;2960:852:1;4738:370;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4738:370:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4738:370:1;;-1:-1:-1;4738:370:1;;-1:-1:-1;;;;;;;4738:370:1;1656:48;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1656:48:1;;;;;;;1803:31;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1803:31:1;;;;;8052:392;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8052:392:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8052:392:1;;-1:-1:-1;8052:392:1;;-1:-1:-1;;;;;;;8052:392:1;9117:131;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9117:131:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;9117:131:1;;;;;;;;;;;;;;;;;5820:288;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5820:288:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5820:288:1;;-1:-1:-1;5820:288:1;;-1:-1:-1;;;;;;;5820:288:1;8607:400;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8607:400:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8607:400:1;;-1:-1:-1;8607:400:1;;-1:-1:-1;;;;;;;8607:400:1;5262:396;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5262:396:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5262:396:1;;-1:-1:-1;5262:396:1;;-1:-1:-1;;;;;;;5262:396:1;396:140:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;396:140:0;;;;;;;3940:650:1;4230:27;366:5:0;;;;352:10;:19;344:28;;;;;;2070:34:1;:14;;;2102:1;2070:14;;;:6;:14;;;;;:20;4043:6;;2070:20;:34;;2062:43;;;;;;4099:6;4073:32;;:14;4088:6;4073:22;;;;;;;;;;;;;;;;;;;;;;:32;4065:41;;;;;;4142:14;4157:21;;:25;;;;4142:41;;;;;;;;;;;;;;;;4117:14;:22;;4142:41;;;;;4132:6;;4117:22;;;;;;;;;;;;;;;:66;;;;;;;;;;;;;;;4193:14;:26;;;;;;;;;:::i;:::-;-1:-1:-1;4260:14:1;;;;;;;;:6;:14;;;;;;;;;4312:11;;4387:14;;;;4284:184;;4387:14;;;;4284:184;;;;;;;;;;4337:10;;;4284:184;;4361:12;4284:184;;;;;4312:11;4284:184;;;;;;;;;;;;;;;4260:14;;-1:-1:-1;4312:11:1;;;;;4284:184;;4337:10;;4361:12;;;4415:14;;;;4443:15;;;;4284:184;;;;;;;;;;;;;;;;;;;4337:10;;4284:184;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4284:184:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4284:184:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4284:184:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4485:13;4499:5;:12;;4485:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4478:34;;;;;;;;;;;4529:11;4541:5;:10;;4529:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4529:23:1;;;-1:-1:-1;;4529:23:1;;;;;;;;;;;;4522:30;;;;;;;;;;4569:14;;-1:-1:-1;4569:14:1;;;-1:-1:-1;4569:14:1;;;;;;;4562:21;;;;;;;4569:14;4562:21;;;;-1:-1:-1;4562:21:1;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;382:1:0;3940:650:1;;;:::o;7067:114::-;7130:7;7156:11;7168:5;7156:18;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;365:33;;7156:18:1;;;;;-1:-1:-1;7156:18:1;;;;;;;;;;;;;;7067:114;-1:-1:-1;;;;7067:114:1:o;6781:122::-;6848:7;6874:13;6888:7;6874:22;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;6273:295:1;6409:27;366:5:0;;;;352:10;:19;344:28;;;;;;2070:34:1;:14;;;2102:1;2070:14;;;:6;:14;;;;;:20;6387:6;;2070:20;:34;;2062:43;;;;;;6439:14;;;;;;;:6;:14;;;;;;;;;6463:60;;;;;6495:15;;;6463:60;;;;;;;;;;;;;;;;;;;;;;6439:14;;-1:-1:-1;6463:60:1;;6512:10;;6463:60;;;;;;;;;;6495:15;;6463:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6463:60:1;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;6463:60:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6533:28;;;;:15;;;;:28;;;;;:::i;:::-;;382:1:0;6273:295:1;;;:::o;7345:550::-;7449:7;7486:6;7515;7546:5;7579;7612;7658:26;;:::i;:::-;7687:14;;;;;;;;:6;:14;;;;;;;;;7658:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7687:14;;7658:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7658:43:1;;;-1:-1:-1;;7658:43:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7658:43:1;;;-1:-1:-1;;7658:43:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7658:43:1;;;-1:-1:-1;;7658:43:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7658:43:1;;;;-1:-1:-1;;7732:11:1;;7757:10;;;;7781:12;;;;7807:14;;;;7835;;;;7863:15;;;;;7732:11;;7757:10;;-1:-1:-1;7781:12:1;;-1:-1:-1;7807:14:1;-1:-1:-1;7835:14:1;;-1:-1:-1;7863:15:1;-1:-1:-1;7345:550:1;;-1:-1:-1;;;;7345:550:1:o;223:20:0:-;;;;;;:::o;2960:852:1:-;366:5:0;;;;352:10;:19;344:28;;;;;;2190:34:1;:14;;;2222:1;2190:14;;;:6;:14;;;;;:20;3184:6;;2190:20;:34;2182:43;;;;;;3215:6;2547:22;;;;;2539:31;;;;;;3250:7;2460:1;2426:36;;:13;2440:7;2426:22;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;365:33;;2426:22:1;;;;;-1:-1:-1;2426:22:1;;;;;;;;;;;;;:36;;;;;-1:-1:-1;2418:45:1;;-1:-1:-1;2418:45:1;;;;;3284:5;2337:1;2307:32;;:11;2319:5;2307:18;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;365:33;;2307:18:1;;;;;-1:-1:-1;2307:18:1;;;;;;;;;;;;;:32;;;;;-1:-1:-1;2299:41:1;;-1:-1:-1;2299:41:1;;;;;3322:207;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3305:14:1;;;:6;:14;;;;;;;:224;;;;;;;;;;;;;;;;;;3322:207;;3305:14;;:224;;;;;;;;;;;:::i;:::-;-1:-1:-1;3305:224:1;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3305:224:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3305:224:1;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;3539:14:1;27:10:-1;;39:1;23:18;;45:23;;-1:-1;3539:27:1;;;;;;;;;;;;;;;;-1:-1:-1;3576:22:1;;;;3539:27;;3576:13;;:22;;;;;3539:27;3576:22;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;365:33;;3576:22:1;;;;;-1:-1:-1;3576:22:1;;;;;;;;;;:31;;;;;;;;;;;;;;;;-1:-1:-1;;3617:18:1;;3638:6;;3617:11;;:18;;3576:22;;;;3617:18;;;;;3576:22;3617:18;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;365:33;;3617:18:1;;;;;-1:-1:-1;3617:18:1;;;;;;;;;;;:27;;;;;;;;;;;3654:151;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3718:7:1;;-1:-1:-1;3654:151:1;;3762:9;;3785:10;;3617:18;;;3654:151;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;3654:151:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3654:151:1;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;3654:151:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3654:151:1;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;3654:151:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3654:151:1;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;3654:151:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2473:1;2580;2235;382::0;2960:852:1;;;;;;:::o;4738:370::-;4897:27;366:5:0;;;;352:10;:19;344:28;;;;;;2070:34:1;:14;;;2102:1;2070:14;;;:6;:14;;;;;:20;4843:6;;2070:20;:34;;2062:43;;;;;;4876:5;2337:1;2307:32;;:11;2319:5;2307:18;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;365:33;;2307:18:1;;;;;-1:-1:-1;2307:18:1;;;;;;;;;;;;;:32;;;;;-1:-1:-1;2299:41:1;;-1:-1:-1;2299:41:1;;;;;4927:14;;;;;;;:6;:14;;;;;;;;;4951:45;;;;;4978:10;;;4951:45;;;;;;;;;;;;;;;;;;;;;;4927:14;;-1:-1:-1;4951:45:1;;4990:5;;4951:45;;;;;;;;;;4978:10;;4951:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4951:45:1;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;4951:45:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5013:11;5025:5;:10;;5013:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5013:23:1;;;-1:-1:-1;;5013:23:1;;;;;;;;;;;;5006:30;;;;;;5046:18;;5067:6;;5046:11;;5058:5;;5013:23;;5046:18;;;;5013:23;5046:18;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;365:33;;5046:18:1;;;;;-1:-1:-1;5046:18:1;;;;;;;;;;;:27;;;;;;;;;;;;;;;;-1:-1:-1;5083:18:1;;;;-1:-1:-1;;5083:10:1;;;:18;;;;:::i;1656:48::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1656:48:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1656:48:1;;-1:-1:-1;1656:48:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;1656:48:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1656:48:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;1656:48:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1656:48:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1803:31::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1803:31:1;:::o;8052:392::-;8152:7;8189:6;8218;8249:5;8282;8315;8361:14;8378:11;8390:5;8378:18;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;365:33;;8378:18:1;;;;;-1:-1:-1;8378:18:1;;;;;;;;;;;;;;-1:-1:-1;8413:24:1;;-1:-1:-1;8378:18:1;;-1:-1:-1;8413:16:1;:24::i;:::-;8406:31;;;;-1:-1:-1;8406:31:1;;-1:-1:-1;8406:31:1;-1:-1:-1;8406:31:1;-1:-1:-1;8406:31:1;;-1:-1:-1;8052:392:1;-1:-1:-1;;;8052:392:1:o;9117:131::-;9195:9;9227:14;9220:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9117:131;;:::o;5820:288::-;5954:27;366:5:0;;;;352:10;:19;344:28;;;;;;2070:34:1;:14;;;2102:1;2070:14;;;:6;:14;;;;;:20;5932:6;;2070:20;:34;;2062:43;;;;;;5984:14;;;;;;;:6;:14;;;;;;;;;6008:57;;;;;6039:14;;;6008:57;;;;;;;;;;;;;;;;;;;;;;5984:14;;-1:-1:-1;6008:57:1;;6055:9;;6008:57;;;;;;;;;;6039:14;;6008:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6008:57:1;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;6008:57:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6075:26;;;;:14;;;;:26;;;;;:::i;8607:400::-;8711:7;8748:6;8777;8808:5;8841;8874;8920:14;8937:13;8951:7;8937:22;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;5262:396:1;5429:27;366:5:0;;;;352:10;:19;344:28;;;;;;2070:34:1;:14;;;2102:1;2070:14;;;:6;:14;;;;;:20;5371:6;;2070:20;:34;;2062:43;;;;;;5406:7;2460:1;2426:36;;:13;2440:7;2426:22;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;365:33;;2426:22:1;;;;;-1:-1:-1;2426:22:1;;;;;;;;;;;;;:36;;;;;-1:-1:-1;2418:45:1;;-1:-1:-1;2418:45:1;;;;;5459:14;;;;;;;:6;:14;;;;;;;;;5483:51;;;;;5512:12;;;;5483:51;;;;;;;;;;;;;;;;;;;;5459:14;;-1:-1:-1;5483:51:1;;5526:7;;5483:51;;;;;;;;;;5512:12;;5483:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5483:51:1;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;5483:51:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5551:13;5565:5;:12;;5551:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5551:27:1;;;-1:-1:-1;;5551:27:1;;;;;;;;;;;;5544:34;;;;;;5588:22;;5613:6;;5588:13;;5602:7;;5551:27;;5588:22;;;;5551:27;5588:22;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;365:33;;5588:22:1;;;;;-1:-1:-1;5588:22:1;;;;;;;;;;;:31;;;;;;;;;;;;;;;;-1:-1:-1;5629:22:1;;;;-1:-1:-1;5629:12:1;;;;:22;;;;:::i;396:140:0:-;366:5;;;;352:10;:19;344:28;;;;;;465:22;;;;461:69;;503:5;:16;;;;;;;;;;461:69;396:140;:::o;886:8364:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;886:8364:1;;;-1:-1:-1;886:8364:1;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;"
}
}
},
"sources": {
- "previous/Ownable/Ownable_v1.sol": {
+ "1.0.0/Ownable/Ownable_v1.sol": {
"id": 0
},
- "previous/TokenRegistry/TokenRegistry.sol": {
+ "1.0.0/TokenRegistry/TokenRegistry.sol": {
"id": 1
}
},
"sourceCodes": {
- "previous/Ownable/Ownable_v1.sol": "pragma solidity ^0.4.11;\n\n/*\n * Ownable\n *\n * Base contract with an owner.\n * Provides onlyOwner modifier, which prevents function from running if it is called by anyone other than the owner.\n */\n\ncontract Ownable_v1 {\n address public owner;\n\n function Ownable_v1() {\n owner = msg.sender;\n }\n\n modifier onlyOwner() {\n require(msg.sender == owner);\n _;\n }\n\n function transferOwnership(address newOwner) onlyOwner {\n if (newOwner != address(0)) {\n owner = newOwner;\n }\n }\n}\n",
- "previous/TokenRegistry/TokenRegistry.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 { Ownable_v1 as Ownable } from \"../Ownable/Ownable_v1.sol\";\n\n/// @title Token Registry - Stores metadata associated with ERC20 tokens. See ERC22 https://github.com/ethereum/EIPs/issues/22\n/// @author Amir Bandeali - <amir@0xProject.com>, Will Warren - <will@0xProject.com>\ncontract TokenRegistry is Ownable {\n\n event LogAddToken(\n address indexed token,\n string name,\n string symbol,\n uint8 decimals,\n bytes ipfsHash,\n bytes swarmHash\n );\n\n event LogRemoveToken(\n address indexed token,\n string name,\n string symbol,\n uint8 decimals,\n bytes ipfsHash,\n bytes swarmHash\n );\n\n event LogTokenNameChange(address indexed token, string oldName, string newName);\n event LogTokenSymbolChange(address indexed token, string oldSymbol, string newSymbol);\n event LogTokenIpfsHashChange(address indexed token, bytes oldIpfsHash, bytes newIpfsHash);\n event LogTokenSwarmHashChange(address indexed token, bytes oldSwarmHash, bytes newSwarmHash);\n\n mapping (address => TokenMetadata) public tokens;\n mapping (string => address) tokenBySymbol;\n mapping (string => address) tokenByName;\n\n address[] public tokenAddresses;\n\n struct TokenMetadata {\n address token;\n string name;\n string symbol;\n uint8 decimals;\n bytes ipfsHash;\n bytes swarmHash;\n }\n\n modifier tokenExists(address _token) {\n require(tokens[_token].token != address(0));\n _;\n }\n\n modifier tokenDoesNotExist(address _token) {\n require(tokens[_token].token == address(0));\n _;\n }\n\n modifier nameDoesNotExist(string _name) {\n require(tokenByName[_name] == address(0));\n _;\n }\n\n modifier symbolDoesNotExist(string _symbol) {\n require(tokenBySymbol[_symbol] == address(0));\n _;\n }\n\n modifier addressNotNull(address _address) {\n require(_address != address(0));\n _;\n }\n\n\n /// @dev Allows owner to add a new token to the registry.\n /// @param _token Address of new token.\n /// @param _name Name of new token.\n /// @param _symbol Symbol for new token.\n /// @param _decimals Number of decimals, divisibility of new token.\n /// @param _ipfsHash IPFS hash of token icon.\n /// @param _swarmHash Swarm hash of token icon.\n function addToken(\n address _token,\n string _name,\n string _symbol,\n uint8 _decimals,\n bytes _ipfsHash,\n bytes _swarmHash)\n public\n onlyOwner\n tokenDoesNotExist(_token)\n addressNotNull(_token)\n symbolDoesNotExist(_symbol)\n nameDoesNotExist(_name)\n {\n tokens[_token] = TokenMetadata({\n token: _token,\n name: _name,\n symbol: _symbol,\n decimals: _decimals,\n ipfsHash: _ipfsHash,\n swarmHash: _swarmHash\n });\n tokenAddresses.push(_token);\n tokenBySymbol[_symbol] = _token;\n tokenByName[_name] = _token;\n LogAddToken(\n _token,\n _name,\n _symbol,\n _decimals,\n _ipfsHash,\n _swarmHash\n );\n }\n\n /// @dev Allows owner to remove an existing token from the registry.\n /// @param _token Address of existing token.\n function removeToken(address _token, uint _index)\n public\n onlyOwner\n tokenExists(_token)\n {\n require(tokenAddresses[_index] == _token);\n\n tokenAddresses[_index] = tokenAddresses[tokenAddresses.length - 1];\n tokenAddresses.length -= 1;\n\n TokenMetadata storage token = tokens[_token];\n LogRemoveToken(\n token.token,\n token.name,\n token.symbol,\n token.decimals,\n token.ipfsHash,\n token.swarmHash\n );\n delete tokenBySymbol[token.symbol];\n delete tokenByName[token.name];\n delete tokens[_token];\n }\n\n /// @dev Allows owner to modify an existing token's name.\n /// @param _token Address of existing token.\n /// @param _name New name.\n function setTokenName(address _token, string _name)\n public\n onlyOwner\n tokenExists(_token)\n nameDoesNotExist(_name)\n {\n TokenMetadata storage token = tokens[_token];\n LogTokenNameChange(_token, token.name, _name);\n delete tokenByName[token.name];\n tokenByName[_name] = _token;\n token.name = _name;\n }\n\n /// @dev Allows owner to modify an existing token's symbol.\n /// @param _token Address of existing token.\n /// @param _symbol New symbol.\n function setTokenSymbol(address _token, string _symbol)\n public\n onlyOwner\n tokenExists(_token)\n symbolDoesNotExist(_symbol)\n {\n TokenMetadata storage token = tokens[_token];\n LogTokenSymbolChange(_token, token.symbol, _symbol);\n delete tokenBySymbol[token.symbol];\n tokenBySymbol[_symbol] = _token;\n token.symbol = _symbol;\n }\n\n /// @dev Allows owner to modify an existing token's IPFS hash.\n /// @param _token Address of existing token.\n /// @param _ipfsHash New IPFS hash.\n function setTokenIpfsHash(address _token, bytes _ipfsHash)\n public\n onlyOwner\n tokenExists(_token)\n {\n TokenMetadata storage token = tokens[_token];\n LogTokenIpfsHashChange(_token, token.ipfsHash, _ipfsHash);\n token.ipfsHash = _ipfsHash;\n }\n\n /// @dev Allows owner to modify an existing token's Swarm hash.\n /// @param _token Address of existing token.\n /// @param _swarmHash New Swarm hash.\n function setTokenSwarmHash(address _token, bytes _swarmHash)\n public\n onlyOwner\n tokenExists(_token)\n {\n TokenMetadata storage token = tokens[_token];\n LogTokenSwarmHashChange(_token, token.swarmHash, _swarmHash);\n token.swarmHash = _swarmHash;\n }\n\n /*\n * Web3 call functions\n */\n\n /// @dev Provides a registered token's address when given the token symbol.\n /// @param _symbol Symbol of registered token.\n /// @return Token's address.\n function getTokenAddressBySymbol(string _symbol) constant returns (address) {\n return tokenBySymbol[_symbol];\n }\n\n /// @dev Provides a registered token's address when given the token name.\n /// @param _name Name of registered token.\n /// @return Token's address.\n function getTokenAddressByName(string _name) constant returns (address) {\n return tokenByName[_name];\n }\n\n /// @dev Provides a registered token's metadata, looked up by address.\n /// @param _token Address of registered token.\n /// @return Token metadata.\n function getTokenMetaData(address _token)\n public\n constant\n returns (\n address, //tokenAddress\n string, //name\n string, //symbol\n uint8, //decimals\n bytes, //ipfsHash\n bytes //swarmHash\n )\n {\n TokenMetadata memory token = tokens[_token];\n return (\n token.token,\n token.name,\n token.symbol,\n token.decimals,\n token.ipfsHash,\n token.swarmHash\n );\n }\n\n /// @dev Provides a registered token's metadata, looked up by name.\n /// @param _name Name of registered token.\n /// @return Token metadata.\n function getTokenByName(string _name)\n public\n constant\n returns (\n address, //tokenAddress\n string, //name\n string, //symbol\n uint8, //decimals\n bytes, //ipfsHash\n bytes //swarmHash\n )\n {\n address _token = tokenByName[_name];\n return getTokenMetaData(_token);\n }\n\n /// @dev Provides a registered token's metadata, looked up by symbol.\n /// @param _symbol Symbol of registered token.\n /// @return Token metadata.\n function getTokenBySymbol(string _symbol)\n public\n constant\n returns (\n address, //tokenAddress\n string, //name\n string, //symbol\n uint8, //decimals\n bytes, //ipfsHash\n bytes //swarmHash\n )\n {\n address _token = tokenBySymbol[_symbol];\n return getTokenMetaData(_token);\n }\n\n /// @dev Returns an array containing all token addresses.\n /// @return Array of token addresses.\n function getTokenAddresses()\n public\n constant\n returns (address[])\n {\n return tokenAddresses;\n }\n}\n"
+ "1.0.0/Ownable/Ownable_v1.sol": "pragma solidity ^0.4.11;\n\n/*\n * Ownable\n *\n * Base contract with an owner.\n * Provides onlyOwner modifier, which prevents function from running if it is called by anyone other than the owner.\n */\n\ncontract Ownable_v1 {\n address public owner;\n\n function Ownable_v1() {\n owner = msg.sender;\n }\n\n modifier onlyOwner() {\n require(msg.sender == owner);\n _;\n }\n\n function transferOwnership(address newOwner) onlyOwner {\n if (newOwner != address(0)) {\n owner = newOwner;\n }\n }\n}\n",
+ "1.0.0/TokenRegistry/TokenRegistry.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 { Ownable_v1 as Ownable } from \"../Ownable/Ownable_v1.sol\";\n\n/// @title Token Registry - Stores metadata associated with ERC20 tokens. See ERC22 https://github.com/ethereum/EIPs/issues/22\n/// @author Amir Bandeali - <amir@0xProject.com>, Will Warren - <will@0xProject.com>\ncontract TokenRegistry is Ownable {\n\n event LogAddToken(\n address indexed token,\n string name,\n string symbol,\n uint8 decimals,\n bytes ipfsHash,\n bytes swarmHash\n );\n\n event LogRemoveToken(\n address indexed token,\n string name,\n string symbol,\n uint8 decimals,\n bytes ipfsHash,\n bytes swarmHash\n );\n\n event LogTokenNameChange(address indexed token, string oldName, string newName);\n event LogTokenSymbolChange(address indexed token, string oldSymbol, string newSymbol);\n event LogTokenIpfsHashChange(address indexed token, bytes oldIpfsHash, bytes newIpfsHash);\n event LogTokenSwarmHashChange(address indexed token, bytes oldSwarmHash, bytes newSwarmHash);\n\n mapping (address => TokenMetadata) public tokens;\n mapping (string => address) tokenBySymbol;\n mapping (string => address) tokenByName;\n\n address[] public tokenAddresses;\n\n struct TokenMetadata {\n address token;\n string name;\n string symbol;\n uint8 decimals;\n bytes ipfsHash;\n bytes swarmHash;\n }\n\n modifier tokenExists(address _token) {\n require(tokens[_token].token != address(0));\n _;\n }\n\n modifier tokenDoesNotExist(address _token) {\n require(tokens[_token].token == address(0));\n _;\n }\n\n modifier nameDoesNotExist(string _name) {\n require(tokenByName[_name] == address(0));\n _;\n }\n\n modifier symbolDoesNotExist(string _symbol) {\n require(tokenBySymbol[_symbol] == address(0));\n _;\n }\n\n modifier addressNotNull(address _address) {\n require(_address != address(0));\n _;\n }\n\n\n /// @dev Allows owner to add a new token to the registry.\n /// @param _token Address of new token.\n /// @param _name Name of new token.\n /// @param _symbol Symbol for new token.\n /// @param _decimals Number of decimals, divisibility of new token.\n /// @param _ipfsHash IPFS hash of token icon.\n /// @param _swarmHash Swarm hash of token icon.\n function addToken(\n address _token,\n string _name,\n string _symbol,\n uint8 _decimals,\n bytes _ipfsHash,\n bytes _swarmHash)\n public\n onlyOwner\n tokenDoesNotExist(_token)\n addressNotNull(_token)\n symbolDoesNotExist(_symbol)\n nameDoesNotExist(_name)\n {\n tokens[_token] = TokenMetadata({\n token: _token,\n name: _name,\n symbol: _symbol,\n decimals: _decimals,\n ipfsHash: _ipfsHash,\n swarmHash: _swarmHash\n });\n tokenAddresses.push(_token);\n tokenBySymbol[_symbol] = _token;\n tokenByName[_name] = _token;\n LogAddToken(\n _token,\n _name,\n _symbol,\n _decimals,\n _ipfsHash,\n _swarmHash\n );\n }\n\n /// @dev Allows owner to remove an existing token from the registry.\n /// @param _token Address of existing token.\n function removeToken(address _token, uint _index)\n public\n onlyOwner\n tokenExists(_token)\n {\n require(tokenAddresses[_index] == _token);\n\n tokenAddresses[_index] = tokenAddresses[tokenAddresses.length - 1];\n tokenAddresses.length -= 1;\n\n TokenMetadata storage token = tokens[_token];\n LogRemoveToken(\n token.token,\n token.name,\n token.symbol,\n token.decimals,\n token.ipfsHash,\n token.swarmHash\n );\n delete tokenBySymbol[token.symbol];\n delete tokenByName[token.name];\n delete tokens[_token];\n }\n\n /// @dev Allows owner to modify an existing token's name.\n /// @param _token Address of existing token.\n /// @param _name New name.\n function setTokenName(address _token, string _name)\n public\n onlyOwner\n tokenExists(_token)\n nameDoesNotExist(_name)\n {\n TokenMetadata storage token = tokens[_token];\n LogTokenNameChange(_token, token.name, _name);\n delete tokenByName[token.name];\n tokenByName[_name] = _token;\n token.name = _name;\n }\n\n /// @dev Allows owner to modify an existing token's symbol.\n /// @param _token Address of existing token.\n /// @param _symbol New symbol.\n function setTokenSymbol(address _token, string _symbol)\n public\n onlyOwner\n tokenExists(_token)\n symbolDoesNotExist(_symbol)\n {\n TokenMetadata storage token = tokens[_token];\n LogTokenSymbolChange(_token, token.symbol, _symbol);\n delete tokenBySymbol[token.symbol];\n tokenBySymbol[_symbol] = _token;\n token.symbol = _symbol;\n }\n\n /// @dev Allows owner to modify an existing token's IPFS hash.\n /// @param _token Address of existing token.\n /// @param _ipfsHash New IPFS hash.\n function setTokenIpfsHash(address _token, bytes _ipfsHash)\n public\n onlyOwner\n tokenExists(_token)\n {\n TokenMetadata storage token = tokens[_token];\n LogTokenIpfsHashChange(_token, token.ipfsHash, _ipfsHash);\n token.ipfsHash = _ipfsHash;\n }\n\n /// @dev Allows owner to modify an existing token's Swarm hash.\n /// @param _token Address of existing token.\n /// @param _swarmHash New Swarm hash.\n function setTokenSwarmHash(address _token, bytes _swarmHash)\n public\n onlyOwner\n tokenExists(_token)\n {\n TokenMetadata storage token = tokens[_token];\n LogTokenSwarmHashChange(_token, token.swarmHash, _swarmHash);\n token.swarmHash = _swarmHash;\n }\n\n /*\n * Web3 call functions\n */\n\n /// @dev Provides a registered token's address when given the token symbol.\n /// @param _symbol Symbol of registered token.\n /// @return Token's address.\n function getTokenAddressBySymbol(string _symbol) constant returns (address) {\n return tokenBySymbol[_symbol];\n }\n\n /// @dev Provides a registered token's address when given the token name.\n /// @param _name Name of registered token.\n /// @return Token's address.\n function getTokenAddressByName(string _name) constant returns (address) {\n return tokenByName[_name];\n }\n\n /// @dev Provides a registered token's metadata, looked up by address.\n /// @param _token Address of registered token.\n /// @return Token metadata.\n function getTokenMetaData(address _token)\n public\n constant\n returns (\n address, //tokenAddress\n string, //name\n string, //symbol\n uint8, //decimals\n bytes, //ipfsHash\n bytes //swarmHash\n )\n {\n TokenMetadata memory token = tokens[_token];\n return (\n token.token,\n token.name,\n token.symbol,\n token.decimals,\n token.ipfsHash,\n token.swarmHash\n );\n }\n\n /// @dev Provides a registered token's metadata, looked up by name.\n /// @param _name Name of registered token.\n /// @return Token metadata.\n function getTokenByName(string _name)\n public\n constant\n returns (\n address, //tokenAddress\n string, //name\n string, //symbol\n uint8, //decimals\n bytes, //ipfsHash\n bytes //swarmHash\n )\n {\n address _token = tokenByName[_name];\n return getTokenMetaData(_token);\n }\n\n /// @dev Provides a registered token's metadata, looked up by symbol.\n /// @param _symbol Symbol of registered token.\n /// @return Token metadata.\n function getTokenBySymbol(string _symbol)\n public\n constant\n returns (\n address, //tokenAddress\n string, //name\n string, //symbol\n uint8, //decimals\n bytes, //ipfsHash\n bytes //swarmHash\n )\n {\n address _token = tokenBySymbol[_symbol];\n return getTokenMetaData(_token);\n }\n\n /// @dev Returns an array containing all token addresses.\n /// @return Array of token addresses.\n function getTokenAddresses()\n public\n constant\n returns (address[])\n {\n return tokenAddresses;\n }\n}\n"
},
"sourceTreeHashHex": "0x63a45b019e6836d66dc6b82f872f30b7cb9375dca2fd0b2e5975a1ceb586a40f",
"compiler": {
diff --git a/packages/migrations/artifacts/2.0.0/WETH9.json b/packages/migrations/artifacts/2.0.0/WETH9.json
index 7268f3e1b..9c2c79938 100644
--- a/packages/migrations/artifacts/2.0.0/WETH9.json
+++ b/packages/migrations/artifacts/2.0.0/WETH9.json
@@ -284,27 +284,27 @@
"evm": {
"bytecode": {
"linkReferences": {},
- "object": "0x60c0604052600d60808190527f577261707065642045746865720000000000000000000000000000000000000060a090815261003e91600091906100a3565b506040805180820190915260048082527f57455448000000000000000000000000000000000000000000000000000000006020909201918252610083916001916100a3565b506002805460ff1916601217905534801561009d57600080fd5b5061013e565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100e457805160ff1916838001178555610111565b82800160010185558215610111579182015b828111156101115782518255916020019190600101906100f6565b5061011d929150610121565b5090565b61013b91905b8082111561011d5760008155600101610127565b90565b6107688061014d6000396000f3006080604052600436106100ae5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde0381146100b8578063095ea7b31461014257806318160ddd1461018757806323b872dd146101ae5780632e1a7d4d146101e5578063313ce567146101fd57806370a082311461022857806395d89b4114610256578063a9059cbb1461026b578063d0e30db0146100ae578063dd62ed3e1461029c575b6100b66102d0565b005b3480156100c457600080fd5b506100cd61031f565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101075781810151838201526020016100ef565b50505050905090810190601f1680156101345780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561014e57600080fd5b5061017373ffffffffffffffffffffffffffffffffffffffff600435166024356103cb565b604080519115158252519081900360200190f35b34801561019357600080fd5b5061019c61043e565b60408051918252519081900360200190f35b3480156101ba57600080fd5b5061017373ffffffffffffffffffffffffffffffffffffffff60043581169060243516604435610443565b3480156101f157600080fd5b506100b66004356105e3565b34801561020957600080fd5b50610212610678565b6040805160ff9092168252519081900360200190f35b34801561023457600080fd5b5061019c73ffffffffffffffffffffffffffffffffffffffff60043516610681565b34801561026257600080fd5b506100cd610693565b34801561027757600080fd5b5061017373ffffffffffffffffffffffffffffffffffffffff6004351660243561070b565b3480156102a857600080fd5b5061019c73ffffffffffffffffffffffffffffffffffffffff6004358116906024351661071f565b33600081815260036020908152604091829020805434908101909155825190815291517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9281900390910190a2565b6000805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156103c35780601f10610398576101008083540402835291602001916103c3565b820191906000526020600020905b8154815290600101906020018083116103a657829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b303190565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561047557600080fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104eb575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105655773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561052d57600080fd5b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020805483900390555b73ffffffffffffffffffffffffffffffffffffffff808516600081815260036020908152604080832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35060019392505050565b336000908152600360205260409020548111156105ff57600080fd5b33600081815260036020526040808220805485900390555183156108fc0291849190818181858888f1935050505015801561063e573d6000803e3d6000fd5b5060408051828152905133917f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65919081900360200190a250565b60025460ff1681565b60036020526000908152604090205481565b60018054604080516020600284861615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156103c35780601f10610398576101008083540402835291602001916103c3565b6000610718338484610443565b9392505050565b6004602090815260009283526040808420909152908252902054815600a165627a7a7230582070fb92b1475284c3c6cbceccee83b43f3766609c2178f48341192a3ae085547c0029",
- "opcodes": "PUSH1 0xC0 PUSH1 0x40 MSTORE PUSH1 0xD PUSH1 0x80 DUP2 SWAP1 MSTORE PUSH32 0x5772617070656420457468657200000000000000000000000000000000000000 PUSH1 0xA0 SWAP1 DUP2 MSTORE PUSH2 0x3E SWAP2 PUSH1 0x0 SWAP2 SWAP1 PUSH2 0xA3 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x4 DUP1 DUP3 MSTORE PUSH32 0x5745544800000000000000000000000000000000000000000000000000000000 PUSH1 0x20 SWAP1 SWAP3 ADD SWAP2 DUP3 MSTORE PUSH2 0x83 SWAP2 PUSH1 0x1 SWAP2 PUSH2 0xA3 JUMP JUMPDEST POP PUSH1 0x2 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x12 OR SWAP1 SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x9D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x13E JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0xE4 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x111 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x111 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x111 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0xF6 JUMP JUMPDEST POP PUSH2 0x11D SWAP3 SWAP2 POP PUSH2 0x121 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0x13B SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x11D JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x127 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0x768 DUP1 PUSH2 0x14D PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xAE JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x6FDDE03 DUP2 EQ PUSH2 0xB8 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x142 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x187 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1AE JUMPI DUP1 PUSH4 0x2E1A7D4D EQ PUSH2 0x1E5 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1FD JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x228 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x256 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x26B JUMPI DUP1 PUSH4 0xD0E30DB0 EQ PUSH2 0xAE JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x29C JUMPI JUMPDEST PUSH2 0xB6 PUSH2 0x2D0 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xCD PUSH2 0x31F 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 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x107 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xEF JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x134 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 DUP1 ISZERO PUSH2 0x14E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x173 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD PUSH2 0x3CB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x193 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19C PUSH2 0x43E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x173 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH1 0x44 CALLDATALOAD PUSH2 0x443 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB6 PUSH1 0x4 CALLDATALOAD PUSH2 0x5E3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x209 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x212 PUSH2 0x678 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 DUP1 ISZERO PUSH2 0x234 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19C PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x681 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x262 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xCD PUSH2 0x693 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x277 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x173 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD PUSH2 0x70B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19C PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH2 0x71F JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD CALLVALUE SWAP1 DUP2 ADD SWAP1 SWAP2 SSTORE DUP3 MLOAD SWAP1 DUP2 MSTORE SWAP2 MLOAD PUSH32 0xE1FFFCC4923D04B559F4D29A8BFC6CDA04EB5B0D3C460751C2402C5C5CC9109C SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3C3 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x398 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3C3 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x3A6 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP7 SWAP1 SSTORE DUP2 MLOAD DUP7 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 SWAP1 SWAP4 SWAP1 SWAP3 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST ADDRESS BALANCE SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x475 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND CALLER EQ DUP1 ISZERO SWAP1 PUSH2 0x4EB JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF EQ ISZERO JUMPDEST ISZERO PUSH2 0x565 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x52D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 DUP1 SLOAD DUP4 SWAP1 SUB SWAP1 SSTORE JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD DUP9 SWAP1 SUB SWAP1 SSTORE SWAP4 DUP8 AND DUP1 DUP4 MSTORE SWAP2 DUP5 SWAP1 KECCAK256 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 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 GT ISZERO PUSH2 0x5FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD DUP6 SWAP1 SUB SWAP1 SSTORE MLOAD DUP4 ISZERO PUSH2 0x8FC MUL SWAP2 DUP5 SWAP2 SWAP1 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x63E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0x7FCF532C15F0A6DB0BD6D0E038BEA71D30D808C7D98CB3BF7268A95BF5081B65 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 DUP5 DUP7 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3C3 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x398 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3C3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x718 CALLER DUP5 DUP5 PUSH2 0x443 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 PUSH17 0xFB92B1475284C3C6CBCECCEE83B43F3766 PUSH1 0x9C 0x21 PUSH25 0xF48341192A3AE085547C002900000000000000000000000000 ",
- "sourceMap": "733:40:0:-;712:1778;733:40;;712:1778;733:40;;;;;;;;;;-1:-1:-1;;733:40:0;;:::i;:::-;-1:-1:-1;779:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;816:27:0;;;-1:-1:-1;;816:27:0;841:2;816:27;;;712:1778;5:2:-1;;;;30:1;27;20:12;5:2;712:1778:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;712:1778:0;;;-1:-1:-1;712:1778:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;"
+ "object": "0x60c0604052600d60808190527f577261707065642045746865720000000000000000000000000000000000000060a090815261003e91600091906100a3565b506040805180820190915260048082527f57455448000000000000000000000000000000000000000000000000000000006020909201918252610083916001916100a3565b506002805460ff1916601217905534801561009d57600080fd5b5061013e565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100e457805160ff1916838001178555610111565b82800160010185558215610111579182015b828111156101115782518255916020019190600101906100f6565b5061011d929150610121565b5090565b61013b91905b8082111561011d5760008155600101610127565b90565b6107688061014d6000396000f3006080604052600436106100ae5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde0381146100b8578063095ea7b31461014257806318160ddd1461018757806323b872dd146101ae5780632e1a7d4d146101e5578063313ce567146101fd57806370a082311461022857806395d89b4114610256578063a9059cbb1461026b578063d0e30db0146100ae578063dd62ed3e1461029c575b6100b66102d0565b005b3480156100c457600080fd5b506100cd61031f565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101075781810151838201526020016100ef565b50505050905090810190601f1680156101345780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561014e57600080fd5b5061017373ffffffffffffffffffffffffffffffffffffffff600435166024356103cb565b604080519115158252519081900360200190f35b34801561019357600080fd5b5061019c61043e565b60408051918252519081900360200190f35b3480156101ba57600080fd5b5061017373ffffffffffffffffffffffffffffffffffffffff60043581169060243516604435610443565b3480156101f157600080fd5b506100b66004356105e3565b34801561020957600080fd5b50610212610678565b6040805160ff9092168252519081900360200190f35b34801561023457600080fd5b5061019c73ffffffffffffffffffffffffffffffffffffffff60043516610681565b34801561026257600080fd5b506100cd610693565b34801561027757600080fd5b5061017373ffffffffffffffffffffffffffffffffffffffff6004351660243561070b565b3480156102a857600080fd5b5061019c73ffffffffffffffffffffffffffffffffffffffff6004358116906024351661071f565b33600081815260036020908152604091829020805434908101909155825190815291517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9281900390910190a2565b6000805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156103c35780601f10610398576101008083540402835291602001916103c3565b820191906000526020600020905b8154815290600101906020018083116103a657829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b303190565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561047557600080fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104eb575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105655773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561052d57600080fd5b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020805483900390555b73ffffffffffffffffffffffffffffffffffffffff808516600081815260036020908152604080832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35060019392505050565b336000908152600360205260409020548111156105ff57600080fd5b33600081815260036020526040808220805485900390555183156108fc0291849190818181858888f1935050505015801561063e573d6000803e3d6000fd5b5060408051828152905133917f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65919081900360200190a250565b60025460ff1681565b60036020526000908152604090205481565b60018054604080516020600284861615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156103c35780601f10610398576101008083540402835291602001916103c3565b6000610718338484610443565b9392505050565b6004602090815260009283526040808420909152908252902054815600a165627a7a7230582042c9f15ea91dff74d0b4e04c953095bd13690ea22f3b04a8583eb1f9bdb57d450029",
+ "opcodes": "PUSH1 0xC0 PUSH1 0x40 MSTORE PUSH1 0xD PUSH1 0x80 DUP2 SWAP1 MSTORE PUSH32 0x5772617070656420457468657200000000000000000000000000000000000000 PUSH1 0xA0 SWAP1 DUP2 MSTORE PUSH2 0x3E SWAP2 PUSH1 0x0 SWAP2 SWAP1 PUSH2 0xA3 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x4 DUP1 DUP3 MSTORE PUSH32 0x5745544800000000000000000000000000000000000000000000000000000000 PUSH1 0x20 SWAP1 SWAP3 ADD SWAP2 DUP3 MSTORE PUSH2 0x83 SWAP2 PUSH1 0x1 SWAP2 PUSH2 0xA3 JUMP JUMPDEST POP PUSH1 0x2 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x12 OR SWAP1 SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x9D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x13E JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0xE4 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x111 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x111 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x111 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0xF6 JUMP JUMPDEST POP PUSH2 0x11D SWAP3 SWAP2 POP PUSH2 0x121 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0x13B SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x11D JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x127 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0x768 DUP1 PUSH2 0x14D PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xAE JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x6FDDE03 DUP2 EQ PUSH2 0xB8 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x142 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x187 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1AE JUMPI DUP1 PUSH4 0x2E1A7D4D EQ PUSH2 0x1E5 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1FD JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x228 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x256 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x26B JUMPI DUP1 PUSH4 0xD0E30DB0 EQ PUSH2 0xAE JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x29C JUMPI JUMPDEST PUSH2 0xB6 PUSH2 0x2D0 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xCD PUSH2 0x31F 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 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x107 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xEF JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x134 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 DUP1 ISZERO PUSH2 0x14E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x173 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD PUSH2 0x3CB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x193 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19C PUSH2 0x43E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x173 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH1 0x44 CALLDATALOAD PUSH2 0x443 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB6 PUSH1 0x4 CALLDATALOAD PUSH2 0x5E3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x209 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x212 PUSH2 0x678 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 DUP1 ISZERO PUSH2 0x234 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19C PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x681 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x262 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xCD PUSH2 0x693 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x277 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x173 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD PUSH2 0x70B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19C PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH2 0x71F JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD CALLVALUE SWAP1 DUP2 ADD SWAP1 SWAP2 SSTORE DUP3 MLOAD SWAP1 DUP2 MSTORE SWAP2 MLOAD PUSH32 0xE1FFFCC4923D04B559F4D29A8BFC6CDA04EB5B0D3C460751C2402C5C5CC9109C SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3C3 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x398 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3C3 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x3A6 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP7 SWAP1 SSTORE DUP2 MLOAD DUP7 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 SWAP1 SWAP4 SWAP1 SWAP3 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST ADDRESS BALANCE SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x475 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND CALLER EQ DUP1 ISZERO SWAP1 PUSH2 0x4EB JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF EQ ISZERO JUMPDEST ISZERO PUSH2 0x565 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x52D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 DUP1 SLOAD DUP4 SWAP1 SUB SWAP1 SSTORE JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD DUP9 SWAP1 SUB SWAP1 SSTORE SWAP4 DUP8 AND DUP1 DUP4 MSTORE SWAP2 DUP5 SWAP1 KECCAK256 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 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 GT ISZERO PUSH2 0x5FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD DUP6 SWAP1 SUB SWAP1 SSTORE MLOAD DUP4 ISZERO PUSH2 0x8FC MUL SWAP2 DUP5 SWAP2 SWAP1 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x63E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0x7FCF532C15F0A6DB0BD6D0E038BEA71D30D808C7D98CB3BF7268A95BF5081B65 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 DUP5 DUP7 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3C3 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x398 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3C3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x718 CALLER DUP5 DUP5 PUSH2 0x443 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 TIMESTAMP 0xc9 CALL 0x5e 0xa9 SAR SELFDESTRUCT PUSH21 0xD0B4E04C953095BD13690EA22F3B04A8583EB1F9BD 0xb5 PUSH30 0x450029000000000000000000000000000000000000000000000000000000 ",
+ "sourceMap": "753:40:0:-;732:1778;753:40;;732:1778;753:40;;;;;;;;;;-1:-1:-1;;753:40:0;;:::i;:::-;-1:-1:-1;799:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;836:27:0;;;-1:-1:-1;;836:27:0;861:2;836:27;;;732:1778;5:2:-1;;;;30:1;27;20:12;5:2;732:1778:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;732:1778:0;;;-1:-1:-1;732:1778:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;"
},
"deployedBytecode": {
"linkReferences": {},
- "object": "0x6080604052600436106100ae5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde0381146100b8578063095ea7b31461014257806318160ddd1461018757806323b872dd146101ae5780632e1a7d4d146101e5578063313ce567146101fd57806370a082311461022857806395d89b4114610256578063a9059cbb1461026b578063d0e30db0146100ae578063dd62ed3e1461029c575b6100b66102d0565b005b3480156100c457600080fd5b506100cd61031f565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101075781810151838201526020016100ef565b50505050905090810190601f1680156101345780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561014e57600080fd5b5061017373ffffffffffffffffffffffffffffffffffffffff600435166024356103cb565b604080519115158252519081900360200190f35b34801561019357600080fd5b5061019c61043e565b60408051918252519081900360200190f35b3480156101ba57600080fd5b5061017373ffffffffffffffffffffffffffffffffffffffff60043581169060243516604435610443565b3480156101f157600080fd5b506100b66004356105e3565b34801561020957600080fd5b50610212610678565b6040805160ff9092168252519081900360200190f35b34801561023457600080fd5b5061019c73ffffffffffffffffffffffffffffffffffffffff60043516610681565b34801561026257600080fd5b506100cd610693565b34801561027757600080fd5b5061017373ffffffffffffffffffffffffffffffffffffffff6004351660243561070b565b3480156102a857600080fd5b5061019c73ffffffffffffffffffffffffffffffffffffffff6004358116906024351661071f565b33600081815260036020908152604091829020805434908101909155825190815291517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9281900390910190a2565b6000805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156103c35780601f10610398576101008083540402835291602001916103c3565b820191906000526020600020905b8154815290600101906020018083116103a657829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b303190565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561047557600080fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104eb575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105655773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561052d57600080fd5b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020805483900390555b73ffffffffffffffffffffffffffffffffffffffff808516600081815260036020908152604080832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35060019392505050565b336000908152600360205260409020548111156105ff57600080fd5b33600081815260036020526040808220805485900390555183156108fc0291849190818181858888f1935050505015801561063e573d6000803e3d6000fd5b5060408051828152905133917f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65919081900360200190a250565b60025460ff1681565b60036020526000908152604090205481565b60018054604080516020600284861615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156103c35780601f10610398576101008083540402835291602001916103c3565b6000610718338484610443565b9392505050565b6004602090815260009283526040808420909152908252902054815600a165627a7a7230582070fb92b1475284c3c6cbceccee83b43f3766609c2178f48341192a3ae085547c0029",
- "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xAE JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x6FDDE03 DUP2 EQ PUSH2 0xB8 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x142 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x187 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1AE JUMPI DUP1 PUSH4 0x2E1A7D4D EQ PUSH2 0x1E5 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1FD JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x228 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x256 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x26B JUMPI DUP1 PUSH4 0xD0E30DB0 EQ PUSH2 0xAE JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x29C JUMPI JUMPDEST PUSH2 0xB6 PUSH2 0x2D0 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xCD PUSH2 0x31F 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 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x107 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xEF JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x134 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 DUP1 ISZERO PUSH2 0x14E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x173 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD PUSH2 0x3CB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x193 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19C PUSH2 0x43E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x173 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH1 0x44 CALLDATALOAD PUSH2 0x443 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB6 PUSH1 0x4 CALLDATALOAD PUSH2 0x5E3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x209 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x212 PUSH2 0x678 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 DUP1 ISZERO PUSH2 0x234 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19C PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x681 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x262 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xCD PUSH2 0x693 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x277 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x173 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD PUSH2 0x70B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19C PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH2 0x71F JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD CALLVALUE SWAP1 DUP2 ADD SWAP1 SWAP2 SSTORE DUP3 MLOAD SWAP1 DUP2 MSTORE SWAP2 MLOAD PUSH32 0xE1FFFCC4923D04B559F4D29A8BFC6CDA04EB5B0D3C460751C2402C5C5CC9109C SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3C3 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x398 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3C3 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x3A6 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP7 SWAP1 SSTORE DUP2 MLOAD DUP7 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 SWAP1 SWAP4 SWAP1 SWAP3 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST ADDRESS BALANCE SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x475 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND CALLER EQ DUP1 ISZERO SWAP1 PUSH2 0x4EB JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF EQ ISZERO JUMPDEST ISZERO PUSH2 0x565 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x52D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 DUP1 SLOAD DUP4 SWAP1 SUB SWAP1 SSTORE JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD DUP9 SWAP1 SUB SWAP1 SSTORE SWAP4 DUP8 AND DUP1 DUP4 MSTORE SWAP2 DUP5 SWAP1 KECCAK256 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 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 GT ISZERO PUSH2 0x5FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD DUP6 SWAP1 SUB SWAP1 SSTORE MLOAD DUP4 ISZERO PUSH2 0x8FC MUL SWAP2 DUP5 SWAP2 SWAP1 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x63E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0x7FCF532C15F0A6DB0BD6D0E038BEA71D30D808C7D98CB3BF7268A95BF5081B65 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 DUP5 DUP7 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3C3 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x398 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3C3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x718 CALLER DUP5 DUP5 PUSH2 0x443 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 PUSH17 0xFB92B1475284C3C6CBCECCEE83B43F3766 PUSH1 0x9C 0x21 PUSH25 0xF48341192A3AE085547C002900000000000000000000000000 ",
- "sourceMap": "712:1778:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1281:9;:7;:9::i;:::-;712:1778;733:40;;8:9:-1;5:2;;;30:1;27;20:12;5:2;733:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;733:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1728:172;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1728:172:0;;;;;;;;;;;;;;;;;;;;;;;;;;;1636:86;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1636:86:0;;;;;;;;;;;;;;;;;;;;2033:455;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2033:455:0;;;;;;;;;;;;;;1432:198;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1432:198:0;;;;;816:27;;8:9:-1;5:2;;;30:1;27;20:12;5:2;816:27:0;;;;;;;;;;;;;;;;;;;;;;;1102:65;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1102:65:0;;;;;;;779:31;;8:9:-1;5:2;;;30:1;27;20:12;5:2;779:31:0;;;;1906:121;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1906:121:0;;;;;;;;;1173:65;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1173:65:0;;;;;;;;;;;;1302:125;1356:10;1346:21;;;;:9;:21;;;;;;;;;:34;;1371:9;1346:34;;;;;;1390:30;;;;;;;;;;;;;;;;;1302:125::o;733:40::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1728:172::-;1810:10;1784:4;1800:21;;;:9;:21;;;;;;;;;:26;;;;;;;;;;;:32;;;1842:30;;;;;;;1784:4;;1800:26;;1810:10;;1842:30;;;;;;;;-1:-1:-1;1889:4:0;1728:172;;;;:::o;1636:86::-;1703:4;:12;1636:86;:::o;2033:455::-;2151:14;;;2123:4;2151:14;;;:9;:14;;;;;;:21;-1:-1:-1;2151:21:0;2143:30;;;;;;2188:17;;;2195:10;2188:17;;;;:59;;-1:-1:-1;2209:14:0;;;;;;;:9;:14;;;;;;;;2224:10;2209:26;;;;;;;;2244:2;2209:38;;2188:59;2184:179;;;2271:14;;;;;;;:9;:14;;;;;;;;2286:10;2271:26;;;;;;;;:33;-1:-1:-1;2271:33:0;2263:42;;;;;;2319:14;;;;;;;:9;:14;;;;;;;;2334:10;2319:26;;;;;;;:33;;;;;;;2184:179;2373:14;;;;;;;;:9;:14;;;;;;;;:21;;;;;;;2404:14;;;;;;;;;;:21;;;;;;2436:23;;;;;;;2404:14;;2436:23;;;;;;;;;;;-1:-1:-1;2477:4:0;2033:455;;;;;:::o;1432:198::-;1495:10;1485:21;;;;:9;:21;;;;;;:28;-1:-1:-1;1485:28:0;1477:37;;;;;;1534:10;1524:21;;;;:9;:21;;;;;;:28;;;;;;;1562:24;;;;;;1549:3;;1562:24;;1524:21;1562:24;1549:3;1534:10;1562:24;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;1596:27:0;;;;;;;;1607:10;;1596:27;;;;;;;;;;1432:198;:::o;816:27::-;;;;;;:::o;1102:65::-;;;;;;;;;;;;;:::o;779:31::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1906:121;1963:4;1986:34;1999:10;2011:3;2016;1986:12;:34::i;:::-;1979:41;1906:121;-1:-1:-1;;;1906:121:0:o;1173:65::-;;;;;;;;;;;;;;;;;;;;;;;;:::o"
+ "object": "0x6080604052600436106100ae5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde0381146100b8578063095ea7b31461014257806318160ddd1461018757806323b872dd146101ae5780632e1a7d4d146101e5578063313ce567146101fd57806370a082311461022857806395d89b4114610256578063a9059cbb1461026b578063d0e30db0146100ae578063dd62ed3e1461029c575b6100b66102d0565b005b3480156100c457600080fd5b506100cd61031f565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101075781810151838201526020016100ef565b50505050905090810190601f1680156101345780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561014e57600080fd5b5061017373ffffffffffffffffffffffffffffffffffffffff600435166024356103cb565b604080519115158252519081900360200190f35b34801561019357600080fd5b5061019c61043e565b60408051918252519081900360200190f35b3480156101ba57600080fd5b5061017373ffffffffffffffffffffffffffffffffffffffff60043581169060243516604435610443565b3480156101f157600080fd5b506100b66004356105e3565b34801561020957600080fd5b50610212610678565b6040805160ff9092168252519081900360200190f35b34801561023457600080fd5b5061019c73ffffffffffffffffffffffffffffffffffffffff60043516610681565b34801561026257600080fd5b506100cd610693565b34801561027757600080fd5b5061017373ffffffffffffffffffffffffffffffffffffffff6004351660243561070b565b3480156102a857600080fd5b5061019c73ffffffffffffffffffffffffffffffffffffffff6004358116906024351661071f565b33600081815260036020908152604091829020805434908101909155825190815291517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9281900390910190a2565b6000805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156103c35780601f10610398576101008083540402835291602001916103c3565b820191906000526020600020905b8154815290600101906020018083116103a657829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b303190565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561047557600080fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104eb575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105655773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561052d57600080fd5b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020805483900390555b73ffffffffffffffffffffffffffffffffffffffff808516600081815260036020908152604080832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35060019392505050565b336000908152600360205260409020548111156105ff57600080fd5b33600081815260036020526040808220805485900390555183156108fc0291849190818181858888f1935050505015801561063e573d6000803e3d6000fd5b5060408051828152905133917f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65919081900360200190a250565b60025460ff1681565b60036020526000908152604090205481565b60018054604080516020600284861615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156103c35780601f10610398576101008083540402835291602001916103c3565b6000610718338484610443565b9392505050565b6004602090815260009283526040808420909152908252902054815600a165627a7a7230582042c9f15ea91dff74d0b4e04c953095bd13690ea22f3b04a8583eb1f9bdb57d450029",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xAE JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x6FDDE03 DUP2 EQ PUSH2 0xB8 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x142 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x187 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1AE JUMPI DUP1 PUSH4 0x2E1A7D4D EQ PUSH2 0x1E5 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1FD JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x228 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x256 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x26B JUMPI DUP1 PUSH4 0xD0E30DB0 EQ PUSH2 0xAE JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x29C JUMPI JUMPDEST PUSH2 0xB6 PUSH2 0x2D0 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xCD PUSH2 0x31F 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 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x107 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xEF JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x134 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 DUP1 ISZERO PUSH2 0x14E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x173 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD PUSH2 0x3CB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x193 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19C PUSH2 0x43E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x173 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH1 0x44 CALLDATALOAD PUSH2 0x443 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB6 PUSH1 0x4 CALLDATALOAD PUSH2 0x5E3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x209 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x212 PUSH2 0x678 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 DUP1 ISZERO PUSH2 0x234 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19C PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x681 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x262 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xCD PUSH2 0x693 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x277 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x173 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD PUSH2 0x70B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19C PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH2 0x71F JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD CALLVALUE SWAP1 DUP2 ADD SWAP1 SWAP2 SSTORE DUP3 MLOAD SWAP1 DUP2 MSTORE SWAP2 MLOAD PUSH32 0xE1FFFCC4923D04B559F4D29A8BFC6CDA04EB5B0D3C460751C2402C5C5CC9109C SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3C3 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x398 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3C3 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x3A6 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP7 SWAP1 SSTORE DUP2 MLOAD DUP7 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 SWAP1 SWAP4 SWAP1 SWAP3 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST ADDRESS BALANCE SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x475 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND CALLER EQ DUP1 ISZERO SWAP1 PUSH2 0x4EB JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF EQ ISZERO JUMPDEST ISZERO PUSH2 0x565 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x52D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 DUP1 SLOAD DUP4 SWAP1 SUB SWAP1 SSTORE JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD DUP9 SWAP1 SUB SWAP1 SSTORE SWAP4 DUP8 AND DUP1 DUP4 MSTORE SWAP2 DUP5 SWAP1 KECCAK256 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 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 GT ISZERO PUSH2 0x5FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD DUP6 SWAP1 SUB SWAP1 SSTORE MLOAD DUP4 ISZERO PUSH2 0x8FC MUL SWAP2 DUP5 SWAP2 SWAP1 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x63E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0x7FCF532C15F0A6DB0BD6D0E038BEA71D30D808C7D98CB3BF7268A95BF5081B65 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 DUP5 DUP7 AND ISZERO PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3C3 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x398 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3C3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x718 CALLER DUP5 DUP5 PUSH2 0x443 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 TIMESTAMP 0xc9 CALL 0x5e 0xa9 SAR SELFDESTRUCT PUSH21 0xD0B4E04C953095BD13690EA22F3B04A8583EB1F9BD 0xb5 PUSH30 0x450029000000000000000000000000000000000000000000000000000000 ",
+ "sourceMap": "732:1778:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1301:9;:7;:9::i;:::-;732:1778;753:40;;8:9:-1;5:2;;;30:1;27;20:12;5:2;753:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;753:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1748:172;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1748:172:0;;;;;;;;;;;;;;;;;;;;;;;;;;;1656:86;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1656:86:0;;;;;;;;;;;;;;;;;;;;2053:455;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2053:455:0;;;;;;;;;;;;;;1452:198;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1452:198:0;;;;;836:27;;8:9:-1;5:2;;;30:1;27;20:12;5:2;836:27:0;;;;;;;;;;;;;;;;;;;;;;;1122:65;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1122:65:0;;;;;;;799:31;;8:9:-1;5:2;;;30:1;27;20:12;5:2;799:31:0;;;;1926:121;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1926:121:0;;;;;;;;;1193:65;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1193:65:0;;;;;;;;;;;;1322:125;1376:10;1366:21;;;;:9;:21;;;;;;;;;:34;;1391:9;1366:34;;;;;;1410:30;;;;;;;;;;;;;;;;;1322:125::o;753:40::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1748:172::-;1830:10;1804:4;1820:21;;;:9;:21;;;;;;;;;:26;;;;;;;;;;;:32;;;1862:30;;;;;;;1804:4;;1820:26;;1830:10;;1862:30;;;;;;;;-1:-1:-1;1909:4:0;1748:172;;;;:::o;1656:86::-;1723:4;:12;1656:86;:::o;2053:455::-;2171:14;;;2143:4;2171:14;;;:9;:14;;;;;;:21;-1:-1:-1;2171:21:0;2163:30;;;;;;2208:17;;;2215:10;2208:17;;;;:59;;-1:-1:-1;2229:14:0;;;;;;;:9;:14;;;;;;;;2244:10;2229:26;;;;;;;;2264:2;2229:38;;2208:59;2204:179;;;2291:14;;;;;;;:9;:14;;;;;;;;2306:10;2291:26;;;;;;;;:33;-1:-1:-1;2291:33:0;2283:42;;;;;;2339:14;;;;;;;:9;:14;;;;;;;;2354:10;2339:26;;;;;;;:33;;;;;;;2204:179;2393:14;;;;;;;;:9;:14;;;;;;;;:21;;;;;;;2424:14;;;;;;;;;;:21;;;;;;2456:23;;;;;;;2424:14;;2456:23;;;;;;;;;;;-1:-1:-1;2497:4:0;2053:455;;;;;:::o;1452:198::-;1515:10;1505:21;;;;:9;:21;;;;;;:28;-1:-1:-1;1505:28:0;1497:37;;;;;;1554:10;1544:21;;;;:9;:21;;;;;;:28;;;;;;;1582:24;;;;;;1569:3;;1582:24;;1544:21;1582:24;1569:3;1554:10;1582:24;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;1616:27:0;;;;;;;;1627:10;;1616:27;;;;;;;;;;1452:198;:::o;836:27::-;;;;;;:::o;1122:65::-;;;;;;;;;;;;;:::o;799:31::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1926:121;1983:4;2006:34;2019:10;2031:3;2036;2006:12;:34::i;:::-;1999:41;1926:121;-1:-1:-1;;;1926:121:0:o;1193:65::-;;;;;;;;;;;;;;;;;;;;;;;;:::o"
}
}
},
"sources": {
- "current/tokens/WETH9/WETH9.sol": {
+ "2.0.0/tokens/EtherToken/WETH9.sol": {
"id": 0
}
},
"sourceCodes": {
- "current/tokens/WETH9/WETH9.sol": "// Copyright (C) 2015, 2016, 2017 Dapphub\n\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see <http://www.gnu.org/licenses/>.\n\npragma solidity ^0.4.18;\n\ncontract WETH9 {\n string public name = \"Wrapped Ether\";\n string public symbol = \"WETH\";\n uint8 public decimals = 18;\n\n event Approval(address indexed src, address indexed guy, uint wad);\n event Transfer(address indexed src, address indexed dst, uint wad);\n event Deposit(address indexed dst, uint wad);\n event Withdrawal(address indexed src, uint wad);\n\n mapping (address => uint) public balanceOf;\n mapping (address => mapping (address => uint)) public allowance;\n\n function() public payable {\n deposit();\n }\n function deposit() public payable {\n balanceOf[msg.sender] += msg.value;\n Deposit(msg.sender, msg.value);\n }\n function withdraw(uint wad) public {\n require(balanceOf[msg.sender] >= wad);\n balanceOf[msg.sender] -= wad;\n msg.sender.transfer(wad);\n Withdrawal(msg.sender, wad);\n }\n\n function totalSupply() public view returns (uint) {\n return this.balance;\n }\n\n function approve(address guy, uint wad) public returns (bool) {\n allowance[msg.sender][guy] = wad;\n Approval(msg.sender, guy, wad);\n return true;\n }\n\n function transfer(address dst, uint wad) public returns (bool) {\n return transferFrom(msg.sender, dst, wad);\n }\n\n function transferFrom(address src, address dst, uint wad)\n public\n returns (bool)\n {\n require(balanceOf[src] >= wad);\n\n if (src != msg.sender && allowance[src][msg.sender] != uint(-1)) {\n require(allowance[src][msg.sender] >= wad);\n allowance[src][msg.sender] -= wad;\n }\n\n balanceOf[src] -= wad;\n balanceOf[dst] += wad;\n\n Transfer(src, dst, wad);\n\n return true;\n }\n}\n\n\n/*\n GNU GENERAL PUBLIC LICENSE\n Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n Preamble\n\n The GNU General Public License is a free, copyleft license for\nsoftware and other kinds of works.\n\n The licenses for most software and other practical works are designed\nto take away your freedom to share and change the works. By contrast,\nthe GNU General Public License is intended to guarantee your freedom to\nshare and change all versions of a program--to make sure it remains free\nsoftware for all its users. We, the Free Software Foundation, use the\nGNU General Public License for most of our software; it applies also to\nany other work released this way by its authors. You can apply it to\nyour programs, too.\n\n When we speak of free software, we are referring to freedom, not\nprice. Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthem if you wish), that you receive source code or can get it if you\nwant it, that you can change the software or use pieces of it in new\nfree programs, and that you know you can do these things.\n\n To protect your rights, we need to prevent others from denying you\nthese rights or asking you to surrender the rights. Therefore, you have\ncertain responsibilities if you distribute copies of the software, or if\nyou modify it: responsibilities to respect the freedom of others.\n\n For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must pass on to the recipients the same\nfreedoms that you received. You must make sure that they, too, receive\nor can get the source code. And you must show them these terms so they\nknow their rights.\n\n Developers that use the GNU GPL protect your rights with two steps:\n(1) assert copyright on the software, and (2) offer you this License\ngiving you legal permission to copy, distribute and/or modify it.\n\n For the developers' and authors' protection, the GPL clearly explains\nthat there is no warranty for this free software. For both users' and\nauthors' sake, the GPL requires that modified versions be marked as\nchanged, so that their problems will not be attributed erroneously to\nauthors of previous versions.\n\n Some devices are designed to deny users access to install or run\nmodified versions of the software inside them, although the manufacturer\ncan do so. This is fundamentally incompatible with the aim of\nprotecting users' freedom to change the software. The systematic\npattern of such abuse occurs in the area of products for individuals to\nuse, which is precisely where it is most unacceptable. Therefore, we\nhave designed this version of the GPL to prohibit the practice for those\nproducts. If such problems arise substantially in other domains, we\nstand ready to extend this provision to those domains in future versions\nof the GPL, as needed to protect the freedom of users.\n\n Finally, every program is threatened constantly by software patents.\nStates should not allow patents to restrict development and use of\nsoftware on general-purpose computers, but in those that do, we wish to\navoid the special danger that patents applied to a free program could\nmake it effectively proprietary. To prevent this, the GPL assures that\npatents cannot be used to render the program non-free.\n\n The precise terms and conditions for copying, distribution and\nmodification follow.\n\n TERMS AND CONDITIONS\n\n 0. Definitions.\n\n \"This License\" refers to version 3 of the GNU General Public License.\n\n \"Copyright\" also means copyright-like laws that apply to other kinds of\nworks, such as semiconductor masks.\n\n \"The Program\" refers to any copyrightable work licensed under this\nLicense. Each licensee is addressed as \"you\". \"Licensees\" and\n\"recipients\" may be individuals or organizations.\n\n To \"modify\" a work means to copy from or adapt all or part of the work\nin a fashion requiring copyright permission, other than the making of an\nexact copy. The resulting work is called a \"modified version\" of the\nearlier work or a work \"based on\" the earlier work.\n\n A \"covered work\" means either the unmodified Program or a work based\non the Program.\n\n To \"propagate\" a work means to do anything with it that, without\npermission, would make you directly or secondarily liable for\ninfringement under applicable copyright law, except executing it on a\ncomputer or modifying a private copy. Propagation includes copying,\ndistribution (with or without modification), making available to the\npublic, and in some countries other activities as well.\n\n To \"convey\" a work means any kind of propagation that enables other\nparties to make or receive copies. Mere interaction with a user through\na computer network, with no transfer of a copy, is not conveying.\n\n An interactive user interface displays \"Appropriate Legal Notices\"\nto the extent that it includes a convenient and prominently visible\nfeature that (1) displays an appropriate copyright notice, and (2)\ntells the user that there is no warranty for the work (except to the\nextent that warranties are provided), that licensees may convey the\nwork under this License, and how to view a copy of this License. If\nthe interface presents a list of user commands or options, such as a\nmenu, a prominent item in the list meets this criterion.\n\n 1. Source Code.\n\n The \"source code\" for a work means the preferred form of the work\nfor making modifications to it. \"Object code\" means any non-source\nform of a work.\n\n A \"Standard Interface\" means an interface that either is an official\nstandard defined by a recognized standards body, or, in the case of\ninterfaces specified for a particular programming language, one that\nis widely used among developers working in that language.\n\n The \"System Libraries\" of an executable work include anything, other\nthan the work as a whole, that (a) is included in the normal form of\npackaging a Major Component, but which is not part of that Major\nComponent, and (b) serves only to enable use of the work with that\nMajor Component, or to implement a Standard Interface for which an\nimplementation is available to the public in source code form. A\n\"Major Component\", in this context, means a major essential component\n(kernel, window system, and so on) of the specific operating system\n(if any) on which the executable work runs, or a compiler used to\nproduce the work, or an object code interpreter used to run it.\n\n The \"Corresponding Source\" for a work in object code form means all\nthe source code needed to generate, install, and (for an executable\nwork) run the object code and to modify the work, including scripts to\ncontrol those activities. However, it does not include the work's\nSystem Libraries, or general-purpose tools or generally available free\nprograms which are used unmodified in performing those activities but\nwhich are not part of the work. For example, Corresponding Source\nincludes interface definition files associated with source files for\nthe work, and the source code for shared libraries and dynamically\nlinked subprograms that the work is specifically designed to require,\nsuch as by intimate data communication or control flow between those\nsubprograms and other parts of the work.\n\n The Corresponding Source need not include anything that users\ncan regenerate automatically from other parts of the Corresponding\nSource.\n\n The Corresponding Source for a work in source code form is that\nsame work.\n\n 2. Basic Permissions.\n\n All rights granted under this License are granted for the term of\ncopyright on the Program, and are irrevocable provided the stated\nconditions are met. This License explicitly affirms your unlimited\npermission to run the unmodified Program. The output from running a\ncovered work is covered by this License only if the output, given its\ncontent, constitutes a covered work. This License acknowledges your\nrights of fair use or other equivalent, as provided by copyright law.\n\n You may make, run and propagate covered works that you do not\nconvey, without conditions so long as your license otherwise remains\nin force. You may convey covered works to others for the sole purpose\nof having them make modifications exclusively for you, or provide you\nwith facilities for running those works, provided that you comply with\nthe terms of this License in conveying all material for which you do\nnot control copyright. Those thus making or running the covered works\nfor you must do so exclusively on your behalf, under your direction\nand control, on terms that prohibit them from making any copies of\nyour copyrighted material outside their relationship with you.\n\n Conveying under any other circumstances is permitted solely under\nthe conditions stated below. Sublicensing is not allowed; section 10\nmakes it unnecessary.\n\n 3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n\n No covered work shall be deemed part of an effective technological\nmeasure under any applicable law fulfilling obligations under article\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\nsimilar laws prohibiting or restricting circumvention of such\nmeasures.\n\n When you convey a covered work, you waive any legal power to forbid\ncircumvention of technological measures to the extent such circumvention\nis effected by exercising rights under this License with respect to\nthe covered work, and you disclaim any intention to limit operation or\nmodification of the work as a means of enforcing, against the work's\nusers, your or third parties' legal rights to forbid circumvention of\ntechnological measures.\n\n 4. Conveying Verbatim Copies.\n\n You may convey verbatim copies of the Program's source code as you\nreceive it, in any medium, provided that you conspicuously and\nappropriately publish on each copy an appropriate copyright notice;\nkeep intact all notices stating that this License and any\nnon-permissive terms added in accord with section 7 apply to the code;\nkeep intact all notices of the absence of any warranty; and give all\nrecipients a copy of this License along with the Program.\n\n You may charge any price or no price for each copy that you convey,\nand you may offer support or warranty protection for a fee.\n\n 5. Conveying Modified Source Versions.\n\n You may convey a work based on the Program, or the modifications to\nproduce it from the Program, in the form of source code under the\nterms of section 4, provided that you also meet all of these conditions:\n\n a) The work must carry prominent notices stating that you modified\n it, and giving a relevant date.\n\n b) The work must carry prominent notices stating that it is\n released under this License and any conditions added under section\n 7. This requirement modifies the requirement in section 4 to\n \"keep intact all notices\".\n\n c) You must license the entire work, as a whole, under this\n License to anyone who comes into possession of a copy. This\n License will therefore apply, along with any applicable section 7\n additional terms, to the whole of the work, and all its parts,\n regardless of how they are packaged. This License gives no\n permission to license the work in any other way, but it does not\n invalidate such permission if you have separately received it.\n\n d) If the work has interactive user interfaces, each must display\n Appropriate Legal Notices; however, if the Program has interactive\n interfaces that do not display Appropriate Legal Notices, your\n work need not make them do so.\n\n A compilation of a covered work with other separate and independent\nworks, which are not by their nature extensions of the covered work,\nand which are not combined with it such as to form a larger program,\nin or on a volume of a storage or distribution medium, is called an\n\"aggregate\" if the compilation and its resulting copyright are not\nused to limit the access or legal rights of the compilation's users\nbeyond what the individual works permit. Inclusion of a covered work\nin an aggregate does not cause this License to apply to the other\nparts of the aggregate.\n\n 6. Conveying Non-Source Forms.\n\n You may convey a covered work in object code form under the terms\nof sections 4 and 5, provided that you also convey the\nmachine-readable Corresponding Source under the terms of this License,\nin one of these ways:\n\n a) Convey the object code in, or embodied in, a physical product\n (including a physical distribution medium), accompanied by the\n Corresponding Source fixed on a durable physical medium\n customarily used for software interchange.\n\n b) Convey the object code in, or embodied in, a physical product\n (including a physical distribution medium), accompanied by a\n written offer, valid for at least three years and valid for as\n long as you offer spare parts or customer support for that product\n model, to give anyone who possesses the object code either (1) a\n copy of the Corresponding Source for all the software in the\n product that is covered by this License, on a durable physical\n medium customarily used for software interchange, for a price no\n more than your reasonable cost of physically performing this\n conveying of source, or (2) access to copy the\n Corresponding Source from a network server at no charge.\n\n c) Convey individual copies of the object code with a copy of the\n written offer to provide the Corresponding Source. This\n alternative is allowed only occasionally and noncommercially, and\n only if you received the object code with such an offer, in accord\n with subsection 6b.\n\n d) Convey the object code by offering access from a designated\n place (gratis or for a charge), and offer equivalent access to the\n Corresponding Source in the same way through the same place at no\n further charge. You need not require recipients to copy the\n Corresponding Source along with the object code. If the place to\n copy the object code is a network server, the Corresponding Source\n may be on a different server (operated by you or a third party)\n that supports equivalent copying facilities, provided you maintain\n clear directions next to the object code saying where to find the\n Corresponding Source. Regardless of what server hosts the\n Corresponding Source, you remain obligated to ensure that it is\n available for as long as needed to satisfy these requirements.\n\n e) Convey the object code using peer-to-peer transmission, provided\n you inform other peers where the object code and Corresponding\n Source of the work are being offered to the general public at no\n charge under subsection 6d.\n\n A separable portion of the object code, whose source code is excluded\nfrom the Corresponding Source as a System Library, need not be\nincluded in conveying the object code work.\n\n A \"User Product\" is either (1) a \"consumer product\", which means any\ntangible personal property which is normally used for personal, family,\nor household purposes, or (2) anything designed or sold for incorporation\ninto a dwelling. In determining whether a product is a consumer product,\ndoubtful cases shall be resolved in favor of coverage. For a particular\nproduct received by a particular user, \"normally used\" refers to a\ntypical or common use of that class of product, regardless of the status\nof the particular user or of the way in which the particular user\nactually uses, or expects or is expected to use, the product. A product\nis a consumer product regardless of whether the product has substantial\ncommercial, industrial or non-consumer uses, unless such uses represent\nthe only significant mode of use of the product.\n\n \"Installation Information\" for a User Product means any methods,\nprocedures, authorization keys, or other information required to install\nand execute modified versions of a covered work in that User Product from\na modified version of its Corresponding Source. The information must\nsuffice to ensure that the continued functioning of the modified object\ncode is in no case prevented or interfered with solely because\nmodification has been made.\n\n If you convey an object code work under this section in, or with, or\nspecifically for use in, a User Product, and the conveying occurs as\npart of a transaction in which the right of possession and use of the\nUser Product is transferred to the recipient in perpetuity or for a\nfixed term (regardless of how the transaction is characterized), the\nCorresponding Source conveyed under this section must be accompanied\nby the Installation Information. But this requirement does not apply\nif neither you nor any third party retains the ability to install\nmodified object code on the User Product (for example, the work has\nbeen installed in ROM).\n\n The requirement to provide Installation Information does not include a\nrequirement to continue to provide support service, warranty, or updates\nfor a work that has been modified or installed by the recipient, or for\nthe User Product in which it has been modified or installed. Access to a\nnetwork may be denied when the modification itself materially and\nadversely affects the operation of the network or violates the rules and\nprotocols for communication across the network.\n\n Corresponding Source conveyed, and Installation Information provided,\nin accord with this section must be in a format that is publicly\ndocumented (and with an implementation available to the public in\nsource code form), and must require no special password or key for\nunpacking, reading or copying.\n\n 7. Additional Terms.\n\n \"Additional permissions\" are terms that supplement the terms of this\nLicense by making exceptions from one or more of its conditions.\nAdditional permissions that are applicable to the entire Program shall\nbe treated as though they were included in this License, to the extent\nthat they are valid under applicable law. If additional permissions\napply only to part of the Program, that part may be used separately\nunder those permissions, but the entire Program remains governed by\nthis License without regard to the additional permissions.\n\n When you convey a copy of a covered work, you may at your option\nremove any additional permissions from that copy, or from any part of\nit. (Additional permissions may be written to require their own\nremoval in certain cases when you modify the work.) You may place\nadditional permissions on material, added by you to a covered work,\nfor which you have or can give appropriate copyright permission.\n\n Notwithstanding any other provision of this License, for material you\nadd to a covered work, you may (if authorized by the copyright holders of\nthat material) supplement the terms of this License with terms:\n\n a) Disclaiming warranty or limiting liability differently from the\n terms of sections 15 and 16 of this License; or\n\n b) Requiring preservation of specified reasonable legal notices or\n author attributions in that material or in the Appropriate Legal\n Notices displayed by works containing it; or\n\n c) Prohibiting misrepresentation of the origin of that material, or\n requiring that modified versions of such material be marked in\n reasonable ways as different from the original version; or\n\n d) Limiting the use for publicity purposes of names of licensors or\n authors of the material; or\n\n e) Declining to grant rights under trademark law for use of some\n trade names, trademarks, or service marks; or\n\n f) Requiring indemnification of licensors and authors of that\n material by anyone who conveys the material (or modified versions of\n it) with contractual assumptions of liability to the recipient, for\n any liability that these contractual assumptions directly impose on\n those licensors and authors.\n\n All other non-permissive additional terms are considered \"further\nrestrictions\" within the meaning of section 10. If the Program as you\nreceived it, or any part of it, contains a notice stating that it is\ngoverned by this License along with a term that is a further\nrestriction, you may remove that term. If a license document contains\na further restriction but permits relicensing or conveying under this\nLicense, you may add to a covered work material governed by the terms\nof that license document, provided that the further restriction does\nnot survive such relicensing or conveying.\n\n If you add terms to a covered work in accord with this section, you\nmust place, in the relevant source files, a statement of the\nadditional terms that apply to those files, or a notice indicating\nwhere to find the applicable terms.\n\n Additional terms, permissive or non-permissive, may be stated in the\nform of a separately written license, or stated as exceptions;\nthe above requirements apply either way.\n\n 8. Termination.\n\n You may not propagate or modify a covered work except as expressly\nprovided under this License. Any attempt otherwise to propagate or\nmodify it is void, and will automatically terminate your rights under\nthis License (including any patent licenses granted under the third\nparagraph of section 11).\n\n However, if you cease all violation of this License, then your\nlicense from a particular copyright holder is reinstated (a)\nprovisionally, unless and until the copyright holder explicitly and\nfinally terminates your license, and (b) permanently, if the copyright\nholder fails to notify you of the violation by some reasonable means\nprior to 60 days after the cessation.\n\n Moreover, your license from a particular copyright holder is\nreinstated permanently if the copyright holder notifies you of the\nviolation by some reasonable means, this is the first time you have\nreceived notice of violation of this License (for any work) from that\ncopyright holder, and you cure the violation prior to 30 days after\nyour receipt of the notice.\n\n Termination of your rights under this section does not terminate the\nlicenses of parties who have received copies or rights from you under\nthis License. If your rights have been terminated and not permanently\nreinstated, you do not qualify to receive new licenses for the same\nmaterial under section 10.\n\n 9. Acceptance Not Required for Having Copies.\n\n You are not required to accept this License in order to receive or\nrun a copy of the Program. Ancillary propagation of a covered work\noccurring solely as a consequence of using peer-to-peer transmission\nto receive a copy likewise does not require acceptance. However,\nnothing other than this License grants you permission to propagate or\nmodify any covered work. These actions infringe copyright if you do\nnot accept this License. Therefore, by modifying or propagating a\ncovered work, you indicate your acceptance of this License to do so.\n\n 10. Automatic Licensing of Downstream Recipients.\n\n Each time you convey a covered work, the recipient automatically\nreceives a license from the original licensors, to run, modify and\npropagate that work, subject to this License. You are not responsible\nfor enforcing compliance by third parties with this License.\n\n An \"entity transaction\" is a transaction transferring control of an\norganization, or substantially all assets of one, or subdividing an\norganization, or merging organizations. If propagation of a covered\nwork results from an entity transaction, each party to that\ntransaction who receives a copy of the work also receives whatever\nlicenses to the work the party's predecessor in interest had or could\ngive under the previous paragraph, plus a right to possession of the\nCorresponding Source of the work from the predecessor in interest, if\nthe predecessor has it or can get it with reasonable efforts.\n\n You may not impose any further restrictions on the exercise of the\nrights granted or affirmed under this License. For example, you may\nnot impose a license fee, royalty, or other charge for exercise of\nrights granted under this License, and you may not initiate litigation\n(including a cross-claim or counterclaim in a lawsuit) alleging that\nany patent claim is infringed by making, using, selling, offering for\nsale, or importing the Program or any portion of it.\n\n 11. Patents.\n\n A \"contributor\" is a copyright holder who authorizes use under this\nLicense of the Program or a work on which the Program is based. The\nwork thus licensed is called the contributor's \"contributor version\".\n\n A contributor's \"essential patent claims\" are all patent claims\nowned or controlled by the contributor, whether already acquired or\nhereafter acquired, that would be infringed by some manner, permitted\nby this License, of making, using, or selling its contributor version,\nbut do not include claims that would be infringed only as a\nconsequence of further modification of the contributor version. For\npurposes of this definition, \"control\" includes the right to grant\npatent sublicenses in a manner consistent with the requirements of\nthis License.\n\n Each contributor grants you a non-exclusive, worldwide, royalty-free\npatent license under the contributor's essential patent claims, to\nmake, use, sell, offer for sale, import and otherwise run, modify and\npropagate the contents of its contributor version.\n\n In the following three paragraphs, a \"patent license\" is any express\nagreement or commitment, however denominated, not to enforce a patent\n(such as an express permission to practice a patent or covenant not to\nsue for patent infringement). To \"grant\" such a patent license to a\nparty means to make such an agreement or commitment not to enforce a\npatent against the party.\n\n If you convey a covered work, knowingly relying on a patent license,\nand the Corresponding Source of the work is not available for anyone\nto copy, free of charge and under the terms of this License, through a\npublicly available network server or other readily accessible means,\nthen you must either (1) cause the Corresponding Source to be so\navailable, or (2) arrange to deprive yourself of the benefit of the\npatent license for this particular work, or (3) arrange, in a manner\nconsistent with the requirements of this License, to extend the patent\nlicense to downstream recipients. \"Knowingly relying\" means you have\nactual knowledge that, but for the patent license, your conveying the\ncovered work in a country, or your recipient's use of the covered work\nin a country, would infringe one or more identifiable patents in that\ncountry that you have reason to believe are valid.\n\n If, pursuant to or in connection with a single transaction or\narrangement, you convey, or propagate by procuring conveyance of, a\ncovered work, and grant a patent license to some of the parties\nreceiving the covered work authorizing them to use, propagate, modify\nor convey a specific copy of the covered work, then the patent license\nyou grant is automatically extended to all recipients of the covered\nwork and works based on it.\n\n A patent license is \"discriminatory\" if it does not include within\nthe scope of its coverage, prohibits the exercise of, or is\nconditioned on the non-exercise of one or more of the rights that are\nspecifically granted under this License. You may not convey a covered\nwork if you are a party to an arrangement with a third party that is\nin the business of distributing software, under which you make payment\nto the third party based on the extent of your activity of conveying\nthe work, and under which the third party grants, to any of the\nparties who would receive the covered work from you, a discriminatory\npatent license (a) in connection with copies of the covered work\nconveyed by you (or copies made from those copies), or (b) primarily\nfor and in connection with specific products or compilations that\ncontain the covered work, unless you entered into that arrangement,\nor that patent license was granted, prior to 28 March 2007.\n\n Nothing in this License shall be construed as excluding or limiting\nany implied license or other defenses to infringement that may\notherwise be available to you under applicable patent law.\n\n 12. No Surrender of Others' Freedom.\n\n If conditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License. If you cannot convey a\ncovered work so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you may\nnot convey it at all. For example, if you agree to terms that obligate you\nto collect a royalty for further conveying from those to whom you convey\nthe Program, the only way you could satisfy both those terms and this\nLicense would be to refrain entirely from conveying the Program.\n\n 13. Use with the GNU Affero General Public License.\n\n Notwithstanding any other provision of this License, you have\npermission to link or combine any covered work with a work licensed\nunder version 3 of the GNU Affero General Public License into a single\ncombined work, and to convey the resulting work. The terms of this\nLicense will continue to apply to the part which is the covered work,\nbut the special requirements of the GNU Affero General Public License,\nsection 13, concerning interaction through a network will apply to the\ncombination as such.\n\n 14. Revised Versions of this License.\n\n The Free Software Foundation may publish revised and/or new versions of\nthe GNU General Public License from time to time. Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\n Each version is given a distinguishing version number. If the\nProgram specifies that a certain numbered version of the GNU General\nPublic License \"or any later version\" applies to it, you have the\noption of following the terms and conditions either of that numbered\nversion or of any later version published by the Free Software\nFoundation. If the Program does not specify a version number of the\nGNU General Public License, you may choose any version ever published\nby the Free Software Foundation.\n\n If the Program specifies that a proxy can decide which future\nversions of the GNU General Public License can be used, that proxy's\npublic statement of acceptance of a version permanently authorizes you\nto choose that version for the Program.\n\n Later license versions may give you additional or different\npermissions. However, no additional obligations are imposed on any\nauthor or copyright holder as a result of your choosing to follow a\nlater version.\n\n 15. Disclaimer of Warranty.\n\n THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\nAPPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\nIS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n 16. Limitation of Liability.\n\n IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGES.\n\n 17. Interpretation of Sections 15 and 16.\n\n If the disclaimer of warranty and limitation of liability provided\nabove cannot be given local legal effect according to their terms,\nreviewing courts shall apply local law that most closely approximates\nan absolute waiver of all civil liability in connection with the\nProgram, unless a warranty or assumption of liability accompanies a\ncopy of the Program in return for a fee.\n\n END OF TERMS AND CONDITIONS\n\n How to Apply These Terms to Your New Programs\n\n If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n To do so, attach the following notices to the program. It is safest\nto attach them to the start of each source file to most effectively\nstate the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n <one line to give the program's name and a brief idea of what it does.>\n Copyright (C) <year> <name of author>\n\n This program is free software: you can redistribute it and/or modify\n it under the terms of the GNU General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n This program is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License\n along with this program. If not, see <http://www.gnu.org/licenses/>.\n\nAlso add information on how to contact you by electronic and paper mail.\n\n If the program does terminal interaction, make it output a short\nnotice like this when it starts in an interactive mode:\n\n <program> Copyright (C) <year> <name of author>\n This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n This is free software, and you are welcome to redistribute it\n under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate\nparts of the General Public License. Of course, your program's commands\nmight be different; for a GUI interface, you would use an \"about box\".\n\n You should also get your employer (if you work as a programmer) or school,\nif any, to sign a \"copyright disclaimer\" for the program, if necessary.\nFor more information on this, and how to apply and follow the GNU GPL, see\n<http://www.gnu.org/licenses/>.\n\n The GNU General Public License does not permit incorporating your program\ninto proprietary programs. If your program is a subroutine library, you\nmay consider it more useful to permit linking proprietary applications with\nthe library. If this is what you want to do, use the GNU Lesser General\nPublic License instead of this License. But first, please read\n<http://www.gnu.org/philosophy/why-not-lgpl.html>.\n\n*/\n"
+ "2.0.0/tokens/EtherToken/WETH9.sol": "// Copyright (C) 2015, 2016, 2017 Dapphub\n\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see <http://www.gnu.org/licenses/>.\n\n// solhint-disable\npragma solidity ^0.4.18;\n\n\ncontract WETH9 {\n string public name = \"Wrapped Ether\";\n string public symbol = \"WETH\";\n uint8 public decimals = 18;\n\n event Approval(address indexed src, address indexed guy, uint wad);\n event Transfer(address indexed src, address indexed dst, uint wad);\n event Deposit(address indexed dst, uint wad);\n event Withdrawal(address indexed src, uint wad);\n\n mapping (address => uint) public balanceOf;\n mapping (address => mapping (address => uint)) public allowance;\n\n function() public payable {\n deposit();\n }\n function deposit() public payable {\n balanceOf[msg.sender] += msg.value;\n Deposit(msg.sender, msg.value);\n }\n function withdraw(uint wad) public {\n require(balanceOf[msg.sender] >= wad);\n balanceOf[msg.sender] -= wad;\n msg.sender.transfer(wad);\n Withdrawal(msg.sender, wad);\n }\n\n function totalSupply() public view returns (uint) {\n return this.balance;\n }\n\n function approve(address guy, uint wad) public returns (bool) {\n allowance[msg.sender][guy] = wad;\n Approval(msg.sender, guy, wad);\n return true;\n }\n\n function transfer(address dst, uint wad) public returns (bool) {\n return transferFrom(msg.sender, dst, wad);\n }\n\n function transferFrom(address src, address dst, uint wad)\n public\n returns (bool)\n {\n require(balanceOf[src] >= wad);\n\n if (src != msg.sender && allowance[src][msg.sender] != uint(-1)) {\n require(allowance[src][msg.sender] >= wad);\n allowance[src][msg.sender] -= wad;\n }\n\n balanceOf[src] -= wad;\n balanceOf[dst] += wad;\n\n Transfer(src, dst, wad);\n\n return true;\n }\n}\n\n\n/*\n GNU GENERAL PUBLIC LICENSE\n Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n Preamble\n\n The GNU General Public License is a free, copyleft license for\nsoftware and other kinds of works.\n\n The licenses for most software and other practical works are designed\nto take away your freedom to share and change the works. By contrast,\nthe GNU General Public License is intended to guarantee your freedom to\nshare and change all versions of a program--to make sure it remains free\nsoftware for all its users. We, the Free Software Foundation, use the\nGNU General Public License for most of our software; it applies also to\nany other work released this way by its authors. You can apply it to\nyour programs, too.\n\n When we speak of free software, we are referring to freedom, not\nprice. Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthem if you wish), that you receive source code or can get it if you\nwant it, that you can change the software or use pieces of it in new\nfree programs, and that you know you can do these things.\n\n To protect your rights, we need to prevent others from denying you\nthese rights or asking you to surrender the rights. Therefore, you have\ncertain responsibilities if you distribute copies of the software, or if\nyou modify it: responsibilities to respect the freedom of others.\n\n For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must pass on to the recipients the same\nfreedoms that you received. You must make sure that they, too, receive\nor can get the source code. And you must show them these terms so they\nknow their rights.\n\n Developers that use the GNU GPL protect your rights with two steps:\n(1) assert copyright on the software, and (2) offer you this License\ngiving you legal permission to copy, distribute and/or modify it.\n\n For the developers' and authors' protection, the GPL clearly explains\nthat there is no warranty for this free software. For both users' and\nauthors' sake, the GPL requires that modified versions be marked as\nchanged, so that their problems will not be attributed erroneously to\nauthors of previous versions.\n\n Some devices are designed to deny users access to install or run\nmodified versions of the software inside them, although the manufacturer\ncan do so. This is fundamentally incompatible with the aim of\nprotecting users' freedom to change the software. The systematic\npattern of such abuse occurs in the area of products for individuals to\nuse, which is precisely where it is most unacceptable. Therefore, we\nhave designed this version of the GPL to prohibit the practice for those\nproducts. If such problems arise substantially in other domains, we\nstand ready to extend this provision to those domains in future versions\nof the GPL, as needed to protect the freedom of users.\n\n Finally, every program is threatened constantly by software patents.\nStates should not allow patents to restrict development and use of\nsoftware on general-purpose computers, but in those that do, we wish to\navoid the special danger that patents applied to a free program could\nmake it effectively proprietary. To prevent this, the GPL assures that\npatents cannot be used to render the program non-free.\n\n The precise terms and conditions for copying, distribution and\nmodification follow.\n\n TERMS AND CONDITIONS\n\n 0. Definitions.\n\n \"This License\" refers to version 3 of the GNU General Public License.\n\n \"Copyright\" also means copyright-like laws that apply to other kinds of\nworks, such as semiconductor masks.\n\n \"The Program\" refers to any copyrightable work licensed under this\nLicense. Each licensee is addressed as \"you\". \"Licensees\" and\n\"recipients\" may be individuals or organizations.\n\n To \"modify\" a work means to copy from or adapt all or part of the work\nin a fashion requiring copyright permission, other than the making of an\nexact copy. The resulting work is called a \"modified version\" of the\nearlier work or a work \"based on\" the earlier work.\n\n A \"covered work\" means either the unmodified Program or a work based\non the Program.\n\n To \"propagate\" a work means to do anything with it that, without\npermission, would make you directly or secondarily liable for\ninfringement under applicable copyright law, except executing it on a\ncomputer or modifying a private copy. Propagation includes copying,\ndistribution (with or without modification), making available to the\npublic, and in some countries other activities as well.\n\n To \"convey\" a work means any kind of propagation that enables other\nparties to make or receive copies. Mere interaction with a user through\na computer network, with no transfer of a copy, is not conveying.\n\n An interactive user interface displays \"Appropriate Legal Notices\"\nto the extent that it includes a convenient and prominently visible\nfeature that (1) displays an appropriate copyright notice, and (2)\ntells the user that there is no warranty for the work (except to the\nextent that warranties are provided), that licensees may convey the\nwork under this License, and how to view a copy of this License. If\nthe interface presents a list of user commands or options, such as a\nmenu, a prominent item in the list meets this criterion.\n\n 1. Source Code.\n\n The \"source code\" for a work means the preferred form of the work\nfor making modifications to it. \"Object code\" means any non-source\nform of a work.\n\n A \"Standard Interface\" means an interface that either is an official\nstandard defined by a recognized standards body, or, in the case of\ninterfaces specified for a particular programming language, one that\nis widely used among developers working in that language.\n\n The \"System Libraries\" of an executable work include anything, other\nthan the work as a whole, that (a) is included in the normal form of\npackaging a Major Component, but which is not part of that Major\nComponent, and (b) serves only to enable use of the work with that\nMajor Component, or to implement a Standard Interface for which an\nimplementation is available to the public in source code form. A\n\"Major Component\", in this context, means a major essential component\n(kernel, window system, and so on) of the specific operating system\n(if any) on which the executable work runs, or a compiler used to\nproduce the work, or an object code interpreter used to run it.\n\n The \"Corresponding Source\" for a work in object code form means all\nthe source code needed to generate, install, and (for an executable\nwork) run the object code and to modify the work, including scripts to\ncontrol those activities. However, it does not include the work's\nSystem Libraries, or general-purpose tools or generally available free\nprograms which are used unmodified in performing those activities but\nwhich are not part of the work. For example, Corresponding Source\nincludes interface definition files associated with source files for\nthe work, and the source code for shared libraries and dynamically\nlinked subprograms that the work is specifically designed to require,\nsuch as by intimate data communication or control flow between those\nsubprograms and other parts of the work.\n\n The Corresponding Source need not include anything that users\ncan regenerate automatically from other parts of the Corresponding\nSource.\n\n The Corresponding Source for a work in source code form is that\nsame work.\n\n 2. Basic Permissions.\n\n All rights granted under this License are granted for the term of\ncopyright on the Program, and are irrevocable provided the stated\nconditions are met. This License explicitly affirms your unlimited\npermission to run the unmodified Program. The output from running a\ncovered work is covered by this License only if the output, given its\ncontent, constitutes a covered work. This License acknowledges your\nrights of fair use or other equivalent, as provided by copyright law.\n\n You may make, run and propagate covered works that you do not\nconvey, without conditions so long as your license otherwise remains\nin force. You may convey covered works to others for the sole purpose\nof having them make modifications exclusively for you, or provide you\nwith facilities for running those works, provided that you comply with\nthe terms of this License in conveying all material for which you do\nnot control copyright. Those thus making or running the covered works\nfor you must do so exclusively on your behalf, under your direction\nand control, on terms that prohibit them from making any copies of\nyour copyrighted material outside their relationship with you.\n\n Conveying under any other circumstances is permitted solely under\nthe conditions stated below. Sublicensing is not allowed; section 10\nmakes it unnecessary.\n\n 3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n\n No covered work shall be deemed part of an effective technological\nmeasure under any applicable law fulfilling obligations under article\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\nsimilar laws prohibiting or restricting circumvention of such\nmeasures.\n\n When you convey a covered work, you waive any legal power to forbid\ncircumvention of technological measures to the extent such circumvention\nis effected by exercising rights under this License with respect to\nthe covered work, and you disclaim any intention to limit operation or\nmodification of the work as a means of enforcing, against the work's\nusers, your or third parties' legal rights to forbid circumvention of\ntechnological measures.\n\n 4. Conveying Verbatim Copies.\n\n You may convey verbatim copies of the Program's source code as you\nreceive it, in any medium, provided that you conspicuously and\nappropriately publish on each copy an appropriate copyright notice;\nkeep intact all notices stating that this License and any\nnon-permissive terms added in accord with section 7 apply to the code;\nkeep intact all notices of the absence of any warranty; and give all\nrecipients a copy of this License along with the Program.\n\n You may charge any price or no price for each copy that you convey,\nand you may offer support or warranty protection for a fee.\n\n 5. Conveying Modified Source Versions.\n\n You may convey a work based on the Program, or the modifications to\nproduce it from the Program, in the form of source code under the\nterms of section 4, provided that you also meet all of these conditions:\n\n a) The work must carry prominent notices stating that you modified\n it, and giving a relevant date.\n\n b) The work must carry prominent notices stating that it is\n released under this License and any conditions added under section\n 7. This requirement modifies the requirement in section 4 to\n \"keep intact all notices\".\n\n c) You must license the entire work, as a whole, under this\n License to anyone who comes into possession of a copy. This\n License will therefore apply, along with any applicable section 7\n additional terms, to the whole of the work, and all its parts,\n regardless of how they are packaged. This License gives no\n permission to license the work in any other way, but it does not\n invalidate such permission if you have separately received it.\n\n d) If the work has interactive user interfaces, each must display\n Appropriate Legal Notices; however, if the Program has interactive\n interfaces that do not display Appropriate Legal Notices, your\n work need not make them do so.\n\n A compilation of a covered work with other separate and independent\nworks, which are not by their nature extensions of the covered work,\nand which are not combined with it such as to form a larger program,\nin or on a volume of a storage or distribution medium, is called an\n\"aggregate\" if the compilation and its resulting copyright are not\nused to limit the access or legal rights of the compilation's users\nbeyond what the individual works permit. Inclusion of a covered work\nin an aggregate does not cause this License to apply to the other\nparts of the aggregate.\n\n 6. Conveying Non-Source Forms.\n\n You may convey a covered work in object code form under the terms\nof sections 4 and 5, provided that you also convey the\nmachine-readable Corresponding Source under the terms of this License,\nin one of these ways:\n\n a) Convey the object code in, or embodied in, a physical product\n (including a physical distribution medium), accompanied by the\n Corresponding Source fixed on a durable physical medium\n customarily used for software interchange.\n\n b) Convey the object code in, or embodied in, a physical product\n (including a physical distribution medium), accompanied by a\n written offer, valid for at least three years and valid for as\n long as you offer spare parts or customer support for that product\n model, to give anyone who possesses the object code either (1) a\n copy of the Corresponding Source for all the software in the\n product that is covered by this License, on a durable physical\n medium customarily used for software interchange, for a price no\n more than your reasonable cost of physically performing this\n conveying of source, or (2) access to copy the\n Corresponding Source from a network server at no charge.\n\n c) Convey individual copies of the object code with a copy of the\n written offer to provide the Corresponding Source. This\n alternative is allowed only occasionally and noncommercially, and\n only if you received the object code with such an offer, in accord\n with subsection 6b.\n\n d) Convey the object code by offering access from a designated\n place (gratis or for a charge), and offer equivalent access to the\n Corresponding Source in the same way through the same place at no\n further charge. You need not require recipients to copy the\n Corresponding Source along with the object code. If the place to\n copy the object code is a network server, the Corresponding Source\n may be on a different server (operated by you or a third party)\n that supports equivalent copying facilities, provided you maintain\n clear directions next to the object code saying where to find the\n Corresponding Source. Regardless of what server hosts the\n Corresponding Source, you remain obligated to ensure that it is\n available for as long as needed to satisfy these requirements.\n\n e) Convey the object code using peer-to-peer transmission, provided\n you inform other peers where the object code and Corresponding\n Source of the work are being offered to the general public at no\n charge under subsection 6d.\n\n A separable portion of the object code, whose source code is excluded\nfrom the Corresponding Source as a System Library, need not be\nincluded in conveying the object code work.\n\n A \"User Product\" is either (1) a \"consumer product\", which means any\ntangible personal property which is normally used for personal, family,\nor household purposes, or (2) anything designed or sold for incorporation\ninto a dwelling. In determining whether a product is a consumer product,\ndoubtful cases shall be resolved in favor of coverage. For a particular\nproduct received by a particular user, \"normally used\" refers to a\ntypical or common use of that class of product, regardless of the status\nof the particular user or of the way in which the particular user\nactually uses, or expects or is expected to use, the product. A product\nis a consumer product regardless of whether the product has substantial\ncommercial, industrial or non-consumer uses, unless such uses represent\nthe only significant mode of use of the product.\n\n \"Installation Information\" for a User Product means any methods,\nprocedures, authorization keys, or other information required to install\nand execute modified versions of a covered work in that User Product from\na modified version of its Corresponding Source. The information must\nsuffice to ensure that the continued functioning of the modified object\ncode is in no case prevented or interfered with solely because\nmodification has been made.\n\n If you convey an object code work under this section in, or with, or\nspecifically for use in, a User Product, and the conveying occurs as\npart of a transaction in which the right of possession and use of the\nUser Product is transferred to the recipient in perpetuity or for a\nfixed term (regardless of how the transaction is characterized), the\nCorresponding Source conveyed under this section must be accompanied\nby the Installation Information. But this requirement does not apply\nif neither you nor any third party retains the ability to install\nmodified object code on the User Product (for example, the work has\nbeen installed in ROM).\n\n The requirement to provide Installation Information does not include a\nrequirement to continue to provide support service, warranty, or updates\nfor a work that has been modified or installed by the recipient, or for\nthe User Product in which it has been modified or installed. Access to a\nnetwork may be denied when the modification itself materially and\nadversely affects the operation of the network or violates the rules and\nprotocols for communication across the network.\n\n Corresponding Source conveyed, and Installation Information provided,\nin accord with this section must be in a format that is publicly\ndocumented (and with an implementation available to the public in\nsource code form), and must require no special password or key for\nunpacking, reading or copying.\n\n 7. Additional Terms.\n\n \"Additional permissions\" are terms that supplement the terms of this\nLicense by making exceptions from one or more of its conditions.\nAdditional permissions that are applicable to the entire Program shall\nbe treated as though they were included in this License, to the extent\nthat they are valid under applicable law. If additional permissions\napply only to part of the Program, that part may be used separately\nunder those permissions, but the entire Program remains governed by\nthis License without regard to the additional permissions.\n\n When you convey a copy of a covered work, you may at your option\nremove any additional permissions from that copy, or from any part of\nit. (Additional permissions may be written to require their own\nremoval in certain cases when you modify the work.) You may place\nadditional permissions on material, added by you to a covered work,\nfor which you have or can give appropriate copyright permission.\n\n Notwithstanding any other provision of this License, for material you\nadd to a covered work, you may (if authorized by the copyright holders of\nthat material) supplement the terms of this License with terms:\n\n a) Disclaiming warranty or limiting liability differently from the\n terms of sections 15 and 16 of this License; or\n\n b) Requiring preservation of specified reasonable legal notices or\n author attributions in that material or in the Appropriate Legal\n Notices displayed by works containing it; or\n\n c) Prohibiting misrepresentation of the origin of that material, or\n requiring that modified versions of such material be marked in\n reasonable ways as different from the original version; or\n\n d) Limiting the use for publicity purposes of names of licensors or\n authors of the material; or\n\n e) Declining to grant rights under trademark law for use of some\n trade names, trademarks, or service marks; or\n\n f) Requiring indemnification of licensors and authors of that\n material by anyone who conveys the material (or modified versions of\n it) with contractual assumptions of liability to the recipient, for\n any liability that these contractual assumptions directly impose on\n those licensors and authors.\n\n All other non-permissive additional terms are considered \"further\nrestrictions\" within the meaning of section 10. If the Program as you\nreceived it, or any part of it, contains a notice stating that it is\ngoverned by this License along with a term that is a further\nrestriction, you may remove that term. If a license document contains\na further restriction but permits relicensing or conveying under this\nLicense, you may add to a covered work material governed by the terms\nof that license document, provided that the further restriction does\nnot survive such relicensing or conveying.\n\n If you add terms to a covered work in accord with this section, you\nmust place, in the relevant source files, a statement of the\nadditional terms that apply to those files, or a notice indicating\nwhere to find the applicable terms.\n\n Additional terms, permissive or non-permissive, may be stated in the\nform of a separately written license, or stated as exceptions;\nthe above requirements apply either way.\n\n 8. Termination.\n\n You may not propagate or modify a covered work except as expressly\nprovided under this License. Any attempt otherwise to propagate or\nmodify it is void, and will automatically terminate your rights under\nthis License (including any patent licenses granted under the third\nparagraph of section 11).\n\n However, if you cease all violation of this License, then your\nlicense from a particular copyright holder is reinstated (a)\nprovisionally, unless and until the copyright holder explicitly and\nfinally terminates your license, and (b) permanently, if the copyright\nholder fails to notify you of the violation by some reasonable means\nprior to 60 days after the cessation.\n\n Moreover, your license from a particular copyright holder is\nreinstated permanently if the copyright holder notifies you of the\nviolation by some reasonable means, this is the first time you have\nreceived notice of violation of this License (for any work) from that\ncopyright holder, and you cure the violation prior to 30 days after\nyour receipt of the notice.\n\n Termination of your rights under this section does not terminate the\nlicenses of parties who have received copies or rights from you under\nthis License. If your rights have been terminated and not permanently\nreinstated, you do not qualify to receive new licenses for the same\nmaterial under section 10.\n\n 9. Acceptance Not Required for Having Copies.\n\n You are not required to accept this License in order to receive or\nrun a copy of the Program. Ancillary propagation of a covered work\noccurring solely as a consequence of using peer-to-peer transmission\nto receive a copy likewise does not require acceptance. However,\nnothing other than this License grants you permission to propagate or\nmodify any covered work. These actions infringe copyright if you do\nnot accept this License. Therefore, by modifying or propagating a\ncovered work, you indicate your acceptance of this License to do so.\n\n 10. Automatic Licensing of Downstream Recipients.\n\n Each time you convey a covered work, the recipient automatically\nreceives a license from the original licensors, to run, modify and\npropagate that work, subject to this License. You are not responsible\nfor enforcing compliance by third parties with this License.\n\n An \"entity transaction\" is a transaction transferring control of an\norganization, or substantially all assets of one, or subdividing an\norganization, or merging organizations. If propagation of a covered\nwork results from an entity transaction, each party to that\ntransaction who receives a copy of the work also receives whatever\nlicenses to the work the party's predecessor in interest had or could\ngive under the previous paragraph, plus a right to possession of the\nCorresponding Source of the work from the predecessor in interest, if\nthe predecessor has it or can get it with reasonable efforts.\n\n You may not impose any further restrictions on the exercise of the\nrights granted or affirmed under this License. For example, you may\nnot impose a license fee, royalty, or other charge for exercise of\nrights granted under this License, and you may not initiate litigation\n(including a cross-claim or counterclaim in a lawsuit) alleging that\nany patent claim is infringed by making, using, selling, offering for\nsale, or importing the Program or any portion of it.\n\n 11. Patents.\n\n A \"contributor\" is a copyright holder who authorizes use under this\nLicense of the Program or a work on which the Program is based. The\nwork thus licensed is called the contributor's \"contributor version\".\n\n A contributor's \"essential patent claims\" are all patent claims\nowned or controlled by the contributor, whether already acquired or\nhereafter acquired, that would be infringed by some manner, permitted\nby this License, of making, using, or selling its contributor version,\nbut do not include claims that would be infringed only as a\nconsequence of further modification of the contributor version. For\npurposes of this definition, \"control\" includes the right to grant\npatent sublicenses in a manner consistent with the requirements of\nthis License.\n\n Each contributor grants you a non-exclusive, worldwide, royalty-free\npatent license under the contributor's essential patent claims, to\nmake, use, sell, offer for sale, import and otherwise run, modify and\npropagate the contents of its contributor version.\n\n In the following three paragraphs, a \"patent license\" is any express\nagreement or commitment, however denominated, not to enforce a patent\n(such as an express permission to practice a patent or covenant not to\nsue for patent infringement). To \"grant\" such a patent license to a\nparty means to make such an agreement or commitment not to enforce a\npatent against the party.\n\n If you convey a covered work, knowingly relying on a patent license,\nand the Corresponding Source of the work is not available for anyone\nto copy, free of charge and under the terms of this License, through a\npublicly available network server or other readily accessible means,\nthen you must either (1) cause the Corresponding Source to be so\navailable, or (2) arrange to deprive yourself of the benefit of the\npatent license for this particular work, or (3) arrange, in a manner\nconsistent with the requirements of this License, to extend the patent\nlicense to downstream recipients. \"Knowingly relying\" means you have\nactual knowledge that, but for the patent license, your conveying the\ncovered work in a country, or your recipient's use of the covered work\nin a country, would infringe one or more identifiable patents in that\ncountry that you have reason to believe are valid.\n\n If, pursuant to or in connection with a single transaction or\narrangement, you convey, or propagate by procuring conveyance of, a\ncovered work, and grant a patent license to some of the parties\nreceiving the covered work authorizing them to use, propagate, modify\nor convey a specific copy of the covered work, then the patent license\nyou grant is automatically extended to all recipients of the covered\nwork and works based on it.\n\n A patent license is \"discriminatory\" if it does not include within\nthe scope of its coverage, prohibits the exercise of, or is\nconditioned on the non-exercise of one or more of the rights that are\nspecifically granted under this License. You may not convey a covered\nwork if you are a party to an arrangement with a third party that is\nin the business of distributing software, under which you make payment\nto the third party based on the extent of your activity of conveying\nthe work, and under which the third party grants, to any of the\nparties who would receive the covered work from you, a discriminatory\npatent license (a) in connection with copies of the covered work\nconveyed by you (or copies made from those copies), or (b) primarily\nfor and in connection with specific products or compilations that\ncontain the covered work, unless you entered into that arrangement,\nor that patent license was granted, prior to 28 March 2007.\n\n Nothing in this License shall be construed as excluding or limiting\nany implied license or other defenses to infringement that may\notherwise be available to you under applicable patent law.\n\n 12. No Surrender of Others' Freedom.\n\n If conditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License. If you cannot convey a\ncovered work so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you may\nnot convey it at all. For example, if you agree to terms that obligate you\nto collect a royalty for further conveying from those to whom you convey\nthe Program, the only way you could satisfy both those terms and this\nLicense would be to refrain entirely from conveying the Program.\n\n 13. Use with the GNU Affero General Public License.\n\n Notwithstanding any other provision of this License, you have\npermission to link or combine any covered work with a work licensed\nunder version 3 of the GNU Affero General Public License into a single\ncombined work, and to convey the resulting work. The terms of this\nLicense will continue to apply to the part which is the covered work,\nbut the special requirements of the GNU Affero General Public License,\nsection 13, concerning interaction through a network will apply to the\ncombination as such.\n\n 14. Revised Versions of this License.\n\n The Free Software Foundation may publish revised and/or new versions of\nthe GNU General Public License from time to time. Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\n Each version is given a distinguishing version number. If the\nProgram specifies that a certain numbered version of the GNU General\nPublic License \"or any later version\" applies to it, you have the\noption of following the terms and conditions either of that numbered\nversion or of any later version published by the Free Software\nFoundation. If the Program does not specify a version number of the\nGNU General Public License, you may choose any version ever published\nby the Free Software Foundation.\n\n If the Program specifies that a proxy can decide which future\nversions of the GNU General Public License can be used, that proxy's\npublic statement of acceptance of a version permanently authorizes you\nto choose that version for the Program.\n\n Later license versions may give you additional or different\npermissions. However, no additional obligations are imposed on any\nauthor or copyright holder as a result of your choosing to follow a\nlater version.\n\n 15. Disclaimer of Warranty.\n\n THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\nAPPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\nIS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n 16. Limitation of Liability.\n\n IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGES.\n\n 17. Interpretation of Sections 15 and 16.\n\n If the disclaimer of warranty and limitation of liability provided\nabove cannot be given local legal effect according to their terms,\nreviewing courts shall apply local law that most closely approximates\nan absolute waiver of all civil liability in connection with the\nProgram, unless a warranty or assumption of liability accompanies a\ncopy of the Program in return for a fee.\n\n END OF TERMS AND CONDITIONS\n\n How to Apply These Terms to Your New Programs\n\n If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n To do so, attach the following notices to the program. It is safest\nto attach them to the start of each source file to most effectively\nstate the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n <one line to give the program's name and a brief idea of what it does.>\n Copyright (C) <year> <name of author>\n\n This program is free software: you can redistribute it and/or modify\n it under the terms of the GNU General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n This program is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License\n along with this program. If not, see <http://www.gnu.org/licenses/>.\n\nAlso add information on how to contact you by electronic and paper mail.\n\n If the program does terminal interaction, make it output a short\nnotice like this when it starts in an interactive mode:\n\n <program> Copyright (C) <year> <name of author>\n This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n This is free software, and you are welcome to redistribute it\n under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate\nparts of the General Public License. Of course, your program's commands\nmight be different; for a GUI interface, you would use an \"about box\".\n\n You should also get your employer (if you work as a programmer) or school,\nif any, to sign a \"copyright disclaimer\" for the program, if necessary.\nFor more information on this, and how to apply and follow the GNU GPL, see\n<http://www.gnu.org/licenses/>.\n\n The GNU General Public License does not permit incorporating your program\ninto proprietary programs. If your program is a subroutine library, you\nmay consider it more useful to permit linking proprietary applications with\nthe library. If this is what you want to do, use the GNU Lesser General\nPublic License instead of this License. But first, please read\n<http://www.gnu.org/philosophy/why-not-lgpl.html>.\n\n*/\n"
},
- "sourceTreeHashHex": "0xce985174db1a24d312c0d544abb926a9b107bd9abd6424288a8e54a16d3e006b",
+ "sourceTreeHashHex": "0x4b4b69439e26ff38240103cd508b4efd40aca83463facedd93a8b5cb976f58d2",
"compiler": {
"name": "solc",
"version": "soljson-v0.4.24+commit.e67f0147.js",
diff --git a/packages/migrations/artifacts/2.0.0/Whitelist.json b/packages/migrations/artifacts/2.0.0/Whitelist.json
index 8c4e10f0d..2bffdcc7b 100644
--- a/packages/migrations/artifacts/2.0.0/Whitelist.json
+++ b/packages/migrations/artifacts/2.0.0/Whitelist.json
@@ -186,15 +186,15 @@
"evm": {
"bytecode": {
"linkReferences": {},
- "object": "0x60806040523480156200001157600080fd5b5060405160208062000f56833981018060405262000033919081019062000185565b6000805433600160a060020a03199182161790915560028054909116600160a060020a03831617905560408051306c01000000000000000000000000026020808301919091527f060000000000000000000000000000000000000000000000000000000000000060348301528251808303601501815260359092019092528051620000c3926003920190620000cb565b5050620001ba565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200010e57805160ff19168380011785556200013e565b828001600101855582156200013e579182015b828111156200013e57825182559160200191906001019062000121565b506200014c92915062000150565b5090565b6200016d91905b808211156200014c576000815560010162000157565b90565b60006200017e8251620001ae565b9392505050565b6000602082840312156200019857600080fd5b6000620001a6848462000170565b949350505050565b600160a060020a031690565b610d8c80620001ca6000396000f3006080604052600436106100775763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663141da876811461007c5780633af32abf1461009e5780638da5cb5b146100d457806393634702146100f6578063c07732a314610116578063f2fde38b14610136575b600080fd5b34801561008857600080fd5b5061009c6100973660046108da565b610156565b005b3480156100aa57600080fd5b506100be6100b9366004610812565b610457565b6040516100cb9190610ba4565b60405180910390f35b3480156100e057600080fd5b506100e961046c565b6040516100cb9190610b90565b34801561010257600080fd5b506100be610111366004610872565b610488565b34801561012257600080fd5b5061009c610131366004610838565b6104a9565b34801561014257600080fd5b5061009c610151366004610812565b610550565b60408051808201909152600e81527f494e56414c49445f53454e444552000000000000000000000000000000000000602082015233906060903283146101d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101c99190610bb2565b60405180910390fd5b50855173ffffffffffffffffffffffffffffffffffffffff16600090815260016020908152604091829020548251808401909352601583527f4d414b45525f4e4f545f57484954454c495354454400000000000000000000009183019190915260ff16151561026e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101c99190610bb2565b5073ffffffffffffffffffffffffffffffffffffffff8216600090815260016020908152604091829020548251808401909352601583527f54414b45525f4e4f545f57484954454c495354454400000000000000000000009183019190915260ff161515610309576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101c99190610bb2565b506040517fb4be83d5000000000000000000000000000000000000000000000000000000009061034190889088908790602401610bd3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925260025491517fbfc8bfce00000000000000000000000000000000000000000000000000000000815290925073ffffffffffffffffffffffffffffffffffffffff9091169063bfc8bfce9061041d90879086908690600390600401610c05565b600060405180830381600087803b15801561043757600080fd5b505af115801561044b573d6000803e3d6000fd5b50505050505050505050565b60016020526000908152604090205460ff1681565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff83163214949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101c990610bc3565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101c990610bc3565b73ffffffffffffffffffffffffffffffffffffffff8116156105fe57600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b600061060d8235610ccd565b9392505050565b600061060d8235610ce6565b600061060d8235610ceb565b600080601f8301841361063e57600080fd5b50813567ffffffffffffffff81111561065657600080fd5b60208301915083600182028301111561066e57600080fd5b9250929050565b6000601f8201831361068657600080fd5b813561069961069482610c77565b610c50565b915080825260208301602083018583830111156106b557600080fd5b6106c0838284610cee565b50505092915050565b600061018082840312156106dc57600080fd5b6106e7610180610c50565b905060006106f58484610601565b825250602061070684848301610601565b602083015250604061071a84828501610601565b604083015250606061072e84828501610601565b606083015250608061074284828501610620565b60808301525060a061075684828501610620565b60a08301525060c061076a84828501610620565b60c08301525060e061077e84828501610620565b60e08301525061010061079384828501610620565b610100830152506101206107a984828501610620565b6101208301525061014082013567ffffffffffffffff8111156107cb57600080fd5b6107d784828501610675565b6101408301525061016082013567ffffffffffffffff8111156107f957600080fd5b61080584828501610675565b6101608301525092915050565b60006020828403121561082457600080fd5b60006108308484610601565b949350505050565b6000806040838503121561084b57600080fd5b60006108578585610601565b925050602061086885828601610614565b9150509250929050565b6000806000806060858703121561088857600080fd5b60006108948787610620565b94505060206108a587828801610601565b935050604085013567ffffffffffffffff8111156108c257600080fd5b6108ce8782880161062c565b95989497509550505050565b600080600080608085870312156108f057600080fd5b843567ffffffffffffffff81111561090757600080fd5b610913878288016106c9565b945050602061092487828801610620565b935050604061093587828801610620565b925050606085013567ffffffffffffffff81111561095257600080fd5b61095e87828801610675565b91505092959194509250565b61097381610ccd565b82525050565b61097381610ce6565b600061098d82610cc9565b8084526109a1816020860160208601610cfa565b6109aa81610d2a565b9093016020019392505050565b6000815460018116600081146109d45760018114610a1057610a4c565b60028204607f1685527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082166020860152604085019250610a4c565b60028204808652602086019550610a2685610cbd565b60005b82811015610a4557815488820152600190910190602001610a29565b8701945050505b505092915050565b601381527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000602082015260400190565b8051600090610180840190610a99858261096a565b506020830151610aac602086018261096a565b506040830151610abf604086018261096a565b506060830151610ad2606086018261096a565b506080830151610ae56080860182610b87565b5060a0830151610af860a0860182610b87565b5060c0830151610b0b60c0860182610b87565b5060e0830151610b1e60e0860182610b87565b50610100830151610b33610100860182610b87565b50610120830151610b48610120860182610b87565b50610140830151848203610140860152610b628282610982565b915050610160830151848203610160860152610b7e8282610982565b95945050505050565b61097381610ceb565b60208101610b9e828461096a565b92915050565b60208101610b9e8284610979565b6020808252810161060d8184610982565b60208082528101610b9e81610a54565b60608082528101610be48186610a84565b9050610bf36020830185610b87565b8181036040830152610b7e8184610982565b60808101610c138287610b87565b610c20602083018661096a565b8181036040830152610c328185610982565b90508181036060830152610c4681846109b7565b9695505050505050565b60405181810167ffffffffffffffff81118282101715610c6f57600080fd5b604052919050565b600067ffffffffffffffff821115610c8e57600080fd5b506020601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160190565b60009081526020902090565b5190565b73ffffffffffffffffffffffffffffffffffffffff1690565b151590565b90565b82818337506000910152565b60005b83811015610d15578181015183820152602001610cfd565b83811115610d24576000848401525b50505050565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016905600a265627a7a7230582035573f99d9a61c5e4b9f1d3795a40e4258b5af1cae6f5f76043c68b7ab42c5a16c6578706572696d656e74616cf50037",
- "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP1 PUSH3 0xF56 DUP4 CODECOPY DUP2 ADD DUP1 PUSH1 0x40 MSTORE PUSH3 0x33 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH3 0x185 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD CALLER PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x2 DUP1 SLOAD SWAP1 SWAP2 AND PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD ADDRESS PUSH13 0x1000000000000000000000000 MUL PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x600000000000000000000000000000000000000000000000000000000000000 PUSH1 0x34 DUP4 ADD MSTORE DUP3 MLOAD DUP1 DUP4 SUB PUSH1 0x15 ADD DUP2 MSTORE PUSH1 0x35 SWAP1 SWAP3 ADD SWAP1 SWAP3 MSTORE DUP1 MLOAD PUSH3 0xC3 SWAP3 PUSH1 0x3 SWAP3 ADD SWAP1 PUSH3 0xCB JUMP JUMPDEST POP POP PUSH3 0x1BA JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH3 0x10E JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x13E JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x13E JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x13E JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x121 JUMP JUMPDEST POP PUSH3 0x14C SWAP3 SWAP2 POP PUSH3 0x150 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH3 0x16D SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x14C JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x157 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH3 0x17E DUP3 MLOAD PUSH3 0x1AE JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x198 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH3 0x1A6 DUP5 DUP5 PUSH3 0x170 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND SWAP1 JUMP JUMPDEST PUSH2 0xD8C DUP1 PUSH3 0x1CA PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x77 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x141DA876 DUP2 EQ PUSH2 0x7C JUMPI DUP1 PUSH4 0x3AF32ABF EQ PUSH2 0x9E JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xD4 JUMPI DUP1 PUSH4 0x93634702 EQ PUSH2 0xF6 JUMPI DUP1 PUSH4 0xC07732A3 EQ PUSH2 0x116 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x136 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x88 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x9C PUSH2 0x97 CALLDATASIZE PUSH1 0x4 PUSH2 0x8DA JUMP JUMPDEST PUSH2 0x156 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xAA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xBE PUSH2 0xB9 CALLDATASIZE PUSH1 0x4 PUSH2 0x812 JUMP JUMPDEST PUSH2 0x457 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xCB SWAP2 SWAP1 PUSH2 0xBA4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xE9 PUSH2 0x46C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xCB SWAP2 SWAP1 PUSH2 0xB90 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x102 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xBE PUSH2 0x111 CALLDATASIZE PUSH1 0x4 PUSH2 0x872 JUMP JUMPDEST PUSH2 0x488 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x122 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x9C PUSH2 0x131 CALLDATASIZE PUSH1 0x4 PUSH2 0x838 JUMP JUMPDEST PUSH2 0x4A9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x142 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x9C PUSH2 0x151 CALLDATASIZE PUSH1 0x4 PUSH2 0x812 JUMP JUMPDEST PUSH2 0x550 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0xE DUP2 MSTORE PUSH32 0x494E56414C49445F53454E444552000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER SWAP1 PUSH1 0x60 SWAP1 ORIGIN DUP4 EQ PUSH2 0x1D2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1C9 SWAP2 SWAP1 PUSH2 0xBB2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP DUP6 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE PUSH1 0x15 DUP4 MSTORE PUSH32 0x4D414B45525F4E4F545F57484954454C49535445440000000000000000000000 SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x26E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1C9 SWAP2 SWAP1 PUSH2 0xBB2 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE PUSH1 0x15 DUP4 MSTORE PUSH32 0x54414B45525F4E4F545F57484954454C49535445440000000000000000000000 SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x309 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1C9 SWAP2 SWAP1 PUSH2 0xBB2 JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH32 0xB4BE83D500000000000000000000000000000000000000000000000000000000 SWAP1 PUSH2 0x341 SWAP1 DUP9 SWAP1 DUP9 SWAP1 DUP8 SWAP1 PUSH1 0x24 ADD PUSH2 0xBD3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 DUP2 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 MSTORE PUSH1 0x2 SLOAD SWAP2 MLOAD PUSH32 0xBFC8BFCE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 SWAP3 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0xBFC8BFCE SWAP1 PUSH2 0x41D SWAP1 DUP8 SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x3 SWAP1 PUSH1 0x4 ADD PUSH2 0xC05 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x437 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x44B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND ORIGIN EQ SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x4FA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1C9 SWAP1 PUSH2 0xBC3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x5A1 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1C9 SWAP1 PUSH2 0xBC3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0x5FE JUMPI PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND OR SWAP1 SSTORE JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x60D DUP3 CALLDATALOAD PUSH2 0xCCD JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x60D DUP3 CALLDATALOAD PUSH2 0xCE6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x60D DUP3 CALLDATALOAD PUSH2 0xCEB JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x1F DUP4 ADD DUP5 SGT PUSH2 0x63E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x656 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x1 DUP3 MUL DUP4 ADD GT ISZERO PUSH2 0x66E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0x686 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x699 PUSH2 0x694 DUP3 PUSH2 0xC77 JUMP JUMPDEST PUSH2 0xC50 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP4 ADD DUP6 DUP4 DUP4 ADD GT ISZERO PUSH2 0x6B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x6C0 DUP4 DUP3 DUP5 PUSH2 0xCEE JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x180 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x6DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x6E7 PUSH2 0x180 PUSH2 0xC50 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x6F5 DUP5 DUP5 PUSH2 0x601 JUMP JUMPDEST DUP3 MSTORE POP PUSH1 0x20 PUSH2 0x706 DUP5 DUP5 DUP4 ADD PUSH2 0x601 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP PUSH1 0x40 PUSH2 0x71A DUP5 DUP3 DUP6 ADD PUSH2 0x601 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 PUSH2 0x72E DUP5 DUP3 DUP6 ADD PUSH2 0x601 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE POP PUSH1 0x80 PUSH2 0x742 DUP5 DUP3 DUP6 ADD PUSH2 0x620 JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE POP PUSH1 0xA0 PUSH2 0x756 DUP5 DUP3 DUP6 ADD PUSH2 0x620 JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE POP PUSH1 0xC0 PUSH2 0x76A DUP5 DUP3 DUP6 ADD PUSH2 0x620 JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE POP PUSH1 0xE0 PUSH2 0x77E DUP5 DUP3 DUP6 ADD PUSH2 0x620 JUMP JUMPDEST PUSH1 0xE0 DUP4 ADD MSTORE POP PUSH2 0x100 PUSH2 0x793 DUP5 DUP3 DUP6 ADD PUSH2 0x620 JUMP JUMPDEST PUSH2 0x100 DUP4 ADD MSTORE POP PUSH2 0x120 PUSH2 0x7A9 DUP5 DUP3 DUP6 ADD PUSH2 0x620 JUMP JUMPDEST PUSH2 0x120 DUP4 ADD MSTORE POP PUSH2 0x140 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x7CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7D7 DUP5 DUP3 DUP6 ADD PUSH2 0x675 JUMP JUMPDEST PUSH2 0x140 DUP4 ADD MSTORE POP PUSH2 0x160 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x7F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x805 DUP5 DUP3 DUP6 ADD PUSH2 0x675 JUMP JUMPDEST PUSH2 0x160 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x824 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x830 DUP5 DUP5 PUSH2 0x601 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x84B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x857 DUP6 DUP6 PUSH2 0x601 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x868 DUP6 DUP3 DUP7 ADD PUSH2 0x614 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x888 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x894 DUP8 DUP8 PUSH2 0x620 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x8A5 DUP8 DUP3 DUP9 ADD PUSH2 0x601 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x8C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8CE DUP8 DUP3 DUP9 ADD PUSH2 0x62C JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x8F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x907 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x913 DUP8 DUP3 DUP9 ADD PUSH2 0x6C9 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x924 DUP8 DUP3 DUP9 ADD PUSH2 0x620 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 PUSH2 0x935 DUP8 DUP3 DUP9 ADD PUSH2 0x620 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x952 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x95E DUP8 DUP3 DUP9 ADD PUSH2 0x675 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH2 0x973 DUP2 PUSH2 0xCCD JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x973 DUP2 PUSH2 0xCE6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x98D DUP3 PUSH2 0xCC9 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH2 0x9A1 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0xCFA JUMP JUMPDEST PUSH2 0x9AA DUP2 PUSH2 0xD2A JUMP JUMPDEST SWAP1 SWAP4 ADD PUSH1 0x20 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SLOAD PUSH1 0x1 DUP2 AND PUSH1 0x0 DUP2 EQ PUSH2 0x9D4 JUMPI PUSH1 0x1 DUP2 EQ PUSH2 0xA10 JUMPI PUSH2 0xA4C JUMP JUMPDEST PUSH1 0x2 DUP3 DIV PUSH1 0x7F AND DUP6 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 AND PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x40 DUP6 ADD SWAP3 POP PUSH2 0xA4C JUMP JUMPDEST PUSH1 0x2 DUP3 DIV DUP1 DUP7 MSTORE PUSH1 0x20 DUP7 ADD SWAP6 POP PUSH2 0xA26 DUP6 PUSH2 0xCBD JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0xA45 JUMPI DUP2 SLOAD DUP9 DUP3 ADD MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD PUSH2 0xA29 JUMP JUMPDEST DUP8 ADD SWAP5 POP POP POP JUMPDEST POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x13 DUP2 MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH2 0x180 DUP5 ADD SWAP1 PUSH2 0xA99 DUP6 DUP3 PUSH2 0x96A JUMP JUMPDEST POP PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0xAAC PUSH1 0x20 DUP7 ADD DUP3 PUSH2 0x96A JUMP JUMPDEST POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0xABF PUSH1 0x40 DUP7 ADD DUP3 PUSH2 0x96A JUMP JUMPDEST POP PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0xAD2 PUSH1 0x60 DUP7 ADD DUP3 PUSH2 0x96A JUMP JUMPDEST POP PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0xAE5 PUSH1 0x80 DUP7 ADD DUP3 PUSH2 0xB87 JUMP JUMPDEST POP PUSH1 0xA0 DUP4 ADD MLOAD PUSH2 0xAF8 PUSH1 0xA0 DUP7 ADD DUP3 PUSH2 0xB87 JUMP JUMPDEST POP PUSH1 0xC0 DUP4 ADD MLOAD PUSH2 0xB0B PUSH1 0xC0 DUP7 ADD DUP3 PUSH2 0xB87 JUMP JUMPDEST POP PUSH1 0xE0 DUP4 ADD MLOAD PUSH2 0xB1E PUSH1 0xE0 DUP7 ADD DUP3 PUSH2 0xB87 JUMP JUMPDEST POP PUSH2 0x100 DUP4 ADD MLOAD PUSH2 0xB33 PUSH2 0x100 DUP7 ADD DUP3 PUSH2 0xB87 JUMP JUMPDEST POP PUSH2 0x120 DUP4 ADD MLOAD PUSH2 0xB48 PUSH2 0x120 DUP7 ADD DUP3 PUSH2 0xB87 JUMP JUMPDEST POP PUSH2 0x140 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH2 0x140 DUP7 ADD MSTORE PUSH2 0xB62 DUP3 DUP3 PUSH2 0x982 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x160 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH2 0x160 DUP7 ADD MSTORE PUSH2 0xB7E DUP3 DUP3 PUSH2 0x982 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x973 DUP2 PUSH2 0xCEB JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xB9E DUP3 DUP5 PUSH2 0x96A JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xB9E DUP3 DUP5 PUSH2 0x979 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x60D DUP2 DUP5 PUSH2 0x982 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xB9E DUP2 PUSH2 0xA54 JUMP JUMPDEST PUSH1 0x60 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xBE4 DUP2 DUP7 PUSH2 0xA84 JUMP JUMPDEST SWAP1 POP PUSH2 0xBF3 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0xB87 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0xB7E DUP2 DUP5 PUSH2 0x982 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0xC13 DUP3 DUP8 PUSH2 0xB87 JUMP JUMPDEST PUSH2 0xC20 PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x96A JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0xC32 DUP2 DUP6 PUSH2 0x982 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0xC46 DUP2 DUP5 PUSH2 0x9B7 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0xC6F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0xC8E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x1F SWAP2 SWAP1 SWAP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST MLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xD15 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xCFD JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0xD24 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP1 JUMP STOP LOG2 PUSH6 0x627A7A723058 KECCAK256 CALLDATALOAD JUMPI 0x3f SWAP10 0xd9 0xa6 SHR 0x5e 0x4b SWAP16 SAR CALLDATACOPY SWAP6 LOG4 0xe TIMESTAMP PC 0xb5 0xaf SHR 0xae PUSH16 0x5F76043C68B7AB42C5A16C6578706572 PUSH10 0x6D656E74616CF5003700 ",
- "sourceMap": "794:3579:10:-;;;1395:188;8:9:-1;5:2;;;30:1;27;20:12;5:2;1395:188:10;;;;;;;;;;;;;;;;;;;;;;363:5:12;:18;;371:10;-1:-1:-1;;;;;;363:18:12;;;;;;;1456:8:10;:31;;;;;-1:-1:-1;;;;;1456:31:10;;;;;1519:57;;;1544:4;1519:57;;;;;;;;;;1551:24;1519:57;;;;;;26:21:-1;;;22:32;;6:49;;1519:57:10;;;;;;;1497:79;;;;:19;;:79;;;:::i;:::-;;1395:188;794:3579;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;794:3579:10;;;-1:-1:-1;794:3579:10;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;5:122:-1:-;;83:39;114:6;108:13;83:39;;;74:48;68:59;-1:-1;;;68:59;134:263;;249:2;237:9;228:7;224:23;220:32;217:2;;;265:1;262;255:12;217:2;300:1;317:64;373:7;353:9;317:64;;;307:74;211:186;-1:-1;;;;211:186;404:128;-1:-1;;;;;473:54;;456:76;;794:3579:10;;;;;;"
+ "object": "0x60806040523480156200001157600080fd5b5060405160208062000f59833981018060405262000033919081019062000185565b6000805433600160a060020a03199182161790915560028054909116600160a060020a03831617905560408051306c01000000000000000000000000026020808301919091527f060000000000000000000000000000000000000000000000000000000000000060348301528251808303601501815260359092019092528051620000c3926003920190620000cb565b5050620001ba565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200010e57805160ff19168380011785556200013e565b828001600101855582156200013e579182015b828111156200013e57825182559160200191906001019062000121565b506200014c92915062000150565b5090565b6200016d91905b808211156200014c576000815560010162000157565b90565b60006200017e8251620001ae565b9392505050565b6000602082840312156200019857600080fd5b6000620001a6848462000170565b949350505050565b600160a060020a031690565b610d8f80620001ca6000396000f3006080604052600436106100775763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663141da876811461007c5780633af32abf1461009e5780638da5cb5b146100d457806393634702146100f6578063c07732a314610116578063f2fde38b14610136575b600080fd5b34801561008857600080fd5b5061009c61009736600461082e565b610156565b005b3480156100aa57600080fd5b506100be6100b9366004610766565b6103ab565b6040516100cb9190610b88565b60405180910390f35b3480156100e057600080fd5b506100e96103c0565b6040516100cb9190610b74565b34801561010257600080fd5b506100be6101113660046107c6565b6103dc565b34801561012257600080fd5b5061009c61013136600461078c565b6103fd565b34801561014257600080fd5b5061009c610151366004610766565b6104a4565b33606032821461019b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019290610bc6565b60405180910390fd5b855173ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205460ff1615156101fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019290610bb6565b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff16151561025e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019290610b96565b6040517fb4be83d5000000000000000000000000000000000000000000000000000000009061029590889088908790602401610bd6565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925260025491517fbfc8bfce00000000000000000000000000000000000000000000000000000000815290925073ffffffffffffffffffffffffffffffffffffffff9091169063bfc8bfce9061037190879086908690600390600401610c08565b600060405180830381600087803b15801561038b57600080fd5b505af115801561039f573d6000803e3d6000fd5b50505050505050505050565b60016020526000908152604090205460ff1681565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff83163214949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461044e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019290610ba6565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019290610ba6565b73ffffffffffffffffffffffffffffffffffffffff81161561055257600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b60006105618235610cd0565b9392505050565b60006105618235610ce9565b60006105618235610cee565b600080601f8301841361059257600080fd5b50813567ffffffffffffffff8111156105aa57600080fd5b6020830191508360018202830111156105c257600080fd5b9250929050565b6000601f820183136105da57600080fd5b81356105ed6105e882610c7a565b610c53565b9150808252602083016020830185838301111561060957600080fd5b610614838284610cf1565b50505092915050565b6000610180828403121561063057600080fd5b61063b610180610c53565b905060006106498484610555565b825250602061065a84848301610555565b602083015250604061066e84828501610555565b604083015250606061068284828501610555565b606083015250608061069684828501610574565b60808301525060a06106aa84828501610574565b60a08301525060c06106be84828501610574565b60c08301525060e06106d284828501610574565b60e0830152506101006106e784828501610574565b610100830152506101206106fd84828501610574565b6101208301525061014082013567ffffffffffffffff81111561071f57600080fd5b61072b848285016105c9565b6101408301525061016082013567ffffffffffffffff81111561074d57600080fd5b610759848285016105c9565b6101608301525092915050565b60006020828403121561077857600080fd5b60006107848484610555565b949350505050565b6000806040838503121561079f57600080fd5b60006107ab8585610555565b92505060206107bc85828601610568565b9150509250929050565b600080600080606085870312156107dc57600080fd5b60006107e88787610574565b94505060206107f987828801610555565b935050604085013567ffffffffffffffff81111561081657600080fd5b61082287828801610580565b95989497509550505050565b6000806000806080858703121561084457600080fd5b843567ffffffffffffffff81111561085b57600080fd5b6108678782880161061d565b945050602061087887828801610574565b935050604061088987828801610574565b925050606085013567ffffffffffffffff8111156108a657600080fd5b6108b2878288016105c9565b91505092959194509250565b6108c781610cd0565b82525050565b6108c781610ce9565b60006108e182610ccc565b8084526108f5816020860160208601610cfd565b6108fe81610d2d565b9093016020019392505050565b6000815460018116600081146109285760018114610964576109a0565b60028204607f1685527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00821660208601526040850192506109a0565b6002820480865260208601955061097a85610cc0565b60005b828110156109995781548882015260019091019060200161097d565b8701945050505b505092915050565b601581527f54414b45525f4e4f545f57484954454c49535445440000000000000000000000602082015260400190565b601381527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000602082015260400190565b601581527f4d414b45525f4e4f545f57484954454c49535445440000000000000000000000602082015260400190565b600e81527f494e56414c49445f53454e444552000000000000000000000000000000000000602082015260400190565b8051600090610180840190610a7d85826108be565b506020830151610a9060208601826108be565b506040830151610aa360408601826108be565b506060830151610ab660608601826108be565b506080830151610ac96080860182610b6b565b5060a0830151610adc60a0860182610b6b565b5060c0830151610aef60c0860182610b6b565b5060e0830151610b0260e0860182610b6b565b50610100830151610b17610100860182610b6b565b50610120830151610b2c610120860182610b6b565b50610140830151848203610140860152610b4682826108d6565b915050610160830151848203610160860152610b6282826108d6565b95945050505050565b6108c781610cee565b60208101610b8282846108be565b92915050565b60208101610b8282846108cd565b60208082528101610b82816109a8565b60208082528101610b82816109d8565b60208082528101610b8281610a08565b60208082528101610b8281610a38565b60608082528101610be78186610a68565b9050610bf66020830185610b6b565b8181036040830152610b6281846108d6565b60808101610c168287610b6b565b610c2360208301866108be565b8181036040830152610c3581856108d6565b90508181036060830152610c49818461090b565b9695505050505050565b60405181810167ffffffffffffffff81118282101715610c7257600080fd5b604052919050565b600067ffffffffffffffff821115610c9157600080fd5b506020601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160190565b60009081526020902090565b5190565b73ffffffffffffffffffffffffffffffffffffffff1690565b151590565b90565b82818337506000910152565b60005b83811015610d18578181015183820152602001610d00565b83811115610d27576000848401525b50505050565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016905600a265627a7a72305820cb3fe08c332d270734ea27fa5d37920f6e33fe97bb1de3b3aa49af1d1dce8e0e6c6578706572696d656e74616cf50037",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP1 PUSH3 0xF59 DUP4 CODECOPY DUP2 ADD DUP1 PUSH1 0x40 MSTORE PUSH3 0x33 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH3 0x185 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD CALLER PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x2 DUP1 SLOAD SWAP1 SWAP2 AND PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD ADDRESS PUSH13 0x1000000000000000000000000 MUL PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x600000000000000000000000000000000000000000000000000000000000000 PUSH1 0x34 DUP4 ADD MSTORE DUP3 MLOAD DUP1 DUP4 SUB PUSH1 0x15 ADD DUP2 MSTORE PUSH1 0x35 SWAP1 SWAP3 ADD SWAP1 SWAP3 MSTORE DUP1 MLOAD PUSH3 0xC3 SWAP3 PUSH1 0x3 SWAP3 ADD SWAP1 PUSH3 0xCB JUMP JUMPDEST POP POP PUSH3 0x1BA JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH3 0x10E JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x13E JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x13E JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x13E JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x121 JUMP JUMPDEST POP PUSH3 0x14C SWAP3 SWAP2 POP PUSH3 0x150 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH3 0x16D SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x14C JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x157 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH3 0x17E DUP3 MLOAD PUSH3 0x1AE JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x198 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH3 0x1A6 DUP5 DUP5 PUSH3 0x170 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND SWAP1 JUMP JUMPDEST PUSH2 0xD8F DUP1 PUSH3 0x1CA PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x77 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x141DA876 DUP2 EQ PUSH2 0x7C JUMPI DUP1 PUSH4 0x3AF32ABF EQ PUSH2 0x9E JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xD4 JUMPI DUP1 PUSH4 0x93634702 EQ PUSH2 0xF6 JUMPI DUP1 PUSH4 0xC07732A3 EQ PUSH2 0x116 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x136 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x88 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x9C PUSH2 0x97 CALLDATASIZE PUSH1 0x4 PUSH2 0x82E JUMP JUMPDEST PUSH2 0x156 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xAA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xBE PUSH2 0xB9 CALLDATASIZE PUSH1 0x4 PUSH2 0x766 JUMP JUMPDEST PUSH2 0x3AB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xCB SWAP2 SWAP1 PUSH2 0xB88 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xE9 PUSH2 0x3C0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xCB SWAP2 SWAP1 PUSH2 0xB74 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x102 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xBE PUSH2 0x111 CALLDATASIZE PUSH1 0x4 PUSH2 0x7C6 JUMP JUMPDEST PUSH2 0x3DC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x122 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x9C PUSH2 0x131 CALLDATASIZE PUSH1 0x4 PUSH2 0x78C JUMP JUMPDEST PUSH2 0x3FD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x142 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x9C PUSH2 0x151 CALLDATASIZE PUSH1 0x4 PUSH2 0x766 JUMP JUMPDEST PUSH2 0x4A4 JUMP JUMPDEST CALLER PUSH1 0x60 ORIGIN DUP3 EQ PUSH2 0x19B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x192 SWAP1 PUSH2 0xBC6 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP6 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x1FD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x192 SWAP1 PUSH2 0xBB6 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x25E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x192 SWAP1 PUSH2 0xB96 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xB4BE83D500000000000000000000000000000000000000000000000000000000 SWAP1 PUSH2 0x295 SWAP1 DUP9 SWAP1 DUP9 SWAP1 DUP8 SWAP1 PUSH1 0x24 ADD PUSH2 0xBD6 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 DUP2 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 MSTORE PUSH1 0x2 SLOAD SWAP2 MLOAD PUSH32 0xBFC8BFCE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 SWAP3 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0xBFC8BFCE SWAP1 PUSH2 0x371 SWAP1 DUP8 SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x3 SWAP1 PUSH1 0x4 ADD PUSH2 0xC08 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x38B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x39F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND ORIGIN EQ SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x44E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x192 SWAP1 PUSH2 0xBA6 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x4F5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x192 SWAP1 PUSH2 0xBA6 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0x552 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND OR SWAP1 SSTORE JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x561 DUP3 CALLDATALOAD PUSH2 0xCD0 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x561 DUP3 CALLDATALOAD PUSH2 0xCE9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x561 DUP3 CALLDATALOAD PUSH2 0xCEE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x1F DUP4 ADD DUP5 SGT PUSH2 0x592 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x5AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x1 DUP3 MUL DUP4 ADD GT ISZERO PUSH2 0x5C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0x5DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x5ED PUSH2 0x5E8 DUP3 PUSH2 0xC7A JUMP JUMPDEST PUSH2 0xC53 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP4 ADD DUP6 DUP4 DUP4 ADD GT ISZERO PUSH2 0x609 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x614 DUP4 DUP3 DUP5 PUSH2 0xCF1 JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x180 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x630 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x63B PUSH2 0x180 PUSH2 0xC53 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x649 DUP5 DUP5 PUSH2 0x555 JUMP JUMPDEST DUP3 MSTORE POP PUSH1 0x20 PUSH2 0x65A DUP5 DUP5 DUP4 ADD PUSH2 0x555 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP PUSH1 0x40 PUSH2 0x66E DUP5 DUP3 DUP6 ADD PUSH2 0x555 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 PUSH2 0x682 DUP5 DUP3 DUP6 ADD PUSH2 0x555 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE POP PUSH1 0x80 PUSH2 0x696 DUP5 DUP3 DUP6 ADD PUSH2 0x574 JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE POP PUSH1 0xA0 PUSH2 0x6AA DUP5 DUP3 DUP6 ADD PUSH2 0x574 JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE POP PUSH1 0xC0 PUSH2 0x6BE DUP5 DUP3 DUP6 ADD PUSH2 0x574 JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE POP PUSH1 0xE0 PUSH2 0x6D2 DUP5 DUP3 DUP6 ADD PUSH2 0x574 JUMP JUMPDEST PUSH1 0xE0 DUP4 ADD MSTORE POP PUSH2 0x100 PUSH2 0x6E7 DUP5 DUP3 DUP6 ADD PUSH2 0x574 JUMP JUMPDEST PUSH2 0x100 DUP4 ADD MSTORE POP PUSH2 0x120 PUSH2 0x6FD DUP5 DUP3 DUP6 ADD PUSH2 0x574 JUMP JUMPDEST PUSH2 0x120 DUP4 ADD MSTORE POP PUSH2 0x140 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x71F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x72B DUP5 DUP3 DUP6 ADD PUSH2 0x5C9 JUMP JUMPDEST PUSH2 0x140 DUP4 ADD MSTORE POP PUSH2 0x160 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x74D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x759 DUP5 DUP3 DUP6 ADD PUSH2 0x5C9 JUMP JUMPDEST PUSH2 0x160 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x778 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x784 DUP5 DUP5 PUSH2 0x555 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x79F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x7AB DUP6 DUP6 PUSH2 0x555 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x7BC DUP6 DUP3 DUP7 ADD PUSH2 0x568 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x7DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x7E8 DUP8 DUP8 PUSH2 0x574 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x7F9 DUP8 DUP3 DUP9 ADD PUSH2 0x555 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x816 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x822 DUP8 DUP3 DUP9 ADD PUSH2 0x580 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x844 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x85B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x867 DUP8 DUP3 DUP9 ADD PUSH2 0x61D JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x878 DUP8 DUP3 DUP9 ADD PUSH2 0x574 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 PUSH2 0x889 DUP8 DUP3 DUP9 ADD PUSH2 0x574 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x8A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8B2 DUP8 DUP3 DUP9 ADD PUSH2 0x5C9 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH2 0x8C7 DUP2 PUSH2 0xCD0 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x8C7 DUP2 PUSH2 0xCE9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8E1 DUP3 PUSH2 0xCCC JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH2 0x8F5 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0xCFD JUMP JUMPDEST PUSH2 0x8FE DUP2 PUSH2 0xD2D JUMP JUMPDEST SWAP1 SWAP4 ADD PUSH1 0x20 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SLOAD PUSH1 0x1 DUP2 AND PUSH1 0x0 DUP2 EQ PUSH2 0x928 JUMPI PUSH1 0x1 DUP2 EQ PUSH2 0x964 JUMPI PUSH2 0x9A0 JUMP JUMPDEST PUSH1 0x2 DUP3 DIV PUSH1 0x7F AND DUP6 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 AND PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x40 DUP6 ADD SWAP3 POP PUSH2 0x9A0 JUMP JUMPDEST PUSH1 0x2 DUP3 DIV DUP1 DUP7 MSTORE PUSH1 0x20 DUP7 ADD SWAP6 POP PUSH2 0x97A DUP6 PUSH2 0xCC0 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x999 JUMPI DUP2 SLOAD DUP9 DUP3 ADD MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD PUSH2 0x97D JUMP JUMPDEST DUP8 ADD SWAP5 POP POP POP JUMPDEST POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x15 DUP2 MSTORE PUSH32 0x54414B45525F4E4F545F57484954454C49535445440000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x13 DUP2 MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x15 DUP2 MSTORE PUSH32 0x4D414B45525F4E4F545F57484954454C49535445440000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0xE DUP2 MSTORE PUSH32 0x494E56414C49445F53454E444552000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH2 0x180 DUP5 ADD SWAP1 PUSH2 0xA7D DUP6 DUP3 PUSH2 0x8BE JUMP JUMPDEST POP PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0xA90 PUSH1 0x20 DUP7 ADD DUP3 PUSH2 0x8BE JUMP JUMPDEST POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0xAA3 PUSH1 0x40 DUP7 ADD DUP3 PUSH2 0x8BE JUMP JUMPDEST POP PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0xAB6 PUSH1 0x60 DUP7 ADD DUP3 PUSH2 0x8BE JUMP JUMPDEST POP PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0xAC9 PUSH1 0x80 DUP7 ADD DUP3 PUSH2 0xB6B JUMP JUMPDEST POP PUSH1 0xA0 DUP4 ADD MLOAD PUSH2 0xADC PUSH1 0xA0 DUP7 ADD DUP3 PUSH2 0xB6B JUMP JUMPDEST POP PUSH1 0xC0 DUP4 ADD MLOAD PUSH2 0xAEF PUSH1 0xC0 DUP7 ADD DUP3 PUSH2 0xB6B JUMP JUMPDEST POP PUSH1 0xE0 DUP4 ADD MLOAD PUSH2 0xB02 PUSH1 0xE0 DUP7 ADD DUP3 PUSH2 0xB6B JUMP JUMPDEST POP PUSH2 0x100 DUP4 ADD MLOAD PUSH2 0xB17 PUSH2 0x100 DUP7 ADD DUP3 PUSH2 0xB6B JUMP JUMPDEST POP PUSH2 0x120 DUP4 ADD MLOAD PUSH2 0xB2C PUSH2 0x120 DUP7 ADD DUP3 PUSH2 0xB6B JUMP JUMPDEST POP PUSH2 0x140 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH2 0x140 DUP7 ADD MSTORE PUSH2 0xB46 DUP3 DUP3 PUSH2 0x8D6 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x160 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH2 0x160 DUP7 ADD MSTORE PUSH2 0xB62 DUP3 DUP3 PUSH2 0x8D6 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x8C7 DUP2 PUSH2 0xCEE JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xB82 DUP3 DUP5 PUSH2 0x8BE JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xB82 DUP3 DUP5 PUSH2 0x8CD JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xB82 DUP2 PUSH2 0x9A8 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xB82 DUP2 PUSH2 0x9D8 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xB82 DUP2 PUSH2 0xA08 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xB82 DUP2 PUSH2 0xA38 JUMP JUMPDEST PUSH1 0x60 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xBE7 DUP2 DUP7 PUSH2 0xA68 JUMP JUMPDEST SWAP1 POP PUSH2 0xBF6 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0xB6B JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0xB62 DUP2 DUP5 PUSH2 0x8D6 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0xC16 DUP3 DUP8 PUSH2 0xB6B JUMP JUMPDEST PUSH2 0xC23 PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x8BE JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0xC35 DUP2 DUP6 PUSH2 0x8D6 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0xC49 DUP2 DUP5 PUSH2 0x90B JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0xC72 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0xC91 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x1F SWAP2 SWAP1 SWAP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST MLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xD18 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xD00 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0xD27 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP1 JUMP STOP LOG2 PUSH6 0x627A7A723058 KECCAK256 0xcb 0x3f 0xe0 DUP13 CALLER 0x2d 0x27 SMOD CALLVALUE 0xea 0x27 STATICCALL 0x5d CALLDATACOPY SWAP3 0xf PUSH15 0x33FE97BB1DE3B3AA49AF1D1DCE8E0E PUSH13 0x6578706572696D656E74616CF5 STOP CALLDATACOPY ",
+ "sourceMap": "794:3556:10:-;;;1181:188;8:9:-1;5:2;;;30:1;27;20:12;5:2;1181:188:10;;;;;;;;;;;;;;;;;;;;;;329:5:12;:18;;337:10;-1:-1:-1;;;;;;329:18:12;;;;;;;1242:8:10;:31;;;;;-1:-1:-1;;;;;1242:31:10;;;;;1305:57;;;1330:4;1305:57;;;;;;;;;;1337:24;1305:57;;;;;;26:21:-1;;;22:32;;6:49;;1305:57:10;;;;;;;1283:79;;;;:19;;:79;;;:::i;:::-;;1181:188;794:3556;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;794:3556:10;;;-1:-1:-1;794:3556:10;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;5:122:-1:-;;83:39;114:6;108:13;83:39;;;74:48;68:59;-1:-1;;;68:59;134:263;;249:2;237:9;228:7;224:23;220:32;217:2;;;265:1;262;255:12;217:2;300:1;317:64;373:7;353:9;317:64;;;307:74;211:186;-1:-1;;;;211:186;404:128;-1:-1;;;;;473:54;;456:76;;794:3556:10;;;;;;"
},
"deployedBytecode": {
"linkReferences": {},
- "object": "0x6080604052600436106100775763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663141da876811461007c5780633af32abf1461009e5780638da5cb5b146100d457806393634702146100f6578063c07732a314610116578063f2fde38b14610136575b600080fd5b34801561008857600080fd5b5061009c6100973660046108da565b610156565b005b3480156100aa57600080fd5b506100be6100b9366004610812565b610457565b6040516100cb9190610ba4565b60405180910390f35b3480156100e057600080fd5b506100e961046c565b6040516100cb9190610b90565b34801561010257600080fd5b506100be610111366004610872565b610488565b34801561012257600080fd5b5061009c610131366004610838565b6104a9565b34801561014257600080fd5b5061009c610151366004610812565b610550565b60408051808201909152600e81527f494e56414c49445f53454e444552000000000000000000000000000000000000602082015233906060903283146101d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101c99190610bb2565b60405180910390fd5b50855173ffffffffffffffffffffffffffffffffffffffff16600090815260016020908152604091829020548251808401909352601583527f4d414b45525f4e4f545f57484954454c495354454400000000000000000000009183019190915260ff16151561026e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101c99190610bb2565b5073ffffffffffffffffffffffffffffffffffffffff8216600090815260016020908152604091829020548251808401909352601583527f54414b45525f4e4f545f57484954454c495354454400000000000000000000009183019190915260ff161515610309576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101c99190610bb2565b506040517fb4be83d5000000000000000000000000000000000000000000000000000000009061034190889088908790602401610bd3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925260025491517fbfc8bfce00000000000000000000000000000000000000000000000000000000815290925073ffffffffffffffffffffffffffffffffffffffff9091169063bfc8bfce9061041d90879086908690600390600401610c05565b600060405180830381600087803b15801561043757600080fd5b505af115801561044b573d6000803e3d6000fd5b50505050505050505050565b60016020526000908152604090205460ff1681565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff83163214949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101c990610bc3565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101c990610bc3565b73ffffffffffffffffffffffffffffffffffffffff8116156105fe57600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b600061060d8235610ccd565b9392505050565b600061060d8235610ce6565b600061060d8235610ceb565b600080601f8301841361063e57600080fd5b50813567ffffffffffffffff81111561065657600080fd5b60208301915083600182028301111561066e57600080fd5b9250929050565b6000601f8201831361068657600080fd5b813561069961069482610c77565b610c50565b915080825260208301602083018583830111156106b557600080fd5b6106c0838284610cee565b50505092915050565b600061018082840312156106dc57600080fd5b6106e7610180610c50565b905060006106f58484610601565b825250602061070684848301610601565b602083015250604061071a84828501610601565b604083015250606061072e84828501610601565b606083015250608061074284828501610620565b60808301525060a061075684828501610620565b60a08301525060c061076a84828501610620565b60c08301525060e061077e84828501610620565b60e08301525061010061079384828501610620565b610100830152506101206107a984828501610620565b6101208301525061014082013567ffffffffffffffff8111156107cb57600080fd5b6107d784828501610675565b6101408301525061016082013567ffffffffffffffff8111156107f957600080fd5b61080584828501610675565b6101608301525092915050565b60006020828403121561082457600080fd5b60006108308484610601565b949350505050565b6000806040838503121561084b57600080fd5b60006108578585610601565b925050602061086885828601610614565b9150509250929050565b6000806000806060858703121561088857600080fd5b60006108948787610620565b94505060206108a587828801610601565b935050604085013567ffffffffffffffff8111156108c257600080fd5b6108ce8782880161062c565b95989497509550505050565b600080600080608085870312156108f057600080fd5b843567ffffffffffffffff81111561090757600080fd5b610913878288016106c9565b945050602061092487828801610620565b935050604061093587828801610620565b925050606085013567ffffffffffffffff81111561095257600080fd5b61095e87828801610675565b91505092959194509250565b61097381610ccd565b82525050565b61097381610ce6565b600061098d82610cc9565b8084526109a1816020860160208601610cfa565b6109aa81610d2a565b9093016020019392505050565b6000815460018116600081146109d45760018114610a1057610a4c565b60028204607f1685527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082166020860152604085019250610a4c565b60028204808652602086019550610a2685610cbd565b60005b82811015610a4557815488820152600190910190602001610a29565b8701945050505b505092915050565b601381527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000602082015260400190565b8051600090610180840190610a99858261096a565b506020830151610aac602086018261096a565b506040830151610abf604086018261096a565b506060830151610ad2606086018261096a565b506080830151610ae56080860182610b87565b5060a0830151610af860a0860182610b87565b5060c0830151610b0b60c0860182610b87565b5060e0830151610b1e60e0860182610b87565b50610100830151610b33610100860182610b87565b50610120830151610b48610120860182610b87565b50610140830151848203610140860152610b628282610982565b915050610160830151848203610160860152610b7e8282610982565b95945050505050565b61097381610ceb565b60208101610b9e828461096a565b92915050565b60208101610b9e8284610979565b6020808252810161060d8184610982565b60208082528101610b9e81610a54565b60608082528101610be48186610a84565b9050610bf36020830185610b87565b8181036040830152610b7e8184610982565b60808101610c138287610b87565b610c20602083018661096a565b8181036040830152610c328185610982565b90508181036060830152610c4681846109b7565b9695505050505050565b60405181810167ffffffffffffffff81118282101715610c6f57600080fd5b604052919050565b600067ffffffffffffffff821115610c8e57600080fd5b506020601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160190565b60009081526020902090565b5190565b73ffffffffffffffffffffffffffffffffffffffff1690565b151590565b90565b82818337506000910152565b60005b83811015610d15578181015183820152602001610cfd565b83811115610d24576000848401525b50505050565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016905600a265627a7a7230582035573f99d9a61c5e4b9f1d3795a40e4258b5af1cae6f5f76043c68b7ab42c5a16c6578706572696d656e74616cf50037",
- "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x77 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x141DA876 DUP2 EQ PUSH2 0x7C JUMPI DUP1 PUSH4 0x3AF32ABF EQ PUSH2 0x9E JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xD4 JUMPI DUP1 PUSH4 0x93634702 EQ PUSH2 0xF6 JUMPI DUP1 PUSH4 0xC07732A3 EQ PUSH2 0x116 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x136 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x88 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x9C PUSH2 0x97 CALLDATASIZE PUSH1 0x4 PUSH2 0x8DA JUMP JUMPDEST PUSH2 0x156 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xAA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xBE PUSH2 0xB9 CALLDATASIZE PUSH1 0x4 PUSH2 0x812 JUMP JUMPDEST PUSH2 0x457 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xCB SWAP2 SWAP1 PUSH2 0xBA4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xE9 PUSH2 0x46C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xCB SWAP2 SWAP1 PUSH2 0xB90 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x102 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xBE PUSH2 0x111 CALLDATASIZE PUSH1 0x4 PUSH2 0x872 JUMP JUMPDEST PUSH2 0x488 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x122 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x9C PUSH2 0x131 CALLDATASIZE PUSH1 0x4 PUSH2 0x838 JUMP JUMPDEST PUSH2 0x4A9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x142 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x9C PUSH2 0x151 CALLDATASIZE PUSH1 0x4 PUSH2 0x812 JUMP JUMPDEST PUSH2 0x550 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0xE DUP2 MSTORE PUSH32 0x494E56414C49445F53454E444552000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER SWAP1 PUSH1 0x60 SWAP1 ORIGIN DUP4 EQ PUSH2 0x1D2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1C9 SWAP2 SWAP1 PUSH2 0xBB2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP DUP6 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE PUSH1 0x15 DUP4 MSTORE PUSH32 0x4D414B45525F4E4F545F57484954454C49535445440000000000000000000000 SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x26E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1C9 SWAP2 SWAP1 PUSH2 0xBB2 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE PUSH1 0x15 DUP4 MSTORE PUSH32 0x54414B45525F4E4F545F57484954454C49535445440000000000000000000000 SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x309 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1C9 SWAP2 SWAP1 PUSH2 0xBB2 JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH32 0xB4BE83D500000000000000000000000000000000000000000000000000000000 SWAP1 PUSH2 0x341 SWAP1 DUP9 SWAP1 DUP9 SWAP1 DUP8 SWAP1 PUSH1 0x24 ADD PUSH2 0xBD3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 DUP2 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 MSTORE PUSH1 0x2 SLOAD SWAP2 MLOAD PUSH32 0xBFC8BFCE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 SWAP3 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0xBFC8BFCE SWAP1 PUSH2 0x41D SWAP1 DUP8 SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x3 SWAP1 PUSH1 0x4 ADD PUSH2 0xC05 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x437 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x44B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND ORIGIN EQ SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x4FA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1C9 SWAP1 PUSH2 0xBC3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x5A1 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1C9 SWAP1 PUSH2 0xBC3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0x5FE JUMPI PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND OR SWAP1 SSTORE JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x60D DUP3 CALLDATALOAD PUSH2 0xCCD JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x60D DUP3 CALLDATALOAD PUSH2 0xCE6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x60D DUP3 CALLDATALOAD PUSH2 0xCEB JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x1F DUP4 ADD DUP5 SGT PUSH2 0x63E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x656 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x1 DUP3 MUL DUP4 ADD GT ISZERO PUSH2 0x66E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0x686 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x699 PUSH2 0x694 DUP3 PUSH2 0xC77 JUMP JUMPDEST PUSH2 0xC50 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP4 ADD DUP6 DUP4 DUP4 ADD GT ISZERO PUSH2 0x6B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x6C0 DUP4 DUP3 DUP5 PUSH2 0xCEE JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x180 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x6DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x6E7 PUSH2 0x180 PUSH2 0xC50 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x6F5 DUP5 DUP5 PUSH2 0x601 JUMP JUMPDEST DUP3 MSTORE POP PUSH1 0x20 PUSH2 0x706 DUP5 DUP5 DUP4 ADD PUSH2 0x601 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP PUSH1 0x40 PUSH2 0x71A DUP5 DUP3 DUP6 ADD PUSH2 0x601 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 PUSH2 0x72E DUP5 DUP3 DUP6 ADD PUSH2 0x601 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE POP PUSH1 0x80 PUSH2 0x742 DUP5 DUP3 DUP6 ADD PUSH2 0x620 JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE POP PUSH1 0xA0 PUSH2 0x756 DUP5 DUP3 DUP6 ADD PUSH2 0x620 JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE POP PUSH1 0xC0 PUSH2 0x76A DUP5 DUP3 DUP6 ADD PUSH2 0x620 JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE POP PUSH1 0xE0 PUSH2 0x77E DUP5 DUP3 DUP6 ADD PUSH2 0x620 JUMP JUMPDEST PUSH1 0xE0 DUP4 ADD MSTORE POP PUSH2 0x100 PUSH2 0x793 DUP5 DUP3 DUP6 ADD PUSH2 0x620 JUMP JUMPDEST PUSH2 0x100 DUP4 ADD MSTORE POP PUSH2 0x120 PUSH2 0x7A9 DUP5 DUP3 DUP6 ADD PUSH2 0x620 JUMP JUMPDEST PUSH2 0x120 DUP4 ADD MSTORE POP PUSH2 0x140 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x7CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7D7 DUP5 DUP3 DUP6 ADD PUSH2 0x675 JUMP JUMPDEST PUSH2 0x140 DUP4 ADD MSTORE POP PUSH2 0x160 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x7F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x805 DUP5 DUP3 DUP6 ADD PUSH2 0x675 JUMP JUMPDEST PUSH2 0x160 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x824 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x830 DUP5 DUP5 PUSH2 0x601 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x84B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x857 DUP6 DUP6 PUSH2 0x601 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x868 DUP6 DUP3 DUP7 ADD PUSH2 0x614 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x888 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x894 DUP8 DUP8 PUSH2 0x620 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x8A5 DUP8 DUP3 DUP9 ADD PUSH2 0x601 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x8C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8CE DUP8 DUP3 DUP9 ADD PUSH2 0x62C JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x8F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x907 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x913 DUP8 DUP3 DUP9 ADD PUSH2 0x6C9 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x924 DUP8 DUP3 DUP9 ADD PUSH2 0x620 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 PUSH2 0x935 DUP8 DUP3 DUP9 ADD PUSH2 0x620 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x952 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x95E DUP8 DUP3 DUP9 ADD PUSH2 0x675 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH2 0x973 DUP2 PUSH2 0xCCD JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x973 DUP2 PUSH2 0xCE6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x98D DUP3 PUSH2 0xCC9 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH2 0x9A1 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0xCFA JUMP JUMPDEST PUSH2 0x9AA DUP2 PUSH2 0xD2A JUMP JUMPDEST SWAP1 SWAP4 ADD PUSH1 0x20 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SLOAD PUSH1 0x1 DUP2 AND PUSH1 0x0 DUP2 EQ PUSH2 0x9D4 JUMPI PUSH1 0x1 DUP2 EQ PUSH2 0xA10 JUMPI PUSH2 0xA4C JUMP JUMPDEST PUSH1 0x2 DUP3 DIV PUSH1 0x7F AND DUP6 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 AND PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x40 DUP6 ADD SWAP3 POP PUSH2 0xA4C JUMP JUMPDEST PUSH1 0x2 DUP3 DIV DUP1 DUP7 MSTORE PUSH1 0x20 DUP7 ADD SWAP6 POP PUSH2 0xA26 DUP6 PUSH2 0xCBD JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0xA45 JUMPI DUP2 SLOAD DUP9 DUP3 ADD MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD PUSH2 0xA29 JUMP JUMPDEST DUP8 ADD SWAP5 POP POP POP JUMPDEST POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x13 DUP2 MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH2 0x180 DUP5 ADD SWAP1 PUSH2 0xA99 DUP6 DUP3 PUSH2 0x96A JUMP JUMPDEST POP PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0xAAC PUSH1 0x20 DUP7 ADD DUP3 PUSH2 0x96A JUMP JUMPDEST POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0xABF PUSH1 0x40 DUP7 ADD DUP3 PUSH2 0x96A JUMP JUMPDEST POP PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0xAD2 PUSH1 0x60 DUP7 ADD DUP3 PUSH2 0x96A JUMP JUMPDEST POP PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0xAE5 PUSH1 0x80 DUP7 ADD DUP3 PUSH2 0xB87 JUMP JUMPDEST POP PUSH1 0xA0 DUP4 ADD MLOAD PUSH2 0xAF8 PUSH1 0xA0 DUP7 ADD DUP3 PUSH2 0xB87 JUMP JUMPDEST POP PUSH1 0xC0 DUP4 ADD MLOAD PUSH2 0xB0B PUSH1 0xC0 DUP7 ADD DUP3 PUSH2 0xB87 JUMP JUMPDEST POP PUSH1 0xE0 DUP4 ADD MLOAD PUSH2 0xB1E PUSH1 0xE0 DUP7 ADD DUP3 PUSH2 0xB87 JUMP JUMPDEST POP PUSH2 0x100 DUP4 ADD MLOAD PUSH2 0xB33 PUSH2 0x100 DUP7 ADD DUP3 PUSH2 0xB87 JUMP JUMPDEST POP PUSH2 0x120 DUP4 ADD MLOAD PUSH2 0xB48 PUSH2 0x120 DUP7 ADD DUP3 PUSH2 0xB87 JUMP JUMPDEST POP PUSH2 0x140 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH2 0x140 DUP7 ADD MSTORE PUSH2 0xB62 DUP3 DUP3 PUSH2 0x982 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x160 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH2 0x160 DUP7 ADD MSTORE PUSH2 0xB7E DUP3 DUP3 PUSH2 0x982 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x973 DUP2 PUSH2 0xCEB JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xB9E DUP3 DUP5 PUSH2 0x96A JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xB9E DUP3 DUP5 PUSH2 0x979 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x60D DUP2 DUP5 PUSH2 0x982 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xB9E DUP2 PUSH2 0xA54 JUMP JUMPDEST PUSH1 0x60 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xBE4 DUP2 DUP7 PUSH2 0xA84 JUMP JUMPDEST SWAP1 POP PUSH2 0xBF3 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0xB87 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0xB7E DUP2 DUP5 PUSH2 0x982 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0xC13 DUP3 DUP8 PUSH2 0xB87 JUMP JUMPDEST PUSH2 0xC20 PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x96A JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0xC32 DUP2 DUP6 PUSH2 0x982 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0xC46 DUP2 DUP5 PUSH2 0x9B7 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0xC6F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0xC8E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x1F SWAP2 SWAP1 SWAP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST MLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xD15 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xCFD JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0xD24 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP1 JUMP STOP LOG2 PUSH6 0x627A7A723058 KECCAK256 CALLDATALOAD JUMPI 0x3f SWAP10 0xd9 0xa6 SHR 0x5e 0x4b SWAP16 SAR CALLDATACOPY SWAP6 LOG4 0xe TIMESTAMP PC 0xb5 0xaf SHR 0xae PUSH16 0x5F76043C68B7AB42C5A16C6578706572 PUSH10 0x6D656E74616CF5003700 ",
- "sourceMap": "794:3579:10:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2565:1141;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2565:1141:10;;;;;;;;;;;1206:46;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1206:46:10;;;;;;;;;;;;;;;;;;;;;;;;;292:20:12;;8:9:-1;5:2;;;30:1;27;20:12;5:2;292:20:12;;;;;;;;;;;;4146:225:10;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4146:225:10;;;;;;;;;1777:176;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1777:176:10;;;;;;;;;534:167:12;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;534:167:12;;;;;;;;;2565:1141:10;2940:14;;;;;;;;;;;;;;;;;2789:10;;3328:17;;2917:9;2901:25;;2880:84;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3057:18:10;;3043:33;;;;;;:13;:33;;;;;;;;;;3090:21;;;;;;;;;;;;;;;;;;;3043:33;;3022:99;;;;;;;;;;;;;;;;;-1:-1:-1;3200:27:10;;;;;;;:13;:27;;;;;;;;;;3241:21;;;;;;;;;;;;;;;;;;;3200:27;;3179:93;;;;;;;;;;;;;;;;;-1:-1:-1;3348:154:10;;3384:27;;3348:154;;3425:5;;3444:20;;3478:14;;3348:154;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;3348:154:10;;;49:4:-1;25:18;;61:17;;3348:154:10;182:15:-1;3348:154:10;;;;179:29:-1;;;;160:49;;;3567:8:10;;:132;;;;;3348:154;;-1:-1:-1;3567:8:10;;;;;:27;;:132;;3608:4;;3626:12;;3348:154;;3670:19;;3567:132;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3567:132:10;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3567:132:10;;;;2565:1141;;;;;;:::o;1206:46::-;;;;;;;;;;;;;;;:::o;292:20:12:-;;;;;;:::o;4146:225:10:-;4338:26;;;4355:9;4338:26;4146:225;;;;;;:::o;1777:176::-;460:5:12;;;;446:10;:19;425:85;;;;;;;;;;;;;;1912:21:10;;;;;;;;;:13;:21;;;;;:34;;;;;;;;;;;;;1777:176::o;534:167:12:-;460:5;;;;446:10;:19;425:85;;;;;;;;;;;;;;630:22;;;;626:69;;668:5;:16;;;;;;;;;;626:69;534:167;:::o;5:118:-1:-;;72:46;110:6;97:20;72:46;;;63:55;57:66;-1:-1;;;57:66;130:112;;194:43;229:6;216:20;194:43;;249:118;;316:46;354:6;341:20;316:46;;388:335;;;495:4;483:17;;479:27;-1:-1;469:2;;520:1;517;510:12;469:2;-1:-1;540:20;;580:18;569:30;;566:2;;;612:1;609;602:12;566:2;646:4;638:6;634:17;622:29;;696:3;689;681:6;677:16;667:8;663:31;660:40;657:2;;;713:1;710;703:12;657:2;462:261;;;;;;732:432;;822:4;810:17;;806:27;-1:-1;796:2;;847:1;844;837:12;796:2;884:6;871:20;906:60;921:44;958:6;921:44;;;906:60;;;897:69;;986:6;979:5;972:21;1022:4;1014:6;1010:17;1055:4;1048:5;1044:16;1090:3;1081:6;1076:3;1072:16;1069:25;1066:2;;;1107:1;1104;1097:12;1066:2;1117:41;1151:6;1146:3;1141;1117:41;;;789:375;;;;;;;;1649:2208;;1760:5;1748:9;1743:3;1739:19;1735:31;1732:2;;;1779:1;1776;1769:12;1732:2;1797:21;1812:5;1797:21;;;1788:30;-1:-1;1876:1;1907:49;1952:3;1932:9;1907:49;;;1883:74;;-1:-1;2026:2;2059:49;2104:3;2080:22;;;2059:49;;;2052:4;2045:5;2041:16;2034:75;1978:142;2185:2;2218:49;2263:3;2254:6;2243:9;2239:22;2218:49;;;2211:4;2204:5;2200:16;2193:75;2130:149;2338:2;2371:49;2416:3;2407:6;2396:9;2392:22;2371:49;;;2364:4;2357:5;2353:16;2346:75;2289:143;2494:3;2528:49;2573:3;2564:6;2553:9;2549:22;2528:49;;;2521:4;2514:5;2510:16;2503:75;2442:147;2651:3;2685:49;2730:3;2721:6;2710:9;2706:22;2685:49;;;2678:4;2671:5;2667:16;2660:75;2599:147;2800:3;2834:49;2879:3;2870:6;2859:9;2855:22;2834:49;;;2827:4;2820:5;2816:16;2809:75;2756:139;2949:3;2983:49;3028:3;3019:6;3008:9;3004:22;2983:49;;;2976:4;2969:5;2965:16;2958:75;2905:139;3111:3;3146:49;3191:3;3182:6;3171:9;3167:22;3146:49;;;3138:5;3131;3127:17;3120:76;3054:153;3257:3;3292:49;3337:3;3328:6;3317:9;3313:22;3292:49;;;3284:5;3277;3273:17;3266:76;3217:136;3441:3;3430:9;3426:19;3413:33;3466:18;3458:6;3455:30;3452:2;;;3498:1;3495;3488:12;3452:2;3534:54;3584:3;3575:6;3564:9;3560:22;3534:54;;;3526:5;3519;3515:17;3508:81;3363:237;3688:3;3677:9;3673:19;3660:33;3713:18;3705:6;3702:30;3699:2;;;3745:1;3742;3735:12;3699:2;3781:54;3831:3;3822:6;3811:9;3807:22;3781:54;;;3773:5;3766;3762:17;3755:81;3610:237;1726:2131;;;;;3989:241;;4093:2;4081:9;4072:7;4068:23;4064:32;4061:2;;;4109:1;4106;4099:12;4061:2;4144:1;4161:53;4206:7;4186:9;4161:53;;;4151:63;4055:175;-1:-1;;;;4055:175;4237:360;;;4355:2;4343:9;4334:7;4330:23;4326:32;4323:2;;;4371:1;4368;4361:12;4323:2;4406:1;4423:53;4468:7;4448:9;4423:53;;;4413:63;;4385:97;4513:2;4531:50;4573:7;4564:6;4553:9;4549:22;4531:50;;;4521:60;;4492:95;4317:280;;;;;;4604:615;;;;;4761:2;4749:9;4740:7;4736:23;4732:32;4729:2;;;4777:1;4774;4767:12;4729:2;4812:1;4829:53;4874:7;4854:9;4829:53;;;4819:63;;4791:97;4919:2;4937:53;4982:7;4973:6;4962:9;4958:22;4937:53;;;4927:63;;4898:98;5055:2;5044:9;5040:18;5027:32;5079:18;5071:6;5068:30;5065:2;;;5111:1;5108;5101:12;5065:2;5139:64;5195:7;5186:6;5175:9;5171:22;5139:64;;;4723:496;;;;-1:-1;5121:82;-1:-1;;;;4723:496;5226:851;;;;;5412:3;5400:9;5391:7;5387:23;5383:33;5380:2;;;5429:1;5426;5419:12;5380:2;5464:31;;5515:18;5504:30;;5501:2;;;5547:1;5544;5537:12;5501:2;5567:75;5634:7;5625:6;5614:9;5610:22;5567:75;;;5557:85;;5443:205;5679:2;5697:53;5742:7;5733:6;5722:9;5718:22;5697:53;;;5687:63;;5658:98;5787:2;5805:53;5850:7;5841:6;5830:9;5826:22;5805:53;;;5795:63;;5766:98;5923:2;5912:9;5908:18;5895:32;5947:18;5939:6;5936:30;5933:2;;;5979:1;5976;5969:12;5933:2;5999:62;6053:7;6044:6;6033:9;6029:22;5999:62;;;5989:72;;5874:193;5374:703;;;;;;;;6084:110;6157:31;6182:5;6157:31;;;6152:3;6145:44;6139:55;;;6201:101;6268:28;6290:5;6268:28;;6309:297;;6409:38;6441:5;6409:38;;;6464:6;6459:3;6452:19;6476:63;6532:6;6525:4;6520:3;6516:14;6509:4;6502:5;6498:16;6476:63;;;6571:29;6593:6;6571:29;;;6551:50;;;6564:4;6551:50;;6389:217;-1:-1;;;6389:217;6932:731;;7039:5;7033:12;7073:1;7062:9;7058:17;7086:1;7081:200;;;;7292:1;7287:370;;;;7051:606;;7081:200;7155:1;7140:17;;7159:4;7136:28;7171:19;;7235:9;7220:25;;7213:4;7204:14;;7197:49;7269:4;7260:14;;;-1:-1;7081:200;;7287:370;7356:1;7345:9;7341:17;7377:6;7372:3;7365:19;7407:4;7402:3;7398:14;7391:21;;7434:37;7465:5;7434:37;;;7487:1;7495:130;7509:6;7506:1;7503:13;7495:130;;;7568:14;;7555:11;;;7548:35;7615:1;7602:15;;;;7531:4;7524:12;7495:130;;;7639:11;;;-1:-1;;;7051:606;;7009:654;;;;;;7971:296;8126:2;8114:15;;8163:66;8158:2;8149:12;;8142:88;8258:2;8249:12;;8107:160;8328:2417;8541:22;;8328:2417;;8463:5;8454:15;;;8575:61;8458:3;8541:22;8575:61;;;8484:164;8732:4;8725:5;8721:16;8715:23;8750:62;8806:4;8801:3;8797:14;8784:11;8750:62;;;8658:166;8915:4;8908:5;8904:16;8898:23;8933:62;8989:4;8984:3;8980:14;8967:11;8933:62;;;8834:173;9092:4;9085:5;9081:16;9075:23;9110:62;9166:4;9161:3;9157:14;9144:11;9110:62;;;9017:167;9272:4;9265:5;9261:16;9255:23;9290:62;9346:4;9341:3;9337:14;9324:11;9290:62;;;9194:170;9452:4;9445:5;9441:16;9435:23;9470:62;9526:4;9521:3;9517:14;9504:11;9470:62;;;9374:170;9624:4;9617:5;9613:16;9607:23;9642:62;9698:4;9693:3;9689:14;9676:11;9642:62;;;9554:162;9796:4;9789:5;9785:16;9779:23;9814:62;9870:4;9865:3;9861:14;9848:11;9814:62;;;9726:162;9981:5;9974;9970:17;9964:24;10000:63;10056:5;10051:3;10047:15;10034:11;10000:63;;;9898:177;10151:5;10144;10140:17;10134:24;10170:63;10226:5;10221:3;10217:15;10204:11;10170:63;;;10085:160;10331:5;10324;10320:17;10314:24;10384:3;10378:4;10374:14;10366:5;10361:3;10357:15;10350:39;10404:66;10465:4;10452:11;10404:66;;;10396:74;;10255:227;10568:5;10561;10557:17;10551:24;10621:3;10615:4;10611:14;10603:5;10598:3;10594:15;10587:39;10641:66;10702:4;10689:11;10641:66;;;10633:74;8436:2309;-1:-1;;;;;8436:2309;10752:110;10825:31;10850:5;10825:31;;10869:193;10977:2;10962:18;;10991:61;10966:9;11025:6;10991:61;;;10948:114;;;;;11069:181;11171:2;11156:18;;11185:55;11160:9;11213:6;11185:55;;11257:273;11381:2;11395:47;;;11366:18;;11456:64;11366:18;11506:6;11456:64;;11537:387;11718:2;11732:47;;;11703:18;;11793:121;11703:18;11793:121;;11931:615;12157:2;12171:47;;;12142:18;;12232:92;12142:18;12310:6;12232:92;;;12224:100;;12335:62;12393:2;12382:9;12378:18;12369:6;12335:62;;;12445:9;12439:4;12435:20;12430:2;12419:9;12415:18;12408:48;12470:66;12531:4;12522:6;12470:66;;12553:659;12778:3;12763:19;;12793:61;12767:9;12827:6;12793:61;;;12865:62;12923:2;12912:9;12908:18;12899:6;12865:62;;;12975:9;12969:4;12965:20;12960:2;12949:9;12945:18;12938:48;13000:66;13061:4;13052:6;13000:66;;;12992:74;;13114:9;13108:4;13104:20;13099:2;13088:9;13084:18;13077:48;13139:63;13197:4;13188:6;13139:63;;;13131:71;12749:463;-1:-1;;;;;;12749:463;13219:256;13281:2;13275:9;13307:17;;;13382:18;13367:34;;13403:22;;;13364:62;13361:2;;;13439:1;13436;13429:12;13361:2;13455;13448:22;13259:216;;-1:-1;13259:216;13482:254;;13621:18;13613:6;13610:30;13607:2;;;13653:1;13650;13643:12;13607:2;-1:-1;13726:4;13697;13674:17;;;;13693:9;13670:33;13716:15;;13544:192;14010:125;;14076:15;;;14123:4;14110:18;;;14068:67;14144:87;14214:12;;14198:33;14431:128;14511:42;14500:54;;14483:76;14566:92;14639:13;14632:21;;14615:43;14665:79;14734:5;14717:27;15158:145;15239:6;15234:3;15229;15216:30;-1:-1;15295:1;15277:16;;15270:27;15209:94;15312:268;15377:1;15384:101;15398:6;15395:1;15392:13;15384:101;;;15465:11;;;15459:18;15446:11;;;15439:39;15420:2;15413:10;15384:101;;;15500:6;15497:1;15494:13;15491:2;;;15565:1;15556:6;15551:3;15547:16;15540:27;15491:2;15361:219;;;;;15588:97;15676:2;15656:14;15672:7;15652:28;;15636:49"
+ "object": "0x6080604052600436106100775763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663141da876811461007c5780633af32abf1461009e5780638da5cb5b146100d457806393634702146100f6578063c07732a314610116578063f2fde38b14610136575b600080fd5b34801561008857600080fd5b5061009c61009736600461082e565b610156565b005b3480156100aa57600080fd5b506100be6100b9366004610766565b6103ab565b6040516100cb9190610b88565b60405180910390f35b3480156100e057600080fd5b506100e96103c0565b6040516100cb9190610b74565b34801561010257600080fd5b506100be6101113660046107c6565b6103dc565b34801561012257600080fd5b5061009c61013136600461078c565b6103fd565b34801561014257600080fd5b5061009c610151366004610766565b6104a4565b33606032821461019b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019290610bc6565b60405180910390fd5b855173ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205460ff1615156101fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019290610bb6565b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff16151561025e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019290610b96565b6040517fb4be83d5000000000000000000000000000000000000000000000000000000009061029590889088908790602401610bd6565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925260025491517fbfc8bfce00000000000000000000000000000000000000000000000000000000815290925073ffffffffffffffffffffffffffffffffffffffff9091169063bfc8bfce9061037190879086908690600390600401610c08565b600060405180830381600087803b15801561038b57600080fd5b505af115801561039f573d6000803e3d6000fd5b50505050505050505050565b60016020526000908152604090205460ff1681565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff83163214949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461044e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019290610ba6565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019290610ba6565b73ffffffffffffffffffffffffffffffffffffffff81161561055257600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b60006105618235610cd0565b9392505050565b60006105618235610ce9565b60006105618235610cee565b600080601f8301841361059257600080fd5b50813567ffffffffffffffff8111156105aa57600080fd5b6020830191508360018202830111156105c257600080fd5b9250929050565b6000601f820183136105da57600080fd5b81356105ed6105e882610c7a565b610c53565b9150808252602083016020830185838301111561060957600080fd5b610614838284610cf1565b50505092915050565b6000610180828403121561063057600080fd5b61063b610180610c53565b905060006106498484610555565b825250602061065a84848301610555565b602083015250604061066e84828501610555565b604083015250606061068284828501610555565b606083015250608061069684828501610574565b60808301525060a06106aa84828501610574565b60a08301525060c06106be84828501610574565b60c08301525060e06106d284828501610574565b60e0830152506101006106e784828501610574565b610100830152506101206106fd84828501610574565b6101208301525061014082013567ffffffffffffffff81111561071f57600080fd5b61072b848285016105c9565b6101408301525061016082013567ffffffffffffffff81111561074d57600080fd5b610759848285016105c9565b6101608301525092915050565b60006020828403121561077857600080fd5b60006107848484610555565b949350505050565b6000806040838503121561079f57600080fd5b60006107ab8585610555565b92505060206107bc85828601610568565b9150509250929050565b600080600080606085870312156107dc57600080fd5b60006107e88787610574565b94505060206107f987828801610555565b935050604085013567ffffffffffffffff81111561081657600080fd5b61082287828801610580565b95989497509550505050565b6000806000806080858703121561084457600080fd5b843567ffffffffffffffff81111561085b57600080fd5b6108678782880161061d565b945050602061087887828801610574565b935050604061088987828801610574565b925050606085013567ffffffffffffffff8111156108a657600080fd5b6108b2878288016105c9565b91505092959194509250565b6108c781610cd0565b82525050565b6108c781610ce9565b60006108e182610ccc565b8084526108f5816020860160208601610cfd565b6108fe81610d2d565b9093016020019392505050565b6000815460018116600081146109285760018114610964576109a0565b60028204607f1685527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00821660208601526040850192506109a0565b6002820480865260208601955061097a85610cc0565b60005b828110156109995781548882015260019091019060200161097d565b8701945050505b505092915050565b601581527f54414b45525f4e4f545f57484954454c49535445440000000000000000000000602082015260400190565b601381527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000602082015260400190565b601581527f4d414b45525f4e4f545f57484954454c49535445440000000000000000000000602082015260400190565b600e81527f494e56414c49445f53454e444552000000000000000000000000000000000000602082015260400190565b8051600090610180840190610a7d85826108be565b506020830151610a9060208601826108be565b506040830151610aa360408601826108be565b506060830151610ab660608601826108be565b506080830151610ac96080860182610b6b565b5060a0830151610adc60a0860182610b6b565b5060c0830151610aef60c0860182610b6b565b5060e0830151610b0260e0860182610b6b565b50610100830151610b17610100860182610b6b565b50610120830151610b2c610120860182610b6b565b50610140830151848203610140860152610b4682826108d6565b915050610160830151848203610160860152610b6282826108d6565b95945050505050565b6108c781610cee565b60208101610b8282846108be565b92915050565b60208101610b8282846108cd565b60208082528101610b82816109a8565b60208082528101610b82816109d8565b60208082528101610b8281610a08565b60208082528101610b8281610a38565b60608082528101610be78186610a68565b9050610bf66020830185610b6b565b8181036040830152610b6281846108d6565b60808101610c168287610b6b565b610c2360208301866108be565b8181036040830152610c3581856108d6565b90508181036060830152610c49818461090b565b9695505050505050565b60405181810167ffffffffffffffff81118282101715610c7257600080fd5b604052919050565b600067ffffffffffffffff821115610c9157600080fd5b506020601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160190565b60009081526020902090565b5190565b73ffffffffffffffffffffffffffffffffffffffff1690565b151590565b90565b82818337506000910152565b60005b83811015610d18578181015183820152602001610d00565b83811115610d27576000848401525b50505050565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016905600a265627a7a72305820cb3fe08c332d270734ea27fa5d37920f6e33fe97bb1de3b3aa49af1d1dce8e0e6c6578706572696d656e74616cf50037",
+ "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x77 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x141DA876 DUP2 EQ PUSH2 0x7C JUMPI DUP1 PUSH4 0x3AF32ABF EQ PUSH2 0x9E JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xD4 JUMPI DUP1 PUSH4 0x93634702 EQ PUSH2 0xF6 JUMPI DUP1 PUSH4 0xC07732A3 EQ PUSH2 0x116 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x136 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x88 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x9C PUSH2 0x97 CALLDATASIZE PUSH1 0x4 PUSH2 0x82E JUMP JUMPDEST PUSH2 0x156 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xAA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xBE PUSH2 0xB9 CALLDATASIZE PUSH1 0x4 PUSH2 0x766 JUMP JUMPDEST PUSH2 0x3AB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xCB SWAP2 SWAP1 PUSH2 0xB88 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xE9 PUSH2 0x3C0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xCB SWAP2 SWAP1 PUSH2 0xB74 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x102 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xBE PUSH2 0x111 CALLDATASIZE PUSH1 0x4 PUSH2 0x7C6 JUMP JUMPDEST PUSH2 0x3DC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x122 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x9C PUSH2 0x131 CALLDATASIZE PUSH1 0x4 PUSH2 0x78C JUMP JUMPDEST PUSH2 0x3FD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x142 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x9C PUSH2 0x151 CALLDATASIZE PUSH1 0x4 PUSH2 0x766 JUMP JUMPDEST PUSH2 0x4A4 JUMP JUMPDEST CALLER PUSH1 0x60 ORIGIN DUP3 EQ PUSH2 0x19B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x192 SWAP1 PUSH2 0xBC6 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP6 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x1FD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x192 SWAP1 PUSH2 0xBB6 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x25E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x192 SWAP1 PUSH2 0xB96 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xB4BE83D500000000000000000000000000000000000000000000000000000000 SWAP1 PUSH2 0x295 SWAP1 DUP9 SWAP1 DUP9 SWAP1 DUP8 SWAP1 PUSH1 0x24 ADD PUSH2 0xBD6 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 DUP2 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 MSTORE PUSH1 0x2 SLOAD SWAP2 MLOAD PUSH32 0xBFC8BFCE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 SWAP3 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0xBFC8BFCE SWAP1 PUSH2 0x371 SWAP1 DUP8 SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x3 SWAP1 PUSH1 0x4 ADD PUSH2 0xC08 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x38B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x39F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND ORIGIN EQ SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x44E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x192 SWAP1 PUSH2 0xBA6 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x4F5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x192 SWAP1 PUSH2 0xBA6 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0x552 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND OR SWAP1 SSTORE JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x561 DUP3 CALLDATALOAD PUSH2 0xCD0 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x561 DUP3 CALLDATALOAD PUSH2 0xCE9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x561 DUP3 CALLDATALOAD PUSH2 0xCEE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x1F DUP4 ADD DUP5 SGT PUSH2 0x592 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x5AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x1 DUP3 MUL DUP4 ADD GT ISZERO PUSH2 0x5C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP3 ADD DUP4 SGT PUSH2 0x5DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x5ED PUSH2 0x5E8 DUP3 PUSH2 0xC7A JUMP JUMPDEST PUSH2 0xC53 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP4 ADD DUP6 DUP4 DUP4 ADD GT ISZERO PUSH2 0x609 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x614 DUP4 DUP3 DUP5 PUSH2 0xCF1 JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x180 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x630 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x63B PUSH2 0x180 PUSH2 0xC53 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x649 DUP5 DUP5 PUSH2 0x555 JUMP JUMPDEST DUP3 MSTORE POP PUSH1 0x20 PUSH2 0x65A DUP5 DUP5 DUP4 ADD PUSH2 0x555 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP PUSH1 0x40 PUSH2 0x66E DUP5 DUP3 DUP6 ADD PUSH2 0x555 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 PUSH2 0x682 DUP5 DUP3 DUP6 ADD PUSH2 0x555 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE POP PUSH1 0x80 PUSH2 0x696 DUP5 DUP3 DUP6 ADD PUSH2 0x574 JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE POP PUSH1 0xA0 PUSH2 0x6AA DUP5 DUP3 DUP6 ADD PUSH2 0x574 JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE POP PUSH1 0xC0 PUSH2 0x6BE DUP5 DUP3 DUP6 ADD PUSH2 0x574 JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE POP PUSH1 0xE0 PUSH2 0x6D2 DUP5 DUP3 DUP6 ADD PUSH2 0x574 JUMP JUMPDEST PUSH1 0xE0 DUP4 ADD MSTORE POP PUSH2 0x100 PUSH2 0x6E7 DUP5 DUP3 DUP6 ADD PUSH2 0x574 JUMP JUMPDEST PUSH2 0x100 DUP4 ADD MSTORE POP PUSH2 0x120 PUSH2 0x6FD DUP5 DUP3 DUP6 ADD PUSH2 0x574 JUMP JUMPDEST PUSH2 0x120 DUP4 ADD MSTORE POP PUSH2 0x140 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x71F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x72B DUP5 DUP3 DUP6 ADD PUSH2 0x5C9 JUMP JUMPDEST PUSH2 0x140 DUP4 ADD MSTORE POP PUSH2 0x160 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x74D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x759 DUP5 DUP3 DUP6 ADD PUSH2 0x5C9 JUMP JUMPDEST PUSH2 0x160 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x778 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x784 DUP5 DUP5 PUSH2 0x555 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x79F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x7AB DUP6 DUP6 PUSH2 0x555 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x7BC DUP6 DUP3 DUP7 ADD PUSH2 0x568 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x7DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x7E8 DUP8 DUP8 PUSH2 0x574 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x7F9 DUP8 DUP3 DUP9 ADD PUSH2 0x555 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x816 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x822 DUP8 DUP3 DUP9 ADD PUSH2 0x580 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x844 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x85B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x867 DUP8 DUP3 DUP9 ADD PUSH2 0x61D JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x878 DUP8 DUP3 DUP9 ADD PUSH2 0x574 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 PUSH2 0x889 DUP8 DUP3 DUP9 ADD PUSH2 0x574 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x8A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8B2 DUP8 DUP3 DUP9 ADD PUSH2 0x5C9 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH2 0x8C7 DUP2 PUSH2 0xCD0 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x8C7 DUP2 PUSH2 0xCE9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8E1 DUP3 PUSH2 0xCCC JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH2 0x8F5 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0xCFD JUMP JUMPDEST PUSH2 0x8FE DUP2 PUSH2 0xD2D JUMP JUMPDEST SWAP1 SWAP4 ADD PUSH1 0x20 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SLOAD PUSH1 0x1 DUP2 AND PUSH1 0x0 DUP2 EQ PUSH2 0x928 JUMPI PUSH1 0x1 DUP2 EQ PUSH2 0x964 JUMPI PUSH2 0x9A0 JUMP JUMPDEST PUSH1 0x2 DUP3 DIV PUSH1 0x7F AND DUP6 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 AND PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x40 DUP6 ADD SWAP3 POP PUSH2 0x9A0 JUMP JUMPDEST PUSH1 0x2 DUP3 DIV DUP1 DUP7 MSTORE PUSH1 0x20 DUP7 ADD SWAP6 POP PUSH2 0x97A DUP6 PUSH2 0xCC0 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x999 JUMPI DUP2 SLOAD DUP9 DUP3 ADD MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD PUSH2 0x97D JUMP JUMPDEST DUP8 ADD SWAP5 POP POP POP JUMPDEST POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x15 DUP2 MSTORE PUSH32 0x54414B45525F4E4F545F57484954454C49535445440000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x13 DUP2 MSTORE PUSH32 0x4F4E4C595F434F4E54524143545F4F574E455200000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x15 DUP2 MSTORE PUSH32 0x4D414B45525F4E4F545F57484954454C49535445440000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0xE DUP2 MSTORE PUSH32 0x494E56414C49445F53454E444552000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH2 0x180 DUP5 ADD SWAP1 PUSH2 0xA7D DUP6 DUP3 PUSH2 0x8BE JUMP JUMPDEST POP PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0xA90 PUSH1 0x20 DUP7 ADD DUP3 PUSH2 0x8BE JUMP JUMPDEST POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0xAA3 PUSH1 0x40 DUP7 ADD DUP3 PUSH2 0x8BE JUMP JUMPDEST POP PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0xAB6 PUSH1 0x60 DUP7 ADD DUP3 PUSH2 0x8BE JUMP JUMPDEST POP PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0xAC9 PUSH1 0x80 DUP7 ADD DUP3 PUSH2 0xB6B JUMP JUMPDEST POP PUSH1 0xA0 DUP4 ADD MLOAD PUSH2 0xADC PUSH1 0xA0 DUP7 ADD DUP3 PUSH2 0xB6B JUMP JUMPDEST POP PUSH1 0xC0 DUP4 ADD MLOAD PUSH2 0xAEF PUSH1 0xC0 DUP7 ADD DUP3 PUSH2 0xB6B JUMP JUMPDEST POP PUSH1 0xE0 DUP4 ADD MLOAD PUSH2 0xB02 PUSH1 0xE0 DUP7 ADD DUP3 PUSH2 0xB6B JUMP JUMPDEST POP PUSH2 0x100 DUP4 ADD MLOAD PUSH2 0xB17 PUSH2 0x100 DUP7 ADD DUP3 PUSH2 0xB6B JUMP JUMPDEST POP PUSH2 0x120 DUP4 ADD MLOAD PUSH2 0xB2C PUSH2 0x120 DUP7 ADD DUP3 PUSH2 0xB6B JUMP JUMPDEST POP PUSH2 0x140 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH2 0x140 DUP7 ADD MSTORE PUSH2 0xB46 DUP3 DUP3 PUSH2 0x8D6 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x160 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH2 0x160 DUP7 ADD MSTORE PUSH2 0xB62 DUP3 DUP3 PUSH2 0x8D6 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x8C7 DUP2 PUSH2 0xCEE JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xB82 DUP3 DUP5 PUSH2 0x8BE JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xB82 DUP3 DUP5 PUSH2 0x8CD JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xB82 DUP2 PUSH2 0x9A8 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xB82 DUP2 PUSH2 0x9D8 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xB82 DUP2 PUSH2 0xA08 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xB82 DUP2 PUSH2 0xA38 JUMP JUMPDEST PUSH1 0x60 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0xBE7 DUP2 DUP7 PUSH2 0xA68 JUMP JUMPDEST SWAP1 POP PUSH2 0xBF6 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0xB6B JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0xB62 DUP2 DUP5 PUSH2 0x8D6 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0xC16 DUP3 DUP8 PUSH2 0xB6B JUMP JUMPDEST PUSH2 0xC23 PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x8BE JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0xC35 DUP2 DUP6 PUSH2 0x8D6 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0xC49 DUP2 DUP5 PUSH2 0x90B JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0xC72 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0xC91 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x1F SWAP2 SWAP1 SWAP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST MLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xD18 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xD00 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0xD27 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP1 JUMP STOP LOG2 PUSH6 0x627A7A723058 KECCAK256 0xcb 0x3f 0xe0 DUP13 CALLER 0x2d 0x27 SMOD CALLVALUE 0xea 0x27 STATICCALL 0x5d CALLDATACOPY SWAP3 0xf PUSH15 0x33FE97BB1DE3B3AA49AF1D1DCE8E0E PUSH13 0x6578706572696D656E74616CF5 STOP CALLDATACOPY ",
+ "sourceMap": "794:3556:10:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3144:1204;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3144:1204:10;;;;;;;;;;;882:46;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;882:46:10;;;;;;;;;;;;;;;;;;;;;;;;;258:20:12;;8:9:-1;5:2;;;30:1;27;20:12;5:2;258:20:12;;;;;;;;;;;;2217:278:10;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2217:278:10;;;;;;;;;1563:176;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1563:176:10;;;;;;;;;500:167:12;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;500:167:12;;;;;;;;;3144:1204:10;3368:10;3970:17;3553:9;3537:25;;3459:143;;;;;;;;;;;;;;;;;;;;;;3695:18;;3681:33;;;;;;:13;:33;;;;;;;;3660:101;;;;;;;;;;;;;;;;3840:27;;;;;;;:13;:27;;;;;;;;3819:95;;;;;;;;;;;;;;;;3990:154;;4026:27;;3990:154;;4067:5;;4086:20;;4120:14;;3990:154;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;3990:154:10;;;49:4:-1;25:18;;61:17;;3990:154:10;182:15:-1;3990:154:10;;;;179:29:-1;;;;160:49;;;4209:8:10;;:132;;;;;3990:154;;-1:-1:-1;4209:8:10;;;;;:27;;:132;;4250:4;;4268:12;;3990:154;;4312:19;;4209:132;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4209:132:10;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4209:132:10;;;;3144:1204;;;;;;:::o;882:46::-;;;;;;;;;;;;;;;:::o;258:20:12:-;;;;;;:::o;2217:278:10:-;2462:26;;;2479:9;2462:26;2217:278;;;;;;:::o;1563:176::-;426:5:12;;;;412:10;:19;391:85;;;;;;;;;;;;;;1698:21:10;;;;;;;;;:13;:21;;;;;:34;;;;;;;;;;;;;1563:176::o;500:167:12:-;426:5;;;;412:10;:19;391:85;;;;;;;;;;;;;;596:22;;;;592:69;;634:5;:16;;;;;;;;;;592:69;500:167;:::o;5:118:-1:-;;72:46;110:6;97:20;72:46;;;63:55;57:66;-1:-1;;;57:66;130:112;;194:43;229:6;216:20;194:43;;249:118;;316:46;354:6;341:20;316:46;;388:335;;;495:4;483:17;;479:27;-1:-1;469:2;;520:1;517;510:12;469:2;-1:-1;540:20;;580:18;569:30;;566:2;;;612:1;609;602:12;566:2;646:4;638:6;634:17;622:29;;696:3;689;681:6;677:16;667:8;663:31;660:40;657:2;;;713:1;710;703:12;657:2;462:261;;;;;;732:432;;822:4;810:17;;806:27;-1:-1;796:2;;847:1;844;837:12;796:2;884:6;871:20;906:60;921:44;958:6;921:44;;;906:60;;;897:69;;986:6;979:5;972:21;1022:4;1014:6;1010:17;1055:4;1048:5;1044:16;1090:3;1081:6;1076:3;1072:16;1069:25;1066:2;;;1107:1;1104;1097:12;1066:2;1117:41;1151:6;1146:3;1141;1117:41;;;789:375;;;;;;;;1649:2208;;1760:5;1748:9;1743:3;1739:19;1735:31;1732:2;;;1779:1;1776;1769:12;1732:2;1797:21;1812:5;1797:21;;;1788:30;-1:-1;1876:1;1907:49;1952:3;1932:9;1907:49;;;1883:74;;-1:-1;2026:2;2059:49;2104:3;2080:22;;;2059:49;;;2052:4;2045:5;2041:16;2034:75;1978:142;2185:2;2218:49;2263:3;2254:6;2243:9;2239:22;2218:49;;;2211:4;2204:5;2200:16;2193:75;2130:149;2338:2;2371:49;2416:3;2407:6;2396:9;2392:22;2371:49;;;2364:4;2357:5;2353:16;2346:75;2289:143;2494:3;2528:49;2573:3;2564:6;2553:9;2549:22;2528:49;;;2521:4;2514:5;2510:16;2503:75;2442:147;2651:3;2685:49;2730:3;2721:6;2710:9;2706:22;2685:49;;;2678:4;2671:5;2667:16;2660:75;2599:147;2800:3;2834:49;2879:3;2870:6;2859:9;2855:22;2834:49;;;2827:4;2820:5;2816:16;2809:75;2756:139;2949:3;2983:49;3028:3;3019:6;3008:9;3004:22;2983:49;;;2976:4;2969:5;2965:16;2958:75;2905:139;3111:3;3146:49;3191:3;3182:6;3171:9;3167:22;3146:49;;;3138:5;3131;3127:17;3120:76;3054:153;3257:3;3292:49;3337:3;3328:6;3317:9;3313:22;3292:49;;;3284:5;3277;3273:17;3266:76;3217:136;3441:3;3430:9;3426:19;3413:33;3466:18;3458:6;3455:30;3452:2;;;3498:1;3495;3488:12;3452:2;3534:54;3584:3;3575:6;3564:9;3560:22;3534:54;;;3526:5;3519;3515:17;3508:81;3363:237;3688:3;3677:9;3673:19;3660:33;3713:18;3705:6;3702:30;3699:2;;;3745:1;3742;3735:12;3699:2;3781:54;3831:3;3822:6;3811:9;3807:22;3781:54;;;3773:5;3766;3762:17;3755:81;3610:237;1726:2131;;;;;3989:241;;4093:2;4081:9;4072:7;4068:23;4064:32;4061:2;;;4109:1;4106;4099:12;4061:2;4144:1;4161:53;4206:7;4186:9;4161:53;;;4151:63;4055:175;-1:-1;;;;4055:175;4237:360;;;4355:2;4343:9;4334:7;4330:23;4326:32;4323:2;;;4371:1;4368;4361:12;4323:2;4406:1;4423:53;4468:7;4448:9;4423:53;;;4413:63;;4385:97;4513:2;4531:50;4573:7;4564:6;4553:9;4549:22;4531:50;;;4521:60;;4492:95;4317:280;;;;;;4604:615;;;;;4761:2;4749:9;4740:7;4736:23;4732:32;4729:2;;;4777:1;4774;4767:12;4729:2;4812:1;4829:53;4874:7;4854:9;4829:53;;;4819:63;;4791:97;4919:2;4937:53;4982:7;4973:6;4962:9;4958:22;4937:53;;;4927:63;;4898:98;5055:2;5044:9;5040:18;5027:32;5079:18;5071:6;5068:30;5065:2;;;5111:1;5108;5101:12;5065:2;5139:64;5195:7;5186:6;5175:9;5171:22;5139:64;;;4723:496;;;;-1:-1;5121:82;-1:-1;;;;4723:496;5226:851;;;;;5412:3;5400:9;5391:7;5387:23;5383:33;5380:2;;;5429:1;5426;5419:12;5380:2;5464:31;;5515:18;5504:30;;5501:2;;;5547:1;5544;5537:12;5501:2;5567:75;5634:7;5625:6;5614:9;5610:22;5567:75;;;5557:85;;5443:205;5679:2;5697:53;5742:7;5733:6;5722:9;5718:22;5697:53;;;5687:63;;5658:98;5787:2;5805:53;5850:7;5841:6;5830:9;5826:22;5805:53;;;5795:63;;5766:98;5923:2;5912:9;5908:18;5895:32;5947:18;5939:6;5936:30;5933:2;;;5979:1;5976;5969:12;5933:2;5999:62;6053:7;6044:6;6033:9;6029:22;5999:62;;;5989:72;;5874:193;5374:703;;;;;;;;6084:110;6157:31;6182:5;6157:31;;;6152:3;6145:44;6139:55;;;6201:101;6268:28;6290:5;6268:28;;6309:297;;6409:38;6441:5;6409:38;;;6464:6;6459:3;6452:19;6476:63;6532:6;6525:4;6520:3;6516:14;6509:4;6502:5;6498:16;6476:63;;;6571:29;6593:6;6571:29;;;6551:50;;;6564:4;6551:50;;6389:217;-1:-1;;;6389:217;6932:731;;7039:5;7033:12;7073:1;7062:9;7058:17;7086:1;7081:200;;;;7292:1;7287:370;;;;7051:606;;7081:200;7155:1;7140:17;;7159:4;7136:28;7171:19;;7235:9;7220:25;;7213:4;7204:14;;7197:49;7269:4;7260:14;;;-1:-1;7081:200;;7287:370;7356:1;7345:9;7341:17;7377:6;7372:3;7365:19;7407:4;7402:3;7398:14;7391:21;;7434:37;7465:5;7434:37;;;7487:1;7495:130;7509:6;7506:1;7503:13;7495:130;;;7568:14;;7555:11;;;7548:35;7615:1;7602:15;;;;7531:4;7524:12;7495:130;;;7639:11;;;-1:-1;;;7051:606;;7009:654;;;;;;7672:296;7827:2;7815:15;;7864:66;7859:2;7850:12;;7843:88;7959:2;7950:12;;7808:160;7977:296;8132:2;8120:15;;8169:66;8164:2;8155:12;;8148:88;8264:2;8255:12;;8113:160;8282:296;8437:2;8425:15;;8474:66;8469:2;8460:12;;8453:88;8569:2;8560:12;;8418:160;8587:296;8742:2;8730:15;;8779:66;8774:2;8765:12;;8758:88;8874:2;8865:12;;8723:160;8944:2417;9157:22;;8944:2417;;9079:5;9070:15;;;9191:61;9074:3;9157:22;9191:61;;;9100:164;9348:4;9341:5;9337:16;9331:23;9366:62;9422:4;9417:3;9413:14;9400:11;9366:62;;;9274:166;9531:4;9524:5;9520:16;9514:23;9549:62;9605:4;9600:3;9596:14;9583:11;9549:62;;;9450:173;9708:4;9701:5;9697:16;9691:23;9726:62;9782:4;9777:3;9773:14;9760:11;9726:62;;;9633:167;9888:4;9881:5;9877:16;9871:23;9906:62;9962:4;9957:3;9953:14;9940:11;9906:62;;;9810:170;10068:4;10061:5;10057:16;10051:23;10086:62;10142:4;10137:3;10133:14;10120:11;10086:62;;;9990:170;10240:4;10233:5;10229:16;10223:23;10258:62;10314:4;10309:3;10305:14;10292:11;10258:62;;;10170:162;10412:4;10405:5;10401:16;10395:23;10430:62;10486:4;10481:3;10477:14;10464:11;10430:62;;;10342:162;10597:5;10590;10586:17;10580:24;10616:63;10672:5;10667:3;10663:15;10650:11;10616:63;;;10514:177;10767:5;10760;10756:17;10750:24;10786:63;10842:5;10837:3;10833:15;10820:11;10786:63;;;10701:160;10947:5;10940;10936:17;10930:24;11000:3;10994:4;10990:14;10982:5;10977:3;10973:15;10966:39;11020:66;11081:4;11068:11;11020:66;;;11012:74;;10871:227;11184:5;11177;11173:17;11167:24;11237:3;11231:4;11227:14;11219:5;11214:3;11210:15;11203:39;11257:66;11318:4;11305:11;11257:66;;;11249:74;9052:2309;-1:-1;;;;;9052:2309;11368:110;11441:31;11466:5;11441:31;;11485:193;11593:2;11578:18;;11607:61;11582:9;11641:6;11607:61;;;11564:114;;;;;11685:181;11787:2;11772:18;;11801:55;11776:9;11829:6;11801:55;;11873:387;12054:2;12068:47;;;12039:18;;12129:121;12039:18;12129:121;;12267:387;12448:2;12462:47;;;12433:18;;12523:121;12433:18;12523:121;;12661:387;12842:2;12856:47;;;12827:18;;12917:121;12827:18;12917:121;;13055:387;13236:2;13250:47;;;13221:18;;13311:121;13221:18;13311:121;;13449:615;13675:2;13689:47;;;13660:18;;13750:92;13660:18;13828:6;13750:92;;;13742:100;;13853:62;13911:2;13900:9;13896:18;13887:6;13853:62;;;13963:9;13957:4;13953:20;13948:2;13937:9;13933:18;13926:48;13988:66;14049:4;14040:6;13988:66;;14071:659;14296:3;14281:19;;14311:61;14285:9;14345:6;14311:61;;;14383:62;14441:2;14430:9;14426:18;14417:6;14383:62;;;14493:9;14487:4;14483:20;14478:2;14467:9;14463:18;14456:48;14518:66;14579:4;14570:6;14518:66;;;14510:74;;14632:9;14626:4;14622:20;14617:2;14606:9;14602:18;14595:48;14657:63;14715:4;14706:6;14657:63;;;14649:71;14267:463;-1:-1;;;;;;14267:463;14737:256;14799:2;14793:9;14825:17;;;14900:18;14885:34;;14921:22;;;14882:62;14879:2;;;14957:1;14954;14947:12;14879:2;14973;14966:22;14777:216;;-1:-1;14777:216;15000:254;;15139:18;15131:6;15128:30;15125:2;;;15171:1;15168;15161:12;15125:2;-1:-1;15244:4;15215;15192:17;;;;15211:9;15188:33;15234:15;;15062:192;15528:125;;15594:15;;;15641:4;15628:18;;;15586:67;15662:87;15732:12;;15716:33;15854:128;15934:42;15923:54;;15906:76;15989:92;16062:13;16055:21;;16038:43;16088:79;16157:5;16140:27;16581:145;16662:6;16657:3;16652;16639:30;-1:-1;16718:1;16700:16;;16693:27;16632:94;16735:268;16800:1;16807:101;16821:6;16818:1;16815:13;16807:101;;;16888:11;;;16882:18;16869:11;;;16862:39;16843:2;16836:10;16807:101;;;16923:6;16920:1;16917:13;16914:2;;;16988:1;16979:6;16974:3;16970:16;16963:27;16914:2;16784:219;;;;;17011:97;17099:2;17079:14;17095:7;17075:28;;17059:49"
}
}
},
@@ -243,22 +243,22 @@
}
},
"sourceCodes": {
- "2.0.0/protocol/Exchange/interfaces/IAssetProxyDispatcher.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.24;\n\ncontract IAssetProxyDispatcher {\n\n /// @dev Registers an asset proxy to its asset proxy id.\n /// Once an asset proxy is registered, it cannot be unregistered.\n /// @param assetProxy Address of new asset proxy to register.\n function registerAssetProxy(address assetProxy)\n external;\n\n /// @dev Gets an asset proxy.\n /// @param assetProxyId Id of the asset proxy.\n /// @return The asset proxy registered to assetProxyId. Returns 0x0 if no proxy is registered.\n function getAssetProxy(bytes4 assetProxyId)\n external\n view\n returns (address);\n}\n",
- "2.0.0/protocol/Exchange/interfaces/IExchange.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"./IExchangeCore.sol\";\nimport \"./IMatchOrders.sol\";\nimport \"./ISignatureValidator.sol\";\nimport \"./ITransactions.sol\";\nimport \"./IAssetProxyDispatcher.sol\";\nimport \"./IWrapperFunctions.sol\";\n\ncontract IExchange is\n IExchangeCore,\n IMatchOrders,\n ISignatureValidator,\n ITransactions,\n IAssetProxyDispatcher,\n IWrapperFunctions\n{}\n",
- "2.0.0/protocol/Exchange/interfaces/IExchangeCore.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../libs/LibOrder.sol\";\nimport \"../libs/LibFillResults.sol\";\n\ncontract IExchangeCore {\n\n /// @dev Cancels all orders created by makerAddress with a salt less than or equal to the targetOrderEpoch\n /// and senderAddress equal to msg.sender (or null address if msg.sender == makerAddress).\n /// @param targetOrderEpoch Orders created with a salt less or equal to this value will be cancelled.\n function cancelOrdersUpTo(uint256 targetOrderEpoch)\n external;\n\n /// @dev Fills the input order.\n /// @param order Order struct containing order specifications.\n /// @param takerAssetFillAmount Desired amount of takerAsset to sell.\n /// @param signature Proof that order has been created by maker.\n /// @return Amounts filled and fees paid by maker and taker.\n function fillOrder(\n LibOrder.Order memory order,\n uint256 takerAssetFillAmount,\n bytes memory signature\n )\n public\n returns (LibFillResults.FillResults memory fillResults);\n\n /// @dev After calling, the order can not be filled anymore.\n /// @param order Order struct containing order specifications.\n function cancelOrder(LibOrder.Order memory order)\n public;\n\n /// @dev Gets information about an order: status, hash, and amount filled.\n /// @param order Order to gather information on.\n /// @return OrderInfo Information about the order and its state.\n /// See LibOrder.OrderInfo for a complete description.\n function getOrderInfo(LibOrder.Order memory order)\n public\n view\n returns (LibOrder.OrderInfo memory orderInfo);\n}\n",
- "2.0.0/protocol/Exchange/interfaces/IMatchOrders.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*/\npragma solidity ^0.4.24;\npragma experimental ABIEncoderV2;\n\nimport \"../libs/LibOrder.sol\";\nimport \"../libs/LibFillResults.sol\";\n\ncontract IMatchOrders {\n\n /// @dev Match two complementary orders that have a profitable spread.\n /// Each order is filled at their respective price point. However, the calculations are\n /// carried out as though the orders are both being filled at the right order's price point.\n /// The profit made by the left order goes to the taker (who matched the two orders).\n /// @param leftOrder First order to match.\n /// @param rightOrder Second order to match.\n /// @param leftSignature Proof that order was created by the left maker.\n /// @param rightSignature Proof that order was created by the right maker.\n /// @return matchedFillResults Amounts filled and fees paid by maker and taker of matched orders.\n /// TODO: Make this function external once supported by Solidity (See Solidity Issues #3199, #1603)\n function matchOrders(\n LibOrder.Order memory leftOrder,\n LibOrder.Order memory rightOrder,\n bytes memory leftSignature,\n bytes memory rightSignature\n )\n public\n returns (LibFillResults.MatchedFillResults memory matchedFillResults);\n}\n",
- "2.0.0/protocol/Exchange/interfaces/ISignatureValidator.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.24;\n\ncontract ISignatureValidator {\n\n /// @dev Approves a hash on-chain using any valid signature type.\n /// After presigning a hash, the preSign signature type will become valid for that hash and signer.\n /// @param signerAddress Address that should have signed the given hash.\n /// @param signature Proof that the hash has been signed by signer.\n function preSign(\n bytes32 hash,\n address signerAddress,\n bytes signature\n )\n external;\n \n /// @dev Approves/unnapproves a Validator contract to verify signatures on signer's behalf.\n /// @param validatorAddress Address of Validator contract.\n /// @param approval Approval or disapproval of Validator contract.\n function setSignatureValidatorApproval(\n address validatorAddress,\n bool approval\n )\n external;\n\n /// @dev Verifies that a signature is valid.\n /// @param hash Message hash that is signed.\n /// @param signerAddress Address of signer.\n /// @param signature Proof of signing.\n /// @return Validity of order signature.\n function isValidSignature(\n bytes32 hash,\n address signerAddress,\n bytes memory signature\n )\n public\n view\n returns (bool isValid);\n}\n",
- "2.0.0/protocol/Exchange/interfaces/ITransactions.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*/\npragma solidity ^0.4.24;\n\ncontract ITransactions {\n\n /// @dev Executes an exchange method call in the context of signer.\n /// @param salt Arbitrary number to ensure uniqueness of transaction hash.\n /// @param signerAddress Address of transaction signer.\n /// @param data AbiV2 encoded calldata.\n /// @param signature Proof of signer transaction by signer.\n function executeTransaction(\n uint256 salt,\n address signerAddress,\n bytes data,\n bytes signature\n )\n external;\n}\n",
- "2.0.0/protocol/Exchange/interfaces/IWrapperFunctions.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../libs/LibOrder.sol\";\nimport \"../libs/LibFillResults.sol\";\n\ncontract IWrapperFunctions {\n /// @dev Fills the input order. Reverts if exact takerAssetFillAmount not filled.\n /// @param order LibOrder.Order struct containing order specifications.\n /// @param takerAssetFillAmount Desired amount of takerAsset to sell.\n /// @param signature Proof that order has been created by maker.\n function fillOrKillOrder(\n LibOrder.Order memory order,\n uint256 takerAssetFillAmount,\n bytes memory signature\n )\n public\n returns (LibFillResults.FillResults memory fillResults);\n\n /// @dev Fills an order with specified parameters and ECDSA signature.\n /// Returns false if the transaction would otherwise revert.\n /// @param order LibOrder.Order struct containing order specifications.\n /// @param takerAssetFillAmount Desired amount of takerAsset to sell.\n /// @param signature Proof that order has been created by maker.\n /// @return Amounts filled and fees paid by maker and taker.\n function fillOrderNoThrow(\n LibOrder.Order memory order,\n uint256 takerAssetFillAmount,\n bytes memory signature\n )\n public\n returns (LibFillResults.FillResults memory fillResults);\n\n /// @dev Synchronously executes multiple calls of fillOrder.\n /// @param orders Array of order specifications.\n /// @param takerAssetFillAmounts Array of desired amounts of takerAsset to sell in orders.\n /// @param signatures Proofs that orders have been created by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n function batchFillOrders(\n LibOrder.Order[] memory orders,\n uint256[] memory takerAssetFillAmounts,\n bytes[] memory signatures\n )\n public\n returns (LibFillResults.FillResults memory totalFillResults);\n\n /// @dev Synchronously executes multiple calls of fillOrKill.\n /// @param orders Array of order specifications.\n /// @param takerAssetFillAmounts Array of desired amounts of takerAsset to sell in orders.\n /// @param signatures Proofs that orders have been created by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n function batchFillOrKillOrders(\n LibOrder.Order[] memory orders,\n uint256[] memory takerAssetFillAmounts,\n bytes[] memory signatures\n )\n public\n returns (LibFillResults.FillResults memory totalFillResults);\n\n /// @dev Fills an order with specified parameters and ECDSA signature.\n /// Returns false if the transaction would otherwise revert.\n /// @param orders Array of order specifications.\n /// @param takerAssetFillAmounts Array of desired amounts of takerAsset to sell in orders.\n /// @param signatures Proofs that orders have been created by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n function batchFillOrdersNoThrow(\n LibOrder.Order[] memory orders,\n uint256[] memory takerAssetFillAmounts,\n bytes[] memory signatures\n )\n public\n returns (LibFillResults.FillResults memory totalFillResults);\n\n /// @dev Synchronously executes multiple calls of fillOrder until total amount of takerAsset is sold by taker.\n /// @param orders Array of order specifications.\n /// @param takerAssetFillAmount Desired amount of takerAsset to sell.\n /// @param signatures Proofs that orders have been created by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n function marketSellOrders(\n LibOrder.Order[] memory orders,\n uint256 takerAssetFillAmount,\n bytes[] memory signatures\n )\n public\n returns (LibFillResults.FillResults memory totalFillResults);\n\n /// @dev Synchronously executes multiple calls of fillOrder until total amount of takerAsset is sold by taker.\n /// Returns false if the transaction would otherwise revert.\n /// @param orders Array of order specifications.\n /// @param takerAssetFillAmount Desired amount of takerAsset to sell.\n /// @param signatures Proofs that orders have been signed by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n function marketSellOrdersNoThrow(\n LibOrder.Order[] memory orders,\n uint256 takerAssetFillAmount,\n bytes[] memory signatures\n )\n public\n returns (LibFillResults.FillResults memory totalFillResults);\n\n /// @dev Synchronously executes multiple calls of fillOrder until total amount of makerAsset is bought by taker.\n /// @param orders Array of order specifications.\n /// @param makerAssetFillAmount Desired amount of makerAsset to buy.\n /// @param signatures Proofs that orders have been signed by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n function marketBuyOrders(\n LibOrder.Order[] memory orders,\n uint256 makerAssetFillAmount,\n bytes[] memory signatures\n )\n public\n returns (LibFillResults.FillResults memory totalFillResults);\n\n /// @dev Synchronously executes multiple fill orders in a single transaction until total amount is bought by taker.\n /// Returns false if the transaction would otherwise revert.\n /// @param orders Array of order specifications.\n /// @param makerAssetFillAmount Desired amount of makerAsset to buy.\n /// @param signatures Proofs that orders have been signed by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n function marketBuyOrdersNoThrow(\n LibOrder.Order[] memory orders,\n uint256 makerAssetFillAmount,\n bytes[] memory signatures\n )\n public\n returns (LibFillResults.FillResults memory totalFillResults);\n\n /// @dev Synchronously cancels multiple orders in a single transaction.\n /// @param orders Array of order specifications.\n function batchCancelOrders(LibOrder.Order[] memory orders)\n public;\n}\n",
- "2.0.0/protocol/Exchange/libs/LibEIP712.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.24;\n\ncontract LibEIP712 {\n // EIP191 header for EIP712 prefix\n string constant EIP191_HEADER = \"\\x19\\x01\";\n\n // EIP712 Domain Name value\n string constant EIP712_DOMAIN_NAME = \"0x Protocol\";\n\n // EIP712 Domain Version value\n string constant EIP712_DOMAIN_VERSION = \"2\";\n\n // Hash of the EIP712 Domain Separator Schema\n bytes32 public constant EIP712_DOMAIN_SEPARATOR_SCHEMA_HASH = keccak256(abi.encodePacked(\n \"EIP712Domain(\",\n \"string name,\",\n \"string version,\",\n \"address verifyingContract\",\n \")\"\n ));\n\n // Hash of the EIP712 Domain Separator data\n bytes32 public EIP712_DOMAIN_HASH;\n\n constructor ()\n public\n {\n EIP712_DOMAIN_HASH = keccak256(abi.encode(\n EIP712_DOMAIN_SEPARATOR_SCHEMA_HASH,\n keccak256(bytes(EIP712_DOMAIN_NAME)),\n keccak256(bytes(EIP712_DOMAIN_VERSION)),\n address(this)\n ));\n }\n\n /// @dev Calculates EIP712 encoding for a hash struct in this EIP712 Domain.\n /// @param hashStruct The EIP712 hash struct.\n /// @return EIP712 hash applied to this EIP712 Domain.\n function hashEIP712Message(bytes32 hashStruct)\n internal\n view\n returns (bytes32)\n {\n return keccak256(abi.encodePacked(EIP191_HEADER, EIP712_DOMAIN_HASH, hashStruct));\n }\n}\n",
- "2.0.0/protocol/Exchange/libs/LibFillResults.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.24;\n\nimport \"../../../utils/SafeMath/SafeMath.sol\";\n\ncontract LibFillResults is\n SafeMath\n{\n\n struct FillResults {\n uint256 makerAssetFilledAmount; // Total amount of makerAsset(s) filled.\n uint256 takerAssetFilledAmount; // Total amount of takerAsset(s) filled.\n uint256 makerFeePaid; // Total amount of ZRX paid by maker(s) to feeRecipient(s).\n uint256 takerFeePaid; // Total amount of ZRX paid by taker to feeRecipients(s).\n }\n\n struct MatchedFillResults {\n FillResults left; // Amounts filled and fees paid of left order.\n FillResults right; // Amounts filled and fees paid of right order.\n uint256 leftMakerAssetSpreadAmount; // Spread between price of left and right order, denominated in the left order's makerAsset, paid to taker.\n }\n\n /// @dev Adds properties of both FillResults instances.\n /// Modifies the first FillResults instance specified.\n /// @param totalFillResults Fill results instance that will be added onto.\n /// @param singleFillResults Fill results instance that will be added to totalFillResults.\n function addFillResults(FillResults memory totalFillResults, FillResults memory singleFillResults)\n internal\n pure\n {\n totalFillResults.makerAssetFilledAmount = safeAdd(totalFillResults.makerAssetFilledAmount, singleFillResults.makerAssetFilledAmount);\n totalFillResults.takerAssetFilledAmount = safeAdd(totalFillResults.takerAssetFilledAmount, singleFillResults.takerAssetFilledAmount);\n totalFillResults.makerFeePaid = safeAdd(totalFillResults.makerFeePaid, singleFillResults.makerFeePaid);\n totalFillResults.takerFeePaid = safeAdd(totalFillResults.takerFeePaid, singleFillResults.takerFeePaid);\n }\n}\n",
- "2.0.0/protocol/Exchange/libs/LibOrder.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.24;\n\nimport \"./LibEIP712.sol\";\n\ncontract LibOrder is\n LibEIP712\n{\n\n // Hash for the EIP712 Order Schema\n bytes32 constant EIP712_ORDER_SCHEMA_HASH = keccak256(abi.encodePacked(\n \"Order(\",\n \"address makerAddress,\",\n \"address takerAddress,\",\n \"address feeRecipientAddress,\",\n \"address senderAddress,\",\n \"uint256 makerAssetAmount,\",\n \"uint256 takerAssetAmount,\",\n \"uint256 makerFee,\",\n \"uint256 takerFee,\",\n \"uint256 expirationTimeSeconds,\",\n \"uint256 salt,\",\n \"bytes makerAssetData,\",\n \"bytes takerAssetData\",\n \")\"\n ));\n\n // A valid order remains fillable until it is expired, fully filled, or cancelled.\n // An order's state is unaffected by external factors, like account balances.\n enum OrderStatus {\n INVALID, // Default value\n INVALID_MAKER_ASSET_AMOUNT, // Order does not have a valid maker asset amount\n INVALID_TAKER_ASSET_AMOUNT, // Order does not have a valid taker asset amount\n FILLABLE, // Order is fillable\n EXPIRED, // Order has already expired\n FULLY_FILLED, // Order is fully filled\n CANCELLED // Order has been cancelled\n }\n\n struct Order {\n address makerAddress; // Address that created the order. \n address takerAddress; // Address that is allowed to fill the order. If set to 0, any address is allowed to fill the order. \n address feeRecipientAddress; // Address that will recieve fees when order is filled. \n address senderAddress; // Address that is allowed to call Exchange contract methods that affect this order. If set to 0, any address is allowed to call these methods.\n uint256 makerAssetAmount; // Amount of makerAsset being offered by maker. Must be greater than 0. \n uint256 takerAssetAmount; // Amount of takerAsset being bid on by maker. Must be greater than 0. \n uint256 makerFee; // Amount of ZRX paid to feeRecipient by maker when order is filled. If set to 0, no transfer of ZRX from maker to feeRecipient will be attempted.\n uint256 takerFee; // Amount of ZRX paid to feeRecipient by taker when order is filled. If set to 0, no transfer of ZRX from taker to feeRecipient will be attempted.\n uint256 expirationTimeSeconds; // Timestamp in seconds at which order expires. \n uint256 salt; // Arbitrary number to facilitate uniqueness of the order's hash. \n bytes makerAssetData; // Encoded data that can be decoded by a specified proxy contract when transferring makerAsset. The last byte references the id of this proxy.\n bytes takerAssetData; // Encoded data that can be decoded by a specified proxy contract when transferring takerAsset. The last byte references the id of this proxy.\n }\n\n struct OrderInfo {\n uint8 orderStatus; // Status that describes order's validity and fillability.\n bytes32 orderHash; // EIP712 hash of the order (see LibOrder.getOrderHash).\n uint256 orderTakerAssetFilledAmount; // Amount of order that has already been filled.\n }\n\n /// @dev Calculates Keccak-256 hash of the order.\n /// @param order The order structure.\n /// @return Keccak-256 EIP712 hash of the order.\n function getOrderHash(Order memory order)\n internal\n view\n returns (bytes32 orderHash)\n {\n orderHash = hashEIP712Message(hashOrder(order));\n return orderHash;\n }\n\n /// @dev Calculates EIP712 hash of the order.\n /// @param order The order structure.\n /// @return EIP712 hash of the order.\n function hashOrder(Order memory order)\n internal\n pure\n returns (bytes32 result)\n {\n bytes32 schemaHash = EIP712_ORDER_SCHEMA_HASH;\n bytes32 makerAssetDataHash = keccak256(order.makerAssetData);\n bytes32 takerAssetDataHash = keccak256(order.takerAssetData);\n // Assembly for more efficiently computing:\n // keccak256(abi.encode(\n // order.makerAddress,\n // order.takerAddress,\n // order.feeRecipientAddress,\n // order.senderAddress,\n // order.makerAssetAmount,\n // order.takerAssetAmount,\n // order.makerFee,\n // order.takerFee,\n // order.expirationTimeSeconds,\n // order.salt,\n // keccak256(order.makerAssetData),\n // keccak256(order.takerAssetData)\n // ));\n assembly {\n // Backup\n let temp1 := mload(sub(order, 32))\n let temp2 := mload(add(order, 320))\n let temp3 := mload(add(order, 352))\n \n // Hash in place\n mstore(sub(order, 32), schemaHash)\n mstore(add(order, 320), makerAssetDataHash)\n mstore(add(order, 352), takerAssetDataHash)\n result := keccak256(sub(order, 32), 416)\n \n // Restore\n mstore(sub(order, 32), temp1)\n mstore(add(order, 320), temp2)\n mstore(add(order, 352), temp3)\n }\n return result;\n }\n}\n",
- "2.0.0/test/Whitelist/Whitelist.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../../protocol/Exchange/interfaces/IExchange.sol\";\nimport \"../../protocol/Exchange/libs/LibOrder.sol\";\nimport \"../../utils/Ownable/Ownable.sol\";\n\ncontract Whitelist is\n Ownable\n{\n // Revert reasons\n string constant MAKER_NOT_WHITELISTED = \"MAKER_NOT_WHITELISTED\"; // Maker address not whitelisted.\n string constant TAKER_NOT_WHITELISTED = \"TAKER_NOT_WHITELISTED\"; // Taker address not whitelisted.\n string constant INVALID_SENDER = \"INVALID_SENDER\"; // Sender must equal transaction origin.\n\n // Mapping of address => whitelist status.\n mapping (address => bool) public isWhitelisted;\n\n // Exchange contract.\n IExchange EXCHANGE;\n\n byte constant VALIDATOR_SIGNATURE_BYTE = \"\\x06\";\n bytes TX_ORIGIN_SIGNATURE;\n\n constructor (address _exchange)\n public\n {\n EXCHANGE = IExchange(_exchange);\n TX_ORIGIN_SIGNATURE = abi.encodePacked(address(this), VALIDATOR_SIGNATURE_BYTE);\n }\n\n /// @dev Adds or removes an address from the whitelist.\n /// @param target Address to add or remove from whitelist.\n /// @param isApproved Whitelist status to assign to address.\n function updateWhitelistStatus(\n address target,\n bool isApproved\n )\n external\n onlyOwner\n {\n isWhitelisted[target] = isApproved;\n }\n\n /// @dev Fills an order using `msg.sender` as the taker.\n /// The transaction will revert if both the maker and taker are not whitelisted.\n /// Orders should specify this contract as the `senderAddress` in order to gaurantee\n /// that both maker and taker have been whitelisted.\n /// @param order Order struct containing order specifications.\n /// @param takerAssetFillAmount Desired amount of takerAsset to sell.\n /// @param salt Arbitrary value to gaurantee uniqueness of 0x transaction hash.\n /// @param orderSignature Proof that order has been created by maker.\n function fillOrderIfWhitelisted(\n LibOrder.Order memory order,\n uint256 takerAssetFillAmount,\n uint256 salt,\n bytes memory orderSignature\n )\n public\n {\n address takerAddress = msg.sender;\n\n // This contract must be the entry point for the transaction.\n require(\n takerAddress == tx.origin,\n INVALID_SENDER\n );\n\n // Check if maker is on the whitelist.\n require(\n isWhitelisted[order.makerAddress],\n MAKER_NOT_WHITELISTED\n );\n\n // Check if taker is on the whitelist.\n require(\n isWhitelisted[takerAddress],\n TAKER_NOT_WHITELISTED\n );\n\n // Encode arguments into byte array.\n bytes memory data = abi.encodeWithSelector(\n EXCHANGE.fillOrder.selector,\n order,\n takerAssetFillAmount,\n orderSignature\n );\n\n // Call `fillOrder` via `executeTransaction`.\n EXCHANGE.executeTransaction(\n salt,\n takerAddress,\n data,\n TX_ORIGIN_SIGNATURE\n );\n }\n\n /// @dev Verifies signer is same as signer of current Ethereum transaction.\n /// NOTE: This function can currently be used to validate signatures coming from outside of this contract.\n /// Extra safety checks can be added for a production contract.\n /// @param signerAddress Address that should have signed the given hash.\n /// @param signature Proof of signing.\n /// @return Validity of order signature.\n function isValidSignature(\n bytes32 hash,\n address signerAddress,\n bytes signature\n )\n external\n view\n returns (bool isValid)\n {\n return signerAddress == tx.origin;\n }\n}\n",
- "2.0.0/utils/Ownable/IOwnable.sol": "pragma solidity ^0.4.24;\npragma experimental ABIEncoderV2;\n\n/*\n * Ownable\n *\n * Base contract with an owner.\n * Provides onlyOwner modifier, which prevents function from running if it is called by anyone other than the owner.\n */\n\ncontract IOwnable {\n function transferOwnership(address newOwner)\n public;\n}\n",
- "2.0.0/utils/Ownable/Ownable.sol": "pragma solidity ^0.4.24;\npragma experimental ABIEncoderV2;\n\n/*\n * Ownable\n *\n * Base contract with an owner.\n * Provides onlyOwner modifier, which prevents function from running if it is called by anyone other than the owner.\n */\n\nimport \"./IOwnable.sol\";\n\ncontract Ownable is IOwnable {\n address public owner;\n\n constructor ()\n public\n {\n owner = msg.sender;\n }\n\n modifier onlyOwner() {\n require(\n msg.sender == owner,\n \"ONLY_CONTRACT_OWNER\"\n );\n _;\n }\n\n function transferOwnership(address newOwner)\n public\n onlyOwner\n {\n if (newOwner != address(0)) {\n owner = newOwner;\n }\n }\n}\n",
- "2.0.0/utils/SafeMath/SafeMath.sol": "pragma solidity ^0.4.24;\npragma experimental ABIEncoderV2;\n\ncontract SafeMath {\n function safeMul(uint a, uint b)\n internal\n pure\n returns (uint256)\n {\n uint c = a * b;\n assert(a == 0 || c / a == b);\n return c;\n }\n\n function safeDiv(uint a, uint b)\n internal\n pure\n returns (uint256)\n {\n uint c = a / b;\n return c;\n }\n\n function safeSub(uint a, uint b)\n internal\n pure\n returns (uint256)\n {\n assert(b <= a);\n return a - b;\n }\n\n function safeAdd(uint a, uint b)\n internal\n pure\n returns (uint256)\n {\n uint c = a + b;\n assert(c >= a);\n return c;\n }\n\n function max64(uint64 a, uint64 b)\n internal\n pure\n returns (uint256)\n {\n return a >= b ? a : b;\n }\n\n function min64(uint64 a, uint64 b)\n internal\n pure\n returns (uint256)\n {\n return a < b ? a : b;\n }\n\n function max256(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n return a >= b ? a : b;\n }\n\n function min256(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n return a < b ? a : b;\n }\n}\n"
+ "2.0.0/protocol/Exchange/interfaces/IAssetProxyDispatcher.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.24;\n\n\ncontract IAssetProxyDispatcher {\n\n /// @dev Registers an asset proxy to its asset proxy id.\n /// Once an asset proxy is registered, it cannot be unregistered.\n /// @param assetProxy Address of new asset proxy to register.\n function registerAssetProxy(address assetProxy)\n external;\n\n /// @dev Gets an asset proxy.\n /// @param assetProxyId Id of the asset proxy.\n /// @return The asset proxy registered to assetProxyId. Returns 0x0 if no proxy is registered.\n function getAssetProxy(bytes4 assetProxyId)\n external\n view\n returns (address);\n}\n",
+ "2.0.0/protocol/Exchange/interfaces/IExchange.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"./IExchangeCore.sol\";\nimport \"./IMatchOrders.sol\";\nimport \"./ISignatureValidator.sol\";\nimport \"./ITransactions.sol\";\nimport \"./IAssetProxyDispatcher.sol\";\nimport \"./IWrapperFunctions.sol\";\n\n\n// solhint-disable no-empty-blocks\ncontract IExchange is\n IExchangeCore,\n IMatchOrders,\n ISignatureValidator,\n ITransactions,\n IAssetProxyDispatcher,\n IWrapperFunctions\n{}\n",
+ "2.0.0/protocol/Exchange/interfaces/IExchangeCore.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../libs/LibOrder.sol\";\nimport \"../libs/LibFillResults.sol\";\n\n\ncontract IExchangeCore {\n\n /// @dev Cancels all orders created by makerAddress with a salt less than or equal to the targetOrderEpoch\n /// and senderAddress equal to msg.sender (or null address if msg.sender == makerAddress).\n /// @param targetOrderEpoch Orders created with a salt less or equal to this value will be cancelled.\n function cancelOrdersUpTo(uint256 targetOrderEpoch)\n external;\n\n /// @dev Fills the input order.\n /// @param order Order struct containing order specifications.\n /// @param takerAssetFillAmount Desired amount of takerAsset to sell.\n /// @param signature Proof that order has been created by maker.\n /// @return Amounts filled and fees paid by maker and taker.\n function fillOrder(\n LibOrder.Order memory order,\n uint256 takerAssetFillAmount,\n bytes memory signature\n )\n public\n returns (LibFillResults.FillResults memory fillResults);\n\n /// @dev After calling, the order can not be filled anymore.\n /// @param order Order struct containing order specifications.\n function cancelOrder(LibOrder.Order memory order)\n public;\n\n /// @dev Gets information about an order: status, hash, and amount filled.\n /// @param order Order to gather information on.\n /// @return OrderInfo Information about the order and its state.\n /// See LibOrder.OrderInfo for a complete description.\n function getOrderInfo(LibOrder.Order memory order)\n public\n view\n returns (LibOrder.OrderInfo memory orderInfo);\n}\n",
+ "2.0.0/protocol/Exchange/interfaces/IMatchOrders.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*/\npragma solidity 0.4.24;\npragma experimental ABIEncoderV2;\n\nimport \"../libs/LibOrder.sol\";\nimport \"../libs/LibFillResults.sol\";\n\n\ncontract IMatchOrders {\n\n /// @dev Match two complementary orders that have a profitable spread.\n /// Each order is filled at their respective price point. However, the calculations are\n /// carried out as though the orders are both being filled at the right order's price point.\n /// The profit made by the left order goes to the taker (who matched the two orders).\n /// @param leftOrder First order to match.\n /// @param rightOrder Second order to match.\n /// @param leftSignature Proof that order was created by the left maker.\n /// @param rightSignature Proof that order was created by the right maker.\n /// @return matchedFillResults Amounts filled and fees paid by maker and taker of matched orders.\n function matchOrders(\n LibOrder.Order memory leftOrder,\n LibOrder.Order memory rightOrder,\n bytes memory leftSignature,\n bytes memory rightSignature\n )\n public\n returns (LibFillResults.MatchedFillResults memory matchedFillResults);\n}\n",
+ "2.0.0/protocol/Exchange/interfaces/ISignatureValidator.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.24;\n\n\ncontract ISignatureValidator {\n\n /// @dev Approves a hash on-chain using any valid signature type.\n /// After presigning a hash, the preSign signature type will become valid for that hash and signer.\n /// @param signerAddress Address that should have signed the given hash.\n /// @param signature Proof that the hash has been signed by signer.\n function preSign(\n bytes32 hash,\n address signerAddress,\n bytes signature\n )\n external;\n \n /// @dev Approves/unnapproves a Validator contract to verify signatures on signer's behalf.\n /// @param validatorAddress Address of Validator contract.\n /// @param approval Approval or disapproval of Validator contract.\n function setSignatureValidatorApproval(\n address validatorAddress,\n bool approval\n )\n external;\n\n /// @dev Verifies that a signature is valid.\n /// @param hash Message hash that is signed.\n /// @param signerAddress Address of signer.\n /// @param signature Proof of signing.\n /// @return Validity of order signature.\n function isValidSignature(\n bytes32 hash,\n address signerAddress,\n bytes memory signature\n )\n public\n view\n returns (bool isValid);\n}\n",
+ "2.0.0/protocol/Exchange/interfaces/ITransactions.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*/\npragma solidity 0.4.24;\n\n\ncontract ITransactions {\n\n /// @dev Executes an exchange method call in the context of signer.\n /// @param salt Arbitrary number to ensure uniqueness of transaction hash.\n /// @param signerAddress Address of transaction signer.\n /// @param data AbiV2 encoded calldata.\n /// @param signature Proof of signer transaction by signer.\n function executeTransaction(\n uint256 salt,\n address signerAddress,\n bytes data,\n bytes signature\n )\n external;\n}\n",
+ "2.0.0/protocol/Exchange/interfaces/IWrapperFunctions.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../libs/LibOrder.sol\";\nimport \"../libs/LibFillResults.sol\";\n\n\ncontract IWrapperFunctions {\n\n /// @dev Fills the input order. Reverts if exact takerAssetFillAmount not filled.\n /// @param order LibOrder.Order struct containing order specifications.\n /// @param takerAssetFillAmount Desired amount of takerAsset to sell.\n /// @param signature Proof that order has been created by maker.\n function fillOrKillOrder(\n LibOrder.Order memory order,\n uint256 takerAssetFillAmount,\n bytes memory signature\n )\n public\n returns (LibFillResults.FillResults memory fillResults);\n\n /// @dev Fills an order with specified parameters and ECDSA signature.\n /// Returns false if the transaction would otherwise revert.\n /// @param order LibOrder.Order struct containing order specifications.\n /// @param takerAssetFillAmount Desired amount of takerAsset to sell.\n /// @param signature Proof that order has been created by maker.\n /// @return Amounts filled and fees paid by maker and taker.\n function fillOrderNoThrow(\n LibOrder.Order memory order,\n uint256 takerAssetFillAmount,\n bytes memory signature\n )\n public\n returns (LibFillResults.FillResults memory fillResults);\n\n /// @dev Synchronously executes multiple calls of fillOrder.\n /// @param orders Array of order specifications.\n /// @param takerAssetFillAmounts Array of desired amounts of takerAsset to sell in orders.\n /// @param signatures Proofs that orders have been created by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n function batchFillOrders(\n LibOrder.Order[] memory orders,\n uint256[] memory takerAssetFillAmounts,\n bytes[] memory signatures\n )\n public\n returns (LibFillResults.FillResults memory totalFillResults);\n\n /// @dev Synchronously executes multiple calls of fillOrKill.\n /// @param orders Array of order specifications.\n /// @param takerAssetFillAmounts Array of desired amounts of takerAsset to sell in orders.\n /// @param signatures Proofs that orders have been created by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n function batchFillOrKillOrders(\n LibOrder.Order[] memory orders,\n uint256[] memory takerAssetFillAmounts,\n bytes[] memory signatures\n )\n public\n returns (LibFillResults.FillResults memory totalFillResults);\n\n /// @dev Fills an order with specified parameters and ECDSA signature.\n /// Returns false if the transaction would otherwise revert.\n /// @param orders Array of order specifications.\n /// @param takerAssetFillAmounts Array of desired amounts of takerAsset to sell in orders.\n /// @param signatures Proofs that orders have been created by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n function batchFillOrdersNoThrow(\n LibOrder.Order[] memory orders,\n uint256[] memory takerAssetFillAmounts,\n bytes[] memory signatures\n )\n public\n returns (LibFillResults.FillResults memory totalFillResults);\n\n /// @dev Synchronously executes multiple calls of fillOrder until total amount of takerAsset is sold by taker.\n /// @param orders Array of order specifications.\n /// @param takerAssetFillAmount Desired amount of takerAsset to sell.\n /// @param signatures Proofs that orders have been created by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n function marketSellOrders(\n LibOrder.Order[] memory orders,\n uint256 takerAssetFillAmount,\n bytes[] memory signatures\n )\n public\n returns (LibFillResults.FillResults memory totalFillResults);\n\n /// @dev Synchronously executes multiple calls of fillOrder until total amount of takerAsset is sold by taker.\n /// Returns false if the transaction would otherwise revert.\n /// @param orders Array of order specifications.\n /// @param takerAssetFillAmount Desired amount of takerAsset to sell.\n /// @param signatures Proofs that orders have been signed by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n function marketSellOrdersNoThrow(\n LibOrder.Order[] memory orders,\n uint256 takerAssetFillAmount,\n bytes[] memory signatures\n )\n public\n returns (LibFillResults.FillResults memory totalFillResults);\n\n /// @dev Synchronously executes multiple calls of fillOrder until total amount of makerAsset is bought by taker.\n /// @param orders Array of order specifications.\n /// @param makerAssetFillAmount Desired amount of makerAsset to buy.\n /// @param signatures Proofs that orders have been signed by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n function marketBuyOrders(\n LibOrder.Order[] memory orders,\n uint256 makerAssetFillAmount,\n bytes[] memory signatures\n )\n public\n returns (LibFillResults.FillResults memory totalFillResults);\n\n /// @dev Synchronously executes multiple fill orders in a single transaction until total amount is bought by taker.\n /// Returns false if the transaction would otherwise revert.\n /// @param orders Array of order specifications.\n /// @param makerAssetFillAmount Desired amount of makerAsset to buy.\n /// @param signatures Proofs that orders have been signed by makers.\n /// @return Amounts filled and fees paid by makers and taker.\n function marketBuyOrdersNoThrow(\n LibOrder.Order[] memory orders,\n uint256 makerAssetFillAmount,\n bytes[] memory signatures\n )\n public\n returns (LibFillResults.FillResults memory totalFillResults);\n\n /// @dev Synchronously cancels multiple orders in a single transaction.\n /// @param orders Array of order specifications.\n function batchCancelOrders(LibOrder.Order[] memory orders)\n public;\n\n /// @dev Fetches information for all passed in orders\n /// @param orders Array of order specifications.\n /// @return Array of OrderInfo instances that correspond to each order.\n function getOrdersInfo(LibOrder.Order[] memory orders)\n public\n view\n returns (LibOrder.OrderInfo[] memory);\n}\n",
+ "2.0.0/protocol/Exchange/libs/LibEIP712.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.24;\n\n\ncontract LibEIP712 {\n // EIP191 header for EIP712 prefix\n string constant internal EIP191_HEADER = \"\\x19\\x01\";\n\n // EIP712 Domain Name value\n string constant internal EIP712_DOMAIN_NAME = \"0x Protocol\";\n\n // EIP712 Domain Version value\n string constant internal EIP712_DOMAIN_VERSION = \"2\";\n\n // Hash of the EIP712 Domain Separator Schema\n bytes32 public constant EIP712_DOMAIN_SEPARATOR_SCHEMA_HASH = keccak256(abi.encodePacked(\n \"EIP712Domain(\",\n \"string name,\",\n \"string version,\",\n \"address verifyingContract\",\n \")\"\n ));\n\n // Hash of the EIP712 Domain Separator data\n // solhint-disable-next-line var-name-mixedcase\n bytes32 public EIP712_DOMAIN_HASH;\n\n constructor ()\n public\n {\n EIP712_DOMAIN_HASH = keccak256(abi.encode(\n EIP712_DOMAIN_SEPARATOR_SCHEMA_HASH,\n keccak256(bytes(EIP712_DOMAIN_NAME)),\n keccak256(bytes(EIP712_DOMAIN_VERSION)),\n address(this)\n ));\n }\n\n /// @dev Calculates EIP712 encoding for a hash struct in this EIP712 Domain.\n /// @param hashStruct The EIP712 hash struct.\n /// @return EIP712 hash applied to this EIP712 Domain.\n function hashEIP712Message(bytes32 hashStruct)\n internal\n view\n returns (bytes32)\n {\n return keccak256(abi.encodePacked(EIP191_HEADER, EIP712_DOMAIN_HASH, hashStruct));\n }\n}\n",
+ "2.0.0/protocol/Exchange/libs/LibFillResults.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.24;\n\nimport \"../../../utils/SafeMath/SafeMath.sol\";\n\n\ncontract LibFillResults is\n SafeMath\n{\n\n struct FillResults {\n uint256 makerAssetFilledAmount; // Total amount of makerAsset(s) filled.\n uint256 takerAssetFilledAmount; // Total amount of takerAsset(s) filled.\n uint256 makerFeePaid; // Total amount of ZRX paid by maker(s) to feeRecipient(s).\n uint256 takerFeePaid; // Total amount of ZRX paid by taker to feeRecipients(s).\n }\n\n struct MatchedFillResults {\n FillResults left; // Amounts filled and fees paid of left order.\n FillResults right; // Amounts filled and fees paid of right order.\n uint256 leftMakerAssetSpreadAmount; // Spread between price of left and right order, denominated in the left order's makerAsset, paid to taker.\n }\n\n /// @dev Adds properties of both FillResults instances.\n /// Modifies the first FillResults instance specified.\n /// @param totalFillResults Fill results instance that will be added onto.\n /// @param singleFillResults Fill results instance that will be added to totalFillResults.\n function addFillResults(FillResults memory totalFillResults, FillResults memory singleFillResults)\n internal\n pure\n {\n totalFillResults.makerAssetFilledAmount = safeAdd(totalFillResults.makerAssetFilledAmount, singleFillResults.makerAssetFilledAmount);\n totalFillResults.takerAssetFilledAmount = safeAdd(totalFillResults.takerAssetFilledAmount, singleFillResults.takerAssetFilledAmount);\n totalFillResults.makerFeePaid = safeAdd(totalFillResults.makerFeePaid, singleFillResults.makerFeePaid);\n totalFillResults.takerFeePaid = safeAdd(totalFillResults.takerFeePaid, singleFillResults.takerFeePaid);\n }\n}\n",
+ "2.0.0/protocol/Exchange/libs/LibOrder.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.24;\n\nimport \"./LibEIP712.sol\";\n\n\ncontract LibOrder is\n LibEIP712\n{\n\n // Hash for the EIP712 Order Schema\n bytes32 constant internal EIP712_ORDER_SCHEMA_HASH = keccak256(abi.encodePacked(\n \"Order(\",\n \"address makerAddress,\",\n \"address takerAddress,\",\n \"address feeRecipientAddress,\",\n \"address senderAddress,\",\n \"uint256 makerAssetAmount,\",\n \"uint256 takerAssetAmount,\",\n \"uint256 makerFee,\",\n \"uint256 takerFee,\",\n \"uint256 expirationTimeSeconds,\",\n \"uint256 salt,\",\n \"bytes makerAssetData,\",\n \"bytes takerAssetData\",\n \")\"\n ));\n\n // A valid order remains fillable until it is expired, fully filled, or cancelled.\n // An order's state is unaffected by external factors, like account balances.\n enum OrderStatus {\n INVALID, // Default value\n INVALID_MAKER_ASSET_AMOUNT, // Order does not have a valid maker asset amount\n INVALID_TAKER_ASSET_AMOUNT, // Order does not have a valid taker asset amount\n FILLABLE, // Order is fillable\n EXPIRED, // Order has already expired\n FULLY_FILLED, // Order is fully filled\n CANCELLED // Order has been cancelled\n }\n\n // solhint-disable max-line-length\n struct Order {\n address makerAddress; // Address that created the order. \n address takerAddress; // Address that is allowed to fill the order. If set to 0, any address is allowed to fill the order. \n address feeRecipientAddress; // Address that will recieve fees when order is filled. \n address senderAddress; // Address that is allowed to call Exchange contract methods that affect this order. If set to 0, any address is allowed to call these methods.\n uint256 makerAssetAmount; // Amount of makerAsset being offered by maker. Must be greater than 0. \n uint256 takerAssetAmount; // Amount of takerAsset being bid on by maker. Must be greater than 0. \n uint256 makerFee; // Amount of ZRX paid to feeRecipient by maker when order is filled. If set to 0, no transfer of ZRX from maker to feeRecipient will be attempted.\n uint256 takerFee; // Amount of ZRX paid to feeRecipient by taker when order is filled. If set to 0, no transfer of ZRX from taker to feeRecipient will be attempted.\n uint256 expirationTimeSeconds; // Timestamp in seconds at which order expires. \n uint256 salt; // Arbitrary number to facilitate uniqueness of the order's hash. \n bytes makerAssetData; // Encoded data that can be decoded by a specified proxy contract when transferring makerAsset. The last byte references the id of this proxy.\n bytes takerAssetData; // Encoded data that can be decoded by a specified proxy contract when transferring takerAsset. The last byte references the id of this proxy.\n }\n // solhint-enable max-line-length\n\n struct OrderInfo {\n uint8 orderStatus; // Status that describes order's validity and fillability.\n bytes32 orderHash; // EIP712 hash of the order (see LibOrder.getOrderHash).\n uint256 orderTakerAssetFilledAmount; // Amount of order that has already been filled.\n }\n\n /// @dev Calculates Keccak-256 hash of the order.\n /// @param order The order structure.\n /// @return Keccak-256 EIP712 hash of the order.\n function getOrderHash(Order memory order)\n internal\n view\n returns (bytes32 orderHash)\n {\n orderHash = hashEIP712Message(hashOrder(order));\n return orderHash;\n }\n\n /// @dev Calculates EIP712 hash of the order.\n /// @param order The order structure.\n /// @return EIP712 hash of the order.\n function hashOrder(Order memory order)\n internal\n pure\n returns (bytes32 result)\n {\n bytes32 schemaHash = EIP712_ORDER_SCHEMA_HASH;\n bytes32 makerAssetDataHash = keccak256(order.makerAssetData);\n bytes32 takerAssetDataHash = keccak256(order.takerAssetData);\n\n // Assembly for more efficiently computing:\n // keccak256(abi.encode(\n // order.makerAddress,\n // order.takerAddress,\n // order.feeRecipientAddress,\n // order.senderAddress,\n // order.makerAssetAmount,\n // order.takerAssetAmount,\n // order.makerFee,\n // order.takerFee,\n // order.expirationTimeSeconds,\n // order.salt,\n // keccak256(order.makerAssetData),\n // keccak256(order.takerAssetData)\n // ));\n\n assembly {\n // Backup\n // solhint-disable-next-line space-after-comma\n let temp1 := mload(sub(order, 32))\n let temp2 := mload(add(order, 320))\n let temp3 := mload(add(order, 352))\n \n // Hash in place\n // solhint-disable-next-line space-after-comma\n mstore(sub(order, 32), schemaHash)\n mstore(add(order, 320), makerAssetDataHash)\n mstore(add(order, 352), takerAssetDataHash)\n result := keccak256(sub(order, 32), 416)\n \n // Restore\n // solhint-disable-next-line space-after-comma\n mstore(sub(order, 32), temp1)\n mstore(add(order, 320), temp2)\n mstore(add(order, 352), temp3)\n }\n return result;\n }\n}\n",
+ "2.0.0/test/Whitelist/Whitelist.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.24;\npragma experimental ABIEncoderV2;\n\nimport \"../../protocol/Exchange/interfaces/IExchange.sol\";\nimport \"../../protocol/Exchange/libs/LibOrder.sol\";\nimport \"../../utils/Ownable/Ownable.sol\";\n\n\ncontract Whitelist is\n Ownable\n{\n\n // Mapping of address => whitelist status.\n mapping (address => bool) public isWhitelisted;\n\n // Exchange contract.\n // solhint-disable var-name-mixedcase\n IExchange internal EXCHANGE;\n bytes internal TX_ORIGIN_SIGNATURE;\n // solhint-enable var-name-mixedcase\n\n byte constant internal VALIDATOR_SIGNATURE_BYTE = \"\\x06\";\n\n constructor (address _exchange)\n public\n {\n EXCHANGE = IExchange(_exchange);\n TX_ORIGIN_SIGNATURE = abi.encodePacked(address(this), VALIDATOR_SIGNATURE_BYTE);\n }\n\n /// @dev Adds or removes an address from the whitelist.\n /// @param target Address to add or remove from whitelist.\n /// @param isApproved Whitelist status to assign to address.\n function updateWhitelistStatus(\n address target,\n bool isApproved\n )\n external\n onlyOwner\n {\n isWhitelisted[target] = isApproved;\n }\n\n /// @dev Verifies signer is same as signer of current Ethereum transaction.\n /// NOTE: This function can currently be used to validate signatures coming from outside of this contract.\n /// Extra safety checks can be added for a production contract.\n /// @param signerAddress Address that should have signed the given hash.\n /// @param signature Proof of signing.\n /// @return Validity of order signature.\n // solhint-disable no-unused-vars\n function isValidSignature(\n bytes32 hash,\n address signerAddress,\n bytes signature\n )\n external\n view\n returns (bool isValid)\n {\n // solhint-disable-next-line avoid-tx-origin\n return signerAddress == tx.origin;\n }\n // solhint-enable no-unused-vars\n\n /// @dev Fills an order using `msg.sender` as the taker.\n /// The transaction will revert if both the maker and taker are not whitelisted.\n /// Orders should specify this contract as the `senderAddress` in order to gaurantee\n /// that both maker and taker have been whitelisted.\n /// @param order Order struct containing order specifications.\n /// @param takerAssetFillAmount Desired amount of takerAsset to sell.\n /// @param salt Arbitrary value to gaurantee uniqueness of 0x transaction hash.\n /// @param orderSignature Proof that order has been created by maker.\n function fillOrderIfWhitelisted(\n LibOrder.Order memory order,\n uint256 takerAssetFillAmount,\n uint256 salt,\n bytes memory orderSignature\n )\n public\n {\n address takerAddress = msg.sender;\n\n // This contract must be the entry point for the transaction.\n require(\n // solhint-disable-next-line avoid-tx-origin\n takerAddress == tx.origin,\n \"INVALID_SENDER\"\n );\n\n // Check if maker is on the whitelist.\n require(\n isWhitelisted[order.makerAddress],\n \"MAKER_NOT_WHITELISTED\"\n );\n\n // Check if taker is on the whitelist.\n require(\n isWhitelisted[takerAddress],\n \"TAKER_NOT_WHITELISTED\"\n );\n\n // Encode arguments into byte array.\n bytes memory data = abi.encodeWithSelector(\n EXCHANGE.fillOrder.selector,\n order,\n takerAssetFillAmount,\n orderSignature\n );\n\n // Call `fillOrder` via `executeTransaction`.\n EXCHANGE.executeTransaction(\n salt,\n takerAddress,\n data,\n TX_ORIGIN_SIGNATURE\n );\n }\n}\n",
+ "2.0.0/utils/Ownable/IOwnable.sol": "pragma solidity 0.4.24;\n\n/*\n * Ownable\n *\n * Base contract with an owner.\n * Provides onlyOwner modifier, which prevents function from running if it is called by anyone other than the owner.\n */\n\ncontract IOwnable {\n function transferOwnership(address newOwner)\n public;\n}\n",
+ "2.0.0/utils/Ownable/Ownable.sol": "pragma solidity 0.4.24;\n\n/*\n * Ownable\n *\n * Base contract with an owner.\n * Provides onlyOwner modifier, which prevents function from running if it is called by anyone other than the owner.\n */\n\nimport \"./IOwnable.sol\";\n\n\ncontract Ownable is IOwnable {\n address public owner;\n\n constructor ()\n public\n {\n owner = msg.sender;\n }\n\n modifier onlyOwner() {\n require(\n msg.sender == owner,\n \"ONLY_CONTRACT_OWNER\"\n );\n _;\n }\n\n function transferOwnership(address newOwner)\n public\n onlyOwner\n {\n if (newOwner != address(0)) {\n owner = newOwner;\n }\n }\n}\n",
+ "2.0.0/utils/SafeMath/SafeMath.sol": "pragma solidity 0.4.24;\n\n\ncontract SafeMath {\n function safeMul(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n if (a == 0) {\n return 0;\n }\n uint256 c = a * b;\n require(\n c / a == b,\n \"UINT256_OVERFLOW\"\n );\n return c;\n }\n\n function safeDiv(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n uint256 c = a / b;\n return c;\n }\n\n function safeSub(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n require(\n b <= a,\n \"UINT256_OVERFLOW\"\n );\n return a - b;\n }\n\n function safeAdd(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n uint256 c = a + b;\n require(\n c >= a,\n \"UINT256_OVERFLOW\"\n );\n return c;\n }\n\n function max64(uint64 a, uint64 b)\n internal\n pure\n returns (uint256)\n {\n return a >= b ? a : b;\n }\n\n function min64(uint64 a, uint64 b)\n internal\n pure\n returns (uint256)\n {\n return a < b ? a : b;\n }\n\n function max256(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n return a >= b ? a : b;\n }\n\n function min256(uint256 a, uint256 b)\n internal\n pure\n returns (uint256)\n {\n return a < b ? a : b;\n }\n}\n"
},
- "sourceTreeHashHex": "0x7abac9b27a7f2796091e39c11c14ed2a5483e5485db88ddc3da2f97700aa1408",
+ "sourceTreeHashHex": "0xb2984ae540f9604694e40d30bab3fd32c71a59c86ec359fde748f4c68ce2b4ad",
"compiler": {
"name": "solc",
"version": "soljson-v0.4.24+commit.e67f0147.js",
diff --git a/packages/migrations/artifacts/2.0.0/ZRXToken.json b/packages/migrations/artifacts/2.0.0/ZRXToken.json
index e942ae385..0ce91c1c1 100644
--- a/packages/migrations/artifacts/2.0.0/ZRXToken.json
+++ b/packages/migrations/artifacts/2.0.0/ZRXToken.json
@@ -14,7 +14,6 @@
}
],
"payable": false,
- "stateMutability": "view",
"type": "function"
},
{
@@ -37,7 +36,6 @@
}
],
"payable": false,
- "stateMutability": "nonpayable",
"type": "function"
},
{
@@ -51,7 +49,6 @@
}
],
"payable": false,
- "stateMutability": "view",
"type": "function"
},
{
@@ -78,7 +75,6 @@
}
],
"payable": false,
- "stateMutability": "nonpayable",
"type": "function"
},
{
@@ -92,7 +88,6 @@
}
],
"payable": false,
- "stateMutability": "view",
"type": "function"
},
{
@@ -111,7 +106,6 @@
}
],
"payable": false,
- "stateMutability": "view",
"type": "function"
},
{
@@ -125,7 +119,6 @@
}
],
"payable": false,
- "stateMutability": "view",
"type": "function"
},
{
@@ -148,7 +141,6 @@
}
],
"payable": false,
- "stateMutability": "nonpayable",
"type": "function"
},
{
@@ -171,13 +163,11 @@
}
],
"payable": false,
- "stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"payable": false,
- "stateMutability": "nonpayable",
"type": "constructor"
},
{
@@ -225,45 +215,9794 @@
"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": "0x60806040526b033b2e3c9fd0803ce800000060035534801561002057600080fd5b506003543360009081526020819052604090205561067b806100436000396000f3006080604052600436106100985763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde03811461009d578063095ea7b31461012757806318160ddd1461016c57806323b872dd14610193578063313ce567146101ca57806370a08231146101f557806395d89b4114610223578063a9059cbb14610238578063dd62ed3e14610269575b600080fd5b3480156100a957600080fd5b506100b261029d565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100ec5781810151838201526020016100d4565b50505050905090810190601f1680156101195780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561013357600080fd5b5061015873ffffffffffffffffffffffffffffffffffffffff600435166024356102d4565b604080519115158252519081900360200190f35b34801561017857600080fd5b50610181610348565b60408051918252519081900360200190f35b34801561019f57600080fd5b5061015873ffffffffffffffffffffffffffffffffffffffff6004358116906024351660443561034e565b3480156101d657600080fd5b506101df6104e8565b6040805160ff9092168252519081900360200190f35b34801561020157600080fd5b5061018173ffffffffffffffffffffffffffffffffffffffff600435166104ed565b34801561022f57600080fd5b506100b2610515565b34801561024457600080fd5b5061015873ffffffffffffffffffffffffffffffffffffffff6004351660243561054c565b34801561027557600080fd5b5061018173ffffffffffffffffffffffffffffffffffffffff60043581169060243516610617565b60408051808201909152601181527f30782050726f746f636f6c20546f6b656e000000000000000000000000000000602082015281565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b60035481565b73ffffffffffffffffffffffffffffffffffffffff8316600081815260016020908152604080832033845282528083205493835290829052812054909190831180159061039b5750828110155b80156103ce575073ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090205483810110155b156104db5773ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220805487019055918716815220805484900390557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81101561046d5773ffffffffffffffffffffffffffffffffffffffff851660009081526001602090815260408083203384529091529020805484900390555b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3600191506104e0565b600091505b509392505050565b601281565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b60408051808201909152600381527f5a52580000000000000000000000000000000000000000000000000000000000602082015281565b336000908152602081905260408120548211801590610592575073ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205482810110155b1561060f57336000818152602081815260408083208054879003905573ffffffffffffffffffffffffffffffffffffffff871680845292819020805487019055805186815290519293927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a3506001610342565b506000610342565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152600160209081526040808320939094168252919091522054905600a165627a7a72305820d9d363d7eef4f71b2db22174233e9d08dc044f8bfd3ec76c93b896b38fefdf0b0029",
- "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x3 SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x20 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3 SLOAD CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH2 0x67B DUP1 PUSH2 0x43 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x98 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x6FDDE03 DUP2 EQ PUSH2 0x9D JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x127 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x16C JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x193 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1CA JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x1F5 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x223 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x238 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x269 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB2 PUSH2 0x29D 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 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xEC JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xD4 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x119 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 DUP1 ISZERO PUSH2 0x133 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x158 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD PUSH2 0x2D4 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x178 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x181 PUSH2 0x348 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x19F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x158 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH1 0x44 CALLDATALOAD PUSH2 0x34E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1DF PUSH2 0x4E8 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 DUP1 ISZERO PUSH2 0x201 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x181 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x4ED JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x22F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB2 PUSH2 0x515 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x244 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x158 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD PUSH2 0x54C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x275 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x181 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH2 0x617 JUMP 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 CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP7 SWAP1 SSTORE DUP2 MLOAD DUP7 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 SWAP1 SWAP4 SWAP1 SWAP3 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SLOAD SWAP4 DUP4 MSTORE SWAP1 DUP3 SWAP1 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 SWAP1 DUP4 GT DUP1 ISZERO SWAP1 PUSH2 0x39B JUMPI POP DUP3 DUP2 LT ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x3CE JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 DUP2 ADD LT ISZERO JUMPDEST ISZERO PUSH2 0x4DB JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD DUP8 ADD SWAP1 SSTORE SWAP2 DUP8 AND DUP2 MSTORE KECCAK256 DUP1 SLOAD DUP5 SWAP1 SUB SWAP1 SSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 LT ISZERO PUSH2 0x46D JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 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 0x4E0 JUMP JUMPDEST PUSH1 0x0 SWAP2 POP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x12 DUP2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 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 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP3 GT DUP1 ISZERO SWAP1 PUSH2 0x592 JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 DUP2 ADD LT ISZERO JUMPDEST ISZERO PUSH2 0x60F JUMPI CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD DUP8 SWAP1 SUB SWAP1 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP1 DUP5 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP1 SLOAD DUP8 ADD SWAP1 SSTORE DUP1 MLOAD DUP7 DUP2 MSTORE SWAP1 MLOAD SWAP3 SWAP4 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP PUSH1 0x1 PUSH2 0x342 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x342 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 0xd9 0xd3 PUSH4 0xD7EEF4F7 SHL 0x2d 0xb2 0x21 PUSH21 0x233E9D08DC044F8BFD3EC76C93B896B38FEFDF0B00 0x29 ",
- "sourceMap": "750:342:3:-;;;869:6;843:32;;1019:71;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1072:11:3;;1058:10;1049:8;:20;;;;;;;;;;:34;750:342;;;;;;"
+ "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": "0x6080604052600436106100985763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde03811461009d578063095ea7b31461012757806318160ddd1461016c57806323b872dd14610193578063313ce567146101ca57806370a08231146101f557806395d89b4114610223578063a9059cbb14610238578063dd62ed3e14610269575b600080fd5b3480156100a957600080fd5b506100b261029d565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100ec5781810151838201526020016100d4565b50505050905090810190601f1680156101195780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561013357600080fd5b5061015873ffffffffffffffffffffffffffffffffffffffff600435166024356102d4565b604080519115158252519081900360200190f35b34801561017857600080fd5b50610181610348565b60408051918252519081900360200190f35b34801561019f57600080fd5b5061015873ffffffffffffffffffffffffffffffffffffffff6004358116906024351660443561034e565b3480156101d657600080fd5b506101df6104e8565b6040805160ff9092168252519081900360200190f35b34801561020157600080fd5b5061018173ffffffffffffffffffffffffffffffffffffffff600435166104ed565b34801561022f57600080fd5b506100b2610515565b34801561024457600080fd5b5061015873ffffffffffffffffffffffffffffffffffffffff6004351660243561054c565b34801561027557600080fd5b5061018173ffffffffffffffffffffffffffffffffffffffff60043581169060243516610617565b60408051808201909152601181527f30782050726f746f636f6c20546f6b656e000000000000000000000000000000602082015281565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b60035481565b73ffffffffffffffffffffffffffffffffffffffff8316600081815260016020908152604080832033845282528083205493835290829052812054909190831180159061039b5750828110155b80156103ce575073ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090205483810110155b156104db5773ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220805487019055918716815220805484900390557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81101561046d5773ffffffffffffffffffffffffffffffffffffffff851660009081526001602090815260408083203384529091529020805484900390555b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3600191506104e0565b600091505b509392505050565b601281565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b60408051808201909152600381527f5a52580000000000000000000000000000000000000000000000000000000000602082015281565b336000908152602081905260408120548211801590610592575073ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205482810110155b1561060f57336000818152602081815260408083208054879003905573ffffffffffffffffffffffffffffffffffffffff871680845292819020805487019055805186815290519293927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a3506001610342565b506000610342565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152600160209081526040808320939094168252919091522054905600a165627a7a72305820d9d363d7eef4f71b2db22174233e9d08dc044f8bfd3ec76c93b896b38fefdf0b0029",
- "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x98 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x6FDDE03 DUP2 EQ PUSH2 0x9D JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x127 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x16C JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x193 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1CA JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x1F5 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x223 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x238 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x269 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB2 PUSH2 0x29D 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 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xEC JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xD4 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x119 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 DUP1 ISZERO PUSH2 0x133 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x158 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD PUSH2 0x2D4 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x178 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x181 PUSH2 0x348 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x19F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x158 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH1 0x44 CALLDATALOAD PUSH2 0x34E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1DF PUSH2 0x4E8 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 DUP1 ISZERO PUSH2 0x201 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x181 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH2 0x4ED JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x22F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB2 PUSH2 0x515 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x244 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x158 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD AND PUSH1 0x24 CALLDATALOAD PUSH2 0x54C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x275 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x181 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 AND SWAP1 PUSH1 0x24 CALLDATALOAD AND PUSH2 0x617 JUMP 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 CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP7 SWAP1 SSTORE DUP2 MLOAD DUP7 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 SWAP1 SWAP4 SWAP1 SWAP3 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SLOAD SWAP4 DUP4 MSTORE SWAP1 DUP3 SWAP1 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 SWAP1 DUP4 GT DUP1 ISZERO SWAP1 PUSH2 0x39B JUMPI POP DUP3 DUP2 LT ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x3CE JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 DUP2 ADD LT ISZERO JUMPDEST ISZERO PUSH2 0x4DB JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD DUP8 ADD SWAP1 SSTORE SWAP2 DUP8 AND DUP2 MSTORE KECCAK256 DUP1 SLOAD DUP5 SWAP1 SUB SWAP1 SSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 LT ISZERO PUSH2 0x46D JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 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 0x4E0 JUMP JUMPDEST PUSH1 0x0 SWAP2 POP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x12 DUP2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 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 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP3 GT DUP1 ISZERO SWAP1 PUSH2 0x592 JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 DUP2 ADD LT ISZERO JUMPDEST ISZERO PUSH2 0x60F JUMPI CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD DUP8 SWAP1 SUB SWAP1 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP1 DUP5 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP1 SLOAD DUP8 ADD SWAP1 SSTORE DUP1 MLOAD DUP7 DUP2 MSTORE SWAP1 MLOAD SWAP3 SWAP4 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP PUSH1 0x1 PUSH2 0x342 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x342 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 0xd9 0xd3 PUSH4 0xD7EEF4F7 SHL 0x2d 0xb2 0x21 PUSH21 0x233E9D08DC044F8BFD3EC76C93B896B38FEFDF0B00 0x29 ",
- "sourceMap": "750:342:3:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;920:49;;8:9:-1;5:2;;;30:1;27;20:12;5:2;920:49:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;920:49:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1087:187:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1087:187:0;;;;;;;;;;;;;;;;;;;;;;;;;;;843:32:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;843:32:3;;;;;;;;;;;;;;;;;;;;1066:609:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1066:609:2;;;;;;;;;;;;;;802:35:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;802:35:3;;;;;;;;;;;;;;;;;;;;;;;982:99:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;982:99:0;;;;;;;975:37:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;975:37:3;;;;125:410:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;125:410:0;;;;;;;;;1280:126;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1280:126:0;;;;;;;;;;;;920:49:3;;;;;;;;;;;;;;;;;;;:::o;1087:187:0:-;1168:10;1144:4;1160:19;;;:7;:19;;;;;;;;;:29;;;;;;;;;;;:38;;;1208;;;;;;;1144:4;;1160:29;;1168:10;;1208:38;;;;;;;;-1:-1:-1;1263:4:0;1087:187;;;;;:::o;843:32:3:-;;;;:::o;1066:609:2:-;1198:14;;;1161:4;1198:14;;;:7;:14;;;;;;;;1213:10;1198:26;;;;;;;;1238:15;;;;;;;;;;1161:4;;1198:26;1238:25;-1:-1:-1;1238:25:2;;;: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;802:35:3:-;835:2;802:35;:::o;982:99:0:-;1058:16;;1035:4;1058:16;;;;;;;;;;;;982:99::o;975:37:3:-;;;;;;;;;;;;;;;;;;;:::o;125:410:0:-;276:10;178:4;267:20;;;;;;;;;;;:30;-1:-1:-1;267:30:0;;;:73;;-1:-1:-1;327:13:0;;;:8;:13;;;;;;;;;;;301:22;;;:39;;267:73;263:266;;;365:10;356:8;:20;;;;;;;;;;;:30;;;;;;;:20;400:13;;;;;;;;;:23;;;;;;437:33;;;;;;;400:13;;365:10;437:33;;;;;;;;;;;-1:-1:-1;491:4:0;484:11;;263:266;-1:-1:-1;521:5:0;514:12;;1280:126;1374:15;;;;1351:4;1374:15;;;:7;:15;;;;;;;;:25;;;;;;;;;;;;;1280:126::o"
+ "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
+ "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
+ "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
+ "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
+ "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\nimport { UnlimitedAllowanceToken_v1 as UnlimitedAllowanceToken } from \"../../../1.0.0/UnlimitedAllowanceToken/UnlimitedAllowanceToken_v1.sol\";\n\ncontract ZRXToken is UnlimitedAllowanceToken {\n\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\n function ZRXToken() {\n balances[msg.sender] = totalSupply;\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": "0xde47979523dda114901886ad7b4f9f43f0f3ccf10556e2b56d29370f0bc74d1d",
+ "sourceTreeHashHex": "0xbcce67d129fe53ddb9717b4f567b33108c41a4f4324aa47ac609037e41f5b95d",
"compiler": {
"name": "solc",
- "version": "soljson-v0.4.24+commit.e67f0147.js",
+ "version": "soljson-v0.4.11+commit.68ef5810.js",
"settings": {
"optimizer": {
"enabled": true,
diff --git a/packages/migrations/compiler.json b/packages/migrations/compiler.json
index eae22a73c..493a73d46 100644
--- a/packages/migrations/compiler.json
+++ b/packages/migrations/compiler.json
@@ -1,5 +1,5 @@
{
- "contractsDir": "../contracts/src/contracts",
+ "contractsDir": "../contracts/src/",
"compilerSettings": {
"optimizer": {
"enabled": true,
diff --git a/packages/migrations/package.json b/packages/migrations/package.json
index 0b7ab8ae2..866de792b 100644
--- a/packages/migrations/package.json
+++ b/packages/migrations/package.json
@@ -1,6 +1,6 @@
{
"name": "@0xproject/migrations",
- "version": "0.0.9",
+ "version": "0.0.10",
"engines": {
"node": ">=6.12"
},
@@ -37,8 +37,8 @@
},
"license": "Apache-2.0",
"devDependencies": {
- "@0xproject/abi-gen": "^0.3.3",
- "@0xproject/dev-utils": "^0.4.5",
+ "@0xproject/abi-gen": "^0.3.4",
+ "@0xproject/dev-utils": "^0.4.6",
"@0xproject/tslint-config": "^0.4.21",
"@0xproject/types": "^0.8.2",
"@types/yargs": "^10.0.0",
@@ -46,22 +46,21 @@
"make-promises-safe": "^1.1.0",
"npm-run-all": "^4.1.2",
"shx": "^0.2.2",
- "tslint": "5.8.0",
+ "tslint": "5.11.0",
"typescript": "2.7.1"
},
"dependencies": {
- "@0xproject/base-contract": "^0.3.5",
+ "@0xproject/base-contract": "^0.3.6",
"@0xproject/order-utils": "^1.0.0",
- "@0xproject/sol-compiler": "^0.5.3",
- "@0xproject/subproviders": "^0.10.5",
- "@0xproject/typescript-typings": "^0.4.2",
- "@0xproject/utils": "^0.7.2",
- "@0xproject/web3-wrapper": "^0.7.2",
+ "@0xproject/sol-compiler": "^0.5.4",
+ "@0xproject/subproviders": "^0.10.6",
+ "@0xproject/typescript-typings": "^0.4.3",
+ "@0xproject/utils": "^0.7.3",
+ "@0xproject/web3-wrapper": "^0.7.3",
"@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/2.0.0/migration.ts b/packages/migrations/src/2.0.0/migration.ts
index 75e60d3e2..f51c236de 100644
--- a/packages/migrations/src/2.0.0/migration.ts
+++ b/packages/migrations/src/2.0.0/migration.ts
@@ -1,4 +1,4 @@
-import { assetProxyUtils } from '@0xproject/order-utils';
+import { assetDataUtils } from '@0xproject/order-utils';
import { BigNumber } from '@0xproject/utils';
import { Web3Wrapper } from '@0xproject/web3-wrapper';
import { Provider, TxData } from 'ethereum-types';
@@ -13,6 +13,7 @@ import { DummyERC721TokenContract } from './contract_wrappers/dummy_erc721_token
import { ERC20ProxyContract } from './contract_wrappers/erc20_proxy';
import { ERC721ProxyContract } from './contract_wrappers/erc721_proxy';
import { ExchangeContract } from './contract_wrappers/exchange';
+import { ForwarderContract } from './contract_wrappers/forwarder';
import { WETH9Contract } from './contract_wrappers/weth9';
import { ZRXTokenContract } from './contract_wrappers/zrx_token';
@@ -52,7 +53,7 @@ export const runV2MigrationsAsync = async (provider: Provider, artifactsDir: str
artifacts.Exchange,
provider,
txDefaults,
- assetProxyUtils.encodeERC20AssetData(zrxToken.address),
+ assetDataUtils.encodeERC20AssetData(zrxToken.address),
);
artifactsWriter.saveArtifact(exchange);
@@ -127,4 +128,17 @@ export const runV2MigrationsAsync = async (provider: Provider, artifactsDir: str
erc721TokenInfo[0].name,
erc721TokenInfo[0].symbol,
);
+
+ // Forwarder
+ const forwarder = await ForwarderContract.deployFrom0xArtifactAsync(
+ artifacts.Forwarder,
+ provider,
+ txDefaults,
+ exchange.address,
+ etherToken.address,
+ zrxToken.address,
+ assetDataUtils.encodeERC20AssetData(zrxToken.address),
+ assetDataUtils.encodeERC20AssetData(etherToken.address),
+ );
+ artifactsWriter.saveArtifact(forwarder);
};
diff --git a/packages/migrations/src/utils/artifact_writer.ts b/packages/migrations/src/utils/artifact_writer.ts
index 2da5a09dd..b7522df05 100644
--- a/packages/migrations/src/utils/artifact_writer.ts
+++ b/packages/migrations/src/utils/artifact_writer.ts
@@ -4,8 +4,8 @@ import * as fs from 'fs';
import * as path from 'path';
export class ArtifactWriter {
- private _artifactsDir: string;
- private _networkId: number;
+ private readonly _artifactsDir: string;
+ private readonly _networkId: number;
constructor(artifactsDir: string, networkId: number) {
this._artifactsDir = artifactsDir;
this._networkId = networkId;
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/monorepo-scripts/package.json b/packages/monorepo-scripts/package.json
index 7ebe4fb84..1d641a7f5 100644
--- a/packages/monorepo-scripts/package.json
+++ b/packages/monorepo-scripts/package.json
@@ -33,13 +33,12 @@
"@types/node": "^8.0.53",
"@types/opn": "^5.1.0",
"@types/rimraf": "^2.0.2",
+ "@types/semver": "5.5.0",
"depcheck": "^0.6.9",
- "lerna-get-packages": "^1.0.0",
"make-promises-safe": "^1.1.0",
"npm-run-all": "^4.1.2",
"shx": "^0.2.2",
- "@types/semver": "5.5.0",
- "tslint": "5.8.0",
+ "tslint": "5.11.0",
"typescript": "2.7.1"
},
"dependencies": {
@@ -56,8 +55,8 @@
"prompt": "^1.0.0",
"publish-release": "0xproject/publish-release",
"rimraf": "^2.6.2",
- "semver-diff": "^2.1.0",
"semver": "5.5.0",
+ "semver-diff": "^2.1.0",
"semver-sort": "0.0.4"
},
"publishConfig": {
diff --git a/packages/monorepo-scripts/src/constants.ts b/packages/monorepo-scripts/src/constants.ts
index 3aaf881cb..f08313bd2 100644
--- a/packages/monorepo-scripts/src/constants.ts
+++ b/packages/monorepo-scripts/src/constants.ts
@@ -3,6 +3,6 @@ import * as path from 'path';
export const constants = {
monorepoRootPath: path.join(__dirname, '../../..'),
stagingWebsite: 'http://staging-0xproject.s3-website-us-east-1.amazonaws.com',
- lernaExecutable: path.join('node_modules', 'lerna', 'bin', 'lerna.js'),
+ lernaExecutable: path.join('node_modules', 'lerna', 'cli.js'),
githubPersonalAccessToken: process.env.GITHUB_PERSONAL_ACCESS_TOKEN_0X_JS,
};
diff --git a/packages/monorepo-scripts/src/find_unused_dependencies.ts b/packages/monorepo-scripts/src/find_unused_dependencies.ts
index 11e48ab13..4bb4b7dc5 100644
--- a/packages/monorepo-scripts/src/find_unused_dependencies.ts
+++ b/packages/monorepo-scripts/src/find_unused_dependencies.ts
@@ -1,7 +1,6 @@
#!/usr/bin/env node
import * as depcheckAsync from 'depcheck';
-import lernaGetPackages = require('lerna-get-packages');
import * as _ from 'lodash';
import { constants } from './constants';
@@ -13,15 +12,15 @@ const IGNORE_PACKAGES = ['@0xproject/sol-compiler'];
(async () => {
utils.log('*** NOTE: Not all deps listed here are actually not required. ***');
utils.log("*** `depcheck` isn't perfect so double check before actually removing any. ***\n");
- const lernaPackages = lernaGetPackages(constants.monorepoRootPath);
- for (const lernaPackage of lernaPackages) {
- if (_.includes(IGNORE_PACKAGES, lernaPackage.package.name)) {
+ const packages = utils.getPackages(constants.monorepoRootPath);
+ for (const pkg of packages) {
+ if (_.includes(IGNORE_PACKAGES, pkg.packageJson.name)) {
continue; // skip
}
- utils.log(`Checking ${lernaPackage.package.name} for unused deps. This might take a while...`);
+ utils.log(`Checking ${pkg.packageJson.name} for unused deps. This might take a while...`);
const configs = {};
- const { dependencies } = await depcheckAsync(lernaPackage.location, configs);
+ const { dependencies } = await depcheckAsync(pkg.location, configs);
if (!_.isEmpty(dependencies)) {
_.each(dependencies, dep => {
utils.log(dep);
diff --git a/packages/monorepo-scripts/src/globals.d.ts b/packages/monorepo-scripts/src/globals.d.ts
index 1693a6dbb..cb6a61b55 100644
--- a/packages/monorepo-scripts/src/globals.d.ts
+++ b/packages/monorepo-scripts/src/globals.d.ts
@@ -13,23 +13,4 @@ declare module 'semver-sort' {
const desc: (versions: string[]) => string[];
}
-declare interface LernaPackage {
- location: string;
- package: {
- private?: boolean;
- version: string;
- name: string;
- main?: string;
- scripts?: { [command: string]: string };
- config?: {
- additionalTsTypings?: string[];
- };
- };
-}
-declare function lernaGetPackages(path: string): LernaPackage[];
-// lerna-get-packages declarations
-declare module 'lerna-get-packages' {
- export = lernaGetPackages;
-}
-
declare module 'promisify-child-process';
diff --git a/packages/monorepo-scripts/src/postpublish_utils.ts b/packages/monorepo-scripts/src/postpublish_utils.ts
index b55a88539..85b32ed83 100644
--- a/packages/monorepo-scripts/src/postpublish_utils.ts
+++ b/packages/monorepo-scripts/src/postpublish_utils.ts
@@ -51,8 +51,13 @@ export const postpublishUtils = {
return configs;
},
async runAsync(packageJSON: any, tsConfigJSON: any, cwd: string): Promise<void> {
- const configs = this.generateConfig(packageJSON, tsConfigJSON, cwd);
- await this.publishReleaseNotesAsync(configs.cwd, configs.packageName, configs.version, configs.assets);
+ const configs = postpublishUtils.generateConfig(packageJSON, tsConfigJSON, cwd);
+ await postpublishUtils.publishReleaseNotesAsync(
+ configs.cwd,
+ configs.packageName,
+ configs.version,
+ configs.assets,
+ );
if (
!_.isUndefined(configs.docPublishConfigs.s3BucketPath) ||
!_.isUndefined(configs.docPublishConfigs.s3StagingBucketPath)
@@ -69,7 +74,7 @@ export const postpublishUtils = {
}
},
async publishDocsToStagingAsync(packageJSON: any, tsConfigJSON: any, cwd: string): Promise<void> {
- const configs = this.generateConfig(packageJSON, tsConfigJSON, cwd);
+ const configs = postpublishUtils.generateConfig(packageJSON, tsConfigJSON, cwd);
if (_.isUndefined(configs.docPublishConfigs.s3StagingBucketPath)) {
utils.log('config.postpublish.docPublishConfigs.s3StagingBucketPath entry in package.json not found!');
return;
@@ -84,10 +89,10 @@ export const postpublishUtils = {
);
},
async publishReleaseNotesAsync(cwd: string, packageName: string, version: string, assets: string[]): Promise<void> {
- const notes = this.getReleaseNotes(packageName, version);
- const releaseName = this.getReleaseName(packageName, version);
- const tag = this.getTag(packageName, version);
- this.adjustAssetPaths(cwd, assets);
+ const notes = postpublishUtils.getReleaseNotes(packageName, version);
+ const releaseName = postpublishUtils.getReleaseName(packageName, version);
+ const tag = postpublishUtils.getTag(packageName, version);
+ postpublishUtils.adjustAssetPaths(cwd, assets);
utils.log('POSTPUBLISH: Releasing ', releaseName, '...');
await publishReleaseAsync({
token: constants.githubPersonalAccessToken,
@@ -165,7 +170,7 @@ export const postpublishUtils = {
version: string,
S3BucketPath: string,
): Promise<void> {
- const fileIncludesAdjusted = this.adjustFileIncludePaths(fileIncludes, cwd);
+ const fileIncludesAdjusted = postpublishUtils.adjustFileIncludePaths(fileIncludes, cwd);
const projectFiles = fileIncludesAdjusted.join(' ');
const jsonFilePath = `${cwd}/${generatedDocsDirectoryName}/index.json`;
const result = await execAsync(
diff --git a/packages/monorepo-scripts/src/prepublish_checks.ts b/packages/monorepo-scripts/src/prepublish_checks.ts
index 3b4ff9082..431e848ca 100644
--- a/packages/monorepo-scripts/src/prepublish_checks.ts
+++ b/packages/monorepo-scripts/src/prepublish_checks.ts
@@ -4,34 +4,33 @@ import semver = require('semver');
import semverSort = require('semver-sort');
import { constants } from './constants';
+import { Package } from './types';
import { changelogUtils } from './utils/changelog_utils';
import { npmUtils } from './utils/npm_utils';
import { utils } from './utils/utils';
async function prepublishChecksAsync(): Promise<void> {
const shouldIncludePrivate = false;
- const updatedPublicLernaPackages = await utils.getUpdatedLernaPackagesAsync(shouldIncludePrivate);
+ const updatedPublicPackages = await utils.getUpdatedPackagesAsync(shouldIncludePrivate);
- await checkCurrentVersionMatchesLatestPublishedNPMPackageAsync(updatedPublicLernaPackages);
- await checkChangelogFormatAsync(updatedPublicLernaPackages);
- await checkGitTagsForNextVersionAndDeleteIfExistAsync(updatedPublicLernaPackages);
+ await checkCurrentVersionMatchesLatestPublishedNPMPackageAsync(updatedPublicPackages);
+ await checkChangelogFormatAsync(updatedPublicPackages);
+ await checkGitTagsForNextVersionAndDeleteIfExistAsync(updatedPublicPackages);
await checkPublishRequiredSetupAsync();
}
-async function checkGitTagsForNextVersionAndDeleteIfExistAsync(
- updatedPublicLernaPackages: LernaPackage[],
-): Promise<void> {
- const packageNames = _.map(updatedPublicLernaPackages, lernaPackage => lernaPackage.package.name);
+async function checkGitTagsForNextVersionAndDeleteIfExistAsync(updatedPublicPackages: Package[]): Promise<void> {
+ const packageNames = _.map(updatedPublicPackages, pkg => pkg.packageJson.name);
const localGitTags = await utils.getLocalGitTagsAsync();
const localTagVersionsByPackageName = await utils.getGitTagsByPackageNameAsync(packageNames, localGitTags);
const remoteGitTags = await utils.getRemoteGitTagsAsync();
const remoteTagVersionsByPackageName = await utils.getGitTagsByPackageNameAsync(packageNames, remoteGitTags);
- for (const lernaPackage of updatedPublicLernaPackages) {
- const currentVersion = lernaPackage.package.version;
- const packageName = lernaPackage.package.name;
- const packageLocation = lernaPackage.location;
+ for (const pkg of updatedPublicPackages) {
+ const currentVersion = pkg.packageJson.version;
+ const packageName = pkg.packageJson.name;
+ const packageLocation = pkg.location;
const nextVersion = await utils.getNextPackageVersionAsync(currentVersion, packageName, packageLocation);
const remoteTagVersions = remoteTagVersionsByPackageName[packageName];
@@ -49,13 +48,13 @@ async function checkGitTagsForNextVersionAndDeleteIfExistAsync(
}
async function checkCurrentVersionMatchesLatestPublishedNPMPackageAsync(
- updatedPublicLernaPackages: LernaPackage[],
+ updatedPublicPackages: Package[],
): Promise<void> {
utils.log('Check package versions against npmjs.org...');
const versionMismatches = [];
- for (const lernaPackage of updatedPublicLernaPackages) {
- const packageName = lernaPackage.package.name;
- const packageVersion = lernaPackage.package.version;
+ for (const pkg of updatedPublicPackages) {
+ const packageName = pkg.packageJson.name;
+ const packageVersion = pkg.packageJson.version;
const packageRegistryJsonIfExists = await npmUtils.getPackageRegistryJsonIfExistsAsync(packageName);
if (_.isUndefined(packageRegistryJsonIfExists)) {
continue; // noop for packages not yet published to NPM
@@ -84,14 +83,14 @@ async function checkCurrentVersionMatchesLatestPublishedNPMPackageAsync(
}
}
-async function checkChangelogFormatAsync(updatedPublicLernaPackages: LernaPackage[]): Promise<void> {
+async function checkChangelogFormatAsync(updatedPublicPackages: Package[]): Promise<void> {
utils.log('Check CHANGELOGs for inconsistencies...');
const changeLogInconsistencies = [];
- for (const lernaPackage of updatedPublicLernaPackages) {
- const packageName = lernaPackage.package.name;
- const changelog = changelogUtils.getChangelogOrCreateIfMissing(packageName, lernaPackage.location);
+ for (const pkg of updatedPublicPackages) {
+ const packageName = pkg.packageJson.name;
+ const changelog = changelogUtils.getChangelogOrCreateIfMissing(packageName, pkg.location);
- const currentVersion = lernaPackage.package.version;
+ const currentVersion = pkg.packageJson.version;
if (!_.isEmpty(changelog)) {
const lastEntry = changelog[0];
const doesLastEntryHaveTimestamp = !_.isUndefined(lastEntry.timestamp);
@@ -105,7 +104,7 @@ async function checkChangelogFormatAsync(updatedPublicLernaPackages: LernaPackag
// Remove incorrectly added timestamp
delete changelog[0].timestamp;
// Save updated CHANGELOG.json
- await changelogUtils.writeChangelogJsonFileAsync(lernaPackage.location, changelog);
+ await changelogUtils.writeChangelogJsonFileAsync(pkg.location, changelog);
utils.log(`${packageName}: Removed timestamp from latest CHANGELOG.json entry.`);
}
}
diff --git a/packages/monorepo-scripts/src/publish.ts b/packages/monorepo-scripts/src/publish.ts
index 72c6c0a71..c44e1f85e 100644
--- a/packages/monorepo-scripts/src/publish.ts
+++ b/packages/monorepo-scripts/src/publish.ts
@@ -11,7 +11,7 @@ import semverDiff = require('semver-diff');
import semverSort = require('semver-sort');
import { constants } from './constants';
-import { PackageToVersionChange, SemVerIndex, VersionChangelog } from './types';
+import { Package, PackageToVersionChange, SemVerIndex, VersionChangelog } from './types';
import { changelogUtils } from './utils/changelog_utils';
import { utils } from './utils/utils';
@@ -34,19 +34,20 @@ const packageNameToWebsitePath: { [name: string]: string } = {
'sol-cov': 'sol-cov',
subproviders: 'subproviders',
'order-utils': 'order-utils',
+ 'ethereum-types': 'ethereum-types',
};
(async () => {
// Fetch public, updated Lerna packages
const shouldIncludePrivate = false;
- const updatedPublicLernaPackages = await utils.getUpdatedLernaPackagesAsync(shouldIncludePrivate);
+ const updatedPublicPackages = await utils.getUpdatedPackagesAsync(shouldIncludePrivate);
- await confirmDocPagesRenderAsync(updatedPublicLernaPackages);
+ await confirmDocPagesRenderAsync(updatedPublicPackages);
// Update CHANGELOGs
- const updatedPublicLernaPackageNames = _.map(updatedPublicLernaPackages, pkg => pkg.package.name);
- utils.log(`Will update CHANGELOGs and publish: \n${updatedPublicLernaPackageNames.join('\n')}\n`);
- const packageToVersionChange = await updateChangeLogsAsync(updatedPublicLernaPackages);
+ const updatedPublicPackageNames = _.map(updatedPublicPackages, pkg => pkg.packageJson.name);
+ utils.log(`Will update CHANGELOGs and publish: \n${updatedPublicPackageNames.join('\n')}\n`);
+ const packageToVersionChange = await updateChangeLogsAsync(updatedPublicPackages);
// Push changelog changes to Github
if (!IS_DRY_RUN) {
@@ -65,7 +66,7 @@ const packageNameToWebsitePath: { [name: string]: string } = {
process.exit(1);
});
-async function confirmDocPagesRenderAsync(packages: LernaPackage[]): Promise<void> {
+async function confirmDocPagesRenderAsync(packages: Package[]): Promise<void> {
// push docs to staging
utils.log("Upload all docJson's to S3 staging...");
await execAsync(`yarn stage_docs`, { cwd: constants.monorepoRootPath });
@@ -76,14 +77,14 @@ async function confirmDocPagesRenderAsync(packages: LernaPackage[]): Promise<voi
await execAsync(`yarn deploy_staging`, { cwd: pathToWebsite });
const packagesWithDocs = _.filter(packages, pkg => {
- const scriptsIfExists = pkg.package.scripts;
+ const scriptsIfExists = pkg.packageJson.scripts;
if (_.isUndefined(scriptsIfExists)) {
throw new Error('Found a public package without any scripts in package.json');
}
return !_.isUndefined(scriptsIfExists[DOC_GEN_COMMAND]);
});
_.each(packagesWithDocs, pkg => {
- const name = pkg.package.name;
+ const name = pkg.packageJson.name;
const nameWithoutPrefix = _.startsWith(name, NPM_NAMESPACE) ? name.split('@0xproject/')[1] : name;
const docSegmentIfExists = packageNameToWebsitePath[nameWithoutPrefix];
if (_.isUndefined(docSegmentIfExists)) {
@@ -114,15 +115,15 @@ async function pushChangelogsToGithubAsync(): Promise<void> {
utils.log(`Pushed CHANGELOG updates to Github`);
}
-async function updateChangeLogsAsync(updatedPublicLernaPackages: LernaPackage[]): Promise<PackageToVersionChange> {
+async function updateChangeLogsAsync(updatedPublicPackages: Package[]): Promise<PackageToVersionChange> {
const packageToVersionChange: PackageToVersionChange = {};
- for (const lernaPackage of updatedPublicLernaPackages) {
- const packageName = lernaPackage.package.name;
- let changelog = changelogUtils.getChangelogOrCreateIfMissing(packageName, lernaPackage.location);
+ for (const pkg of updatedPublicPackages) {
+ const packageName = pkg.packageJson.name;
+ let changelog = changelogUtils.getChangelogOrCreateIfMissing(packageName, pkg.location);
- const currentVersion = lernaPackage.package.version;
+ const currentVersion = pkg.packageJson.version;
const shouldAddNewEntry = changelogUtils.shouldAddNewChangelogEntry(
- lernaPackage.package.name,
+ pkg.packageJson.name,
currentVersion,
changelog,
);
@@ -157,11 +158,11 @@ async function updateChangeLogsAsync(updatedPublicLernaPackages: LernaPackage[])
}
// Save updated CHANGELOG.json
- await changelogUtils.writeChangelogJsonFileAsync(lernaPackage.location, changelog);
+ await changelogUtils.writeChangelogJsonFileAsync(pkg.location, changelog);
utils.log(`${packageName}: Updated CHANGELOG.json`);
// Generate updated CHANGELOG.md
const changelogMd = changelogUtils.generateChangelogMd(changelog);
- await changelogUtils.writeChangelogMdFileAsync(lernaPackage.location, changelogMd);
+ await changelogUtils.writeChangelogMdFileAsync(pkg.location, changelogMd);
utils.log(`${packageName}: Updated CHANGELOG.md`);
}
diff --git a/packages/monorepo-scripts/src/test_installation.ts b/packages/monorepo-scripts/src/test_installation.ts
index b67154667..668d4ef1d 100644
--- a/packages/monorepo-scripts/src/test_installation.ts
+++ b/packages/monorepo-scripts/src/test_installation.ts
@@ -1,7 +1,6 @@
#!/usr/bin/env node
import * as fs from 'fs';
-import lernaGetPackages = require('lerna-get-packages');
import * as _ from 'lodash';
import * as path from 'path';
import { exec as execAsync } from 'promisify-child-process';
@@ -11,17 +10,14 @@ import { utils } from './utils/utils';
(async () => {
const monorepoRootPath = path.join(__dirname, '../../..');
- const lernaPackages = lernaGetPackages(monorepoRootPath);
+ const packages = utils.getPackages(monorepoRootPath);
const installablePackages = _.filter(
- lernaPackages,
- lernaPackage =>
- !lernaPackage.package.private &&
- !_.isUndefined(lernaPackage.package.main) &&
- lernaPackage.package.main.endsWith('.js'),
+ packages,
+ pkg => !pkg.packageJson.private && !_.isUndefined(pkg.packageJson.main) && pkg.packageJson.main.endsWith('.js'),
);
- for (const installableLernaPackage of installablePackages) {
- const packagePath = installableLernaPackage.location;
- const packageName = installableLernaPackage.package.name;
+ for (const installablePackage of installablePackages) {
+ const packagePath = installablePackage.location;
+ const packageName = installablePackage.packageJson.name;
utils.log(`Testing ${packageName}`);
let result = await execAsync('npm pack', { cwd: packagePath });
const packedPackageFileName = result.stdout.trim();
diff --git a/packages/monorepo-scripts/src/types.ts b/packages/monorepo-scripts/src/types.ts
index 61bd75732..9f991c86c 100644
--- a/packages/monorepo-scripts/src/types.ts
+++ b/packages/monorepo-scripts/src/types.ts
@@ -40,3 +40,17 @@ export interface PackageRegistryJson {
export interface GitTagsByPackageName {
[packageName: string]: string[];
}
+
+export interface Package {
+ location: string;
+ packageJson: {
+ private?: boolean;
+ version: string;
+ name: string;
+ main?: string;
+ scripts?: { [command: string]: string };
+ config?: {
+ additionalTsTypings?: string[];
+ };
+ };
+}
diff --git a/packages/monorepo-scripts/src/utils/changelog_utils.ts b/packages/monorepo-scripts/src/utils/changelog_utils.ts
index dbafb6f16..4781b3b7d 100644
--- a/packages/monorepo-scripts/src/utils/changelog_utils.ts
+++ b/packages/monorepo-scripts/src/utils/changelog_utils.ts
@@ -10,7 +10,7 @@ import { Change, Changelog, VersionChangelog } from '../types';
const CHANGELOG_MD_HEADER = `
<!--
-This file is auto-generated using the monorepo-scripts package. Don't edit directly.
+changelogUtils.file is auto-generated using the monorepo-scripts package. Don't edit directly.
Edit the package's CHANGELOG.json file only.
-->
@@ -74,7 +74,7 @@ export const changelogUtils = {
},
getChangelogOrCreateIfMissing(packageName: string, packageLocation: string): Changelog {
const changelogJSONPath = path.join(packageLocation, 'CHANGELOG.json');
- let changelogJsonIfExists = this.getChangelogJSONIfExists(changelogJSONPath);
+ let changelogJsonIfExists = changelogUtils.getChangelogJSONIfExists(changelogJSONPath);
if (_.isUndefined(changelogJsonIfExists)) {
// If none exists, create new, empty one.
changelogJsonIfExists = '[]';
@@ -91,12 +91,12 @@ export const changelogUtils = {
async writeChangelogJsonFileAsync(packageLocation: string, changelog: Changelog): Promise<void> {
const changelogJSONPath = path.join(packageLocation, 'CHANGELOG.json');
fs.writeFileSync(changelogJSONPath, JSON.stringify(changelog, null, '\t'));
- await this.prettifyAsync(changelogJSONPath, constants.monorepoRootPath);
+ await changelogUtils.prettifyAsync(changelogJSONPath, constants.monorepoRootPath);
},
async writeChangelogMdFileAsync(packageLocation: string, changelogMdString: string): Promise<void> {
const changelogMarkdownPath = path.join(packageLocation, 'CHANGELOG.md');
fs.writeFileSync(changelogMarkdownPath, changelogMdString);
- await this.prettifyAsync(changelogMarkdownPath, constants.monorepoRootPath);
+ await changelogUtils.prettifyAsync(changelogMarkdownPath, constants.monorepoRootPath);
},
async prettifyAsync(filePath: string, cwd: string): Promise<void> {
await execAsync(`prettier --write ${filePath} --config .prettierrc`, {
diff --git a/packages/monorepo-scripts/src/utils/utils.ts b/packages/monorepo-scripts/src/utils/utils.ts
index f819ab6f1..8ba59c81d 100644
--- a/packages/monorepo-scripts/src/utils/utils.ts
+++ b/packages/monorepo-scripts/src/utils/utils.ts
@@ -1,10 +1,10 @@
-import lernaGetPackages = require('lerna-get-packages');
+import * as fs from 'fs';
import * as _ from 'lodash';
import { exec as execAsync } from 'promisify-child-process';
import semver = require('semver');
import { constants } from '../constants';
-import { GitTagsByPackageName, UpdatedPackage } from '../types';
+import { GitTagsByPackageName, Package, UpdatedPackage } from '../types';
import { changelogUtils } from './changelog_utils';
@@ -12,15 +12,47 @@ export const utils = {
log(...args: any[]): void {
console.log(...args); // tslint:disable-line:no-console
},
- async getUpdatedLernaPackagesAsync(shouldIncludePrivate: boolean): Promise<LernaPackage[]> {
- const updatedPublicPackages = await this.getLernaUpdatedPackagesAsync(shouldIncludePrivate);
+ getPackages(rootDir: string): Package[] {
+ const rootPackageJsonString = fs.readFileSync(`${rootDir}/package.json`, 'utf8');
+ const rootPackageJson = JSON.parse(rootPackageJsonString);
+ if (_.isUndefined(rootPackageJson.workspaces)) {
+ throw new Error(`Did not find 'workspaces' key in root package.json`);
+ }
+ const packages = [];
+ for (const workspace of rootPackageJson.workspaces) {
+ // HACK: Remove allowed wildcards from workspace entries.
+ // This might be entirely comprehensive.
+ const workspacePath = workspace.replace('*', '').replace('**/*', '');
+ const subpackageNames = fs.readdirSync(`${rootDir}/${workspacePath}`);
+ for (const subpackageName of subpackageNames) {
+ if (_.startsWith(subpackageName, '.')) {
+ continue;
+ }
+ const pathToPackageJson = `${rootDir}/${workspacePath}${subpackageName}`;
+ try {
+ const packageJsonString = fs.readFileSync(`${pathToPackageJson}/package.json`, 'utf8');
+ const packageJson = JSON.parse(packageJsonString);
+ const pkg = {
+ location: pathToPackageJson,
+ packageJson,
+ };
+ packages.push(pkg);
+ } catch (err) {
+ utils.log(`Couldn't find a 'package.json' for ${subpackageName}. Skipping.`);
+ }
+ }
+ }
+ return packages;
+ },
+ async getUpdatedPackagesAsync(shouldIncludePrivate: boolean): Promise<Package[]> {
+ const updatedPublicPackages = await utils.getLernaUpdatedPackagesAsync(shouldIncludePrivate);
const updatedPackageNames = _.map(updatedPublicPackages, pkg => pkg.name);
- const allLernaPackages = lernaGetPackages(constants.monorepoRootPath);
- const updatedPublicLernaPackages = _.filter(allLernaPackages, pkg => {
- return _.includes(updatedPackageNames, pkg.package.name);
+ const allPackages = utils.getPackages(constants.monorepoRootPath);
+ const updatedPackages = _.filter(allPackages, pkg => {
+ return _.includes(updatedPackageNames, pkg.packageJson.name);
});
- return updatedPublicLernaPackages;
+ return updatedPackages;
},
async getLernaUpdatedPackagesAsync(shouldIncludePrivate: boolean): Promise<UpdatedPackage[]> {
const result = await execAsync(`${constants.lernaExecutable} updated --json`, {
@@ -110,7 +142,7 @@ export const utils = {
} catch (err) {
throw new Error(`Failed to delete local git tag. Got err: ${err}`);
}
- this.log(`Removed local tag: ${tagName}`);
+ utils.log(`Removed local tag: ${tagName}`);
},
async removeRemoteTagAsync(tagName: string): Promise<void> {
try {
@@ -120,6 +152,6 @@ export const utils = {
} catch (err) {
throw new Error(`Failed to delete remote git tag. Got err: ${err}`);
}
- this.log(`Removed remote tag: ${tagName}`);
+ utils.log(`Removed remote tag: ${tagName}`);
},
};
diff --git a/packages/order-utils/CHANGELOG.json b/packages/order-utils/CHANGELOG.json
index 715d58a43..e61033c53 100644
--- a/packages/order-utils/CHANGELOG.json
+++ b/packages/order-utils/CHANGELOG.json
@@ -9,6 +9,19 @@
{
"note": "Export parseECSignature method",
"pr": 684
+ },
+ {
+ "note": "Handle Typed Arrays when hashing data",
+ "pr": 894
+ }
+ ]
+ },
+ {
+ "timestamp": 1531919263,
+ "version": "0.0.9",
+ "changes": [
+ {
+ "note": "Dependencies updated"
}
]
},
diff --git a/packages/order-utils/CHANGELOG.md b/packages/order-utils/CHANGELOG.md
index 672affc19..17464a966 100644
--- a/packages/order-utils/CHANGELOG.md
+++ b/packages/order-utils/CHANGELOG.md
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
+## v0.0.9 - _July 18, 2018_
+
+ * Dependencies updated
+
## v0.0.8 - _July 9, 2018_
* Dependencies updated
diff --git a/packages/order-utils/package.json b/packages/order-utils/package.json
index 8f5041609..1ac2804d7 100644
--- a/packages/order-utils/package.json
+++ b/packages/order-utils/package.json
@@ -51,10 +51,9 @@
},
"homepage": "https://github.com/0xProject/0x-monorepo/packages/order-utils/README.md",
"devDependencies": {
- "@0xproject/dev-utils": "^0.4.5",
+ "@0xproject/dev-utils": "^0.4.6",
"@0xproject/monorepo-scripts": "^0.2.2",
"@0xproject/tslint-config": "^0.4.21",
- "@types/ethereumjs-abi": "^0.6.0",
"@types/bn.js": "^4.11.0",
"@types/lodash": "4.14.104",
"chai": "^4.0.1",
@@ -67,19 +66,19 @@
"npm-run-all": "^4.1.2",
"shx": "^0.2.2",
"sinon": "^4.0.0",
- "tslint": "5.8.0",
+ "tslint": "5.11.0",
"typedoc": "0xProject/typedoc",
"typescript": "2.7.1"
},
"dependencies": {
"@0xproject/assert": "^0.3.0",
- "@0xproject/base-contract": "^0.3.5",
+ "@0xproject/base-contract": "^0.3.6",
"@0xproject/json-schemas": "1.0.0",
- "@0xproject/sol-compiler": "^0.5.3",
+ "@0xproject/sol-compiler": "^0.5.4",
"@0xproject/types": "^1.0.0",
- "@0xproject/typescript-typings": "^0.4.2",
- "@0xproject/utils": "^0.7.2",
- "@0xproject/web3-wrapper": "^0.7.2",
+ "@0xproject/typescript-typings": "^0.4.3",
+ "@0xproject/utils": "^0.7.3",
+ "@0xproject/web3-wrapper": "^0.7.3",
"@types/node": "^8.0.53",
"bn.js": "^4.11.8",
"ethereum-types": "^0.0.2",
diff --git a/packages/order-utils/src/abstract/abstract_order_filled_cancelled_lazy_store.ts b/packages/order-utils/src/abstract/abstract_order_filled_cancelled_lazy_store.ts
new file mode 100644
index 000000000..617bcb224
--- /dev/null
+++ b/packages/order-utils/src/abstract/abstract_order_filled_cancelled_lazy_store.ts
@@ -0,0 +1,12 @@
+import { BigNumber } from '@0xproject/utils';
+
+export abstract class AbstractOrderFilledCancelledLazyStore {
+ public abstract async getFilledTakerAmountAsync(orderHash: string): Promise<BigNumber>;
+ public abstract async getIsCancelledAsync(orderHash: string): Promise<boolean>;
+ public abstract setFilledTakerAmount(orderHash: string, balance: BigNumber): void;
+ public abstract deleteFilledTakerAmount(orderHash: string): void;
+ public abstract setIsCancelled(orderHash: string, isCancelled: boolean): void;
+ public abstract deleteIsCancelled(orderHash: string): void;
+ public abstract deleteAll(): void;
+ public abstract getZRXAssetData(): string;
+}
diff --git a/packages/order-utils/src/assert.ts b/packages/order-utils/src/assert.ts
index b4b57d02a..f8db7ac63 100644
--- a/packages/order-utils/src/assert.ts
+++ b/packages/order-utils/src/assert.ts
@@ -1,5 +1,5 @@
import { assert as sharedAssert } from '@0xproject/assert';
-// We need those two unused imports because they're actually used by sharedAssert which gets injected here
+// HACK: We need those two unused imports because they're actually used by sharedAssert which gets injected here
// tslint:disable:no-unused-variable
import { Schema } from '@0xproject/json-schemas';
import { ECSignature, SignatureType } from '@0xproject/types';
diff --git a/packages/order-utils/src/asset_proxy_utils.ts b/packages/order-utils/src/asset_data_utils.ts
index 8140ad89d..a9601e9ea 100644
--- a/packages/order-utils/src/asset_proxy_utils.ts
+++ b/packages/order-utils/src/asset_data_utils.ts
@@ -1,64 +1,25 @@
import { AssetProxyId, ERC20AssetData, ERC721AssetData } from '@0xproject/types';
import { BigNumber } from '@0xproject/utils';
-import BN = require('bn.js');
+import ethAbi = require('ethereumjs-abi');
import ethUtil = require('ethereumjs-util');
import { constants } from './constants';
-// TODO: Push upstream to DefinitelyTyped
-interface EthAbi {
- simpleEncode(signature: string, ...args: any[]): Buffer;
- rawDecode(signature: string[], data: Buffer): any[];
-}
-// tslint:disable:no-var-requires
-const ethAbi = require('ethereumjs-abi') as EthAbi;
-
-export const assetProxyUtils = {
- encodeAssetProxyId(assetProxyId: AssetProxyId): Buffer {
- return ethUtil.toBuffer(assetProxyId);
- },
- decodeAssetProxyId(encodedAssetProxyId: Buffer): AssetProxyId {
- const hexString = ethUtil.bufferToHex(encodedAssetProxyId);
- if (hexString === AssetProxyId.ERC20) {
- return AssetProxyId.ERC20;
- }
- if (hexString === AssetProxyId.ERC721) {
- return AssetProxyId.ERC721;
- }
- throw new Error(`Invalid ProxyId: ${hexString}`);
- },
- encodeAddress(address: string): Buffer {
- if (!ethUtil.isValidAddress(address)) {
- throw new Error(`Invalid Address: ${address}`);
- }
- const encodedAddress = ethUtil.toBuffer(address);
- const padded = ethUtil.setLengthLeft(encodedAddress, constants.WORD_LENGTH);
- return padded;
- },
- decodeAddress(encodedAddress: Buffer): string {
- const unpadded = ethUtil.setLengthLeft(encodedAddress, constants.ADDRESS_LENGTH);
- const address = ethUtil.bufferToHex(unpadded);
- if (!ethUtil.isValidAddress(address)) {
- throw new Error(`Invalid Address: ${address}`);
- }
- return address;
- },
- encodeUint256(value: BigNumber): Buffer {
- const base = 10;
- const formattedValue = new BN(value.toString(base));
- const encodedValue = ethUtil.toBuffer(formattedValue);
- // tslint:disable-next-line:custom-no-magic-numbers
- const paddedValue = ethUtil.setLengthLeft(encodedValue, constants.WORD_LENGTH);
- return paddedValue;
- },
- decodeUint256(encodedValue: Buffer): BigNumber {
- const formattedValue = ethUtil.bufferToHex(encodedValue);
- const value = new BigNumber(formattedValue, constants.BASE_16);
- return value;
- },
+export const assetDataUtils = {
+ /**
+ * Encodes an ERC20 token address into a hex encoded assetData string, usable in the makerAssetData or
+ * takerAssetData fields in a 0x order.
+ * @param tokenAddress The ERC20 token address to encode
+ * @return The hex encoded assetData string
+ */
encodeERC20AssetData(tokenAddress: string): string {
return ethUtil.bufferToHex(ethAbi.simpleEncode('ERC20Token(address)', tokenAddress));
},
+ /**
+ * Decodes an ERC20 assetData hex string into it's corresponding ERC20 tokenAddress & assetProxyId
+ * @param assetData Hex encoded assetData string to decode
+ * @return An object containing the decoded tokenAddress & assetProxyId
+ */
decodeERC20AssetData(assetData: string): ERC20AssetData {
const data = ethUtil.toBuffer(assetData);
if (data.byteLength < constants.ERC20_ASSET_DATA_BYTE_LENGTH) {
@@ -82,6 +43,13 @@ export const assetProxyUtils = {
tokenAddress: ethUtil.addHexPrefix(tokenAddress),
};
},
+ /**
+ * Encodes an ERC721 token address into a hex encoded assetData string, usable in the makerAssetData or
+ * takerAssetData fields in a 0x order.
+ * @param tokenAddress The ERC721 token address to encode
+ * @param tokenId The ERC721 tokenId to encode
+ * @return The hex encoded assetData string
+ */
encodeERC721AssetData(tokenAddress: string, tokenId: BigNumber, receiverData?: string): string {
// TODO: Pass `tokendId` as a BigNumber.
return ethUtil.bufferToHex(
@@ -93,6 +61,11 @@ export const assetProxyUtils = {
),
);
},
+ /**
+ * Decodes an ERC721 assetData hex string into it's corresponding ERC721 tokenAddress, tokenId & assetProxyId
+ * @param assetData Hex encoded assetData string to decode
+ * @return An object containing the decoded tokenAddress, tokenId & assetProxyId
+ */
decodeERC721AssetData(assetData: string): ERC721AssetData {
const data = ethUtil.toBuffer(assetData);
if (data.byteLength < constants.ERC721_ASSET_DATA_MINIMUM_BYTE_LENGTH) {
@@ -121,30 +94,51 @@ export const assetProxyUtils = {
receiverData: ethUtil.bufferToHex(receiverData),
};
},
- decodeAssetDataId(assetData: string): AssetProxyId {
+ /**
+ * Decode and return the assetProxyId from the assetData
+ * @param assetData Hex encoded assetData string to decode
+ * @return The assetProxyId
+ */
+ decodeAssetProxyId(assetData: string): AssetProxyId {
const encodedAssetData = ethUtil.toBuffer(assetData);
if (encodedAssetData.byteLength < constants.SELECTOR_LENGTH) {
throw new Error(
- `Could not decode Proxy Data. Expected length of encoded data to be at least 4. Got ${
+ `Could not decode assetData. Expected length of encoded data to be at least 4. Got ${
encodedAssetData.byteLength
}`,
);
}
const encodedAssetProxyId = encodedAssetData.slice(0, constants.SELECTOR_LENGTH);
- const assetProxyId = assetProxyUtils.decodeAssetProxyId(encodedAssetProxyId);
+ const assetProxyId = decodeAssetProxyId(encodedAssetProxyId);
return assetProxyId;
},
- decodeAssetData(assetData: string): ERC20AssetData | ERC721AssetData {
- const assetProxyId = assetProxyUtils.decodeAssetDataId(assetData);
+ /**
+ * Decode any assetData into it's corresponding assetData object
+ * @param assetData Hex encoded assetData string to decode
+ * @return Either a ERC20 or ERC721 assetData object
+ */
+ decodeAssetDataOrThrow(assetData: string): ERC20AssetData | ERC721AssetData {
+ const assetProxyId = assetDataUtils.decodeAssetProxyId(assetData);
switch (assetProxyId) {
case AssetProxyId.ERC20:
- const erc20AssetData = assetProxyUtils.decodeERC20AssetData(assetData);
+ const erc20AssetData = assetDataUtils.decodeERC20AssetData(assetData);
return erc20AssetData;
case AssetProxyId.ERC721:
- const erc721AssetData = assetProxyUtils.decodeERC721AssetData(assetData);
+ const erc721AssetData = assetDataUtils.decodeERC721AssetData(assetData);
return erc721AssetData;
default:
throw new Error(`Unrecognized asset proxy id: ${assetProxyId}`);
}
},
};
+
+function decodeAssetProxyId(encodedAssetProxyId: Buffer): AssetProxyId {
+ const hexString = ethUtil.bufferToHex(encodedAssetProxyId);
+ if (hexString === AssetProxyId.ERC20) {
+ return AssetProxyId.ERC20;
+ }
+ if (hexString === AssetProxyId.ERC721) {
+ return AssetProxyId.ERC721;
+ }
+ throw new Error(`Invalid ProxyId: ${hexString}`);
+}
diff --git a/packages/order-utils/src/constants.ts b/packages/order-utils/src/constants.ts
index 383a657b8..bb7482184 100644
--- a/packages/order-utils/src/constants.ts
+++ b/packages/order-utils/src/constants.ts
@@ -6,7 +6,6 @@ export const constants = {
UNLIMITED_ALLOWANCE_IN_BASE_UNITS: new BigNumber(2).pow(256).minus(1),
TESTRPC_NETWORK_ID: 50,
ADDRESS_LENGTH: 20,
- WORD_LENGTH: 32,
ERC20_ASSET_DATA_BYTE_LENGTH: 36,
ERC721_ASSET_DATA_MINIMUM_BYTE_LENGTH: 53,
SELECTOR_LENGTH: 4,
diff --git a/packages/order-utils/src/crypto.ts b/packages/order-utils/src/crypto.ts
index 517ca2840..0f1504a72 100644
--- a/packages/order-utils/src/crypto.ts
+++ b/packages/order-utils/src/crypto.ts
@@ -32,7 +32,7 @@ export const crypto = {
argTypes.push('address');
} else if (_.isString(arg)) {
argTypes.push('string');
- } else if (_.isBuffer(arg)) {
+ } else if (_.isBuffer(arg) || _.isTypedArray(arg)) {
argTypes.push('bytes');
} else if (_.isBoolean(arg)) {
argTypes.push('bool');
diff --git a/packages/order-utils/src/exchange_transfer_simulator.ts b/packages/order-utils/src/exchange_transfer_simulator.ts
index 72ed85406..c3a4f9c2a 100644
--- a/packages/order-utils/src/exchange_transfer_simulator.ts
+++ b/packages/order-utils/src/exchange_transfer_simulator.ts
@@ -34,7 +34,7 @@ const ERR_MSG_MAPPING = {
};
export class ExchangeTransferSimulator {
- private _store: AbstractBalanceAndProxyAllowanceLazyStore;
+ private readonly _store: AbstractBalanceAndProxyAllowanceLazyStore;
private static _throwValidationError(
failureReason: FailureReason,
tradeSide: TradeSide,
diff --git a/packages/order-utils/src/index.ts b/packages/order-utils/src/index.ts
index b4a7a6b67..76be63bb8 100644
--- a/packages/order-utils/src/index.ts
+++ b/packages/order-utils/src/index.ts
@@ -17,9 +17,10 @@ export { OrderError, MessagePrefixType, MessagePrefixOpts, EIP712Parameter, EIP7
export { AbstractBalanceAndProxyAllowanceFetcher } from './abstract/abstract_balance_and_proxy_allowance_fetcher';
export { AbstractOrderFilledCancelledFetcher } from './abstract/abstract_order_filled_cancelled_fetcher';
export { BalanceAndProxyAllowanceLazyStore } from './store/balance_and_proxy_allowance_lazy_store';
+export { OrderFilledCancelledLazyStore } from './store/order_filled_cancelled_lazy_store';
export { RemainingFillableCalculator } from './remaining_fillable_calculator';
export { OrderStateUtils } from './order_state_utils';
-export { assetProxyUtils } from './asset_proxy_utils';
+export { assetDataUtils } from './asset_data_utils';
export { EIP712Utils } from './eip712_utils';
export { OrderValidationUtils } from './order_validation_utils';
export { ExchangeTransferSimulator } from './exchange_transfer_simulator';
diff --git a/packages/order-utils/src/order_state_utils.ts b/packages/order-utils/src/order_state_utils.ts
index dd45a1298..189bf4180 100644
--- a/packages/order-utils/src/order_state_utils.ts
+++ b/packages/order-utils/src/order_state_utils.ts
@@ -27,8 +27,8 @@ interface SidedOrderRelevantState {
const ACCEPTABLE_RELATIVE_ROUNDING_ERROR = 0.0001;
export class OrderStateUtils {
- private _balanceAndProxyAllowanceFetcher: AbstractBalanceAndProxyAllowanceFetcher;
- private _orderFilledCancelledFetcher: AbstractOrderFilledCancelledFetcher;
+ private readonly _balanceAndProxyAllowanceFetcher: AbstractBalanceAndProxyAllowanceFetcher;
+ private readonly _orderFilledCancelledFetcher: AbstractOrderFilledCancelledFetcher;
private static _validateIfOrderIsValid(
signedOrder: SignedOrder,
sidedOrderRelevantState: SidedOrderRelevantState,
diff --git a/packages/order-utils/src/order_validation_utils.ts b/packages/order-utils/src/order_validation_utils.ts
index 94df3ef82..67d747081 100644
--- a/packages/order-utils/src/order_validation_utils.ts
+++ b/packages/order-utils/src/order_validation_utils.ts
@@ -13,7 +13,7 @@ import { isValidSignatureAsync } from './signature_utils';
import { utils } from './utils';
export class OrderValidationUtils {
- private _orderFilledCancelledFetcher: AbstractOrderFilledCancelledFetcher;
+ private readonly _orderFilledCancelledFetcher: AbstractOrderFilledCancelledFetcher;
public static isRoundingError(numerator: BigNumber, denominator: BigNumber, target: BigNumber): boolean {
// Solidity's mulmod() in JS
// Source: https://solidity.readthedocs.io/en/latest/units-and-global-variables.html#mathematical-and-cryptographic-functions
diff --git a/packages/order-utils/src/remaining_fillable_calculator.ts b/packages/order-utils/src/remaining_fillable_calculator.ts
index 29e19e5ab..7022aa979 100644
--- a/packages/order-utils/src/remaining_fillable_calculator.ts
+++ b/packages/order-utils/src/remaining_fillable_calculator.ts
@@ -1,14 +1,14 @@
import { BigNumber } from '@0xproject/utils';
export class RemainingFillableCalculator {
- private _isTraderAssetZRX: boolean;
+ private readonly _isTraderAssetZRX: boolean;
// Transferrable Amount is the minimum of Approval and Balance
- private _transferrableAssetAmount: BigNumber;
- private _transferrableFeeAmount: BigNumber;
- private _remainingOrderAssetAmount: BigNumber;
- private _remainingOrderFeeAmount: BigNumber;
- private _orderFee: BigNumber;
- private _orderAssetAmount: BigNumber;
+ private readonly _transferrableAssetAmount: BigNumber;
+ private readonly _transferrableFeeAmount: BigNumber;
+ private readonly _remainingOrderAssetAmount: BigNumber;
+ private readonly _remainingOrderFeeAmount: BigNumber;
+ private readonly _orderFee: BigNumber;
+ private readonly _orderAssetAmount: BigNumber;
constructor(
orderFee: BigNumber,
orderAssetAmount: BigNumber,
diff --git a/packages/order-utils/src/signature_utils.ts b/packages/order-utils/src/signature_utils.ts
index d8703bfda..26fb24705 100644
--- a/packages/order-utils/src/signature_utils.ts
+++ b/packages/order-utils/src/signature_utils.ts
@@ -27,6 +27,10 @@ export async function isValidSignatureAsync(
signature: string,
signerAddress: string,
): Promise<boolean> {
+ assert.isWeb3Provider('provider', provider);
+ assert.isHexString('data', data);
+ assert.isHexString('signature', signature);
+ assert.isETHAddressHex('signerAddress', signerAddress);
const signatureTypeIndexIfExists = utils.getSignatureTypeIndexIfExists(signature);
if (_.isUndefined(signatureTypeIndexIfExists)) {
throw new Error(`Unrecognized signatureType in signature: ${signature}`);
@@ -90,6 +94,9 @@ export async function isValidPresignedSignatureAsync(
data: string,
signerAddress: string,
): Promise<boolean> {
+ assert.isWeb3Provider('provider', provider);
+ assert.isHexString('data', data);
+ assert.isETHAddressHex('signerAddress', signerAddress);
const exchangeContract = new ExchangeContract(artifacts.Exchange.compilerOutput.abi, signerAddress, provider);
const isValid = await exchangeContract.preSigned.callAsync(data, signerAddress);
return isValid;
@@ -108,6 +115,10 @@ export async function isValidWalletSignatureAsync(
signature: string,
signerAddress: string,
): Promise<boolean> {
+ assert.isWeb3Provider('provider', provider);
+ assert.isHexString('data', data);
+ assert.isHexString('signature', signature);
+ assert.isETHAddressHex('signerAddress', signerAddress);
// tslint:disable-next-line:custom-no-magic-numbers
const signatureWithoutType = signature.slice(-2);
const walletContract = new IWalletContract(artifacts.IWallet.compilerOutput.abi, signerAddress, provider);
@@ -128,6 +139,10 @@ export async function isValidValidatorSignatureAsync(
signature: string,
signerAddress: string,
): Promise<boolean> {
+ assert.isWeb3Provider('provider', provider);
+ assert.isHexString('data', data);
+ assert.isHexString('signature', signature);
+ assert.isETHAddressHex('signerAddress', signerAddress);
const validatorSignature = parseValidatorSignature(signature);
const exchangeContract = new ExchangeContract(artifacts.Exchange.compilerOutput.abi, signerAddress, provider);
const isValidatorApproved = await exchangeContract.allowedValidators.callAsync(
@@ -192,7 +207,9 @@ export async function ecSignOrderHashAsync(
signerAddress: string,
messagePrefixOpts: MessagePrefixOpts,
): Promise<ECSignature> {
+ assert.isWeb3Provider('provider', provider);
assert.isHexString('orderHash', orderHash);
+ assert.isETHAddressHex('signerAddress', signerAddress);
const web3Wrapper = new Web3Wrapper(provider);
await assert.isSenderAddressAsync('signerAddress', signerAddress, web3Wrapper);
const normalizedSignerAddress = signerAddress.toLowerCase();
@@ -237,6 +254,8 @@ export async function ecSignOrderHashAsync(
* @return Prefixed message
*/
export function addSignedMessagePrefix(message: string, messagePrefixType: MessagePrefixType): string {
+ assert.isString('message', message);
+ assert.doesBelongToStringEnum('messagePrefixType', messagePrefixType, MessagePrefixType);
switch (messagePrefixType) {
case MessagePrefixType.None:
return message;
@@ -266,6 +285,7 @@ export function addSignedMessagePrefix(message: string, messagePrefixType: Messa
* @return An ECSignature object with r,s,v parameters
*/
export function parseECSignature(signature: string): ECSignature {
+ assert.isHexString('signature', signature);
const ecSignatureTypes = [SignatureType.EthSign, SignatureType.EIP712, SignatureType.Trezor];
assert.isOneOfExpectedSignatureTypes(signature, ecSignatureTypes);
diff --git a/packages/order-utils/src/store/balance_and_proxy_allowance_lazy_store.ts b/packages/order-utils/src/store/balance_and_proxy_allowance_lazy_store.ts
index e7352119d..5a2c1d7ff 100644
--- a/packages/order-utils/src/store/balance_and_proxy_allowance_lazy_store.ts
+++ b/packages/order-utils/src/store/balance_and_proxy_allowance_lazy_store.ts
@@ -1,14 +1,16 @@
+import { AssetProxyId } from '@0xproject/types';
import { BigNumber } from '@0xproject/utils';
import * as _ from 'lodash';
import { AbstractBalanceAndProxyAllowanceFetcher } from '../abstract/abstract_balance_and_proxy_allowance_fetcher';
import { AbstractBalanceAndProxyAllowanceLazyStore } from '../abstract/abstract_balance_and_proxy_allowance_lazy_store';
+import { assetDataUtils } from '../asset_data_utils';
/**
* Copy on read store for balances/proxyAllowances of tokens/accounts
*/
export class BalanceAndProxyAllowanceLazyStore implements AbstractBalanceAndProxyAllowanceLazyStore {
- private _balanceAndProxyAllowanceFetcher: AbstractBalanceAndProxyAllowanceFetcher;
+ private readonly _balanceAndProxyAllowanceFetcher: AbstractBalanceAndProxyAllowanceFetcher;
private _balance: {
[assetData: string]: {
[userAddress: string]: BigNumber;
@@ -74,6 +76,20 @@ export class BalanceAndProxyAllowanceLazyStore implements AbstractBalanceAndProx
}
}
}
+ public deleteAllERC721ProxyAllowance(tokenAddress: string, userAddress: string): void {
+ for (const assetData in this._proxyAllowance) {
+ if (this._proxyAllowance.hasOwnProperty(assetData)) {
+ const decodedAssetData = assetDataUtils.decodeAssetDataOrThrow(assetData);
+ if (
+ decodedAssetData.assetProxyId === AssetProxyId.ERC721 &&
+ decodedAssetData.tokenAddress === tokenAddress &&
+ !_.isUndefined(this._proxyAllowance[assetData][userAddress])
+ ) {
+ delete this._proxyAllowance[assetData][userAddress];
+ }
+ }
+ }
+ }
public deleteAll(): void {
this._balance = {};
this._proxyAllowance = {};
diff --git a/packages/order-utils/src/store/order_filled_cancelled_lazy_store.ts b/packages/order-utils/src/store/order_filled_cancelled_lazy_store.ts
new file mode 100644
index 000000000..336c6d0ba
--- /dev/null
+++ b/packages/order-utils/src/store/order_filled_cancelled_lazy_store.ts
@@ -0,0 +1,65 @@
+import { BigNumber } from '@0xproject/utils';
+import * as _ from 'lodash';
+
+import { AbstractOrderFilledCancelledFetcher } from '../abstract/abstract_order_filled_cancelled_fetcher';
+import { AbstractOrderFilledCancelledLazyStore } from '../abstract/abstract_order_filled_cancelled_lazy_store';
+
+/**
+ * Copy on read store for balances/proxyAllowances of tokens/accounts
+ */
+export class OrderFilledCancelledLazyStore implements AbstractOrderFilledCancelledLazyStore {
+ private readonly _orderFilledCancelledFetcher: AbstractOrderFilledCancelledFetcher;
+ private _filledTakerAmount: {
+ [orderHash: string]: BigNumber;
+ };
+ private _isCancelled: {
+ [orderHash: string]: boolean;
+ };
+ constructor(orderFilledCancelledFetcher: AbstractOrderFilledCancelledFetcher) {
+ this._orderFilledCancelledFetcher = orderFilledCancelledFetcher;
+ this._filledTakerAmount = {};
+ this._isCancelled = {};
+ }
+ public async getFilledTakerAmountAsync(orderHash: string): Promise<BigNumber> {
+ if (_.isUndefined(this._filledTakerAmount[orderHash])) {
+ const filledTakerAmount = await this._orderFilledCancelledFetcher.getFilledTakerAmountAsync(orderHash);
+ this.setFilledTakerAmount(orderHash, filledTakerAmount);
+ }
+ const cachedFilledTakerAmount = this._filledTakerAmount[orderHash];
+ return cachedFilledTakerAmount;
+ }
+ public setFilledTakerAmount(orderHash: string, filledTakerAmount: BigNumber): void {
+ this._filledTakerAmount[orderHash] = filledTakerAmount;
+ }
+ public deleteFilledTakerAmount(orderHash: string): void {
+ delete this._filledTakerAmount[orderHash];
+ }
+ public async getIsCancelledAsync(orderHash: string): Promise<boolean> {
+ if (_.isUndefined(this._isCancelled[orderHash])) {
+ const isCancelled = await this._orderFilledCancelledFetcher.isOrderCancelledAsync(orderHash);
+ this.setIsCancelled(orderHash, isCancelled);
+ }
+ const cachedIsCancelled = this._isCancelled[orderHash]; // tslint:disable-line:boolean-naming
+ return cachedIsCancelled;
+ }
+ public setIsCancelled(orderHash: string, isCancelled: boolean): void {
+ this._isCancelled[orderHash] = isCancelled;
+ }
+ public deleteIsCancelled(orderHash: string): void {
+ delete this._isCancelled[orderHash];
+ }
+ public deleteAll(): void {
+ this.deleteAllFilled();
+ this.deleteAllIsCancelled();
+ }
+ public deleteAllIsCancelled(): void {
+ this._isCancelled = {};
+ }
+ public deleteAllFilled(): void {
+ this._filledTakerAmount = {};
+ }
+ public getZRXAssetData(): string {
+ const zrxAssetData = this._orderFilledCancelledFetcher.getZRXAssetData();
+ return zrxAssetData;
+ }
+}
diff --git a/packages/order-utils/test/exchange_transfer_simulator_test.ts b/packages/order-utils/test/exchange_transfer_simulator_test.ts
index 37b2bd712..f5c18cdb9 100644
--- a/packages/order-utils/test/exchange_transfer_simulator_test.ts
+++ b/packages/order-utils/test/exchange_transfer_simulator_test.ts
@@ -4,7 +4,7 @@ import { BigNumber } from '@0xproject/utils';
import * as chai from 'chai';
import { artifacts } from '../src/artifacts';
-import { assetProxyUtils } from '../src/asset_proxy_utils';
+import { assetDataUtils } from '../src/asset_data_utils';
import { constants } from '../src/constants';
import { ExchangeTransferSimulator } from '../src/exchange_transfer_simulator';
import { DummyERC20TokenContract } from '../src/generated_contract_wrappers/dummy_erc20_token';
@@ -34,7 +34,7 @@ describe('ExchangeTransferSimulator', async () => {
let erc20ProxyAddress: string;
before(async function(): Promise<void> {
const mochaTestTimeoutMs = 20000;
- this.timeout(mochaTestTimeoutMs);
+ this.timeout(mochaTestTimeoutMs); // tslint:disable-line:no-invalid-this
userAddresses = await web3Wrapper.getAvailableAddressesAsync();
[coinbase, sender, recipient] = userAddresses;
@@ -66,7 +66,7 @@ describe('ExchangeTransferSimulator', async () => {
totalSupply,
);
- exampleAssetData = assetProxyUtils.encodeERC20AssetData(dummyERC20Token.address);
+ exampleAssetData = assetDataUtils.encodeERC20AssetData(dummyERC20Token.address);
});
beforeEach(async () => {
await blockchainLifecycle.startAsync();
@@ -77,8 +77,7 @@ describe('ExchangeTransferSimulator', async () => {
describe('#transferFromAsync', function(): void {
// HACK: For some reason these tests need a slightly longer timeout
const mochaTestTimeoutMs = 3000;
- this.timeout(mochaTestTimeoutMs);
-
+ this.timeout(mochaTestTimeoutMs); // tslint:disable-line:no-invalid-this
beforeEach(() => {
const simpleERC20BalanceAndProxyAllowanceFetcher = new SimpleERC20BalanceAndProxyAllowanceFetcher(
(dummyERC20Token as any) as ERC20TokenContract,
diff --git a/packages/order-utils/test/utils/simple_erc20_balance_and_proxy_allowance_fetcher.ts b/packages/order-utils/test/utils/simple_erc20_balance_and_proxy_allowance_fetcher.ts
index 68f6a164c..279a5c0db 100644
--- a/packages/order-utils/test/utils/simple_erc20_balance_and_proxy_allowance_fetcher.ts
+++ b/packages/order-utils/test/utils/simple_erc20_balance_and_proxy_allowance_fetcher.ts
@@ -5,8 +5,8 @@ import { AbstractBalanceAndProxyAllowanceFetcher } from '../../src/abstract/abst
import { ERC20TokenContract } from '../../src/generated_contract_wrappers/erc20_token';
export class SimpleERC20BalanceAndProxyAllowanceFetcher implements AbstractBalanceAndProxyAllowanceFetcher {
- private _erc20TokenContract: ERC20TokenContract;
- private _erc20ProxyAddress: string;
+ private readonly _erc20TokenContract: ERC20TokenContract;
+ private readonly _erc20ProxyAddress: string;
constructor(erc20TokenWrapper: ERC20TokenContract, erc20ProxyAddress: string) {
this._erc20TokenContract = erc20TokenWrapper;
this._erc20ProxyAddress = erc20ProxyAddress;
diff --git a/packages/order-watcher/CHANGELOG.json b/packages/order-watcher/CHANGELOG.json
index a66db6eec..a8f935f6d 100644
--- a/packages/order-watcher/CHANGELOG.json
+++ b/packages/order-watcher/CHANGELOG.json
@@ -1,5 +1,14 @@
[
{
+ "timestamp": 1531919263,
+ "version": "0.0.8",
+ "changes": [
+ {
+ "note": "Dependencies updated"
+ }
+ ]
+ },
+ {
"version": "0.0.7",
"changes": [
{
@@ -9,6 +18,14 @@
{
"note": "Do not stop subscription if error is encountered",
"pr": 825
+ },
+ {
+ "note": "Fixed a bug that caused the incorrect block to be fetched via JSON-RPC within Blockstream",
+ "pr": 875
+ },
+ {
+ "note": "Remove stateLayer config from OrderWatcher. It now always operates on the latest block",
+ "pr": 875
}
],
"timestamp": 1531149657
diff --git a/packages/order-watcher/CHANGELOG.md b/packages/order-watcher/CHANGELOG.md
index c14b66e39..cd00c5f14 100644
--- a/packages/order-watcher/CHANGELOG.md
+++ b/packages/order-watcher/CHANGELOG.md
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
+## v0.0.8 - _July 18, 2018_
+
+ * Dependencies updated
+
## v0.0.7 - _July 9, 2018_
* Switch out simple getLogs polling with ethereumjs-blockstream (#825)
diff --git a/packages/order-watcher/package.json b/packages/order-watcher/package.json
index 27d64a371..65ead4511 100644
--- a/packages/order-watcher/package.json
+++ b/packages/order-watcher/package.json
@@ -1,6 +1,6 @@
{
"name": "@0xproject/order-watcher",
- "version": "0.0.7",
+ "version": "0.0.8",
"description": "An order watcher daemon that watches for order validity",
"keywords": [
"0x",
@@ -47,11 +47,11 @@
"node": ">=6.0.0"
},
"devDependencies": {
- "@0xproject/abi-gen": "^0.3.3",
- "@0xproject/dev-utils": "^0.4.5",
- "@0xproject/migrations": "^0.0.9",
+ "@0xproject/abi-gen": "^0.3.4",
+ "@0xproject/dev-utils": "^0.4.6",
+ "@0xproject/migrations": "^0.0.10",
"@0xproject/monorepo-scripts": "^0.2.2",
- "@0xproject/sol-compiler": "^0.5.3",
+ "@0xproject/sol-compiler": "^0.5.4",
"@0xproject/tslint-config": "^0.4.21",
"@types/bintrees": "^1.0.2",
"@types/lodash": "4.14.104",
@@ -73,20 +73,20 @@
"shx": "^0.2.2",
"sinon": "^4.0.0",
"source-map-support": "^0.5.0",
- "tslint": "5.8.0",
+ "tslint": "5.11.0",
"typescript": "2.7.1"
},
"dependencies": {
- "@0xproject/assert": "0.2.13",
- "@0xproject/base-contract": "^0.3.5",
- "@0xproject/contract-wrappers": "0.0.5",
- "@0xproject/fill-scenarios": "^0.0.5",
- "@0xproject/json-schemas": "0.8.2",
- "@0xproject/order-utils": "^0.0.8",
- "@0xproject/types": "^0.8.2",
- "@0xproject/typescript-typings": "^0.4.2",
- "@0xproject/utils": "^0.7.2",
- "@0xproject/web3-wrapper": "^0.7.2",
+ "@0xproject/assert": "0.3.0",
+ "@0xproject/base-contract": "0.3.6",
+ "@0xproject/contract-wrappers": "0.1.1",
+ "@0xproject/fill-scenarios": "1.0.0",
+ "@0xproject/json-schemas": "1.0.0",
+ "@0xproject/order-utils": "1.0.0",
+ "@0xproject/types": "1.0.0",
+ "@0xproject/typescript-typings": "^0.4.3",
+ "@0xproject/utils": "^0.7.3",
+ "@0xproject/web3-wrapper": "^0.7.3",
"ethereumjs-blockstream": "5.0.0",
"ethereum-types": "^0.0.2",
"bintrees": "^1.0.2",
diff --git a/packages/order-watcher/src/artifacts.ts b/packages/order-watcher/src/artifacts.ts
index 13587984c..4732fb2b5 100644
--- a/packages/order-watcher/src/artifacts.ts
+++ b/packages/order-watcher/src/artifacts.ts
@@ -1,18 +1,13 @@
import { Artifact } from '@0xproject/types';
-import * as DummyToken from './compact_artifacts/DummyToken.json';
-import * as EtherToken from './compact_artifacts/EtherToken.json';
+import * as ERC20Token from './compact_artifacts/ERC20Token.json';
+import * as ERC721Token from './compact_artifacts/ERC721Token.json';
import * as Exchange from './compact_artifacts/Exchange.json';
-import * as Token from './compact_artifacts/Token.json';
-import * as TokenRegistry from './compact_artifacts/TokenRegistry.json';
-import * as TokenTransferProxy from './compact_artifacts/TokenTransferProxy.json';
-import * as ZRX from './compact_artifacts/ZRX.json';
+import * as WETH9 from './compact_artifacts/WETH9.json';
+
export const artifacts = {
- ZRX: (ZRX as any) as Artifact,
- DummyToken: (DummyToken as any) as Artifact,
- Token: (Token as any) as Artifact,
+ ERC20Token: (ERC20Token as any) as Artifact,
+ ERC721Token: (ERC721Token as any) as Artifact,
Exchange: (Exchange as any) as Artifact,
- EtherToken: (EtherToken as any) as Artifact,
- TokenRegistry: (TokenRegistry as any) as Artifact,
- TokenTransferProxy: (TokenTransferProxy as any) as Artifact,
+ EtherToken: (WETH9 as any) as Artifact,
};
diff --git a/packages/order-watcher/src/compact_artifacts/DummyToken.json b/packages/order-watcher/src/compact_artifacts/DummyToken.json
deleted file mode 100644
index f64a8cd3d..000000000
--- a/packages/order-watcher/src/compact_artifacts/DummyToken.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "contract_name": "DummyToken",
- "abi": [
- {
- "constant": false,
- "inputs": [
- {
- "name": "_target",
- "type": "address"
- },
- {
- "name": "_value",
- "type": "uint256"
- }
- ],
- "name": "setBalance",
- "outputs": [],
- "payable": false,
- "type": "function"
- }
- ]
-}
diff --git a/packages/order-watcher/src/compact_artifacts/ERC20Token.json b/packages/order-watcher/src/compact_artifacts/ERC20Token.json
new file mode 100644
index 000000000..8d60fa324
--- /dev/null
+++ b/packages/order-watcher/src/compact_artifacts/ERC20Token.json
@@ -0,0 +1,49 @@
+{
+ "contract_name": "ERC20Token",
+ "abi": [
+ {
+ "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"
+ }
+ ]
+}
diff --git a/packages/order-watcher/src/compact_artifacts/ERC721Token.json b/packages/order-watcher/src/compact_artifacts/ERC721Token.json
new file mode 100644
index 000000000..5934376d3
--- /dev/null
+++ b/packages/order-watcher/src/compact_artifacts/ERC721Token.json
@@ -0,0 +1,71 @@
+{
+ "contract_name": "ERC721Token",
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "name": "_from",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "name": "_to",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "Transfer",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "name": "_owner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "name": "_approved",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "Approval",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "name": "_owner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "name": "_operator",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "name": "_approved",
+ "type": "bool"
+ }
+ ],
+ "name": "ApprovalForAll",
+ "type": "event"
+ }
+ ]
+}
diff --git a/packages/order-watcher/src/compact_artifacts/EtherToken.json b/packages/order-watcher/src/compact_artifacts/EtherToken.json
deleted file mode 100644
index 26cca57cd..000000000
--- a/packages/order-watcher/src/compact_artifacts/EtherToken.json
+++ /dev/null
@@ -1,287 +0,0 @@
-{
- "contract_name": "EtherToken",
- "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": false,
- "inputs": [
- {
- "name": "amount",
- "type": "uint256"
- }
- ],
- "name": "withdraw",
- "outputs": [],
- "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": false,
- "inputs": [],
- "name": "deposit",
- "outputs": [],
- "payable": true,
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "name": "_owner",
- "type": "address"
- },
- {
- "name": "_spender",
- "type": "address"
- }
- ],
- "name": "allowance",
- "outputs": [
- {
- "name": "",
- "type": "uint256"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "payable": true,
- "type": "fallback"
- },
- {
- "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"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "name": "_owner",
- "type": "address"
- },
- {
- "indexed": false,
- "name": "_value",
- "type": "uint256"
- }
- ],
- "name": "Deposit",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "name": "_owner",
- "type": "address"
- },
- {
- "indexed": false,
- "name": "_value",
- "type": "uint256"
- }
- ],
- "name": "Withdrawal",
- "type": "event"
- }
- ],
- "networks": {
- "1": {
- "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"
- },
- "3": {
- "address": "0xc00fd9820cd2898cc4c054b7bf142de637ad129a"
- },
- "4": {
- "address": "0xc778417e063141139fce010982780140aa0cd5ab"
- },
- "42": {
- "address": "0x653e49e301e508a13237c0ddc98ae7d4cd2667a1"
- },
- "50": {
- "address": "0x871dd7c2b4b25e1aa18728e9d5f2af4c4e431f5c"
- }
- }
-}
diff --git a/packages/order-watcher/src/compact_artifacts/Exchange.json b/packages/order-watcher/src/compact_artifacts/Exchange.json
index af8db7360..4e319f7cf 100644
--- a/packages/order-watcher/src/compact_artifacts/Exchange.json
+++ b/packages/order-watcher/src/compact_artifacts/Exchange.json
@@ -2,527 +2,65 @@
"contract_name": "Exchange",
"abi": [
{
- "constant": true,
- "inputs": [
- {
- "name": "numerator",
- "type": "uint256"
- },
- {
- "name": "denominator",
- "type": "uint256"
- },
- {
- "name": "target",
- "type": "uint256"
- }
- ],
- "name": "isRoundingError",
- "outputs": [
- {
- "name": "",
- "type": "bool"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "name": "",
- "type": "bytes32"
- }
- ],
- "name": "filled",
- "outputs": [
- {
- "name": "",
- "type": "uint256"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "name": "",
- "type": "bytes32"
- }
- ],
- "name": "cancelled",
- "outputs": [
- {
- "name": "",
- "type": "uint256"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "name": "orderAddresses",
- "type": "address[5][]"
- },
- {
- "name": "orderValues",
- "type": "uint256[6][]"
- },
- {
- "name": "fillTakerTokenAmount",
- "type": "uint256"
- },
- {
- "name": "shouldThrowOnInsufficientBalanceOrAllowance",
- "type": "bool"
- },
- {
- "name": "v",
- "type": "uint8[]"
- },
- {
- "name": "r",
- "type": "bytes32[]"
- },
- {
- "name": "s",
- "type": "bytes32[]"
- }
- ],
- "name": "fillOrdersUpTo",
- "outputs": [
- {
- "name": "",
- "type": "uint256"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "name": "orderAddresses",
- "type": "address[5]"
- },
- {
- "name": "orderValues",
- "type": "uint256[6]"
- },
- {
- "name": "cancelTakerTokenAmount",
- "type": "uint256"
- }
- ],
- "name": "cancelOrder",
- "outputs": [
- {
- "name": "",
- "type": "uint256"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [],
- "name": "ZRX_TOKEN_CONTRACT",
- "outputs": [
- {
- "name": "",
- "type": "address"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "name": "orderAddresses",
- "type": "address[5][]"
- },
- {
- "name": "orderValues",
- "type": "uint256[6][]"
- },
- {
- "name": "fillTakerTokenAmounts",
- "type": "uint256[]"
- },
- {
- "name": "v",
- "type": "uint8[]"
- },
- {
- "name": "r",
- "type": "bytes32[]"
- },
- {
- "name": "s",
- "type": "bytes32[]"
- }
- ],
- "name": "batchFillOrKillOrders",
- "outputs": [],
- "payable": false,
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "name": "orderAddresses",
- "type": "address[5]"
- },
- {
- "name": "orderValues",
- "type": "uint256[6]"
- },
- {
- "name": "fillTakerTokenAmount",
- "type": "uint256"
- },
- {
- "name": "v",
- "type": "uint8"
- },
- {
- "name": "r",
- "type": "bytes32"
- },
- {
- "name": "s",
- "type": "bytes32"
- }
- ],
- "name": "fillOrKillOrder",
- "outputs": [],
- "payable": false,
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "name": "orderHash",
- "type": "bytes32"
- }
- ],
- "name": "getUnavailableTakerTokenAmount",
- "outputs": [
- {
- "name": "",
- "type": "uint256"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "name": "signer",
- "type": "address"
- },
- {
- "name": "hash",
- "type": "bytes32"
- },
- {
- "name": "v",
- "type": "uint8"
- },
- {
- "name": "r",
- "type": "bytes32"
- },
- {
- "name": "s",
- "type": "bytes32"
- }
- ],
- "name": "isValidSignature",
- "outputs": [
- {
- "name": "",
- "type": "bool"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "name": "numerator",
- "type": "uint256"
- },
- {
- "name": "denominator",
- "type": "uint256"
- },
- {
- "name": "target",
- "type": "uint256"
- }
- ],
- "name": "getPartialAmount",
- "outputs": [
- {
- "name": "",
- "type": "uint256"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [],
- "name": "TOKEN_TRANSFER_PROXY_CONTRACT",
- "outputs": [
- {
- "name": "",
- "type": "address"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "name": "orderAddresses",
- "type": "address[5][]"
- },
- {
- "name": "orderValues",
- "type": "uint256[6][]"
- },
- {
- "name": "fillTakerTokenAmounts",
- "type": "uint256[]"
- },
- {
- "name": "shouldThrowOnInsufficientBalanceOrAllowance",
- "type": "bool"
- },
- {
- "name": "v",
- "type": "uint8[]"
- },
- {
- "name": "r",
- "type": "bytes32[]"
- },
- {
- "name": "s",
- "type": "bytes32[]"
- }
- ],
- "name": "batchFillOrders",
- "outputs": [],
- "payable": false,
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "name": "orderAddresses",
- "type": "address[5][]"
- },
- {
- "name": "orderValues",
- "type": "uint256[6][]"
- },
- {
- "name": "cancelTakerTokenAmounts",
- "type": "uint256[]"
- }
- ],
- "name": "batchCancelOrders",
- "outputs": [],
- "payable": false,
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "name": "orderAddresses",
- "type": "address[5]"
- },
- {
- "name": "orderValues",
- "type": "uint256[6]"
- },
- {
- "name": "fillTakerTokenAmount",
- "type": "uint256"
- },
- {
- "name": "shouldThrowOnInsufficientBalanceOrAllowance",
- "type": "bool"
- },
- {
- "name": "v",
- "type": "uint8"
- },
- {
- "name": "r",
- "type": "bytes32"
- },
- {
- "name": "s",
- "type": "bytes32"
- }
- ],
- "name": "fillOrder",
- "outputs": [
- {
- "name": "filledTakerTokenAmount",
- "type": "uint256"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "name": "orderAddresses",
- "type": "address[5]"
- },
- {
- "name": "orderValues",
- "type": "uint256[6]"
- }
- ],
- "name": "getOrderHash",
- "outputs": [
- {
- "name": "",
- "type": "bytes32"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [],
- "name": "EXTERNAL_QUERY_GAS_LIMIT",
- "outputs": [
- {
- "name": "",
- "type": "uint16"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [],
- "name": "VERSION",
- "outputs": [
- {
- "name": "",
- "type": "string"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "inputs": [
- {
- "name": "_zrxToken",
- "type": "address"
- },
- {
- "name": "_tokenTransferProxy",
- "type": "address"
- }
- ],
- "payable": false,
- "type": "constructor"
- },
- {
"anonymous": false,
"inputs": [
{
"indexed": true,
- "name": "maker",
- "type": "address"
- },
- {
- "indexed": false,
- "name": "taker",
+ "name": "makerAddress",
"type": "address"
},
{
"indexed": true,
- "name": "feeRecipient",
+ "name": "feeRecipientAddress",
"type": "address"
},
{
"indexed": false,
- "name": "makerToken",
+ "name": "takerAddress",
"type": "address"
},
{
"indexed": false,
- "name": "takerToken",
+ "name": "senderAddress",
"type": "address"
},
{
"indexed": false,
- "name": "filledMakerTokenAmount",
+ "name": "makerAssetFilledAmount",
"type": "uint256"
},
{
"indexed": false,
- "name": "filledTakerTokenAmount",
+ "name": "takerAssetFilledAmount",
"type": "uint256"
},
{
"indexed": false,
- "name": "paidMakerFee",
+ "name": "makerFeePaid",
"type": "uint256"
},
{
"indexed": false,
- "name": "paidTakerFee",
+ "name": "takerFeePaid",
"type": "uint256"
},
{
"indexed": true,
- "name": "tokens",
+ "name": "orderHash",
"type": "bytes32"
},
{
"indexed": false,
- "name": "orderHash",
- "type": "bytes32"
+ "name": "makerAssetData",
+ "type": "bytes"
+ },
+ {
+ "indexed": false,
+ "name": "takerAssetData",
+ "type": "bytes"
}
],
- "name": "LogFill",
+ "name": "Fill",
"type": "event"
},
{
@@ -530,46 +68,36 @@
"inputs": [
{
"indexed": true,
- "name": "maker",
+ "name": "makerAddress",
"type": "address"
},
{
"indexed": true,
- "name": "feeRecipient",
+ "name": "feeRecipientAddress",
"type": "address"
},
{
"indexed": false,
- "name": "makerToken",
+ "name": "senderAddress",
"type": "address"
},
{
- "indexed": false,
- "name": "takerToken",
- "type": "address"
- },
- {
- "indexed": false,
- "name": "cancelledMakerTokenAmount",
- "type": "uint256"
+ "indexed": true,
+ "name": "orderHash",
+ "type": "bytes32"
},
{
"indexed": false,
- "name": "cancelledTakerTokenAmount",
- "type": "uint256"
- },
- {
- "indexed": true,
- "name": "tokens",
- "type": "bytes32"
+ "name": "makerAssetData",
+ "type": "bytes"
},
{
"indexed": false,
- "name": "orderHash",
- "type": "bytes32"
+ "name": "takerAssetData",
+ "type": "bytes"
}
],
- "name": "LogCancel",
+ "name": "Cancel",
"type": "event"
},
{
@@ -577,16 +105,21 @@
"inputs": [
{
"indexed": true,
- "name": "errorId",
- "type": "uint8"
+ "name": "makerAddress",
+ "type": "address"
},
{
"indexed": true,
- "name": "orderHash",
- "type": "bytes32"
+ "name": "senderAddress",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "name": "orderEpoch",
+ "type": "uint256"
}
],
- "name": "LogError",
+ "name": "CancelUpTo",
"type": "event"
}
],
diff --git a/packages/order-watcher/src/compact_artifacts/Token.json b/packages/order-watcher/src/compact_artifacts/Token.json
deleted file mode 100644
index 3b5a86ae0..000000000
--- a/packages/order-watcher/src/compact_artifacts/Token.json
+++ /dev/null
@@ -1,172 +0,0 @@
-{
- "contract_name": "Token",
- "abi": [
- {
- "constant": false,
- "inputs": [
- {
- "name": "_spender",
- "type": "address"
- },
- {
- "name": "_value",
- "type": "uint256"
- }
- ],
- "name": "approve",
- "outputs": [
- {
- "name": "success",
- "type": "bool"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [],
- "name": "totalSupply",
- "outputs": [
- {
- "name": "supply",
- "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": "success",
- "type": "bool"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "name": "_owner",
- "type": "address"
- }
- ],
- "name": "balanceOf",
- "outputs": [
- {
- "name": "balance",
- "type": "uint256"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "name": "_to",
- "type": "address"
- },
- {
- "name": "_value",
- "type": "uint256"
- }
- ],
- "name": "transfer",
- "outputs": [
- {
- "name": "success",
- "type": "bool"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "name": "_owner",
- "type": "address"
- },
- {
- "name": "_spender",
- "type": "address"
- }
- ],
- "name": "allowance",
- "outputs": [
- {
- "name": "remaining",
- "type": "uint256"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "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"
- }
- ]
-}
diff --git a/packages/order-watcher/src/compact_artifacts/TokenRegistry.json b/packages/order-watcher/src/compact_artifacts/TokenRegistry.json
deleted file mode 100644
index 0f583628c..000000000
--- a/packages/order-watcher/src/compact_artifacts/TokenRegistry.json
+++ /dev/null
@@ -1,547 +0,0 @@
-{
- "contract_name": "TokenRegistry",
- "abi": [
- {
- "constant": false,
- "inputs": [
- {
- "name": "_token",
- "type": "address"
- },
- {
- "name": "_index",
- "type": "uint256"
- }
- ],
- "name": "removeToken",
- "outputs": [],
- "payable": false,
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "name": "_name",
- "type": "string"
- }
- ],
- "name": "getTokenAddressByName",
- "outputs": [
- {
- "name": "",
- "type": "address"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "name": "_symbol",
- "type": "string"
- }
- ],
- "name": "getTokenAddressBySymbol",
- "outputs": [
- {
- "name": "",
- "type": "address"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "name": "_token",
- "type": "address"
- },
- {
- "name": "_swarmHash",
- "type": "bytes"
- }
- ],
- "name": "setTokenSwarmHash",
- "outputs": [],
- "payable": false,
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "name": "_token",
- "type": "address"
- }
- ],
- "name": "getTokenMetaData",
- "outputs": [
- {
- "name": "",
- "type": "address"
- },
- {
- "name": "",
- "type": "string"
- },
- {
- "name": "",
- "type": "string"
- },
- {
- "name": "",
- "type": "uint8"
- },
- {
- "name": "",
- "type": "bytes"
- },
- {
- "name": "",
- "type": "bytes"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [],
- "name": "owner",
- "outputs": [
- {
- "name": "",
- "type": "address"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "name": "_token",
- "type": "address"
- },
- {
- "name": "_name",
- "type": "string"
- },
- {
- "name": "_symbol",
- "type": "string"
- },
- {
- "name": "_decimals",
- "type": "uint8"
- },
- {
- "name": "_ipfsHash",
- "type": "bytes"
- },
- {
- "name": "_swarmHash",
- "type": "bytes"
- }
- ],
- "name": "addToken",
- "outputs": [],
- "payable": false,
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "name": "_token",
- "type": "address"
- },
- {
- "name": "_name",
- "type": "string"
- }
- ],
- "name": "setTokenName",
- "outputs": [],
- "payable": false,
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "name": "",
- "type": "address"
- }
- ],
- "name": "tokens",
- "outputs": [
- {
- "name": "token",
- "type": "address"
- },
- {
- "name": "name",
- "type": "string"
- },
- {
- "name": "symbol",
- "type": "string"
- },
- {
- "name": "decimals",
- "type": "uint8"
- },
- {
- "name": "ipfsHash",
- "type": "bytes"
- },
- {
- "name": "swarmHash",
- "type": "bytes"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "name": "",
- "type": "uint256"
- }
- ],
- "name": "tokenAddresses",
- "outputs": [
- {
- "name": "",
- "type": "address"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "name": "_name",
- "type": "string"
- }
- ],
- "name": "getTokenByName",
- "outputs": [
- {
- "name": "",
- "type": "address"
- },
- {
- "name": "",
- "type": "string"
- },
- {
- "name": "",
- "type": "string"
- },
- {
- "name": "",
- "type": "uint8"
- },
- {
- "name": "",
- "type": "bytes"
- },
- {
- "name": "",
- "type": "bytes"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [],
- "name": "getTokenAddresses",
- "outputs": [
- {
- "name": "",
- "type": "address[]"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "name": "_token",
- "type": "address"
- },
- {
- "name": "_ipfsHash",
- "type": "bytes"
- }
- ],
- "name": "setTokenIpfsHash",
- "outputs": [],
- "payable": false,
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "name": "_symbol",
- "type": "string"
- }
- ],
- "name": "getTokenBySymbol",
- "outputs": [
- {
- "name": "",
- "type": "address"
- },
- {
- "name": "",
- "type": "string"
- },
- {
- "name": "",
- "type": "string"
- },
- {
- "name": "",
- "type": "uint8"
- },
- {
- "name": "",
- "type": "bytes"
- },
- {
- "name": "",
- "type": "bytes"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "name": "_token",
- "type": "address"
- },
- {
- "name": "_symbol",
- "type": "string"
- }
- ],
- "name": "setTokenSymbol",
- "outputs": [],
- "payable": false,
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "name": "newOwner",
- "type": "address"
- }
- ],
- "name": "transferOwnership",
- "outputs": [],
- "payable": false,
- "type": "function"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "name": "token",
- "type": "address"
- },
- {
- "indexed": false,
- "name": "name",
- "type": "string"
- },
- {
- "indexed": false,
- "name": "symbol",
- "type": "string"
- },
- {
- "indexed": false,
- "name": "decimals",
- "type": "uint8"
- },
- {
- "indexed": false,
- "name": "ipfsHash",
- "type": "bytes"
- },
- {
- "indexed": false,
- "name": "swarmHash",
- "type": "bytes"
- }
- ],
- "name": "LogAddToken",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "name": "token",
- "type": "address"
- },
- {
- "indexed": false,
- "name": "name",
- "type": "string"
- },
- {
- "indexed": false,
- "name": "symbol",
- "type": "string"
- },
- {
- "indexed": false,
- "name": "decimals",
- "type": "uint8"
- },
- {
- "indexed": false,
- "name": "ipfsHash",
- "type": "bytes"
- },
- {
- "indexed": false,
- "name": "swarmHash",
- "type": "bytes"
- }
- ],
- "name": "LogRemoveToken",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "name": "token",
- "type": "address"
- },
- {
- "indexed": false,
- "name": "oldName",
- "type": "string"
- },
- {
- "indexed": false,
- "name": "newName",
- "type": "string"
- }
- ],
- "name": "LogTokenNameChange",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "name": "token",
- "type": "address"
- },
- {
- "indexed": false,
- "name": "oldSymbol",
- "type": "string"
- },
- {
- "indexed": false,
- "name": "newSymbol",
- "type": "string"
- }
- ],
- "name": "LogTokenSymbolChange",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "name": "token",
- "type": "address"
- },
- {
- "indexed": false,
- "name": "oldIpfsHash",
- "type": "bytes"
- },
- {
- "indexed": false,
- "name": "newIpfsHash",
- "type": "bytes"
- }
- ],
- "name": "LogTokenIpfsHashChange",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "name": "token",
- "type": "address"
- },
- {
- "indexed": false,
- "name": "oldSwarmHash",
- "type": "bytes"
- },
- {
- "indexed": false,
- "name": "newSwarmHash",
- "type": "bytes"
- }
- ],
- "name": "LogTokenSwarmHashChange",
- "type": "event"
- }
- ],
- "networks": {
- "1": {
- "address": "0x926a74c5c36adf004c87399e65f75628b0f98d2c"
- },
- "3": {
- "address": "0x6b1a50f0bb5a7995444bd3877b22dc89c62843ed"
- },
- "4": {
- "address": "0x4e9aad8184de8833365fea970cd9149372fdf1e6"
- },
- "42": {
- "address": "0xf18e504561f4347bea557f3d4558f559dddbae7f"
- },
- "50": {
- "address": "0x0b1ba0af832d7c05fd64161e0db78e85978e8082"
- }
- }
-}
diff --git a/packages/order-watcher/src/compact_artifacts/TokenTransferProxy.json b/packages/order-watcher/src/compact_artifacts/TokenTransferProxy.json
deleted file mode 100644
index 8cf551ddb..000000000
--- a/packages/order-watcher/src/compact_artifacts/TokenTransferProxy.json
+++ /dev/null
@@ -1,187 +0,0 @@
-{
- "contract_name": "TokenTransferProxy",
- "abi": [
- {
- "constant": false,
- "inputs": [
- {
- "name": "token",
- "type": "address"
- },
- {
- "name": "from",
- "type": "address"
- },
- {
- "name": "to",
- "type": "address"
- },
- {
- "name": "value",
- "type": "uint256"
- }
- ],
- "name": "transferFrom",
- "outputs": [
- {
- "name": "",
- "type": "bool"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "name": "target",
- "type": "address"
- }
- ],
- "name": "addAuthorizedAddress",
- "outputs": [],
- "payable": false,
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "name": "",
- "type": "uint256"
- }
- ],
- "name": "authorities",
- "outputs": [
- {
- "name": "",
- "type": "address"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "name": "target",
- "type": "address"
- }
- ],
- "name": "removeAuthorizedAddress",
- "outputs": [],
- "payable": false,
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [],
- "name": "owner",
- "outputs": [
- {
- "name": "",
- "type": "address"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "name": "",
- "type": "address"
- }
- ],
- "name": "authorized",
- "outputs": [
- {
- "name": "",
- "type": "bool"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [],
- "name": "getAuthorizedAddresses",
- "outputs": [
- {
- "name": "",
- "type": "address[]"
- }
- ],
- "payable": false,
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "name": "newOwner",
- "type": "address"
- }
- ],
- "name": "transferOwnership",
- "outputs": [],
- "payable": false,
- "type": "function"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "name": "target",
- "type": "address"
- },
- {
- "indexed": true,
- "name": "caller",
- "type": "address"
- }
- ],
- "name": "LogAuthorizedAddressAdded",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "name": "target",
- "type": "address"
- },
- {
- "indexed": true,
- "name": "caller",
- "type": "address"
- }
- ],
- "name": "LogAuthorizedAddressRemoved",
- "type": "event"
- }
- ],
- "networks": {
- "1": {
- "address": "0x8da0d80f5007ef1e431dd2127178d224e32c2ef4"
- },
- "3": {
- "address": "0x4e9aad8184de8833365fea970cd9149372fdf1e6"
- },
- "4": {
- "address": "0xa8e9fa8f91e5ae138c74648c9c304f1c75003a8d"
- },
- "42": {
- "address": "0x087eed4bc1ee3de49befbd66c662b434b15d49d4"
- },
- "50": {
- "address": "0x1dc4c1cefef38a777b15aa20260a54e584b16c48"
- }
- }
-}
diff --git a/packages/order-watcher/src/compact_artifacts/WETH9.json b/packages/order-watcher/src/compact_artifacts/WETH9.json
new file mode 100644
index 000000000..f635276a1
--- /dev/null
+++ b/packages/order-watcher/src/compact_artifacts/WETH9.json
@@ -0,0 +1,100 @@
+{
+ "contract_name": "WETH9",
+ "abi": [
+ {
+ "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"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "name": "_owner",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "name": "_value",
+ "type": "uint256"
+ }
+ ],
+ "name": "Deposit",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "name": "_owner",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "name": "_value",
+ "type": "uint256"
+ }
+ ],
+ "name": "Withdrawal",
+ "type": "event"
+ }
+ ],
+ "networks": {
+ "1": {
+ "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"
+ },
+ "3": {
+ "address": "0xc00fd9820cd2898cc4c054b7bf142de637ad129a"
+ },
+ "4": {
+ "address": "0xc778417e063141139fce010982780140aa0cd5ab"
+ },
+ "42": {
+ "address": "0x653e49e301e508a13237c0ddc98ae7d4cd2667a1"
+ },
+ "50": {
+ "address": "0x871dd7c2b4b25e1aa18728e9d5f2af4c4e431f5c"
+ }
+ }
+}
diff --git a/packages/order-watcher/src/compact_artifacts/ZRX.json b/packages/order-watcher/src/compact_artifacts/ZRX.json
deleted file mode 100644
index e40b8f268..000000000
--- a/packages/order-watcher/src/compact_artifacts/ZRX.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "contract_name": "ZRX",
- "networks": {
- "1": {
- "address": "0xe41d2489571d322189246dafa5ebde1f4699f498"
- },
- "3": {
- "address": "0xa8e9fa8f91e5ae138c74648c9c304f1c75003a8d"
- },
- "4": {
- "address": "0x00f58d6d585f84b2d7267940cede30ce2fe6eae8"
- },
- "42": {
- "address": "0x6ff6c0ff1d68b964901f986d4c9fa3ac68346570"
- },
- "50": {
- "address": "0x1d7022f5b17d2f8b695918fb48fa1089c9f85401"
- }
- }
-}
diff --git a/packages/order-watcher/src/fetchers/asset_balance_and_proxy_allowance_fetcher.ts b/packages/order-watcher/src/fetchers/asset_balance_and_proxy_allowance_fetcher.ts
new file mode 100644
index 000000000..a1de22a5e
--- /dev/null
+++ b/packages/order-watcher/src/fetchers/asset_balance_and_proxy_allowance_fetcher.ts
@@ -0,0 +1,74 @@
+// tslint:disable:no-unnecessary-type-assertion
+import { BlockParamLiteral, ERC20TokenWrapper, ERC721TokenWrapper } from '@0xproject/contract-wrappers';
+import { AbstractBalanceAndProxyAllowanceFetcher, assetDataUtils } from '@0xproject/order-utils';
+import { AssetProxyId, ERC20AssetData, ERC721AssetData } from '@0xproject/types';
+import { BigNumber } from '@0xproject/utils';
+
+export class AssetBalanceAndProxyAllowanceFetcher implements AbstractBalanceAndProxyAllowanceFetcher {
+ private readonly _erc20Token: ERC20TokenWrapper;
+ private readonly _erc721Token: ERC721TokenWrapper;
+ private readonly _stateLayer: BlockParamLiteral;
+ constructor(erc20Token: ERC20TokenWrapper, erc721Token: ERC721TokenWrapper, stateLayer: BlockParamLiteral) {
+ this._erc20Token = erc20Token;
+ this._erc721Token = erc721Token;
+ this._stateLayer = stateLayer;
+ }
+ public async getBalanceAsync(assetData: string, userAddress: string): Promise<BigNumber> {
+ const decodedAssetData = assetDataUtils.decodeAssetDataOrThrow(assetData);
+ if (decodedAssetData.assetProxyId === AssetProxyId.ERC20) {
+ const decodedERC20AssetData = decodedAssetData as ERC20AssetData;
+ const balance = await this._erc20Token.getBalanceAsync(decodedERC20AssetData.tokenAddress, userAddress, {
+ defaultBlock: this._stateLayer,
+ });
+ return balance;
+ } else {
+ const decodedERC721AssetData = decodedAssetData as ERC721AssetData;
+ const tokenOwner = await this._erc721Token.getOwnerOfAsync(
+ decodedERC721AssetData.tokenAddress,
+ decodedERC721AssetData.tokenId,
+ {
+ defaultBlock: this._stateLayer,
+ },
+ );
+ const balance = tokenOwner === userAddress ? new BigNumber(1) : new BigNumber(0);
+ return balance;
+ }
+ }
+ public async getProxyAllowanceAsync(assetData: string, userAddress: string): Promise<BigNumber> {
+ const decodedAssetData = assetDataUtils.decodeAssetDataOrThrow(assetData);
+ if (decodedAssetData.assetProxyId === AssetProxyId.ERC20) {
+ const decodedERC20AssetData = decodedAssetData as ERC20AssetData;
+ const proxyAllowance = await this._erc20Token.getProxyAllowanceAsync(
+ decodedERC20AssetData.tokenAddress,
+ userAddress,
+ {
+ defaultBlock: this._stateLayer,
+ },
+ );
+ return proxyAllowance;
+ } else {
+ const decodedERC721AssetData = decodedAssetData as ERC721AssetData;
+
+ const isApprovedForAll = await this._erc721Token.isProxyApprovedForAllAsync(
+ decodedERC721AssetData.tokenAddress,
+ userAddress,
+ {
+ defaultBlock: this._stateLayer,
+ },
+ );
+ if (isApprovedForAll) {
+ return new BigNumber(this._erc20Token.UNLIMITED_ALLOWANCE_IN_BASE_UNITS);
+ } else {
+ const isApproved = await this._erc721Token.isProxyApprovedAsync(
+ decodedERC721AssetData.tokenAddress,
+ decodedERC721AssetData.tokenId,
+ {
+ defaultBlock: this._stateLayer,
+ },
+ );
+ const proxyAllowance = isApproved ? new BigNumber(1) : new BigNumber(0);
+ return proxyAllowance;
+ }
+ }
+ }
+}
diff --git a/packages/order-watcher/src/fetchers/order_filled_cancelled_fetcher.ts b/packages/order-watcher/src/fetchers/order_filled_cancelled_fetcher.ts
new file mode 100644
index 000000000..bfad1a48c
--- /dev/null
+++ b/packages/order-watcher/src/fetchers/order_filled_cancelled_fetcher.ts
@@ -0,0 +1,27 @@
+// tslint:disable:no-unnecessary-type-assertion
+import { BlockParamLiteral, ExchangeWrapper } from '@0xproject/contract-wrappers';
+import { AbstractOrderFilledCancelledFetcher } from '@0xproject/order-utils';
+import { BigNumber } from '@0xproject/utils';
+
+export class OrderFilledCancelledFetcher implements AbstractOrderFilledCancelledFetcher {
+ private readonly _exchange: ExchangeWrapper;
+ private readonly _stateLayer: BlockParamLiteral;
+ constructor(exchange: ExchangeWrapper, stateLayer: BlockParamLiteral) {
+ this._exchange = exchange;
+ this._stateLayer = stateLayer;
+ }
+ public async getFilledTakerAmountAsync(orderHash: string): Promise<BigNumber> {
+ const filledTakerAmount = this._exchange.getFilledTakerAssetAmountAsync(orderHash, {
+ defaultBlock: this._stateLayer,
+ });
+ return filledTakerAmount;
+ }
+ public async isOrderCancelledAsync(orderHash: string): Promise<boolean> {
+ const isCancelled = await this._exchange.isCancelledAsync(orderHash);
+ return isCancelled;
+ }
+ public getZRXAssetData(): string {
+ const zrxAssetData = this._exchange.getZRXAssetData();
+ return zrxAssetData;
+ }
+}
diff --git a/packages/order-watcher/src/index.ts b/packages/order-watcher/src/index.ts
index 390003b1d..5f84554c8 100644
--- a/packages/order-watcher/src/index.ts
+++ b/packages/order-watcher/src/index.ts
@@ -4,4 +4,5 @@ export { OrderStateValid, OrderStateInvalid, OrderState } from '@0xproject/types
export { OnOrderStateChangeCallback, OrderWatcherConfig } from './types';
-export { BlockParamLiteral, BlockParam, Order, Provider, SignedOrder } from '@0xproject/types';
+export { Order, SignedOrder } from '@0xproject/types';
+export { BlockParamLiteral, BlockParam, Provider } from 'ethereum-types';
diff --git a/packages/order-watcher/src/order_watcher/collision_resistant_abi_decoder.ts b/packages/order-watcher/src/order_watcher/collision_resistant_abi_decoder.ts
new file mode 100644
index 000000000..e13663c7a
--- /dev/null
+++ b/packages/order-watcher/src/order_watcher/collision_resistant_abi_decoder.ts
@@ -0,0 +1,54 @@
+import { AbiDecoder } from '@0xproject/utils';
+import { ContractAbi, DecodedLogArgs, LogEntry, LogWithDecodedArgs, RawLog } from 'ethereum-types';
+
+const TOKEN_TYPE_COLLISION = `Token can't be marked as ERC20 and ERC721 at the same time`;
+
+/**
+ * ERC20 and ERC721 have some events with different args but colliding signature.
+ * For exmaple:
+ * Transfer(_from address, _to address, _value uint256)
+ * Transfer(_from address, _to address, _tokenId uint256)
+ * Both have the signature:
+ * Transfer(address,address,uint256)
+ *
+ * In order to correctly decode those events we need to know the token type by address in advance.
+ * You can pass it by calling `this.addERC20Token(address)` or `this.addERC721Token(address)`
+ */
+export class CollisionResistanceAbiDecoder {
+ private readonly _erc20AbiDecoder: AbiDecoder;
+ private readonly _erc721AbiDecoder: AbiDecoder;
+ private readonly _restAbiDecoder: AbiDecoder;
+ private readonly _knownERC20Tokens = new Set();
+ private readonly _knownERC721Tokens = new Set();
+ constructor(erc20Abi: ContractAbi, erc721Abi: ContractAbi, abis: ContractAbi[]) {
+ this._erc20AbiDecoder = new AbiDecoder([erc20Abi]);
+ this._erc721AbiDecoder = new AbiDecoder([erc721Abi]);
+ this._restAbiDecoder = new AbiDecoder(abis);
+ }
+ public tryToDecodeLogOrNoop<ArgsType extends DecodedLogArgs>(log: LogEntry): LogWithDecodedArgs<ArgsType> | RawLog {
+ if (this._knownERC20Tokens.has(log.address)) {
+ const maybeDecodedERC20Log = this._erc20AbiDecoder.tryToDecodeLogOrNoop(log);
+ return maybeDecodedERC20Log;
+ } else if (this._knownERC721Tokens.has(log.address)) {
+ const maybeDecodedERC721Log = this._erc721AbiDecoder.tryToDecodeLogOrNoop(log);
+ return maybeDecodedERC721Log;
+ } else {
+ const maybeDecodedLog = this._restAbiDecoder.tryToDecodeLogOrNoop(log);
+ return maybeDecodedLog;
+ }
+ }
+ // Hints the ABI decoder that a particular token address is ERC20 and events from it should be decoded as ERC20 events
+ public addERC20Token(address: string): void {
+ if (this._knownERC721Tokens.has(address)) {
+ throw new Error(TOKEN_TYPE_COLLISION);
+ }
+ this._knownERC20Tokens.add(address);
+ }
+ // Hints the ABI decoder that a particular token address is ERC721 and events from it should be decoded as ERC721 events
+ public addERC721Token(address: string): void {
+ if (this._knownERC20Tokens.has(address)) {
+ throw new Error(TOKEN_TYPE_COLLISION);
+ }
+ this._knownERC721Tokens.add(address);
+ }
+}
diff --git a/packages/order-watcher/src/order_watcher/dependent_order_hashes_tracker.ts b/packages/order-watcher/src/order_watcher/dependent_order_hashes_tracker.ts
new file mode 100644
index 000000000..cc70bd5d7
--- /dev/null
+++ b/packages/order-watcher/src/order_watcher/dependent_order_hashes_tracker.ts
@@ -0,0 +1,230 @@
+// tslint:disable:no-unnecessary-type-assertion
+import { assetDataUtils, orderHashUtils } from '@0xproject/order-utils';
+import { AssetProxyId, ERC20AssetData, ERC721AssetData, SignedOrder } from '@0xproject/types';
+import { BigNumber } from '@0xproject/utils';
+import * as _ from 'lodash';
+
+export interface OrderHashesByMakerAddress {
+ [makerAddress: string]: Set<string>;
+}
+
+export interface OrderHashesByERC20ByMakerAddress {
+ [makerAddress: string]: {
+ [erc20TokenAddress: string]: Set<string>;
+ };
+}
+
+export interface OrderHashesByERC721AddressByTokenIdByMakerAddress {
+ [makerAddress: string]: {
+ [erc721TokenAddress: string]: {
+ // Ideally erc721TokenId should be a BigNumber, but it's not a valid index type so we just convert it to a string before using it as an index
+ [erc721TokenId: string]: Set<string>;
+ };
+ };
+}
+
+/**
+ */
+export class DependentOrderHashesTracker {
+ private readonly _zrxTokenAddress: string;
+ // `_orderHashesByMakerAddress` is redundant and could be generated from
+ // `_orderHashesByERC20ByMakerAddress` and `_orderHashesByERC721AddressByTokenIdByMakerAddress`
+ // on the fly by merging all the entries together but it's more complex and computationally heavy.
+ // We might change that in future if we're move memory-constrained.
+ private readonly _orderHashesByMakerAddress: OrderHashesByMakerAddress = {};
+ private readonly _orderHashesByERC20ByMakerAddress: OrderHashesByERC20ByMakerAddress = {};
+ private readonly _orderHashesByERC721AddressByTokenIdByMakerAddress: OrderHashesByERC721AddressByTokenIdByMakerAddress = {};
+ constructor(zrxTokenAddress: string) {
+ this._zrxTokenAddress = zrxTokenAddress;
+ }
+ public getDependentOrderHashesByERC721ByMaker(makerAddress: string, tokenAddress: string): string[] {
+ const orderHashSets = _.values(
+ this._orderHashesByERC721AddressByTokenIdByMakerAddress[makerAddress][tokenAddress],
+ );
+ const orderHashList = _.reduce(
+ orderHashSets,
+ (accumulator, orderHashSet) => [...accumulator, ...orderHashSet],
+ [] as string[],
+ );
+ const uniqueOrderHashList = _.uniq(orderHashList);
+ return uniqueOrderHashList;
+ }
+ public getDependentOrderHashesByMaker(makerAddress: string): string[] {
+ const dependentOrderHashes = Array.from(this._orderHashesByMakerAddress[makerAddress]);
+ return dependentOrderHashes;
+ }
+ public getDependentOrderHashesByAssetDataByMaker(makerAddress: string, assetData: string): string[] {
+ const decodedAssetData = assetDataUtils.decodeAssetDataOrThrow(assetData);
+ const dependentOrderHashes =
+ decodedAssetData.assetProxyId === AssetProxyId.ERC20
+ ? this._getDependentOrderHashesByERC20AssetData(makerAddress, assetData)
+ : this._getDependentOrderHashesByERC721AssetData(makerAddress, assetData);
+ return dependentOrderHashes;
+ }
+ public addToDependentOrderHashes(signedOrder: SignedOrder): void {
+ const decodedMakerAssetData = assetDataUtils.decodeAssetDataOrThrow(signedOrder.makerAssetData);
+ if (decodedMakerAssetData.assetProxyId === AssetProxyId.ERC20) {
+ this._addToERC20DependentOrderHashes(signedOrder, (decodedMakerAssetData as ERC20AssetData).tokenAddress);
+ } else {
+ this._addToERC721DependentOrderHashes(
+ signedOrder,
+ (decodedMakerAssetData as ERC721AssetData).tokenAddress,
+ (decodedMakerAssetData as ERC721AssetData).tokenId,
+ );
+ }
+ this._addToERC20DependentOrderHashes(signedOrder, this._zrxTokenAddress);
+ this._addToMakerDependentOrderHashes(signedOrder);
+ }
+ public removeFromDependentOrderHashes(signedOrder: SignedOrder): void {
+ const decodedMakerAssetData = assetDataUtils.decodeAssetDataOrThrow(signedOrder.makerAssetData);
+ if (decodedMakerAssetData.assetProxyId === AssetProxyId.ERC20) {
+ this._removeFromERC20DependentOrderhashes(
+ signedOrder,
+ (decodedMakerAssetData as ERC20AssetData).tokenAddress,
+ );
+ } else {
+ this._removeFromERC721DependentOrderhashes(
+ signedOrder,
+ (decodedMakerAssetData as ERC721AssetData).tokenAddress,
+ (decodedMakerAssetData as ERC721AssetData).tokenId,
+ );
+ }
+ this._removeFromERC20DependentOrderhashes(signedOrder, this._zrxTokenAddress);
+ this._removeFromMakerDependentOrderhashes(signedOrder);
+ }
+ private _getDependentOrderHashesByERC20AssetData(makerAddress: string, erc20AssetData: string): string[] {
+ const tokenAddress = assetDataUtils.decodeERC20AssetData(erc20AssetData).tokenAddress;
+ let dependentOrderHashes: string[] = [];
+ if (
+ !_.isUndefined(this._orderHashesByERC20ByMakerAddress[makerAddress]) &&
+ !_.isUndefined(this._orderHashesByERC20ByMakerAddress[makerAddress][tokenAddress])
+ ) {
+ dependentOrderHashes = Array.from(this._orderHashesByERC20ByMakerAddress[makerAddress][tokenAddress]);
+ }
+ return dependentOrderHashes;
+ }
+ private _getDependentOrderHashesByERC721AssetData(makerAddress: string, erc721AssetData: string): string[] {
+ const tokenAddress = assetDataUtils.decodeERC721AssetData(erc721AssetData).tokenAddress;
+ const tokenId = assetDataUtils.decodeERC721AssetData(erc721AssetData).tokenId;
+ let dependentOrderHashes: string[] = [];
+ if (
+ !_.isUndefined(this._orderHashesByERC721AddressByTokenIdByMakerAddress[makerAddress]) &&
+ !_.isUndefined(this._orderHashesByERC721AddressByTokenIdByMakerAddress[makerAddress][tokenAddress]) &&
+ !_.isUndefined(
+ this._orderHashesByERC721AddressByTokenIdByMakerAddress[makerAddress][tokenAddress][tokenId.toString()],
+ )
+ ) {
+ dependentOrderHashes = Array.from(
+ this._orderHashesByERC721AddressByTokenIdByMakerAddress[makerAddress][tokenAddress][tokenId.toString()],
+ );
+ }
+ return dependentOrderHashes;
+ }
+ private _addToERC20DependentOrderHashes(signedOrder: SignedOrder, erc20TokenAddress: string): void {
+ const orderHash = orderHashUtils.getOrderHashHex(signedOrder);
+ if (_.isUndefined(this._orderHashesByERC20ByMakerAddress[signedOrder.makerAddress])) {
+ this._orderHashesByERC20ByMakerAddress[signedOrder.makerAddress] = {};
+ }
+ if (_.isUndefined(this._orderHashesByERC20ByMakerAddress[signedOrder.makerAddress][erc20TokenAddress])) {
+ this._orderHashesByERC20ByMakerAddress[signedOrder.makerAddress][erc20TokenAddress] = new Set();
+ }
+ this._orderHashesByERC20ByMakerAddress[signedOrder.makerAddress][erc20TokenAddress].add(orderHash);
+ }
+ private _addToERC721DependentOrderHashes(
+ signedOrder: SignedOrder,
+ erc721TokenAddress: string,
+ tokenId: BigNumber,
+ ): void {
+ const orderHash = orderHashUtils.getOrderHashHex(signedOrder);
+ if (_.isUndefined(this._orderHashesByERC721AddressByTokenIdByMakerAddress[signedOrder.makerAddress])) {
+ this._orderHashesByERC721AddressByTokenIdByMakerAddress[signedOrder.makerAddress] = {};
+ }
+
+ if (
+ _.isUndefined(
+ this._orderHashesByERC721AddressByTokenIdByMakerAddress[signedOrder.makerAddress][erc721TokenAddress],
+ )
+ ) {
+ this._orderHashesByERC721AddressByTokenIdByMakerAddress[signedOrder.makerAddress][erc721TokenAddress] = {};
+ }
+
+ if (
+ _.isUndefined(
+ this._orderHashesByERC721AddressByTokenIdByMakerAddress[signedOrder.makerAddress][erc721TokenAddress][
+ tokenId.toString()
+ ],
+ )
+ ) {
+ this._orderHashesByERC721AddressByTokenIdByMakerAddress[signedOrder.makerAddress][erc721TokenAddress][
+ tokenId.toString()
+ ] = new Set();
+ }
+
+ this._orderHashesByERC721AddressByTokenIdByMakerAddress[signedOrder.makerAddress][erc721TokenAddress][
+ tokenId.toString()
+ ].add(orderHash);
+ }
+ private _addToMakerDependentOrderHashes(signedOrder: SignedOrder): void {
+ const orderHash = orderHashUtils.getOrderHashHex(signedOrder);
+ if (_.isUndefined(this._orderHashesByMakerAddress[signedOrder.makerAddress])) {
+ this._orderHashesByMakerAddress[signedOrder.makerAddress] = new Set();
+ }
+ this._orderHashesByMakerAddress[signedOrder.makerAddress].add(orderHash);
+ }
+ private _removeFromERC20DependentOrderhashes(signedOrder: SignedOrder, erc20TokenAddress: string): void {
+ const orderHash = orderHashUtils.getOrderHashHex(signedOrder);
+ this._orderHashesByERC20ByMakerAddress[signedOrder.makerAddress][erc20TokenAddress].delete(orderHash);
+
+ if (_.isEmpty(this._orderHashesByERC20ByMakerAddress[signedOrder.makerAddress][erc20TokenAddress])) {
+ delete this._orderHashesByERC20ByMakerAddress[signedOrder.makerAddress][erc20TokenAddress];
+ }
+
+ if (_.isEmpty(this._orderHashesByERC20ByMakerAddress[signedOrder.makerAddress])) {
+ delete this._orderHashesByERC20ByMakerAddress[signedOrder.makerAddress];
+ }
+ }
+ private _removeFromERC721DependentOrderhashes(
+ signedOrder: SignedOrder,
+ erc721TokenAddress: string,
+ tokenId: BigNumber,
+ ): void {
+ const orderHash = orderHashUtils.getOrderHashHex(signedOrder);
+ this._orderHashesByERC721AddressByTokenIdByMakerAddress[signedOrder.makerAddress][erc721TokenAddress][
+ tokenId.toString()
+ ].delete(orderHash);
+
+ if (
+ _.isEmpty(
+ this._orderHashesByERC721AddressByTokenIdByMakerAddress[signedOrder.makerAddress][erc721TokenAddress][
+ tokenId.toString()
+ ],
+ )
+ ) {
+ delete this._orderHashesByERC721AddressByTokenIdByMakerAddress[signedOrder.makerAddress][
+ erc721TokenAddress
+ ][tokenId.toString()];
+ }
+
+ if (
+ _.isEmpty(
+ this._orderHashesByERC721AddressByTokenIdByMakerAddress[signedOrder.makerAddress][erc721TokenAddress],
+ )
+ ) {
+ delete this._orderHashesByERC721AddressByTokenIdByMakerAddress[signedOrder.makerAddress][
+ erc721TokenAddress
+ ];
+ }
+
+ if (_.isEmpty(this._orderHashesByERC721AddressByTokenIdByMakerAddress[signedOrder.makerAddress])) {
+ delete this._orderHashesByERC721AddressByTokenIdByMakerAddress[signedOrder.makerAddress];
+ }
+ }
+ private _removeFromMakerDependentOrderhashes(signedOrder: SignedOrder): void {
+ const orderHash = orderHashUtils.getOrderHashHex(signedOrder);
+ this._orderHashesByMakerAddress[signedOrder.makerAddress].delete(orderHash);
+
+ if (_.isEmpty(this._orderHashesByMakerAddress[signedOrder.makerAddress])) {
+ delete this._orderHashesByMakerAddress[signedOrder.makerAddress];
+ }
+ }
+}
diff --git a/packages/order-watcher/src/order_watcher/event_watcher.ts b/packages/order-watcher/src/order_watcher/event_watcher.ts
index 08ecf81cb..9509c75de 100644
--- a/packages/order-watcher/src/order_watcher/event_watcher.ts
+++ b/packages/order-watcher/src/order_watcher/event_watcher.ts
@@ -1,6 +1,6 @@
-import { BlockParamLiteral, LogEntry } from '@0xproject/types';
import { intervalUtils, logUtils } from '@0xproject/utils';
import { Web3Wrapper } from '@0xproject/web3-wrapper';
+import { BlockParamLiteral, LogEntry, Provider } from 'ethereum-types';
import { Block, BlockAndLogStreamer, Log } from 'ethereumjs-blockstream';
import * as _ from 'lodash';
@@ -19,22 +19,22 @@ enum LogEventState {
* depth.
*/
export class EventWatcher {
- private _web3Wrapper: Web3Wrapper;
+ private readonly _web3Wrapper: Web3Wrapper;
+ private readonly _stateLayer: BlockParamLiteral;
+ private readonly _isVerbose: boolean;
private _blockAndLogStreamerIfExists: BlockAndLogStreamer<Block, Log> | undefined;
private _blockAndLogStreamIntervalIfExists?: NodeJS.Timer;
private _onLogAddedSubscriptionToken: string | undefined;
private _onLogRemovedSubscriptionToken: string | undefined;
- private _pollingIntervalMs: number;
- private _stateLayer: BlockParamLiteral;
- private _isVerbose: boolean;
+ private readonly _pollingIntervalMs: number;
constructor(
- web3Wrapper: Web3Wrapper,
+ provider: Provider,
pollingIntervalIfExistsMs: undefined | number,
- stateLayer: BlockParamLiteral = BlockParamLiteral.Latest,
+ stateLayer: BlockParamLiteral,
isVerbose: boolean,
) {
this._isVerbose = isVerbose;
- this._web3Wrapper = web3Wrapper;
+ this._web3Wrapper = new Web3Wrapper(provider);
this._stateLayer = stateLayer;
this._pollingIntervalMs = _.isUndefined(pollingIntervalIfExistsMs)
? DEFAULT_EVENT_POLLING_INTERVAL_MS
@@ -61,13 +61,9 @@ export class EventWatcher {
if (!_.isUndefined(this._blockAndLogStreamerIfExists)) {
throw new Error(OrderWatcherError.SubscriptionAlreadyPresent);
}
- const eventFilter = {
- fromBlock: this._stateLayer,
- toBlock: this._stateLayer,
- };
this._blockAndLogStreamerIfExists = new BlockAndLogStreamer(
- this._web3Wrapper.getBlockAsync.bind(this._web3Wrapper, this._stateLayer),
- this._web3Wrapper.getLogsAsync.bind(this._web3Wrapper, eventFilter),
+ this._web3Wrapper.getBlockAsync.bind(this._web3Wrapper),
+ this._web3Wrapper.getLogsAsync.bind(this._web3Wrapper),
this._onBlockAndLogStreamerError.bind(this),
);
const catchAllLogFilter = {};
@@ -104,7 +100,7 @@ export class EventWatcher {
await this._emitDifferencesAsync(log, isRemoved ? LogEventState.Removed : LogEventState.Added, callback);
}
private async _reconcileBlockAsync(): Promise<void> {
- const latestBlock = await this._web3Wrapper.getBlockAsync(BlockParamLiteral.Latest);
+ const latestBlock = await this._web3Wrapper.getBlockAsync(this._stateLayer);
// We need to coerce to Block type cause Web3.Block includes types for mempool blocks
if (!_.isUndefined(this._blockAndLogStreamerIfExists)) {
// If we clear the interval while fetching the block - this._blockAndLogStreamer will be undefined
diff --git a/packages/order-watcher/src/order_watcher/expiration_watcher.ts b/packages/order-watcher/src/order_watcher/expiration_watcher.ts
index 31fda7dca..6eadf14c7 100644
--- a/packages/order-watcher/src/order_watcher/expiration_watcher.ts
+++ b/packages/order-watcher/src/order_watcher/expiration_watcher.ts
@@ -13,10 +13,10 @@ const DEFAULT_ORDER_EXPIRATION_CHECKING_INTERVAL_MS = 50;
* It stores them in a min heap by expiration time and checks for expired ones every `orderExpirationCheckingIntervalMs`
*/
export class ExpirationWatcher {
- private _orderHashByExpirationRBTree: RBTree<string>;
- private _expiration: { [orderHash: string]: BigNumber } = {};
- private _orderExpirationCheckingIntervalMs: number;
- private _expirationMarginMs: number;
+ private readonly _orderHashByExpirationRBTree: RBTree<string>;
+ private readonly _expiration: { [orderHash: string]: BigNumber } = {};
+ private readonly _orderExpirationCheckingIntervalMs: number;
+ private readonly _expirationMarginMs: number;
private _orderExpirationCheckingIntervalIdIfExists?: NodeJS.Timer;
constructor(expirationMarginIfExistsMs?: number, orderExpirationCheckingIntervalIfExistsMs?: number) {
this._orderExpirationCheckingIntervalMs =
@@ -44,7 +44,7 @@ export class ExpirationWatcher {
this._orderExpirationCheckingIntervalIdIfExists = intervalUtils.setInterval(
this._pruneExpiredOrders.bind(this, callback),
this._orderExpirationCheckingIntervalMs,
- _.noop, // _pruneExpiredOrders never throws
+ _.noop.bind(_), // _pruneExpiredOrders never throws
);
}
public unsubscribe(): void {
@@ -68,8 +68,8 @@ export class ExpirationWatcher {
private _pruneExpiredOrders(callback: (orderHash: string) => void): void {
const currentUnixTimestampMs = utils.getCurrentUnixTimestampMs();
while (true) {
- const hasTrakedOrders = this._orderHashByExpirationRBTree.size === 0;
- if (hasTrakedOrders) {
+ const hasNoTrackedOrders = this._orderHashByExpirationRBTree.size === 0;
+ if (hasNoTrackedOrders) {
break;
}
const nextOrderHashToExpire = this._orderHashByExpirationRBTree.min();
diff --git a/packages/order-watcher/src/order_watcher/order_watcher.ts b/packages/order-watcher/src/order_watcher/order_watcher.ts
index 999c1c79e..2dfbd4230 100644
--- a/packages/order-watcher/src/order_watcher/order_watcher.ts
+++ b/packages/order-watcher/src/order_watcher/order_watcher.ts
@@ -1,55 +1,53 @@
+// tslint:disable:no-unnecessary-type-assertion
import {
- BalanceAndProxyAllowanceLazyStore,
ContractWrappers,
- OrderFilledCancelledLazyStore,
+ ERC20TokenApprovalEventArgs,
+ ERC20TokenEventArgs,
+ ERC20TokenEvents,
+ ERC20TokenTransferEventArgs,
+ ERC721TokenApprovalEventArgs,
+ ERC721TokenApprovalForAllEventArgs,
+ ERC721TokenEventArgs,
+ ERC721TokenEvents,
+ ERC721TokenTransferEventArgs,
+ ExchangeCancelEventArgs,
+ ExchangeCancelUpToEventArgs,
+ ExchangeEventArgs,
+ ExchangeEvents,
+ ExchangeFillEventArgs,
+ WETH9DepositEventArgs,
+ WETH9EventArgs,
+ WETH9Events,
+ WETH9WithdrawalEventArgs,
} from '@0xproject/contract-wrappers';
import { schemas } from '@0xproject/json-schemas';
-import { getOrderHashHex, OrderStateUtils } from '@0xproject/order-utils';
import {
- BlockParamLiteral,
- ExchangeContractErrs,
- LogEntryEvent,
- LogWithDecodedArgs,
- OrderState,
- Provider,
- SignedOrder,
-} from '@0xproject/types';
+ assetDataUtils,
+ BalanceAndProxyAllowanceLazyStore,
+ OrderFilledCancelledLazyStore,
+ orderHashUtils,
+ OrderStateUtils,
+} from '@0xproject/order-utils';
+import { AssetProxyId, ExchangeContractErrs, OrderState, SignedOrder } from '@0xproject/types';
import { errorUtils, intervalUtils } from '@0xproject/utils';
-import { Web3Wrapper } from '@0xproject/web3-wrapper';
+import { BlockParamLiteral, LogEntryEvent, LogWithDecodedArgs, Provider } from 'ethereum-types';
import * as _ from 'lodash';
import { artifacts } from '../artifacts';
-import {
- EtherTokenDepositEventArgs,
- EtherTokenEventArgs,
- EtherTokenEvents,
- EtherTokenWithdrawalEventArgs,
-} from '../generated_contract_wrappers/ether_token';
-import {
- ExchangeEventArgs,
- ExchangeEvents,
- ExchangeLogCancelEventArgs,
- ExchangeLogFillEventArgs,
-} from '../generated_contract_wrappers/exchange';
-import {
- TokenApprovalEventArgs,
- TokenEventArgs,
- TokenEvents,
- TokenTransferEventArgs,
-} from '../generated_contract_wrappers/token';
+import { AssetBalanceAndProxyAllowanceFetcher } from '../fetchers/asset_balance_and_proxy_allowance_fetcher';
+import { OrderFilledCancelledFetcher } from '../fetchers/order_filled_cancelled_fetcher';
+import { orderWatcherPartialConfigSchema } from '../schemas/order_watcher_partial_config_schema';
import { OnOrderStateChangeCallback, OrderWatcherConfig, OrderWatcherError } from '../types';
import { assert } from '../utils/assert';
+import { CollisionResistanceAbiDecoder } from './collision_resistant_abi_decoder';
+import { DependentOrderHashesTracker } from './dependent_order_hashes_tracker';
import { EventWatcher } from './event_watcher';
import { ExpirationWatcher } from './expiration_watcher';
-type ContractEventArgs = EtherTokenEventArgs | ExchangeEventArgs | TokenEventArgs;
+const MILLISECONDS_IN_A_SECOND = 1000;
-interface DependentOrderHashes {
- [makerAddress: string]: {
- [makerToken: string]: Set<string>;
- };
-}
+type ContractEventArgs = WETH9EventArgs | ExchangeEventArgs | ERC20TokenEventArgs | ERC721TokenEventArgs;
interface OrderByOrderHash {
[orderHash: string]: SignedOrder;
@@ -59,8 +57,15 @@ interface OrderStateByOrderHash {
[orderHash: string]: OrderState;
}
-// tslint:disable-next-line:custom-no-magic-numbers
-const DEFAULT_CLEANUP_JOB_INTERVAL_MS = 1000 * 60 * 60; // 1h
+const DEFAULT_ORDER_WATCHER_CONFIG: OrderWatcherConfig = {
+ orderExpirationCheckingIntervalMs: 50,
+ eventPollingIntervalMs: 200,
+ expirationMarginMs: 0,
+ // tslint:disable-next-line:custom-no-magic-numbers
+ cleanupJobIntervalMs: 1000 * 60 * 60, // 1h
+ isVerbose: true,
+};
+const STATE_LAYER = BlockParamLiteral.Latest;
/**
* This class includes all the functionality related to watching a set of orders
@@ -69,71 +74,86 @@ const DEFAULT_CLEANUP_JOB_INTERVAL_MS = 1000 * 60 * 60; // 1h
* the order should be deemed invalid.
*/
export class OrderWatcher {
- private _contractWrappers: ContractWrappers;
- private _orderStateByOrderHashCache: OrderStateByOrderHash = {};
- private _orderByOrderHash: OrderByOrderHash = {};
- private _dependentOrderHashes: DependentOrderHashes = {};
- private _callbackIfExists?: OnOrderStateChangeCallback;
- private _eventWatcher: EventWatcher;
- private _web3Wrapper: Web3Wrapper;
- private _expirationWatcher: ExpirationWatcher;
- private _orderStateUtils: OrderStateUtils;
- private _orderFilledCancelledLazyStore: OrderFilledCancelledLazyStore;
- private _balanceAndProxyAllowanceLazyStore: BalanceAndProxyAllowanceLazyStore;
- private _cleanupJobInterval: number;
+ private readonly _dependentOrderHashesTracker: DependentOrderHashesTracker;
+ private readonly _orderStateByOrderHashCache: OrderStateByOrderHash = {};
+ private readonly _orderByOrderHash: OrderByOrderHash = {};
+ private readonly _eventWatcher: EventWatcher;
+ private readonly _provider: Provider;
+ private readonly _collisionResistantAbiDecoder: CollisionResistanceAbiDecoder;
+ private readonly _expirationWatcher: ExpirationWatcher;
+ private readonly _orderStateUtils: OrderStateUtils;
+ private readonly _orderFilledCancelledLazyStore: OrderFilledCancelledLazyStore;
+ private readonly _balanceAndProxyAllowanceLazyStore: BalanceAndProxyAllowanceLazyStore;
+ private readonly _cleanupJobInterval: number;
private _cleanupJobIntervalIdIfExists?: NodeJS.Timer;
- constructor(provider: Provider, networkId: number, config?: OrderWatcherConfig) {
- this._web3Wrapper = new Web3Wrapper(provider);
- const artifactJSONs = _.values(artifacts);
- const abiArrays = _.map(artifactJSONs, artifact => artifact.abi);
- _.forEach(abiArrays, abi => {
- this._web3Wrapper.abiDecoder.addABI(abi);
- });
- this._contractWrappers = new ContractWrappers(provider, { networkId });
- const pollingIntervalIfExistsMs = _.isUndefined(config) ? undefined : config.eventPollingIntervalMs;
- const stateLayer =
- _.isUndefined(config) || _.isUndefined(config.stateLayer) ? BlockParamLiteral.Latest : config.stateLayer;
- const isVerbose = !_.isUndefined(config) && !_.isUndefined(config.isVerbose) ? config.isVerbose : false;
- this._eventWatcher = new EventWatcher(this._web3Wrapper, pollingIntervalIfExistsMs, stateLayer, isVerbose);
- this._balanceAndProxyAllowanceLazyStore = new BalanceAndProxyAllowanceLazyStore(
- this._contractWrappers.token,
- stateLayer,
+ private _callbackIfExists?: OnOrderStateChangeCallback;
+ constructor(
+ provider: Provider,
+ networkId: number,
+ partialConfig: Partial<OrderWatcherConfig> = DEFAULT_ORDER_WATCHER_CONFIG,
+ ) {
+ assert.isWeb3Provider('provider', provider);
+ assert.isNumber('networkId', networkId);
+ assert.doesConformToSchema('partialConfig', partialConfig, orderWatcherPartialConfigSchema);
+ const config = {
+ ...DEFAULT_ORDER_WATCHER_CONFIG,
+ ...partialConfig,
+ };
+
+ this._provider = provider;
+ this._collisionResistantAbiDecoder = new CollisionResistanceAbiDecoder(
+ artifacts.ERC20Token.abi,
+ artifacts.ERC721Token.abi,
+ [artifacts.EtherToken.abi, artifacts.Exchange.abi],
);
- this._orderFilledCancelledLazyStore = new OrderFilledCancelledLazyStore(
- this._contractWrappers.exchange,
- stateLayer,
+ const contractWrappers = new ContractWrappers(provider, { networkId });
+ this._eventWatcher = new EventWatcher(provider, config.eventPollingIntervalMs, STATE_LAYER, config.isVerbose);
+ const balanceAndProxyAllowanceFetcher = new AssetBalanceAndProxyAllowanceFetcher(
+ contractWrappers.erc20Token,
+ contractWrappers.erc721Token,
+ STATE_LAYER,
);
- this._orderStateUtils = new OrderStateUtils(
- this._balanceAndProxyAllowanceLazyStore,
- this._orderFilledCancelledLazyStore,
+ this._balanceAndProxyAllowanceLazyStore = new BalanceAndProxyAllowanceLazyStore(
+ balanceAndProxyAllowanceFetcher,
);
- const orderExpirationCheckingIntervalMsIfExists = _.isUndefined(config)
- ? undefined
- : config.orderExpirationCheckingIntervalMs;
+ const orderFilledCancelledFetcher = new OrderFilledCancelledFetcher(contractWrappers.exchange, STATE_LAYER);
+ this._orderFilledCancelledLazyStore = new OrderFilledCancelledLazyStore(orderFilledCancelledFetcher);
+ this._orderStateUtils = new OrderStateUtils(balanceAndProxyAllowanceFetcher, orderFilledCancelledFetcher);
const expirationMarginIfExistsMs = _.isUndefined(config) ? undefined : config.expirationMarginMs;
this._expirationWatcher = new ExpirationWatcher(
expirationMarginIfExistsMs,
- orderExpirationCheckingIntervalMsIfExists,
+ config.orderExpirationCheckingIntervalMs,
);
- this._cleanupJobInterval =
- _.isUndefined(config) || _.isUndefined(config.cleanupJobIntervalMs)
- ? DEFAULT_CLEANUP_JOB_INTERVAL_MS
- : config.cleanupJobIntervalMs;
+ this._cleanupJobInterval = config.cleanupJobIntervalMs;
+ const zrxTokenAddress = assetDataUtils.decodeERC20AssetData(orderFilledCancelledFetcher.getZRXAssetData())
+ .tokenAddress;
+ this._dependentOrderHashesTracker = new DependentOrderHashesTracker(zrxTokenAddress);
}
/**
* Add an order to the orderWatcher. Before the order is added, it's
* signature is verified.
* @param signedOrder The order you wish to start watching.
*/
- public addOrder(signedOrder: SignedOrder): void {
+ public async addOrderAsync(signedOrder: SignedOrder): Promise<void> {
assert.doesConformToSchema('signedOrder', signedOrder, schemas.signedOrderSchema);
- const orderHash = getOrderHashHex(signedOrder);
- assert.isValidSignature(orderHash, signedOrder.ecSignature, signedOrder.maker);
- this._orderByOrderHash[orderHash] = signedOrder;
- this._addToDependentOrderHashes(signedOrder, orderHash);
- const milisecondsInASecond = 1000;
- const expirationUnixTimestampMs = signedOrder.expirationUnixTimestampSec.times(milisecondsInASecond);
+ const orderHash = orderHashUtils.getOrderHashHex(signedOrder);
+ await assert.isValidSignatureAsync(this._provider, orderHash, signedOrder.signature, signedOrder.makerAddress);
+
+ const expirationUnixTimestampMs = signedOrder.expirationTimeSeconds.times(MILLISECONDS_IN_A_SECOND);
this._expirationWatcher.addOrder(orderHash, expirationUnixTimestampMs);
+
+ this._orderByOrderHash[orderHash] = signedOrder;
+ this._dependentOrderHashesTracker.addToDependentOrderHashes(signedOrder);
+
+ const orderAssetDatas = [signedOrder.makerAssetData, signedOrder.takerAssetData];
+ _.each(orderAssetDatas, assetData => {
+ const decodedAssetData = assetDataUtils.decodeAssetDataOrThrow(assetData);
+ if (decodedAssetData.assetProxyId === AssetProxyId.ERC20) {
+ this._collisionResistantAbiDecoder.addERC20Token(decodedAssetData.tokenAddress);
+ } else if (decodedAssetData.assetProxyId === AssetProxyId.ERC721) {
+ this._collisionResistantAbiDecoder.addERC721Token(decodedAssetData.tokenAddress);
+ }
+ });
}
/**
* Removes an order from the orderWatcher
@@ -145,16 +165,10 @@ export class OrderWatcher {
if (_.isUndefined(signedOrder)) {
return; // noop
}
+ this._dependentOrderHashesTracker.removeFromDependentOrderHashes(signedOrder);
delete this._orderByOrderHash[orderHash];
- delete this._orderStateByOrderHashCache[orderHash];
- const zrxTokenAddress = this._orderFilledCancelledLazyStore.getZRXTokenAddress();
-
- this._removeFromDependentOrderHashes(signedOrder.maker, zrxTokenAddress, orderHash);
- if (zrxTokenAddress !== signedOrder.makerTokenAddress) {
- this._removeFromDependentOrderHashes(signedOrder.maker, signedOrder.makerTokenAddress, orderHash);
- }
-
this._expirationWatcher.removeOrder(orderHash);
+ delete this._orderStateByOrderHashCache[orderHash];
}
/**
* Starts an orderWatcher subscription. The callback will be called every time a watched order's
@@ -203,21 +217,27 @@ export class OrderWatcher {
const signedOrder = this._orderByOrderHash[orderHash];
this._orderFilledCancelledLazyStore.deleteFilledTakerAmount(orderHash);
- this._orderFilledCancelledLazyStore.deleteCancelledTakerAmount(orderHash);
+ this._orderFilledCancelledLazyStore.deleteIsCancelled(orderHash);
- this._balanceAndProxyAllowanceLazyStore.deleteBalance(signedOrder.makerTokenAddress, signedOrder.maker);
- this._balanceAndProxyAllowanceLazyStore.deleteProxyAllowance(signedOrder.makerTokenAddress, signedOrder.maker);
- this._balanceAndProxyAllowanceLazyStore.deleteBalance(signedOrder.takerTokenAddress, signedOrder.taker);
- this._balanceAndProxyAllowanceLazyStore.deleteProxyAllowance(signedOrder.takerTokenAddress, signedOrder.taker);
+ this._balanceAndProxyAllowanceLazyStore.deleteBalance(signedOrder.makerAssetData, signedOrder.makerAddress);
+ this._balanceAndProxyAllowanceLazyStore.deleteProxyAllowance(
+ signedOrder.makerAssetData,
+ signedOrder.makerAddress,
+ );
+ this._balanceAndProxyAllowanceLazyStore.deleteBalance(signedOrder.takerAssetData, signedOrder.takerAddress);
+ this._balanceAndProxyAllowanceLazyStore.deleteProxyAllowance(
+ signedOrder.takerAssetData,
+ signedOrder.takerAddress,
+ );
- const zrxTokenAddress = this._getZRXTokenAddress();
+ const zrxAssetData = this._orderFilledCancelledLazyStore.getZRXAssetData();
if (!signedOrder.makerFee.isZero()) {
- this._balanceAndProxyAllowanceLazyStore.deleteBalance(zrxTokenAddress, signedOrder.maker);
- this._balanceAndProxyAllowanceLazyStore.deleteProxyAllowance(zrxTokenAddress, signedOrder.maker);
+ this._balanceAndProxyAllowanceLazyStore.deleteBalance(zrxAssetData, signedOrder.makerAddress);
+ this._balanceAndProxyAllowanceLazyStore.deleteProxyAllowance(zrxAssetData, signedOrder.makerAddress);
}
if (!signedOrder.takerFee.isZero()) {
- this._balanceAndProxyAllowanceLazyStore.deleteBalance(zrxTokenAddress, signedOrder.taker);
- this._balanceAndProxyAllowanceLazyStore.deleteProxyAllowance(zrxTokenAddress, signedOrder.taker);
+ this._balanceAndProxyAllowanceLazyStore.deleteBalance(zrxAssetData, signedOrder.takerAddress);
+ this._balanceAndProxyAllowanceLazyStore.deleteProxyAllowance(zrxAssetData, signedOrder.takerAddress);
}
}
private _onOrderExpired(orderHash: string): void {
@@ -240,84 +260,122 @@ export class OrderWatcher {
}
return;
}
- const log = logIfExists as LogEntryEvent; // At this moment we are sure that no error occured and log is defined.
- const maybeDecodedLog = this._web3Wrapper.abiDecoder.tryToDecodeLogOrNoop<ContractEventArgs>(log);
+ const maybeDecodedLog = this._collisionResistantAbiDecoder.tryToDecodeLogOrNoop<ContractEventArgs>(
+ // At this moment we are sure that no error occured and log is defined.
+ logIfExists as LogEntryEvent,
+ );
const isLogDecoded = !_.isUndefined(((maybeDecodedLog as any) as LogWithDecodedArgs<ContractEventArgs>).event);
if (!isLogDecoded) {
return; // noop
}
const decodedLog = (maybeDecodedLog as any) as LogWithDecodedArgs<ContractEventArgs>;
- let makerToken: string;
- let makerAddress: string;
switch (decodedLog.event) {
- case TokenEvents.Approval: {
- // Invalidate cache
- const args = decodedLog.args as TokenApprovalEventArgs;
- this._balanceAndProxyAllowanceLazyStore.deleteProxyAllowance(decodedLog.address, args._owner);
- // Revalidate orders
- makerToken = decodedLog.address;
- makerAddress = args._owner;
- if (
- !_.isUndefined(this._dependentOrderHashes[makerAddress]) &&
- !_.isUndefined(this._dependentOrderHashes[makerAddress][makerToken])
- ) {
- const orderHashes = Array.from(this._dependentOrderHashes[makerAddress][makerToken]);
+ case ERC20TokenEvents.Approval:
+ case ERC721TokenEvents.Approval: {
+ // ERC20 and ERC721 Transfer events have the same name so we need to distinguish them by args
+ if (!_.isUndefined(decodedLog.args._value)) {
+ // ERC20
+ // Invalidate cache
+ const args = decodedLog.args as ERC20TokenApprovalEventArgs;
+ const tokenAssetData = assetDataUtils.encodeERC20AssetData(decodedLog.address);
+ this._balanceAndProxyAllowanceLazyStore.deleteProxyAllowance(tokenAssetData, args._owner);
+ // Revalidate orders
+ const orderHashes = this._dependentOrderHashesTracker.getDependentOrderHashesByAssetDataByMaker(
+ args._owner,
+ tokenAssetData,
+ );
await this._emitRevalidateOrdersAsync(orderHashes);
+ break;
+ } else {
+ // ERC721
+ // Invalidate cache
+ const args = decodedLog.args as ERC721TokenApprovalEventArgs;
+ const tokenAssetData = assetDataUtils.encodeERC721AssetData(decodedLog.address, args._tokenId);
+ this._balanceAndProxyAllowanceLazyStore.deleteProxyAllowance(tokenAssetData, args._owner);
+ // Revalidate orders
+ const orderHashes = this._dependentOrderHashesTracker.getDependentOrderHashesByAssetDataByMaker(
+ args._owner,
+ tokenAssetData,
+ );
+ await this._emitRevalidateOrdersAsync(orderHashes);
+ break;
}
- break;
}
- case TokenEvents.Transfer: {
- // Invalidate cache
- const args = decodedLog.args as TokenTransferEventArgs;
- this._balanceAndProxyAllowanceLazyStore.deleteBalance(decodedLog.address, args._from);
- this._balanceAndProxyAllowanceLazyStore.deleteBalance(decodedLog.address, args._to);
- // Revalidate orders
- makerToken = decodedLog.address;
- makerAddress = args._from;
- if (
- !_.isUndefined(this._dependentOrderHashes[makerAddress]) &&
- !_.isUndefined(this._dependentOrderHashes[makerAddress][makerToken])
- ) {
- const orderHashes = Array.from(this._dependentOrderHashes[makerAddress][makerToken]);
+ case ERC20TokenEvents.Transfer:
+ case ERC721TokenEvents.Transfer: {
+ // ERC20 and ERC721 Transfer events have the same name so we need to distinguish them by args
+ if (!_.isUndefined(decodedLog.args._value)) {
+ // ERC20
+ // Invalidate cache
+ const args = decodedLog.args as ERC20TokenTransferEventArgs;
+ const tokenAssetData = assetDataUtils.encodeERC20AssetData(decodedLog.address);
+ this._balanceAndProxyAllowanceLazyStore.deleteBalance(tokenAssetData, args._from);
+ this._balanceAndProxyAllowanceLazyStore.deleteBalance(tokenAssetData, args._to);
+ // Revalidate orders
+ const orderHashes = this._dependentOrderHashesTracker.getDependentOrderHashesByAssetDataByMaker(
+ args._from,
+ tokenAssetData,
+ );
await this._emitRevalidateOrdersAsync(orderHashes);
+ break;
+ } else {
+ // ERC721
+ // Invalidate cache
+ const args = decodedLog.args as ERC721TokenTransferEventArgs;
+ const tokenAssetData = assetDataUtils.encodeERC721AssetData(decodedLog.address, args._tokenId);
+ this._balanceAndProxyAllowanceLazyStore.deleteBalance(tokenAssetData, args._from);
+ this._balanceAndProxyAllowanceLazyStore.deleteBalance(tokenAssetData, args._to);
+ // Revalidate orders
+ const orderHashes = this._dependentOrderHashesTracker.getDependentOrderHashesByAssetDataByMaker(
+ args._from,
+ tokenAssetData,
+ );
+ await this._emitRevalidateOrdersAsync(orderHashes);
+ break;
}
+ }
+ case ERC721TokenEvents.ApprovalForAll: {
+ // Invalidate cache
+ const args = decodedLog.args as ERC721TokenApprovalForAllEventArgs;
+ const tokenAddress = decodedLog.address;
+ this._balanceAndProxyAllowanceLazyStore.deleteAllERC721ProxyAllowance(tokenAddress, args._owner);
+ // Revalidate orders
+ const orderHashes = this._dependentOrderHashesTracker.getDependentOrderHashesByERC721ByMaker(
+ args._owner,
+ tokenAddress,
+ );
+ await this._emitRevalidateOrdersAsync(orderHashes);
break;
}
- case EtherTokenEvents.Deposit: {
+ case WETH9Events.Deposit: {
// Invalidate cache
- const args = decodedLog.args as EtherTokenDepositEventArgs;
- this._balanceAndProxyAllowanceLazyStore.deleteBalance(decodedLog.address, args._owner);
+ const args = decodedLog.args as WETH9DepositEventArgs;
+ const tokenAssetData = assetDataUtils.encodeERC20AssetData(decodedLog.address);
+ this._balanceAndProxyAllowanceLazyStore.deleteBalance(tokenAssetData, args._owner);
// Revalidate orders
- makerToken = decodedLog.address;
- makerAddress = args._owner;
- if (
- !_.isUndefined(this._dependentOrderHashes[makerAddress]) &&
- !_.isUndefined(this._dependentOrderHashes[makerAddress][makerToken])
- ) {
- const orderHashes = Array.from(this._dependentOrderHashes[makerAddress][makerToken]);
- await this._emitRevalidateOrdersAsync(orderHashes);
- }
+ const orderHashes = this._dependentOrderHashesTracker.getDependentOrderHashesByAssetDataByMaker(
+ args._owner,
+ tokenAssetData,
+ );
+ await this._emitRevalidateOrdersAsync(orderHashes);
break;
}
- case EtherTokenEvents.Withdrawal: {
+ case WETH9Events.Withdrawal: {
// Invalidate cache
- const args = decodedLog.args as EtherTokenWithdrawalEventArgs;
- this._balanceAndProxyAllowanceLazyStore.deleteBalance(decodedLog.address, args._owner);
+ const args = decodedLog.args as WETH9WithdrawalEventArgs;
+ const tokenAssetData = assetDataUtils.encodeERC20AssetData(decodedLog.address);
+ this._balanceAndProxyAllowanceLazyStore.deleteBalance(tokenAssetData, args._owner);
// Revalidate orders
- makerToken = decodedLog.address;
- makerAddress = args._owner;
- if (
- !_.isUndefined(this._dependentOrderHashes[makerAddress]) &&
- !_.isUndefined(this._dependentOrderHashes[makerAddress][makerToken])
- ) {
- const orderHashes = Array.from(this._dependentOrderHashes[makerAddress][makerToken]);
- await this._emitRevalidateOrdersAsync(orderHashes);
- }
+ const orderHashes = this._dependentOrderHashesTracker.getDependentOrderHashesByAssetDataByMaker(
+ args._owner,
+ tokenAssetData,
+ );
+ await this._emitRevalidateOrdersAsync(orderHashes);
break;
}
- case ExchangeEvents.LogFill: {
+ case ExchangeEvents.Fill: {
// Invalidate cache
- const args = decodedLog.args as ExchangeLogFillEventArgs;
+ const args = decodedLog.args as ExchangeFillEventArgs;
this._orderFilledCancelledLazyStore.deleteFilledTakerAmount(args.orderHash);
// Revalidate orders
const orderHash = args.orderHash;
@@ -327,10 +385,10 @@ export class OrderWatcher {
}
break;
}
- case ExchangeEvents.LogCancel: {
+ case ExchangeEvents.Cancel: {
// Invalidate cache
- const args = decodedLog.args as ExchangeLogCancelEventArgs;
- this._orderFilledCancelledLazyStore.deleteCancelledTakerAmount(args.orderHash);
+ const args = decodedLog.args as ExchangeCancelEventArgs;
+ this._orderFilledCancelledLazyStore.deleteIsCancelled(args.orderHash);
// Revalidate orders
const orderHash = args.orderHash;
const isOrderWatched = !_.isUndefined(this._orderByOrderHash[orderHash]);
@@ -339,8 +397,16 @@ export class OrderWatcher {
}
break;
}
- case ExchangeEvents.LogError:
- return; // noop
+ case ExchangeEvents.CancelUpTo: {
+ // TODO(logvinov): Do it smarter and actually look at the salt and order epoch
+ // Invalidate cache
+ const args = decodedLog.args as ExchangeCancelUpToEventArgs;
+ this._orderFilledCancelledLazyStore.deleteAllIsCancelled();
+ // Revalidate orders
+ const orderHashes = this._dependentOrderHashesTracker.getDependentOrderHashesByMaker(args.makerAddress);
+ await this._emitRevalidateOrdersAsync(orderHashes);
+ break;
+ }
default:
throw errorUtils.spawnSwitchErr('decodedLog.event', decodedLog.event);
@@ -351,7 +417,7 @@ export class OrderWatcher {
const signedOrder = this._orderByOrderHash[orderHash];
// Most of these calls will never reach the network because the data is fetched from stores
// and only updated when cache is invalidated
- const orderState = await this._orderStateUtils.getOrderStateAsync(signedOrder);
+ const orderState = await this._orderStateUtils.getOpenOrderStateAsync(signedOrder);
if (_.isUndefined(this._callbackIfExists)) {
break; // Unsubscribe was called
}
@@ -364,31 +430,4 @@ export class OrderWatcher {
this._callbackIfExists(null, orderState);
}
}
- private _addToDependentOrderHashes(signedOrder: SignedOrder, orderHash: string): void {
- if (_.isUndefined(this._dependentOrderHashes[signedOrder.maker])) {
- this._dependentOrderHashes[signedOrder.maker] = {};
- }
- if (_.isUndefined(this._dependentOrderHashes[signedOrder.maker][signedOrder.makerTokenAddress])) {
- this._dependentOrderHashes[signedOrder.maker][signedOrder.makerTokenAddress] = new Set();
- }
- this._dependentOrderHashes[signedOrder.maker][signedOrder.makerTokenAddress].add(orderHash);
- const zrxTokenAddress = this._getZRXTokenAddress();
- if (_.isUndefined(this._dependentOrderHashes[signedOrder.maker][zrxTokenAddress])) {
- this._dependentOrderHashes[signedOrder.maker][zrxTokenAddress] = new Set();
- }
- this._dependentOrderHashes[signedOrder.maker][zrxTokenAddress].add(orderHash);
- }
- private _removeFromDependentOrderHashes(makerAddress: string, tokenAddress: string, orderHash: string): void {
- this._dependentOrderHashes[makerAddress][tokenAddress].delete(orderHash);
- if (this._dependentOrderHashes[makerAddress][tokenAddress].size === 0) {
- delete this._dependentOrderHashes[makerAddress][tokenAddress];
- }
- if (_.isEmpty(this._dependentOrderHashes[makerAddress])) {
- delete this._dependentOrderHashes[makerAddress];
- }
- }
- private _getZRXTokenAddress(): string {
- const zrxTokenAddress = this._orderFilledCancelledLazyStore.getZRXTokenAddress();
- return zrxTokenAddress;
- }
}
diff --git a/packages/order-watcher/src/schemas/order_watcher_partial_config_schema.ts b/packages/order-watcher/src/schemas/order_watcher_partial_config_schema.ts
new file mode 100644
index 000000000..bc7d40524
--- /dev/null
+++ b/packages/order-watcher/src/schemas/order_watcher_partial_config_schema.ts
@@ -0,0 +1,13 @@
+export const orderWatcherPartialConfigSchema = {
+ id: '/OrderWatcherPartialConfigSchema',
+ properties: {
+ stateLayer: { $ref: '/BlockParam' },
+ orderExpirationCheckingIntervalMs: { type: 'number' },
+ eventPollingIntervalMs: { type: 'number' },
+ expirationMarginMs: { type: 'number' },
+ cleanupJobIntervalMs: { type: 'number' },
+ isVerbose: { type: 'boolean' },
+ },
+ type: 'object',
+ required: [],
+};
diff --git a/packages/order-watcher/src/types.ts b/packages/order-watcher/src/types.ts
index 63e4e7848..27d892985 100644
--- a/packages/order-watcher/src/types.ts
+++ b/packages/order-watcher/src/types.ts
@@ -1,4 +1,5 @@
-import { BlockParamLiteral, LogEntryEvent, OrderState } from '@0xproject/types';
+import { OrderState } from '@0xproject/types';
+import { LogEntryEvent } from 'ethereum-types';
export enum OrderWatcherError {
SubscriptionAlreadyPresent = 'SUBSCRIPTION_ALREADY_PRESENT',
@@ -13,15 +14,14 @@ export type EventWatcherCallback = (err: null | Error, log?: LogEntryEvent) => v
* expirationMarginMs: Amount of time before order expiry that you'd like to be notified
* of an orders expiration. Default=0.
* cleanupJobIntervalMs: How often to run a cleanup job which revalidates all the orders. Default=1hr.
- * stateLayer: Optional blockchain state layer OrderWatcher will monitor for new events. Default=latest.
+ * isVerbose: Weather the order watcher should be verbose. Default=true.
*/
export interface OrderWatcherConfig {
- stateLayer: BlockParamLiteral;
- orderExpirationCheckingIntervalMs?: number;
- eventPollingIntervalMs?: number;
- expirationMarginMs?: number;
- cleanupJobIntervalMs?: number;
- isVerbose?: boolean;
+ orderExpirationCheckingIntervalMs: number;
+ eventPollingIntervalMs: number;
+ expirationMarginMs: number;
+ cleanupJobIntervalMs: number;
+ isVerbose: boolean;
}
export type OnOrderStateChangeCallback = (err: Error | null, orderState?: OrderState) => void;
diff --git a/packages/order-watcher/src/utils/assert.ts b/packages/order-watcher/src/utils/assert.ts
index 5d7f72716..a891a60d2 100644
--- a/packages/order-watcher/src/utils/assert.ts
+++ b/packages/order-watcher/src/utils/assert.ts
@@ -1,17 +1,23 @@
import { assert as sharedAssert } from '@0xproject/assert';
-// We need those two unused imports because they're actually used by sharedAssert which gets injected here
+// HACK: We need those two unused imports because they're actually used by sharedAssert which gets injected here
// tslint:disable:no-unused-variable
import { Schema } from '@0xproject/json-schemas';
import { ECSignature } from '@0xproject/types';
import { BigNumber } from '@0xproject/utils';
// tslint:enable:no-unused-variable
+import { Provider } from 'ethereum-types';
-import { isValidSignature } from '@0xproject/order-utils';
+import { isValidSignatureAsync } from '@0xproject/order-utils';
export const assert = {
...sharedAssert,
- isValidSignature(orderHash: string, ecSignature: ECSignature, signerAddress: string): void {
- const isValid = isValidSignature(orderHash, ecSignature, signerAddress);
- this.assert(isValid, `Expected order with hash '${orderHash}' to have a valid signature`);
+ async isValidSignatureAsync(
+ provider: Provider,
+ orderHash: string,
+ signature: string,
+ signerAddress: string,
+ ): Promise<void> {
+ const isValid = await isValidSignatureAsync(provider, orderHash, signature, signerAddress);
+ assert.assert(isValid, `Expected order with hash '${orderHash}' to have a valid signature`);
},
};
diff --git a/packages/order-watcher/test/expiration_watcher_test.ts b/packages/order-watcher/test/expiration_watcher_test.ts
index dfd3556bc..ea9923487 100644
--- a/packages/order-watcher/test/expiration_watcher_test.ts
+++ b/packages/order-watcher/test/expiration_watcher_test.ts
@@ -1,8 +1,9 @@
import { ContractWrappers } from '@0xproject/contract-wrappers';
+import { tokenUtils } from '@0xproject/contract-wrappers/lib/test/utils/token_utils';
import { BlockchainLifecycle, callbackErrorReporter } from '@0xproject/dev-utils';
import { FillScenarios } from '@0xproject/fill-scenarios';
-import { getOrderHashHex } from '@0xproject/order-utils';
-import { DoneCallback, Token } from '@0xproject/types';
+import { assetDataUtils, orderHashUtils } from '@0xproject/order-utils';
+import { DoneCallback } from '@0xproject/types';
import { BigNumber } from '@0xproject/utils';
import * as chai from 'chai';
import * as _ from 'lodash';
@@ -14,7 +15,6 @@ import { utils } from '../src/utils/utils';
import { chaiSetup } from './utils/chai_setup';
import { constants } from './utils/constants';
-import { TokenUtils } from './utils/token_utils';
import { provider, web3Wrapper } from './utils/web3_wrapper';
chaiSetup.configure();
@@ -23,15 +23,16 @@ const blockchainLifecycle = new BlockchainLifecycle(web3Wrapper);
const MILISECONDS_IN_SECOND = 1000;
describe('ExpirationWatcher', () => {
- let contractWrappers: ContractWrappers;
- let tokenUtils: TokenUtils;
- let tokens: Token[];
+ const config = {
+ networkId: constants.TESTRPC_NETWORK_ID,
+ };
+ const contractWrappers = new ContractWrappers(provider, config);
let userAddresses: string[];
let zrxTokenAddress: string;
let fillScenarios: FillScenarios;
- let exchangeContractAddress: string;
- let makerTokenAddress: string;
- let takerTokenAddress: string;
+ const exchangeContractAddress = contractWrappers.exchange.getContractAddress();
+ let makerAssetData: string;
+ let takerAssetData: string;
let coinbase: string;
let makerAddress: string;
let takerAddress: string;
@@ -41,21 +42,26 @@ describe('ExpirationWatcher', () => {
let timer: Sinon.SinonFakeTimers;
let expirationWatcher: ExpirationWatcher;
before(async () => {
- const config = {
- networkId: constants.TESTRPC_NETWORK_ID,
- };
- contractWrappers = new ContractWrappers(provider, config);
- exchangeContractAddress = contractWrappers.exchange.getContractAddress();
+ await blockchainLifecycle.startAsync();
userAddresses = await web3Wrapper.getAvailableAddressesAsync();
- tokens = await contractWrappers.tokenRegistry.getTokensAsync();
- tokenUtils = new TokenUtils(tokens);
- zrxTokenAddress = tokenUtils.getProtocolTokenOrThrow().address;
- fillScenarios = new FillScenarios(provider, userAddresses, tokens, zrxTokenAddress, exchangeContractAddress);
+ zrxTokenAddress = tokenUtils.getProtocolTokenAddress();
+ fillScenarios = new FillScenarios(
+ provider,
+ userAddresses,
+ zrxTokenAddress,
+ exchangeContractAddress,
+ contractWrappers.erc20Proxy.getContractAddress(),
+ contractWrappers.erc721Proxy.getContractAddress(),
+ );
[coinbase, makerAddress, takerAddress, feeRecipient] = userAddresses;
- tokens = await contractWrappers.tokenRegistry.getTokensAsync();
- const [makerToken, takerToken] = tokenUtils.getDummyTokens();
- makerTokenAddress = makerToken.address;
- takerTokenAddress = takerToken.address;
+ const [makerTokenAddress, takerTokenAddress] = tokenUtils.getDummyERC20TokenAddresses();
+ [makerAssetData, takerAssetData] = [
+ assetDataUtils.encodeERC20AssetData(makerTokenAddress),
+ assetDataUtils.encodeERC20AssetData(takerTokenAddress),
+ ];
+ });
+ after(async () => {
+ await blockchainLifecycle.revertAsync();
});
beforeEach(async () => {
await blockchainLifecycle.startAsync();
@@ -75,15 +81,15 @@ describe('ExpirationWatcher', () => {
const orderLifetimeSec = 60;
const expirationUnixTimestampSec = currentUnixTimestampSec.plus(orderLifetimeSec);
const signedOrder = await fillScenarios.createFillableSignedOrderAsync(
- makerTokenAddress,
- takerTokenAddress,
+ makerAssetData,
+ takerAssetData,
makerAddress,
takerAddress,
fillableAmount,
expirationUnixTimestampSec,
);
- const orderHash = getOrderHashHex(signedOrder);
- expirationWatcher.addOrder(orderHash, signedOrder.expirationUnixTimestampSec.times(MILISECONDS_IN_SECOND));
+ const orderHash = orderHashUtils.getOrderHashHex(signedOrder);
+ expirationWatcher.addOrder(orderHash, signedOrder.expirationTimeSeconds.times(MILISECONDS_IN_SECOND));
const callbackAsync = callbackErrorReporter.reportNoErrorCallbackErrors(done)((hash: string) => {
expect(hash).to.be.equal(orderHash);
expect(utils.getCurrentUnixTimestampSec()).to.be.bignumber.gte(expirationUnixTimestampSec);
@@ -97,15 +103,15 @@ describe('ExpirationWatcher', () => {
const orderLifetimeSec = 60;
const expirationUnixTimestampSec = currentUnixTimestampSec.plus(orderLifetimeSec);
const signedOrder = await fillScenarios.createFillableSignedOrderAsync(
- makerTokenAddress,
- takerTokenAddress,
+ makerAssetData,
+ takerAssetData,
makerAddress,
takerAddress,
fillableAmount,
expirationUnixTimestampSec,
);
- const orderHash = getOrderHashHex(signedOrder);
- expirationWatcher.addOrder(orderHash, signedOrder.expirationUnixTimestampSec.times(MILISECONDS_IN_SECOND));
+ const orderHash = orderHashUtils.getOrderHashHex(signedOrder);
+ expirationWatcher.addOrder(orderHash, signedOrder.expirationTimeSeconds.times(MILISECONDS_IN_SECOND));
const callbackAsync = callbackErrorReporter.reportNoErrorCallbackErrors(done)(async (_hash: string) => {
done(new Error('Emitted expiration went before the order actually expired'));
});
@@ -122,31 +128,25 @@ describe('ExpirationWatcher', () => {
const order1ExpirationUnixTimestampSec = currentUnixTimestampSec.plus(order1Lifetime);
const order2ExpirationUnixTimestampSec = currentUnixTimestampSec.plus(order2Lifetime);
const signedOrder1 = await fillScenarios.createFillableSignedOrderAsync(
- makerTokenAddress,
- takerTokenAddress,
+ makerAssetData,
+ takerAssetData,
makerAddress,
takerAddress,
fillableAmount,
order1ExpirationUnixTimestampSec,
);
const signedOrder2 = await fillScenarios.createFillableSignedOrderAsync(
- makerTokenAddress,
- takerTokenAddress,
+ makerAssetData,
+ takerAssetData,
makerAddress,
takerAddress,
fillableAmount,
order2ExpirationUnixTimestampSec,
);
- const orderHash1 = getOrderHashHex(signedOrder1);
- const orderHash2 = getOrderHashHex(signedOrder2);
- expirationWatcher.addOrder(
- orderHash2,
- signedOrder2.expirationUnixTimestampSec.times(MILISECONDS_IN_SECOND),
- );
- expirationWatcher.addOrder(
- orderHash1,
- signedOrder1.expirationUnixTimestampSec.times(MILISECONDS_IN_SECOND),
- );
+ const orderHash1 = orderHashUtils.getOrderHashHex(signedOrder1);
+ const orderHash2 = orderHashUtils.getOrderHashHex(signedOrder2);
+ expirationWatcher.addOrder(orderHash2, signedOrder2.expirationTimeSeconds.times(MILISECONDS_IN_SECOND));
+ expirationWatcher.addOrder(orderHash1, signedOrder1.expirationTimeSeconds.times(MILISECONDS_IN_SECOND));
const expirationOrder = [orderHash1, orderHash2];
const expectToBeCalledOnce = false;
const callbackAsync = callbackErrorReporter.reportNoErrorCallbackErrors(done, expectToBeCalledOnce)(
@@ -169,31 +169,25 @@ describe('ExpirationWatcher', () => {
const order1ExpirationUnixTimestampSec = currentUnixTimestampSec.plus(order1Lifetime);
const order2ExpirationUnixTimestampSec = currentUnixTimestampSec.plus(order2Lifetime);
const signedOrder1 = await fillScenarios.createFillableSignedOrderAsync(
- makerTokenAddress,
- takerTokenAddress,
+ makerAssetData,
+ takerAssetData,
makerAddress,
takerAddress,
fillableAmount,
order1ExpirationUnixTimestampSec,
);
const signedOrder2 = await fillScenarios.createFillableSignedOrderAsync(
- makerTokenAddress,
- takerTokenAddress,
+ makerAssetData,
+ takerAssetData,
makerAddress,
takerAddress,
fillableAmount,
order2ExpirationUnixTimestampSec,
);
- const orderHash1 = getOrderHashHex(signedOrder1);
- const orderHash2 = getOrderHashHex(signedOrder2);
- expirationWatcher.addOrder(
- orderHash1,
- signedOrder1.expirationUnixTimestampSec.times(MILISECONDS_IN_SECOND),
- );
- expirationWatcher.addOrder(
- orderHash2,
- signedOrder2.expirationUnixTimestampSec.times(MILISECONDS_IN_SECOND),
- );
+ const orderHash1 = orderHashUtils.getOrderHashHex(signedOrder1);
+ const orderHash2 = orderHashUtils.getOrderHashHex(signedOrder2);
+ expirationWatcher.addOrder(orderHash1, signedOrder1.expirationTimeSeconds.times(MILISECONDS_IN_SECOND));
+ expirationWatcher.addOrder(orderHash2, signedOrder2.expirationTimeSeconds.times(MILISECONDS_IN_SECOND));
const expirationOrder = orderHash1 < orderHash2 ? [orderHash1, orderHash2] : [orderHash2, orderHash1];
const expectToBeCalledOnce = false;
const callbackAsync = callbackErrorReporter.reportNoErrorCallbackErrors(done, expectToBeCalledOnce)(
diff --git a/packages/order-watcher/test/global_hooks.ts b/packages/order-watcher/test/global_hooks.ts
index 30b0cd697..f64f1df78 100644
--- a/packages/order-watcher/test/global_hooks.ts
+++ b/packages/order-watcher/test/global_hooks.ts
@@ -1,5 +1,5 @@
import { devConstants } from '@0xproject/dev-utils';
-import { runV1MigrationsAsync } from '@0xproject/migrations';
+import { runV2MigrationsAsync } from '@0xproject/migrations';
import { provider } from './utils/web3_wrapper';
@@ -7,11 +7,11 @@ before('migrate contracts', async function(): Promise<void> {
// HACK: Since the migrations take longer then our global mocha timeout limit
// we manually increase it for this before hook.
const mochaTestTimeoutMs = 25000;
- this.timeout(mochaTestTimeoutMs);
+ this.timeout(mochaTestTimeoutMs); // tslint:disable-line:no-invalid-this
const txDefaults = {
gas: devConstants.GAS_LIMIT,
from: devConstants.TESTRPC_FIRST_ADDRESS,
};
- const artifactsDir = `../migrations/artifacts/1.0.0`;
- await runV1MigrationsAsync(provider, artifactsDir, txDefaults);
+ const artifactsDir = `../migrations/artifacts/2.0.0`;
+ await runV2MigrationsAsync(provider, artifactsDir, txDefaults);
});
diff --git a/packages/order-watcher/test/order_watcher_test.ts b/packages/order-watcher/test/order_watcher_test.ts
index 2889051bc..00962bed0 100644
--- a/packages/order-watcher/test/order_watcher_test.ts
+++ b/packages/order-watcher/test/order_watcher_test.ts
@@ -1,8 +1,9 @@
// tslint:disable:no-unnecessary-type-assertion
import { ContractWrappers } from '@0xproject/contract-wrappers';
+import { tokenUtils } from '@0xproject/contract-wrappers/lib/test/utils/token_utils';
import { BlockchainLifecycle, callbackErrorReporter } from '@0xproject/dev-utils';
import { FillScenarios } from '@0xproject/fill-scenarios';
-import { getOrderHashHex } from '@0xproject/order-utils';
+import { assetDataUtils, orderHashUtils } from '@0xproject/order-utils';
import {
DoneCallback,
ExchangeContractErrs,
@@ -10,7 +11,6 @@ import {
OrderStateInvalid,
OrderStateValid,
SignedOrder,
- Token,
} from '@0xproject/types';
import { BigNumber } from '@0xproject/utils';
import { Web3Wrapper } from '@0xproject/web3-wrapper';
@@ -18,12 +18,15 @@ import * as chai from 'chai';
import * as _ from 'lodash';
import 'mocha';
+import {
+ DependentOrderHashesTracker,
+ OrderHashesByERC20ByMakerAddress,
+} from '../src/order_watcher/dependent_order_hashes_tracker';
import { OrderWatcher } from '../src/order_watcher/order_watcher';
import { OrderWatcherError } from '../src/types';
import { chaiSetup } from './utils/chai_setup';
import { constants } from './utils/constants';
-import { TokenUtils } from './utils/token_utils';
import { provider, web3Wrapper } from './utils/web3_wrapper';
const TIMEOUT_MS = 150;
@@ -33,37 +36,49 @@ const expect = chai.expect;
const blockchainLifecycle = new BlockchainLifecycle(web3Wrapper);
describe('OrderWatcher', () => {
- let contractWrappers: ContractWrappers;
- let tokens: Token[];
- let tokenUtils: TokenUtils;
+ const networkId = constants.TESTRPC_NETWORK_ID;
+ const config = { networkId };
+ const contractWrappers = new ContractWrappers(provider, config);
let fillScenarios: FillScenarios;
let userAddresses: string[];
let zrxTokenAddress: string;
let exchangeContractAddress: string;
- let makerToken: Token;
- let takerToken: Token;
- let maker: string;
- let taker: string;
+ let makerAssetData: string;
+ let takerAssetData: string;
+ let makerTokenAddress: string;
+ let takerTokenAddress: string;
+ let makerAddress: string;
+ let takerAddress: string;
+ let coinbase: string;
+ let feeRecipient: string;
let signedOrder: SignedOrder;
let orderWatcher: OrderWatcher;
const decimals = constants.ZRX_DECIMALS;
const fillableAmount = Web3Wrapper.toBaseUnitAmount(new BigNumber(5), decimals);
before(async () => {
- const networkId = await web3Wrapper.getNetworkIdAsync();
- const config = {
- networkId,
- };
- contractWrappers = new ContractWrappers(provider, config);
- orderWatcher = new OrderWatcher(provider, networkId);
- exchangeContractAddress = contractWrappers.exchange.getContractAddress();
+ await blockchainLifecycle.startAsync();
userAddresses = await web3Wrapper.getAvailableAddressesAsync();
- [, maker, taker] = userAddresses;
- tokens = await contractWrappers.tokenRegistry.getTokensAsync();
- tokenUtils = new TokenUtils(tokens);
- zrxTokenAddress = tokenUtils.getProtocolTokenOrThrow().address;
- fillScenarios = new FillScenarios(provider, userAddresses, tokens, zrxTokenAddress, exchangeContractAddress);
- await fillScenarios.initTokenBalancesAsync();
- [makerToken, takerToken] = tokenUtils.getDummyTokens();
+ zrxTokenAddress = tokenUtils.getProtocolTokenAddress();
+ exchangeContractAddress = contractWrappers.exchange.getContractAddress();
+ fillScenarios = new FillScenarios(
+ provider,
+ userAddresses,
+ zrxTokenAddress,
+ exchangeContractAddress,
+ contractWrappers.erc20Proxy.getContractAddress(),
+ contractWrappers.erc721Proxy.getContractAddress(),
+ );
+ [coinbase, makerAddress, takerAddress, feeRecipient] = userAddresses;
+ [makerTokenAddress, takerTokenAddress] = tokenUtils.getDummyERC20TokenAddresses();
+ [makerAssetData, takerAssetData] = [
+ assetDataUtils.encodeERC20AssetData(makerTokenAddress),
+ assetDataUtils.encodeERC20AssetData(takerTokenAddress),
+ ];
+ const orderWatcherConfig = {};
+ orderWatcher = new OrderWatcher(provider, networkId, orderWatcherConfig);
+ });
+ after(async () => {
+ await blockchainLifecycle.revertAsync();
});
beforeEach(async () => {
await blockchainLifecycle.startAsync();
@@ -74,35 +89,40 @@ describe('OrderWatcher', () => {
describe('#removeOrder', async () => {
it('should successfully remove existing order', async () => {
signedOrder = await fillScenarios.createFillableSignedOrderAsync(
- makerToken.address,
- takerToken.address,
- maker,
- taker,
+ makerAssetData,
+ takerAssetData,
+ makerAddress,
+ takerAddress,
fillableAmount,
);
- const orderHash = getOrderHashHex(signedOrder);
- orderWatcher.addOrder(signedOrder);
+ const orderHash = orderHashUtils.getOrderHashHex(signedOrder);
+ await orderWatcher.addOrderAsync(signedOrder);
expect((orderWatcher as any)._orderByOrderHash).to.include({
[orderHash]: signedOrder,
});
- let dependentOrderHashes = (orderWatcher as any)._dependentOrderHashes;
- expect(dependentOrderHashes[signedOrder.maker][signedOrder.makerTokenAddress]).to.have.keys(orderHash);
+ const dependentOrderHashesTracker = (orderWatcher as any)
+ ._dependentOrderHashesTracker as DependentOrderHashesTracker;
+ let orderHashesByERC20ByMakerAddress: OrderHashesByERC20ByMakerAddress = (dependentOrderHashesTracker as any)
+ ._orderHashesByERC20ByMakerAddress;
+ expect(orderHashesByERC20ByMakerAddress[signedOrder.makerAddress][makerTokenAddress]).to.have.keys(
+ orderHash,
+ );
orderWatcher.removeOrder(orderHash);
expect((orderWatcher as any)._orderByOrderHash).to.not.include({
[orderHash]: signedOrder,
});
- dependentOrderHashes = (orderWatcher as any)._dependentOrderHashes;
- expect(dependentOrderHashes[signedOrder.maker]).to.be.undefined();
+ orderHashesByERC20ByMakerAddress = (dependentOrderHashesTracker as any)._orderHashesByERC20ByMakerAddress;
+ expect(orderHashesByERC20ByMakerAddress[signedOrder.makerAddress]).to.be.undefined();
});
it('should no-op when removing a non-existing order', async () => {
signedOrder = await fillScenarios.createFillableSignedOrderAsync(
- makerToken.address,
- takerToken.address,
- maker,
- taker,
+ makerAssetData,
+ takerAssetData,
+ makerAddress,
+ takerAddress,
fillableAmount,
);
- const orderHash = getOrderHashHex(signedOrder);
+ const orderHash = orderHashUtils.getOrderHashHex(signedOrder);
const nonExistentOrderHash = `0x${orderHash
.substr(2)
.split('')
@@ -116,27 +136,27 @@ describe('OrderWatcher', () => {
orderWatcher.unsubscribe();
});
it('should fail when trying to subscribe twice', async () => {
- orderWatcher.subscribe(_.noop);
- expect(() => orderWatcher.subscribe(_.noop)).to.throw(OrderWatcherError.SubscriptionAlreadyPresent);
+ orderWatcher.subscribe(_.noop.bind(_));
+ expect(() => orderWatcher.subscribe(_.noop.bind(_))).to.throw(OrderWatcherError.SubscriptionAlreadyPresent);
});
});
describe('tests with cleanup', async () => {
afterEach(async () => {
orderWatcher.unsubscribe();
- const orderHash = getOrderHashHex(signedOrder);
+ const orderHash = orderHashUtils.getOrderHashHex(signedOrder);
orderWatcher.removeOrder(orderHash);
});
- it('should emit orderStateInvalid when maker allowance set to 0 for watched order', (done: DoneCallback) => {
+ it('should emit orderStateInvalid when makerAddress allowance set to 0 for watched order', (done: DoneCallback) => {
(async () => {
signedOrder = await fillScenarios.createFillableSignedOrderAsync(
- makerToken.address,
- takerToken.address,
- maker,
- taker,
+ makerAssetData,
+ takerAssetData,
+ makerAddress,
+ takerAddress,
fillableAmount,
);
- const orderHash = getOrderHashHex(signedOrder);
- orderWatcher.addOrder(signedOrder);
+ const orderHash = orderHashUtils.getOrderHashHex(signedOrder);
+ await orderWatcher.addOrderAsync(signedOrder);
const callback = callbackErrorReporter.reportNodeCallbackErrors(done)((orderState: OrderState) => {
expect(orderState.isValid).to.be.false();
const invalidOrderState = orderState as OrderStateInvalid;
@@ -144,28 +164,32 @@ describe('OrderWatcher', () => {
expect(invalidOrderState.error).to.be.equal(ExchangeContractErrs.InsufficientMakerAllowance);
});
orderWatcher.subscribe(callback);
- await contractWrappers.token.setProxyAllowanceAsync(makerToken.address, maker, new BigNumber(0));
+ await contractWrappers.erc20Token.setProxyAllowanceAsync(
+ makerTokenAddress,
+ makerAddress,
+ new BigNumber(0),
+ );
})().catch(done);
});
it('should not emit an orderState event when irrelevant Transfer event received', (done: DoneCallback) => {
(async () => {
signedOrder = await fillScenarios.createFillableSignedOrderAsync(
- makerToken.address,
- takerToken.address,
- maker,
- taker,
+ makerAssetData,
+ takerAssetData,
+ makerAddress,
+ takerAddress,
fillableAmount,
);
- orderWatcher.addOrder(signedOrder);
+ await orderWatcher.addOrderAsync(signedOrder);
const callback = callbackErrorReporter.reportNodeCallbackErrors(done)((_orderState: OrderState) => {
throw new Error('OrderState callback fired for irrelevant order');
});
orderWatcher.subscribe(callback);
const notTheMaker = userAddresses[0];
- const anyRecipient = taker;
+ const anyRecipient = takerAddress;
const transferAmount = new BigNumber(2);
- await contractWrappers.token.transferAsync(
- makerToken.address,
+ await contractWrappers.erc20Token.transferAsync(
+ makerTokenAddress,
notTheMaker,
anyRecipient,
transferAmount,
@@ -175,17 +199,17 @@ describe('OrderWatcher', () => {
}, TIMEOUT_MS);
})().catch(done);
});
- it('should emit orderStateInvalid when maker moves balance backing watched order', (done: DoneCallback) => {
+ it('should emit orderStateInvalid when makerAddress moves balance backing watched order', (done: DoneCallback) => {
(async () => {
signedOrder = await fillScenarios.createFillableSignedOrderAsync(
- makerToken.address,
- takerToken.address,
- maker,
- taker,
+ makerAssetData,
+ takerAssetData,
+ makerAddress,
+ takerAddress,
fillableAmount,
);
- const orderHash = getOrderHashHex(signedOrder);
- orderWatcher.addOrder(signedOrder);
+ const orderHash = orderHashUtils.getOrderHashHex(signedOrder);
+ await orderWatcher.addOrderAsync(signedOrder);
const callback = callbackErrorReporter.reportNodeCallbackErrors(done)((orderState: OrderState) => {
expect(orderState.isValid).to.be.false();
const invalidOrderState = orderState as OrderStateInvalid;
@@ -193,22 +217,27 @@ describe('OrderWatcher', () => {
expect(invalidOrderState.error).to.be.equal(ExchangeContractErrs.InsufficientMakerBalance);
});
orderWatcher.subscribe(callback);
- const anyRecipient = taker;
- const makerBalance = await contractWrappers.token.getBalanceAsync(makerToken.address, maker);
- await contractWrappers.token.transferAsync(makerToken.address, maker, anyRecipient, makerBalance);
+ const anyRecipient = takerAddress;
+ const makerBalance = await contractWrappers.erc20Token.getBalanceAsync(makerTokenAddress, makerAddress);
+ await contractWrappers.erc20Token.transferAsync(
+ makerTokenAddress,
+ makerAddress,
+ anyRecipient,
+ makerBalance,
+ );
})().catch(done);
});
it('should emit orderStateInvalid when watched order fully filled', (done: DoneCallback) => {
(async () => {
signedOrder = await fillScenarios.createFillableSignedOrderAsync(
- makerToken.address,
- takerToken.address,
- maker,
- taker,
+ makerAssetData,
+ takerAssetData,
+ makerAddress,
+ takerAddress,
fillableAmount,
);
- const orderHash = getOrderHashHex(signedOrder);
- orderWatcher.addOrder(signedOrder);
+ const orderHash = orderHashUtils.getOrderHashHex(signedOrder);
+ await orderWatcher.addOrderAsync(signedOrder);
const callback = callbackErrorReporter.reportNodeCallbackErrors(done)((orderState: OrderState) => {
expect(orderState.isValid).to.be.false();
@@ -218,29 +247,23 @@ describe('OrderWatcher', () => {
});
orderWatcher.subscribe(callback);
- const shouldThrowOnInsufficientBalanceOrAllowance = true;
- await contractWrappers.exchange.fillOrderAsync(
- signedOrder,
- fillableAmount,
- shouldThrowOnInsufficientBalanceOrAllowance,
- taker,
- );
+ await contractWrappers.exchange.fillOrderAsync(signedOrder, fillableAmount, takerAddress);
})().catch(done);
});
it('should emit orderStateValid when watched order partially filled', (done: DoneCallback) => {
(async () => {
signedOrder = await fillScenarios.createFillableSignedOrderAsync(
- makerToken.address,
- takerToken.address,
- maker,
- taker,
+ makerAssetData,
+ takerAssetData,
+ makerAddress,
+ takerAddress,
fillableAmount,
);
- const makerBalance = await contractWrappers.token.getBalanceAsync(makerToken.address, maker);
+ const makerBalance = await contractWrappers.erc20Token.getBalanceAsync(makerTokenAddress, makerAddress);
const fillAmountInBaseUnits = new BigNumber(2);
- const orderHash = getOrderHashHex(signedOrder);
- orderWatcher.addOrder(signedOrder);
+ const orderHash = orderHashUtils.getOrderHashHex(signedOrder);
+ await orderWatcher.addOrderAsync(signedOrder);
const callback = callbackErrorReporter.reportNodeCallbackErrors(done)((orderState: OrderState) => {
expect(orderState.isValid).to.be.true();
@@ -249,22 +272,16 @@ describe('OrderWatcher', () => {
const orderRelevantState = validOrderState.orderRelevantState;
const remainingMakerBalance = makerBalance.sub(fillAmountInBaseUnits);
const remainingFillable = fillableAmount.minus(fillAmountInBaseUnits);
- expect(orderRelevantState.remainingFillableMakerTokenAmount).to.be.bignumber.equal(
+ expect(orderRelevantState.remainingFillableMakerAssetAmount).to.be.bignumber.equal(
remainingFillable,
);
- expect(orderRelevantState.remainingFillableTakerTokenAmount).to.be.bignumber.equal(
+ expect(orderRelevantState.remainingFillableTakerAssetAmount).to.be.bignumber.equal(
remainingFillable,
);
expect(orderRelevantState.makerBalance).to.be.bignumber.equal(remainingMakerBalance);
});
orderWatcher.subscribe(callback);
- const shouldThrowOnInsufficientBalanceOrAllowance = true;
- await contractWrappers.exchange.fillOrderAsync(
- signedOrder,
- fillAmountInBaseUnits,
- shouldThrowOnInsufficientBalanceOrAllowance,
- taker,
- );
+ await contractWrappers.exchange.fillOrderAsync(signedOrder, fillAmountInBaseUnits, takerAddress);
})().catch(done);
});
it('should trigger the callback when orders backing ZRX allowance changes', (done: DoneCallback) => {
@@ -272,19 +289,23 @@ describe('OrderWatcher', () => {
const makerFee = Web3Wrapper.toBaseUnitAmount(new BigNumber(2), decimals);
const takerFee = Web3Wrapper.toBaseUnitAmount(new BigNumber(0), decimals);
signedOrder = await fillScenarios.createFillableSignedOrderWithFeesAsync(
- makerToken.address,
- takerToken.address,
+ makerAssetData,
+ takerAssetData,
makerFee,
takerFee,
- maker,
- taker,
+ makerAddress,
+ takerAddress,
fillableAmount,
- taker,
+ takerAddress,
);
const callback = callbackErrorReporter.reportNodeCallbackErrors(done)();
- orderWatcher.addOrder(signedOrder);
+ await orderWatcher.addOrderAsync(signedOrder);
orderWatcher.subscribe(callback);
- await contractWrappers.token.setProxyAllowanceAsync(zrxTokenAddress, maker, new BigNumber(0));
+ await contractWrappers.erc20Token.setProxyAllowanceAsync(
+ zrxTokenAddress,
+ makerAddress,
+ new BigNumber(0),
+ );
})().catch(done);
});
describe('remainingFillable(M|T)akerTokenAmount', () => {
@@ -293,65 +314,59 @@ describe('OrderWatcher', () => {
const takerFillableAmount = Web3Wrapper.toBaseUnitAmount(new BigNumber(10), decimals);
const makerFillableAmount = Web3Wrapper.toBaseUnitAmount(new BigNumber(20), decimals);
signedOrder = await fillScenarios.createAsymmetricFillableSignedOrderAsync(
- makerToken.address,
- takerToken.address,
- maker,
- taker,
+ makerAssetData,
+ takerAssetData,
+ makerAddress,
+ takerAddress,
makerFillableAmount,
takerFillableAmount,
);
const fillAmountInBaseUnits = Web3Wrapper.toBaseUnitAmount(new BigNumber(2), decimals);
- const orderHash = getOrderHashHex(signedOrder);
- orderWatcher.addOrder(signedOrder);
+ const orderHash = orderHashUtils.getOrderHashHex(signedOrder);
+ await orderWatcher.addOrderAsync(signedOrder);
const callback = callbackErrorReporter.reportNodeCallbackErrors(done)((orderState: OrderState) => {
expect(orderState.isValid).to.be.true();
const validOrderState = orderState as OrderStateValid;
expect(validOrderState.orderHash).to.be.equal(orderHash);
const orderRelevantState = validOrderState.orderRelevantState;
- expect(orderRelevantState.remainingFillableMakerTokenAmount).to.be.bignumber.equal(
+ expect(orderRelevantState.remainingFillableMakerAssetAmount).to.be.bignumber.equal(
Web3Wrapper.toBaseUnitAmount(new BigNumber(16), decimals),
);
- expect(orderRelevantState.remainingFillableTakerTokenAmount).to.be.bignumber.equal(
+ expect(orderRelevantState.remainingFillableTakerAssetAmount).to.be.bignumber.equal(
Web3Wrapper.toBaseUnitAmount(new BigNumber(8), decimals),
);
});
orderWatcher.subscribe(callback);
- const shouldThrowOnInsufficientBalanceOrAllowance = true;
- await contractWrappers.exchange.fillOrderAsync(
- signedOrder,
- fillAmountInBaseUnits,
- shouldThrowOnInsufficientBalanceOrAllowance,
- taker,
- );
+ await contractWrappers.exchange.fillOrderAsync(signedOrder, fillAmountInBaseUnits, takerAddress);
})().catch(done);
});
it('should equal approved amount when approved amount is lowest', (done: DoneCallback) => {
(async () => {
signedOrder = await fillScenarios.createFillableSignedOrderAsync(
- makerToken.address,
- takerToken.address,
- maker,
- taker,
+ makerAssetData,
+ takerAssetData,
+ makerAddress,
+ takerAddress,
fillableAmount,
);
const changedMakerApprovalAmount = Web3Wrapper.toBaseUnitAmount(new BigNumber(3), decimals);
- orderWatcher.addOrder(signedOrder);
+ await orderWatcher.addOrderAsync(signedOrder);
const callback = callbackErrorReporter.reportNodeCallbackErrors(done)((orderState: OrderState) => {
const validOrderState = orderState as OrderStateValid;
const orderRelevantState = validOrderState.orderRelevantState;
- expect(orderRelevantState.remainingFillableMakerTokenAmount).to.be.bignumber.equal(
+ expect(orderRelevantState.remainingFillableMakerAssetAmount).to.be.bignumber.equal(
changedMakerApprovalAmount,
);
- expect(orderRelevantState.remainingFillableTakerTokenAmount).to.be.bignumber.equal(
+ expect(orderRelevantState.remainingFillableTakerAssetAmount).to.be.bignumber.equal(
changedMakerApprovalAmount,
);
});
orderWatcher.subscribe(callback);
- await contractWrappers.token.setProxyAllowanceAsync(
- makerToken.address,
- maker,
+ await contractWrappers.erc20Token.setProxyAllowanceAsync(
+ makerTokenAddress,
+ makerAddress,
changedMakerApprovalAmount,
);
})().catch(done);
@@ -359,83 +374,53 @@ describe('OrderWatcher', () => {
it('should equal balance amount when balance amount is lowest', (done: DoneCallback) => {
(async () => {
signedOrder = await fillScenarios.createFillableSignedOrderAsync(
- makerToken.address,
- takerToken.address,
- maker,
- taker,
+ makerAssetData,
+ takerAssetData,
+ makerAddress,
+ takerAddress,
fillableAmount,
);
- const makerBalance = await contractWrappers.token.getBalanceAsync(makerToken.address, maker);
+ const makerBalance = await contractWrappers.erc20Token.getBalanceAsync(
+ makerTokenAddress,
+ makerAddress,
+ );
const remainingAmount = Web3Wrapper.toBaseUnitAmount(new BigNumber(1), decimals);
const transferAmount = makerBalance.sub(remainingAmount);
- orderWatcher.addOrder(signedOrder);
+ await orderWatcher.addOrderAsync(signedOrder);
const callback = callbackErrorReporter.reportNodeCallbackErrors(done)((orderState: OrderState) => {
expect(orderState.isValid).to.be.true();
const validOrderState = orderState as OrderStateValid;
const orderRelevantState = validOrderState.orderRelevantState;
- expect(orderRelevantState.remainingFillableMakerTokenAmount).to.be.bignumber.equal(
+ expect(orderRelevantState.remainingFillableMakerAssetAmount).to.be.bignumber.equal(
remainingAmount,
);
- expect(orderRelevantState.remainingFillableTakerTokenAmount).to.be.bignumber.equal(
+ expect(orderRelevantState.remainingFillableTakerAssetAmount).to.be.bignumber.equal(
remainingAmount,
);
});
orderWatcher.subscribe(callback);
- await contractWrappers.token.transferAsync(
- makerToken.address,
- maker,
+ await contractWrappers.erc20Token.transferAsync(
+ makerTokenAddress,
+ makerAddress,
constants.NULL_ADDRESS,
transferAmount,
);
})().catch(done);
});
- it('should equal remaining amount when partially cancelled and order has fees', (done: DoneCallback) => {
- (async () => {
- const takerFee = Web3Wrapper.toBaseUnitAmount(new BigNumber(0), decimals);
- const makerFee = Web3Wrapper.toBaseUnitAmount(new BigNumber(5), decimals);
- const feeRecipient = taker;
- signedOrder = await fillScenarios.createFillableSignedOrderWithFeesAsync(
- makerToken.address,
- takerToken.address,
- makerFee,
- takerFee,
- maker,
- taker,
- fillableAmount,
- feeRecipient,
- );
-
- const remainingTokenAmount = Web3Wrapper.toBaseUnitAmount(new BigNumber(4), decimals);
- const transferTokenAmount = makerFee.sub(remainingTokenAmount);
- orderWatcher.addOrder(signedOrder);
-
- const callback = callbackErrorReporter.reportNodeCallbackErrors(done)((orderState: OrderState) => {
- expect(orderState.isValid).to.be.true();
- const validOrderState = orderState as OrderStateValid;
- const orderRelevantState = validOrderState.orderRelevantState;
- expect(orderRelevantState.remainingFillableMakerTokenAmount).to.be.bignumber.equal(
- remainingTokenAmount,
- );
- });
- orderWatcher.subscribe(callback);
- await contractWrappers.exchange.cancelOrderAsync(signedOrder, transferTokenAmount);
- })().catch(done);
- });
it('should equal ratio amount when fee balance is lowered', (done: DoneCallback) => {
(async () => {
const takerFee = Web3Wrapper.toBaseUnitAmount(new BigNumber(0), decimals);
const makerFee = Web3Wrapper.toBaseUnitAmount(new BigNumber(5), decimals);
- const feeRecipient = taker;
signedOrder = await fillScenarios.createFillableSignedOrderWithFeesAsync(
- makerToken.address,
- takerToken.address,
+ makerAssetData,
+ takerAssetData,
makerFee,
takerFee,
- maker,
- taker,
+ makerAddress,
+ takerAddress,
fillableAmount,
feeRecipient,
);
@@ -444,20 +429,24 @@ describe('OrderWatcher', () => {
const remainingTokenAmount = Web3Wrapper.toBaseUnitAmount(new BigNumber(4), decimals);
const transferTokenAmount = makerFee.sub(remainingTokenAmount);
- orderWatcher.addOrder(signedOrder);
+ await orderWatcher.addOrderAsync(signedOrder);
const callback = callbackErrorReporter.reportNodeCallbackErrors(done)((orderState: OrderState) => {
const validOrderState = orderState as OrderStateValid;
const orderRelevantState = validOrderState.orderRelevantState;
- expect(orderRelevantState.remainingFillableMakerTokenAmount).to.be.bignumber.equal(
+ expect(orderRelevantState.remainingFillableMakerAssetAmount).to.be.bignumber.equal(
remainingFeeAmount,
);
});
orderWatcher.subscribe(callback);
- await contractWrappers.token.setProxyAllowanceAsync(zrxTokenAddress, maker, remainingFeeAmount);
- await contractWrappers.token.transferAsync(
- makerToken.address,
- maker,
+ await contractWrappers.erc20Token.setProxyAllowanceAsync(
+ zrxTokenAddress,
+ makerAddress,
+ remainingFeeAmount,
+ );
+ await contractWrappers.erc20Token.transferAsync(
+ makerTokenAddress,
+ makerAddress,
constants.NULL_ADDRESS,
transferTokenAmount,
);
@@ -467,31 +456,30 @@ describe('OrderWatcher', () => {
(async () => {
const takerFee = Web3Wrapper.toBaseUnitAmount(new BigNumber(0), decimals);
const makerFee = Web3Wrapper.toBaseUnitAmount(new BigNumber(2), decimals);
- const feeRecipient = taker;
signedOrder = await fillScenarios.createFillableSignedOrderWithFeesAsync(
- makerToken.address,
- takerToken.address,
+ makerAssetData,
+ takerAssetData,
makerFee,
takerFee,
- maker,
- taker,
+ makerAddress,
+ takerAddress,
fillableAmount,
feeRecipient,
);
- orderWatcher.addOrder(signedOrder);
+ await orderWatcher.addOrderAsync(signedOrder);
const callback = callbackErrorReporter.reportNodeCallbackErrors(done)((orderState: OrderState) => {
const validOrderState = orderState as OrderStateValid;
const orderRelevantState = validOrderState.orderRelevantState;
- expect(orderRelevantState.remainingFillableMakerTokenAmount).to.be.bignumber.equal(
+ expect(orderRelevantState.remainingFillableMakerAssetAmount).to.be.bignumber.equal(
fillableAmount,
);
});
orderWatcher.subscribe(callback);
- await contractWrappers.token.setProxyAllowanceAsync(
- makerToken.address,
- maker,
+ await contractWrappers.erc20Token.setProxyAllowanceAsync(
+ makerTokenAddress,
+ makerAddress,
Web3Wrapper.toBaseUnitAmount(new BigNumber(100), decimals),
);
})().catch(done);
@@ -500,38 +488,37 @@ describe('OrderWatcher', () => {
it('should emit orderStateInvalid when watched order cancelled', (done: DoneCallback) => {
(async () => {
signedOrder = await fillScenarios.createFillableSignedOrderAsync(
- makerToken.address,
- takerToken.address,
- maker,
- taker,
+ makerAssetData,
+ takerAssetData,
+ makerAddress,
+ takerAddress,
fillableAmount,
);
- const orderHash = getOrderHashHex(signedOrder);
- orderWatcher.addOrder(signedOrder);
+ const orderHash = orderHashUtils.getOrderHashHex(signedOrder);
+ await orderWatcher.addOrderAsync(signedOrder);
const callback = callbackErrorReporter.reportNodeCallbackErrors(done)((orderState: OrderState) => {
expect(orderState.isValid).to.be.false();
const invalidOrderState = orderState as OrderStateInvalid;
expect(invalidOrderState.orderHash).to.be.equal(orderHash);
- expect(invalidOrderState.error).to.be.equal(ExchangeContractErrs.OrderRemainingFillAmountZero);
+ expect(invalidOrderState.error).to.be.equal(ExchangeContractErrs.OrderFillRoundingError);
});
orderWatcher.subscribe(callback);
-
- await contractWrappers.exchange.cancelOrderAsync(signedOrder, fillableAmount);
+ await contractWrappers.exchange.cancelOrderAsync(signedOrder);
})().catch(done);
});
it('should emit orderStateInvalid when within rounding error range', (done: DoneCallback) => {
(async () => {
const remainingFillableAmountInBaseUnits = new BigNumber(100);
signedOrder = await fillScenarios.createFillableSignedOrderAsync(
- makerToken.address,
- takerToken.address,
- maker,
- taker,
+ makerAssetData,
+ takerAssetData,
+ makerAddress,
+ takerAddress,
fillableAmount,
);
- const orderHash = getOrderHashHex(signedOrder);
- orderWatcher.addOrder(signedOrder);
+ const orderHash = orderHashUtils.getOrderHashHex(signedOrder);
+ await orderWatcher.addOrderAsync(signedOrder);
const callback = callbackErrorReporter.reportNodeCallbackErrors(done)((orderState: OrderState) => {
expect(orderState.isValid).to.be.false();
@@ -540,36 +527,108 @@ describe('OrderWatcher', () => {
expect(invalidOrderState.error).to.be.equal(ExchangeContractErrs.OrderFillRoundingError);
});
orderWatcher.subscribe(callback);
- await contractWrappers.exchange.cancelOrderAsync(
+ await contractWrappers.exchange.fillOrderAsync(
signedOrder,
fillableAmount.minus(remainingFillableAmountInBaseUnits),
+ takerAddress,
);
})().catch(done);
});
- it('should emit orderStateValid when watched order partially cancelled', (done: DoneCallback) => {
- (async () => {
- signedOrder = await fillScenarios.createFillableSignedOrderAsync(
- makerToken.address,
- takerToken.address,
- maker,
- taker,
- fillableAmount,
- );
-
- const cancelAmountInBaseUnits = new BigNumber(2);
- const orderHash = getOrderHashHex(signedOrder);
- orderWatcher.addOrder(signedOrder);
-
- const callback = callbackErrorReporter.reportNodeCallbackErrors(done)((orderState: OrderState) => {
- expect(orderState.isValid).to.be.true();
- const validOrderState = orderState as OrderStateValid;
- expect(validOrderState.orderHash).to.be.equal(orderHash);
- const orderRelevantState = validOrderState.orderRelevantState;
- expect(orderRelevantState.cancelledTakerTokenAmount).to.be.bignumber.equal(cancelAmountInBaseUnits);
- });
- orderWatcher.subscribe(callback);
- await contractWrappers.exchange.cancelOrderAsync(signedOrder, cancelAmountInBaseUnits);
- })().catch(done);
+ describe('erc721', () => {
+ let makerErc721AssetData: string;
+ let makerErc721TokenAddress: string;
+ const tokenId = new BigNumber(42);
+ [makerErc721TokenAddress] = tokenUtils.getDummyERC721TokenAddresses();
+ makerErc721AssetData = assetDataUtils.encodeERC721AssetData(makerErc721TokenAddress, tokenId);
+ const fillableErc721Amount = new BigNumber(1);
+ it('should emit orderStateInvalid when maker allowance set to 0 for watched order', (done: DoneCallback) => {
+ (async () => {
+ signedOrder = await fillScenarios.createFillableSignedOrderAsync(
+ makerErc721AssetData,
+ takerAssetData,
+ makerAddress,
+ takerAddress,
+ fillableErc721Amount,
+ );
+ const orderHash = orderHashUtils.getOrderHashHex(signedOrder);
+ await orderWatcher.addOrderAsync(signedOrder);
+ const callback = callbackErrorReporter.reportNodeCallbackErrors(done)((orderState: OrderState) => {
+ expect(orderState.isValid).to.be.false();
+ const invalidOrderState = orderState as OrderStateInvalid;
+ expect(invalidOrderState.orderHash).to.be.equal(orderHash);
+ expect(invalidOrderState.error).to.be.equal(ExchangeContractErrs.InsufficientMakerAllowance);
+ });
+ orderWatcher.subscribe(callback);
+ await contractWrappers.erc721Token.setApprovalAsync(
+ makerErc721TokenAddress,
+ constants.NULL_ADDRESS,
+ tokenId,
+ );
+ })().catch(done);
+ });
+ it('should emit orderStateInvalid when maker allowance for all set to 0 for watched order', (done: DoneCallback) => {
+ (async () => {
+ signedOrder = await fillScenarios.createFillableSignedOrderAsync(
+ makerErc721AssetData,
+ takerAssetData,
+ makerAddress,
+ takerAddress,
+ fillableErc721Amount,
+ );
+ await contractWrappers.erc721Token.setApprovalAsync(
+ makerErc721TokenAddress,
+ constants.NULL_ADDRESS,
+ tokenId,
+ );
+ let isApproved = true;
+ await contractWrappers.erc721Token.setProxyApprovalForAllAsync(
+ makerErc721TokenAddress,
+ makerAddress,
+ isApproved,
+ );
+ const orderHash = orderHashUtils.getOrderHashHex(signedOrder);
+ await orderWatcher.addOrderAsync(signedOrder);
+ const callback = callbackErrorReporter.reportNodeCallbackErrors(done)((orderState: OrderState) => {
+ expect(orderState.isValid).to.be.false();
+ const invalidOrderState = orderState as OrderStateInvalid;
+ expect(invalidOrderState.orderHash).to.be.equal(orderHash);
+ expect(invalidOrderState.error).to.be.equal(ExchangeContractErrs.InsufficientMakerAllowance);
+ });
+ orderWatcher.subscribe(callback);
+ isApproved = false;
+ await contractWrappers.erc721Token.setProxyApprovalForAllAsync(
+ makerErc721TokenAddress,
+ makerAddress,
+ isApproved,
+ );
+ })().catch(done);
+ });
+ it('should emit orderStateInvalid when maker moves NFT backing watched order', (done: DoneCallback) => {
+ (async () => {
+ signedOrder = await fillScenarios.createFillableSignedOrderAsync(
+ makerErc721AssetData,
+ takerAssetData,
+ makerAddress,
+ takerAddress,
+ fillableErc721Amount,
+ );
+ const orderHash = orderHashUtils.getOrderHashHex(signedOrder);
+ await orderWatcher.addOrderAsync(signedOrder);
+ const callback = callbackErrorReporter.reportNodeCallbackErrors(done)((orderState: OrderState) => {
+ expect(orderState.isValid).to.be.false();
+ const invalidOrderState = orderState as OrderStateInvalid;
+ expect(invalidOrderState.orderHash).to.be.equal(orderHash);
+ expect(invalidOrderState.error).to.be.equal(ExchangeContractErrs.InsufficientMakerBalance);
+ });
+ orderWatcher.subscribe(callback);
+ await contractWrappers.erc721Token.transferFromAsync(
+ makerErc721TokenAddress,
+ coinbase,
+ makerAddress,
+ tokenId,
+ );
+ })().catch(done);
+ });
});
});
}); // tslint:disable:max-file-line-count
diff --git a/packages/order-watcher/test/utils/token_utils.ts b/packages/order-watcher/test/utils/token_utils.ts
index e1191b5bb..f91b3797f 100644
--- a/packages/order-watcher/test/utils/token_utils.ts
+++ b/packages/order-watcher/test/utils/token_utils.ts
@@ -7,7 +7,7 @@ const PROTOCOL_TOKEN_SYMBOL = 'ZRX';
const WETH_TOKEN_SYMBOL = 'WETH';
export class TokenUtils {
- private _tokens: Token[];
+ private readonly _tokens: Token[];
constructor(tokens: Token[]) {
this._tokens = tokens;
}
diff --git a/packages/order-watcher/test/utils/web3_wrapper.ts b/packages/order-watcher/test/utils/web3_wrapper.ts
index f7d11f138..ab801fa7f 100644
--- a/packages/order-watcher/test/utils/web3_wrapper.ts
+++ b/packages/order-watcher/test/utils/web3_wrapper.ts
@@ -1,6 +1,6 @@
import { web3Factory } from '@0xproject/dev-utils';
-import { Provider } from '@0xproject/types';
import { Web3Wrapper } from '@0xproject/web3-wrapper';
+import { Provider } from 'ethereum-types';
const provider: Provider = web3Factory.getRpcProvider({ shouldUseInProcessGanache: true });
const web3Wrapper = new Web3Wrapper(provider);
diff --git a/packages/order-watcher/tslint.json b/packages/order-watcher/tslint.json
index ffaefe83a..059573ce7 100644
--- a/packages/order-watcher/tslint.json
+++ b/packages/order-watcher/tslint.json
@@ -1,3 +1,6 @@
{
+ "rules": {
+ "prefer-readonly": true
+ },
"extends": ["@0xproject/tslint-config"]
}
diff --git a/packages/react-docs-example/package.json b/packages/react-docs-example/package.json
index 6fd9aca22..2ccba3e41 100644
--- a/packages/react-docs-example/package.json
+++ b/packages/react-docs-example/package.json
@@ -1,7 +1,7 @@
{
"private": true,
"name": "@0xproject/react-docs-example",
- "version": "0.0.14",
+ "version": "0.0.15",
"engines": {
"node": ">=6.12"
},
@@ -50,7 +50,7 @@
"webpack-dev-server": "^2.11.1"
},
"dependencies": {
- "@0xproject/react-docs": "^0.0.15",
+ "@0xproject/react-docs": "^0.0.16",
"basscss": "^8.0.3",
"lodash": "^4.17.4",
"material-ui": "^0.17.1",
diff --git a/packages/react-docs/CHANGELOG.json b/packages/react-docs/CHANGELOG.json
index 4db9b44ca..f4af828d7 100644
--- a/packages/react-docs/CHANGELOG.json
+++ b/packages/react-docs/CHANGELOG.json
@@ -1,9 +1,19 @@
[
{
+ "version": "0.0.17",
+ "changes": [
+ {
+ "note": "Nest MD files under versions so that you can update them for future versions",
+ "pr": 844
+ }
+ ]
+ },
+ {
+ "timestamp": 1531919263,
"version": "0.0.16",
"changes": [
{
- "note": "Nest MD files under versions so that you can update them for future versions"
+ "note": "Dependencies updated"
}
]
},
diff --git a/packages/react-docs/CHANGELOG.md b/packages/react-docs/CHANGELOG.md
index c438a535a..3215c9fb7 100644
--- a/packages/react-docs/CHANGELOG.md
+++ b/packages/react-docs/CHANGELOG.md
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
+## v0.0.16 - _July 18, 2018_
+
+ * Dependencies updated
+
## v0.0.15 - _July 9, 2018_
* Dependencies updated
diff --git a/packages/react-docs/package.json b/packages/react-docs/package.json
index db2eca1af..1ca0e0157 100644
--- a/packages/react-docs/package.json
+++ b/packages/react-docs/package.json
@@ -1,6 +1,6 @@
{
"name": "@0xproject/react-docs",
- "version": "0.0.15",
+ "version": "0.0.16",
"engines": {
"node": ">=6.12"
},
@@ -25,7 +25,7 @@
"url": "https://github.com/0xProject/0x-monorepo.git"
},
"devDependencies": {
- "@0xproject/dev-utils": "^0.4.5",
+ "@0xproject/dev-utils": "^0.4.6",
"@0xproject/monorepo-scripts": "^0.2.2",
"@0xproject/tslint-config": "^0.4.21",
"@types/compare-versions": "^3.0.0",
@@ -36,8 +36,8 @@
"typescript": "2.7.1"
},
"dependencies": {
- "@0xproject/react-shared": "^0.2.2",
- "@0xproject/utils": "^0.7.2",
+ "@0xproject/react-shared": "^0.2.3",
+ "@0xproject/utils": "^0.7.3",
"@types/lodash": "4.14.104",
"@types/material-ui": "0.18.0",
"@types/node": "^8.0.53",
diff --git a/packages/react-docs/src/docs_info.ts b/packages/react-docs/src/docs_info.ts
index 810674d51..b37942da6 100644
--- a/packages/react-docs/src/docs_info.ts
+++ b/packages/react-docs/src/docs_info.ts
@@ -28,7 +28,7 @@ export class DocsInfo {
public sectionNameToMarkdownByVersion: SectionNameToMarkdownByVersion;
public contractsByVersionByNetworkId?: ContractsByVersionByNetworkId;
public typeConfigs: DocsInfoTypeConfigs;
- private _docsInfo: DocsInfoConfig;
+ private readonly _docsInfo: DocsInfoConfig;
constructor(config: DocsInfoConfig) {
this.id = config.id;
this.type = config.type;
diff --git a/packages/react-docs/src/utils/doxity_utils.ts b/packages/react-docs/src/utils/doxity_utils.ts
index 374ee07dd..6815daa0c 100644
--- a/packages/react-docs/src/utils/doxity_utils.ts
+++ b/packages/react-docs/src/utils/doxity_utils.ts
@@ -31,8 +31,8 @@ export const doxityUtils = {
comment: doxityConstructor.details,
returnComment: doxityConstructor.return,
callPath: '',
- parameters: this._convertParameters(doxityConstructor.inputs),
- returnType: this._convertType(doxityContractObj.name),
+ parameters: doxityUtils._convertParameters(doxityConstructor.inputs),
+ returnType: doxityUtils._convertType(doxityContractObj.name),
};
constructors.push(constructor);
}
@@ -40,7 +40,7 @@ export const doxityUtils = {
const doxityMethods: DoxityAbiDoc[] = _.filter<DoxityAbiDoc>(
doxityContractObj.abiDocs,
(abiDoc: DoxityAbiDoc) => {
- return this._isMethod(abiDoc);
+ return doxityUtils._isMethod(abiDoc);
},
);
const methods: SolidityMethod[] = _.map<DoxityAbiDoc, SolidityMethod>(
@@ -52,10 +52,10 @@ export const doxityUtils = {
// no-op. It's already undefined
} else if (outputs.length === 1) {
const outputsType = outputs[0].type;
- returnTypeIfExists = this._convertType(outputsType);
+ returnTypeIfExists = doxityUtils._convertType(outputsType);
} else {
const outputsType = `[${_.map(outputs, output => output.type).join(', ')}]`;
- returnTypeIfExists = this._convertType(outputsType);
+ returnTypeIfExists = doxityUtils._convertType(outputsType);
}
// For ZRXToken, we want to convert it to zrxToken, rather then simply zRXToken
const callPath =
@@ -70,7 +70,7 @@ export const doxityUtils = {
comment: doxityMethod.details,
returnComment: doxityMethod.return,
callPath,
- parameters: this._convertParameters(doxityMethod.inputs),
+ parameters: doxityUtils._convertParameters(doxityMethod.inputs),
returnType: returnTypeIfExists,
};
return method;
@@ -80,7 +80,7 @@ export const doxityUtils = {
const doxityProperties: DoxityAbiDoc[] = _.filter<DoxityAbiDoc>(
doxityContractObj.abiDocs,
(abiDoc: DoxityAbiDoc) => {
- return this._isProperty(abiDoc);
+ return doxityUtils._isProperty(abiDoc);
},
);
const properties = _.map<DoxityAbiDoc, Property>(doxityProperties, (doxityProperty: DoxityAbiDoc) => {
@@ -92,7 +92,7 @@ export const doxityUtils = {
}
const property = {
name: doxityProperty.name,
- type: this._convertType(typeName),
+ type: doxityUtils._convertType(typeName),
comment: doxityProperty.details,
};
return property;
@@ -105,7 +105,7 @@ export const doxityUtils = {
const events = _.map(doxityEvents, doxityEvent => {
const event = {
name: doxityEvent.name,
- eventArgs: this._convertEventArgs(doxityEvent.inputs),
+ eventArgs: doxityUtils._convertEventArgs(doxityEvent.inputs),
};
return event;
});
@@ -129,7 +129,7 @@ export const doxityUtils = {
name: input.name,
comment: input.description,
isOptional: false,
- type: this._convertType(input.type),
+ type: doxityUtils._convertType(input.type),
};
return parameter;
});
@@ -167,7 +167,7 @@ export const doxityUtils = {
const eventArg = {
isIndexed: input.indexed,
name: input.name,
- type: this._convertType(input.type),
+ type: doxityUtils._convertType(input.type),
};
return eventArg;
});
diff --git a/packages/react-docs/src/utils/typedoc_utils.ts b/packages/react-docs/src/utils/typedoc_utils.ts
index 5633d9040..a6d938e94 100644
--- a/packages/react-docs/src/utils/typedoc_utils.ts
+++ b/packages/react-docs/src/utils/typedoc_utils.ts
@@ -235,7 +235,7 @@ export const typeDocUtils = {
childTypeIfExists = {
name: child.name,
typeDocType: TypeDocTypes.Reflection,
- method: this._convertMethod(child, isConstructor, sections, sectionName, docId),
+ method: typeDocUtils._convertMethod(child, isConstructor, sections, sectionName, docId),
};
}
const c: CustomTypeChild = {
diff --git a/packages/react-shared/CHANGELOG.json b/packages/react-shared/CHANGELOG.json
index f05207c0c..a96540f10 100644
--- a/packages/react-shared/CHANGELOG.json
+++ b/packages/react-shared/CHANGELOG.json
@@ -1,5 +1,14 @@
[
{
+ "timestamp": 1531919263,
+ "version": "0.2.3",
+ "changes": [
+ {
+ "note": "Dependencies updated"
+ }
+ ]
+ },
+ {
"timestamp": 1531149657,
"version": "0.2.2",
"changes": [
diff --git a/packages/react-shared/CHANGELOG.md b/packages/react-shared/CHANGELOG.md
index 5b3b16f37..ceeb7a2e6 100644
--- a/packages/react-shared/CHANGELOG.md
+++ b/packages/react-shared/CHANGELOG.md
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
+## v0.2.3 - _July 18, 2018_
+
+ * Dependencies updated
+
## v0.2.2 - _July 9, 2018_
* Dependencies updated
diff --git a/packages/react-shared/package.json b/packages/react-shared/package.json
index 52c37d924..f7cafb9df 100644
--- a/packages/react-shared/package.json
+++ b/packages/react-shared/package.json
@@ -1,6 +1,6 @@
{
"name": "@0xproject/react-shared",
- "version": "0.2.2",
+ "version": "0.2.3",
"engines": {
"node": ">=6.12"
},
@@ -25,7 +25,7 @@
"url": "https://github.com/0xProject/0x-monorepo.git"
},
"devDependencies": {
- "@0xproject/dev-utils": "^0.4.5",
+ "@0xproject/dev-utils": "^0.4.6",
"@0xproject/monorepo-scripts": "^0.2.2",
"@0xproject/tslint-config": "^0.4.21",
"copyfiles": "^1.2.0",
diff --git a/packages/react-shared/src/components/nested_sidebar_menu.tsx b/packages/react-shared/src/components/nested_sidebar_menu.tsx
index 9b08e3c53..aa00d5985 100644
--- a/packages/react-shared/src/components/nested_sidebar_menu.tsx
+++ b/packages/react-shared/src/components/nested_sidebar_menu.tsx
@@ -41,7 +41,7 @@ const styles: Styles = {
export class NestedSidebarMenu extends React.Component<NestedSidebarMenuProps, NestedSidebarMenuState> {
public static defaultProps: Partial<NestedSidebarMenuProps> = {
shouldDisplaySectionHeaders: true,
- onMenuItemClick: _.noop,
+ onMenuItemClick: _.noop.bind(_),
};
public render(): React.ReactNode {
const navigation = _.map(this.props.topLevelMenu, (menuItems: string[], sectionName: string) => {
diff --git a/packages/sol-compiler/CHANGELOG.json b/packages/sol-compiler/CHANGELOG.json
index c96efcd89..3633cc5db 100644
--- a/packages/sol-compiler/CHANGELOG.json
+++ b/packages/sol-compiler/CHANGELOG.json
@@ -1,5 +1,14 @@
[
{
+ "timestamp": 1531919263,
+ "version": "0.5.4",
+ "changes": [
+ {
+ "note": "Dependencies updated"
+ }
+ ]
+ },
+ {
"timestamp": 1531149657,
"version": "0.5.3",
"changes": [
diff --git a/packages/sol-compiler/CHANGELOG.md b/packages/sol-compiler/CHANGELOG.md
index 1a69a1c8e..2ee2931a6 100644
--- a/packages/sol-compiler/CHANGELOG.md
+++ b/packages/sol-compiler/CHANGELOG.md
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
+## v0.5.4 - _July 18, 2018_
+
+ * Dependencies updated
+
## v0.5.3 - _July 9, 2018_
* Dependencies updated
diff --git a/packages/sol-compiler/package.json b/packages/sol-compiler/package.json
index 2a9486a2d..534205b47 100644
--- a/packages/sol-compiler/package.json
+++ b/packages/sol-compiler/package.json
@@ -1,6 +1,6 @@
{
"name": "@0xproject/sol-compiler",
- "version": "0.5.3",
+ "version": "0.5.4",
"engines": {
"node": ">=6.12"
},
@@ -53,7 +53,7 @@
},
"homepage": "https://github.com/0xProject/0x-monorepo/packages/sol-compiler/README.md",
"devDependencies": {
- "@0xproject/dev-utils": "^0.4.5",
+ "@0xproject/dev-utils": "^0.4.6",
"@0xproject/monorepo-scripts": "^0.2.2",
"@0xproject/tslint-config": "^0.4.21",
"@types/mkdirp": "^0.5.2",
@@ -68,7 +68,7 @@
"npm-run-all": "^4.1.2",
"nyc": "^11.0.1",
"shx": "^0.2.2",
- "tslint": "5.8.0",
+ "tslint": "5.11.0",
"typedoc": "0xProject/typedoc",
"types-bn": "^0.0.1",
"typescript": "2.7.1",
@@ -77,17 +77,16 @@
},
"dependencies": {
"@0xproject/assert": "0.2.13",
- "@0xproject/json-schemas": "0.8.2",
+ "@0xproject/json-schemas": "0.8.3",
"@0xproject/sol-resolver": "^0.0.8",
"@0xproject/types": "^0.8.2",
- "@0xproject/typescript-typings": "^0.4.2",
- "@0xproject/utils": "^0.7.2",
- "@0xproject/web3-wrapper": "^0.7.2",
+ "@0xproject/typescript-typings": "^0.4.3",
+ "@0xproject/utils": "^0.7.3",
+ "@0xproject/web3-wrapper": "^0.7.3",
"@types/yargs": "^11.0.0",
"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..3620a3ec1 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';
@@ -59,13 +58,13 @@ const CONFIG_FILE = 'compiler.json';
* to artifact files.
*/
export class Compiler {
- private _resolver: Resolver;
- private _nameResolver: NameResolver;
- private _contractsDir: string;
- private _compilerSettings: solc.CompilerSettings;
- private _artifactsDir: string;
- private _solcVersionIfExists: string | undefined;
- private _specifiedContracts: string[] | TYPE_ALL_FILES_IDENTIFIER;
+ private readonly _resolver: Resolver;
+ private readonly _nameResolver: NameResolver;
+ private readonly _contractsDir: string;
+ private readonly _compilerSettings: solc.CompilerSettings;
+ private readonly _artifactsDir: string;
+ private readonly _solcVersionIfExists: string | undefined;
+ private readonly _specifiedContracts: string[] | TYPE_ALL_FILES_IDENTIFIER;
/**
* Instantiates a new instance of the Compiler class.
* @return An instance of the Compiler class.
@@ -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/sol-compiler/test/compiler_test.ts b/packages/sol-compiler/test/compiler_test.ts
index ce359dceb..c9e141ee9 100644
--- a/packages/sol-compiler/test/compiler_test.ts
+++ b/packages/sol-compiler/test/compiler_test.ts
@@ -12,7 +12,7 @@ import { constants } from './util/constants';
const expect = chai.expect;
describe('#Compiler', function(): void {
- this.timeout(constants.timeoutMs);
+ this.timeout(constants.timeoutMs); // tslint:disable-line:no-invalid-this
const artifactsDir = `${__dirname}/fixtures/artifacts`;
const contractsDir = `${__dirname}/fixtures/contracts`;
const exchangeArtifactPath = `${artifactsDir}/Exchange.json`;
diff --git a/packages/sol-cov/CHANGELOG.json b/packages/sol-cov/CHANGELOG.json
index 8a622162f..038ba5654 100644
--- a/packages/sol-cov/CHANGELOG.json
+++ b/packages/sol-cov/CHANGELOG.json
@@ -77,6 +77,15 @@
]
},
{
+ "timestamp": 1531919263,
+ "version": "0.1.3",
+ "changes": [
+ {
+ "note": "Dependencies updated"
+ }
+ ]
+ },
+ {
"timestamp": 1531149657,
"version": "0.1.2",
"changes": [
diff --git a/packages/sol-cov/CHANGELOG.md b/packages/sol-cov/CHANGELOG.md
index 0ed77253e..d7621c23d 100644
--- a/packages/sol-cov/CHANGELOG.md
+++ b/packages/sol-cov/CHANGELOG.md
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
+## v0.1.3 - _July 18, 2018_
+
+ * Dependencies updated
+
## v0.1.2 - _July 9, 2018_
* Dependencies updated
diff --git a/packages/sol-cov/package.json b/packages/sol-cov/package.json
index 8553da7a4..abd70c929 100644
--- a/packages/sol-cov/package.json
+++ b/packages/sol-cov/package.json
@@ -1,6 +1,6 @@
{
"name": "@0xproject/sol-cov",
- "version": "0.1.2",
+ "version": "0.1.3",
"engines": {
"node": ">=6.12"
},
@@ -50,12 +50,12 @@
},
"homepage": "https://github.com/0xProject/0x.js/packages/sol-cov/README.md",
"dependencies": {
- "@0xproject/sol-compiler": "^0.5.3",
- "@0xproject/subproviders": "^0.10.5",
- "@0xproject/typescript-typings": "^0.4.2",
- "@0xproject/utils": "^0.7.2",
- "@0xproject/web3-wrapper": "^0.7.2",
- "@0xproject/dev-utils": "^0.4.5",
+ "@0xproject/sol-compiler": "^0.5.4",
+ "@0xproject/subproviders": "^0.10.6",
+ "@0xproject/typescript-typings": "^0.4.3",
+ "@0xproject/utils": "^0.7.3",
+ "@0xproject/web3-wrapper": "^0.7.3",
+ "@0xproject/dev-utils": "^0.4.6",
"ethereum-types": "^0.0.2",
"ethereumjs-util": "^5.1.1",
"glob": "^7.1.2",
@@ -86,7 +86,7 @@
"nyc": "^11.0.1",
"shx": "^0.2.2",
"sinon": "^4.0.0",
- "tslint": "5.8.0",
+ "tslint": "5.11.0",
"typedoc": "0xProject/typedoc",
"typescript": "2.7.1"
},
diff --git a/packages/sol-cov/src/artifact_adapters/sol_compiler_artifact_adapter.ts b/packages/sol-cov/src/artifact_adapters/sol_compiler_artifact_adapter.ts
index 220a9f98c..8e03bf7fd 100644
--- a/packages/sol-cov/src/artifact_adapters/sol_compiler_artifact_adapter.ts
+++ b/packages/sol-cov/src/artifact_adapters/sol_compiler_artifact_adapter.ts
@@ -12,8 +12,8 @@ import { AbstractArtifactAdapter } from './abstract_artifact_adapter';
const CONFIG_FILE = 'compiler.json';
export class SolCompilerArtifactAdapter extends AbstractArtifactAdapter {
- private _artifactsPath: string;
- private _sourcesPath: string;
+ private readonly _artifactsPath: string;
+ private readonly _sourcesPath: string;
constructor(artifactsPath?: string, sourcesPath?: string) {
super();
const config: CompilerOptions = fs.existsSync(CONFIG_FILE)
diff --git a/packages/sol-cov/src/artifact_adapters/truffle_artifact_adapter.ts b/packages/sol-cov/src/artifact_adapters/truffle_artifact_adapter.ts
index 53449e5e1..53b77aed5 100644
--- a/packages/sol-cov/src/artifact_adapters/truffle_artifact_adapter.ts
+++ b/packages/sol-cov/src/artifact_adapters/truffle_artifact_adapter.ts
@@ -7,8 +7,8 @@ import { AbstractArtifactAdapter } from './abstract_artifact_adapter';
import { SolCompilerArtifactAdapter } from './sol_compiler_artifact_adapter';
export class TruffleArtifactAdapter extends AbstractArtifactAdapter {
- private _solcVersion: string;
- private _sourcesPath: string;
+ private readonly _solcVersion: string;
+ private readonly _sourcesPath: string;
constructor(sourcesPath: string, solcVersion: string) {
super();
this._solcVersion = solcVersion;
diff --git a/packages/sol-cov/src/ast_visitor.ts b/packages/sol-cov/src/ast_visitor.ts
index a6bca4704..e55cdf6ec 100644
--- a/packages/sol-cov/src/ast_visitor.ts
+++ b/packages/sol-cov/src/ast_visitor.ts
@@ -18,15 +18,15 @@ enum BranchType {
export class ASTVisitor {
private _entryId = 0;
- private _fnMap: FnMap = {};
- private _branchMap: BranchMap = {};
- private _modifiersStatementIds: number[] = [];
- private _statementMap: StatementMap = {};
- private _locationByOffset: LocationByOffset;
- private _ignoreRangesBeginningAt: number[];
+ private readonly _fnMap: FnMap = {};
+ private readonly _branchMap: BranchMap = {};
+ private readonly _modifiersStatementIds: number[] = [];
+ private readonly _statementMap: StatementMap = {};
+ private readonly _locationByOffset: LocationByOffset;
+ private readonly _ignoreRangesBeginningAt: number[];
// keep track of contract/function ranges that are to be ignored
// so we can also ignore any children nodes within the contract/function
- private _ignoreRangesWithin: Array<[number, number]> = [];
+ private readonly _ignoreRangesWithin: Array<[number, number]> = [];
constructor(locationByOffset: LocationByOffset, ignoreRangesBeginningAt: number[] = []) {
this._locationByOffset = locationByOffset;
this._ignoreRangesBeginningAt = ignoreRangesBeginningAt;
diff --git a/packages/sol-cov/src/coverage_subprovider.ts b/packages/sol-cov/src/coverage_subprovider.ts
index 45843bc96..9667e891c 100644
--- a/packages/sol-cov/src/coverage_subprovider.ts
+++ b/packages/sol-cov/src/coverage_subprovider.ts
@@ -23,7 +23,7 @@ import { utils } from './utils';
* It's used to compute your code coverage while running solidity tests.
*/
export class CoverageSubprovider extends TraceInfoSubprovider {
- private _coverageCollector: TraceCollector;
+ private readonly _coverageCollector: TraceCollector;
/**
* Instantiates a CoverageSubprovider instance
* @param artifactAdapter Adapter for used artifacts format (0x, truffle, giveth, etc.)
diff --git a/packages/sol-cov/src/get_source_range_snippet.ts b/packages/sol-cov/src/get_source_range_snippet.ts
index 30d6ec802..bea17beae 100644
--- a/packages/sol-cov/src/get_source_range_snippet.ts
+++ b/packages/sol-cov/src/get_source_range_snippet.ts
@@ -38,7 +38,7 @@ export function getSourceRangeSnippet(sourceRange: SourceRange, sourceCode: stri
// A visitor which collects ASTInfo for most nodes in the AST.
class ASTInfoVisitor {
- private _astInfos: ASTInfo[] = [];
+ private readonly _astInfos: ASTInfo[] = [];
public getASTInfoForRange(sourceRange: SourceRange): ASTInfo | null {
// HACK(albrow): Sometimes the source range doesn't exactly match that
// of astInfo. To work around that we try with a +/-1 offset on
diff --git a/packages/sol-cov/src/profiler_subprovider.ts b/packages/sol-cov/src/profiler_subprovider.ts
index 9f98da524..ae9351f17 100644
--- a/packages/sol-cov/src/profiler_subprovider.ts
+++ b/packages/sol-cov/src/profiler_subprovider.ts
@@ -12,7 +12,7 @@ import { utils } from './utils';
* ProfilerSubprovider is used to profile Solidity code while running tests.
*/
export class ProfilerSubprovider extends TraceInfoSubprovider {
- private _profilerCollector: TraceCollector;
+ private readonly _profilerCollector: TraceCollector;
/**
* Instantiates a ProfilerSubprovider instance
* @param artifactAdapter Adapter for used artifacts format (0x, truffle, giveth, etc.)
diff --git a/packages/sol-cov/src/revert_trace_subprovider.ts b/packages/sol-cov/src/revert_trace_subprovider.ts
index fed305bd3..6ccf59653 100644
--- a/packages/sol-cov/src/revert_trace_subprovider.ts
+++ b/packages/sol-cov/src/revert_trace_subprovider.ts
@@ -18,8 +18,8 @@ import { utils } from './utils';
export class RevertTraceSubprovider extends TraceCollectionSubprovider {
// Lock is used to not accept normal transactions while doing call/snapshot magic because they'll be reverted later otherwise
private _contractsData!: ContractData[];
- private _artifactAdapter: AbstractArtifactAdapter;
- private _logger: Logger;
+ private readonly _artifactAdapter: AbstractArtifactAdapter;
+ private readonly _logger: Logger;
/**
* Instantiates a RevertTraceSubprovider instance
diff --git a/packages/sol-cov/src/trace_collection_subprovider.ts b/packages/sol-cov/src/trace_collection_subprovider.ts
index 9866472b9..b530b59db 100644
--- a/packages/sol-cov/src/trace_collection_subprovider.ts
+++ b/packages/sol-cov/src/trace_collection_subprovider.ts
@@ -32,10 +32,10 @@ export interface TraceCollectionSubproviderConfig {
export abstract class TraceCollectionSubprovider extends Subprovider {
protected _web3Wrapper!: Web3Wrapper;
// Lock is used to not accept normal transactions while doing call/snapshot magic because they'll be reverted later otherwise
- private _lock = new Lock();
- private _defaultFromAddress: string;
+ private readonly _lock = new Lock();
+ private readonly _defaultFromAddress: string;
private _isEnabled = true;
- private _config: TraceCollectionSubproviderConfig;
+ private readonly _config: TraceCollectionSubproviderConfig;
/**
* Instantiates a TraceCollectionSubprovider instance
* @param defaultFromAddress default from address to use when sending transactions
diff --git a/packages/sol-cov/src/trace_collector.ts b/packages/sol-cov/src/trace_collector.ts
index 1b458edec..3e2ae3516 100644
--- a/packages/sol-cov/src/trace_collector.ts
+++ b/packages/sol-cov/src/trace_collector.ts
@@ -33,11 +33,11 @@ export type SingleFileSubtraceHandler = (
* TraceCollector is used by CoverageSubprovider to compute code coverage based on collected trace data.
*/
export class TraceCollector {
- private _artifactAdapter: AbstractArtifactAdapter;
- private _logger: Logger;
+ private readonly _artifactAdapter: AbstractArtifactAdapter;
+ private readonly _logger: Logger;
private _contractsData!: ContractData[];
- private _collector = new Collector();
- private _singleFileSubtraceHandler: SingleFileSubtraceHandler;
+ private readonly _collector = new Collector();
+ private readonly _singleFileSubtraceHandler: SingleFileSubtraceHandler;
/**
* Instantiates a TraceCollector instance
diff --git a/packages/sol-resolver/package.json b/packages/sol-resolver/package.json
index 715b19d0e..f3fd62a2e 100644
--- a/packages/sol-resolver/package.json
+++ b/packages/sol-resolver/package.json
@@ -29,7 +29,7 @@
"copyfiles": "^1.2.0",
"make-promises-safe": "^1.1.0",
"shx": "^0.2.2",
- "tslint": "5.8.0",
+ "tslint": "5.11.0",
"typescript": "2.7.1"
},
"dependencies": {
diff --git a/packages/sol-resolver/src/resolvers/fallthrough_resolver.ts b/packages/sol-resolver/src/resolvers/fallthrough_resolver.ts
index 8f6af9be0..338f334f4 100644
--- a/packages/sol-resolver/src/resolvers/fallthrough_resolver.ts
+++ b/packages/sol-resolver/src/resolvers/fallthrough_resolver.ts
@@ -5,7 +5,7 @@ import { ContractSource } from '../types';
import { Resolver } from './resolver';
export class FallthroughResolver extends Resolver {
- private _resolvers: Resolver[] = [];
+ private readonly _resolvers: Resolver[] = [];
public appendResolver(resolver: Resolver): void {
this._resolvers.push(resolver);
}
diff --git a/packages/sol-resolver/src/resolvers/name_resolver.ts b/packages/sol-resolver/src/resolvers/name_resolver.ts
index bcd98615f..d6ac6a499 100644
--- a/packages/sol-resolver/src/resolvers/name_resolver.ts
+++ b/packages/sol-resolver/src/resolvers/name_resolver.ts
@@ -8,7 +8,7 @@ import { EnumerableResolver } from './enumerable_resolver';
const SOLIDITY_FILE_EXTENSION = '.sol';
export class NameResolver extends EnumerableResolver {
- private _contractsDir: string;
+ private readonly _contractsDir: string;
constructor(contractsDir: string) {
super();
this._contractsDir = contractsDir;
diff --git a/packages/sol-resolver/src/resolvers/npm_resolver.ts b/packages/sol-resolver/src/resolvers/npm_resolver.ts
index 2c0a44aad..9f8617145 100644
--- a/packages/sol-resolver/src/resolvers/npm_resolver.ts
+++ b/packages/sol-resolver/src/resolvers/npm_resolver.ts
@@ -6,7 +6,7 @@ import { ContractSource } from '../types';
import { Resolver } from './resolver';
export class NPMResolver extends Resolver {
- private _packagePath: string;
+ private readonly _packagePath: string;
constructor(packagePath: string) {
super();
this._packagePath = packagePath;
diff --git a/packages/sol-resolver/src/resolvers/relative_fs_resolver.ts b/packages/sol-resolver/src/resolvers/relative_fs_resolver.ts
index 2317ede83..77103b8c1 100644
--- a/packages/sol-resolver/src/resolvers/relative_fs_resolver.ts
+++ b/packages/sol-resolver/src/resolvers/relative_fs_resolver.ts
@@ -6,7 +6,7 @@ import { ContractSource } from '../types';
import { Resolver } from './resolver';
export class RelativeFSResolver extends Resolver {
- private _contractsDir: string;
+ private readonly _contractsDir: string;
constructor(contractsDir: string) {
super();
this._contractsDir = contractsDir;
diff --git a/packages/sra-report/CHANGELOG.json b/packages/sra-report/CHANGELOG.json
index 1a90331c7..7ce8bf0c1 100644
--- a/packages/sra-report/CHANGELOG.json
+++ b/packages/sra-report/CHANGELOG.json
@@ -1,5 +1,14 @@
[
{
+ "timestamp": 1531919263,
+ "version": "0.1.6",
+ "changes": [
+ {
+ "note": "Dependencies updated"
+ }
+ ]
+ },
+ {
"timestamp": 1531149657,
"version": "0.1.5",
"changes": [
diff --git a/packages/sra-report/CHANGELOG.md b/packages/sra-report/CHANGELOG.md
index 8831789ac..5a7b20b43 100644
--- a/packages/sra-report/CHANGELOG.md
+++ b/packages/sra-report/CHANGELOG.md
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
+## v0.1.6 - _July 18, 2018_
+
+ * Dependencies updated
+
## v0.1.5 - _July 9, 2018_
* Dependencies updated
diff --git a/packages/sra-report/package.json b/packages/sra-report/package.json
index 29a2dcfcb..77d92f96e 100644
--- a/packages/sra-report/package.json
+++ b/packages/sra-report/package.json
@@ -1,6 +1,6 @@
{
"name": "@0xproject/sra-report",
- "version": "0.1.5",
+ "version": "0.1.6",
"engines": {
"node": ">=6.12"
},
@@ -37,11 +37,11 @@
"dependencies": {
"@0xproject/assert": "^0.3.0",
"@0xproject/types": "^0.8.2",
- "@0xproject/order-utils": "^0.0.8",
- "@0xproject/connect": "0.6.16",
- "@0xproject/json-schemas": "0.8.2",
- "@0xproject/typescript-typings": "^0.4.2",
- "@0xproject/utils": "^0.7.2",
+ "@0xproject/order-utils": "^0.0.9",
+ "@0xproject/connect": "0.6.17",
+ "@0xproject/json-schemas": "0.8.3",
+ "@0xproject/typescript-typings": "^0.4.3",
+ "@0xproject/utils": "^0.7.3",
"chalk": "^2.3.0",
"lodash": "^4.17.4",
"newman": "^3.9.3",
@@ -65,7 +65,7 @@
"npm-run-all": "^4.1.2",
"nyc": "^11.0.1",
"shx": "^0.2.2",
- "tslint": "5.8.0",
+ "tslint": "5.11.0",
"typescript": "2.7.1"
},
"publishConfig": {
diff --git a/packages/subproviders/CHANGELOG.json b/packages/subproviders/CHANGELOG.json
index 7a3f29fe0..6942aa5db 100644
--- a/packages/subproviders/CHANGELOG.json
+++ b/packages/subproviders/CHANGELOG.json
@@ -5,8 +5,16 @@
{
"note": "Add `EthLightwalletSubprovider`"
}
- ],
- "timestamp": 1531149657
+ ]
+ },
+ {
+ "timestamp": 1531919263,
+ "version": "0.10.6",
+ "changes": [
+ {
+ "note": "Dependencies updated"
+ }
+ ]
},
{
"timestamp": 1529397769,
diff --git a/packages/subproviders/CHANGELOG.md b/packages/subproviders/CHANGELOG.md
index 6fab0a4c4..c433721eb 100644
--- a/packages/subproviders/CHANGELOG.md
+++ b/packages/subproviders/CHANGELOG.md
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
+## v0.10.6 - _July 18, 2018_
+
+ * Dependencies updated
+
## v0.10.5 - _July 9, 2018_
* Update web3-provider-engine to v14.0.6 including the leaked global.XMLHttpRequest bug fix
diff --git a/packages/subproviders/package.json b/packages/subproviders/package.json
index bdc846e6b..620a46384 100644
--- a/packages/subproviders/package.json
+++ b/packages/subproviders/package.json
@@ -1,6 +1,6 @@
{
"name": "@0xproject/subproviders",
- "version": "0.10.5",
+ "version": "0.10.6",
"engines": {
"node": ">=6.12"
},
@@ -42,9 +42,9 @@
"dependencies": {
"@0xproject/assert": "^0.3.0",
"@0xproject/types": "^1.0.0",
- "@0xproject/web3-wrapper": "^0.7.2",
- "@0xproject/typescript-typings": "^0.4.2",
- "@0xproject/utils": "^0.7.2",
+ "@0xproject/web3-wrapper": "^0.7.3",
+ "@0xproject/typescript-typings": "^0.4.3",
+ "@0xproject/utils": "^0.7.3",
"@ledgerhq/hw-app-eth": "^4.3.0",
"@ledgerhq/hw-transport-u2f": "^4.3.0",
"ethereum-types": "^0.0.2",
@@ -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"
@@ -62,7 +63,7 @@
"devDependencies": {
"@0xproject/monorepo-scripts": "^0.2.2",
"@0xproject/tslint-config": "^0.4.21",
- "@0xproject/utils": "^0.7.2",
+ "@0xproject/utils": "^0.7.3",
"@types/bip39": "^2.4.0",
"@types/bn.js": "^4.11.0",
"@types/hdkey": "^0.7.0",
@@ -81,7 +82,7 @@
"nyc": "^11.0.1",
"shx": "^0.2.2",
"sinon": "^4.0.0",
- "tslint": "5.8.0",
+ "tslint": "5.11.0",
"typedoc": "0xProject/typedoc",
"typescript": "2.7.1",
"webpack": "^3.1.0"
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/eth_lightwallet_subprovider.ts b/packages/subproviders/src/subproviders/eth_lightwallet_subprovider.ts
index a9ebbb790..454dae58e 100644
--- a/packages/subproviders/src/subproviders/eth_lightwallet_subprovider.ts
+++ b/packages/subproviders/src/subproviders/eth_lightwallet_subprovider.ts
@@ -12,8 +12,8 @@ import { PrivateKeyWalletSubprovider } from './private_key_wallet';
* Source: https://github.com/MetaMask/provider-engine/blob/master/subproviders/subprovider.js
*/
export class EthLightwalletSubprovider extends BaseWalletSubprovider {
- private _keystore: lightwallet.keystore;
- private _pwDerivedKey: Uint8Array;
+ private readonly _keystore: lightwallet.keystore;
+ private readonly _pwDerivedKey: Uint8Array;
constructor(keystore: lightwallet.keystore, pwDerivedKey: Uint8Array) {
super();
this._keystore = keystore;
diff --git a/packages/subproviders/src/subproviders/fake_gas_estimate_subprovider.ts b/packages/subproviders/src/subproviders/fake_gas_estimate_subprovider.ts
index d750505e7..bc1b34aba 100644
--- a/packages/subproviders/src/subproviders/fake_gas_estimate_subprovider.ts
+++ b/packages/subproviders/src/subproviders/fake_gas_estimate_subprovider.ts
@@ -14,7 +14,7 @@ import { Subprovider } from './subprovider';
* It intercepts the `eth_estimateGas` JSON RPC call and always returns a constant gas amount when queried.
*/
export class FakeGasEstimateSubprovider extends Subprovider {
- private _constantGasAmount: number;
+ private readonly _constantGasAmount: number;
/**
* Instantiates an instance of the FakeGasEstimateSubprovider
* @param constantGasAmount The constant gas amount you want returned
diff --git a/packages/subproviders/src/subproviders/ganache.ts b/packages/subproviders/src/subproviders/ganache.ts
index 79c43bc68..986094dba 100644
--- a/packages/subproviders/src/subproviders/ganache.ts
+++ b/packages/subproviders/src/subproviders/ganache.ts
@@ -10,7 +10,7 @@ import { Subprovider } from './subprovider';
* It intercepts all JSON RPC requests and relays them to an in-process ganache instance.
*/
export class GanacheSubprovider extends Subprovider {
- private _ganacheProvider: Provider;
+ private readonly _ganacheProvider: Provider;
/**
* Instantiates a GanacheSubprovider
* @param opts The desired opts with which to instantiate the Ganache provider
diff --git a/packages/subproviders/src/subproviders/ledger.ts b/packages/subproviders/src/subproviders/ledger.ts
index 8345be33c..6ad5de2e2 100644
--- a/packages/subproviders/src/subproviders/ledger.ts
+++ b/packages/subproviders/src/subproviders/ledger.ts
@@ -32,14 +32,14 @@ const DEFAULT_ADDRESS_SEARCH_LIMIT = 1000;
*/
export class LedgerSubprovider extends BaseWalletSubprovider {
// tslint:disable-next-line:no-unused-variable
- private _nonceLock = new Lock();
- private _connectionLock = new Lock();
- private _networkId: number;
+ private readonly _nonceLock = new Lock();
+ private readonly _connectionLock = new Lock();
+ private readonly _networkId: number;
private _baseDerivationPath: string;
- private _ledgerEthereumClientFactoryAsync: LedgerEthereumClientFactoryAsync;
+ private readonly _ledgerEthereumClientFactoryAsync: LedgerEthereumClientFactoryAsync;
private _ledgerClientIfExists?: LedgerEthereumClient;
- private _shouldAlwaysAskForConfirmation: boolean;
- private _addressSearchLimit: number;
+ private readonly _shouldAlwaysAskForConfirmation: boolean;
+ private readonly _addressSearchLimit: number;
/**
* Instantiates a LedgerSubprovider. Defaults to derivationPath set to `44'/60'/0'`.
* TestRPC/Ganache defaults to `m/44'/60'/0'/0`, so set this in the configs if desired.
diff --git a/packages/subproviders/src/subproviders/mnemonic_wallet.ts b/packages/subproviders/src/subproviders/mnemonic_wallet.ts
index 596300425..1495112b6 100644
--- a/packages/subproviders/src/subproviders/mnemonic_wallet.ts
+++ b/packages/subproviders/src/subproviders/mnemonic_wallet.ts
@@ -20,10 +20,10 @@ const DEFAULT_ADDRESS_SEARCH_LIMIT = 1000;
* all requests with accounts derived from the supplied mnemonic.
*/
export class MnemonicWalletSubprovider extends BaseWalletSubprovider {
- private _addressSearchLimit: number;
+ private readonly _addressSearchLimit: number;
private _baseDerivationPath: string;
private _derivedKeyInfo: DerivedHDKeyInfo;
- private _mnemonic: string;
+ private readonly _mnemonic: string;
/**
* Instantiates a MnemonicWalletSubprovider. Defaults to baseDerivationPath set to `44'/60'/0'/0`.
diff --git a/packages/subproviders/src/subproviders/nonce_tracker.ts b/packages/subproviders/src/subproviders/nonce_tracker.ts
index dcc421574..eea722aee 100644
--- a/packages/subproviders/src/subproviders/nonce_tracker.ts
+++ b/packages/subproviders/src/subproviders/nonce_tracker.ts
@@ -17,7 +17,7 @@ const NONCE_TOO_LOW_ERROR_MESSAGE = 'Transaction nonce is too low';
* We added the additional feature of clearing the cached nonce value when a `nonce value too low` error occurs.
*/
export class NonceTrackerSubprovider extends Subprovider {
- private _nonceCache: { [address: string]: string } = {};
+ private readonly _nonceCache: { [address: string]: string } = {};
private static _reconstructTransaction(payload: JSONRPCRequestPayload): EthereumTx {
const raw = payload.params[0];
if (_.isUndefined(raw)) {
diff --git a/packages/subproviders/src/subproviders/private_key_wallet.ts b/packages/subproviders/src/subproviders/private_key_wallet.ts
index b3f48fd90..9d6fc487e 100644
--- a/packages/subproviders/src/subproviders/private_key_wallet.ts
+++ b/packages/subproviders/src/subproviders/private_key_wallet.ts
@@ -13,8 +13,8 @@ import { BaseWalletSubprovider } from './base_wallet_subprovider';
* all requests with the supplied Ethereum private key.
*/
export class PrivateKeyWalletSubprovider extends BaseWalletSubprovider {
- private _address: string;
- private _privateKeyBuffer: Buffer;
+ private readonly _address: string;
+ private readonly _privateKeyBuffer: Buffer;
/**
* Instantiates a PrivateKeyWalletSubprovider.
* @param privateKey The corresponding private key to an Ethereum address
diff --git a/packages/subproviders/src/subproviders/redundant_subprovider.ts b/packages/subproviders/src/subproviders/redundant_subprovider.ts
index a60d6706e..7aa6226d5 100644
--- a/packages/subproviders/src/subproviders/redundant_subprovider.ts
+++ b/packages/subproviders/src/subproviders/redundant_subprovider.ts
@@ -12,7 +12,7 @@ import { Subprovider } from './subprovider';
* set of JSON RPC endpoints.
*/
export class RedundantSubprovider extends Subprovider {
- private _subproviders: Subprovider[];
+ private readonly _subproviders: Subprovider[];
private static async _firstSuccessAsync(
subproviders: Subprovider[],
payload: JSONRPCRequestPayload,
diff --git a/packages/subproviders/src/subproviders/rpc_subprovider.ts b/packages/subproviders/src/subproviders/rpc_subprovider.ts
new file mode 100644
index 000000000..d874c6f05
--- /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 readonly _rpcUrl: string;
+ private readonly _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/signer.ts b/packages/subproviders/src/subproviders/signer.ts
index f7329e00c..d5fd86897 100644
--- a/packages/subproviders/src/subproviders/signer.ts
+++ b/packages/subproviders/src/subproviders/signer.ts
@@ -12,7 +12,7 @@ import { Subprovider } from './subprovider';
* are passed onwards for subsequent subproviders to handle.
*/
export class SignerSubprovider extends Subprovider {
- private _web3Wrapper: Web3Wrapper;
+ private readonly _web3Wrapper: Web3Wrapper;
/**
* Instantiates a new SignerSubprovider
* @param provider Web3 provider that should handle all user account related requests
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/src/utils/wallet_utils.ts b/packages/subproviders/src/utils/wallet_utils.ts
index 3748077ef..4c233645b 100644
--- a/packages/subproviders/src/utils/wallet_utils.ts
+++ b/packages/subproviders/src/utils/wallet_utils.ts
@@ -6,8 +6,8 @@ import { DerivedHDKeyInfo } from '../types';
const DEFAULT_ADDRESS_SEARCH_LIMIT = 1000;
class DerivedHDKeyInfoIterator implements IterableIterator<DerivedHDKeyInfo> {
- private _parentDerivedKeyInfo: DerivedHDKeyInfo;
- private _searchLimit: number;
+ private readonly _parentDerivedKeyInfo: DerivedHDKeyInfo;
+ private readonly _searchLimit: number;
private _index: number;
constructor(initialDerivedKey: DerivedHDKeyInfo, searchLimit: number = DEFAULT_ADDRESS_SEARCH_LIMIT) {
diff --git a/packages/subproviders/test/integration/ledger_subprovider_test.ts b/packages/subproviders/test/integration/ledger_subprovider_test.ts
index 196cecf32..527ee5b22 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();
@@ -180,7 +176,7 @@ describe('LedgerSubprovider', () => {
params: [tx],
id: 1,
};
- await promisify(defaultProvider.sendAsync, defaultProvider)(payload);
+ await promisify(defaultProvider.sendAsync.bind(defaultProvider))(payload);
// Send transaction from Ledger
tx = {
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..a1d146dbc 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,
@@ -56,7 +55,7 @@ describe('LedgerSubprovider', () => {
return ecSignature;
},
transport: {
- close: _.noop,
+ close: _.noop.bind(_),
} as LedgerCommunicationClient,
};
// tslint:enable:no-object-literal-type-assertion
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..05f213cf5 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;
@@ -61,9 +60,9 @@ describe('NonceTrackerSubprovider', () => {
const payload = { ...getTransactionCountPayload, params: ['0x0', 'pending'] };
- const response = await promisify<any>(provider.sendAsync, provider)(payload);
+ const response = await promisify<any>(provider.sendAsync.bind(provider))(payload);
expect(response.result).to.be.eq('0x00');
- const secondResponse = await promisify<any>(provider.sendAsync, provider)(payload);
+ const secondResponse = await promisify<any>(provider.sendAsync.bind(provider))(payload);
expect(secondResponse.result).to.be.eq('0x00');
});
it('does not cache the result for latest transaction count', async () => {
@@ -75,9 +74,9 @@ describe('NonceTrackerSubprovider', () => {
const payload = { ...getTransactionCountPayload, params: ['0x0', 'latest'] };
- const response = await promisify<any>(provider.sendAsync, provider)(payload);
+ const response = await promisify<any>(provider.sendAsync.bind(provider))(payload);
expect(response.result).to.be.eq('0x00');
- const secondResponse = await promisify<any>(provider.sendAsync, provider)(payload);
+ const secondResponse = await promisify<any>(provider.sendAsync.bind(provider))(payload);
expect(secondResponse.result).to.be.eq('0x99');
});
it('clears the cache on a Nonce Too Low Error', async () => {
@@ -104,14 +103,14 @@ describe('NonceTrackerSubprovider', () => {
params: [transaction.serialize()],
};
- const response = await promisify<any>(provider.sendAsync, provider)(noncePayload);
+ const response = await promisify<any>(provider.sendAsync.bind(provider))(noncePayload);
expect(response.result).to.be.eq('0x00');
- const secondResponse = await promisify<any>(provider.sendAsync, provider)(noncePayload);
+ const secondResponse = await promisify<any>(provider.sendAsync.bind(provider))(noncePayload);
expect(secondResponse.result).to.be.eq('0x00');
try {
- await promisify(provider.sendAsync, provider)(txPayload);
+ await promisify(provider.sendAsync.bind(provider))(txPayload);
} catch (err) {
- const thirdResponse = await promisify<any>(provider.sendAsync, provider)(noncePayload);
+ const thirdResponse = await promisify<any>(provider.sendAsync.bind(provider))(noncePayload);
expect(thirdResponse.result).to.be.eq('0x99');
}
});
@@ -139,12 +138,12 @@ describe('NonceTrackerSubprovider', () => {
params: [transaction.serialize()],
};
- const response = await promisify<any>(provider.sendAsync, provider)(noncePayload);
+ const response = await promisify<any>(provider.sendAsync.bind(provider))(noncePayload);
expect(response.result).to.be.eq('0x00');
- const secondResponse = await promisify<any>(provider.sendAsync, provider)(noncePayload);
+ const secondResponse = await promisify<any>(provider.sendAsync.bind(provider))(noncePayload);
expect(secondResponse.result).to.be.eq('0x00');
- await promisify(provider.sendAsync, provider)(txPayload);
- const thirdResponse = await promisify<any>(provider.sendAsync, provider)(noncePayload);
+ await promisify(provider.sendAsync.bind(provider))(txPayload);
+ const thirdResponse = await promisify<any>(provider.sendAsync.bind(provider))(noncePayload);
expect(thirdResponse.result).to.be.eq('0x01');
});
});
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/subproviders/tsconfig.json b/packages/subproviders/tsconfig.json
index 72dfee80b..e35816553 100644
--- a/packages/subproviders/tsconfig.json
+++ b/packages/subproviders/tsconfig.json
@@ -1,8 +1,7 @@
{
"extends": "../../tsconfig",
"compilerOptions": {
- "outDir": "lib",
- "downlevelIteration": true
+ "outDir": "lib"
},
"include": ["./src/**/*", "./test/**/*"]
}
diff --git a/packages/testnet-faucets/package.json b/packages/testnet-faucets/package.json
index 72ab8f61b..793819f39 100644
--- a/packages/testnet-faucets/package.json
+++ b/packages/testnet-faucets/package.json
@@ -1,7 +1,7 @@
{
"private": true,
"name": "@0xproject/testnet-faucets",
- "version": "1.0.35",
+ "version": "1.0.36",
"engines": {
"node": ">=6.12"
},
@@ -18,18 +18,17 @@
"author": "Fabio Berger",
"license": "Apache-2.0",
"dependencies": {
- "0x.js": "^0.38.0",
- "@0xproject/subproviders": "^0.10.5",
- "@0xproject/web3-wrapper": "^0.7.2",
- "@0xproject/typescript-typings": "^0.4.2",
- "@0xproject/utils": "^0.7.2",
+ "0x.js": "0.38.5",
+ "@0xproject/subproviders": "^0.10.6",
+ "@0xproject/web3-wrapper": "^0.7.3",
+ "@0xproject/typescript-typings": "^0.4.3",
+ "@0xproject/utils": "^0.7.3",
"body-parser": "^1.17.1",
"ethereumjs-tx": "^1.3.5",
"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",
@@ -43,7 +42,7 @@
"nodemon": "^1.11.0",
"shx": "^0.2.2",
"source-map-loader": "^0.1.6",
- "tslint": "5.8.0",
+ "tslint": "5.11.0",
"typescript": "2.7.1",
"webpack": "^3.1.0",
"webpack-node-externals": "^1.6.0"
diff --git a/packages/testnet-faucets/src/ts/dispatch_queue.ts b/packages/testnet-faucets/src/ts/dispatch_queue.ts
index b1996a0c2..0a13df7c9 100644
--- a/packages/testnet-faucets/src/ts/dispatch_queue.ts
+++ b/packages/testnet-faucets/src/ts/dispatch_queue.ts
@@ -7,8 +7,8 @@ const MAX_QUEUE_SIZE = 500;
const DEFAULT_QUEUE_INTERVAL_MS = 1000;
export class DispatchQueue {
- private _queueIntervalMs: number;
- private _queue: Array<() => Promise<void>>;
+ private readonly _queueIntervalMs: number;
+ private readonly _queue: Array<() => Promise<void>>;
private _queueIntervalIdIfExists?: NodeJS.Timer;
constructor() {
this._queueIntervalMs = DEFAULT_QUEUE_INTERVAL_MS;
diff --git a/packages/testnet-faucets/src/ts/error_reporter.ts b/packages/testnet-faucets/src/ts/error_reporter.ts
index a0abcc07b..49c37b6eb 100644
--- a/packages/testnet-faucets/src/ts/error_reporter.ts
+++ b/packages/testnet-faucets/src/ts/error_reporter.ts
@@ -12,7 +12,7 @@ export const errorReporter = {
rollbar.handleUncaughtExceptions(configs.ROLLBAR_ACCESS_KEY);
process.on('unhandledRejection', async (err: Error) => {
logUtils.log(`Uncaught exception ${err}. Stack: ${err.stack}`);
- await this.reportAsync(err);
+ await errorReporter.reportAsync(err);
process.exit(1);
});
},
@@ -20,7 +20,7 @@ export const errorReporter = {
if (configs.ENVIRONMENT === 'development') {
return; // Do not log development environment errors
}
- return new Promise((resolve, reject) => {
+ return new Promise<any>((resolve, reject) => {
rollbar.handleError(err, req, (rollbarErr: Error) => {
if (rollbarErr) {
logUtils.log(`Error reporting to rollbar, ignoring: ${rollbarErr}`);
diff --git a/packages/testnet-faucets/src/ts/handler.ts b/packages/testnet-faucets/src/ts/handler.ts
index 6d26691d6..3749bc70b 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';
@@ -34,19 +37,15 @@ enum RequestedAssetType {
const FIVE_DAYS_IN_MS = 4.32e8; // TODO: make this configurable
export class Handler {
- private _networkConfigByNetworkId: ItemByNetworkId<NetworkConfig> = {};
+ private readonly _networkConfigByNetworkId: ItemByNetworkId<NetworkConfig> = {};
private static _createProviderEngine(rpcUrl: string): Provider {
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/testnet-faucets/src/ts/server.ts b/packages/testnet-faucets/src/ts/server.ts
index 5416cdcc3..f00562000 100644
--- a/packages/testnet-faucets/src/ts/server.ts
+++ b/packages/testnet-faucets/src/ts/server.ts
@@ -24,10 +24,26 @@ app.get('/ping', (req: express.Request, res: express.Response) => {
res.status(constants.SUCCESS_STATUS).send('pong');
});
app.get('/info', handler.getQueueInfo.bind(handler));
-app.get('/ether/:recipient', parameterTransformer.transform, handler.dispenseEther.bind(handler));
-app.get('/zrx/:recipient', parameterTransformer.transform, handler.dispenseZRX.bind(handler));
-app.get('/order/weth/:recipient', parameterTransformer.transform, handler.dispenseWETHOrderAsync.bind(handler));
-app.get('/order/zrx/:recipient', parameterTransformer.transform, handler.dispenseZRXOrderAsync.bind(handler));
+app.get(
+ '/ether/:recipient',
+ parameterTransformer.transform.bind(parameterTransformer),
+ handler.dispenseEther.bind(handler),
+);
+app.get(
+ '/zrx/:recipient',
+ parameterTransformer.transform.bind(parameterTransformer),
+ handler.dispenseZRX.bind(handler),
+);
+app.get(
+ '/order/weth/:recipient',
+ parameterTransformer.transform.bind(parameterTransformer),
+ handler.dispenseWETHOrderAsync.bind(handler),
+);
+app.get(
+ '/order/zrx/:recipient',
+ parameterTransformer.transform.bind(parameterTransformer),
+ handler.dispenseZRXOrderAsync.bind(handler),
+);
// Log to rollbar any errors unhandled by handlers
app.use(errorReporter.errorHandler());
diff --git a/packages/tslint-config/package.json b/packages/tslint-config/package.json
index 356499f6b..b136b7e4a 100644
--- a/packages/tslint-config/package.json
+++ b/packages/tslint-config/package.json
@@ -43,7 +43,7 @@
},
"dependencies": {
"lodash": "^4.17.4",
- "tslint": "5.8.0",
+ "tslint": "5.11.0",
"tslint-eslint-rules": "^4.1.1",
"tslint-react": "^3.2.0",
"tsutils": "2.22.2"
diff --git a/packages/tslint-config/rules/customNoMagicNumbersRule.ts b/packages/tslint-config/rules/customNoMagicNumbersRule.ts
index 0a565b2e6..cb124f738 100644
--- a/packages/tslint-config/rules/customNoMagicNumbersRule.ts
+++ b/packages/tslint-config/rules/customNoMagicNumbersRule.ts
@@ -29,6 +29,7 @@ export class Rule extends Lint.Rules.AbstractRule {
public apply(sourceFile: ts.SourceFile): Lint.RuleFailure[] {
const allowedNumbers = this.ruleArguments.length > 0 ? this.ruleArguments : Rule.DEFAULT_ALLOWED;
return this.applyWithWalker(
+ // tslint:disable-next-line:no-inferred-empty-object-type
new CustomNoMagicNumbersWalker(sourceFile, this.ruleName, new Set(allowedNumbers.map(String))),
);
}
diff --git a/packages/tslint-config/tslint.json b/packages/tslint-config/tslint.json
index 05efd158a..93403d36b 100644
--- a/packages/tslint-config/tslint.json
+++ b/packages/tslint-config/tslint.json
@@ -5,54 +5,82 @@
"arrow-parens": [true, "ban-single-arg-parens"],
"arrow-return-shorthand": true,
"async-suffix": true,
- "boolean-naming": true,
- "no-switch-case-fall-through": true,
- "switch-default": true,
"await-promise": true,
- "custom-no-magic-numbers": [true, 0, 1, 2, 3, -1],
"binary-expression-operand-order": true,
+ "boolean-naming": true,
"callable-types": true,
"class-name": true,
"completed-docs": [
true,
{
- "functions": { "visibilities": ["exported"] },
- "methods": { "locations": "instance", "privacies": ["public", "protected"] }
+ "functions": {
+ "visibilities": ["exported"]
+ },
+ "methods": {
+ "locations": "instance",
+ "privacies": ["public", "protected"]
+ }
}
],
"curly": true,
- "eofline": true,
- "typedef": [true, "call-signature", "parameter", "property-declaration"],
+ "custom-no-magic-numbers": [true, 0, 1, 2, 3, -1],
"encoding": true,
+ "eofline": true,
"import-spacing": true,
"indent": [true, "spaces", 4],
"interface-name": false,
"interface-over-type-literal": true,
+ "jsx-alignment": true,
+ "jsx-boolean-value": true,
+ "jsx-curly-spacing": [true, "never"],
+ "jsx-no-bind": false,
+ "jsx-no-lambda": true,
+ "jsx-no-multiline-js": false,
+ "jsx-no-string-ref": true,
+ "jsx-self-close": true,
+ "jsx-wrap-multiline": false,
"linebreak-style": [true, "LF"],
"max-classes-per-file": [true, 1],
- "max-line-length": false,
"max-file-line-count": [true, 500],
+ "max-line-length": false,
"member-access": true,
"member-ordering": [true, "public-before-private", "static-before-instance", "variables-before-functions"],
- "newline-before-return": false,
"new-parens": true,
+ "newline-before-return": false,
"no-angle-bracket-type-assertion": true,
"no-boolean-literal-compare": true,
+ "no-debugger": true,
"no-default-export": true,
+ "no-duplicate-super": true,
+ "no-duplicate-switch-case": true,
+ "no-duplicate-variable": true,
"no-empty-interface": false,
+ "no-eval": true,
"no-floating-promises": true,
+ "no-implicit-dependencies": [true, "dev"],
+ "no-inferred-empty-object-type": true,
+ "no-invalid-template-strings": true,
+ "no-invalid-this": true,
+ "no-misused-new": true,
"no-non-null-assertion": true,
"no-parameter-reassignment": true,
"no-redundant-jsdoc": true,
"no-return-await": true,
- "no-unused-variable": [true, "check-parameters"],
+ "no-shadowed-variable": true,
+ "no-sparse-arrays": true,
+ "no-string-literal": true,
"no-string-throw": true,
"no-submodule-imports": false,
+ "no-switch-case-fall-through": true,
+ "no-this-assignment": false,
+ "no-unbound-method": true,
+ "no-unnecessary-class": true,
"no-unnecessary-type-assertion": true,
- "no-implicit-dependencies": [true, "dev"],
+ "no-unsafe-finally": true,
+ "no-unused-variable": [true, "check-parameters"],
"number-literal-format": true,
- "object-literal-sort-keys": false,
"object-literal-key-quotes": false,
+ "object-literal-sort-keys": false,
"ordered-imports": [
true,
{
@@ -62,6 +90,8 @@
"prefer-const": true,
"prefer-for-of": true,
"prefer-function-over-method": true,
+ "prefer-object-spread": true,
+ "prefer-readonly": true,
"promise-function-async": true,
"quotemark": [true, "single", "avoid-escape", "jsx-double"],
"restrict-plus-operands": true,
@@ -70,14 +100,16 @@
true,
{
"anonymous": "never",
- "named": "never",
- "method": "never",
+ "asyncArrow": "always",
"constructor": "never",
- "asyncArrow": "always"
+ "method": "never",
+ "named": "never"
}
],
"space-within-parens": false,
+ "switch-default": true,
"type-literal-delimiter": true,
+ "typedef": [true, "call-signature", "parameter", "property-declaration"],
"underscore-private-and-protected": true,
"variable-name": [true, "ban-keywords", "allow-pascal-case"],
"whitespace": [
@@ -90,16 +122,7 @@
"check-type",
"check-typecast",
"check-preblock"
- ],
- "jsx-alignment": true,
- "jsx-boolean-value": true,
- "jsx-curly-spacing": [true, "never"],
- "jsx-no-lambda": true,
- "jsx-no-multiline-js": false,
- "jsx-no-string-ref": true,
- "jsx-self-close": true,
- "jsx-wrap-multiline": false,
- "jsx-no-bind": false
+ ]
},
"rulesDirectory": "lib/rules"
}
diff --git a/packages/types/package.json b/packages/types/package.json
index b5e09d42e..fee9d847f 100644
--- a/packages/types/package.json
+++ b/packages/types/package.json
@@ -29,7 +29,7 @@
"copyfiles": "^1.2.0",
"make-promises-safe": "^1.1.0",
"shx": "^0.2.2",
- "tslint": "5.8.0",
+ "tslint": "5.11.0",
"typescript": "2.7.1"
},
"dependencies": {
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/CHANGELOG.json b/packages/typescript-typings/CHANGELOG.json
index 813da155e..c9dbbc499 100644
--- a/packages/typescript-typings/CHANGELOG.json
+++ b/packages/typescript-typings/CHANGELOG.json
@@ -1,6 +1,6 @@
[
{
- "version": "0.4.2",
+ "version": "0.4.4",
"changes": [
{
"note": "Add types for `eth-lightwallet`",
@@ -21,14 +21,23 @@
]
},
{
+ "version": "0.4.3",
+ "changes": [
+ {
+ "note": "Add back ethers-contracts types for Aquaduct which relies on it",
+ "pr": 885
+ }
+ ],
+ "timestamp": 1531919263
+ },
+ {
"timestamp": 1529397769,
"version": "0.4.1",
"changes": [
{
"note": "Dependencies updated"
}
- ],
- "timestamp": 1531149657
+ ]
},
{
"timestamp": 1529397769,
diff --git a/packages/typescript-typings/CHANGELOG.md b/packages/typescript-typings/CHANGELOG.md
index 26d54716c..75ac8a531 100644
--- a/packages/typescript-typings/CHANGELOG.md
+++ b/packages/typescript-typings/CHANGELOG.md
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
+## v0.4.3 - _July 18, 2018_
+
+ * Add back ethers-contracts types for Aquaduct which relies on it (#885)
+
## v0.4.2 - _July 9, 2018_
* Improve 'web3-provider-engine' typings (#768)
diff --git a/packages/typescript-typings/package.json b/packages/typescript-typings/package.json
index 6bd533676..ffc09001e 100644
--- a/packages/typescript-typings/package.json
+++ b/packages/typescript-typings/package.json
@@ -1,6 +1,6 @@
{
"name": "@0xproject/typescript-typings",
- "version": "0.4.2",
+ "version": "0.4.3",
"engines": {
"node": ">=6.12"
},
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/ethereumjs-abi/index.d.ts b/packages/typescript-typings/types/ethereumjs-abi/index.d.ts
new file mode 100644
index 000000000..2d9fc9fcd
--- /dev/null
+++ b/packages/typescript-typings/types/ethereumjs-abi/index.d.ts
@@ -0,0 +1,7 @@
+declare module 'ethereumjs-abi' {
+ export function soliditySHA3(argTypes: string[], args: any[]): Buffer;
+ export function soliditySHA256(argTypes: string[], args: any[]): Buffer;
+ export function methodID(name: string, types: string[]): Buffer;
+ export function simpleEncode(signature: string, ...args: any[]): Buffer;
+ export function rawDecode(signature: string[], data: Buffer): any[];
+}
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/typescript-typings/types/lerna-get-packages/index.d.ts b/packages/typescript-typings/types/lerna-get-packages/index.d.ts
deleted file mode 100644
index 0650a542c..000000000
--- a/packages/typescript-typings/types/lerna-get-packages/index.d.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-declare interface LernaPackage {
- location: string;
- package: {
- private?: boolean;
- version: string;
- name: string;
- main?: string;
- config?: {
- additionalTsTypings?: string[];
- };
- };
-}
-declare function lernaGetPackages(path: string): LernaPackage[];
-declare module 'lerna-get-packages' {
- export = lernaGetPackages;
-}
diff --git a/packages/utils/CHANGELOG.json b/packages/utils/CHANGELOG.json
index 0ac49952b..d9eb1d3fc 100644
--- a/packages/utils/CHANGELOG.json
+++ b/packages/utils/CHANGELOG.json
@@ -1,5 +1,14 @@
[
{
+ "timestamp": 1531919263,
+ "version": "0.7.3",
+ "changes": [
+ {
+ "note": "Dependencies updated"
+ }
+ ]
+ },
+ {
"version": "0.7.2",
"changes": [
{
diff --git a/packages/utils/CHANGELOG.md b/packages/utils/CHANGELOG.md
index e2464232c..d42979434 100644
--- a/packages/utils/CHANGELOG.md
+++ b/packages/utils/CHANGELOG.md
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
+## v0.7.3 - _July 18, 2018_
+
+ * Dependencies updated
+
## v0.7.2 - _July 9, 2018_
* Added errorUtils.spawnSwitchErr
diff --git a/packages/utils/package.json b/packages/utils/package.json
index 9168a3538..962dca5be 100644
--- a/packages/utils/package.json
+++ b/packages/utils/package.json
@@ -1,6 +1,6 @@
{
"name": "@0xproject/utils",
- "version": "0.7.2",
+ "version": "0.7.3",
"engines": {
"node": ">=6.12"
},
@@ -31,18 +31,19 @@
"make-promises-safe": "^1.1.0",
"npm-run-all": "^4.1.2",
"shx": "^0.2.2",
- "tslint": "5.8.0",
+ "tslint": "5.11.0",
"typescript": "2.7.1"
},
"dependencies": {
- "ethereum-types": "^0.0.2",
- "@0xproject/typescript-typings": "^0.4.2",
+ "@0xproject/types": "^1.0.0",
+ "@0xproject/typescript-typings": "^0.4.3",
"@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/abi_decoder.ts b/packages/utils/src/abi_decoder.ts
index b75387e3e..7f93e746e 100644
--- a/packages/utils/src/abi_decoder.ts
+++ b/packages/utils/src/abi_decoder.ts
@@ -16,7 +16,7 @@ import { addressUtils } from './address_utils';
import { BigNumber } from './configured_bignumber';
export class AbiDecoder {
- private _methodIds: { [signatureHash: string]: EventAbi } = {};
+ private readonly _methodIds: { [signatureHash: string]: EventAbi } = {};
constructor(abiArrays: AbiDefinition[][]) {
_.forEach(abiArrays, this.addABI.bind(this));
}
diff --git a/packages/utils/src/abi_utils.ts b/packages/utils/src/abi_utils.ts
index 413c2f481..421dd405c 100644
--- a/packages/utils/src/abi_utils.ts
+++ b/packages/utils/src/abi_utils.ts
@@ -6,7 +6,7 @@ export const abiUtils = {
if (param.type === 'tuple') {
// Parse out tuple types into {type_1, type_2, ..., type_N}
const tupleComponents = param.components;
- const paramString = _.map(tupleComponents, component => this.parseFunctionParam(component));
+ const paramString = _.map(tupleComponents, component => abiUtils.parseFunctionParam(component));
const tupleParamString = `{${paramString}}`;
return tupleParamString;
}
@@ -14,7 +14,7 @@ export const abiUtils = {
},
getFunctionSignature(methodAbi: MethodAbi): string {
const functionName = methodAbi.name;
- const parameterTypeList = _.map(methodAbi.inputs, (param: DataItem) => this.parseFunctionParam(param));
+ const parameterTypeList = _.map(methodAbi.inputs, (param: DataItem) => abiUtils.parseFunctionParam(param));
const functionSignature = `${functionName}(${parameterTypeList})`;
return functionSignature;
},
@@ -37,7 +37,7 @@ export const abiUtils = {
// Sort method Abis into alphabetical order, by function signature
const methodAbisOrdered = _.sortBy(methodAbis, [
(methodAbi: MethodAbi) => {
- const functionSignature = this.getFunctionSignature(methodAbi);
+ const functionSignature = abiUtils.getFunctionSignature(methodAbi);
return functionSignature;
},
]);
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/web3-wrapper/CHANGELOG.json b/packages/web3-wrapper/CHANGELOG.json
index 0b83ad13d..846e8320e 100644
--- a/packages/web3-wrapper/CHANGELOG.json
+++ b/packages/web3-wrapper/CHANGELOG.json
@@ -13,6 +13,15 @@
]
},
{
+ "timestamp": 1531919263,
+ "version": "0.7.3",
+ "changes": [
+ {
+ "note": "Dependencies updated"
+ }
+ ]
+ },
+ {
"timestamp": 1531149657,
"version": "0.7.2",
"changes": [
diff --git a/packages/web3-wrapper/CHANGELOG.md b/packages/web3-wrapper/CHANGELOG.md
index f6795100e..324e60643 100644
--- a/packages/web3-wrapper/CHANGELOG.md
+++ b/packages/web3-wrapper/CHANGELOG.md
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
+## v0.7.3 - _July 18, 2018_
+
+ * Dependencies updated
+
## v0.7.2 - _July 9, 2018_
* Dependencies updated
diff --git a/packages/web3-wrapper/package.json b/packages/web3-wrapper/package.json
index 9716be5bf..13e5d2bcd 100644
--- a/packages/web3-wrapper/package.json
+++ b/packages/web3-wrapper/package.json
@@ -1,6 +1,6 @@
{
"name": "@0xproject/web3-wrapper",
- "version": "0.7.2",
+ "version": "0.7.3",
"engines": {
"node": ">=6.12"
},
@@ -59,15 +59,15 @@
"npm-run-all": "^4.1.2",
"nyc": "^11.0.1",
"shx": "^0.2.2",
- "tslint": "5.8.0",
+ "tslint": "5.11.0",
"typedoc": "0xProject/typedoc",
"typescript": "2.7.1"
},
"dependencies": {
"@0xproject/assert": "0.3.0",
"@0xproject/json-schemas": "^1.0.0",
- "@0xproject/typescript-typings": "^0.4.2",
- "@0xproject/utils": "^0.7.2",
+ "@0xproject/typescript-typings": "^0.4.3",
+ "@0xproject/utils": "^0.7.3",
"ethereum-types": "^0.0.2",
"ethereumjs-util": "^5.1.1",
"ethers": "3.0.22",
diff --git a/packages/web3-wrapper/src/marshaller.ts b/packages/web3-wrapper/src/marshaller.ts
index 15384417e..fed197822 100644
--- a/packages/web3-wrapper/src/marshaller.ts
+++ b/packages/web3-wrapper/src/marshaller.ts
@@ -54,7 +54,7 @@ export const marshaller = {
transactions: [] as Transaction[],
};
block.transactions = _.map(blockWithHexValues.transactions, (tx: TransactionRPC) => {
- const transaction = this.unmarshalTransaction(tx);
+ const transaction = marshaller.unmarshalTransaction(tx);
return transaction;
});
return block;
@@ -94,10 +94,10 @@ export const marshaller = {
...txData,
};
delete callTxDataBase.from;
- const callTxDataBaseRPC = this._marshalCallTxDataBase(callTxDataBase);
+ const callTxDataBaseRPC = marshaller._marshalCallTxDataBase(callTxDataBase);
const txDataRPC = {
...callTxDataBaseRPC,
- from: this.marshalAddress(txData.from),
+ from: marshaller.marshalAddress(txData.from),
};
const prunableIfUndefined = ['gasPrice', 'gas', 'value', 'nonce'];
_.each(txDataRPC, (value: any, key: string) => {
@@ -112,10 +112,10 @@ export const marshaller = {
...callData,
};
delete callTxDataBase.from;
- const callTxDataBaseRPC = this._marshalCallTxDataBase(callTxDataBase);
+ const callTxDataBaseRPC = marshaller._marshalCallTxDataBase(callTxDataBase);
const callDataRPC = {
...callTxDataBaseRPC,
- from: _.isUndefined(callData.from) ? undefined : this.marshalAddress(callData.from),
+ from: _.isUndefined(callData.from) ? undefined : marshaller.marshalAddress(callData.from),
};
return callDataRPC;
},
@@ -144,7 +144,7 @@ export const marshaller = {
_marshalCallTxDataBase(callTxDataBase: Partial<CallTxDataBase>): Partial<CallTxDataBaseRPC> {
const callTxDataBaseRPC = {
...callTxDataBase,
- to: _.isUndefined(callTxDataBase.to) ? undefined : this.marshalAddress(callTxDataBase.to),
+ to: _.isUndefined(callTxDataBase.to) ? undefined : marshaller.marshalAddress(callTxDataBase.to),
gasPrice: _.isUndefined(callTxDataBase.gasPrice)
? undefined
: utils.encodeAmountAsHexString(callTxDataBase.gasPrice),
diff --git a/packages/web3-wrapper/src/utils.ts b/packages/web3-wrapper/src/utils.ts
index d13eb9404..01605dc9a 100644
--- a/packages/web3-wrapper/src/utils.ts
+++ b/packages/web3-wrapper/src/utils.ts
@@ -15,7 +15,7 @@ export const utils = {
if (_.isNull(hex)) {
return null;
}
- const decimal = this.convertHexToNumber(hex);
+ const decimal = utils.convertHexToNumber(hex);
return decimal;
},
convertAmountToBigNumber(value: string | number | BigNumber): BigNumber {
@@ -40,7 +40,7 @@ export const utils = {
return valueBigNumber.lessThan(0) ? '-0x' + valueHex.substr(1) : '0x' + valueHex;
},
numberToHex(value: number): string {
- if (!isFinite(value) && !this.isHexStrict(value)) {
+ if (!isFinite(value) && !utils.isHexStrict(value)) {
throw new Error(`Given input ${value} is not a number.`);
}
diff --git a/packages/web3-wrapper/src/web3_wrapper.ts b/packages/web3-wrapper/src/web3_wrapper.ts
index 495523e44..e828708f0 100644
--- a/packages/web3-wrapper/src/web3_wrapper.ts
+++ b/packages/web3-wrapper/src/web3_wrapper.ts
@@ -50,7 +50,7 @@ export class Web3Wrapper {
public isZeroExWeb3Wrapper = true;
public abiDecoder: AbiDecoder;
private _provider: Provider;
- private _txDefaults: Partial<TxData>;
+ private readonly _txDefaults: Partial<TxData>;
private _jsonRpcRequestId: number;
/**
* Check if an address is a valid Ethereum address
diff --git a/packages/website/md/docs/sol_cov/usage.md b/packages/website/md/docs/sol_cov/usage.md
index 433cfad96..c747005fb 100644
--- a/packages/website/md/docs/sol_cov/usage.md
+++ b/packages/website/md/docs/sol_cov/usage.md
@@ -8,7 +8,7 @@ In order to use `CoverageSubprovider` with your favorite framework you need to p
### Sol-compiler
-If you are generating your artifacts with [@0xproject/sol-compiler](LINK) you can use the `SolCompilerArtifactsAdapter` we've implemented for you.
+If you are generating your artifacts with [@0xproject/sol-compiler](https://0xproject.com/docs/sol-compiler) you can use the `SolCompilerArtifactsAdapter` we've implemented for you.
```typescript
import { SolCompilerArtifactsAdapter } from '@0xproject/sol-cov';
@@ -19,7 +19,7 @@ const artifactsAdapter = new SolCompilerArtifactsAdapter(artifactsPath, contract
### Truffle
-If your project is using [Truffle](LINK), we've written a `TruffleArtifactsAdapter`for you.
+If your project is using [Truffle](https://truffleframework.com/), we've written a `TruffleArtifactsAdapter`for you.
```typescript
import { TruffleArtifactAdapter } from '@0xproject/sol-cov';
diff --git a/packages/website/package.json b/packages/website/package.json
index a3ca047fa..4cefa19a9 100644
--- a/packages/website/package.json
+++ b/packages/website/package.json
@@ -1,6 +1,6 @@
{
"name": "@0xproject/website",
- "version": "0.0.38",
+ "version": "0.0.39",
"engines": {
"node": ">=6.12"
},
@@ -11,22 +11,25 @@
"clean": "shx rm -f public/bundle*",
"lint": "tslint --project . 'ts/**/*.ts' 'ts/**/*.tsx'",
"watch_without_deps": "webpack-dev-server --content-base public --https",
- "deploy_dogfood": "npm run build; aws s3 sync ./public/. s3://dogfood.0xproject.com --profile 0xproject --region us-east-1 --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers",
- "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"
+ "deploy_dogfood":
+ "npm run build; aws s3 sync ./public/. s3://dogfood.0xproject.com --profile 0xproject --region us-east-1 --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers",
+ "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":
+ "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",
"dependencies": {
"@0xproject/contract-wrappers": "^0.0.5",
- "@0xproject/order-utils": "^0.0.8",
- "@0xproject/react-docs": "^0.0.15",
- "@0xproject/react-shared": "^0.2.2",
- "@0xproject/subproviders": "^0.10.5",
+ "@0xproject/order-utils": "^0.0.9",
+ "@0xproject/react-docs": "^0.0.16",
+ "@0xproject/react-shared": "^0.2.3",
+ "@0xproject/subproviders": "^0.10.6",
"@0xproject/types": "^0.8.1",
- "@0xproject/typescript-typings": "^0.4.2",
- "@0xproject/utils": "^0.7.2",
- "@0xproject/web3-wrapper": "^0.7.2",
+ "@0xproject/typescript-typings": "^0.4.3",
+ "@0xproject/utils": "^0.7.3",
+ "@0xproject/web3-wrapper": "^0.7.3",
"accounting": "^0.4.1",
"basscss": "^8.0.3",
"blockies": "^0.0.2",
@@ -46,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",
@@ -60,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": {
@@ -92,10 +93,11 @@
"less-loader": "^2.2.3",
"make-promises-safe": "^1.1.0",
"raw-loader": "^0.5.1",
+ "rollbar-sourcemap-webpack-plugin": "^2.3.0",
"shx": "^0.2.2",
"source-map-loader": "^0.1.6",
"style-loader": "0.13.x",
- "tslint": "5.8.0",
+ "tslint": "5.11.0",
"tslint-config-0xproject": "^0.0.2",
"typescript": "2.7.1",
"uglifyjs-webpack-plugin": "^1.2.5",
diff --git a/packages/website/public/images/team/peter.jpg b/packages/website/public/images/team/peter.jpg
new file mode 100644
index 000000000..fa976cb8d
--- /dev/null
+++ b/packages/website/public/images/team/peter.jpg
Binary files differ
diff --git a/packages/website/public/images/token_icons/eos.png b/packages/website/public/images/token_icons/EOS.png
index 622df61bc..622df61bc 100644
--- a/packages/website/public/images/token_icons/eos.png
+++ b/packages/website/public/images/token_icons/EOS.png
Binary files differ
diff --git a/packages/website/public/images/token_icons/qtum.png b/packages/website/public/images/token_icons/QTUM.png
index b7f09dfd2..b7f09dfd2 100644
--- a/packages/website/public/images/token_icons/qtum.png
+++ b/packages/website/public/images/token_icons/QTUM.png
Binary files differ
diff --git a/packages/website/public/images/token_icons/taas.png b/packages/website/public/images/token_icons/TAAS.png
index 266e3690b..266e3690b 100644
--- a/packages/website/public/images/token_icons/taas.png
+++ b/packages/website/public/images/token_icons/TAAS.png
Binary files differ
diff --git a/packages/website/public/images/token_icons/wings.png b/packages/website/public/images/token_icons/WINGS.png
index c0a9ce527..c0a9ce527 100644
--- a/packages/website/public/images/token_icons/wings.png
+++ b/packages/website/public/images/token_icons/WINGS.png
Binary files differ
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/public/js/rollbar.umd.min.js b/packages/website/public/js/rollbar.umd.min.js
new file mode 100644
index 000000000..2734bb8be
--- /dev/null
+++ b/packages/website/public/js/rollbar.umd.min.js
@@ -0,0 +1,2 @@
+!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.rollbar=e():t.rollbar=e()}(this,function(){return function(t){function e(n){if(r[n])return r[n].exports;var o=r[n]={exports:{},id:n,loaded:!1};return t[n].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}var r={};return e.m=t,e.c=r,e.p="",e(0)}([function(t,e,r){t.exports=r(1)},function(t,e,r){"use strict";var n=r(2),o="undefined"!=typeof window&&window._rollbarConfig,i=o&&o.globalAlias||"Rollbar",a="undefined"!=typeof window&&window[i]&&"function"==typeof window[i].shimId&&void 0!==window[i].shimId();if("undefined"==typeof window||window._rollbarStartTime||(window._rollbarStartTime=(new Date).getTime()),!a&&o){var s=new n(o);window[i]=s}else"undefined"!=typeof window?(window.rollbar=n,window._rollbarDidLoad=!0):"undefined"!=typeof self&&(self.rollbar=n,self._rollbarDidLoad=!0);t.exports=n},function(t,e,r){"use strict";function n(t,e){this.options=c.merge(x,t);var r=new l(this.options,h,d);this.client=e||new u(this.options,r,p,"browser");var n="undefined"!=typeof window&&window||"undefined"!=typeof self&&self,o="undefined"!=typeof document&&document;i(this.client.notifier),a(this.client.queue),(this.options.captureUncaught||this.options.handleUncaughtExceptions)&&(f.captureUncaughtExceptions(n,this),f.wrapGlobals(n,this)),(this.options.captureUnhandledRejections||this.options.handleUnhandledRejections)&&f.captureUnhandledRejections(n,this),this.instrumenter=new w(this.options,this.client.telemeter,this,n,o),this.instrumenter.instrument()}function o(t){var e="Rollbar is not initialized";p.error(e),t&&t(new Error(e))}function i(t){t.addTransform(m.handleItemWithError).addTransform(m.ensureItemHasSomethingToSay).addTransform(m.addBaseInfo).addTransform(m.addRequestInfo(window)).addTransform(m.addClientInfo(window)).addTransform(m.addPluginInfo(window)).addTransform(m.addBody).addTransform(g.addMessageWithError).addTransform(g.addTelemetryData).addTransform(g.addConfigToPayload).addTransform(m.scrubPayload).addTransform(g.userTransform(p)).addTransform(g.itemToPayload)}function a(t){t.addPredicate(y.checkLevel).addPredicate(v.checkIgnore).addPredicate(y.userCheckIgnore(p)).addPredicate(y.urlIsNotBlacklisted(p)).addPredicate(y.urlIsWhitelisted(p)).addPredicate(y.messageIsIgnored(p))}function s(t){for(var e=0,r=t.length;e<r;++e)if(c.isFunction(t[e]))return t[e]}var u=r(3),c=r(6),l=r(11),p=r(13),f=r(16),h=r(17),d=r(19),m=r(20),g=r(24),v=r(25),y=r(26),b=r(21),w=r(27),_=null;n.init=function(t,e){return _?_.global(t).configure(t):_=new n(t,e)},n.prototype.global=function(t){return this.client.global(t),this},n.global=function(t){return _?_.global(t):void o()},n.prototype.configure=function(t,e){var r=this.options,n={};return e&&(n={payload:e}),this.options=c.merge(r,t,n),this.client.configure(t,e),this.instrumenter.configure(t),this},n.configure=function(t,e){return _?_.configure(t,e):void o()},n.prototype.lastError=function(){return this.client.lastError},n.lastError=function(){return _?_.lastError():void o()},n.prototype.log=function(){var t=this._createItem(arguments),e=t.uuid;return this.client.log(t),{uuid:e}},n.log=function(){if(_)return _.log.apply(_,arguments);var t=s(arguments);o(t)},n.prototype.debug=function(){var t=this._createItem(arguments),e=t.uuid;return this.client.debug(t),{uuid:e}},n.debug=function(){if(_)return _.debug.apply(_,arguments);var t=s(arguments);o(t)},n.prototype.info=function(){var t=this._createItem(arguments),e=t.uuid;return this.client.info(t),{uuid:e}},n.info=function(){if(_)return _.info.apply(_,arguments);var t=s(arguments);o(t)},n.prototype.warn=function(){var t=this._createItem(arguments),e=t.uuid;return this.client.warn(t),{uuid:e}},n.warn=function(){if(_)return _.warn.apply(_,arguments);var t=s(arguments);o(t)},n.prototype.warning=function(){var t=this._createItem(arguments),e=t.uuid;return this.client.warning(t),{uuid:e}},n.warning=function(){if(_)return _.warning.apply(_,arguments);var t=s(arguments);o(t)},n.prototype.error=function(){var t=this._createItem(arguments),e=t.uuid;return this.client.error(t),{uuid:e}},n.error=function(){if(_)return _.error.apply(_,arguments);var t=s(arguments);o(t)},n.prototype.critical=function(){var t=this._createItem(arguments),e=t.uuid;return this.client.critical(t),{uuid:e}},n.critical=function(){if(_)return _.critical.apply(_,arguments);var t=s(arguments);o(t)},n.prototype.handleUncaughtException=function(t,e,r,n,o,i){var a,s=c.makeUnhandledStackInfo(t,e,r,n,o,"onerror","uncaught exception",b);c.isError(o)?(a=this._createItem([t,o,i]),a._unhandledStackInfo=s):c.isError(e)?(a=this._createItem([t,e,i]),a._unhandledStackInfo=s):(a=this._createItem([t,i]),a.stackInfo=s),a.level=this.options.uncaughtErrorLevel,a._isUncaught=!0,this.client.log(a)},n.prototype.handleUnhandledRejection=function(t,e){var r="unhandled rejection was null or undefined!";r=t?t.message||String(t):r;var n,o=t&&t._rollbarContext||e&&e._rollbarContext;c.isError(t)?n=this._createItem([r,t,o]):(n=this._createItem([r,t,o]),n.stackInfo=c.makeUnhandledStackInfo(r,"",0,0,null,"unhandledrejection","",b)),n.level=this.options.uncaughtErrorLevel,n._isUncaught=!0,n._originalArgs=n._originalArgs||[],n._originalArgs.push(e),this.client.log(n)},n.prototype.wrap=function(t,e,r){try{var n;if(n=c.isFunction(e)?e:function(){return e||{}},!c.isFunction(t))return t;if(t._isWrap)return t;if(!t._rollbar_wrapped&&(t._rollbar_wrapped=function(){r&&c.isFunction(r)&&r.apply(this,arguments);try{return t.apply(this,arguments)}catch(r){var e=r;throw e&&(c.isType(e,"string")&&(e=new String(e)),e._rollbarContext=n()||{},e._rollbarContext._wrappedSource=t.toString(),window._rollbarWrappedError=e),e}},t._rollbar_wrapped._isWrap=!0,t.hasOwnProperty))for(var o in t)t.hasOwnProperty(o)&&(t._rollbar_wrapped[o]=t[o]);return t._rollbar_wrapped}catch(e){return t}},n.wrap=function(t,e){return _?_.wrap(t,e):void o()},n.prototype.captureEvent=function(t,e){return this.client.captureEvent(t,e)},n.captureEvent=function(t,e){return _?_.captureEvent(t,e):void o()},n.prototype.captureDomContentLoaded=function(t,e){return e||(e=new Date),this.client.captureDomContentLoaded(e)},n.prototype.captureLoad=function(t,e){return e||(e=new Date),this.client.captureLoad(e)},n.prototype._createItem=function(t){return c.createItem(t,p,this)};var x={version:"2.4.2",scrubFields:["pw","pass","passwd","password","secret","confirm_password","confirmPassword","password_confirmation","passwordConfirmation","access_token","accessToken","secret_key","secretKey","secretToken","cc-number","card number","cardnumber","cardnum","ccnum","ccnumber","cc num","creditcardnumber","credit card number","newcreditcardnumber","new credit card","creditcardno","credit card no","card#","card #","cc-csc","cvc2","cvv2","ccv2","security code","card verification","name on credit card","name on card","nameoncard","cardholder","card holder","name des karteninhabers","card type","cardtype","cc type","cctype","payment type","expiration date","expirationdate","expdate","cc-exp"],logLevel:"debug",reportLevel:"debug",uncaughtErrorLevel:"error",endpoint:"api.rollbar.com/api/1/item/",verbose:!1,enabled:!0,sendConfig:!1,includeItemsInTelemetry:!0,captureIp:!0};t.exports=n},function(t,e,r){"use strict";function n(t,e,r,o){this.options=c.merge(t),this.logger=r,n.rateLimiter.configureGlobal(this.options),n.rateLimiter.setPlatformOptions(o,this.options),this.queue=new a(n.rateLimiter,e,r,this.options),this.notifier=new s(this.queue,this.options),this.telemeter=new u(this.options),this.lastError=null,this.lastErrorHash="none"}function o(t){var e=t.message||"",r=(t.err||{}).stack||String(t.err);return e+"::"+r}var i=r(4),a=r(5),s=r(9),u=r(10),c=r(6),l={maxItems:0,itemsPerMinute:60};n.rateLimiter=new i(l),n.prototype.global=function(t){return n.rateLimiter.configureGlobal(t),this},n.prototype.configure=function(t,e){this.notifier&&this.notifier.configure(t),this.telemeter&&this.telemeter.configure(t);var r=this.options,n={};return e&&(n={payload:e}),this.options=c.merge(r,t,n),this.global(this.options),this},n.prototype.log=function(t){var e=this._defaultLogLevel();return this._log(e,t)},n.prototype.debug=function(t){this._log("debug",t)},n.prototype.info=function(t){this._log("info",t)},n.prototype.warn=function(t){this._log("warning",t)},n.prototype.warning=function(t){this._log("warning",t)},n.prototype.error=function(t){this._log("error",t)},n.prototype.critical=function(t){this._log("critical",t)},n.prototype.wait=function(t){this.queue.wait(t)},n.prototype.captureEvent=function(t,e){return this.telemeter.captureEvent(t,e)},n.prototype.captureDomContentLoaded=function(t){return this.telemeter.captureDomContentLoaded(t)},n.prototype.captureLoad=function(t){return this.telemeter.captureLoad(t)},n.prototype._log=function(t,e){var r;if(e.callback&&(r=e.callback,delete e.callback),this._sameAsLastError(e)){if(r){var n=new Error("ignored identical item");n.item=e,r(n)}}else try{e.level=e.level||t,this.telemeter._captureRollbarItem(e),e.telemetryEvents=this.telemeter.copyEvents(),this.notifier.log(e,r)}catch(t){this.logger.error(t)}},n.prototype._defaultLogLevel=function(){return this.options.logLevel||"debug"},n.prototype._sameAsLastError=function(t){if(!t._isUncaught)return!1;var e=o(t);return this.lastErrorHash===e||(this.lastError=t.err,this.lastErrorHash=e,!1)},t.exports=n},function(t,e){"use strict";function r(t){this.startTime=(new Date).getTime(),this.counter=0,this.perMinCounter=0,this.platform=null,this.platformOptions={},this.configureGlobal(t)}function n(t,e,r){return!t.ignoreRateLimit&&e>=1&&r>e}function o(t,e,r,n,o,a,s){var u=null;return r&&(r=new Error(r)),r||n||(u=i(t,e,o,a,s)),{error:r,shouldSend:n,payload:u}}function i(t,e,r,n,o){var i,a=e.environment||e.payload&&e.payload.environment;i=o?"item per minute limit reached, ignoring errors until timeout":"maxItems has been hit, ignoring errors until reset.";var s={body:{message:{body:i,extra:{maxItems:r,itemsPerMinute:n}}},language:"javascript",environment:a,notifier:{version:e.notifier&&e.notifier.version||e.version}};return"browser"===t?(s.platform="browser",s.framework="browser-js",s.notifier.name="rollbar-browser-js"):"server"===t?(s.framework=e.framework||"node-js",s.notifier.name=e.notifier.name):"react-native"===t&&(s.framework=e.framework||"react-native",s.notifier.name=e.notifier.name),s}r.globalSettings={startTime:(new Date).getTime(),maxItems:void 0,itemsPerMinute:void 0},r.prototype.configureGlobal=function(t){void 0!==t.startTime&&(r.globalSettings.startTime=t.startTime),void 0!==t.maxItems&&(r.globalSettings.maxItems=t.maxItems),void 0!==t.itemsPerMinute&&(r.globalSettings.itemsPerMinute=t.itemsPerMinute)},r.prototype.shouldSend=function(t,e){e=e||(new Date).getTime(),e-this.startTime>=6e4&&(this.startTime=e,this.perMinCounter=0);var i=r.globalSettings.maxItems,a=r.globalSettings.itemsPerMinute;if(n(t,i,this.counter))return o(this.platform,this.platformOptions,i+" max items reached",!1);if(n(t,a,this.perMinCounter))return o(this.platform,this.platformOptions,a+" items per minute reached",!1);this.counter++,this.perMinCounter++;var s=!n(t,i,this.counter),u=s;return s=s&&!n(t,a,this.perMinCounter),o(this.platform,this.platformOptions,null,s,i,a,u)},r.prototype.setPlatformOptions=function(t,e){this.platform=t,this.platformOptions=e},t.exports=r},function(t,e,r){"use strict";function n(t,e,r,n){this.rateLimiter=t,this.api=e,this.logger=r,this.options=n,this.predicates=[],this.pendingItems=[],this.pendingRequests=[],this.retryQueue=[],this.retryHandle=null,this.waitCallback=null,this.waitIntervalID=null}var o=r(6);n.prototype.configure=function(t){this.api&&this.api.configure(t);var e=this.options;return this.options=o.merge(e,t),this},n.prototype.addPredicate=function(t){return o.isFunction(t)&&this.predicates.push(t),this},n.prototype.addPendingItem=function(t){this.pendingItems.push(t)},n.prototype.removePendingItem=function(t){var e=this.pendingItems.indexOf(t);e!==-1&&this.pendingItems.splice(e,1)},n.prototype.addItem=function(t,e,r,n){e&&o.isFunction(e)||(e=function(){});var i=this._applyPredicates(t);if(i.stop)return this.removePendingItem(n),void e(i.err);this._maybeLog(t,r),this.removePendingItem(n),this.pendingRequests.push(t);try{this._makeApiRequest(t,function(r,n){this._dequeuePendingRequest(t),e(r,n)}.bind(this))}catch(r){this._dequeuePendingRequest(t),e(r)}},n.prototype.wait=function(t){o.isFunction(t)&&(this.waitCallback=t,this._maybeCallWait()||(this.waitIntervalID&&(this.waitIntervalID=clearInterval(this.waitIntervalID)),this.waitIntervalID=setInterval(function(){this._maybeCallWait()}.bind(this),500)))},n.prototype._applyPredicates=function(t){for(var e=null,r=0,n=this.predicates.length;r<n;r++)if(e=this.predicates[r](t,this.options),!e||void 0!==e.err)return{stop:!0,err:e.err};return{stop:!1,err:null}},n.prototype._makeApiRequest=function(t,e){var r=this.rateLimiter.shouldSend(t);r.shouldSend?this.api.postItem(t,function(r,n){r?this._maybeRetry(r,t,e):e(r,n)}.bind(this)):r.error?e(r.error):this.api.postItem(r.payload,e)};var i=["ECONNRESET","ENOTFOUND","ESOCKETTIMEDOUT","ETIMEDOUT","ECONNREFUSED","EHOSTUNREACH","EPIPE","EAI_AGAIN"];n.prototype._maybeRetry=function(t,e,r){var n=!1;if(this.options.retryInterval)for(var o=0,a=i.length;o<a;o++)if(t.code===i[o]){n=!0;break}n?this._retryApiRequest(e,r):r(t)},n.prototype._retryApiRequest=function(t,e){this.retryQueue.push({item:t,callback:e}),this.retryHandle||(this.retryHandle=setInterval(function(){for(;this.retryQueue.length;){var t=this.retryQueue.shift();this._makeApiRequest(t.item,t.callback)}}.bind(this),this.options.retryInterval))},n.prototype._dequeuePendingRequest=function(t){var e=this.pendingRequests.indexOf(t);e!==-1&&(this.pendingRequests.splice(e,1),this._maybeCallWait())},n.prototype._maybeLog=function(t,e){if(this.logger&&this.options.verbose){var r=e;if(r=r||o.get(t,"body.trace.exception.message"),r=r||o.get(t,"body.trace_chain.0.exception.message"))return void this.logger.error(r);r=o.get(t,"body.message.body"),r&&this.logger.log(r)}},n.prototype._maybeCallWait=function(){return!(!o.isFunction(this.waitCallback)||0!==this.pendingItems.length||0!==this.pendingRequests.length)&&(this.waitIntervalID&&(this.waitIntervalID=clearInterval(this.waitIntervalID)),this.waitCallback(),!0)},t.exports=n},function(t,e,r){"use strict";function n(){if(!A&&(A=!0,c(JSON)&&(s(JSON.stringify)&&(R.stringify=JSON.stringify),s(JSON.parse)&&(R.parse=JSON.parse)),!a(R.stringify)||!a(R.parse))){var t=r(8);t(R)}}function o(t,e){return e===i(t)}function i(t){var e=typeof t;return"object"!==e?e:t?t instanceof Error?"error":{}.toString.call(t).match(/\s([a-zA-Z]+)/)[1].toLowerCase():"null"}function a(t){return o(t,"function")}function s(t){var e=/[\\^$.*+?()[\]{}|]/g,r=Function.prototype.toString.call(Object.prototype.hasOwnProperty).replace(e,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?"),n=RegExp("^"+r+"$");return u(t)&&n.test(t)}function u(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}function c(t){return!o(t,"undefined")}function l(t){var e=i(t);return"object"===e||"array"===e}function p(t){return o(t,"error")}function f(t,e,r){var n,i,a,s=o(t,"object"),u=o(t,"array"),c=[];if(s&&r.indexOf(t)!==-1)return t;if(r.push(t),s)for(n in t)Object.prototype.hasOwnProperty.call(t,n)&&c.push(n);else if(u)for(a=0;a<t.length;++a)c.push(a);var l=s?{}:[];for(a=0;a<c.length;++a)n=c[a],i=t[n],l[n]=e(n,i,r);return 0!=c.length?l:t}function h(){return"********"}function d(){var t=N(),e="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){var r=(t+16*Math.random())%16|0;return t=Math.floor(t/16),("x"===e?r:7&r|8).toString(16)});return e}function m(t){var e=g(t);return e?(""===e.anchor&&(e.source=e.source.replace("#","")),t=e.source.replace("?"+e.query,"")):"(unknown)"}function g(t){if(o(t,"string")){for(var e=D,r=e.parser[e.strictMode?"strict":"loose"].exec(t),n={},i=e.key.length;i--;)n[e.key[i]]=r[i]||"";return n[e.q.name]={},n[e.key[12]].replace(e.q.parser,function(t,r,o){r&&(n[e.q.name][r]=o)}),n}}function v(t,e,r){r=r||{},r.access_token=t;var n,o=[];for(n in r)Object.prototype.hasOwnProperty.call(r,n)&&o.push([n,r[n]].join("="));var i="?"+o.sort().join("&");e=e||{},e.path=e.path||"";var a,s=e.path.indexOf("?"),u=e.path.indexOf("#");s!==-1&&(u===-1||u>s)?(a=e.path,e.path=a.substring(0,s)+i+"&"+a.substring(s+1)):u!==-1?(a=e.path,e.path=a.substring(0,u)+i+a.substring(u)):e.path=e.path+i}function y(t,e){if(e=e||t.protocol,!e&&t.port&&(80===t.port?e="http:":443===t.port&&(e="https:")),e=e||"https:",!t.hostname)return null;var r=e+"//"+t.hostname;return t.port&&(r=r+":"+t.port),t.path&&(r+=t.path),r}function b(t,e){var r,n;try{r=R.stringify(t)}catch(o){if(e&&a(e))try{r=e(t)}catch(t){n=t}else n=o}return{error:n,value:r}}function w(t){var e,r;try{e=R.parse(t)}catch(t){r=t}return{error:r,value:e}}function _(t,e,r,n,o,i,a,s){var u={url:e||"",line:r,column:n};u.func=s.guessFunctionName(u.url,u.line),u.context=s.gatherContext(u.url,u.line);var c=document&&document.location&&document.location.href,l=window&&window.navigator&&window.navigator.userAgent;return{mode:i,message:o?String(o):t||a,url:c,stack:[u],useragent:l}}function x(t,e){return function(r,n){try{e(r,n)}catch(e){t.error(e)}}}function k(t,e,r,n,o){for(var a,s,u,c,l,p,f=[],h=0,m=t.length;h<m;++h){p=t[h];var g=i(p);switch(g){case"undefined":break;case"string":a?f.push(p):a=p;break;case"function":c=x(e,p);break;case"date":f.push(p);break;case"error":case"domexception":s?f.push(p):s=p;break;case"object":case"array":if(p instanceof Error||"undefined"!=typeof DOMException&&p instanceof DOMException){s?f.push(p):s=p;break}if(n&&"object"===g&&!l){for(var v=0,y=n.length;v<y;++v)if(void 0!==p[n[v]]){l=p;break}if(l)break}u?f.push(p):u=p;break;default:if(p instanceof Error||"undefined"!=typeof DOMException&&p instanceof DOMException){s?f.push(p):s=p;break}f.push(p)}}f.length>0&&(u=j(u),u.extraArgs=f);var b={message:a,err:s,custom:u,timestamp:N(),callback:c,uuid:d()};return u&&void 0!==u.level&&(b.level=u.level,delete u.level),n&&l&&(b.request=l),o&&(b.lambdaContext=o),b._originalArgs=t,b}function E(t,e){if(t){var r=e.split("."),n=t;try{for(var o=0,i=r.length;o<i;++o)n=n[r[o]]}catch(t){n=void 0}return n}}function I(t,e,r){if(t){var n=e.split("."),o=n.length;if(!(o<1)){if(1===o)return void(t[n[0]]=r);try{for(var i=t[n[0]]||{},a=i,s=1;s<o-1;s++)i[n[s]]=i[n[s]]||{},i=i[n[s]];i[n[o-1]]=r,t[n[0]]=a}catch(t){return}}}}function T(t,e){function r(t,e,r,n,o,i){return e+h(i)}function n(t){var e;if(o(t,"string"))for(e=0;e<u.length;++e)t=t.replace(u[e],r);return t}function i(t,e){var r;for(r=0;r<s.length;++r)if(s[r].test(t)){e=h(e);break}return e}function a(t,e,r){var s=i(t,e);return s===e?o(e,"object")||o(e,"array")?f(e,a,r):n(s):s}e=e||[];var s=S(e),u=O(e);return f(t,a,[])}function S(t){for(var e,r=[],n=0;n<t.length;++n)e="^\\[?(%5[bB])?"+t[n]+"\\[?(%5[bB])?\\]?(%5[dD])?$",r.push(new RegExp(e,"i"));return r}function O(t){for(var e,r=[],n=0;n<t.length;++n)e="\\[?(%5[bB])?"+t[n]+"\\[?(%5[bB])?\\]?(%5[dD])?",r.push(new RegExp("("+e+"=)([^&\\n]+)","igm"));return r}function L(t){var e,r,n,o=[];for(e=0,r=t.length;e<r;e++){switch(n=t[e],i(n)){case"object":n=b(n),n=n.error||n.value,n.length>500&&(n=n.substr(0,497)+"...");break;case"null":n="null";break;case"undefined":n="undefined";break;case"symbol":n=n.toString()}o.push(n)}return o.join(" ")}function N(){return Date.now?+Date.now():+new Date}function C(t,e){if(t&&t.user_ip&&e!==!0){var r=t.user_ip;if(e)try{var n;if(r.indexOf(".")!==-1)n=r.split("."),n.pop(),n.push("0"),r=n.join(".");else if(r.indexOf(":")!==-1){if(n=r.split(":"),n.length>2){var o=n.slice(0,3),i=o[2].indexOf("/");i!==-1&&(o[2]=o[2].substring(0,i));var a="0000:0000:0000:0000:0000";r=o.concat(a).join(":")}}else r=null}catch(t){r=null}else r=null;t.user_ip=r}}var j=r(7),R={},A=!1;n();var q={debug:0,info:1,warning:2,error:3,critical:4},D={strictMode:!1,key:["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],q:{name:"queryKey",parser:/(?:^|&)([^&=]*)=?([^&]*)/g},parser:{strict:/^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,loose:/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/}};t.exports={isType:o,typeName:i,isFunction:a,isNativeFunction:s,isIterable:l,isError:p,merge:j,traverse:f,redact:h,uuid4:d,LEVELS:q,sanitizeUrl:m,addParamsAndAccessTokenToPath:v,formatUrl:y,stringify:b,jsonParse:w,makeUnhandledStackInfo:_,createItem:k,get:E,set:I,scrub:T,formatArgsAsString:L,now:N,filterIp:C}},function(t,e){"use strict";function r(){var t,e,n,o,a,s={},u=null,c=arguments.length;for(t=0;t<c;t++)if(u=arguments[t],null!=u)for(a in u)e=s[a],n=u[a],s!==n&&(n&&i(n)?(o=e&&i(e)?e:{},s[a]=r(o,n)):"undefined"!=typeof n&&(s[a]=n));return s}var n=Object.prototype.hasOwnProperty,o=Object.prototype.toString,i=function(t){if(!t||"[object Object]"!==o.call(t))return!1;var e=n.call(t,"constructor"),r=t.constructor&&t.constructor.prototype&&n.call(t.constructor.prototype,"isPrototypeOf");if(t.constructor&&!e&&!r)return!1;var i;for(i in t);return"undefined"==typeof i||n.call(t,i)};t.exports=r},function(t,e){var r=function(t){function e(t){return t<10?"0"+t:t}function r(){return this.valueOf()}function n(t){return i.lastIndex=0,i.test(t)?'"'+t.replace(i,function(t){var e=u[t];return"string"==typeof e?e:"\\u"+("0000"+t.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+t+'"'}function o(t,e){var r,i,u,l,p,f=a,h=e[t];switch(h&&"object"==typeof h&&"function"==typeof h.toJSON&&(h=h.toJSON(t)),"function"==typeof c&&(h=c.call(e,t,h)),typeof h){case"string":return n(h);case"number":return isFinite(h)?String(h):"null";case"boolean":case"null":return String(h);case"object":if(!h)return"null";if(a+=s,p=[],"[object Array]"===Object.prototype.toString.apply(h)){for(l=h.length,r=0;r<l;r+=1)p[r]=o(r,h)||"null";return u=0===p.length?"[]":a?"[\n"+a+p.join(",\n"+a)+"\n"+f+"]":"["+p.join(",")+"]",a=f,u}if(c&&"object"==typeof c)for(l=c.length,r=0;r<l;r+=1)"string"==typeof c[r]&&(i=c[r],u=o(i,h),u&&p.push(n(i)+(a?": ":":")+u));else for(i in h)Object.prototype.hasOwnProperty.call(h,i)&&(u=o(i,h),u&&p.push(n(i)+(a?": ":":")+u));return u=0===p.length?"{}":a?"{\n"+a+p.join(",\n"+a)+"\n"+f+"}":"{"+p.join(",")+"}",a=f,u}}var i=/[\\"\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;"function"!=typeof Date.prototype.toJSON&&(Date.prototype.toJSON=function(){return isFinite(this.valueOf())?this.getUTCFullYear()+"-"+e(this.getUTCMonth()+1)+"-"+e(this.getUTCDate())+"T"+e(this.getUTCHours())+":"+e(this.getUTCMinutes())+":"+e(this.getUTCSeconds())+"Z":null},Boolean.prototype.toJSON=r,Number.prototype.toJSON=r,String.prototype.toJSON=r);var a,s,u,c;"function"!=typeof t.stringify&&(u={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},t.stringify=function(t,e,r){var n;if(a="",s="","number"==typeof r)for(n=0;n<r;n+=1)s+=" ";else"string"==typeof r&&(s=r);if(c=e,e&&"function"!=typeof e&&("object"!=typeof e||"number"!=typeof e.length))throw new Error("JSON.stringify");return o("",{"":t})}),"function"!=typeof t.parse&&(t.parse=function(){function t(t){return t.replace(/\\(?:u(.{4})|([^u]))/g,function(t,e,r){return e?String.fromCharCode(parseInt(e,16)):a[r]})}var e,r,n,o,i,a={"\\":"\\",'"':'"',"/":"/",t:"\t",n:"\n",r:"\r",f:"\f",b:"\b"},s={go:function(){e="ok"},firstokey:function(){o=i,e="colon"},okey:function(){o=i,e="colon"},ovalue:function(){e="ocomma"},firstavalue:function(){e="acomma"},avalue:function(){e="acomma"}},u={go:function(){e="ok"},ovalue:function(){e="ocomma"},firstavalue:function(){e="acomma"},avalue:function(){e="acomma"}},c={"{":{go:function(){r.push({state:"ok"}),n={},e="firstokey"},ovalue:function(){r.push({container:n,state:"ocomma",key:o}),n={},e="firstokey"},firstavalue:function(){r.push({container:n,state:"acomma"}),n={},e="firstokey"},avalue:function(){r.push({container:n,state:"acomma"}),n={},e="firstokey"}},"}":{firstokey:function(){var t=r.pop();i=n,n=t.container,o=t.key,e=t.state},ocomma:function(){var t=r.pop();n[o]=i,i=n,n=t.container,o=t.key,e=t.state}},"[":{go:function(){r.push({state:"ok"}),n=[],e="firstavalue"},ovalue:function(){r.push({container:n,state:"ocomma",key:o}),n=[],e="firstavalue"},firstavalue:function(){r.push({container:n,state:"acomma"}),n=[],e="firstavalue"},avalue:function(){r.push({container:n,state:"acomma"}),n=[],e="firstavalue"}},"]":{firstavalue:function(){var t=r.pop();i=n,n=t.container,o=t.key,e=t.state},acomma:function(){var t=r.pop();n.push(i),i=n,n=t.container,o=t.key,e=t.state}},":":{colon:function(){if(Object.hasOwnProperty.call(n,o))throw new SyntaxError("Duplicate key '"+o+'"');e="ovalue"}},",":{ocomma:function(){n[o]=i,e="okey"},acomma:function(){n.push(i),e="avalue"}},true:{go:function(){i=!0,e="ok"},ovalue:function(){i=!0,e="ocomma"},firstavalue:function(){i=!0,e="acomma"},avalue:function(){i=!0,e="acomma"}},false:{go:function(){i=!1,e="ok"},ovalue:function(){i=!1,e="ocomma"},firstavalue:function(){i=!1,e="acomma"},avalue:function(){i=!1,e="acomma"}},null:{go:function(){i=null,e="ok"},ovalue:function(){i=null,e="ocomma"},firstavalue:function(){i=null,e="acomma"},avalue:function(){i=null,e="acomma"}}};return function(n,o){var a,l=/^[\u0020\t\n\r]*(?:([,:\[\]{}]|true|false|null)|(-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)|"((?:[^\r\n\t\\\"]|\\(?:["\\\/trnfb]|u[0-9a-fA-F]{4}))*)")/;e="go",r=[];try{for(;;){if(a=l.exec(n),!a)break;a[1]?c[a[1]][e]():a[2]?(i=+a[2],u[e]()):(i=t(a[3]),s[e]()),n=n.slice(a[0].length)}}catch(t){e=t}if("ok"!==e||/[^\u0020\t\n\r]/.test(n))throw e instanceof SyntaxError?e:new SyntaxError("JSON");return"function"==typeof o?function t(e,r){var n,a,s=e[r];if(s&&"object"==typeof s)for(n in i)Object.prototype.hasOwnProperty.call(s,n)&&(a=t(s,n),void 0!==a?s[n]=a:delete s[n]);return o.call(e,r,s)}({"":i},""):i}}())};t.exports=r},function(t,e,r){"use strict";function n(t,e){this.queue=t,this.options=e,this.transforms=[]}var o=r(6);n.prototype.configure=function(t){this.queue&&this.queue.configure(t);var e=this.options;return this.options=o.merge(e,t),this},n.prototype.addTransform=function(t){return o.isFunction(t)&&this.transforms.push(t),this},n.prototype.log=function(t,e){if(e&&o.isFunction(e)||(e=function(){}),!this.options.enabled)return e(new Error("Rollbar is not enabled"));this.queue.addPendingItem(t);var r=t.err;this._applyTransforms(t,function(n,o){return n?(this.queue.removePendingItem(t),e(n,null)):void this.queue.addItem(o,e,r,t)}.bind(this))},n.prototype._applyTransforms=function(t,e){var r=-1,n=this.transforms.length,o=this.transforms,i=this.options,a=function(t,s){return t?void e(t,null):(r++,r===n?void e(null,s):void o[r](s,i,a))};a(null,t)},t.exports=n},function(t,e,r){"use strict";function n(t){this.queue=[],this.options=i.merge(t);var e=this.options.maxTelemetryEvents||a;this.maxQueueSize=Math.max(0,Math.min(e,a))}function o(t,e){if(e)return e;var r={error:"error",manual:"info"};return r[t]||"info"}var i=r(6),a=100;n.prototype.configure=function(t){var e=this.options;this.options=i.merge(e,t);var r=this.options.maxTelemetryEvents||a,n=Math.max(0,Math.min(r,a)),o=0;this.maxQueueSize>n&&(o=this.maxQueueSize-n),this.maxQueueSize=n,this.queue.splice(0,o)},n.prototype.copyEvents=function(){return Array.prototype.slice.call(this.queue,0)},n.prototype.capture=function(t,e,r,n,a){var s={level:o(t,r),type:t,timestamp_ms:a||i.now(),body:e,source:"client"};n&&(s.uuid=n);try{if(i.isFunction(this.options.filterTelemetry)&&this.options.filterTelemetry(s))return!1}catch(t){this.options.filterTelemetry=null}return this.push(s),s},n.prototype.captureEvent=function(t,e,r){return this.capture("manual",t,e,r)},n.prototype.captureError=function(t,e,r,n){var o={message:t.message||String(t)};return t.stack&&(o.stack=t.stack),this.capture("error",o,e,r,n)},n.prototype.captureLog=function(t,e,r,n){return this.capture("log",{message:t},e,r,n)},n.prototype.captureNetwork=function(t,e,r,n){e=e||"xhr",t.subtype=t.subtype||e,n&&(t.request=n);var o=this.levelFromStatus(t.status_code);return this.capture("network",t,o,r)},n.prototype.levelFromStatus=function(t){return t>=200&&t<400?"info":0===t||t>=400?"error":"info"},n.prototype.captureDom=function(t,e,r,n,o){var i={subtype:t,element:e};return void 0!==r&&(i.value=r),void 0!==n&&(i.checked=n),this.capture("dom",i,"info",o)},n.prototype.captureNavigation=function(t,e,r){return this.capture("navigation",{from:t,to:e},"info",r)},n.prototype.captureDomContentLoaded=function(t){return this.capture("navigation",{subtype:"DOMContentLoaded"},"info",void 0,t&&t.getTime())},n.prototype.captureLoad=function(t){return this.capture("navigation",{subtype:"load"},"info",void 0,t&&t.getTime())},n.prototype.captureConnectivityChange=function(t,e){return this.captureNetwork({change:t},"connectivity",e)},n.prototype._captureRollbarItem=function(t){if(this.options.includeItemsInTelemetry)return t.err?this.captureError(t.err,t.level,t.uuid,t.timestamp):t.message?this.captureLog(t.message,t.level,t.uuid,t.timestamp):t.custom?this.capture("log",t.custom,t.level,t.uuid,t.timestamp):void 0},n.prototype.push=function(t){this.queue.push(t),this.queue.length>this.maxQueueSize&&this.queue.shift()},t.exports=n},function(t,e,r){"use strict";function n(t,e,r,n){this.options=t,this.transport=e,this.url=r,this.jsonBackup=n,this.accessToken=t.accessToken,this.transportOptions=o(t,r)}function o(t,e){return a.getTransportFromOptions(t,s,e)}var i=r(6),a=r(12),s={hostname:"api.rollbar.com",path:"/api/1/item/",search:null,version:"1",protocol:"https:",port:443};n.prototype.postItem=function(t,e){var r=a.transportOptions(this.transportOptions,"POST"),n=a.buildPayload(this.accessToken,t,this.jsonBackup);this.transport.post(this.accessToken,r,n,e)},n.prototype.configure=function(t){var e=this.oldOptions;return this.options=i.merge(e,t),this.transportOptions=o(this.options,this.url),void 0!==this.options.accessToken&&(this.accessToken=this.options.accessToken),this},t.exports=n},function(t,e,r){"use strict";function n(t,e,r){if(!s.isType(e.context,"string")){var n=s.stringify(e.context,r);n.error?e.context="Error: could not serialize 'context'":e.context=n.value||"",e.context.length>255&&(e.context=e.context.substr(0,255))}return{access_token:t,data:e}}function o(t,e,r){var n=e.hostname,o=e.protocol,i=e.port,a=e.path,s=e.search,u=t.proxy;if(t.endpoint){var c=r.parse(t.endpoint);n=c.hostname,o=c.protocol,i=c.port,a=c.pathname,s=c.search}return{hostname:n,protocol:o,port:i,path:a,search:s,proxy:u}}function i(t,e){var r=t.protocol||"https:",n=t.port||("http:"===r?80:"https:"===r?443:void 0),o=t.hostname,i=t.path;return t.search&&(i+=t.search),t.proxy&&(i=r+"//"+o+i,o=t.proxy.host||t.proxy.hostname,n=t.proxy.port,r=t.proxy.protocol||r),{protocol:r,hostname:o,path:i,port:n,method:e}}function a(t,e){var r=/\/$/.test(t),n=/^\//.test(e);return r&&n?e=e.substring(1):r||n||(e="/"+e),t+e}var s=r(6);t.exports={buildPayload:n,getTransportFromOptions:o,transportOptions:i,appendPathToPath:a}},function(t,e,r){"use strict";function n(){var t=Array.prototype.slice.call(arguments,0);t.unshift("Rollbar:"),a.ieVersion()<=8?console.error(s.formatArgsAsString(t)):console.error.apply(console,t)}function o(){var t=Array.prototype.slice.call(arguments,0);t.unshift("Rollbar:"),a.ieVersion()<=8?console.info(s.formatArgsAsString(t)):console.info.apply(console,t)}function i(){var t=Array.prototype.slice.call(arguments,0);t.unshift("Rollbar:"),a.ieVersion()<=8?console.log(s.formatArgsAsString(t)):console.log.apply(console,t)}r(14);var a=r(15),s=r(6);t.exports={error:n,info:o,log:i}},function(t,e){!function(t){
+"use strict";t.console||(t.console={});for(var e,r,n=t.console,o=function(){},i=["memory"],a="assert,clear,count,debug,dir,dirxml,error,exception,group,groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn".split(",");e=i.pop();)n[e]||(n[e]={});for(;r=a.pop();)n[r]||(n[r]=o)}("undefined"==typeof window?this:window)},function(t,e){"use strict";function r(){var t;if(!document)return t;for(var e=3,r=document.createElement("div"),n=r.getElementsByTagName("i");r.innerHTML="<!--[if gt IE "+ ++e+"]><i></i><![endif]-->",n[0];);return e>4?e:t}var n={ieVersion:r};t.exports=n},function(t,e){"use strict";function r(t,e,r){if(t){var o;"function"==typeof e._rollbarOldOnError?o=e._rollbarOldOnError:t.onerror&&!t.onerror.belongsToShim&&(o=t.onerror,e._rollbarOldOnError=o);var i=function(){var r=Array.prototype.slice.call(arguments,0);n(t,e,o,r)};i.belongsToShim=r,t.onerror=i}}function n(t,e,r,n){t._rollbarWrappedError&&(n[4]||(n[4]=t._rollbarWrappedError),n[5]||(n[5]=t._rollbarWrappedError._rollbarContext),t._rollbarWrappedError=null),e.handleUncaughtException.apply(e,n),r&&r.apply(t,n)}function o(t,e,r){if(t){"function"==typeof t._rollbarURH&&t._rollbarURH.belongsToShim&&t.removeEventListener("unhandledrejection",t._rollbarURH);var n=function(t){var r,n,o;try{r=t.reason}catch(t){r=void 0}try{n=t.promise}catch(t){n="[unhandledrejection] error getting `promise` from event"}try{o=t.detail,!r&&o&&(r=o.reason,n=o.promise)}catch(t){o="[unhandledrejection] error getting `detail` from event"}r||(r="[unhandledrejection] error getting `reason` from event"),e&&e.handleUnhandledRejection&&e.handleUnhandledRejection(r,n)};n.belongsToShim=r,t._rollbarURH=n,t.addEventListener("unhandledrejection",n)}}function i(t,e,r){if(t){var n,o,i="EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload".split(",");for(n=0;n<i.length;++n)o=i[n],t[o]&&t[o].prototype&&a(e,t[o].prototype,r)}}function a(t,e,r){if(e.hasOwnProperty&&e.hasOwnProperty("addEventListener")){for(var n=e.addEventListener;n._rollbarOldAdd&&n.belongsToShim;)n=n._rollbarOldAdd;var o=function(e,r,o){n.call(this,e,t.wrap(r),o)};o._rollbarOldAdd=n,o.belongsToShim=r,e.addEventListener=o;for(var i=e.removeEventListener;i._rollbarOldRemove&&i.belongsToShim;)i=i._rollbarOldRemove;var a=function(t,e,r){i.call(this,t,e&&e._rollbar_wrapped||e,r)};a._rollbarOldRemove=i,a.belongsToShim=r,e.removeEventListener=a}}t.exports={captureUncaughtExceptions:r,captureUnhandledRejections:o,wrapGlobals:i}},function(t,e,r){"use strict";function n(t,e,r,n,o){n&&l.isFunction(n)||(n=function(){}),l.addParamsAndAccessTokenToPath(t,e,r);var a="GET",s=l.formatUrl(e);i(t,s,a,null,n,o)}function o(t,e,r,n,o){if(n&&l.isFunction(n)||(n=function(){}),!r)return n(new Error("Cannot send empty request"));var a=p.truncate(r);if(a.error)return n(a.error);var s=a.value,u="POST",c=l.formatUrl(e);i(t,c,u,s,n,o)}function i(t,e,r,n,o,i){var p;if(p=i?i():a(),!p)return o(new Error("No way to send a request"));try{try{var h=function(){try{if(h&&4===p.readyState){h=void 0;var t=l.jsonParse(p.responseText);if(s(p))return void o(t.error,t.value);if(u(p)){if(403===p.status){var e=t.value&&t.value.message;f.error(e)}o(new Error(String(p.status)))}else{var r="XHR response had no status code (likely connection failure)";o(c(r))}}}catch(t){var n;n=t&&t.stack?t:new Error(t),o(n)}};p.open(r,e,!0),p.setRequestHeader&&(p.setRequestHeader("Content-Type","application/json"),p.setRequestHeader("X-Rollbar-Access-Token",t)),p.onreadystatechange=h,p.send(n)}catch(t){if("undefined"!=typeof XDomainRequest){if(!window||!window.location)return o(new Error("No window available during request, unknown environment"));"http:"===window.location.href.substring(0,5)&&"https"===e.substring(0,5)&&(e="http"+e.substring(5));var d=new XDomainRequest;d.onprogress=function(){},d.ontimeout=function(){var t="Request timed out",e="ETIMEDOUT";o(c(t,e))},d.onerror=function(){o(new Error("Error during request"))},d.onload=function(){var t=l.jsonParse(d.responseText);o(t.error,t.value)},d.open(r,e,!0),d.send(n)}else o(new Error("Cannot find a method to transport a request"))}}catch(t){o(t)}}function a(){var t,e,r=[function(){return new XMLHttpRequest},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml3.XMLHTTP")},function(){return new ActiveXObject("Microsoft.XMLHTTP")}],n=r.length;for(e=0;e<n;e++)try{t=r[e]();break}catch(t){}return t}function s(t){return t&&t.status&&200===t.status}function u(t){return t&&l.isType(t.status,"number")&&t.status>=400&&t.status<600}function c(t,e){var r=new Error(t);return r.code=e||"ENOTFOUND",r}var l=r(6),p=r(18),f=r(13);t.exports={get:n,post:o}},function(t,e,r){"use strict";function n(t,e){return[t,f.stringify(t,e)]}function o(t,e){var r=t.length;return r>2*e?t.slice(0,e).concat(t.slice(r-e)):t}function i(t,e,r){r="undefined"==typeof r?30:r;var n,i=t.data.body;if(i.trace_chain)for(var a=i.trace_chain,s=0;s<a.length;s++)n=a[s].frames,n=o(n,r),a[s].frames=n;else i.trace&&(n=i.trace.frames,n=o(n,r),i.trace.frames=n);return[t,f.stringify(t,e)]}function a(t,e){return e&&e.length>t?e.slice(0,t-3).concat("..."):e}function s(t,e,r){function n(e,r,o){switch(f.typeName(r)){case"string":return a(t,r);case"object":case"array":return f.traverse(r,n,o);default:return r}}return e=f.traverse(e,n,[]),[e,f.stringify(e,r)]}function u(t){return t.exception&&(delete t.exception.description,t.exception.message=a(255,t.exception.message)),t.frames=o(t.frames,1),t}function c(t,e){var r=t.data.body;if(r.trace_chain)for(var n=r.trace_chain,o=0;o<n.length;o++)n[o]=u(n[o]);else r.trace&&(r.trace=u(r.trace));return[t,f.stringify(t,e)]}function l(t,e){return t.length>e}function p(t,e,r){r="undefined"==typeof r?524288:r;for(var o,a,u,p=[n,i,s.bind(null,1024),s.bind(null,512),s.bind(null,256),c];o=p.shift();)if(a=o(t,e),t=a[0],u=a[1],u.error||!l(u.value,r))return u;return u}var f=r(6);t.exports={truncate:p,raw:n,truncateFrames:i,truncateStrings:s,maybeTruncateValue:a}},function(t,e){"use strict";function r(t){var e,r,n={protocol:null,auth:null,host:null,path:null,hash:null,href:t,hostname:null,port:null,pathname:null,search:null,query:null};if(e=t.indexOf("//"),e!==-1?(n.protocol=t.substring(0,e),r=e+2):r=0,e=t.indexOf("@",r),e!==-1&&(n.auth=t.substring(r,e),r=e+1),e=t.indexOf("/",r),e===-1){if(e=t.indexOf("?",r),e===-1)return e=t.indexOf("#",r),e===-1?n.host=t.substring(r):(n.host=t.substring(r,e),n.hash=t.substring(e)),n.hostname=n.host.split(":")[0],n.port=n.host.split(":")[1],n.port&&(n.port=parseInt(n.port,10)),n;n.host=t.substring(r,e),n.hostname=n.host.split(":")[0],n.port=n.host.split(":")[1],n.port&&(n.port=parseInt(n.port,10)),r=e}else n.host=t.substring(r,e),n.hostname=n.host.split(":")[0],n.port=n.host.split(":")[1],n.port&&(n.port=parseInt(n.port,10)),r=e;if(e=t.indexOf("#",r),e===-1?n.path=t.substring(r):(n.path=t.substring(r,e),n.hash=t.substring(e)),n.path){var o=n.path.split("?");n.pathname=o[0],n.query=o[1],n.search=n.query?"?"+n.query:null}return n}t.exports={parse:r}},function(t,e,r){"use strict";function n(t,e,r){if(t.data=t.data||{},t.err)try{t.stackInfo=t.err._savedStackTrace||d.parse(t.err)}catch(e){m.error("Error while parsing the error object.",e);try{t.message=t.err.message||t.err.description||t.message||String(t.err)}catch(e){t.message=String(t.err)||String(e)}delete t.err}r(null,t)}function o(t,e,r){t.message||t.stackInfo||t.custom||r(new Error("No message, stack info, or custom data"),null),r(null,t)}function i(t,e,r){var n=e.payload&&e.payload.environment||e.environment;t.data=h.merge(t.data,{environment:n,level:t.level,endpoint:e.endpoint,platform:"browser",framework:"browser-js",language:"javascript",server:{},uuid:t.uuid,notifier:{name:"rollbar-browser-js",version:e.version}}),r(null,t)}function a(t){return function(e,r,n){if(!t||!t.location)return n(null,e);var o="$remote_ip";r.captureIp?r.captureIp!==!0&&(o+="_anonymize"):o=null,h.set(e,"data.request",{url:t.location.href,query_string:t.location.search,user_ip:o}),n(null,e)}}function s(t){return function(e,r,n){if(!t)return n(null,e);var o=t.navigator||{},i=t.screen||{};h.set(e,"data.client",{runtime_ms:e.timestamp-t._rollbarStartTime,timestamp:Math.round(e.timestamp/1e3),javascript:{browser:o.userAgent,language:o.language,cookie_enabled:o.cookieEnabled,screen:{width:i.width,height:i.height}}}),n(null,e)}}function u(t){return function(e,r,n){if(!t||!t.navigator)return n(null,e);for(var o,i=[],a=t.navigator.plugins||[],s=0,u=a.length;s<u;++s)o=a[s],i.push({name:o.name,description:o.description});h.set(e,"data.client.javascript.plugins",i),n(null,e)}}function c(t,e,r){t.stackInfo?p(t,e,r):l(t,e,r)}function l(t,e,r){var n=t.message,o=t.custom;if(!n)if(o){var i=e.scrubFields,a=h.stringify(h.scrub(o,i));n=a.error||a.value||""}else n="";var s={body:n};o&&(s.extra=h.merge(o)),h.set(t,"data.body",{message:s}),r(null,t)}function p(t,e,r){var n=t.data.description,o=t.stackInfo,i=t.custom,a=d.guessErrorClass(o.message),s=o.name||a[0],u=a[1],c={exception:{class:s,message:u}};n&&(c.exception.description=n);var p=o.stack;if(p&&0===p.length&&t._unhandledStackInfo&&t._unhandledStackInfo.stack&&(p=t._unhandledStackInfo.stack),p){0===p.length&&(c.exception.stack=o.rawStack,c.exception.raw=String(o.rawException));var f,m,g,v,y,b,w,_;for(c.frames=[],w=0;w<p.length;++w)f=p[w],m={filename:f.url?h.sanitizeUrl(f.url):"(unknown)",lineno:f.line||null,method:f.func&&"?"!==f.func?f.func:"[anonymous]",colno:f.column},m.method&&m.method.endsWith&&m.method.endsWith("_rollbar_wrapped")||(g=v=y=null,b=f.context?f.context.length:0,b&&(_=Math.floor(b/2),v=f.context.slice(0,_),g=f.context[_],y=f.context.slice(_)),g&&(m.code=g),(v||y)&&(m.context={},v&&v.length&&(m.context.pre=v),y&&y.length&&(m.context.post=y)),f.args&&(m.args=f.args),c.frames.push(m));c.frames.reverse(),i&&(c.extra=h.merge(i)),h.set(t,"data.body",{trace:c}),r(null,t)}else t.message=s+": "+u,l(t,e,r)}function f(t,e,r){var n=e.scrubFields;t.data=h.scrub(t.data,n),r(null,t)}var h=r(6),d=r(21),m=r(13);t.exports={handleItemWithError:n,ensureItemHasSomethingToSay:o,addBaseInfo:i,addRequestInfo:a,addClientInfo:s,addPluginInfo:u,addBody:c,scrubPayload:f}},function(t,e,r){"use strict";function n(){return l}function o(){return null}function i(t){var e={};return e._stackFrame=t,e.url=t.fileName,e.line=t.lineNumber,e.func=t.functionName,e.column=t.columnNumber,e.args=t.args,e.context=o(e.url,e.line),e}function a(t){function e(){var e,r=[];if(t.stack)e=t;else try{throw t}catch(t){e=t}try{r=c.parse(e)}catch(t){r=[]}for(var n=[],o=0;o<r.length;o++)n.push(new i(r[o]));return n}return{stack:e(),message:t.message,name:t.name,rawStack:t.stack,rawException:t}}function s(t){return new a(t)}function u(t){if(!t||!t.match)return["Unknown error. There was no error message to display.",""];var e=t.match(p),r="(unknown)";return e&&(r=e[e.length-1],t=t.replace((e[e.length-2]||"")+r+":",""),t=t.replace(/(^[\s]+|[\s]+$)/g,"")),[r,t]}var c=r(22),l="?",p=new RegExp("^(([a-zA-Z0-9-_$ ]*): *)?(Uncaught )?([a-zA-Z0-9-_$ ]*): ");t.exports={guessFunctionName:n,guessErrorClass:u,gatherContext:o,parse:s,Stack:a,Frame:i}},function(t,e,r){var n,o,i;!function(a,s){"use strict";o=[r(23)],n=s,i="function"==typeof n?n.apply(e,o):n,!(void 0!==i&&(t.exports=i))}(this,function(t){"use strict";function e(t,e,r){if("function"==typeof Array.prototype.map)return t.map(e,r);for(var n=new Array(t.length),o=0;o<t.length;o++)n[o]=e.call(r,t[o]);return n}function r(t,e,r){if("function"==typeof Array.prototype.filter)return t.filter(e,r);for(var n=[],o=0;o<t.length;o++)e.call(r,t[o])&&n.push(t[o]);return n}var n=/(^|@)\S+\:\d+/,o=/^\s*at .*(\S+\:\d+|\(native\))/m,i=/^(eval@)?(\[native code\])?$/;return{parse:function(t){if("undefined"!=typeof t.stacktrace||"undefined"!=typeof t["opera#sourceloc"])return this.parseOpera(t);if(t.stack&&t.stack.match(o))return this.parseV8OrIE(t);if(t.stack)return this.parseFFOrSafari(t);throw new Error("Cannot parse given Error object")},extractLocation:function(t){if(t.indexOf(":")===-1)return[t];var e=t.replace(/[\(\)\s]/g,"").split(":"),r=e.pop(),n=e[e.length-1];if(!isNaN(parseFloat(n))&&isFinite(n)){var o=e.pop();return[e.join(":"),o,r]}return[e.join(":"),r,void 0]},parseV8OrIE:function(n){var i=r(n.stack.split("\n"),function(t){return!!t.match(o)},this);return e(i,function(e){e.indexOf("(eval ")>-1&&(e=e.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var r=e.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),n=this.extractLocation(r.pop()),o=r.join(" ")||void 0,i="eval"===n[0]?void 0:n[0];return new t(o,void 0,i,n[1],n[2],e)},this)},parseFFOrSafari:function(n){var o=r(n.stack.split("\n"),function(t){return!t.match(i)},this);return e(o,function(e){if(e.indexOf(" > eval")>-1&&(e=e.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),e.indexOf("@")===-1&&e.indexOf(":")===-1)return new t(e);var r=e.split("@"),n=this.extractLocation(r.pop()),o=r.shift()||void 0;return new t(o,void 0,n[0],n[1],n[2],e)},this)},parseOpera:function(t){return!t.stacktrace||t.message.indexOf("\n")>-1&&t.message.split("\n").length>t.stacktrace.split("\n").length?this.parseOpera9(t):t.stack?this.parseOpera11(t):this.parseOpera10(t)},parseOpera9:function(e){for(var r=/Line (\d+).*script (?:in )?(\S+)/i,n=e.message.split("\n"),o=[],i=2,a=n.length;i<a;i+=2){var s=r.exec(n[i]);s&&o.push(new t(void 0,void 0,s[2],s[1],void 0,n[i]))}return o},parseOpera10:function(e){for(var r=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,n=e.stacktrace.split("\n"),o=[],i=0,a=n.length;i<a;i+=2){var s=r.exec(n[i]);s&&o.push(new t(s[3]||void 0,void 0,s[2],s[1],void 0,n[i]))}return o},parseOpera11:function(o){var i=r(o.stack.split("\n"),function(t){return!!t.match(n)&&!t.match(/^Error created at/)},this);return e(i,function(e){var r,n=e.split("@"),o=this.extractLocation(n.pop()),i=n.shift()||"",a=i.replace(/<anonymous function(: (\w+))?>/,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(r=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===r||"[arguments not available]"===r?void 0:r.split(",");return new t(a,s,o[0],o[1],o[2],e)},this)}}})},function(t,e,r){var n,o,i;!function(r,a){"use strict";o=[],n=a,i="function"==typeof n?n.apply(e,o):n,!(void 0!==i&&(t.exports=i))}(this,function(){"use strict";function t(t){return!isNaN(parseFloat(t))&&isFinite(t)}function e(t,e,r,n,o,i){void 0!==t&&this.setFunctionName(t),void 0!==e&&this.setArgs(e),void 0!==r&&this.setFileName(r),void 0!==n&&this.setLineNumber(n),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return e.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(t){this.functionName=String(t)},getArgs:function(){return this.args},setArgs:function(t){if("[object Array]"!==Object.prototype.toString.call(t))throw new TypeError("Args must be an Array");this.args=t},getFileName:function(){return this.fileName},setFileName:function(t){this.fileName=String(t)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(e){if(!t(e))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(e)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(e){if(!t(e))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(e)},getSource:function(){return this.source},setSource:function(t){this.source=String(t)},toString:function(){var e=this.getFunctionName()||"{anonymous}",r="("+(this.getArgs()||[]).join(",")+")",n=this.getFileName()?"@"+this.getFileName():"",o=t(this.getLineNumber())?":"+this.getLineNumber():"",i=t(this.getColumnNumber())?":"+this.getColumnNumber():"";return e+r+n+o+i}},e})},function(t,e,r){"use strict";function n(t,e,r){var n=e.payload||{};n.body&&delete n.body;var o=u.merge(t.data,n);t._isUncaught&&(o._isUncaught=!0),t._originalArgs&&(o._originalArgs=t._originalArgs),r(null,o)}function o(t,e,r){t.telemetryEvents&&u.set(t,"data.body.telemetry",t.telemetryEvents),r(null,t)}function i(t,e,r){if(!t.message)return void r(null,t);var n="data.body.trace_chain.0",o=u.get(t,n);if(o||(n="data.body.trace",o=u.get(t,n)),o){if(!o.exception||!o.exception.description)return u.set(t,n+".exception.description",t.message),void r(null,t);var i=u.get(t,n+".extra")||{},a=u.merge(i,{message:t.message});u.set(t,n+".extra",a)}r(null,t)}function a(t){return function(e,r,n){var o=u.merge(e);try{u.isFunction(r.transform)&&r.transform(o.data)}catch(o){return r.transform=null,t.error("Error while calling custom transform() function. Removing custom transform().",o),void n(null,e)}n(null,o)}}function s(t,e,r){if(!e.sendConfig)return r(null,t);var n="_rollbarConfig",o=u.get(t,"data.custom")||{};o[n]=e,t.data.custom=o,r(null,t)}var u=r(6);t.exports={itemToPayload:n,addTelemetryData:o,addMessageWithError:i,userTransform:a,addConfigToPayload:s}},function(t,e,r){"use strict";function n(t,e){return!o.get(e,"plugins.jquery.ignoreAjaxErrors")||!o.get(t,"body.message.extra.isAjax")}var o=r(6);t.exports={checkIgnore:n}},function(t,e,r){"use strict";function n(t,e){var r=t.level,n=c.LEVELS[r]||0,o=e.reportLevel,i=c.LEVELS[o]||0;return!(n<i)}function o(t){return function(e,r){var n=!!e._isUncaught;delete e._isUncaught;var o=e._originalArgs;delete e._originalArgs;try{c.isFunction(r.onSendCallback)&&r.onSendCallback(n,o,e)}catch(e){r.onSendCallback=null,t.error("Error while calling onSendCallback, removing",e)}try{if(c.isFunction(r.checkIgnore)&&r.checkIgnore(n,o,e))return!1}catch(e){r.checkIgnore=null,t.error("Error while calling custom checkIgnore(), removing",e)}return!0}}function i(t){return function(e,r){return!s(e,r,"blacklist",t)}}function a(t){return function(e,r){return s(e,r,"whitelist",t)}}function s(t,e,r,n){var o=!1;"blacklist"===r&&(o=!0);var i,a,s,u,l,p,f,h,d,m;try{if(i=o?e.hostBlackList:e.hostWhiteList,f=i&&i.length,a=c.get(t,"body.trace"),!i||0===f)return!o;if(!a||!a.frames||0===a.frames.length)return!o;for(l=a.frames.length,d=0;d<l;d++){if(s=a.frames[d],u=s.filename,!c.isType(u,"string"))return!o;for(m=0;m<f;m++)if(p=i[m],h=new RegExp(p),h.test(u))return!0}}catch(t){o?e.hostBlackList=null:e.hostWhiteList=null;var g=o?"hostBlackList":"hostWhiteList";return n.error("Error while reading your configuration's "+g+" option. Removing custom "+g+".",t),!o}return!1}function u(t){return function(e,r){var n,o,i,a,s,u,l,p,f;try{if(s=!1,i=r.ignoredMessages,!i||0===i.length)return!0;if(l=e.body,p=c.get(l,"trace.exception.message"),f=c.get(l,"message.body"),n=p||f,!n)return!0;for(a=i.length,o=0;o<a&&(u=new RegExp(i[o],"gi"),!(s=u.test(n)));o++);}catch(e){r.ignoredMessages=null,t.error("Error while reading your configuration's ignoredMessages option. Removing custom ignoredMessages.")}return!s}}var c=r(6);t.exports={checkLevel:n,userCheckIgnore:o,urlIsNotBlacklisted:i,urlIsWhitelisted:a,messageIsIgnored:u}},function(t,e,r){"use strict";function n(t,e,r,n,o){var i=t[e];t[e]=r(i),n&&n[o].push([t,e,i])}function o(t,e){for(var r;t[e].length;)r=t[e].shift(),r[0][r[1]]=r[2]}function i(t){if(!t||!t.attributes)return null;for(var e=t.attributes,r=0;r<e.length;++r)if("name"===e[r].key)return e[r].value;return null}function a(t){for(var e=[],r=0;r<t.length;++r)e.push(new RegExp(t[r],"i"));return function(t){var r=i(t);if(!r)return!1;for(var n=0;n<e.length;++n)if(e[n].test(r))return!0;return!1}}function s(t,e,r,n,o){var i=t.autoInstrument;t.enabled===!1||i===!1?this.autoInstrument={}:(u.isType(i,"object")||(i=p),this.autoInstrument=u.merge(p,i)),this.scrubTelemetryInputs=!!t.scrubTelemetryInputs,this.telemetryScrubber=t.telemetryScrubber,this.defaultValueScrubber=a(t.scrubFields),this.telemeter=e,this.rollbar=r,this._window=n||{},this._document=o||{},this.replacements={network:[],log:[],navigation:[],connectivity:[]},this.eventRemovers={dom:[],connectivity:[]},this._location=this._window.location,this._lastHref=this._location&&this._location.href}var u=r(6),c=r(19),l=r(28),p={network:!0,networkResponseHeaders:!1,networkResponseBody:!1,networkRequestBody:!1,log:!0,dom:!0,navigation:!0,connectivity:!0};s.prototype.configure=function(t){var e=t.autoInstrument,r=u.merge(this.autoInstrument);t.enabled===!1||e===!1?this.autoInstrument={}:(u.isType(e,"object")||(e=p),this.autoInstrument=u.merge(p,e)),this.instrument(r),void 0!==t.scrubTelemetryInputs&&(this.scrubTelemetryInputs=!!t.scrubTelemetryInputs),void 0!==t.telemetryScrubber&&(this.telemetryScrubber=t.telemetryScrubber)},s.prototype.instrument=function(t){!this.autoInstrument.network||t&&t.network?!this.autoInstrument.network&&t&&t.network&&this.deinstrumentNetwork():this.instrumentNetwork(),!this.autoInstrument.log||t&&t.log?!this.autoInstrument.log&&t&&t.log&&this.deinstrumentConsole():this.instrumentConsole(),!this.autoInstrument.dom||t&&t.dom?!this.autoInstrument.dom&&t&&t.dom&&this.deinstrumentDom():this.instrumentDom(),!this.autoInstrument.navigation||t&&t.navigation?!this.autoInstrument.navigation&&t&&t.navigation&&this.deinstrumentNavigation():this.instrumentNavigation(),!this.autoInstrument.connectivity||t&&t.connectivity?!this.autoInstrument.connectivity&&t&&t.connectivity&&this.deinstrumentConnectivity():this.instrumentConnectivity()},s.prototype.deinstrumentNetwork=function(){o(this.replacements,"network")},s.prototype.instrumentNetwork=function(){function t(t,r){t in r&&u.isFunction(r[t])&&n(r,t,function(t){return e.rollbar.wrap(t)})}var e=this;if("XMLHttpRequest"in this._window){var r=this._window.XMLHttpRequest.prototype;n(r,"open",function(t){return function(e,r){return u.isType(r,"string")&&(this.__rollbar_xhr={method:e,url:r,status_code:null,start_time_ms:u.now(),end_time_ms:null}),t.apply(this,arguments)}},this.replacements,"network"),n(r,"send",function(r){return function(o){function i(){if(a.__rollbar_xhr&&(1===a.readyState||4===a.readyState)){if(null===a.__rollbar_xhr.status_code){a.__rollbar_xhr.status_code=0;var t=null;e.autoInstrument.networkRequestBody&&(t=o),a.__rollbar_event=e.telemeter.captureNetwork(a.__rollbar_xhr,"xhr",void 0,t)}if(1===a.readyState)a.__rollbar_xhr.start_time_ms=u.now();else{a.__rollbar_xhr.end_time_ms=u.now();var r=null;if(e.autoInstrument.networkResponseHeaders){var n=e.autoInstrument.networkResponseHeaders;r={};try{var i,s;if(n===!0){var c=a.getAllResponseHeaders();if(c){var l,p,f=c.trim().split(/[\r\n]+/);for(s=0;s<f.length;s++)l=f[s].split(": "),i=l.shift(),p=l.join(": "),r[i]=p}}else for(s=0;s<n.length;s++)i=n[s],r[i]=a.getResponseHeader(i)}catch(t){}}var h=null;if(e.autoInstrument.networkResponseBody)try{h=a.responseText}catch(t){}var d=null;(h||r)&&(d={},h&&(d.body=h),r&&(d.headers=r)),d&&(a.__rollbar_xhr.response=d)}try{var m=a.status;m=1223===m?204:m,a.__rollbar_xhr.status_code=m,a.__rollbar_event.level=e.telemeter.levelFromStatus(m)}catch(t){}}}var a=this;return t("onload",a),t("onerror",a),t("onprogress",a),"onreadystatechange"in a&&u.isFunction(a.onreadystatechange)?n(a,"onreadystatechange",function(t){return e.rollbar.wrap(t,void 0,i)}):a.onreadystatechange=i,r.apply(this,arguments)}},this.replacements,"network")}"fetch"in this._window&&n(this._window,"fetch",function(t){return function(r,n){for(var o=new Array(arguments.length),i=0,a=o.length;i<a;i++)o[i]=arguments[i];var s,c=o[0],l="GET";u.isType(c,"string")?s=c:c&&(s=c.url,c.method&&(l=c.method)),o[1]&&o[1].method&&(l=o[1].method);var p={method:l,url:s,status_code:null,start_time_ms:u.now(),end_time_ms:null},f=null;return e.autoInstrument.networkRequestBody&&(o[1]&&o[1].body?f=o[1].body:o[0]&&!u.isType(o[0],"string")&&o[0].body&&(f=o[0].body)),e.telemeter.captureNetwork(p,"fetch",void 0,f),t.apply(this,o).then(function(t){p.end_time_ms=u.now(),p.status_code=t.status;var r=null;if(e.autoInstrument.networkResponseHeaders){var n=e.autoInstrument.networkResponseHeaders;r={};try{if(n===!0);else for(var o=0;o<n.length;o++){var i=n[o];r[i]=t.headers.get(i)}}catch(t){}}var a=null;return r&&(a={headers:r}),a&&(p.response=a),t})}},this.replacements,"network")},s.prototype.deinstrumentConsole=function(){if("console"in this._window&&this._window.console.log)for(var t;this.replacements.log.length;)t=this.replacements.log.shift(),this._window.console[t[0]]=t[1]},s.prototype.instrumentConsole=function(){function t(t){var n=r[t],o=r,i="warn"===t?"warning":t;r[t]=function(){var t=Array.prototype.slice.call(arguments),r=u.formatArgsAsString(t);e.telemeter.captureLog(r,i),n&&Function.prototype.apply.call(n,o,t)},e.replacements.log.push([t,n])}if("console"in this._window&&this._window.console.log)for(var e=this,r=this._window.console,n=["debug","info","warn","error","log"],o=0,i=n.length;o<i;o++)t(n[o])},s.prototype.deinstrumentDom=function(){("addEventListener"in this._window||"attachEvent"in this._window)&&this.removeListeners("dom")},s.prototype.instrumentDom=function(){if("addEventListener"in this._window||"attachEvent"in this._window){var t=this.handleClick.bind(this),e=this.handleBlur.bind(this);this.addListener("dom",this._window,"click","onclick",t,!0),this.addListener("dom",this._window,"blur","onfocusout",e,!0)}},s.prototype.handleClick=function(t){try{var e=l.getElementFromEvent(t,this._document),r=e&&e.tagName,n=l.isDescribedElement(e,"a")||l.isDescribedElement(e,"button");r&&(n||l.isDescribedElement(e,"input",["button","submit"]))?this.captureDomEvent("click",e):l.isDescribedElement(e,"input",["checkbox","radio"])&&this.captureDomEvent("input",e,e.value,e.checked)}catch(t){}},s.prototype.handleBlur=function(t){try{var e=l.getElementFromEvent(t,this._document);e&&e.tagName&&(l.isDescribedElement(e,"textarea")?this.captureDomEvent("input",e,e.value):l.isDescribedElement(e,"select")&&e.options&&e.options.length?this.handleSelectInputChanged(e):l.isDescribedElement(e,"input")&&!l.isDescribedElement(e,"input",["button","submit","hidden","checkbox","radio"])&&this.captureDomEvent("input",e,e.value))}catch(t){}},s.prototype.handleSelectInputChanged=function(t){if(t.multiple)for(var e=0;e<t.options.length;e++)t.options[e].selected&&this.captureDomEvent("input",t,t.options[e].value);else t.selectedIndex>=0&&t.options[t.selectedIndex]&&this.captureDomEvent("input",t,t.options[t.selectedIndex].value)},s.prototype.captureDomEvent=function(t,e,r,n){if(void 0!==r)if(this.scrubTelemetryInputs||"password"===l.getElementType(e))r="[scrubbed]";else{var o=l.describeElement(e);this.telemetryScrubber?this.telemetryScrubber(o)&&(r="[scrubbed]"):this.defaultValueScrubber(o)&&(r="[scrubbed]")}var i=l.elementArrayToString(l.treeToArray(e));this.telemeter.captureDom(t,i,r,n)},s.prototype.deinstrumentNavigation=function(){var t=this._window.chrome,e=t&&t.app&&t.app.runtime,r=!e&&this._window.history&&this._window.history.pushState;r&&o(this.replacements,"navigation")},s.prototype.instrumentNavigation=function(){var t=this._window.chrome,e=t&&t.app&&t.app.runtime,r=!e&&this._window.history&&this._window.history.pushState;if(r){var o=this;n(this._window,"onpopstate",function(t){return function(){var e=o._location.href;o.handleUrlChange(o._lastHref,e),t&&t.apply(this,arguments)}},this.replacements,"navigation"),n(this._window.history,"pushState",function(t){return function(){var e=arguments.length>2?arguments[2]:void 0;return e&&o.handleUrlChange(o._lastHref,e+""),t.apply(this,arguments)}},this.replacements,"navigation")}},s.prototype.handleUrlChange=function(t,e){var r=c.parse(this._location.href),n=c.parse(e),o=c.parse(t);this._lastHref=e,r.protocol===n.protocol&&r.host===n.host&&(e=n.path+(n.hash||"")),r.protocol===o.protocol&&r.host===o.host&&(t=o.path+(o.hash||"")),this.telemeter.captureNavigation(t,e)},s.prototype.deinstrumentConnectivity=function(){("addEventListener"in this._window||"body"in this._document)&&(this._window.addEventListener?this.removeListeners("connectivity"):o(this.replacements,"connectivity"))},s.prototype.instrumentConnectivity=function(){if("addEventListener"in this._window||"body"in this._document)if(this._window.addEventListener)this.addListener("connectivity",this._window,"online",void 0,function(){this.telemeter.captureConnectivityChange("online")}.bind(this),!0),this.addListener("connectivity",this._window,"offline",void 0,function(){this.telemeter.captureConnectivityChange("offline")}.bind(this),!0);else{var t=this;n(this._document.body,"ononline",function(e){return function(){t.telemeter.captureConnectivityChange("online"),e&&e.apply(this,arguments)}},this.replacements,"connectivity"),n(this._document.body,"onoffline",function(e){return function(){t.telemeter.captureConnectivityChange("offline"),e&&e.apply(this,arguments)}},this.replacements,"connectivity")}},s.prototype.addListener=function(t,e,r,n,o,i){e.addEventListener?(e.addEventListener(r,o,i),this.eventRemovers[t].push(function(){e.removeEventListener(r,o,i)})):n&&(e.attachEvent(n,o),this.eventRemovers[t].push(function(){e.detachEvent(n,o)}))},s.prototype.removeListeners=function(t){for(var e;this.eventRemovers[t].length;)(e=this.eventRemovers[t].shift())()},t.exports=s},function(t,e){"use strict";function r(t){return(t.getAttribute("type")||"").toLowerCase()}function n(t,e,n){if(t.tagName.toLowerCase()!==e.toLowerCase())return!1;if(!n)return!0;t=r(t);for(var o=0;o<n.length;o++)if(n[o]===t)return!0;return!1}function o(t,e){return t.target?t.target:e&&e.elementFromPoint?e.elementFromPoint(t.clientX,t.clientY):void 0}function i(t){for(var e,r=5,n=[],o=0;t&&o<r&&(e=u(t),"html"!==e.tagName);o++)n.unshift(e),t=t.parentNode;return n}function a(t){for(var e,r,n=80,o=" > ",i=o.length,a=[],u=0,c=t.length-1;c>=0;c--){if(e=s(t[c]),r=u+a.length*i+e.length,c<t.length-1&&r>=n+3){a.unshift("...");break}a.unshift(e),u+=e.length}return a.join(o)}function s(t){if(!t||!t.tagName)return"";var e=[t.tagName];t.id&&e.push("#"+t.id),t.classes&&e.push("."+t.classes.join("."));for(var r=0;r<t.attributes.length;r++)e.push("["+t.attributes[r].key+'="'+t.attributes[r].value+'"]');return e.join("")}function u(t){if(!t||!t.tagName)return null;var e,r,n,o,i={};i.tagName=t.tagName.toLowerCase(),t.id&&(i.id=t.id),e=t.className,e&&"string"==typeof e&&(i.classes=e.split(/\s+/));var a=["type","name","title","alt"];for(i.attributes=[],o=0;o<a.length;o++)r=a[o],n=t.getAttribute(r),n&&i.attributes.push({key:r,value:n});return i}t.exports={describeElement:u,descriptionToString:s,elementArrayToString:a,treeToArray:i,getElementFromEvent:o,isDescribedElement:n,getElementType:r}}])}); \ No newline at end of file
diff --git a/packages/website/public/js/rollbar.umd.nojson.min.js b/packages/website/public/js/rollbar.umd.nojson.min.js
deleted file mode 100644
index f2b05d00a..000000000
--- a/packages/website/public/js/rollbar.umd.nojson.min.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(e,r){if("object"==typeof exports&&"object"==typeof module)module.exports=r();else if("function"==typeof define&&define.amd)define([],r);else{var t=r();for(var n in t)("object"==typeof exports?exports:e)[n]=t[n]}}(this,function(){return function(e){function r(n){if(t[n])return t[n].exports;var o=t[n]={exports:{},id:n,loaded:!1};return e[n].call(o.exports,o,o.exports,r),o.loaded=!0,o.exports}var t={};return r.m=e,r.c=t,r.p="",r(0)}([function(e,r,t){e.exports=t(1)},function(e,r,t){"use strict";function n(){var e="undefined"==typeof JSON?{}:JSON;o.setupJSON(e)}var o=t(2),i=t(3);n();var a=window._rollbarConfig,s=a&&a.globalAlias||"Rollbar",u=window[s]&&"undefined"!=typeof window[s].shimId;!u&&a?o.wrapper.init(a):(window.Rollbar=o.wrapper,window.RollbarNotifier=i.Notifier),e.exports=o.wrapper},function(e,r,t){"use strict";function n(e,r,t){!t[4]&&window._rollbarWrappedError&&(t[4]=window._rollbarWrappedError,window._rollbarWrappedError=null),e.uncaughtError.apply(e,t),r&&r.apply(window,t)}function o(e,r){if(r.hasOwnProperty&&r.hasOwnProperty("addEventListener")){var t=r.addEventListener;r.addEventListener=function(r,n,o){t.call(this,r,e.wrap(n),o)};var n=r.removeEventListener;r.removeEventListener=function(e,r,t){n.call(this,e,r&&r._wrapped||r,t)}}}var i=t(3),a=t(8),s=i.Notifier;window._rollbarWrappedError=null;var u={};u.init=function(e,r){var t=new s(r);if(t.configure(e),e.captureUncaught){var i;r&&a.isType(r._rollbarOldOnError,"function")?i=r._rollbarOldOnError:window.onerror&&!window.onerror.belongsToShim&&(i=window.onerror),window.onerror=function(){var e=Array.prototype.slice.call(arguments,0);n(t,i,e)};var u,c,l=["EventTarget","Window","Node","ApplicationCache","AudioTrackList","ChannelMergerNode","CryptoOperation","EventSource","FileReader","HTMLUnknownElement","IDBDatabase","IDBRequest","IDBTransaction","KeyOperation","MediaController","MessagePort","ModalWindow","Notification","SVGElementInstance","Screen","TextTrack","TextTrackCue","TextTrackList","WebSocket","WebSocketWorker","Worker","XMLHttpRequest","XMLHttpRequestEventTarget","XMLHttpRequestUpload"];for(u=0;u<l.length;++u)c=l[u],window[c]&&window[c].prototype&&o(t,window[c].prototype)}return e.captureUnhandledRejections&&(r&&a.isType(r._unhandledRejectionHandler,"function")&&window.removeEventListener("unhandledrejection",r._unhandledRejectionHandler),t._unhandledRejectionHandler=function(e){var r=e.reason,n=e.promise,o=e.detail;!r&&o&&(r=o.reason,n=o.promise),t.unhandledRejection(r,n)},window.addEventListener("unhandledrejection",t._unhandledRejectionHandler)),window.Rollbar=t,s.processPayloads(),t},e.exports={wrapper:u,setupJSON:i.setupJSON}},function(e,r,t){"use strict";function n(e){E=e,w.setupJSON(e),v.setupJSON(e)}function o(e,r){return function(){var t=r||this;try{return e.apply(t,arguments)}catch(e){v.consoleError("[Rollbar]:",e)}}}function i(){h||(h=setTimeout(f,1e3))}function a(){return _}function s(e){_=_||this;var r="https://"+s.DEFAULT_ENDPOINT;this.options={enabled:!0,endpoint:r,environment:"production",scrubFields:g([],s.DEFAULT_SCRUB_FIELDS),checkIgnore:null,logLevel:s.DEFAULT_LOG_LEVEL,reportLevel:s.DEFAULT_REPORT_LEVEL,uncaughtErrorLevel:s.DEFAULT_UNCAUGHT_ERROR_LEVEL,payload:{}},this.lastError=null,this.plugins={},this.parentNotifier=e,e&&(e.hasOwnProperty("shimId")?e.notifier=this:this.configure(e.options))}function u(e){window._rollbarPayloadQueue.push(e),i()}function c(e){return o(function(){var r=this._getLogArgs(arguments);return this._log(e||r.level||this.options.logLevel||s.DEFAULT_LOG_LEVEL,r.message,r.err,r.custom,r.callback)})}function l(e,r){e||(e=r?E.stringify(r):"");var t={body:e};return r&&(t.extra=g(!0,{},r)),{message:t}}function p(e,r,t){var n=m.guessErrorClass(r.message),o=r.name||n[0],i=n[1],a={exception:{class:o,message:i}};if(e&&(a.exception.description=e||"uncaught exception"),r.stack){var s,u,c,p,f,d,h,w;for(a.frames=[],h=0;h<r.stack.length;++h)s=r.stack[h],u={filename:s.url?v.sanitizeUrl(s.url):"(unknown)",lineno:s.line||null,method:s.func&&"?"!==s.func?s.func:"[anonymous]",colno:s.column},c=p=f=null,d=s.context?s.context.length:0,d&&(w=Math.floor(d/2),p=s.context.slice(0,w),c=s.context[w],f=s.context.slice(w)),c&&(u.code=c),(p||f)&&(u.context={},p&&p.length&&(u.context.pre=p),f&&f.length&&(u.context.post=f)),s.args&&(u.args=s.args),a.frames.push(u);return a.frames.reverse(),t&&(a.extra=g(!0,{},t)),{trace:a}}return l(o+": "+i,t)}function f(){var e;try{for(;e=window._rollbarPayloadQueue.shift();)d(e)}finally{h=void 0}}function d(e){var r=e.endpointUrl,t=e.accessToken,n=e.payload,o=e.callback||function(){},i=(new Date).getTime();i-L>=6e4&&(L=i,R=0);var a=window._globalRollbarOptions.maxItems,c=window._globalRollbarOptions.itemsPerMinute,l=function(){return!n.ignoreRateLimit&&a>=1&&T>=a},p=function(){return!n.ignoreRateLimit&&c>=1&&R>=c};return l()?void o(new Error(a+" max items reached")):p()?void o(new Error(c+" items per minute reached")):(T++,R++,l()&&_._log(_.options.uncaughtErrorLevel,"maxItems has been hit. Ignoring errors for the remainder of the current page load.",null,{maxItems:a},null,!1,!0),n.ignoreRateLimit&&delete n.ignoreRateLimit,void y.post(r,t,n,function(r,t){return r?(r instanceof b&&(e.callback=function(){},setTimeout(function(){u(e)},s.RETRY_DELAY)),o(r)):o(null,t)}))}var h,g=t(4),m=t(5),v=t(8),w=t(11),y=w.XHR,b=w.ConnectionError,E=null;s.NOTIFIER_VERSION="1.9.4",s.DEFAULT_ENDPOINT="api.rollbar.com/api/1/",s.DEFAULT_SCRUB_FIELDS=["pw","pass","passwd","password","secret","confirm_password","confirmPassword","password_confirmation","passwordConfirmation","access_token","accessToken","secret_key","secretKey","secretToken"],s.DEFAULT_LOG_LEVEL="debug",s.DEFAULT_REPORT_LEVEL="debug",s.DEFAULT_UNCAUGHT_ERROR_LEVEL="error",s.DEFAULT_ITEMS_PER_MIN=60,s.DEFAULT_MAX_ITEMS=0,s.LEVELS={debug:0,info:1,warning:2,error:3,critical:4},s.RETRY_DELAY=1e4,window._rollbarPayloadQueue=window._rollbarPayloadQueue||[],window._globalRollbarOptions={startTime:(new Date).getTime(),maxItems:s.DEFAULT_MAX_ITEMS,itemsPerMinute:s.DEFAULT_ITEMS_PER_MIN};var _,x=s.prototype;x._getLogArgs=function(e){for(var r,t,n,i,a,u,c=this.options.logLevel||s.DEFAULT_LOG_LEVEL,l=[],p=0;p<e.length;++p)u=e[p],a=v.typeName(u),"string"===a?r?l.push(u):r=u:"function"===a?i=o(u,this):"date"===a?l.push(u):"error"===a||u instanceof Error||"undefined"!=typeof DOMException&&u instanceof DOMException?t?l.push(u):t=u:"object"!==a&&"array"!==a||(n?l.push(u):n=u);return l.length&&(n=n||{},n.extraArgs=l),{level:c,message:r,err:t,custom:n,callback:i}},x._route=function(e){var r=this.options.endpoint,t=/\/$/.test(r),n=/^\//.test(e);return t&&n?e=e.substring(1):t||n||(e="/"+e),r+e},x._processShimQueue=function(e){for(var r,t,n,o,i,a,u,c={};t=e.shift();)r=t.shim,n=t.method,o=t.args,i=r.parentShim,u=c[r.shimId],u||(i?(a=c[i.shimId],u=new s(a)):u=this,c[r.shimId]=u),u[n]&&v.isType(u[n],"function")&&u[n].apply(u,o)},x._buildPayload=function(e,r,t,n,o){var i=this.options.accessToken,a=this.options.environment,u=g(!0,{},this.options.payload),c=v.uuid4();if(void 0===s.LEVELS[r])throw new Error("Invalid level");if(!t&&!n&&!o)throw new Error("No message, stack info or custom data");var l={environment:a,endpoint:this.options.endpoint,uuid:c,level:r,platform:"browser",framework:"browser-js",language:"javascript",body:this._buildBody(t,n,o),request:{url:window.location.href,query_string:window.location.search,user_ip:"$remote_ip"},client:{runtime_ms:e.getTime()-window._globalRollbarOptions.startTime,timestamp:Math.round(e.getTime()/1e3),javascript:{browser:window.navigator.userAgent,language:window.navigator.language,cookie_enabled:window.navigator.cookieEnabled,screen:{width:window.screen.width,height:window.screen.height},plugins:this._getBrowserPlugins()}},server:{},notifier:{name:"rollbar-browser-js",version:s.NOTIFIER_VERSION}};u.body&&delete u.body;var p={access_token:i,data:g(!0,l,u)};return this._scrub(p.data),p},x._buildBody=function(e,r,t){var n;return n=r?p(e,r,t):l(e,t)},x._getBrowserPlugins=function(){if(!this._browserPlugins){var e,r,t=window.navigator.plugins||[],n=t.length,o=[];for(r=0;r<n;++r)e=t[r],o.push({name:e.name,description:e.description});this._browserPlugins=o}return this._browserPlugins},x._scrub=function(e){function r(e,r,t,n,o,i){return r+v.redact(i)}function t(e){var t;if(v.isType(e,"string"))for(t=0;t<s.length;++t)e=e.replace(s[t],r);return e}function n(e,r){var t;for(t=0;t<a.length;++t)if(a[t].test(e)){r=v.redact(r);break}return r}function o(e,r){var o=n(e,r);return o===r?t(o):o}var i=this.options.scrubFields,a=this._getScrubFieldRegexs(i),s=this._getScrubQueryParamRegexs(i);return v.traverse(e,o),e},x._getScrubFieldRegexs=function(e){for(var r,t=[],n=0;n<e.length;++n)r="\\[?(%5[bB])?"+e[n]+"\\[?(%5[bB])?\\]?(%5[dD])?",t.push(new RegExp(r,"i"));return t},x._getScrubQueryParamRegexs=function(e){for(var r,t=[],n=0;n<e.length;++n)r="\\[?(%5[bB])?"+e[n]+"\\[?(%5[bB])?\\]?(%5[dD])?",t.push(new RegExp("("+r+"=)([^&\\n]+)","igm"));return t},x._urlIsWhitelisted=function(e){var r,t,n,o,i,a,s,u,c,l;try{if(r=this.options.hostWhiteList,t=e&&e.data&&e.data.body&&e.data.body.trace,!r||0===r.length)return!0;if(!t)return!0;for(s=r.length,i=t.frames.length,c=0;c<i;c++){if(n=t.frames[c],o=n.filename,!v.isType(o,"string"))return!0;for(l=0;l<s;l++)if(a=r[l],u=new RegExp(a),u.test(o))return!0}}catch(e){return this.configure({hostWhiteList:null}),v.consoleError("[Rollbar]: Error while reading your configuration's hostWhiteList option. Removing custom hostWhiteList.",e),!0}return!1},x._messageIsIgnored=function(e){var r,t,n,o,i,a,s,u,c;try{if(i=!1,n=this.options.ignoredMessages,!n||0===n.length)return!1;if(s=e&&e.data&&e.data.body,u=s&&s.trace&&s.trace.exception&&s.trace.exception.message,c=s&&s.message&&s.message.body,r=u||c,!r)return!1;for(o=n.length,t=0;t<o&&(a=new RegExp(n[t],"gi"),!(i=a.test(r)));t++);}catch(e){this.configure({ignoredMessages:null}),v.consoleError("[Rollbar]: Error while reading your configuration's ignoredMessages option. Removing custom ignoredMessages.")}return i},x._enqueuePayload=function(e,r,t,n){var o={callback:n,accessToken:this.options.accessToken,endpointUrl:this._route("item/"),payload:e},i=function(){if(n){var e="This item was not sent to Rollbar because it was ignored. This can happen if a custom checkIgnore() function was used or if the item's level was less than the notifier' reportLevel. See https://rollbar.com/docs/notifier/rollbar.js/configuration for more details.";n(null,{err:0,result:{id:null,uuid:null,message:e}})}};if(this._internalCheckIgnore(r,t,e))return void i();try{if(v.isType(this.options.checkIgnore,"function")&&this.options.checkIgnore(r,t,e))return void i()}catch(e){this.configure({checkIgnore:null}),v.consoleError("[Rollbar]: Error while calling custom checkIgnore() function. Removing custom checkIgnore().",e)}if(this._urlIsWhitelisted(e)&&!this._messageIsIgnored(e)){if(this.options.verbose){if(e.data&&e.data.body&&e.data.body.trace){var a=e.data.body.trace,s=a.exception.message;v.consoleError("[Rollbar]: ",s)}v.consoleInfo("[Rollbar]: ",o)}v.isType(this.options.logFunction,"function")&&this.options.logFunction(o);try{v.isType(this.options.transform,"function")&&this.options.transform(e)}catch(e){this.configure({transform:null}),v.consoleError("[Rollbar]: Error while calling custom transform() function. Removing custom transform().",e)}this.options.enabled&&u(o)}},x._internalCheckIgnore=function(e,r,t){var n=r[0],o=s.LEVELS[n]||0,i=s.LEVELS[this.options.reportLevel]||0;if(o<i)return!0;var a=this.options?this.options.plugins:{};if(a&&a.jquery&&a.jquery.ignoreAjaxErrors)try{return!!t.data.body.message.extra.isAjax}catch(e){return!1}return!1},x._log=function(e,r,t,n,o,i,a){var s=null;if(t)try{if(s=t._savedStackTrace?t._savedStackTrace:m.parse(t),t===this.lastError)return;this.lastError=t}catch(e){v.consoleError("[Rollbar]: Error while parsing the error object.",e),r=t.message||t.description||r||String(t),t=null}var u=this._buildPayload(new Date,e,r,s,n);return a&&(u.ignoreRateLimit=!0),this._enqueuePayload(u,!!i,[e,r,t,n],o),{uuid:u.data.uuid}},x.log=c(),x.debug=c("debug"),x.info=c("info"),x.warn=c("warning"),x.warning=c("warning"),x.error=c("error"),x.critical=c("critical"),x.uncaughtError=o(function(e,r,t,n,o,i){if(i=i||null,o&&v.isType(o,"error"))return void this._log(this.options.uncaughtErrorLevel,e,o,i,null,!0);if(r&&v.isType(r,"error"))return void this._log(this.options.uncaughtErrorLevel,e,r,i,null,!0);var a={url:r||"",line:t};a.func=m.guessFunctionName(a.url,a.line),a.context=m.gatherContext(a.url,a.line);var s={mode:"onerror",message:o?String(o):e||"uncaught exception",url:document.location.href,stack:[a],useragent:navigator.userAgent},u=this._buildPayload(new Date,this.options.uncaughtErrorLevel,e,s,i);this._enqueuePayload(u,!0,[this.options.uncaughtErrorLevel,e,r,t,n,o])}),x.unhandledRejection=o(function(e,r){var t,n;if(e?(t=e.message||String(e),n=e._rollbarContext):t="unhandled rejection was null or undefined!",n=n||r._rollbarContext||null,e&&v.isType(e,"error"))return void this._log(this.options.uncaughtErrorLevel,t,e,n,null,!0);var o={url:"",line:0};o.func=m.guessFunctionName(o.url,o.line),o.context=m.gatherContext(o.url,o.line);var i={mode:"unhandledrejection",message:t,url:document.location.href,stack:[o],useragent:navigator.userAgent},a=this._buildPayload(new Date,this.options.uncaughtErrorLevel,t,i,n);this._enqueuePayload(a,!0,[this.options.uncaughtErrorLevel,t,o.url,o.line,0,e,r])}),x.global=o(function(e){e=e||{};var r={startTime:e.startTime,maxItems:e.maxItems,itemsPerMinute:e.itemsPerMinute};g(!0,window._globalRollbarOptions,r),void 0!==e.maxItems&&(T=0),void 0!==e.itemsPerMinute&&(R=0)}),x.configure=o(function(e,r){var t=g(!0,{},e);g(!r,this.options,t),this.global(t)}),x.scope=o(function(e){var r=new s(this);return g(!0,r.options.payload,e),r}),x.wrap=function(e,r){try{var t;if(t=v.isType(r,"function")?r:function(){return r||{}},!v.isType(e,"function"))return e;if(e._isWrap)return e;if(!e._wrapped){e._wrapped=function(){try{return e.apply(this,arguments)}catch(r){throw"string"==typeof r&&(r=new String(r)),r.stack||(r._savedStackTrace=m.parse(r)),r._rollbarContext=t()||{},r._rollbarContext._wrappedSource=e.toString(),window._rollbarWrappedError=r,r}},e._wrapped._isWrap=!0;for(var n in e)e.hasOwnProperty(n)&&(e._wrapped[n]=e[n])}return e._wrapped}catch(r){return e}},x.loadFull=function(){v.consoleError("[Rollbar]: Unexpected Rollbar.loadFull() called on a Notifier instance")},s.processPayloads=function(e){return e?void f():void i()};var L=(new Date).getTime(),T=0,R=0;e.exports={Notifier:s,setupJSON:n,topLevelNotifier:a}},function(e,r){"use strict";var t=Object.prototype.hasOwnProperty,n=Object.prototype.toString,o=function(e){return"function"==typeof Array.isArray?Array.isArray(e):"[object Array]"===n.call(e)},i=function(e){if(!e||"[object Object]"!==n.call(e))return!1;var r=t.call(e,"constructor"),o=e.constructor&&e.constructor.prototype&&t.call(e.constructor.prototype,"isPrototypeOf");if(e.constructor&&!r&&!o)return!1;var i;for(i in e);return"undefined"==typeof i||t.call(e,i)};e.exports=function e(){var r,t,n,a,s,u,c=arguments[0],l=1,p=arguments.length,f=!1;for("boolean"==typeof c?(f=c,c=arguments[1]||{},l=2):("object"!=typeof c&&"function"!=typeof c||null==c)&&(c={});l<p;++l)if(r=arguments[l],null!=r)for(t in r)n=c[t],a=r[t],c!==a&&(f&&a&&(i(a)||(s=o(a)))?(s?(s=!1,u=n&&o(n)?n:[]):u=n&&i(n)?n:{},c[t]=e(f,u,a)):"undefined"!=typeof a&&(c[t]=a));return c}},function(e,r,t){"use strict";function n(){return l}function o(){return null}function i(e){var r={};return r._stackFrame=e,r.url=e.fileName,r.line=e.lineNumber,r.func=e.functionName,r.column=e.columnNumber,r.args=e.args,r.context=o(r.url,r.line),r}function a(e){function r(){var r=[];try{r=c.parse(e)}catch(e){r=[]}for(var t=[],n=0;n<r.length;n++)t.push(new i(r[n]));return t}return{stack:r(),message:e.message,name:e.name}}function s(e){return new a(e)}function u(e){if(!e)return["Unknown error. There was no error message to display.",""];var r=e.match(p),t="(unknown)";return r&&(t=r[r.length-1],e=e.replace((r[r.length-2]||"")+t+":",""),e=e.replace(/(^[\s]+|[\s]+$)/g,"")),[t,e]}var c=t(6),l="?",p=new RegExp("^(([a-zA-Z0-9-_$ ]*): *)?(Uncaught )?([a-zA-Z0-9-_$ ]*): ");e.exports={guessFunctionName:n,guessErrorClass:u,gatherContext:o,parse:s,Stack:a,Frame:i}},function(e,r,t){var n,o,i;!function(a,s){"use strict";o=[t(7)],n=s,i="function"==typeof n?n.apply(r,o):n,!(void 0!==i&&(e.exports=i))}(this,function(e){"use strict";function r(e,r,t){if("function"==typeof Array.prototype.map)return e.map(r,t);for(var n=new Array(e.length),o=0;o<e.length;o++)n[o]=r.call(t,e[o]);return n}function t(e,r,t){if("function"==typeof Array.prototype.filter)return e.filter(r,t);for(var n=[],o=0;o<e.length;o++)r.call(t,e[o])&&n.push(e[o]);return n}var n=/(^|@)\S+\:\d+/,o=/^\s*at .*(\S+\:\d+|\(native\))/m,i=/^(eval@)?(\[native code\])?$/;return{parse:function(e){if("undefined"!=typeof e.stacktrace||"undefined"!=typeof e["opera#sourceloc"])return this.parseOpera(e);if(e.stack&&e.stack.match(o))return this.parseV8OrIE(e);if(e.stack)return this.parseFFOrSafari(e);throw new Error("Cannot parse given Error object")},extractLocation:function(e){if(e.indexOf(":")===-1)return[e];var r=e.replace(/[\(\)\s]/g,"").split(":"),t=r.pop(),n=r[r.length-1];if(!isNaN(parseFloat(n))&&isFinite(n)){var o=r.pop();return[r.join(":"),o,t]}return[r.join(":"),t,void 0]},parseV8OrIE:function(n){var i=t(n.stack.split("\n"),function(e){return!!e.match(o)},this);return r(i,function(r){r.indexOf("(eval ")>-1&&(r=r.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var t=r.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),n=this.extractLocation(t.pop()),o=t.join(" ")||void 0,i="eval"===n[0]?void 0:n[0];return new e(o,void 0,i,n[1],n[2],r)},this)},parseFFOrSafari:function(n){var o=t(n.stack.split("\n"),function(e){return!e.match(i)},this);return r(o,function(r){if(r.indexOf(" > eval")>-1&&(r=r.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),r.indexOf("@")===-1&&r.indexOf(":")===-1)return new e(r);var t=r.split("@"),n=this.extractLocation(t.pop()),o=t.shift()||void 0;return new e(o,void 0,n[0],n[1],n[2],r)},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(r){for(var t=/Line (\d+).*script (?:in )?(\S+)/i,n=r.message.split("\n"),o=[],i=2,a=n.length;i<a;i+=2){var s=t.exec(n[i]);s&&o.push(new e(void 0,void 0,s[2],s[1],void 0,n[i]))}return o},parseOpera10:function(r){for(var t=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,n=r.stacktrace.split("\n"),o=[],i=0,a=n.length;i<a;i+=2){var s=t.exec(n[i]);s&&o.push(new e(s[3]||void 0,void 0,s[2],s[1],void 0,n[i]))}return o},parseOpera11:function(o){var i=t(o.stack.split("\n"),function(e){return!!e.match(n)&&!e.match(/^Error created at/)},this);return r(i,function(r){var t,n=r.split("@"),o=this.extractLocation(n.pop()),i=n.shift()||"",a=i.replace(/<anonymous function(: (\w+))?>/,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(t=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===t||"[arguments not available]"===t?void 0:t.split(",");return new e(a,s,o[0],o[1],o[2],r)},this)}}})},function(e,r,t){var n,o,i;!function(t,a){"use strict";o=[],n=a,i="function"==typeof n?n.apply(r,o):n,!(void 0!==i&&(e.exports=i))}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function r(e,r,t,n,o,i){void 0!==e&&this.setFunctionName(e),void 0!==r&&this.setArgs(r),void 0!==t&&this.setFileName(t),void 0!==n&&this.setLineNumber(n),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return r.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(r){if(!e(r))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(r)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(r){if(!e(r))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(r)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var r=this.getFunctionName()||"{anonymous}",t="("+(this.getArgs()||[]).join(",")+")",n=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return r+t+n+o+i}},r})},function(e,r,t){"use strict";function n(e){v=e}function o(e){return{}.toString.call(e).match(/\s([a-zA-Z]+)/)[1].toLowerCase()}function i(e,r){return o(e)===r}function a(e){if(!i(e,"string"))throw new Error("received invalid input");for(var r=w,t=r.parser[r.strictMode?"strict":"loose"].exec(e),n={},o=14;o--;)n[r.key[o]]=t[o]||"";return n[r.q.name]={},n[r.key[12]].replace(r.q.parser,function(e,t,o){t&&(n[r.q.name][t]=o)}),n}function s(e){var r=a(e);return""===r.anchor&&(r.source=r.source.replace("#","")),e=r.source.replace("?"+r.query,"")}function u(e,r){var t,n,o,a=i(e,"object"),s=i(e,"array"),c=[];if(a)for(t in e)e.hasOwnProperty(t)&&c.push(t);else if(s)for(o=0;o<e.length;++o)c.push(o);for(o=0;o<c.length;++o)t=c[o],n=e[t],a=i(n,"object"),s=i(n,"array"),a||s?e[t]=u(n,r):e[t]=r(t,n);return e}function c(e){return e=String(e),new Array(e.length+1).join("*")}function l(){var e=(new Date).getTime(),r="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(r){var t=(e+16*Math.random())%16|0;return e=Math.floor(e/16),("x"===r?t:7&t|8).toString(16)});return r}function p(e){return"function"!=typeof Object.create?function(e){var r=function(){};return function(e){if(null!==e&&e!==Object(e))throw TypeError("Argument must be an object, or null");r.prototype=e||{};var t=new r;return r.prototype=null,null===e&&(t.__proto__=null),t}}()(e):Object.create(e)}function f(){for(var e=[],r=0;r<arguments.length;r++){var t=arguments[r];"object"==typeof t?(t=v.stringify(t),t.length>500&&(t=t.substr(0,500)+"...")):"undefined"==typeof t&&(t="undefined"),e.push(t)}return e.join(" ")}function d(){m.ieVersion()<=8?console.error(f.apply(null,arguments)):console.error.apply(null,arguments)}function h(){m.ieVersion()<=8?console.info(f.apply(null,arguments)):console.info.apply(null,arguments)}function g(){m.ieVersion()<=8?console.log(f.apply(null,arguments)):console.log.apply(null,arguments)}t(9);var m=t(10),v=null,w={strictMode:!1,key:["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],q:{name:"queryKey",parser:/(?:^|&)([^&=]*)=?([^&]*)/g},parser:{strict:/^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,loose:/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/}},y={setupJSON:n,isType:i,parseUri:a,parseUriOptions:w,redact:c,sanitizeUrl:s,traverse:u,typeName:o,uuid4:l,objectCreate:p,consoleError:d,consoleInfo:h,consoleLog:g};e.exports=y},function(e,r){!function(e){"use strict";e.console||(e.console={});for(var r,t,n=e.console,o=function(){},i=["memory"],a="assert,clear,count,debug,dir,dirxml,error,exception,group,groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn".split(",");r=i.pop();)n[r]||(n[r]={});for(;t=a.pop();)n[t]||(n[t]=o)}("undefined"==typeof window?this:window)},function(e,r){"use strict";function t(){for(var e,r=3,t=document.createElement("div"),n=t.getElementsByTagName("i");t.innerHTML="<!--[if gt IE "+ ++r+"]><i></i><![endif]-->",n[0];);return r>4?r:e}var n={ieVersion:t};e.exports=n},function(e,r,t){"use strict";function n(e){a=e}function o(e){this.name="Connection Error",this.message=e,this.stack=(new Error).stack}var i=t(8),a=null;o.prototype=i.objectCreate(Error.prototype),o.prototype.constructor=o;var s={XMLHttpFactories:[function(){return new XMLHttpRequest},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml3.XMLHTTP")},function(){return new ActiveXObject("Microsoft.XMLHTTP")}],createXMLHTTPObject:function(){var e,r=!1,t=s.XMLHttpFactories,n=t.length;for(e=0;e<n;e++)try{r=t[e]();break}catch(e){}return r},post:function(e,r,t,n){if(!i.isType(t,"object"))throw new Error("Expected an object to POST");t=a.stringify(t),n=n||function(){};var u=s.createXMLHTTPObject();if(u)try{try{var c=function(){try{if(c&&4===u.readyState){c=void 0;var e=a.parse(u.responseText);200===u.status?n(null,e):i.isType(u.status,"number")&&u.status>=400&&u.status<600?(403==u.status&&i.consoleError("[Rollbar]:"+e.message),n(new Error(String(u.status)))):n(new o("XHR response had no status code (likely connection failure)"))}}catch(e){var r;r=e&&e.stack?e:new Error(e),n(r)}};u.open("POST",e,!0),u.setRequestHeader&&(u.setRequestHeader("Content-Type","application/json"),u.setRequestHeader("X-Rollbar-Access-Token",r)),u.onreadystatechange=c,u.send(t)}catch(r){if("undefined"!=typeof XDomainRequest){"http:"===window.location.href.substring(0,5)&&"https"===e.substring(0,5)&&(e="http"+e.substring(5));var l=function(){n(new o("Request timed out"))},p=function(){n(new Error("Error during request"))},f=function(){n(null,a.parse(u.responseText))};u=new XDomainRequest,u.onprogress=function(){},u.ontimeout=l,u.onerror=p,u.onload=f,u.open("POST",e,!0),u.send(t)}}}catch(e){n(e)}}};e.exports={XHR:s,setupJSON:n,ConnectionError:o}}])});
diff --git a/packages/website/ts/blockchain.ts b/packages/website/ts/blockchain.ts
index fde134b18..88461f8a9 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';
@@ -84,11 +83,11 @@ export class Blockchain {
public networkId: number;
public nodeVersion: string;
private _contractWrappers: ContractWrappers;
- private _dispatcher: Dispatcher;
+ private readonly _dispatcher: Dispatcher;
private _web3Wrapper?: Web3Wrapper;
private _blockchainWatcher?: BlockchainWatcher;
private _injectedProviderObservable?: InjectedProviderObservable;
- private _injectedProviderUpdateHandler: (update: InjectedProviderUpdate) => Promise<void>;
+ private readonly _injectedProviderUpdateHandler: (update: InjectedProviderUpdate) => Promise<void>;
private _userAddressIfExists: string;
private _ledgerSubprovider: LedgerSubprovider;
private _defaultGasPrice: BigNumber;
@@ -126,7 +125,11 @@ export class Blockchain {
let networkIdIfExists: number;
if (!_.isUndefined(injectedWeb3IfExists)) {
try {
- networkIdIfExists = _.parseInt(await promisify<string>(injectedWeb3IfExists.version.getNetwork)());
+ networkIdIfExists = _.parseInt(
+ await promisify<string>(
+ injectedWeb3IfExists.version.getNetwork.bind(injectedWeb3IfExists.version),
+ )(),
+ );
} catch (err) {
// Ignore error and proceed with networkId undefined
}
@@ -148,7 +151,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 +160,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 +184,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];
}
@@ -537,7 +534,9 @@ export class Blockchain {
}
public destroy(): void {
this._blockchainWatcher.destroy();
- this._injectedProviderObservable.unsubscribe(this._injectedProviderUpdateHandler);
+ if (this._injectedProviderObservable) {
+ this._injectedProviderObservable.unsubscribe(this._injectedProviderUpdateHandler);
+ }
this._stopWatchingExchangeLogFillEvents();
this._stopWatchingGasPrice();
}
@@ -569,7 +568,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)) {
@@ -680,8 +679,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;
@@ -767,9 +765,13 @@ export class Blockchain {
this._contractWrappers.exchange.unsubscribeAll();
}
private async _getTokenRegistryTokensByAddressAsync(): Promise<TokenByAddress> {
- utils.assert(!_.isUndefined(this._contractWrappers), 'ContractWrappers must be instantiated.');
- const tokenRegistryTokens = await this._contractWrappers.tokenRegistry.getTokensAsync();
-
+ let tokenRegistryTokens;
+ if (this.networkId === constants.NETWORK_ID_MAINNET) {
+ tokenRegistryTokens = await backendClient.getTokenInfosAsync();
+ } else {
+ utils.assert(!_.isUndefined(this._contractWrappers), 'ContractWrappers must be instantiated.');
+ tokenRegistryTokens = await this._contractWrappers.tokenRegistry.getTokensAsync();
+ }
const tokenByAddress: TokenByAddress = {};
_.each(tokenRegistryTokens, (t: ZeroExToken) => {
// HACK: For now we have a hard-coded list of iconUrls for the dummyTokens
@@ -789,7 +791,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();
@@ -909,7 +911,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/blockchain_watcher.ts b/packages/website/ts/blockchain_watcher.ts
index 4b23aa98a..39ed8b08b 100644
--- a/packages/website/ts/blockchain_watcher.ts
+++ b/packages/website/ts/blockchain_watcher.ts
@@ -4,9 +4,9 @@ import * as _ from 'lodash';
import { Dispatcher } from 'ts/redux/dispatcher';
export class BlockchainWatcher {
- private _dispatcher: Dispatcher;
- private _web3Wrapper: Web3Wrapper;
- private _shouldPollUserAddress: boolean;
+ private readonly _dispatcher: Dispatcher;
+ private readonly _web3Wrapper: Web3Wrapper;
+ private readonly _shouldPollUserAddress: boolean;
private _watchBalanceIntervalId: NodeJS.Timer;
private _prevUserEtherBalanceInWei?: BigNumber;
private _prevUserAddressIfExists: string;
diff --git a/packages/website/ts/components/dialogs/u2f_not_supported_dialog.tsx b/packages/website/ts/components/dialogs/u2f_not_supported_dialog.tsx
index ce86df856..3ebab03ef 100644
--- a/packages/website/ts/components/dialogs/u2f_not_supported_dialog.tsx
+++ b/packages/website/ts/components/dialogs/u2f_not_supported_dialog.tsx
@@ -14,9 +14,9 @@ export const U2fNotSupportedDialog = (props: U2fNotSupportedDialogProps) => {
<Dialog
title="U2F Not Supported"
titleStyle={{ fontWeight: 100 }}
- actions={[<FlatButton key="u2fNo" label="Ok" onTouchTap={props.onToggleDialog.bind(this)} />]}
+ actions={[<FlatButton key="u2fNo" label="Ok" onTouchTap={props.onToggleDialog} />]}
open={props.isOpen}
- onRequestClose={props.onToggleDialog.bind(this)}
+ onRequestClose={props.onToggleDialog}
autoScrollBodyContent={true}
>
<div className="pt2" style={{ color: colors.grey700 }}>
diff --git a/packages/website/ts/components/eth_weth_conversion_button.tsx b/packages/website/ts/components/eth_weth_conversion_button.tsx
index 4b91a2ebd..b0091a1c1 100644
--- a/packages/website/ts/components/eth_weth_conversion_button.tsx
+++ b/packages/website/ts/components/eth_weth_conversion_button.tsx
@@ -37,7 +37,7 @@ export class EthWethConversionButton extends React.Component<
> {
public static defaultProps: Partial<EthWethConversionButtonProps> = {
isDisabled: false,
- onConversionSuccessful: _.noop,
+ onConversionSuccessful: _.noop.bind(_),
};
public constructor(props: EthWethConversionButtonProps) {
super(props);
@@ -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/fill_warning_dialog.tsx b/packages/website/ts/components/fill_warning_dialog.tsx
index 83095b1d3..45c492221 100644
--- a/packages/website/ts/components/fill_warning_dialog.tsx
+++ b/packages/website/ts/components/fill_warning_dialog.tsx
@@ -18,16 +18,16 @@ export const FillWarningDialog = (props: FillWarningDialogProps) => {
<FlatButton
key="fillWarningCancel"
label="Cancel"
- onTouchTap={props.onToggleDialog.bind(this, didCancel)}
+ onTouchTap={() => props.onToggleDialog(didCancel)} // tslint:disable-line:jsx-no-lambda
/>,
<FlatButton
key="fillWarningContinue"
label="Fill Order"
- onTouchTap={props.onToggleDialog.bind(this, !didCancel)}
+ onTouchTap={() => props.onToggleDialog(!didCancel)} // tslint:disable-line:jsx-no-lambda
/>,
]}
open={props.isOpen}
- onRequestClose={props.onToggleDialog.bind(this)}
+ onRequestClose={() => props.onToggleDialog(didCancel)} // tslint:disable-line:jsx-no-lambda
autoScrollBodyContent={true}
modal={true}
>
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/asset_picker.tsx b/packages/website/ts/components/generate_order/asset_picker.tsx
index 5eada37b6..2dca3483f 100644
--- a/packages/website/ts/components/generate_order/asset_picker.tsx
+++ b/packages/website/ts/components/generate_order/asset_picker.tsx
@@ -46,7 +46,7 @@ export class AssetPicker extends React.Component<AssetPickerProps, AssetPickerSt
public static defaultProps: Partial<AssetPickerProps> = {
tokenVisibility: TokenVisibility.ALL,
};
- private _dialogConfigsByAssetView: { [assetView: string]: DialogConfigs };
+ private readonly _dialogConfigsByAssetView: { [assetView: string]: DialogConfigs };
constructor(props: AssetPickerProps) {
super(props);
this.state = {
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..05dce134a 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';
@@ -57,7 +57,7 @@ const styles: Styles = {
export class AllowanceToggle extends React.Component<AllowanceToggleProps, AllowanceToggleState> {
public static defaultProps = {
- onErrorOccurred: _.noop,
+ onErrorOccurred: _.noop.bind(_),
isDisabled: false,
};
constructor(props: AllowanceToggleProps) {
@@ -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/inputs/balance_bounded_input.tsx b/packages/website/ts/components/inputs/balance_bounded_input.tsx
index f23beb436..eb01e3ea6 100644
--- a/packages/website/ts/components/inputs/balance_bounded_input.tsx
+++ b/packages/website/ts/components/inputs/balance_bounded_input.tsx
@@ -35,7 +35,7 @@ export class BalanceBoundedInput extends React.Component<BalanceBoundedInputProp
isDisabled: false,
shouldShowErrs: true,
hintText: 'amount',
- onErrorMsgChange: _.noop,
+ onErrorMsgChange: _.noop.bind(_),
shouldShowUnderline: true,
};
constructor(props: BalanceBoundedInputProps) {
@@ -125,7 +125,7 @@ export class BalanceBoundedInput extends React.Component<BalanceBoundedInputProp
const errMsg = _.isUndefined(this.props.validate) ? undefined : this.props.validate(amount);
return errMsg;
}
- private _setAmountState(amount: string, balance: BigNumber, callback: () => void = _.noop): void {
+ private _setAmountState(amount: string, balance: BigNumber, callback: () => void = _.noop.bind(_)): void {
const errorMsg = this._validate(amount, balance);
this.props.onErrorMsgChange(errorMsg);
this.setState(
diff --git a/packages/website/ts/components/inputs/expiration_input.tsx b/packages/website/ts/components/inputs/expiration_input.tsx
index 79dd2f568..5417ce715 100644
--- a/packages/website/ts/components/inputs/expiration_input.tsx
+++ b/packages/website/ts/components/inputs/expiration_input.tsx
@@ -17,7 +17,7 @@ interface ExpirationInputState {
}
export class ExpirationInput extends React.Component<ExpirationInputProps, ExpirationInputState> {
- private _earliestPickableMoment: moment.Moment;
+ private readonly _earliestPickableMoment: moment.Moment;
constructor(props: ExpirationInputProps) {
super(props);
// Set the earliest pickable date to today at 00:00, so users can only pick the current or later dates
diff --git a/packages/website/ts/components/legacy_portal/legacy_portal.tsx b/packages/website/ts/components/legacy_portal/legacy_portal.tsx
deleted file mode 100644
index c85d97207..000000000
--- a/packages/website/ts/components/legacy_portal/legacy_portal.tsx
+++ /dev/null
@@ -1,339 +0,0 @@
-import { colors } from '@0xproject/react-shared';
-import { BigNumber } from '@0xproject/utils';
-import * as _ from 'lodash';
-import CircularProgress from 'material-ui/CircularProgress';
-import Paper from 'material-ui/Paper';
-import * as React from 'react';
-import * as DocumentTitle from 'react-document-title';
-import { Route, Switch } from 'react-router-dom';
-import { Blockchain } from 'ts/blockchain';
-import { BlockchainErrDialog } from 'ts/components/dialogs/blockchain_err_dialog';
-import { LedgerConfigDialog } from 'ts/components/dialogs/ledger_config_dialog';
-import { PortalDisclaimerDialog } from 'ts/components/dialogs/portal_disclaimer_dialog';
-import { WrappedEthSectionNoticeDialog } from 'ts/components/dialogs/wrapped_eth_section_notice_dialog';
-import { EthWrappers } from 'ts/components/eth_wrappers';
-import { FillOrder } from 'ts/components/fill_order';
-import { Footer } from 'ts/components/footer';
-import { LegacyPortalMenu } from 'ts/components/legacy_portal/legacy_portal_menu';
-import { TokenBalances } from 'ts/components/token_balances';
-import { TopBar } from 'ts/components/top_bar/top_bar';
-import { TradeHistory } from 'ts/components/trade_history/trade_history';
-import { FlashMessage } from 'ts/components/ui/flash_message';
-import { GenerateOrderForm } from 'ts/containers/generate_order_form';
-import { localStorage } from 'ts/local_storage/local_storage';
-import { Dispatcher } from 'ts/redux/dispatcher';
-import { BlockchainErrs, HashData, Order, ProviderType, ScreenWidths, TokenByAddress, WebsitePaths } from 'ts/types';
-import { constants } from 'ts/utils/constants';
-import { orderParser } from 'ts/utils/order_parser';
-import { Translate } from 'ts/utils/translate';
-import { utils } from 'ts/utils/utils';
-
-const THROTTLE_TIMEOUT = 100;
-
-export interface LegacyPortalProps {
- blockchainErr: BlockchainErrs;
- blockchainIsLoaded: boolean;
- dispatcher: Dispatcher;
- hashData: HashData;
- injectedProviderName: string;
- networkId: number;
- nodeVersion: string;
- orderFillAmount: BigNumber;
- providerType: ProviderType;
- screenWidth: ScreenWidths;
- tokenByAddress: TokenByAddress;
- userEtherBalanceInWei?: BigNumber;
- userAddress: string;
- shouldBlockchainErrDialogBeOpen: boolean;
- userSuppliedOrderCache: Order;
- location: Location;
- flashMessage?: string | React.ReactNode;
- lastForceTokenStateRefetch: number;
- translate: Translate;
-}
-
-interface LegacyPortalState {
- prevNetworkId: number;
- prevNodeVersion: string;
- prevUserAddress: string;
- prevPathname: string;
- isDisclaimerDialogOpen: boolean;
- isWethNoticeDialogOpen: boolean;
- isLedgerDialogOpen: boolean;
-}
-
-export class LegacyPortal extends React.Component<LegacyPortalProps, LegacyPortalState> {
- private _blockchain: Blockchain;
- private _sharedOrderIfExists: Order;
- private _throttledScreenWidthUpdate: () => void;
- public static hasAlreadyDismissedWethNotice(): boolean {
- const didDismissWethNotice = localStorage.getItemIfExists(constants.LOCAL_STORAGE_KEY_DISMISS_WETH_NOTICE);
- const hasAlreadyDismissedWethNotice = !_.isUndefined(didDismissWethNotice) && !_.isEmpty(didDismissWethNotice);
- return hasAlreadyDismissedWethNotice;
- }
- constructor(props: LegacyPortalProps) {
- super(props);
- this._sharedOrderIfExists = orderParser.parse(window.location.search);
- this._throttledScreenWidthUpdate = _.throttle(this._updateScreenWidth.bind(this), THROTTLE_TIMEOUT);
-
- const isViewingBalances = _.includes(props.location.pathname, `${WebsitePaths.Portal}/balances`);
- const hasAlreadyDismissedWethNotice = LegacyPortal.hasAlreadyDismissedWethNotice();
-
- const didAcceptPortalDisclaimer = localStorage.getItemIfExists(constants.LOCAL_STORAGE_KEY_ACCEPT_DISCLAIMER);
- const hasAcceptedDisclaimer =
- !_.isUndefined(didAcceptPortalDisclaimer) && !_.isEmpty(didAcceptPortalDisclaimer);
- this.state = {
- prevNetworkId: this.props.networkId,
- prevNodeVersion: this.props.nodeVersion,
- prevUserAddress: this.props.userAddress,
- prevPathname: this.props.location.pathname,
- isDisclaimerDialogOpen: !hasAcceptedDisclaimer,
- isWethNoticeDialogOpen: !hasAlreadyDismissedWethNotice && isViewingBalances,
- isLedgerDialogOpen: false,
- };
- }
- public componentDidMount(): void {
- window.addEventListener('resize', this._throttledScreenWidthUpdate);
- window.scrollTo(0, 0);
- }
- public componentWillMount(): void {
- this._blockchain = new Blockchain(this.props.dispatcher);
- }
- public componentWillUnmount(): void {
- this._blockchain.destroy();
- window.removeEventListener('resize', this._throttledScreenWidthUpdate);
- // We re-set the entire redux state when the portal is unmounted so that when it is re-rendered
- // the initialization process always occurs from the same base state. This helps avoid
- // initialization inconsistencies (i.e While the portal was unrendered, the user might have
- // become disconnected from their backing Ethereum node, changes user accounts, etc...)
- this.props.dispatcher.resetState();
- }
- public componentWillReceiveProps(nextProps: LegacyPortalProps): void {
- if (nextProps.networkId !== this.state.prevNetworkId) {
- // tslint:disable-next-line:no-floating-promises
- this._blockchain.networkIdUpdatedFireAndForgetAsync(nextProps.networkId);
- this.setState({
- prevNetworkId: nextProps.networkId,
- });
- }
- if (nextProps.userAddress !== this.state.prevUserAddress) {
- const newUserAddress = _.isEmpty(nextProps.userAddress) ? undefined : nextProps.userAddress;
- // tslint:disable-next-line:no-floating-promises
- this._blockchain.userAddressUpdatedFireAndForgetAsync(newUserAddress);
- this.setState({
- prevUserAddress: nextProps.userAddress,
- });
- }
- if (nextProps.nodeVersion !== this.state.prevNodeVersion) {
- // tslint:disable-next-line:no-floating-promises
- this._blockchain.nodeVersionUpdatedFireAndForgetAsync(nextProps.nodeVersion);
- }
- if (nextProps.location.pathname !== this.state.prevPathname) {
- const isViewingBalances = _.includes(nextProps.location.pathname, `${WebsitePaths.Portal}/balances`);
- const hasAlreadyDismissedWethNotice = LegacyPortal.hasAlreadyDismissedWethNotice();
- this.setState({
- prevPathname: nextProps.location.pathname,
- isWethNoticeDialogOpen: !hasAlreadyDismissedWethNotice && isViewingBalances,
- });
- }
- }
- public render(): React.ReactNode {
- const updateShouldBlockchainErrDialogBeOpen = this.props.dispatcher.updateShouldBlockchainErrDialogBeOpen.bind(
- this.props.dispatcher,
- );
- const portalStyle: React.CSSProperties = {
- minHeight: '100vh',
- display: 'flex',
- flexDirection: 'column',
- justifyContent: 'space-between',
- };
- const portalMenuContainerStyle: React.CSSProperties = {
- overflow: 'hidden',
- backgroundColor: colors.darkestGrey,
- color: colors.white,
- };
- return (
- <div style={portalStyle}>
- <DocumentTitle title="0x Portal DApp" />
- <TopBar
- userAddress={this.props.userAddress}
- networkId={this.props.networkId}
- injectedProviderName={this.props.injectedProviderName}
- onToggleLedgerDialog={this.onToggleLedgerDialog.bind(this)}
- dispatcher={this.props.dispatcher}
- providerType={this.props.providerType}
- blockchainIsLoaded={this.props.blockchainIsLoaded}
- location={this.props.location}
- blockchain={this._blockchain}
- translate={this.props.translate}
- />
- <div id="portal" className="mx-auto max-width-4" style={{ width: '100%' }}>
- <Paper className="mb3 mt2">
- <div className="mx-auto flex">
- <div className="col col-2 pr2 pt1 sm-hide xs-hide" style={portalMenuContainerStyle}>
- <LegacyPortalMenu menuItemStyle={{ color: colors.white }} />
- </div>
- <div className="col col-12 lg-col-10 md-col-10 sm-col sm-col-12">
- <div className="py2" style={{ backgroundColor: colors.grey50 }}>
- {this.props.blockchainIsLoaded ? (
- <Switch>
- <Route
- path={`${WebsitePaths.Portal}/weth`}
- render={this._renderEthWrapper.bind(this)}
- />
- <Route
- path={`${WebsitePaths.Portal}/fill`}
- render={this._renderFillOrder.bind(this)}
- />
- <Route
- path={`${WebsitePaths.Portal}/balances`}
- render={this._renderTokenBalances.bind(this)}
- />
- <Route
- path={`${WebsitePaths.Portal}/trades`}
- render={this._renderTradeHistory.bind(this)}
- />
- <Route
- path={`${WebsitePaths.Home}`}
- render={this._renderGenerateOrderForm.bind(this)}
- />
- </Switch>
- ) : (
- <div className="pt4 sm-px2 sm-pt2 sm-m1" style={{ height: 500 }}>
- <div
- className="relative sm-px2 sm-pt2 sm-m1"
- style={{ height: 122, top: '50%', transform: 'translateY(-50%)' }}
- >
- <div className="center pb2">
- <CircularProgress size={40} thickness={5} />
- </div>
- <div className="center pt2" style={{ paddingBottom: 11 }}>
- Loading Portal...
- </div>
- </div>
- </div>
- )}
- </div>
- </div>
- </div>
- </Paper>
- <BlockchainErrDialog
- blockchain={this._blockchain}
- blockchainErr={this.props.blockchainErr}
- isOpen={this.props.shouldBlockchainErrDialogBeOpen}
- userAddress={this.props.userAddress}
- toggleDialogFn={updateShouldBlockchainErrDialogBeOpen}
- networkId={this.props.networkId}
- />
- <WrappedEthSectionNoticeDialog
- isOpen={this.state.isWethNoticeDialogOpen}
- onToggleDialog={this._onWethNoticeAccepted.bind(this)}
- />
- <PortalDisclaimerDialog
- isOpen={this.state.isDisclaimerDialogOpen}
- onToggleDialog={this._onPortalDisclaimerAccepted.bind(this)}
- />
- <FlashMessage dispatcher={this.props.dispatcher} flashMessage={this.props.flashMessage} />
- <LedgerConfigDialog
- providerType={this.props.providerType}
- networkId={this.props.networkId}
- blockchain={this._blockchain}
- dispatcher={this.props.dispatcher}
- toggleDialogFn={this.onToggleLedgerDialog.bind(this)}
- isOpen={this.state.isLedgerDialogOpen}
- />
- </div>
- <Footer translate={this.props.translate} dispatcher={this.props.dispatcher} />
- </div>
- );
- }
- public onToggleLedgerDialog(): void {
- this.setState({
- isLedgerDialogOpen: !this.state.isLedgerDialogOpen,
- });
- }
- private _renderEthWrapper(): React.ReactNode {
- return (
- <EthWrappers
- networkId={this.props.networkId}
- blockchain={this._blockchain}
- dispatcher={this.props.dispatcher}
- tokenByAddress={this.props.tokenByAddress}
- userAddress={this.props.userAddress}
- userEtherBalanceInWei={this.props.userEtherBalanceInWei}
- lastForceTokenStateRefetch={this.props.lastForceTokenStateRefetch}
- />
- );
- }
- private _renderTradeHistory(): React.ReactNode {
- return (
- <TradeHistory
- tokenByAddress={this.props.tokenByAddress}
- userAddress={this.props.userAddress}
- networkId={this.props.networkId}
- />
- );
- }
- private _renderTokenBalances(): React.ReactNode {
- const trackedTokens = utils.getTrackedTokens(this.props.tokenByAddress);
- return (
- <TokenBalances
- blockchain={this._blockchain}
- blockchainErr={this.props.blockchainErr}
- blockchainIsLoaded={this.props.blockchainIsLoaded}
- dispatcher={this.props.dispatcher}
- screenWidth={this.props.screenWidth}
- tokenByAddress={this.props.tokenByAddress}
- trackedTokens={trackedTokens}
- userAddress={this.props.userAddress}
- userEtherBalanceInWei={this.props.userEtherBalanceInWei}
- networkId={this.props.networkId}
- lastForceTokenStateRefetch={this.props.lastForceTokenStateRefetch}
- />
- );
- }
- private _renderFillOrder(_match: any, _location: Location, _history: History): React.ReactNode {
- const initialFillOrder = !_.isUndefined(this.props.userSuppliedOrderCache)
- ? this.props.userSuppliedOrderCache
- : this._sharedOrderIfExists;
- return (
- <FillOrder
- blockchain={this._blockchain}
- blockchainErr={this.props.blockchainErr}
- initialOrder={initialFillOrder}
- isOrderInUrl={!_.isUndefined(this._sharedOrderIfExists)}
- orderFillAmount={this.props.orderFillAmount}
- networkId={this.props.networkId}
- userAddress={this.props.userAddress}
- tokenByAddress={this.props.tokenByAddress}
- dispatcher={this.props.dispatcher}
- lastForceTokenStateRefetch={this.props.lastForceTokenStateRefetch}
- />
- );
- }
- private _renderGenerateOrderForm(_match: any, _location: Location, _history: History): React.ReactNode {
- return (
- <GenerateOrderForm
- blockchain={this._blockchain}
- hashData={this.props.hashData}
- dispatcher={this.props.dispatcher}
- />
- );
- }
- private _onPortalDisclaimerAccepted(): void {
- localStorage.setItem(constants.LOCAL_STORAGE_KEY_ACCEPT_DISCLAIMER, 'set');
- this.setState({
- isDisclaimerDialogOpen: false,
- });
- }
- private _onWethNoticeAccepted(): void {
- localStorage.setItem(constants.LOCAL_STORAGE_KEY_DISMISS_WETH_NOTICE, 'set');
- this.setState({
- isWethNoticeDialogOpen: false,
- });
- }
- private _updateScreenWidth(): void {
- const newScreenWidth = utils.getScreenWidth();
- this.props.dispatcher.updateScreenWidth(newScreenWidth);
- }
-}
diff --git a/packages/website/ts/components/legacy_portal/legacy_portal_menu.tsx b/packages/website/ts/components/legacy_portal/legacy_portal_menu.tsx
deleted file mode 100644
index 1dd164f8b..000000000
--- a/packages/website/ts/components/legacy_portal/legacy_portal_menu.tsx
+++ /dev/null
@@ -1,73 +0,0 @@
-import * as _ from 'lodash';
-import * as React from 'react';
-import { MenuItem } from 'ts/components/ui/menu_item';
-import { WebsitePaths } from 'ts/types';
-
-export interface LegacyPortalMenuProps {
- menuItemStyle: React.CSSProperties;
- onClick?: () => void;
-}
-
-interface LegacyPortalMenuState {}
-
-export class LegacyPortalMenu extends React.Component<LegacyPortalMenuProps, LegacyPortalMenuState> {
- public static defaultProps: Partial<LegacyPortalMenuProps> = {
- onClick: _.noop,
- };
- public render(): React.ReactNode {
- return (
- <div>
- <MenuItem
- style={this.props.menuItemStyle}
- className="py2"
- to={`${WebsitePaths.Portal}`}
- onClick={this.props.onClick.bind(this)}
- >
- {this._renderMenuItemWithIcon('Generate order', 'zmdi-arrow-right-top')}
- </MenuItem>
- <MenuItem
- style={this.props.menuItemStyle}
- className="py2"
- to={`${WebsitePaths.Portal}/fill`}
- onClick={this.props.onClick.bind(this)}
- >
- {this._renderMenuItemWithIcon('Fill order', 'zmdi-arrow-left-bottom')}
- </MenuItem>
- <MenuItem
- style={this.props.menuItemStyle}
- className="py2"
- to={`${WebsitePaths.Portal}/balances`}
- onClick={this.props.onClick.bind(this)}
- >
- {this._renderMenuItemWithIcon('Balances', 'zmdi-balance-wallet')}
- </MenuItem>
- <MenuItem
- style={this.props.menuItemStyle}
- className="py2"
- to={`${WebsitePaths.Portal}/trades`}
- onClick={this.props.onClick.bind(this)}
- >
- {this._renderMenuItemWithIcon('Trade history', 'zmdi-format-list-bulleted')}
- </MenuItem>
- <MenuItem
- style={this.props.menuItemStyle}
- className="py2"
- to={`${WebsitePaths.Portal}/weth`}
- onClick={this.props.onClick.bind(this)}
- >
- {this._renderMenuItemWithIcon('Wrap ETH', 'zmdi-circle-o')}
- </MenuItem>
- </div>
- );
- }
- private _renderMenuItemWithIcon(title: string, iconName: string): React.ReactNode {
- return (
- <div className="flex" style={{ fontWeight: 100 }}>
- <div className="pr1 pl2">
- <i style={{ fontSize: 20 }} className={`zmdi ${iconName}`} />
- </div>
- <div className="pl1">{title}</div>
- </div>
- );
- }
-}
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..cf06f10c8 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';
@@ -127,7 +127,7 @@ export class OrderJSON extends React.Component<OrderJSONProps, OrderJSONState> {
href: this.state.shareLink,
method: 'share',
},
- _.noop,
+ _.noop.bind(_),
);
}
private _shareViaEmailAsync(): void {
@@ -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..1790a9678 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';
@@ -110,8 +110,8 @@ const SIDE_PADDING = 20;
export class Portal extends React.Component<PortalProps, PortalState> {
private _blockchain: Blockchain;
- private _sharedOrderIfExists: Order;
- private _throttledScreenWidthUpdate: () => void;
+ private readonly _sharedOrderIfExists: Order;
+ private readonly _throttledScreenWidthUpdate: () => void;
constructor(props: PortalProps) {
super(props);
this._sharedOrderIfExists = orderParser.parse(window.location.search);
@@ -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/top_bar/top_bar.tsx b/packages/website/ts/components/top_bar/top_bar.tsx
index 960e5a824..63ea3475a 100644
--- a/packages/website/ts/components/top_bar/top_bar.tsx
+++ b/packages/website/ts/components/top_bar/top_bar.tsx
@@ -7,7 +7,6 @@ import MenuItem from 'material-ui/MenuItem';
import * as React from 'react';
import { Link } from 'react-router-dom';
import { Blockchain } from 'ts/blockchain';
-import { LegacyPortalMenu } from 'ts/components/legacy_portal/legacy_portal_menu';
import { DrawerMenu } from 'ts/components/portal/drawer_menu';
import { ProviderDisplay } from 'ts/components/top_bar/provider_display';
import { TopBarMenuItem } from 'ts/components/top_bar/top_bar_menu_item';
@@ -17,7 +16,6 @@ import { Dispatcher } from 'ts/redux/dispatcher';
import { Deco, Key, ProviderType, WebsiteLegacyPaths, WebsitePaths } from 'ts/types';
import { constants } from 'ts/utils/constants';
import { Translate } from 'ts/utils/translate';
-import { utils } from 'ts/utils/utils';
export enum TopBarDisplayType {
Default,
@@ -213,8 +211,6 @@ export class TopBar extends React.Component<TopBarProps, TopBarState> {
</div>
);
const popoverContent = <Menu style={{ color: colors.darkGrey }}>{developerSectionMenuItems}</Menu>;
- // TODO : Remove this once we ship portal v2
- const shouldShowPortalV2Drawer = this._isViewingPortal() && utils.shouldShowPortalV2();
return (
<div
style={{ ...styles.topBar, ...bottomBorderStyle, ...this.props.style, ...{ height } }}
@@ -294,11 +290,11 @@ export class TopBar extends React.Component<TopBarProps, TopBarState> {
</div>
</div>
</Container>
- {shouldShowPortalV2Drawer ? this._renderPortalV2Drawer() : this._renderDrawer()}
+ {this._isViewingPortal() ? this._renderPortalDrawer() : this._renderDrawer()}
</div>
);
}
- private _renderPortalV2Drawer(): React.ReactNode {
+ private _renderPortalDrawer(): React.ReactNode {
return (
<Drawer
open={this.state.isDrawerOpen}
@@ -326,7 +322,6 @@ export class TopBar extends React.Component<TopBarProps, TopBarState> {
onRequestChange={this._onMenuButtonClick.bind(this)}
>
<div className="clearfix">
- {this._renderPortalMenu()}
{this._renderDocsMenu()}
{this._renderWiki()}
<div className="pl1 py1 mt3" style={{ backgroundColor: colors.lightGrey }}>
@@ -478,20 +473,6 @@ export class TopBar extends React.Component<TopBarProps, TopBarState> {
</div>
);
}
- private _renderPortalMenu(): React.ReactNode {
- if (!this._isViewingPortal()) {
- return undefined;
- }
-
- return (
- <div className="lg-hide md-hide">
- <div className="pl1 py1" style={{ backgroundColor: colors.lightGrey }}>
- {this.props.translate.get(Key.PortalDApp, Deco.CapWords)}
- </div>
- <LegacyPortalMenu menuItemStyle={{ color: 'black' }} onClick={this._onMenuButtonClick.bind(this)} />
- </div>
- );
- }
private _onMenuButtonClick(): void {
this.setState({
isDrawerOpen: !this.state.isDrawerOpen,
diff --git a/packages/website/ts/components/ui/menu_item.tsx b/packages/website/ts/components/ui/menu_item.tsx
index 64c0dc49d..0cb4b387c 100644
--- a/packages/website/ts/components/ui/menu_item.tsx
+++ b/packages/website/ts/components/ui/menu_item.tsx
@@ -15,7 +15,7 @@ interface MenuItemState {
export class MenuItem extends React.Component<MenuItemProps, MenuItemState> {
public static defaultProps: Partial<MenuItemProps> = {
- onClick: _.noop,
+ onClick: _.noop.bind(_),
className: '',
};
public constructor(props: MenuItemProps) {
diff --git a/packages/website/ts/components/ui/overlay.tsx b/packages/website/ts/components/ui/overlay.tsx
index da26317de..fc7507475 100644
--- a/packages/website/ts/components/ui/overlay.tsx
+++ b/packages/website/ts/components/ui/overlay.tsx
@@ -26,7 +26,7 @@ export const Overlay: React.StatelessComponent<OverlayProps> = props => (
Overlay.defaultProps = {
style: {},
- onClick: _.noop,
+ onClick: _.noop.bind(_),
};
Overlay.displayName = 'Overlay';
diff --git a/packages/website/ts/components/ui/simple_menu.tsx b/packages/website/ts/components/ui/simple_menu.tsx
index 74b8ef6ae..8a9349c6d 100644
--- a/packages/website/ts/components/ui/simple_menu.tsx
+++ b/packages/website/ts/components/ui/simple_menu.tsx
@@ -41,7 +41,7 @@ export const SimpleMenuItem: React.StatelessComponent<SimpleMenuItemProps> = ({
<Text
fontSize="14px"
fontColor={colors.darkGrey}
- onClick={onClick || _.noop}
+ onClick={onClick || _.noop.bind(_)}
hoverColor={colors.mediumBlue}
>
{displayText}
@@ -84,5 +84,5 @@ export interface DifferentWalletSimpleMenuItemProps {
export const DifferentWalletSimpleMenuItem: React.StatelessComponent<DifferentWalletSimpleMenuItemProps> = ({
onClick,
}) => {
- return <SimpleMenuItem displayText="Use a Different Wallet..." onClick={onClick} />;
+ return <SimpleMenuItem displayText="Use Ledger Wallet..." onClick={onClick} />;
};
diff --git a/packages/website/ts/components/wallet/wallet.tsx b/packages/website/ts/components/wallet/wallet.tsx
index 6c1c495d7..40a8a23ea 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';
@@ -204,7 +204,7 @@ export class Wallet extends React.Component<WalletProps, WalletState> {
<AccountConnection accountState={accountState} injectedProviderName={this.props.injectedProviderName} />
</div>
);
- const onClick = _.noop;
+ const onClick = _.noop.bind(_);
const accessory = (
<DropDown
activeNode={
@@ -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/containers/legacy_portal.ts b/packages/website/ts/containers/legacy_portal.ts
deleted file mode 100644
index e99f47fb7..000000000
--- a/packages/website/ts/containers/legacy_portal.ts
+++ /dev/null
@@ -1,92 +0,0 @@
-import { BigNumber } from '@0xproject/utils';
-import * as _ from 'lodash';
-import * as React from 'react';
-import { connect } from 'react-redux';
-import { Dispatch } from 'redux';
-import {
- LegacyPortal as LegacyPortalComponent,
- LegacyPortalProps as LegacyPortalComponentProps,
-} from 'ts/components/legacy_portal/legacy_portal';
-import { Dispatcher } from 'ts/redux/dispatcher';
-import { State } from 'ts/redux/reducer';
-import { BlockchainErrs, HashData, Order, ProviderType, ScreenWidths, Side, TokenByAddress } from 'ts/types';
-import { constants } from 'ts/utils/constants';
-import { Translate } from 'ts/utils/translate';
-
-interface ConnectedState {
- blockchainErr: BlockchainErrs;
- blockchainIsLoaded: boolean;
- hashData: HashData;
- injectedProviderName: string;
- networkId: number;
- nodeVersion: string;
- orderFillAmount: BigNumber;
- providerType: ProviderType;
- tokenByAddress: TokenByAddress;
- lastForceTokenStateRefetch: number;
- userEtherBalanceInWei?: BigNumber;
- screenWidth: ScreenWidths;
- shouldBlockchainErrDialogBeOpen: boolean;
- userAddress: string;
- userSuppliedOrderCache: Order;
- flashMessage?: string | React.ReactNode;
- translate: Translate;
-}
-
-interface ConnectedDispatch {
- dispatcher: Dispatcher;
-}
-
-const mapStateToProps = (state: State, _ownProps: LegacyPortalComponentProps): ConnectedState => {
- const receiveAssetToken = state.sideToAssetToken[Side.Receive];
- const depositAssetToken = state.sideToAssetToken[Side.Deposit];
- const receiveAddress = !_.isUndefined(receiveAssetToken.address)
- ? receiveAssetToken.address
- : constants.NULL_ADDRESS;
- const depositAddress = !_.isUndefined(depositAssetToken.address)
- ? depositAssetToken.address
- : constants.NULL_ADDRESS;
- const receiveAmount = !_.isUndefined(receiveAssetToken.amount) ? receiveAssetToken.amount : new BigNumber(0);
- const depositAmount = !_.isUndefined(depositAssetToken.amount) ? depositAssetToken.amount : new BigNumber(0);
- const hashData = {
- depositAmount,
- depositTokenContractAddr: depositAddress,
- feeRecipientAddress: constants.NULL_ADDRESS,
- makerFee: constants.MAKER_FEE,
- orderExpiryTimestamp: state.orderExpiryTimestamp,
- orderMakerAddress: state.userAddress,
- orderTakerAddress: state.orderTakerAddress !== '' ? state.orderTakerAddress : constants.NULL_ADDRESS,
- receiveAmount,
- receiveTokenContractAddr: receiveAddress,
- takerFee: constants.TAKER_FEE,
- orderSalt: state.orderSalt,
- };
- return {
- blockchainErr: state.blockchainErr,
- blockchainIsLoaded: state.blockchainIsLoaded,
- hashData,
- injectedProviderName: state.injectedProviderName,
- networkId: state.networkId,
- nodeVersion: state.nodeVersion,
- orderFillAmount: state.orderFillAmount,
- providerType: state.providerType,
- screenWidth: state.screenWidth,
- shouldBlockchainErrDialogBeOpen: state.shouldBlockchainErrDialogBeOpen,
- tokenByAddress: state.tokenByAddress,
- lastForceTokenStateRefetch: state.lastForceTokenStateRefetch,
- userAddress: state.userAddress,
- userEtherBalanceInWei: state.userEtherBalanceInWei,
- userSuppliedOrderCache: state.userSuppliedOrderCache,
- flashMessage: state.flashMessage,
- translate: state.translate,
- };
-};
-
-const mapDispatchToProps = (dispatch: Dispatch<State>): ConnectedDispatch => ({
- dispatcher: new Dispatcher(dispatch),
-});
-
-export const LegacyPortal: React.ComponentClass<LegacyPortalComponentProps> = connect(
- mapStateToProps,
- mapDispatchToProps,
-)(LegacyPortalComponent);
diff --git a/packages/website/ts/containers/zero_ex_js_documentation.ts b/packages/website/ts/containers/zero_ex_js_documentation.ts
index b43a1f645..2fc08e923 100644
--- a/packages/website/ts/containers/zero_ex_js_documentation.ts
+++ b/packages/website/ts/containers/zero_ex_js_documentation.ts
@@ -183,6 +183,32 @@ const docsInfoConfig: DocsInfoConfig = {
'JSONRPCErrorCallback',
'LogEntryEvent',
'LogEntry',
+ 'ERC20AssetData',
+ 'ERC721AssetData',
+ 'AssetProxyId',
+ 'WETH9Events',
+ 'WETH9WithdrawalEventArgs',
+ 'WETH9ApprovalEventArgs',
+ 'WETH9EventArgs',
+ 'WETH9DepositEventArgs',
+ 'WETH9TransferEventArgs',
+ 'ERC20TokenTransferEventArgs',
+ 'ERC20TokenApprovalEventArgs',
+ 'ERC20TokenEvents',
+ 'ERC20TokenEventArgs',
+ 'ERC721TokenApprovalEventArgs',
+ 'ERC721TokenApprovalForAllEventArgs',
+ 'ERC721TokenTransferEventArgs',
+ 'ERC721TokenEvents',
+ 'ExchangeCancelUpToEventArgs',
+ 'ExchangeAssetProxyRegisteredEventArgs',
+ 'ExchangeFillEventArgs',
+ 'ExchangeCancelEventArgs',
+ 'ExchangeEventArgs',
+ 'ContractWrappersConfig',
+ 'MessagePrefixType',
+ 'MessagePrefixOpts',
+ 'OrderInfo',
],
typeNameToPrefix: {},
typeNameToExternalLink: {
diff --git a/packages/website/ts/index.tsx b/packages/website/ts/index.tsx
index c7ccfdf1f..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
@@ -35,14 +33,9 @@ import 'less/all.less';
// At the same time webpack statically parses for System.import() to determine bundle chunk split points
// so each lazy import needs it's own `System.import()` declaration.
-// TODO: Remove this once we ship V2
-const LazyPortal = utils.shouldShowPortalV2()
- ? createLazyComponent('Portal', async () =>
- System.import<any>(/* webpackChunkName: "portal" */ 'ts/containers/portal'),
- )
- : createLazyComponent('LegacyPortal', async () =>
- System.import<any>(/* webpackChunkName: "legacyPortal" */ 'ts/containers/legacy_portal'),
- );
+const LazyPortal = createLazyComponent('Portal', async () =>
+ System.import<any>(/* webpackChunkName: "portal" */ 'ts/containers/portal'),
+);
const LazyZeroExJSDocumentation = createLazyComponent('Documentation', async () =>
System.import<any>(/* webpackChunkName: "zeroExDocs" */ 'ts/containers/zero_ex_js_documentation'),
);
@@ -74,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/local_storage/local_storage.ts b/packages/website/ts/local_storage/local_storage.ts
index 1e3258ce0..13d9ca401 100644
--- a/packages/website/ts/local_storage/local_storage.ts
+++ b/packages/website/ts/local_storage/local_storage.ts
@@ -5,7 +5,7 @@ export const localStorage = {
return !!window.localStorage;
},
getItemIfExists(key: string): string {
- if (!this.doesExist) {
+ if (!localStorage.doesExist) {
return undefined;
}
const item = window.localStorage.getItem(key);
@@ -15,13 +15,13 @@ export const localStorage = {
return item;
},
setItem(key: string, value: string): void {
- if (!this.doesExist || _.isUndefined(value)) {
+ if (!localStorage.doesExist || _.isUndefined(value)) {
return;
}
window.localStorage.setItem(key, value);
},
removeItem(key: string): void {
- if (!this.doesExist) {
+ if (!localStorage.doesExist) {
return;
}
window.localStorage.removeItem(key);
@@ -37,7 +37,7 @@ export const localStorage = {
localStorage.setItem(key, JSON.stringify(value));
},
getAllKeys(): string[] {
- if (!this.doesExist) {
+ if (!localStorage.doesExist) {
return [];
}
return _.keys(window.localStorage);
diff --git a/packages/website/ts/local_storage/tracked_token_storage.ts b/packages/website/ts/local_storage/tracked_token_storage.ts
index f865f8109..b1b579aef 100644
--- a/packages/website/ts/local_storage/tracked_token_storage.ts
+++ b/packages/website/ts/local_storage/tracked_token_storage.ts
@@ -17,7 +17,7 @@ export const trackedTokenStorage = {
localStorage.setItem(TRACKED_TOKENS_CLEAR_KEY, configs.LAST_LOCAL_STORAGE_TRACKED_TOKEN_CLEARANCE_DATE);
},
addTrackedTokenToUser(userAddress: string, networkId: number, token: Token): void {
- const trackedTokensByUserAddress = this.getTrackedTokensByUserAddress();
+ const trackedTokensByUserAddress = trackedTokenStorage.getTrackedTokensByUserAddress();
let trackedTokensByNetworkId = trackedTokensByUserAddress[userAddress];
if (_.isUndefined(trackedTokensByNetworkId)) {
trackedTokensByNetworkId = {};
@@ -57,7 +57,7 @@ export const trackedTokenStorage = {
return trackedTokensByAddress;
},
removeTrackedToken(userAddress: string, networkId: number, tokenAddress: string): void {
- const trackedTokensByUserAddress = this.getTrackedTokensByUserAddress();
+ const trackedTokensByUserAddress = trackedTokenStorage.getTrackedTokensByUserAddress();
const trackedTokensByNetworkId = trackedTokensByUserAddress[userAddress];
const trackedTokens = trackedTokensByNetworkId[networkId];
const remainingTrackedTokens = _.filter(trackedTokens, (token: Token) => {
diff --git a/packages/website/ts/local_storage/trade_history_storage.tsx b/packages/website/ts/local_storage/trade_history_storage.tsx
index 2e2f4e64e..a9b042820 100644
--- a/packages/website/ts/local_storage/trade_history_storage.tsx
+++ b/packages/website/ts/local_storage/trade_history_storage.tsx
@@ -27,31 +27,31 @@ export const tradeHistoryStorage = {
localStorage.setItem(FILL_CLEAR_KEY, configs.LAST_LOCAL_STORAGE_FILL_CLEARANCE_DATE);
},
addFillToUser(userAddress: string, networkId: number, fill: Fill): void {
- const fillsByHash = this.getUserFillsByHash(userAddress, networkId);
- const fillHash = this._getFillHash(fill);
+ const fillsByHash = tradeHistoryStorage.getUserFillsByHash(userAddress, networkId);
+ const fillHash = tradeHistoryStorage._getFillHash(fill);
const doesFillExist = !_.isUndefined(fillsByHash[fillHash]);
if (doesFillExist) {
return; // noop
}
fillsByHash[fillHash] = fill;
const userFillsJSONString = JSON.stringify(fillsByHash);
- const userFillsKey = this._getUserFillsKey(userAddress, networkId);
+ const userFillsKey = tradeHistoryStorage._getUserFillsKey(userAddress, networkId);
localStorage.setItem(userFillsKey, userFillsJSONString);
},
removeFillFromUser(userAddress: string, networkId: number, fill: Fill): void {
- const fillsByHash = this.getUserFillsByHash(userAddress, networkId);
- const fillHash = this._getFillHash(fill);
+ const fillsByHash = tradeHistoryStorage.getUserFillsByHash(userAddress, networkId);
+ const fillHash = tradeHistoryStorage._getFillHash(fill);
const doesFillExist = !_.isUndefined(fillsByHash[fillHash]);
if (!doesFillExist) {
return; // noop
}
delete fillsByHash[fillHash];
const userFillsJSONString = JSON.stringify(fillsByHash);
- const userFillsKey = this._getUserFillsKey(userAddress, networkId);
+ const userFillsKey = tradeHistoryStorage._getUserFillsKey(userAddress, networkId);
localStorage.setItem(userFillsKey, userFillsJSONString);
},
getUserFillsByHash(userAddress: string, networkId: number): { [fillHash: string]: Fill } {
- const userFillsKey = this._getUserFillsKey(userAddress, networkId);
+ const userFillsKey = tradeHistoryStorage._getUserFillsKey(userAddress, networkId);
const userFillsJSONString = localStorage.getItemIfExists(userFillsKey);
if (_.isEmpty(userFillsJSONString)) {
return {};
@@ -66,7 +66,7 @@ export const tradeHistoryStorage = {
return userFillsByHash;
},
getFillsLatestBlock(userAddress: string, networkId: number): number {
- const userFillsLatestBlockKey = this._getFillsLatestBlockKey(userAddress, networkId);
+ const userFillsLatestBlockKey = tradeHistoryStorage._getFillsLatestBlockKey(userAddress, networkId);
const blockNumberStr = localStorage.getItemIfExists(userFillsLatestBlockKey);
if (_.isEmpty(blockNumberStr)) {
return constants.GENESIS_ORDER_BLOCK_BY_NETWORK_ID[networkId];
@@ -75,7 +75,7 @@ export const tradeHistoryStorage = {
return blockNumber;
},
setFillsLatestBlock(userAddress: string, networkId: number, blockNumber: number): void {
- const userFillsLatestBlockKey = this._getFillsLatestBlockKey(userAddress, networkId);
+ const userFillsLatestBlockKey = tradeHistoryStorage._getFillsLatestBlockKey(userAddress, networkId);
localStorage.setItem(userFillsLatestBlockKey, `${blockNumber}`);
},
_getUserFillsKey(userAddress: string, networkId: number): string {
diff --git a/packages/website/ts/pages/about/about.tsx b/packages/website/ts/pages/about/about.tsx
index 5bb5d06a9..33581c938 100644
--- a/packages/website/ts/pages/about/about.tsx
+++ b/packages/website/ts/pages/about/about.tsx
@@ -99,7 +99,7 @@ const teamRow3: ProfileInfo[] = [
},
{
name: 'Jacob Evans',
- title: 'Blockchain Engineer',
+ title: 'Ecosystem Engineer',
description: `Previously software engineer at Qantas and RSA Security.`,
image: '/images/team/jacob.jpg',
linkedIn: 'https://www.linkedin.com/in/dekzter/',
@@ -174,14 +174,21 @@ const teamRow6: ProfileInfo[] = [
linkedIn: 'https://www.linkedin.com/in/stephenalexbrowne/',
github: 'http://github.com/albrow',
},
- // {
- // 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: 'Peter Zeitz',
+ title: 'Research Fellow',
+ description: `Researching decentralized governance. Previously Assistant Professor of Economics at National University of Singapore Business School. PhD in Economics at UCLA.`,
+ 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',
+ },
];
const advisors: ProfileInfo[] = [
diff --git a/packages/website/ts/pages/jobs/jobs.tsx b/packages/website/ts/pages/jobs/jobs.tsx
index 314669ee9..38cefa832 100644
--- a/packages/website/ts/pages/jobs/jobs.tsx
+++ b/packages/website/ts/pages/jobs/jobs.tsx
@@ -33,7 +33,7 @@ export interface JobsState {}
export class Jobs extends React.Component<JobsProps, JobsState> {
// TODO: consolidate this small screen scaffolding into one place (its being used in portal and docs as well)
- private _throttledScreenWidthUpdate: () => void;
+ private readonly _throttledScreenWidthUpdate: () => void;
public constructor(props: JobsProps) {
super(props);
this._throttledScreenWidthUpdate = _.throttle(this._updateScreenWidth.bind(this), THROTTLE_TIMEOUT);
diff --git a/packages/website/ts/pages/landing/landing.tsx b/packages/website/ts/pages/landing/landing.tsx
index b2cf4d979..2a51ee3c0 100644
--- a/packages/website/ts/pages/landing/landing.tsx
+++ b/packages/website/ts/pages/landing/landing.tsx
@@ -171,7 +171,7 @@ interface LandingState {
}
export class Landing extends React.Component<LandingProps, LandingState> {
- private _throttledScreenWidthUpdate: () => void;
+ private readonly _throttledScreenWidthUpdate: () => void;
constructor(props: LandingProps) {
super(props);
this.state = {
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/dispatcher.ts b/packages/website/ts/redux/dispatcher.ts
index e0ce43ae5..db008d319 100644
--- a/packages/website/ts/redux/dispatcher.ts
+++ b/packages/website/ts/redux/dispatcher.ts
@@ -17,7 +17,7 @@ import {
} from 'ts/types';
export class Dispatcher {
- private _dispatch: Dispatch<State>;
+ private readonly _dispatch: Dispatch<State>;
constructor(dispatch: Dispatch<State>) {
this._dispatch = dispatch;
}
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/backend_client.ts b/packages/website/ts/utils/backend_client.ts
index 835a6ef4d..5164211df 100644
--- a/packages/website/ts/utils/backend_client.ts
+++ b/packages/website/ts/utils/backend_client.ts
@@ -6,6 +6,7 @@ import {
WebsiteBackendJobInfo,
WebsiteBackendPriceInfo,
WebsiteBackendRelayerInfo,
+ WebsiteBackendTokenInfo,
} from 'ts/types';
import { fetchUtils } from 'ts/utils/fetch_utils';
import { utils } from 'ts/utils/utils';
@@ -14,6 +15,7 @@ const ETH_GAS_STATION_ENDPOINT = '/eth_gas_station';
const JOBS_ENDPOINT = '/jobs';
const PRICES_ENDPOINT = '/prices';
const RELAYERS_ENDPOINT = '/relayers';
+const TOKENS_ENDPOINT = '/tokens';
const WIKI_ENDPOINT = '/wiki';
const SUBSCRIBE_SUBSTACK_NEWSLETTER_ENDPOINT = '/newsletter_subscriber/substack';
@@ -41,6 +43,10 @@ export const backendClient = {
const result = await fetchUtils.requestAsync(utils.getBackendBaseUrl(), RELAYERS_ENDPOINT);
return result;
},
+ async getTokenInfosAsync(): Promise<WebsiteBackendTokenInfo[]> {
+ const result = await fetchUtils.requestAsync(utils.getBackendBaseUrl(), TOKENS_ENDPOINT);
+ return result;
+ },
async getWikiArticlesBySectionAsync(): Promise<ArticlesBySection> {
const result = await fetchUtils.requestAsync(utils.getBackendBaseUrl(), WIKI_ENDPOINT);
return result;
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 4b3443d21..20441cd75 100644
--- a/packages/website/ts/utils/constants.ts
+++ b/packages/website/ts/utils/constants.ts
@@ -33,7 +33,7 @@ export const constants = {
PROVIDER_NAME_TOSHI: 'Toshi',
PROVIDER_NAME_GENERIC: 'Injected Web3',
PROVIDER_NAME_PUBLIC: '0x Public',
- ROLLBAR_ACCESS_TOKEN: 'a6619002b51c4464928201e6ea94de65',
+ ROLLBAR_ACCESS_TOKEN: '32c39bfa4bb6440faedc1612a9c13d28',
S3_DOC_BUCKET_ROOT: 'https://s3.amazonaws.com/doc-jsons',
S3_STAGING_DOC_BUCKET_ROOT: 'https://s3.amazonaws.com/staging-doc-jsons',
SUCCESS_STATUS: 200,
@@ -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 f875141fe..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,15 @@ const rollbarConfig = {
itemsPerMinute: 10,
maxItems: 500,
payload: {
- environment: configs.ENVIRONMENT,
+ environment: utils.getEnvironment(),
+ client: {
+ javascript: {
+ source_map_enabled: true,
+ // This is only defined in production environments.
+ code_version: process.env.GIT_SHA,
+ guess_uncaught_frames: true,
+ },
+ },
},
uncaughtErrorLevel: 'error',
hostWhiteList: [configs.DOMAIN_PRODUCTION, configs.DOMAIN_STAGING],
@@ -28,25 +36,18 @@ const rollbarConfig = {
'SecurityError (DOM Exception 18)',
],
};
-import Rollbar = require('../../public/js/rollbar.umd.nojson.min.js');
+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 8c76a7592..e656d5963 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) {
@@ -61,7 +59,7 @@ export const utils = {
return moment.unix(unixTimestampSec.toNumber());
},
convertToReadableDateTimeFromUnixTimestamp(unixTimestampSec: BigNumber): string {
- const m = this.convertToMomentFromUnixTimestamp(unixTimestampSec);
+ const m = utils.convertToMomentFromUnixTimestamp(unixTimestampSec);
const formattedDate: string = m.format('h:MMa MMMM D YYYY');
return formattedDate;
},
@@ -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<void>((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,14 +342,29 @@ export const utils = {
isExternallyInjected(providerType: ProviderType, injectedProviderName: string): boolean {
return providerType === ProviderType.Injected && injectedProviderName !== constants.PROVIDER_NAME_PUBLIC;
},
- isDogfood,
- shouldShowPortalV2(): boolean {
- // return this.isDevelopment() || this.isStaging() || this.isDogfood();
- // TODO: Remove this method entirely after launch.
- return true;
+ 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();
+ return utils.isDevelopment() || utils.isStaging() || utils.isDogfood();
},
getEthToken(tokenByAddress: TokenByAddress): Token {
return utils.getTokenBySymbol(constants.ETHER_TOKEN_SYMBOL, tokenByAddress);
@@ -379,27 +379,34 @@ export const utils = {
},
getTrackedTokens(tokenByAddress: TokenByAddress): Token[] {
const allTokens = _.values(tokenByAddress);
- const trackedTokens = _.filter(allTokens, t => this.isTokenTracked(t));
+ const trackedTokens = _.filter(allTokens, t => utils.isTokenTracked(t));
return trackedTokens;
},
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 b5e9cf6dd..8653196a6 100644
--- a/packages/website/webpack.config.js
+++ b/packages/website/webpack.config.js
@@ -1,7 +1,51 @@
const path = require('path');
const webpack = require('webpack');
const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
+const RollbarSourceMapPlugin = require('rollbar-sourcemap-webpack-plugin');
+const childProcess = require('child_process');
+const GIT_SHA = childProcess
+ .execSync('git rev-parse HEAD')
+ .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: {
@@ -71,27 +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),
- },
- }),
- // TODO: Revert to webpack bundled version with webpack v4.
- // The v3 series bundled version does not support ES6 and
- // fails to build.
- new UglifyJsPlugin({
- uglifyOptions: {
- mangle: {
- reserved: ['BigNumber'],
- },
- },
- }),
- ]
- : [],
+ plugins: generatePlugins(),
};
diff --git a/tsconfig.json b/tsconfig.json
index 5ca0267e4..588285140 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -6,6 +6,7 @@
"sourceMap": true,
"declaration": true,
"experimentalDecorators": true,
+ "downlevelIteration": true,
"noImplicitReturns": true,
"pretty": true,
"skipLibCheck": true,
diff --git a/yarn.lock b/yarn.lock
index 20689e7aa..6ba8e8925 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2,6 +2,23 @@
# yarn lockfile v1
+"0x.js@0.38.5":
+ version "0.38.5"
+ resolved "https://registry.yarnpkg.com/0x.js/-/0x.js-0.38.5.tgz#da4724e81e648279ea288cbac4b1a950a7cd7707"
+ dependencies:
+ "@0xproject/assert" "^0.2.13"
+ "@0xproject/base-contract" "^0.3.5"
+ "@0xproject/contract-wrappers" "^0.1.0"
+ "@0xproject/order-utils" "^0.0.8"
+ "@0xproject/order-watcher" "^0.0.7"
+ "@0xproject/sol-compiler" "^0.5.3"
+ "@0xproject/types" "^0.8.2"
+ "@0xproject/typescript-typings" "^0.4.2"
+ "@0xproject/utils" "^0.7.2"
+ "@0xproject/web3-wrapper" "^0.7.2"
+ 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"
@@ -26,7 +43,17 @@
lodash "4.17.10"
valid-url "1.0.9"
-"@0xproject/contract-wrappers@0.0.5", "@0xproject/contract-wrappers@^0.0.5":
+"@0xproject/assert@^0.2.14":
+ version "0.2.14"
+ resolved "https://registry.yarnpkg.com/@0xproject/assert/-/assert-0.2.14.tgz#7d5a373fedc8eb482716b730f4dddf3ef33bfa29"
+ dependencies:
+ "@0xproject/json-schemas" "^0.8.3"
+ "@0xproject/typescript-typings" "^0.4.3"
+ "@0xproject/utils" "^0.7.3"
+ lodash "4.17.10"
+ valid-url "1.0.9"
+
+"@0xproject/contract-wrappers@^0.0.5":
version "0.0.5"
resolved "https://registry.yarnpkg.com/@0xproject/contract-wrappers/-/contract-wrappers-0.0.5.tgz#36f91afb7de51478f9d2e4e0a3c4e685b3d18f28"
dependencies:
@@ -72,11 +99,11 @@
ethers "3.0.22"
lodash "4.17.10"
-"@0xproject/json-schemas@0.8.2", "@0xproject/json-schemas@^0.8.2":
- version "0.8.2"
- resolved "https://registry.yarnpkg.com/@0xproject/json-schemas/-/json-schemas-0.8.2.tgz#9d3f446e546ce0c959cf7beb45d41ac60476a78c"
+"@0xproject/json-schemas@0.8.3", "@0xproject/json-schemas@^0.8.3":
+ version "0.8.3"
+ resolved "https://registry.yarnpkg.com/@0xproject/json-schemas/-/json-schemas-0.8.3.tgz#455e6219a6bd05e990392165192a983a9ab89f26"
dependencies:
- "@0xproject/typescript-typings" "^0.4.2"
+ "@0xproject/typescript-typings" "^0.4.3"
"@types/node" "9.6.0"
jsonschema "1.2.2"
lodash.values "4.3.0"
@@ -90,6 +117,15 @@
jsonschema "1.2.2"
lodash.values "4.3.0"
+"@0xproject/json-schemas@^0.8.2":
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/@0xproject/json-schemas/-/json-schemas-0.8.2.tgz#9d3f446e546ce0c959cf7beb45d41ac60476a78c"
+ dependencies:
+ "@0xproject/typescript-typings" "^0.4.2"
+ "@types/node" "9.6.0"
+ jsonschema "1.2.2"
+ lodash.values "4.3.0"
+
"@0xproject/order-utils@^0.0.7":
version "0.0.7"
resolved "https://registry.yarnpkg.com/@0xproject/order-utils/-/order-utils-0.0.7.tgz#eaa465782ea5745bdad54e1a851533172d993b7c"
@@ -122,6 +158,42 @@
ethereumjs-util "5.1.5"
lodash "4.17.10"
+"@0xproject/order-utils@^0.0.9":
+ version "0.0.9"
+ resolved "https://registry.yarnpkg.com/@0xproject/order-utils/-/order-utils-0.0.9.tgz#75225dfbd87335d18810abf995d8e077b9a84868"
+ dependencies:
+ "@0xproject/assert" "^0.2.14"
+ "@0xproject/json-schemas" "^0.8.3"
+ "@0xproject/types" "^0.8.2"
+ "@0xproject/typescript-typings" "^0.4.3"
+ "@0xproject/utils" "^0.7.3"
+ "@0xproject/web3-wrapper" "^0.7.3"
+ "@types/node" "9.6.0"
+ bn.js "4.11.7"
+ ethereumjs-abi "0.6.5"
+ ethereumjs-util "5.1.5"
+ lodash "4.17.10"
+
+"@0xproject/order-watcher@^0.0.7":
+ version "0.0.7"
+ resolved "https://registry.yarnpkg.com/@0xproject/order-watcher/-/order-watcher-0.0.7.tgz#fbe019aa33447781096b5d562e7a3a4ec91a1da2"
+ dependencies:
+ "@0xproject/assert" "^0.2.13"
+ "@0xproject/base-contract" "^0.3.5"
+ "@0xproject/contract-wrappers" "^0.1.0"
+ "@0xproject/fill-scenarios" "^0.0.5"
+ "@0xproject/json-schemas" "^0.8.2"
+ "@0xproject/order-utils" "^0.0.8"
+ "@0xproject/types" "^0.8.2"
+ "@0xproject/typescript-typings" "^0.4.2"
+ "@0xproject/utils" "^0.7.2"
+ "@0xproject/web3-wrapper" "^0.7.2"
+ bintrees "1.0.2"
+ ethereum-types "^0.0.2"
+ ethereumjs-blockstream "5.0.0"
+ 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"
@@ -175,6 +247,468 @@
dependencies:
events "^2.0.0"
+"@lerna/add@^3.0.0-beta.21":
+ version "3.0.0-beta.21"
+ resolved "https://registry.yarnpkg.com/@lerna/add/-/add-3.0.0-beta.21.tgz#5634492930b5f97eca3775b85f39f9e382680425"
+ dependencies:
+ "@lerna/bootstrap" "^3.0.0-beta.21"
+ "@lerna/command" "^3.0.0-beta.21"
+ "@lerna/filter-options" "^3.0.0-beta.18"
+ "@lerna/validation-error" "^3.0.0-beta.10"
+ dedent "^0.7.0"
+ npm-package-arg "^6.0.0"
+ p-map "^1.2.0"
+ package-json "^4.0.1"
+ semver "^5.5.0"
+
+"@lerna/batch-packages@^3.0.0-beta.18":
+ version "3.0.0-beta.18"
+ resolved "https://registry.yarnpkg.com/@lerna/batch-packages/-/batch-packages-3.0.0-beta.18.tgz#69d5e3f5003e454a1615c38d9f0b65b10853625a"
+ dependencies:
+ "@lerna/package-graph" "^3.0.0-beta.18"
+ "@lerna/validation-error" "^3.0.0-beta.10"
+ npmlog "^4.1.2"
+
+"@lerna/bootstrap@^3.0.0-beta.21":
+ version "3.0.0-beta.21"
+ resolved "https://registry.yarnpkg.com/@lerna/bootstrap/-/bootstrap-3.0.0-beta.21.tgz#de9233d0c7f9881bc7c27948e515f34d47f27710"
+ dependencies:
+ "@lerna/batch-packages" "^3.0.0-beta.18"
+ "@lerna/command" "^3.0.0-beta.21"
+ "@lerna/filter-options" "^3.0.0-beta.18"
+ "@lerna/npm-conf" "^3.0.0-beta.19"
+ "@lerna/npm-install" "^3.0.0-beta.21"
+ "@lerna/rimraf-dir" "^3.0.0-beta.21"
+ "@lerna/run-lifecycle" "^3.0.0-beta.0"
+ "@lerna/run-parallel-batches" "^3.0.0-beta.0"
+ "@lerna/symlink-binary" "^3.0.0-beta.17"
+ "@lerna/symlink-dependencies" "^3.0.0-beta.17"
+ "@lerna/validation-error" "^3.0.0-beta.10"
+ dedent "^0.7.0"
+ get-port "^3.2.0"
+ multimatch "^2.1.0"
+ npm-package-arg "^6.0.0"
+ npmlog "^4.1.2"
+ p-finally "^1.0.0"
+ p-map "^1.2.0"
+ p-map-series "^1.0.0"
+ p-waterfall "^1.0.0"
+ read-package-tree "^5.1.6"
+ semver "^5.5.0"
+
+"@lerna/changed@^3.0.0-beta.21":
+ version "3.0.0-beta.21"
+ resolved "https://registry.yarnpkg.com/@lerna/changed/-/changed-3.0.0-beta.21.tgz#e768dba7573dbc9cfb96c4f47ae9efcec4cb5d65"
+ dependencies:
+ "@lerna/collect-updates" "^3.0.0-beta.21"
+ "@lerna/command" "^3.0.0-beta.21"
+ "@lerna/output" "^3.0.0-beta.0"
+ "@lerna/publish" "^3.0.0-beta.21"
+ chalk "^2.3.1"
+
+"@lerna/child-process@^3.0.0-beta.21":
+ version "3.0.0-beta.21"
+ resolved "https://registry.yarnpkg.com/@lerna/child-process/-/child-process-3.0.0-beta.21.tgz#9fb32cb79ee75bf0806141bac5fc64bb38aa2dbd"
+ dependencies:
+ chalk "^2.3.1"
+ execa "^0.10.0"
+ strong-log-transformer "^1.0.6"
+
+"@lerna/clean@^3.0.0-beta.21":
+ version "3.0.0-beta.21"
+ resolved "https://registry.yarnpkg.com/@lerna/clean/-/clean-3.0.0-beta.21.tgz#e31ff8edce00fe6eea9fb68e6057630392da1f1e"
+ dependencies:
+ "@lerna/command" "^3.0.0-beta.21"
+ "@lerna/filter-options" "^3.0.0-beta.18"
+ "@lerna/prompt" "^3.0.0-beta.0"
+ "@lerna/rimraf-dir" "^3.0.0-beta.21"
+ p-map "^1.2.0"
+ p-map-series "^1.0.0"
+ p-waterfall "^1.0.0"
+
+"@lerna/cli@^3.0.0-beta.14":
+ version "3.0.0-beta.21"
+ resolved "https://registry.yarnpkg.com/@lerna/cli/-/cli-3.0.0-beta.21.tgz#ba4cd8512a851fedcdd45028d05c9e739ebc6feb"
+ dependencies:
+ "@lerna/add" "^3.0.0-beta.21"
+ "@lerna/bootstrap" "^3.0.0-beta.21"
+ "@lerna/changed" "^3.0.0-beta.21"
+ "@lerna/clean" "^3.0.0-beta.21"
+ "@lerna/create" "^3.0.0-beta.21"
+ "@lerna/diff" "^3.0.0-beta.21"
+ "@lerna/exec" "^3.0.0-beta.21"
+ "@lerna/global-options" "^3.0.0-beta.13"
+ "@lerna/import" "^3.0.0-beta.21"
+ "@lerna/init" "^3.0.0-beta.21"
+ "@lerna/link" "^3.0.0-beta.21"
+ "@lerna/list" "^3.0.0-beta.21"
+ "@lerna/publish" "^3.0.0-beta.21"
+ "@lerna/run" "^3.0.0-beta.21"
+ dedent "^0.7.0"
+ is-ci "^1.0.10"
+ npmlog "^4.1.2"
+ yargs "^11.0.0"
+
+"@lerna/collect-packages@^3.0.0-beta.17":
+ version "3.0.0-beta.17"
+ resolved "https://registry.yarnpkg.com/@lerna/collect-packages/-/collect-packages-3.0.0-beta.17.tgz#c4965df6328e191947dbcaa37c8c76ac89b515f8"
+ dependencies:
+ "@lerna/package" "^3.0.0-beta.17"
+ "@lerna/validation-error" "^3.0.0-beta.10"
+ globby "^8.0.1"
+ load-json-file "^4.0.0"
+ p-map "^1.2.0"
+
+"@lerna/collect-updates@^3.0.0-beta.21":
+ version "3.0.0-beta.21"
+ resolved "https://registry.yarnpkg.com/@lerna/collect-updates/-/collect-updates-3.0.0-beta.21.tgz#92d165476e586222e6edd5d3b61c26e838ccd7ee"
+ dependencies:
+ "@lerna/child-process" "^3.0.0-beta.21"
+ minimatch "^3.0.4"
+ npmlog "^4.1.2"
+ semver "^5.5.0"
+ slash "^1.0.0"
+
+"@lerna/command@^3.0.0-beta.21":
+ version "3.0.0-beta.21"
+ resolved "https://registry.yarnpkg.com/@lerna/command/-/command-3.0.0-beta.21.tgz#da4d3895e4ad458ffc2c8508156762785bcabc41"
+ dependencies:
+ "@lerna/child-process" "^3.0.0-beta.21"
+ "@lerna/collect-packages" "^3.0.0-beta.17"
+ "@lerna/collect-updates" "^3.0.0-beta.21"
+ "@lerna/filter-packages" "^3.0.0-beta.10"
+ "@lerna/package-graph" "^3.0.0-beta.18"
+ "@lerna/project" "^3.0.0-beta.20"
+ "@lerna/validation-error" "^3.0.0-beta.10"
+ "@lerna/write-log-file" "^3.0.0-beta.0"
+ dedent "^0.7.0"
+ execa "^0.10.0"
+ lodash "^4.17.5"
+ npmlog "^4.1.2"
+
+"@lerna/conventional-commits@^3.0.0-beta.15":
+ version "3.0.0-beta.15"
+ resolved "https://registry.yarnpkg.com/@lerna/conventional-commits/-/conventional-commits-3.0.0-beta.15.tgz#42536ec435a20016205a0d30a683692bc1b93c98"
+ dependencies:
+ "@lerna/validation-error" "^3.0.0-beta.10"
+ conventional-changelog-angular "^1.6.6"
+ conventional-changelog-core "^2.0.5"
+ conventional-recommended-bump "^2.0.6"
+ dedent "^0.7.0"
+ fs-extra "^5.0.0"
+ get-stream "^3.0.0"
+ npm-package-arg "^6.0.0"
+ npmlog "^4.1.2"
+ semver "^5.5.0"
+
+"@lerna/create-symlink@^3.0.0-beta.0":
+ version "3.0.0-beta.0"
+ resolved "https://registry.yarnpkg.com/@lerna/create-symlink/-/create-symlink-3.0.0-beta.0.tgz#99457b7f636d35a665a2de3cae79c2c45045a0df"
+ dependencies:
+ cmd-shim "^2.0.2"
+ fs-extra "^5.0.0"
+ npmlog "^4.1.2"
+
+"@lerna/create@^3.0.0-beta.21":
+ version "3.0.0-beta.21"
+ resolved "https://registry.yarnpkg.com/@lerna/create/-/create-3.0.0-beta.21.tgz#53d86397403c12f350c859e30e2a582aed16612e"
+ dependencies:
+ "@lerna/child-process" "^3.0.0-beta.21"
+ "@lerna/command" "^3.0.0-beta.21"
+ "@lerna/npm-conf" "^3.0.0-beta.19"
+ "@lerna/validation-error" "^3.0.0-beta.10"
+ camelcase "^4.1.0"
+ dedent "^0.7.0"
+ fs-extra "^5.0.0"
+ globby "^8.0.1"
+ init-package-json "^1.10.3"
+ npm-package-arg "^6.0.0"
+ pify "^3.0.0"
+ semver "^5.5.0"
+ slash "^1.0.0"
+ validate-npm-package-license "^3.0.3"
+ validate-npm-package-name "^3.0.0"
+
+"@lerna/diff@^3.0.0-beta.21":
+ version "3.0.0-beta.21"
+ resolved "https://registry.yarnpkg.com/@lerna/diff/-/diff-3.0.0-beta.21.tgz#39c5842b425135e8d6cffbe0eb2e7a1a08faf048"
+ dependencies:
+ "@lerna/child-process" "^3.0.0-beta.21"
+ "@lerna/command" "^3.0.0-beta.21"
+ "@lerna/validation-error" "^3.0.0-beta.10"
+ npmlog "^4.1.2"
+
+"@lerna/exec@^3.0.0-beta.21":
+ version "3.0.0-beta.21"
+ resolved "https://registry.yarnpkg.com/@lerna/exec/-/exec-3.0.0-beta.21.tgz#5bbdd1b1ed22c42224f1ed21fe0873003182b0ec"
+ dependencies:
+ "@lerna/batch-packages" "^3.0.0-beta.18"
+ "@lerna/child-process" "^3.0.0-beta.21"
+ "@lerna/command" "^3.0.0-beta.21"
+ "@lerna/filter-options" "^3.0.0-beta.18"
+ "@lerna/run-parallel-batches" "^3.0.0-beta.0"
+ "@lerna/validation-error" "^3.0.0-beta.10"
+
+"@lerna/filter-options@^3.0.0-beta.18":
+ version "3.0.0-beta.18"
+ resolved "https://registry.yarnpkg.com/@lerna/filter-options/-/filter-options-3.0.0-beta.18.tgz#f4014951ec7f58446ee0e29c0fb62c553433530a"
+ dependencies:
+ dedent "^0.7.0"
+
+"@lerna/filter-packages@^3.0.0-beta.10":
+ version "3.0.0-beta.10"
+ resolved "https://registry.yarnpkg.com/@lerna/filter-packages/-/filter-packages-3.0.0-beta.10.tgz#793a9f53964d2a1e2292fec63a2d337a559b7a78"
+ dependencies:
+ "@lerna/validation-error" "^3.0.0-beta.10"
+ multimatch "^2.1.0"
+ npmlog "^4.1.2"
+
+"@lerna/get-npm-exec-opts@^3.0.0-beta.21":
+ version "3.0.0-beta.21"
+ resolved "https://registry.yarnpkg.com/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-3.0.0-beta.21.tgz#ca2c721411a95ee3c1fb0292ebd89d1855706557"
+ dependencies:
+ npmlog "^4.1.2"
+
+"@lerna/global-options@^3.0.0-beta.13":
+ version "3.0.0-beta.13"
+ resolved "https://registry.yarnpkg.com/@lerna/global-options/-/global-options-3.0.0-beta.13.tgz#4ca84443056f0dce3f4a55528ad5345237675f3a"
+
+"@lerna/import@^3.0.0-beta.21":
+ version "3.0.0-beta.21"
+ resolved "https://registry.yarnpkg.com/@lerna/import/-/import-3.0.0-beta.21.tgz#a459988605986c75e017f45d4657d47e0aefc0b1"
+ dependencies:
+ "@lerna/child-process" "^3.0.0-beta.21"
+ "@lerna/command" "^3.0.0-beta.21"
+ "@lerna/prompt" "^3.0.0-beta.0"
+ "@lerna/validation-error" "^3.0.0-beta.10"
+ dedent "^0.7.0"
+ fs-extra "^5.0.0"
+ p-map-series "^1.0.0"
+
+"@lerna/init@^3.0.0-beta.21":
+ version "3.0.0-beta.21"
+ resolved "https://registry.yarnpkg.com/@lerna/init/-/init-3.0.0-beta.21.tgz#7cf225b7d2add644fc262408df8cd5c9861c81bb"
+ dependencies:
+ "@lerna/child-process" "^3.0.0-beta.21"
+ "@lerna/command" "^3.0.0-beta.21"
+ fs-extra "^5.0.0"
+ p-map "^1.2.0"
+ write-json-file "^2.3.0"
+
+"@lerna/link@^3.0.0-beta.21":
+ version "3.0.0-beta.21"
+ resolved "https://registry.yarnpkg.com/@lerna/link/-/link-3.0.0-beta.21.tgz#5fd5435092e17a0e558a81b5b0c2422486232ba3"
+ dependencies:
+ "@lerna/command" "^3.0.0-beta.21"
+ "@lerna/package-graph" "^3.0.0-beta.18"
+ "@lerna/symlink-dependencies" "^3.0.0-beta.17"
+ p-map "^1.2.0"
+ slash "^1.0.0"
+
+"@lerna/list@^3.0.0-beta.21":
+ version "3.0.0-beta.21"
+ resolved "https://registry.yarnpkg.com/@lerna/list/-/list-3.0.0-beta.21.tgz#840866592a6460302a4587da3aa4e5d3850eb8b9"
+ dependencies:
+ "@lerna/command" "^3.0.0-beta.21"
+ "@lerna/filter-options" "^3.0.0-beta.18"
+ "@lerna/output" "^3.0.0-beta.0"
+ chalk "^2.3.1"
+ columnify "^1.5.4"
+
+"@lerna/npm-conf@^3.0.0-beta.19":
+ version "3.0.0-beta.19"
+ resolved "https://registry.yarnpkg.com/@lerna/npm-conf/-/npm-conf-3.0.0-beta.19.tgz#957f164a33e958e60a1c1c70a2879e9fa1bb08b2"
+ dependencies:
+ config-chain "^1.1.11"
+ pify "^3.0.0"
+
+"@lerna/npm-dist-tag@^3.0.0-beta.21":
+ version "3.0.0-beta.21"
+ resolved "https://registry.yarnpkg.com/@lerna/npm-dist-tag/-/npm-dist-tag-3.0.0-beta.21.tgz#c15a2dc7c57d3f50b590b206e0ebb66d4eb47a7f"
+ dependencies:
+ "@lerna/child-process" "^3.0.0-beta.21"
+ "@lerna/get-npm-exec-opts" "^3.0.0-beta.21"
+ npmlog "^4.1.2"
+
+"@lerna/npm-install@^3.0.0-beta.21":
+ version "3.0.0-beta.21"
+ resolved "https://registry.yarnpkg.com/@lerna/npm-install/-/npm-install-3.0.0-beta.21.tgz#726057f1bd684ad9fa6f87a70d9c246b966e7491"
+ dependencies:
+ "@lerna/child-process" "^3.0.0-beta.21"
+ "@lerna/get-npm-exec-opts" "^3.0.0-beta.21"
+ fs-extra "^5.0.0"
+ npm-package-arg "^6.0.0"
+ npmlog "^4.1.2"
+ signal-exit "^3.0.2"
+ write-pkg "^3.1.0"
+
+"@lerna/npm-publish@^3.0.0-beta.21":
+ version "3.0.0-beta.21"
+ resolved "https://registry.yarnpkg.com/@lerna/npm-publish/-/npm-publish-3.0.0-beta.21.tgz#25a65820a6036c72fb37c914fa0fb2d615346e1d"
+ dependencies:
+ "@lerna/child-process" "^3.0.0-beta.21"
+ "@lerna/get-npm-exec-opts" "^3.0.0-beta.21"
+ npmlog "^4.1.2"
+
+"@lerna/npm-run-script@^3.0.0-beta.21":
+ version "3.0.0-beta.21"
+ resolved "https://registry.yarnpkg.com/@lerna/npm-run-script/-/npm-run-script-3.0.0-beta.21.tgz#8f45cbee40061946942a5184f09a2b086c41fe0b"
+ dependencies:
+ "@lerna/child-process" "^3.0.0-beta.21"
+ "@lerna/get-npm-exec-opts" "^3.0.0-beta.21"
+ npmlog "^4.1.2"
+
+"@lerna/output@^3.0.0-beta.0":
+ version "3.0.0-beta.0"
+ resolved "https://registry.yarnpkg.com/@lerna/output/-/output-3.0.0-beta.0.tgz#0fba8a24f425ac6705b4949ab90f74aae05955bc"
+ dependencies:
+ npmlog "^4.1.2"
+
+"@lerna/package-graph@^3.0.0-beta.18":
+ version "3.0.0-beta.18"
+ resolved "https://registry.yarnpkg.com/@lerna/package-graph/-/package-graph-3.0.0-beta.18.tgz#8c33a6a10453d310e14fc9d317dc51e845e11963"
+ dependencies:
+ npm-package-arg "^6.0.0"
+ semver "^5.5.0"
+
+"@lerna/package@^3.0.0-beta.17":
+ version "3.0.0-beta.17"
+ resolved "https://registry.yarnpkg.com/@lerna/package/-/package-3.0.0-beta.17.tgz#ccc833926ddfce5cac6194d2e6b415899a8e753e"
+ dependencies:
+ npm-package-arg "^6.0.0"
+ write-pkg "^3.1.0"
+
+"@lerna/project@^3.0.0-beta.20":
+ version "3.0.0-beta.20"
+ resolved "https://registry.yarnpkg.com/@lerna/project/-/project-3.0.0-beta.20.tgz#27a0330b7b13d8eebe9266f03eb60de94b15c86d"
+ dependencies:
+ "@lerna/package" "^3.0.0-beta.17"
+ "@lerna/validation-error" "^3.0.0-beta.10"
+ cosmiconfig "^5.0.2"
+ dedent "^0.7.0"
+ dot-prop "^4.2.0"
+ glob-parent "^3.1.0"
+ load-json-file "^4.0.0"
+ npmlog "^4.1.2"
+ resolve-from "^4.0.0"
+ write-json-file "^2.3.0"
+
+"@lerna/prompt@^3.0.0-beta.0":
+ version "3.0.0-beta.0"
+ resolved "https://registry.yarnpkg.com/@lerna/prompt/-/prompt-3.0.0-beta.0.tgz#f1baa4d1fe30eef4cf3f2add49aac917cfc1368b"
+ dependencies:
+ inquirer "^5.1.0"
+ npmlog "^4.1.2"
+
+"@lerna/publish@^3.0.0-beta.21":
+ version "3.0.0-beta.21"
+ resolved "https://registry.yarnpkg.com/@lerna/publish/-/publish-3.0.0-beta.21.tgz#8d2563793ba5b2e8f9914e799746b5a711adbc5f"
+ dependencies:
+ "@lerna/batch-packages" "^3.0.0-beta.18"
+ "@lerna/child-process" "^3.0.0-beta.21"
+ "@lerna/collect-updates" "^3.0.0-beta.21"
+ "@lerna/command" "^3.0.0-beta.21"
+ "@lerna/conventional-commits" "^3.0.0-beta.15"
+ "@lerna/npm-conf" "^3.0.0-beta.19"
+ "@lerna/npm-dist-tag" "^3.0.0-beta.21"
+ "@lerna/npm-publish" "^3.0.0-beta.21"
+ "@lerna/output" "^3.0.0-beta.0"
+ "@lerna/prompt" "^3.0.0-beta.0"
+ "@lerna/run-lifecycle" "^3.0.0-beta.0"
+ "@lerna/run-parallel-batches" "^3.0.0-beta.0"
+ "@lerna/validation-error" "^3.0.0-beta.10"
+ chalk "^2.3.1"
+ dedent "^0.7.0"
+ minimatch "^3.0.4"
+ npmlog "^4.1.2"
+ p-finally "^1.0.0"
+ p-map "^1.2.0"
+ p-reduce "^1.0.0"
+ p-waterfall "^1.0.0"
+ semver "^5.5.0"
+ slash "^1.0.0"
+ temp-write "^3.4.0"
+ write-json-file "^2.3.0"
+
+"@lerna/resolve-symlink@^3.0.0-beta.0":
+ version "3.0.0-beta.0"
+ resolved "https://registry.yarnpkg.com/@lerna/resolve-symlink/-/resolve-symlink-3.0.0-beta.0.tgz#ca170d8190acf915c5160dc19111543989191987"
+ dependencies:
+ fs-extra "^5.0.0"
+ npmlog "^4.1.2"
+ read-cmd-shim "^1.0.1"
+
+"@lerna/rimraf-dir@^3.0.0-beta.21":
+ version "3.0.0-beta.21"
+ resolved "https://registry.yarnpkg.com/@lerna/rimraf-dir/-/rimraf-dir-3.0.0-beta.21.tgz#006b4e61e8d76e369e3749936862fb182def1dff"
+ dependencies:
+ "@lerna/child-process" "^3.0.0-beta.21"
+ npmlog "^4.1.2"
+ path-exists "^3.0.0"
+ rimraf "^2.6.2"
+
+"@lerna/run-lifecycle@^3.0.0-beta.0":
+ version "3.0.0-beta.0"
+ resolved "https://registry.yarnpkg.com/@lerna/run-lifecycle/-/run-lifecycle-3.0.0-beta.0.tgz#b30442df543dcfafa863c854c2d7338fe3bd13b3"
+ dependencies:
+ npm-lifecycle "^2.0.0"
+ npmlog "^4.1.2"
+
+"@lerna/run-parallel-batches@^3.0.0-beta.0":
+ version "3.0.0-beta.0"
+ resolved "https://registry.yarnpkg.com/@lerna/run-parallel-batches/-/run-parallel-batches-3.0.0-beta.0.tgz#24d69314ad0fd6fa65c70d239b4f2ccdd08a2eeb"
+ dependencies:
+ p-map "^1.2.0"
+ p-map-series "^1.0.0"
+
+"@lerna/run@^3.0.0-beta.21":
+ version "3.0.0-beta.21"
+ resolved "https://registry.yarnpkg.com/@lerna/run/-/run-3.0.0-beta.21.tgz#f7fce5d1b1043a48b0bf33a7565527ee6e26061e"
+ dependencies:
+ "@lerna/batch-packages" "^3.0.0-beta.18"
+ "@lerna/command" "^3.0.0-beta.21"
+ "@lerna/filter-options" "^3.0.0-beta.18"
+ "@lerna/npm-run-script" "^3.0.0-beta.21"
+ "@lerna/output" "^3.0.0-beta.0"
+ "@lerna/run-parallel-batches" "^3.0.0-beta.0"
+ "@lerna/validation-error" "^3.0.0-beta.10"
+ p-map "^1.2.0"
+
+"@lerna/symlink-binary@^3.0.0-beta.17":
+ version "3.0.0-beta.17"
+ resolved "https://registry.yarnpkg.com/@lerna/symlink-binary/-/symlink-binary-3.0.0-beta.17.tgz#e0be4394ee4e828a496aa8b9f8f48084ed7cb0f3"
+ dependencies:
+ "@lerna/create-symlink" "^3.0.0-beta.0"
+ "@lerna/package" "^3.0.0-beta.17"
+ fs-extra "^5.0.0"
+ p-map "^1.2.0"
+ read-pkg "^3.0.0"
+
+"@lerna/symlink-dependencies@^3.0.0-beta.17":
+ version "3.0.0-beta.17"
+ resolved "https://registry.yarnpkg.com/@lerna/symlink-dependencies/-/symlink-dependencies-3.0.0-beta.17.tgz#82d3f2d5b76606772773d306e7640fcf309b8c56"
+ dependencies:
+ "@lerna/create-symlink" "^3.0.0-beta.0"
+ "@lerna/resolve-symlink" "^3.0.0-beta.0"
+ "@lerna/symlink-binary" "^3.0.0-beta.17"
+ fs-extra "^5.0.0"
+ p-finally "^1.0.0"
+ p-map "^1.2.0"
+ p-map-series "^1.0.0"
+
+"@lerna/validation-error@^3.0.0-beta.10":
+ version "3.0.0-beta.10"
+ resolved "https://registry.yarnpkg.com/@lerna/validation-error/-/validation-error-3.0.0-beta.10.tgz#cf5cbc39c4d27b89c6080e326de745f6fb7451ab"
+ dependencies:
+ npmlog "^4.1.2"
+
+"@lerna/write-log-file@^3.0.0-beta.0":
+ version "3.0.0-beta.0"
+ resolved "https://registry.yarnpkg.com/@lerna/write-log-file/-/write-log-file-3.0.0-beta.0.tgz#e128fee7cd7cb218ed767598ac45c6d2db5c6c89"
+ dependencies:
+ npmlog "^4.1.2"
+ write-file-atomic "^2.3.0"
+
"@mrmlnc/readdir-enhanced@^2.2.1":
version "2.2.1"
resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde"
@@ -534,10 +1068,18 @@
version "2.3.7"
resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-2.3.7.tgz#e92c2fed3297eae078d78d1da032b26788b4af86"
+"@types/sleep@^0.0.7":
+ version "0.0.7"
+ resolved "https://registry.yarnpkg.com/@types/sleep/-/sleep-0.0.7.tgz#0572b5d06978b4305671c614b0f68b4640ce7d43"
+
"@types/solidity-parser-antlr@^0.2.1":
version "0.2.1"
resolved "https://registry.yarnpkg.com/@types/solidity-parser-antlr/-/solidity-parser-antlr-0.2.1.tgz#29ff386773a72a06c8a9c40c666d2a1cea53c2ed"
+"@types/tmp@^0.0.33":
+ version "0.0.33"
+ resolved "https://registry.yarnpkg.com/@types/tmp/-/tmp-0.0.33.tgz#1073c4bc824754ae3d10cfab88ab0237ba964e4d"
+
"@types/uuid@^3.4.2":
version "3.4.3"
resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-3.4.3.tgz#121ace265f5569ce40f4f6d0ff78a338c732a754"
@@ -548,10 +1090,11 @@
version "1.0.2"
resolved "https://registry.yarnpkg.com/@types/valid-url/-/valid-url-1.0.2.tgz#60fa435ce24bfd5ba107b8d2a80796aeaf3a8f45"
-"@types/websocket@^0.0.34":
- version "0.0.34"
- resolved "https://registry.yarnpkg.com/@types/websocket/-/websocket-0.0.34.tgz#25596764cec885eda070fdb6d19cd76fe582747c"
+"@types/websocket@^0.0.39":
+ version "0.0.39"
+ resolved "https://registry.yarnpkg.com/@types/websocket/-/websocket-0.0.39.tgz#aa971e24f9c1455fe2a57ee3e69c7d395016b12a"
dependencies:
+ "@types/events" "*"
"@types/node" "*"
"@types/yargs@^10.0.0":
@@ -646,10 +1189,6 @@ acorn@^5.5.0:
version "5.7.1"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.1.tgz#f095829297706a7c9776958c0afc8930a9b9d9d8"
-add-stream@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa"
-
aes-js@3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d"
@@ -904,7 +1443,7 @@ arrify@^1.0.0, arrify@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
-asap@~2.0.3:
+asap@^2.0.0, asap@~2.0.3:
version "2.0.6"
resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
@@ -1825,7 +2364,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"
@@ -2024,6 +2563,10 @@ browser-stdout@1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f"
+browser-stdout@1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60"
+
browserify-aes@^1.0.0, browserify-aes@^1.0.4, browserify-aes@^1.0.6:
version "1.2.0"
resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48"
@@ -2186,6 +2729,10 @@ builtin-status-codes@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
+builtins@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88"
+
byline@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1"
@@ -2714,10 +3261,6 @@ combined-stream@1.0.6, combined-stream@^1.0.5, combined-stream@~1.0.5:
dependencies:
delayed-stream "~1.0.0"
-command-join@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/command-join/-/command-join-2.0.0.tgz#52e8b984f4872d952ff1bdc8b98397d27c7144cf"
-
commander@2.11.0:
version "2.11.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563"
@@ -2730,7 +3273,7 @@ commander@2.13.0, commander@~2.13.0:
version "2.13.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c"
-commander@^2.12.1, commander@^2.8.1, commander@^2.9.0:
+commander@2.15.1, commander@^2.12.1, commander@^2.8.1:
version "2.15.1"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f"
@@ -2781,7 +3324,7 @@ concat-map@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
-concat-stream@^1.4.10, concat-stream@^1.5.0:
+concat-stream@^1.5.0:
version "1.6.1"
resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.1.tgz#261b8f518301f1d834e36342b9fea095d2620a26"
dependencies:
@@ -2798,6 +3341,13 @@ concat-stream@^1.5.1, concat-stream@^1.6.0:
readable-stream "^2.2.2"
typedarray "^0.0.6"
+config-chain@^1.1.11:
+ version "1.1.11"
+ resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.11.tgz#aba09747dfbe4c3e70e766a6e41586e1859fc6f2"
+ dependencies:
+ ini "^1.3.4"
+ proto-list "~1.2.1"
+
configstore@^3.0.0:
version "3.1.2"
resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.2.tgz#c6f25defaeef26df12dd33414b001fe81a543f8f"
@@ -2842,29 +3392,7 @@ conventional-changelog-angular@^1.6.6:
compare-func "^1.3.1"
q "^1.5.1"
-conventional-changelog-atom@^0.2.8:
- version "0.2.8"
- resolved "https://registry.yarnpkg.com/conventional-changelog-atom/-/conventional-changelog-atom-0.2.8.tgz#8037693455990e3256f297320a45fa47ee553a14"
- dependencies:
- q "^1.5.1"
-
-conventional-changelog-cli@^1.3.13:
- version "1.3.22"
- resolved "https://registry.yarnpkg.com/conventional-changelog-cli/-/conventional-changelog-cli-1.3.22.tgz#13570fe1728f56f013ff7a88878ff49d5162a405"
- dependencies:
- add-stream "^1.0.0"
- conventional-changelog "^1.1.24"
- lodash "^4.2.1"
- meow "^4.0.0"
- tempfile "^1.1.1"
-
-conventional-changelog-codemirror@^0.3.8:
- version "0.3.8"
- resolved "https://registry.yarnpkg.com/conventional-changelog-codemirror/-/conventional-changelog-codemirror-0.3.8.tgz#a1982c8291f4ee4d6f2f62817c6b2ecd2c4b7b47"
- dependencies:
- q "^1.5.1"
-
-conventional-changelog-core@^2.0.11:
+conventional-changelog-core@^2.0.5:
version "2.0.11"
resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-2.0.11.tgz#19b5fbd55a9697773ed6661f4e32030ed7e30287"
dependencies:
@@ -2882,43 +3410,6 @@ conventional-changelog-core@^2.0.11:
read-pkg-up "^1.0.1"
through2 "^2.0.0"
-conventional-changelog-ember@^0.3.12:
- version "0.3.12"
- resolved "https://registry.yarnpkg.com/conventional-changelog-ember/-/conventional-changelog-ember-0.3.12.tgz#b7d31851756d0fcb49b031dffeb6afa93b202400"
- dependencies:
- q "^1.5.1"
-
-conventional-changelog-eslint@^1.0.9:
- version "1.0.9"
- resolved "https://registry.yarnpkg.com/conventional-changelog-eslint/-/conventional-changelog-eslint-1.0.9.tgz#b13cc7e4b472c819450ede031ff1a75c0e3d07d3"
- dependencies:
- q "^1.5.1"
-
-conventional-changelog-express@^0.3.6:
- version "0.3.6"
- resolved "https://registry.yarnpkg.com/conventional-changelog-express/-/conventional-changelog-express-0.3.6.tgz#4a6295cb11785059fb09202180d0e59c358b9c2c"
- dependencies:
- q "^1.5.1"
-
-conventional-changelog-jquery@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/conventional-changelog-jquery/-/conventional-changelog-jquery-0.1.0.tgz#0208397162e3846986e71273b6c79c5b5f80f510"
- dependencies:
- q "^1.4.1"
-
-conventional-changelog-jscs@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/conventional-changelog-jscs/-/conventional-changelog-jscs-0.1.0.tgz#0479eb443cc7d72c58bf0bcf0ef1d444a92f0e5c"
- dependencies:
- q "^1.4.1"
-
-conventional-changelog-jshint@^0.3.8:
- version "0.3.8"
- resolved "https://registry.yarnpkg.com/conventional-changelog-jshint/-/conventional-changelog-jshint-0.3.8.tgz#9051c1ac0767abaf62a31f74d2fe8790e8acc6c8"
- dependencies:
- compare-func "^1.3.1"
- q "^1.5.1"
-
conventional-changelog-preset-loader@^1.1.8:
version "1.1.8"
resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-1.1.8.tgz#40bb0f142cd27d16839ec6c74ee8db418099b373"
@@ -2938,30 +3429,14 @@ conventional-changelog-writer@^3.0.9:
split "^1.0.0"
through2 "^2.0.0"
-conventional-changelog@^1.1.24:
- version "1.1.24"
- resolved "https://registry.yarnpkg.com/conventional-changelog/-/conventional-changelog-1.1.24.tgz#3d94c29c960f5261c002678315b756cdd3d7d1f0"
- dependencies:
- conventional-changelog-angular "^1.6.6"
- conventional-changelog-atom "^0.2.8"
- conventional-changelog-codemirror "^0.3.8"
- conventional-changelog-core "^2.0.11"
- conventional-changelog-ember "^0.3.12"
- conventional-changelog-eslint "^1.0.9"
- conventional-changelog-express "^0.3.6"
- conventional-changelog-jquery "^0.1.0"
- conventional-changelog-jscs "^0.1.0"
- conventional-changelog-jshint "^0.3.8"
- conventional-changelog-preset-loader "^1.1.8"
-
-conventional-commits-filter@^1.1.1, conventional-commits-filter@^1.1.6:
+conventional-commits-filter@^1.1.6:
version "1.1.6"
resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-1.1.6.tgz#4389cd8e58fe89750c0b5fb58f1d7f0cc8ad3831"
dependencies:
is-subset "^0.1.1"
modify-values "^1.0.0"
-conventional-commits-parser@^2.1.1, conventional-commits-parser@^2.1.7:
+conventional-commits-parser@^2.1.7:
version "2.1.7"
resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-2.1.7.tgz#eca45ed6140d72ba9722ee4132674d639e644e8e"
dependencies:
@@ -2973,17 +3448,18 @@ conventional-commits-parser@^2.1.1, conventional-commits-parser@^2.1.7:
through2 "^2.0.0"
trim-off-newlines "^1.0.0"
-conventional-recommended-bump@^1.2.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-1.2.1.tgz#1b7137efb5091f99fe009e2fe9ddb7cc490e9375"
+conventional-recommended-bump@^2.0.6:
+ version "2.0.9"
+ resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-2.0.9.tgz#7392421e7d0e3515f3df2040572a23cc73a68a93"
dependencies:
- concat-stream "^1.4.10"
- conventional-commits-filter "^1.1.1"
- conventional-commits-parser "^2.1.1"
- git-raw-commits "^1.3.0"
- git-semver-tags "^1.3.0"
- meow "^3.3.0"
- object-assign "^4.0.1"
+ concat-stream "^1.6.0"
+ conventional-changelog-preset-loader "^1.1.8"
+ conventional-commits-filter "^1.1.6"
+ conventional-commits-parser "^2.1.7"
+ git-raw-commits "^1.3.6"
+ git-semver-tags "^1.3.6"
+ meow "^4.0.0"
+ q "^1.5.1"
convert-source-map@^1.5.0, convert-source-map@^1.5.1:
version "1.5.1"
@@ -3076,6 +3552,14 @@ cors@^2.8.1:
object-assign "^4"
vary "^1"
+cosmiconfig@^5.0.2:
+ version "5.0.5"
+ resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.0.5.tgz#a809e3c2306891ce17ab70359dc8bdf661fe2cd0"
+ dependencies:
+ is-directory "^0.3.1"
+ js-yaml "^3.9.0"
+ parse-json "^4.0.0"
+
coveralls@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-3.0.0.tgz#22ef730330538080d29b8c151dc9146afde88a99"
@@ -3157,7 +3641,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.0, 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:
@@ -3418,6 +3902,10 @@ debug@3.1.0, debug@^3.1.0:
dependencies:
ms "2.0.0"
+debuglog@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492"
+
decache@^3.0.5:
version "3.1.0"
resolved "https://registry.yarnpkg.com/decache/-/decache-3.1.0.tgz#4f5036fbd6581fcc97237ac3954a244b9536c2da"
@@ -3683,15 +4171,22 @@ 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"
+dezalgo@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456"
+ dependencies:
+ asap "^2.0.0"
+ wrappy "1"
+
diff@3.3.1:
version "3.3.1"
resolved "https://registry.yarnpkg.com/diff/-/diff-3.3.1.tgz#aa8567a6eed03c531fc89d3f711cd0e5259dec75"
-diff@^3.1.0, diff@^3.2.0, diff@^3.3.1, diff@^3.5.0:
+diff@3.5.0, diff@^3.1.0, diff@^3.2.0, diff@^3.3.1, diff@^3.5.0:
version "3.5.0"
resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12"
@@ -3790,7 +4285,7 @@ dot-prop@^3.0.0:
dependencies:
is-obj "^1.0.0"
-dot-prop@^4.1.0:
+dot-prop@^4.1.0, dot-prop@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57"
dependencies:
@@ -4565,11 +5060,11 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
md5.js "^1.3.4"
safe-buffer "^5.1.1"
-execa@^0.7.0:
- version "0.7.0"
- resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777"
+execa@^0.10.0:
+ version "0.10.0"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-0.10.0.tgz#ff456a8f53f90f8eccc71a96d11bdfc7f082cb50"
dependencies:
- cross-spawn "^5.0.1"
+ cross-spawn "^6.0.0"
get-stream "^3.0.0"
is-stream "^1.1.0"
npm-run-path "^2.0.0"
@@ -4577,9 +5072,9 @@ execa@^0.7.0:
signal-exit "^3.0.0"
strip-eof "^1.0.0"
-execa@^0.8.0:
- version "0.8.0"
- resolved "https://registry.yarnpkg.com/execa/-/execa-0.8.0.tgz#d8d76bbc1b55217ed190fd6dd49d3c774ecfc8da"
+execa@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777"
dependencies:
cross-spawn "^5.0.1"
get-stream "^3.0.0"
@@ -5082,7 +5577,7 @@ fs-extra@^2.0.0, fs-extra@^2.1.2:
graceful-fs "^4.1.2"
jsonfile "^2.1.0"
-fs-extra@^4.0.0, fs-extra@^4.0.1:
+fs-extra@^4.0.0:
version "4.0.3"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94"
dependencies:
@@ -5294,7 +5789,7 @@ ghauth@^2.0.0:
read "~1.0.5"
xtend "~4.0.0"
-git-raw-commits@^1.3.0, git-raw-commits@^1.3.6:
+git-raw-commits@^1.3.6:
version "1.3.6"
resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-1.3.6.tgz#27c35a32a67777c1ecd412a239a6c19d71b95aff"
dependencies:
@@ -5311,7 +5806,7 @@ git-remote-origin-url@^2.0.0:
gitconfiglocal "^1.0.0"
pify "^2.3.0"
-git-semver-tags@^1.3.0, git-semver-tags@^1.3.6:
+git-semver-tags@^1.3.6:
version "1.3.6"
resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-1.3.6.tgz#357ea01f7280794fe0927f2806bee6414d2caba5"
dependencies:
@@ -5629,6 +6124,10 @@ growl@1.10.3:
version "1.10.3"
resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.3.tgz#1926ba90cf3edfe2adb4927f5880bc22c66c790f"
+growl@1.10.5:
+ version "1.10.5"
+ resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e"
+
gud@^1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0"
@@ -5907,10 +6406,14 @@ homedir-polyfill@^1.0.1:
dependencies:
parse-passwd "^1.0.0"
-hosted-git-info@^2.1.4, hosted-git-info@^2.5.0:
+hosted-git-info@^2.1.4:
version "2.6.0"
resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.6.0.tgz#23235b29ab230c576aab0d4f13fc046b0b038222"
+hosted-git-info@^2.6.0:
+ version "2.7.1"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047"
+
hpack.js@^2.1.6:
version "2.1.6"
resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2"
@@ -6165,6 +6668,19 @@ ini@^1.3.2, ini@^1.3.4, ini@~1.3.0:
version "1.3.5"
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
+init-package-json@^1.10.3:
+ version "1.10.3"
+ resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-1.10.3.tgz#45ffe2f610a8ca134f2bd1db5637b235070f6cbe"
+ dependencies:
+ glob "^7.1.1"
+ npm-package-arg "^4.0.0 || ^5.0.0 || ^6.0.0"
+ promzard "^0.3.0"
+ read "~1.0.1"
+ read-package-json "1 || 2"
+ semver "2.x || 3.x || 4 || 5"
+ validate-npm-package-license "^3.0.1"
+ validate-npm-package-name "^3.0.0"
+
inline-style-prefixer@^3.0.2:
version "3.0.8"
resolved "https://registry.yarnpkg.com/inline-style-prefixer/-/inline-style-prefixer-3.0.8.tgz#8551b8e5b4d573244e66a34b04f7d32076a2b534"
@@ -6185,7 +6701,7 @@ inquirer@^0.8.2:
rx "^2.4.3"
through "^2.3.6"
-inquirer@^3.0.6, inquirer@^3.2.2:
+inquirer@^3.0.6:
version "3.3.0"
resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9"
dependencies:
@@ -6372,6 +6888,10 @@ is-descriptor@^1.0.0, is-descriptor@^1.0.2:
is-data-descriptor "^1.0.0"
kind-of "^6.0.2"
+is-directory@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1"
+
is-dotfile@^1.0.0:
version "1.0.3"
resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1"
@@ -6794,7 +7314,7 @@ js-yaml@3.x, js-yaml@^3.4.2, js-yaml@^3.6.1, js-yaml@^3.7.0:
argparse "^1.0.7"
esprima "^4.0.0"
-js-yaml@^3.9.1:
+js-yaml@^3.9.0, js-yaml@^3.9.1:
version "3.12.0"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1"
dependencies:
@@ -6882,7 +7402,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:
@@ -7059,53 +7579,13 @@ lead@^1.0.0:
dependencies:
flush-write-stream "^1.0.2"
-lerna-get-packages@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/lerna-get-packages/-/lerna-get-packages-1.0.0.tgz#60fa309a71cf2e34eec63224368de2fe8f61ba65"
-
-lerna@^2.5.1:
- version "2.10.2"
- resolved "https://registry.yarnpkg.com/lerna/-/lerna-2.10.2.tgz#3a0d54d398360fecc5918207c6d7ab68a5443d9f"
+lerna@3.0.0-beta.14:
+ version "3.0.0-beta.14"
+ resolved "https://registry.yarnpkg.com/lerna/-/lerna-3.0.0-beta.14.tgz#1ebada4f95fa5ae828caf88f3da80b888d43f1bc"
dependencies:
- async "^1.5.0"
- chalk "^2.1.0"
- cmd-shim "^2.0.2"
- columnify "^1.5.4"
- command-join "^2.0.0"
- conventional-changelog-cli "^1.3.13"
- conventional-recommended-bump "^1.2.1"
- dedent "^0.7.0"
- execa "^0.8.0"
- find-up "^2.1.0"
- fs-extra "^4.0.1"
- get-port "^3.2.0"
- glob "^7.1.2"
- glob-parent "^3.1.0"
- globby "^6.1.0"
- graceful-fs "^4.1.11"
- hosted-git-info "^2.5.0"
- inquirer "^3.2.2"
- is-ci "^1.0.10"
- load-json-file "^4.0.0"
- lodash "^4.17.4"
- minimatch "^3.0.4"
+ "@lerna/cli" "^3.0.0-beta.14"
+ import-local "^1.0.0"
npmlog "^4.1.2"
- p-finally "^1.0.0"
- package-json "^4.0.1"
- path-exists "^3.0.0"
- read-cmd-shim "^1.0.1"
- read-pkg "^3.0.0"
- rimraf "^2.6.1"
- safe-buffer "^5.1.1"
- semver "^5.4.1"
- signal-exit "^3.0.2"
- slash "^1.0.0"
- strong-log-transformer "^1.0.6"
- temp-write "^3.3.0"
- write-file-atomic "^2.3.0"
- write-json-file "^2.2.0"
- write-pkg "^3.1.0"
- yargs "^8.0.2"
less-loader@^2.2.3:
version "2.2.3"
@@ -7421,7 +7901,11 @@ lodash.escaperegexp@^4.1.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347"
-lodash.foreach@^4.5.0:
+lodash.find@^4.3.0:
+ version "4.6.0"
+ resolved "https://registry.npmjs.org/lodash.find/-/lodash.find-4.6.0.tgz#cb0704d47ab71789ffa0de8b97dd926fb88b13b1"
+
+lodash.foreach@^4.2.0, lodash.foreach@^4.5.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53"
@@ -7453,6 +7937,10 @@ lodash.merge@^4.6.0:
version "4.6.1"
resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.1.tgz#adc25d9cb99b9391c59624f379fbba60d7111d54"
+lodash.reduce@^4.3.0:
+ version "4.6.0"
+ resolved "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b"
+
lodash.restparam@^3.0.0:
version "3.6.1"
resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805"
@@ -7939,7 +8427,7 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
-"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4:
+"minimatch@2 || 3", minimatch@3.0.4, minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
dependencies:
@@ -8030,6 +8518,22 @@ mocha@^4.0.1:
mkdirp "0.5.1"
supports-color "4.4.0"
+mocha@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/mocha/-/mocha-5.2.0.tgz#6d8ae508f59167f940f2b5b3c4a612ae50c90ae6"
+ dependencies:
+ browser-stdout "1.3.1"
+ commander "2.15.1"
+ debug "3.1.0"
+ diff "3.5.0"
+ escape-string-regexp "1.0.5"
+ glob "7.1.2"
+ growl "1.10.5"
+ he "1.1.1"
+ minimatch "3.0.4"
+ mkdirp "0.5.1"
+ supports-color "5.4.0"
+
mock-fs@^4.1.0:
version "4.4.2"
resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.4.2.tgz#09dec5313f97095a450be6aa2ad8ab6738d63d6b"
@@ -8080,7 +8584,7 @@ multicast-dns@^6.0.1:
dns-packet "^1.3.1"
thunky "^1.0.2"
-multimatch@^2.0.0:
+multimatch@^2.0.0, multimatch@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-2.1.0.tgz#9c7906a22fb4c02919e2f5f75161b4cdbd4b2a2b"
dependencies:
@@ -8111,7 +8615,7 @@ mz@^2.6.0:
object-assign "^4.0.1"
thenify-all "^1.0.0"
-nan@^2.0.5, nan@^2.0.8, nan@^2.2.1, nan@^2.3.0, nan@^2.3.3, nan@^2.6.2:
+nan@2.10.0, nan@>=2.5.1, nan@^2.0.8, nan@^2.2.1, nan@^2.3.0, nan@^2.3.3, nan@^2.6.2:
version "2.10.0"
resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f"
@@ -8240,6 +8744,23 @@ node-forge@0.7.1:
version "0.7.1"
resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.1.tgz#9da611ea08982f4b94206b3beb4cc9665f20c300"
+node-gyp@^3.6.2:
+ version "3.7.0"
+ resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.7.0.tgz#789478e8f6c45e277aa014f3e28f958f286f9203"
+ dependencies:
+ fstream "^1.0.0"
+ glob "^7.0.3"
+ graceful-fs "^4.1.2"
+ mkdirp "^0.5.0"
+ nopt "2 || 3"
+ npmlog "0 || 1 || 2 || 3 || 4"
+ osenv "0"
+ request ">=2.9.0 <2.82.0"
+ rimraf "2"
+ semver "~5.3.0"
+ tar "^2.0.0"
+ which "1"
+
node-hid@^0.7.2:
version "0.7.2"
resolved "https://registry.yarnpkg.com/node-hid/-/node-hid-0.7.2.tgz#15025cdea2e9756aca2de7266529996d40e52c56"
@@ -8335,7 +8856,7 @@ noop-logger@^0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2"
-nopt@3.x:
+"nopt@2 || 3", nopt@3.x:
version "3.0.6"
resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
dependencies:
@@ -8354,7 +8875,7 @@ nopt@~1.0.10:
dependencies:
abbrev "1"
-normalize-package-data@^2.3.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.3.5:
+normalize-package-data@^2.0.0, normalize-package-data@^2.3.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.3.5:
version "2.4.0"
resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f"
dependencies:
@@ -8396,13 +8917,35 @@ now-and-later@^2.0.0:
dependencies:
once "^1.3.2"
+npm-lifecycle@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/npm-lifecycle/-/npm-lifecycle-2.0.3.tgz#696bedf1143371163e9cc16fe872357e25d8d90e"
+ dependencies:
+ byline "^5.0.0"
+ graceful-fs "^4.1.11"
+ node-gyp "^3.6.2"
+ resolve-from "^4.0.0"
+ slide "^1.1.6"
+ uid-number "0.0.6"
+ umask "^1.1.0"
+ which "^1.3.0"
+
+"npm-package-arg@^4.0.0 || ^5.0.0 || ^6.0.0", npm-package-arg@^6.0.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-6.1.0.tgz#15ae1e2758a5027efb4c250554b85a737db7fcc1"
+ dependencies:
+ hosted-git-info "^2.6.0"
+ osenv "^0.1.5"
+ semver "^5.5.0"
+ validate-npm-package-name "^3.0.0"
+
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"
@@ -8416,7 +8959,7 @@ npm-run-path@^2.0.0:
dependencies:
path-key "^2.0.0"
-npmlog@^4.0.1, npmlog@^4.0.2, npmlog@^4.1.2:
+"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.1, npmlog@^4.0.2, npmlog@^4.1.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
dependencies:
@@ -8698,7 +9241,7 @@ os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.1, os-tmpdir@~1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
-osenv@^0.1.4:
+osenv@0, osenv@^0.1.4, osenv@^0.1.5:
version "0.1.5"
resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410"
dependencies:
@@ -8743,7 +9286,13 @@ p-locate@^2.0.0:
dependencies:
p-limit "^1.1.0"
-p-map@^1.1.1:
+p-map-series@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-map-series/-/p-map-series-1.0.0.tgz#bf98fe575705658a9e1351befb85ae4c1f07bdca"
+ dependencies:
+ p-reduce "^1.0.0"
+
+p-map@^1.1.1, p-map@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b"
@@ -8767,6 +9316,12 @@ p-try@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
+p-waterfall@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-waterfall/-/p-waterfall-1.0.0.tgz#7ed94b3ceb3332782353af6aae11aa9fc235bb00"
+ dependencies:
+ p-reduce "^1.0.0"
+
package-json@^4.0.0, package-json@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed"
@@ -9540,6 +10095,12 @@ prompt@^1.0.0:
utile "0.3.x"
winston "2.1.x"
+promzard@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee"
+ dependencies:
+ read "1"
+
prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.6, prop-types@^15.5.7, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1:
version "15.6.1"
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.1.tgz#36644453564255ddda391191fb3a125cbdf654ca"
@@ -9552,6 +10113,10 @@ propagate@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/propagate/-/propagate-1.0.0.tgz#00c2daeedda20e87e3782b344adba1cddd6ad709"
+proto-list@~1.2.1:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849"
+
proxy-addr@~2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.3.tgz#355f262505a621646b3130a728eb647e22055341"
@@ -9690,7 +10255,7 @@ punycode@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d"
-q@^1.1.2, q@^1.4.1, q@^1.5.1:
+q@^1.1.2, q@^1.5.1:
version "1.5.1"
resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
@@ -9850,13 +10415,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"
@@ -9982,15 +10540,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"
@@ -10004,6 +10553,27 @@ read-cmd-shim@^1.0.1:
dependencies:
graceful-fs "^4.1.2"
+"read-package-json@1 || 2", read-package-json@^2.0.0:
+ version "2.0.13"
+ resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.0.13.tgz#2e82ebd9f613baa6d2ebe3aa72cefe3f68e41f4a"
+ dependencies:
+ glob "^7.1.1"
+ json-parse-better-errors "^1.0.1"
+ normalize-package-data "^2.0.0"
+ slash "^1.0.0"
+ optionalDependencies:
+ graceful-fs "^4.1.2"
+
+read-package-tree@^5.1.6:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/read-package-tree/-/read-package-tree-5.2.1.tgz#6218b187d6fac82289ce4387bbbaf8eef536ad63"
+ dependencies:
+ debuglog "^1.0.1"
+ dezalgo "^1.0.0"
+ once "^1.3.0"
+ read-package-json "^2.0.0"
+ readdir-scoped-modules "^1.0.0"
+
read-pkg-up@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
@@ -10049,7 +10619,7 @@ read-pkg@^3.0.0:
normalize-package-data "^2.3.2"
path-type "^3.0.0"
-read@1.0.x, read@~1.0.5:
+read@1, read@1.0.x, read@~1.0.1, read@~1.0.5:
version "1.0.7"
resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4"
dependencies:
@@ -10085,6 +10655,15 @@ readable-stream@^1.0.33, readable-stream@~1.1.9:
isarray "0.0.1"
string_decoder "~0.10.x"
+readdir-scoped-modules@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.0.2.tgz#9fafa37d286be5d92cbaebdee030dc9b5f406747"
+ dependencies:
+ debuglog "^1.0.1"
+ dezalgo "^1.0.0"
+ graceful-fs "^4.1.2"
+ once "^1.3.0"
+
readdirp@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78"
@@ -10320,7 +10899,7 @@ request-ip@~1.2.3:
version "1.2.3"
resolved "https://registry.yarnpkg.com/request-ip/-/request-ip-1.2.3.tgz#66988f0e22406ec4af630d19b573fe4b447c3b49"
-request@2.81.0:
+request@2.81.0, "request@>=2.9.0 <2.82.0":
version "2.81.0"
resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0"
dependencies:
@@ -10374,6 +10953,31 @@ request@^2.54.0, request@^2.67.0, request@^2.79.0:
tunnel-agent "^0.6.0"
uuid "^3.1.0"
+request@^2.85.0:
+ version "2.87.0"
+ resolved "https://registry.npmjs.org/request/-/request-2.87.0.tgz#32f00235cd08d482b4d0d68db93a829c0ed5756e"
+ dependencies:
+ aws-sign2 "~0.7.0"
+ aws4 "^1.6.0"
+ caseless "~0.12.0"
+ combined-stream "~1.0.5"
+ extend "~3.0.1"
+ forever-agent "~0.6.1"
+ form-data "~2.3.1"
+ har-validator "~5.0.3"
+ http-signature "~1.2.0"
+ is-typedarray "~1.0.0"
+ isstream "~0.1.2"
+ json-stringify-safe "~5.0.1"
+ mime-types "~2.1.17"
+ oauth-sign "~0.8.2"
+ performance-now "^2.1.0"
+ qs "~6.5.1"
+ safe-buffer "^5.1.1"
+ tough-cookie "~2.3.3"
+ tunnel-agent "^0.6.0"
+ uuid "^3.1.0"
+
require-directory@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
@@ -10418,7 +11022,7 @@ resolve-dir@^1.0.0, resolve-dir@^1.0.1:
expand-tilde "^2.0.0"
global-modules "^1.0.0"
-resolve-from@4.0.0:
+resolve-from@4.0.0, resolve-from@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
@@ -10525,6 +11129,18 @@ rlp@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.0.0.tgz#9db384ff4b89a8f61563d92395d8625b18f3afb0"
+rollbar-sourcemap-webpack-plugin@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.npmjs.org/rollbar-sourcemap-webpack-plugin/-/rollbar-sourcemap-webpack-plugin-2.3.0.tgz#47176fd6441d1ce17b4d3c7e9c9cf7f2076b0485"
+ dependencies:
+ async "^2.6.0"
+ babel-runtime "^6.26.0"
+ lodash.find "^4.3.0"
+ lodash.foreach "^4.2.0"
+ lodash.reduce "^4.3.0"
+ request "^2.85.0"
+ verror "^1.6.1"
+
rollbar@^0.6.5:
version "0.6.6"
resolved "https://registry.yarnpkg.com/rollbar/-/rollbar-0.6.6.tgz#8630cff4af967667d06b227f243635ea86dcc5ba"
@@ -10709,7 +11325,7 @@ semver-sort@0.0.4:
version "5.4.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e"
-semver@5.5.0, semver@^5.5.0:
+"semver@2.x || 3.x || 4 || 5", semver@5.5.0, semver@^5.5.0:
version "5.5.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab"
@@ -10721,6 +11337,10 @@ semver@~5.1.0:
version "5.1.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.1.1.tgz#a3292a373e6f3e0798da0b20641b9a9c5bc47e19"
+semver@~5.3.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
+
send@0.16.2:
version "0.16.2"
resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1"
@@ -10836,10 +11456,10 @@ sha.js@^2.4.0, sha.js@^2.4.8:
safe-buffer "^5.0.1"
sha3@^1.1.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/sha3/-/sha3-1.2.0.tgz#6989f1b70a498705876a373e2c62ace96aa9399a"
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/sha3/-/sha3-1.2.2.tgz#a66c5098de4c25bc88336ec8b4817d005bca7ba9"
dependencies:
- nan "^2.0.5"
+ nan "2.10.0"
shallowequal@^1.0.1:
version "1.0.2"
@@ -10952,6 +11572,12 @@ slash@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
+sleep@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/sleep/-/sleep-5.1.1.tgz#878fa1d44d08eeb0f26fb2018ef8629eb1a3ab94"
+ dependencies:
+ nan ">=2.5.1"
+
slice-ansi@0.0.4:
version "0.0.4"
resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35"
@@ -10962,7 +11588,7 @@ slice-ansi@1.0.0:
dependencies:
is-fullwidth-code-point "^2.0.0"
-slide@^1.1.5:
+slide@^1.1.5, slide@^1.1.6:
version "1.1.6"
resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707"
@@ -11567,6 +12193,12 @@ supports-color@4.4.0:
dependencies:
has-flag "^2.0.0"
+supports-color@5.4.0, supports-color@^5.1.0, supports-color@^5.2.0, supports-color@^5.3.0:
+ version "5.4.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54"
+ dependencies:
+ has-flag "^3.0.0"
+
supports-color@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
@@ -11583,12 +12215,6 @@ supports-color@^4.2.1:
dependencies:
has-flag "^2.0.0"
-supports-color@^5.1.0, supports-color@^5.2.0, supports-color@^5.3.0:
- version "5.4.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54"
- dependencies:
- has-flag "^3.0.0"
-
svgo@^0.7.0:
version "0.7.2"
resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5"
@@ -11713,7 +12339,7 @@ tar.gz@^1.0.5:
mout "^0.11.0"
tar "^2.1.1"
-tar@^2.1.1, tar@^2.2.1:
+tar@^2.0.0, tar@^2.1.1, tar@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1"
dependencies:
@@ -11736,7 +12362,7 @@ temp-write@^2.1.0:
pinkie-promise "^2.0.0"
uuid "^2.0.1"
-temp-write@^3.3.0:
+temp-write@^3.4.0:
version "3.4.0"
resolved "https://registry.yarnpkg.com/temp-write/-/temp-write-3.4.0.tgz#8cff630fb7e9da05f047c74ce4ce4d685457d492"
dependencies:
@@ -11754,13 +12380,6 @@ temp@^0.8.1, temp@^0.8.3:
os-tmpdir "^1.0.0"
rimraf "~2.2.6"
-tempfile@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/tempfile/-/tempfile-1.1.1.tgz#5bcc4eaecc4ab2c707d8bc11d99ccc9a2cb287f2"
- dependencies:
- os-tmpdir "^1.0.0"
- uuid "^2.0.1"
-
term-size@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69"
@@ -12021,7 +12640,7 @@ truffle-contract@2.0.1:
truffle-contract-schema "0.0.5"
web3 "^0.18.0"
-tslib@^1.0.0, tslib@^1.7.1, tslib@^1.8.0, tslib@^1.8.1:
+tslib@^1.0.0, tslib@^1.8.0, tslib@^1.8.1:
version "1.9.0"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.0.tgz#e37a86fda8cbbaf23a057f473c9f4dc64e5fc2e8"
@@ -12045,21 +12664,22 @@ tslint-react@^3.0.0, tslint-react@^3.2.0:
dependencies:
tsutils "^2.13.1"
-tslint@5.8.0:
- version "5.8.0"
- resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.8.0.tgz#1f49ad5b2e77c76c3af4ddcae552ae4e3612eb13"
+tslint@5.11.0:
+ version "5.11.0"
+ resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.11.0.tgz#98f30c02eae3cde7006201e4c33cb08b48581eed"
dependencies:
babel-code-frame "^6.22.0"
builtin-modules "^1.1.1"
- chalk "^2.1.0"
- commander "^2.9.0"
+ chalk "^2.3.0"
+ commander "^2.12.1"
diff "^3.2.0"
glob "^7.1.1"
+ js-yaml "^3.7.0"
minimatch "^3.0.4"
resolve "^1.3.2"
semver "^5.3.0"
- tslib "^1.7.1"
- tsutils "^2.12.1"
+ tslib "^1.8.0"
+ tsutils "^2.27.2"
tslint@^5.9.1:
version "5.9.1"
@@ -12094,6 +12714,12 @@ tsutils@^2.12.1, tsutils@^2.13.1:
dependencies:
tslib "^1.8.1"
+tsutils@^2.27.2:
+ version "2.27.2"
+ resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.27.2.tgz#60ba88a23d6f785ec4b89c6e8179cac9b431f1c7"
+ dependencies:
+ tslib "^1.8.1"
+
tty-browserify@0.0.0:
version "0.0.0"
resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
@@ -12276,7 +12902,7 @@ uglifyjs-webpack-plugin@^1.2.5:
webpack-sources "^1.1.0"
worker-farm "^1.5.2"
-uid-number@^0.0.6:
+uid-number@0.0.6, uid-number@^0.0.6:
version "0.0.6"
resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
@@ -12284,6 +12910,10 @@ ultron@~1.1.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c"
+umask@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/umask/-/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d"
+
unbzip2-stream@^1.0.9:
version "1.2.5"
resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.2.5.tgz#73a033a567bbbde59654b193c44d48a7e4f43c47"
@@ -12591,13 +13221,19 @@ valid-url@1.0.9, valid-url@^1.0.9:
version "1.0.9"
resolved "https://registry.yarnpkg.com/valid-url/-/valid-url-1.0.9.tgz#1c14479b40f1397a75782f115e4086447433a200"
-validate-npm-package-license@^3.0.1:
+validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.3:
version "3.0.3"
resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz#81643bcbef1bdfecd4623793dc4648948ba98338"
dependencies:
spdx-correct "^3.0.0"
spdx-expression-parse "^3.0.0"
+validate-npm-package-name@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e"
+ dependencies:
+ builtins "^1.0.3"
+
value-equal@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-0.4.0.tgz#c5bdd2f54ee093c04839d71ce2e4758a6890abc7"
@@ -12614,7 +13250,7 @@ vendors@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.1.tgz#37ad73c8ee417fb3d580e785312307d274847f22"
-verror@1.10.0:
+verror@1.10.0, verror@^1.6.1:
version "1.10.0"
resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
dependencies:
@@ -13186,7 +13822,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"
@@ -13206,6 +13842,12 @@ which-pm-runs@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb"
+which@1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
+ dependencies:
+ isexe "^2.0.0"
+
which@^1.1.1, which@^1.2.14, which@^1.2.9, which@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a"
@@ -13293,7 +13935,7 @@ write-file-atomic@^2.0.0, write-file-atomic@^2.3.0:
imurmurhash "^0.1.4"
signal-exit "^3.0.2"
-write-json-file@^2.2.0:
+write-json-file@^2.2.0, write-json-file@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-2.3.0.tgz#2b64c8a33004d54b8698c76d585a77ceb61da32f"
dependencies: