Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
384.180335943561795916 ETH
Eth Value
$1,011,518.80 (@ $2,632.93/ETH)Token Holdings
More Info
Private Name Tags
ContractCreator
Latest 6 from a total of 6 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Deposit ERC20 | 11133153 | 1395 days ago | IN | 0 ETH | 0.00256631 | ||||
Transfer | 8346612 | 1834 days ago | IN | 0.0001 ETH | 0.00010523 | ||||
Transfer | 8346599 | 1834 days ago | IN | 0 ETH | 0.000105 | ||||
Renounce Pauser | 8075378 | 1876 days ago | IN | 0 ETH | 0.00008633 | ||||
Add Pauser | 8075370 | 1876 days ago | IN | 0 ETH | 0.00027475 | ||||
0x60806040 | 8068807 | 1877 days ago | IN | 0 ETH | 0.00939354 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
15360930 | 735 days ago | 0.06 ETH | ||||
15348199 | 737 days ago | 0.06 ETH | ||||
15313800 | 742 days ago | 0.06 ETH | ||||
15313800 | 742 days ago | 0.06 ETH | ||||
15279870 | 747 days ago | 0.06 ETH | ||||
15279870 | 747 days ago | 0.06 ETH | ||||
14931189 | 804 days ago | 0.2 ETH | ||||
14891595 | 811 days ago | 0.052 ETH | ||||
14889400 | 811 days ago | 0.06 ETH | ||||
14889400 | 811 days ago | 0.06 ETH | ||||
14889286 | 811 days ago | 0.004 ETH | ||||
14889260 | 811 days ago | 0.06 ETH | ||||
14889260 | 811 days ago | 0.06 ETH | ||||
14854064 | 817 days ago | 0.061 ETH | ||||
14854064 | 817 days ago | 0.061 ETH | ||||
14817799 | 823 days ago | 0.09553223 ETH | ||||
14817799 | 823 days ago | 0.09553223 ETH | ||||
14710551 | 840 days ago | 0.0723 ETH | ||||
14643059 | 851 days ago | 0.026 ETH | ||||
14555373 | 864 days ago | 0.08483561 ETH | ||||
13703862 | 997 days ago | 0.325 ETH | ||||
13101106 | 1091 days ago | 0.235 ETH | ||||
13038869 | 1101 days ago | 0.0415 ETH | ||||
12746733 | 1146 days ago | 0.08853526 ETH | ||||
12727043 | 1149 days ago | 0.07 ETH |
Loading...
Loading
Contract Name:
CelerWallet
Compiler Version
v0.5.10+commit.5a6ea5b1
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-10-26 */ // File: contracts/lib/interface/ICelerWallet.sol pragma solidity ^0.5.1; /** * @title CelerWallet interface */ interface ICelerWallet { function create(address[] calldata _owners, address _operator, bytes32 _nonce) external returns(bytes32); function depositETH(bytes32 _walletId) external payable; function depositERC20(bytes32 _walletId, address _tokenAddress, uint _amount) external; function withdraw(bytes32 _walletId, address _tokenAddress, address _receiver, uint _amount) external; function transferToWallet(bytes32 _fromWalletId, bytes32 _toWalletId, address _tokenAddress, address _receiver, uint _amount) external; function transferOperatorship(bytes32 _walletId, address _newOperator) external; function proposeNewOperator(bytes32 _walletId, address _newOperator) external; function drainToken(address _tokenAddress, address _receiver, uint _amount) external; function getWalletOwners(bytes32 _walletId) external view returns(address[] memory); function getOperator(bytes32 _walletId) external view returns(address); function getBalance(bytes32 _walletId, address _tokenAddress) external view returns(uint); function getProposedNewOperator(bytes32 _walletId) external view returns(address); function getProposalVote(bytes32 _walletId, address _owner) external view returns(bool); event CreateWallet(bytes32 indexed walletId, address[] indexed owners, address indexed operator); event DepositToWallet(bytes32 indexed walletId, address indexed tokenAddress, uint amount); event WithdrawFromWallet(bytes32 indexed walletId, address indexed tokenAddress, address indexed receiver, uint amount); event TransferToWallet(bytes32 indexed fromWalletId, bytes32 indexed toWalletId, address indexed tokenAddress, address receiver, uint amount); event ChangeOperator(bytes32 indexed walletId, address indexed oldOperator, address indexed newOperator); event ProposeNewOperator(bytes32 indexed walletId, address indexed newOperator, address indexed proposer); event DrainToken(address indexed tokenAddress, address indexed receiver, uint amount); } // File: openzeppelin-solidity/contracts/math/SafeMath.sol pragma solidity ^0.5.0; /** * @title SafeMath * @dev Unsigned math operations with safety checks that revert on error */ library SafeMath { /** * @dev Multiplies two unsigned integers, reverts on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b); return c; } /** * @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a); uint256 c = a - b; return c; } /** * @dev Adds two unsigned integers, reverts on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a); return c; } /** * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo), * reverts when dividing by zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b != 0); return a % b; } } // File: openzeppelin-solidity/contracts/token/ERC20/IERC20.sol pragma solidity ^0.5.0; /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ interface IERC20 { function transfer(address to, uint256 value) external returns (bool); function approve(address spender, uint256 value) external returns (bool); function transferFrom(address from, address to, uint256 value) external returns (bool); function totalSupply() external view returns (uint256); function balanceOf(address who) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } // File: openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol pragma solidity ^0.5.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure. * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; function safeTransfer(IERC20 token, address to, uint256 value) internal { require(token.transfer(to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { require(token.transferFrom(from, to, value)); } function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require((value == 0) || (token.allowance(msg.sender, spender) == 0)); require(token.approve(spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); require(token.approve(spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value); require(token.approve(spender, newAllowance)); } } // File: openzeppelin-solidity/contracts/access/Roles.sol pragma solidity ^0.5.0; /** * @title Roles * @dev Library for managing addresses assigned to a Role. */ library Roles { struct Role { mapping (address => bool) bearer; } /** * @dev give an account access to this role */ function add(Role storage role, address account) internal { require(account != address(0)); require(!has(role, account)); role.bearer[account] = true; } /** * @dev remove an account's access to this role */ function remove(Role storage role, address account) internal { require(account != address(0)); require(has(role, account)); role.bearer[account] = false; } /** * @dev check if an account has this role * @return bool */ function has(Role storage role, address account) internal view returns (bool) { require(account != address(0)); return role.bearer[account]; } } // File: openzeppelin-solidity/contracts/access/roles/PauserRole.sol pragma solidity ^0.5.0; contract PauserRole { using Roles for Roles.Role; event PauserAdded(address indexed account); event PauserRemoved(address indexed account); Roles.Role private _pausers; constructor () internal { _addPauser(msg.sender); } modifier onlyPauser() { require(isPauser(msg.sender)); _; } function isPauser(address account) public view returns (bool) { return _pausers.has(account); } function addPauser(address account) public onlyPauser { _addPauser(account); } function renouncePauser() public { _removePauser(msg.sender); } function _addPauser(address account) internal { _pausers.add(account); emit PauserAdded(account); } function _removePauser(address account) internal { _pausers.remove(account); emit PauserRemoved(account); } } // File: openzeppelin-solidity/contracts/lifecycle/Pausable.sol pragma solidity ^0.5.0; /** * @title Pausable * @dev Base contract which allows children to implement an emergency stop mechanism. */ contract Pausable is PauserRole { event Paused(address account); event Unpaused(address account); bool private _paused; constructor () internal { _paused = false; } /** * @return true if the contract is paused, false otherwise. */ function paused() public view returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. */ modifier whenNotPaused() { require(!_paused); _; } /** * @dev Modifier to make a function callable only when the contract is paused. */ modifier whenPaused() { require(_paused); _; } /** * @dev called by the owner to pause, triggers stopped state */ function pause() public onlyPauser whenNotPaused { _paused = true; emit Paused(msg.sender); } /** * @dev called by the owner to unpause, returns to normal state */ function unpause() public onlyPauser whenPaused { _paused = false; emit Unpaused(msg.sender); } } // File: contracts/CelerWallet.sol pragma solidity ^0.5.1; /** * @title CelerWallet contract * @notice A multi-owner, multi-token, operator-centric wallet designed for CelerChannel. * This wallet can run independetly and doesn't rely on trust of any external contracts * even CelerLedger to maximize its security. */ contract CelerWallet is ICelerWallet, Pausable { using SafeMath for uint; using SafeERC20 for IERC20; enum MathOperation { Add, Sub } struct Wallet { // corresponding to peers in CelerLedger address[] owners; // corresponding to CelerLedger address operator; // adderss(0) for ETH mapping(address => uint) balances; address proposedNewOperator; mapping(address => bool) proposalVotes; } uint public walletNum; mapping(bytes32 => Wallet) private wallets; /** * @dev Throws if called by any account other than the wallet's operator * @param _walletId id of the wallet to be operated */ modifier onlyOperator(bytes32 _walletId) { require(msg.sender == wallets[_walletId].operator, "msg.sender is not operator"); _; } /** * @dev Throws if given address is not an owner of the wallet * @param _walletId id of the wallet to be operated * @param _addr address to be checked */ modifier onlyWalletOwner(bytes32 _walletId, address _addr) { require(_isWalletOwner(_walletId, _addr), "Given address is not wallet owner"); _; } /** * @notice Create a new wallet * @param _owners owners of the wallet * @param _operator initial operator of the wallet * @param _nonce nonce given by caller to generate the wallet id * @return id of created wallet */ function create( address[] memory _owners, address _operator, bytes32 _nonce ) public whenNotPaused returns(bytes32) { require(_operator != address(0), "New operator is address(0)"); bytes32 walletId = keccak256(abi.encodePacked(address(this), msg.sender, _nonce)); Wallet storage w = wallets[walletId]; // wallet must be uninitialized require(w.operator == address(0), "Occupied wallet id"); w.owners = _owners; w.operator = _operator; walletNum++; emit CreateWallet(walletId, _owners, _operator); return walletId; } /** * @notice Deposit ETH to a wallet * @param _walletId id of the wallet to deposit into */ function depositETH(bytes32 _walletId) public payable whenNotPaused { uint amount = msg.value; _updateBalance(_walletId, address(0), amount, MathOperation.Add); emit DepositToWallet(_walletId, address(0), amount); } /** * @notice Deposit ERC20 tokens to a wallet * @param _walletId id of the wallet to deposit into * @param _tokenAddress address of token to deposit * @param _amount deposit token amount */ function depositERC20( bytes32 _walletId, address _tokenAddress, uint _amount ) public whenNotPaused { _updateBalance(_walletId, _tokenAddress, _amount, MathOperation.Add); emit DepositToWallet(_walletId, _tokenAddress, _amount); IERC20(_tokenAddress).safeTransferFrom(msg.sender, address(this), _amount); } /** * @notice Withdraw funds to an address * @dev Since this withdraw() function uses direct transfer to send ETH, if CelerLedger * allows non externally-owned account (EOA) to be a peer of the channel namely an owner * of the wallet, CelerLedger should implement a withdraw pattern for ETH to avoid * maliciously fund locking. Withdraw pattern reference: * https://solidity.readthedocs.io/en/v0.5.9/common-patterns.html#withdrawal-from-contracts * @param _walletId id of the wallet to withdraw from * @param _tokenAddress address of token to withdraw * @param _receiver token receiver * @param _amount withdrawal token amount */ function withdraw( bytes32 _walletId, address _tokenAddress, address _receiver, uint _amount ) public whenNotPaused onlyOperator(_walletId) onlyWalletOwner(_walletId, _receiver) { _updateBalance(_walletId, _tokenAddress, _amount, MathOperation.Sub); emit WithdrawFromWallet(_walletId, _tokenAddress, _receiver, _amount); _withdrawToken(_tokenAddress, _receiver, _amount); } /** * @notice Transfer funds from one wallet to another wallet with a same owner (as the receiver) * @dev from wallet and to wallet must have one common owner as the receiver or beneficiary * of this transfer * @param _fromWalletId id of wallet to transfer funds from * @param _toWalletId id of wallet to transfer funds to * @param _tokenAddress address of token to transfer * @param _receiver beneficiary who transfers her funds from one wallet to another wallet * @param _amount transferred token amount */ function transferToWallet( bytes32 _fromWalletId, bytes32 _toWalletId, address _tokenAddress, address _receiver, uint _amount ) public whenNotPaused onlyOperator(_fromWalletId) onlyWalletOwner(_fromWalletId, _receiver) onlyWalletOwner(_toWalletId, _receiver) { _updateBalance(_fromWalletId, _tokenAddress, _amount, MathOperation.Sub); _updateBalance(_toWalletId, _tokenAddress, _amount, MathOperation.Add); emit TransferToWallet(_fromWalletId, _toWalletId, _tokenAddress, _receiver, _amount); } /** * @notice Current operator transfers the operatorship of a wallet to the new operator * @param _walletId id of wallet to transfer the operatorship * @param _newOperator the new operator */ function transferOperatorship( bytes32 _walletId, address _newOperator ) public whenNotPaused onlyOperator(_walletId) { _changeOperator(_walletId, _newOperator); } /** * @notice Wallet owners propose and assign a new operator of their wallet * @dev it will assign a new operator if all owners propose the same new operator. * This does not require unpaused. * @param _walletId id of wallet which owners propose new operator of * @param _newOperator the new operator proposal */ function proposeNewOperator( bytes32 _walletId, address _newOperator ) public onlyWalletOwner(_walletId, msg.sender) { require(_newOperator != address(0), "New operator is address(0)"); Wallet storage w = wallets[_walletId]; if (_newOperator != w.proposedNewOperator) { _clearVotes(w); w.proposedNewOperator = _newOperator; } w.proposalVotes[msg.sender] = true; emit ProposeNewOperator(_walletId, _newOperator, msg.sender); if (_checkAllVotes(w)) { _changeOperator(_walletId, _newOperator); _clearVotes(w); } } /** * @notice Pauser drains one type of tokens when paused * @dev This is for emergency situations. * @param _tokenAddress address of token to drain * @param _receiver token receiver * @param _amount drained token amount */ function drainToken( address _tokenAddress, address _receiver, uint _amount ) public whenPaused onlyPauser { emit DrainToken(_tokenAddress, _receiver, _amount); _withdrawToken(_tokenAddress, _receiver, _amount); } /** * @notice Get owners of a given wallet * @param _walletId id of the queried wallet * @return wallet's owners */ function getWalletOwners(bytes32 _walletId) external view returns(address[] memory) { return wallets[_walletId].owners; } /** * @notice Get operator of a given wallet * @param _walletId id of the queried wallet * @return wallet's operator */ function getOperator(bytes32 _walletId) public view returns(address) { return wallets[_walletId].operator; } /** * @notice Get balance of a given token in a given wallet * @param _walletId id of the queried wallet * @param _tokenAddress address of the queried token * @return amount of the given token in the wallet */ function getBalance(bytes32 _walletId, address _tokenAddress) public view returns(uint) { return wallets[_walletId].balances[_tokenAddress]; } /** * @notice Get proposedNewOperator of a given wallet * @param _walletId id of the queried wallet * @return wallet's proposedNewOperator */ function getProposedNewOperator(bytes32 _walletId) external view returns(address) { return wallets[_walletId].proposedNewOperator; } /** * @notice Get the vote of an owner for the proposedNewOperator of a wallet * @param _walletId id of the queried wallet * @param _owner owner to be checked * @return the owner's vote for the proposedNewOperator */ function getProposalVote( bytes32 _walletId, address _owner ) external view onlyWalletOwner(_walletId, _owner) returns(bool) { return wallets[_walletId].proposalVotes[_owner]; } /** * @notice Internal function to withdraw out one type of token * @param _tokenAddress address of token to withdraw * @param _receiver token receiver * @param _amount withdrawal token amount */ function _withdrawToken(address _tokenAddress, address _receiver, uint _amount) internal { if (_tokenAddress == address(0)) { // convert from address to address payable // TODO: latest version of openzeppelin Address.sol provide this api toPayable() address payable receiver = address(uint160(_receiver)); receiver.transfer(_amount); } else { IERC20(_tokenAddress).safeTransfer(_receiver, _amount); } } /** * @notice Update balance record * @param _walletId id of wallet to update * @param _tokenAddress address of token to update * @param _amount update amount * @param _op update operation */ function _updateBalance( bytes32 _walletId, address _tokenAddress, uint _amount, MathOperation _op ) internal { Wallet storage w = wallets[_walletId]; if (_op == MathOperation.Add) { w.balances[_tokenAddress] = w.balances[_tokenAddress].add(_amount); } else if (_op == MathOperation.Sub) { w.balances[_tokenAddress] = w.balances[_tokenAddress].sub(_amount); } else { assert(false); } } /** * @notice Clear all votes of new operator proposals of the wallet * @param _w the wallet */ function _clearVotes(Wallet storage _w) internal { for (uint i = 0; i < _w.owners.length; i++) { _w.proposalVotes[_w.owners[i]] = false; } } /** * @notice Internal function of changing the operator of a wallet * @param _walletId id of wallet to change its operator * @param _newOperator the new operator */ function _changeOperator(bytes32 _walletId, address _newOperator) internal { require(_newOperator != address(0), "New operator is address(0)"); Wallet storage w = wallets[_walletId]; address oldOperator = w.operator; w.operator = _newOperator; emit ChangeOperator(_walletId, oldOperator, _newOperator); } /** * @notice Check if all owners have voted for the same new operator * @param _w the wallet * @return true if all owners have voted for a same operator; otherwise false */ function _checkAllVotes(Wallet storage _w) internal view returns(bool) { for (uint i = 0; i < _w.owners.length; i++) { if (_w.proposalVotes[_w.owners[i]] == false) { return false; } } return true; } /** * @notice Check if an address is an owner of a wallet * @param _walletId id of wallet to check * @param _addr address to check * @return true if this address is an owner of the wallet; otherwise false */ function _isWalletOwner(bytes32 _walletId, address _addr) internal view returns(bool) { Wallet storage w = wallets[_walletId]; for (uint i = 0; i < w.owners.length; i++) { if (_addr == w.owners[i]) { return true; } } return false; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":false,"inputs":[{"name":"_owners","type":"address[]"},{"name":"_operator","type":"address"},{"name":"_nonce","type":"bytes32"}],"name":"create","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_walletId","type":"bytes32"}],"name":"getProposedNewOperator","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_walletId","type":"bytes32"}],"name":"getWalletOwners","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_walletId","type":"bytes32"},{"name":"_newOperator","type":"address"}],"name":"proposeNewOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"walletNum","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isPauser","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_walletId","type":"bytes32"},{"name":"_tokenAddress","type":"address"}],"name":"getBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renouncePauser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_fromWalletId","type":"bytes32"},{"name":"_toWalletId","type":"bytes32"},{"name":"_tokenAddress","type":"address"},{"name":"_receiver","type":"address"},{"name":"_amount","type":"uint256"}],"name":"transferToWallet","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"addPauser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_walletId","type":"bytes32"},{"name":"_tokenAddress","type":"address"},{"name":"_receiver","type":"address"},{"name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_walletId","type":"bytes32"},{"name":"_newOperator","type":"address"}],"name":"transferOperatorship","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_walletId","type":"bytes32"}],"name":"getOperator","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenAddress","type":"address"},{"name":"_receiver","type":"address"},{"name":"_amount","type":"uint256"}],"name":"drainToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_walletId","type":"bytes32"},{"name":"_tokenAddress","type":"address"},{"name":"_amount","type":"uint256"}],"name":"depositERC20","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_walletId","type":"bytes32"},{"name":"_owner","type":"address"}],"name":"getProposalVote","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_walletId","type":"bytes32"}],"name":"depositETH","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"PauserAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"PauserRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"walletId","type":"bytes32"},{"indexed":true,"name":"owners","type":"address[]"},{"indexed":true,"name":"operator","type":"address"}],"name":"CreateWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"walletId","type":"bytes32"},{"indexed":true,"name":"tokenAddress","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"DepositToWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"walletId","type":"bytes32"},{"indexed":true,"name":"tokenAddress","type":"address"},{"indexed":true,"name":"receiver","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"WithdrawFromWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"fromWalletId","type":"bytes32"},{"indexed":true,"name":"toWalletId","type":"bytes32"},{"indexed":true,"name":"tokenAddress","type":"address"},{"indexed":false,"name":"receiver","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"TransferToWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"walletId","type":"bytes32"},{"indexed":true,"name":"oldOperator","type":"address"},{"indexed":true,"name":"newOperator","type":"address"}],"name":"ChangeOperator","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"walletId","type":"bytes32"},{"indexed":true,"name":"newOperator","type":"address"},{"indexed":true,"name":"proposer","type":"address"}],"name":"ProposeNewOperator","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"tokenAddress","type":"address"},{"indexed":true,"name":"receiver","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"DrainToken","type":"event"}]
Contract Creation Code
6080604052620000183364010000000062000028810204565b6001805460ff1916905562000109565b62000043600082640100000000620015796200007a82021704565b604051600160a060020a038216907f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f890600090a250565b600160a060020a0381166200008e57600080fd5b620000a38282640100000000620000d3810204565b15620000ae57600080fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b6000600160a060020a038216620000e957600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b61176f80620001196000396000f3fe60806040526004361061013c576000357c01000000000000000000000000000000000000000000000000000000009004806380ba952e116100bd578063a96a5f9411610081578063a96a5f94146104f9578063bfa2c1d214610523578063c108bb4014610566578063cafd4600146105a5578063d68d9d4e146105de5761013c565b806380ba952e146103e057806382dc1ec41461042f5780638456cb59146104625780638e0cc17614610477578063a0c89a8c146104c05761013c565b80633f4ba83a116101045780633f4ba83a1461032157806346fbf68e14610336578063530e931c1461037d5780635c975abb146103b65780636ef8d66d146103cb5761013c565b80630d63a1fd1461014157806314da2906146102115780631687cc6014610257578063323c4480146102d157806336cc9e8d1461030c575b600080fd5b34801561014d57600080fd5b506101ff6004803603606081101561016457600080fd5b81019060208101813564010000000081111561017f57600080fd5b82018360208201111561019157600080fd5b803590602001918460208302840111640100000000831117156101b357600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955050600160a060020a0383351693505050602001356105fb565b60408051918252519081900360200190f35b34801561021d57600080fd5b5061023b6004803603602081101561023457600080fd5b50356107e5565b60408051600160a060020a039092168252519081900360200190f35b34801561026357600080fd5b506102816004803603602081101561027a57600080fd5b5035610807565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156102bd5781810151838201526020016102a5565b505050509050019250505060405180910390f35b3480156102dd57600080fd5b5061030a600480360360408110156102f457600080fd5b5080359060200135600160a060020a0316610873565b005b34801561031857600080fd5b506101ff6109ed565b34801561032d57600080fd5b5061030a6109f3565b34801561034257600080fd5b506103696004803603602081101561035957600080fd5b5035600160a060020a0316610a53565b604080519115158252519081900360200190f35b34801561038957600080fd5b506101ff600480360360408110156103a057600080fd5b5080359060200135600160a060020a0316610a6b565b3480156103c257600080fd5b50610369610a97565b3480156103d757600080fd5b5061030a610aa1565b3480156103ec57600080fd5b5061030a600480360360a081101561040357600080fd5b50803590602081013590600160a060020a03604082013581169160608101359091169060800135610aac565b34801561043b57600080fd5b5061030a6004803603602081101561045257600080fd5b5035600160a060020a0316610c46565b34801561046e57600080fd5b5061030a610c64565b34801561048357600080fd5b5061030a6004803603608081101561049a57600080fd5b50803590600160a060020a03602082013581169160408101359091169060600135610cc7565b3480156104cc57600080fd5b5061030a600480360360408110156104e357600080fd5b5080359060200135600160a060020a0316610e01565b34801561050557600080fd5b5061023b6004803603602081101561051c57600080fd5b5035610e93565b34801561052f57600080fd5b5061030a6004803603606081101561054657600080fd5b50600160a060020a03813581169160208101359091169060400135610eb1565b34801561057257600080fd5b5061030a6004803603606081101561058957600080fd5b50803590600160a060020a036020820135169060400135610f28565b3480156105b157600080fd5b50610369600480360360408110156105c857600080fd5b5080359060200135600160a060020a0316610fa0565b61030a600480360360208110156105f457600080fd5b503561101e565b60015460009060ff161561060e57600080fd5b600160a060020a03831661066c576040805160e560020a62461bcd02815260206004820152601a60248201527f4e6577206f70657261746f722069732061646472657373283029000000000000604482015290519081900360640190fd5b604080516c010000000000000000000000003081026020808401919091523391909102603483015260488083018690528351808403909101815260689092018352815191810191909120600081815260039092529190206001810154600160a060020a031615610726576040805160e560020a62461bcd02815260206004820152601260248201527f4f636375706965642077616c6c65742069640000000000000000000000000000604482015290519081900360640190fd5b85516107389082906020890190611676565b506001818101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03881690811790915560028054909201909155604051875188919081906020808501910280838360005b838110156107a0578181015183820152602001610788565b505060405192909401829003822095508894507fe778e91533ef049a5fc99752bc4efb2b50ca4c967dfc0d4bb4782fb128070c3493506000925050a450949350505050565b60008181526003602081905260409091200154600160a060020a03165b919050565b60008181526003602090815260409182902080548351818402810184019094528084526060939283018282801561086757602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610849575b50505050509050919050565b813361087f8282611078565b6108bd5760405160e560020a62461bcd02815260040180806020018281038252602181526020018061171a6021913960400191505060405180910390fd5b600160a060020a03831661091b576040805160e560020a62461bcd02815260206004820152601a60248201527f4e6577206f70657261746f722069732061646472657373283029000000000000604482015290519081900360640190fd5b600084815260036020819052604090912090810154600160a060020a038581169116146109765761094b816110dd565b60038101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0386161790555b336000818152600483016020526040808220805460ff1916600117905551600160a060020a0387169188917f71f9e7796b33cb192d1670169ee7f4af7c5364f8f01bab4b95466787593745c39190a46109ce81611140565b156109e6576109dd85856111a9565b6109e6816110dd565b5050505050565b60025481565b6109fc33610a53565b610a0557600080fd5b60015460ff16610a1457600080fd5b6001805460ff191690556040805133815290517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9181900360200190a1565b6000610a65818363ffffffff61127b16565b92915050565b6000828152600360209081526040808320600160a060020a038516845260020190915290205492915050565b60015460ff165b90565b610aaa336112b0565b565b60015460ff1615610abc57600080fd5b6000858152600360205260409020600101548590600160a060020a03163314610b2f576040805160e560020a62461bcd02815260206004820152601a60248201527f6d73672e73656e646572206973206e6f74206f70657261746f72000000000000604482015290519081900360640190fd5b8583610b3b8282611078565b610b795760405160e560020a62461bcd02815260040180806020018281038252602181526020018061171a6021913960400191505060405180910390fd5b8685610b858282611078565b610bc35760405160e560020a62461bcd02815260040180806020018281038252602181526020018061171a6021913960400191505060405180910390fd5b610bd08a898860016112f8565b610bdd89898860006112f8565b87600160a060020a0316898b7f1b56f805e5edb1e61b0d3f46feffdcbab5e591aa0e70e978ada9fc22093601c88a8a6040518083600160a060020a0316600160a060020a031681526020018281526020019250505060405180910390a450505050505050505050565b610c4f33610a53565b610c5857600080fd5b610c61816113a5565b50565b610c6d33610a53565b610c7657600080fd5b60015460ff1615610c8657600080fd5b6001805460ff1916811790556040805133815290517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589181900360200190a1565b60015460ff1615610cd757600080fd5b6000848152600360205260409020600101548490600160a060020a03163314610d4a576040805160e560020a62461bcd02815260206004820152601a60248201527f6d73672e73656e646572206973206e6f74206f70657261746f72000000000000604482015290519081900360640190fd5b8483610d568282611078565b610d945760405160e560020a62461bcd02815260040180806020018281038252602181526020018061171a6021913960400191505060405180910390fd5b610da187878660016112f8565b84600160a060020a031686600160a060020a0316887fd897e862036b62a0f770979fbd2227f3210565bba2eb4d9acd1dc8ccc00c928b876040518082815260200191505060405180910390a4610df88686866113ed565b50505050505050565b60015460ff1615610e1157600080fd5b6000828152600360205260409020600101548290600160a060020a03163314610e84576040805160e560020a62461bcd02815260206004820152601a60248201527f6d73672e73656e646572206973206e6f74206f70657261746f72000000000000604482015290519081900360640190fd5b610e8e83836111a9565b505050565b600090815260036020526040902060010154600160a060020a031690565b60015460ff16610ec057600080fd5b610ec933610a53565b610ed257600080fd5b81600160a060020a031683600160a060020a03167f896ecb17b26927fb33933fc5f413873193bced3c59fe736c42968a9778bf6b58836040518082815260200191505060405180910390a3610e8e8383836113ed565b60015460ff1615610f3857600080fd5b610f4583838360006112f8565b604080518281529051600160a060020a0384169185917fbc8e388b96ba8b9f627cb6d72d3513182f763c33c6107ecd31191de1f71abc1a9181900360200190a3610e8e600160a060020a03831633308463ffffffff61145416565b60008282610fae8282611078565b610fec5760405160e560020a62461bcd02815260040180806020018281038252602181526020018061171a6021913960400191505060405180910390fd5b5050506000918252600360209081526040808420600160a060020a039390931684526004909201905290205460ff1690565b60015460ff161561102e57600080fd5b3461103c82600083816112f8565b60408051828152905160009184917fbc8e388b96ba8b9f627cb6d72d3513182f763c33c6107ecd31191de1f71abc1a9181900360200190a35050565b6000828152600360205260408120815b81548110156110d2578160000181815481106110a057fe5b600091825260209091200154600160a060020a03858116911614156110ca57600192505050610a65565b600101611088565b506000949350505050565b60005b815481101561113c57600082600401600084600001848154811061110057fe5b600091825260208083209190910154600160a060020a031683528201929092526040019020805460ff19169115159190911790556001016110e0565b5050565b6000805b82548110156111a05782600401600084600001838154811061116257fe5b6000918252602080832090910154600160a060020a0316835282019290925260400190205460ff16611198576000915050610802565b600101611144565b50600192915050565b600160a060020a038116611207576040805160e560020a62461bcd02815260206004820152601a60248201527f4e6577206f70657261746f722069732061646472657373283029000000000000604482015290519081900360640190fd5b600082815260036020526040808220600181018054600160a060020a0386811673ffffffffffffffffffffffffffffffffffffffff1983168117909355935192949316929091839187917f118c3f8030bc3c8254e737a0bd0584403c33646afbcbee8321c3bd5b26543cda9190a450505050565b6000600160a060020a03821661129057600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b6112c160008263ffffffff61150316565b604051600160a060020a038216907fcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e90600090a250565b60008481526003602052604081209082600181111561131357fe5b141561136457600160a060020a0384166000908152600282016020526040902054611344908463ffffffff61154b16565b600160a060020a03851660009081526002830160205260409020556109e6565b600182600181111561137257fe5b14156113a357600160a060020a0384166000908152600282016020526040902054611344908463ffffffff61156416565bfe5b6113b660008263ffffffff61157916565b604051600160a060020a038216907f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f890600090a250565b600160a060020a03831661143a576040518290600160a060020a0382169083156108fc029084906000818181858888f19350505050158015611433573d6000803e3d6000fd5b5050610e8e565b610e8e600160a060020a038416838363ffffffff6115c516565b604080517f23b872dd000000000000000000000000000000000000000000000000000000008152600160a060020a0385811660048301528481166024830152604482018490529151918616916323b872dd916064808201926020929091908290030181600087803b1580156114c857600080fd5b505af11580156114dc573d6000803e3d6000fd5b505050506040513d60208110156114f257600080fd5b50516114fd57600080fd5b50505050565b600160a060020a03811661151657600080fd5b611520828261127b565b61152957600080fd5b600160a060020a0316600090815260209190915260409020805460ff19169055565b60008282018381101561155d57600080fd5b9392505050565b60008282111561157357600080fd5b50900390565b600160a060020a03811661158c57600080fd5b611596828261127b565b156115a057600080fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b82600160a060020a031663a9059cbb83836040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b15801561164157600080fd5b505af1158015611655573d6000803e3d6000fd5b505050506040513d602081101561166b57600080fd5b5051610e8e57600080fd5b8280548282559060005260206000209081019282156116d8579160200282015b828111156116d8578251825473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909116178255602090920191600190910190611696565b506116e49291506116e8565b5090565b610a9e91905b808211156116e457805473ffffffffffffffffffffffffffffffffffffffff191681556001016116ee56fe476976656e2061646472657373206973206e6f742077616c6c6574206f776e6572a265627a7a72305820a267d9485b9aea3cd16e5d5b2dc6fc9eaf93731dd38628af3c5eebbf47de01e064736f6c634300050a0032
Deployed Bytecode
0x60806040526004361061013c576000357c01000000000000000000000000000000000000000000000000000000009004806380ba952e116100bd578063a96a5f9411610081578063a96a5f94146104f9578063bfa2c1d214610523578063c108bb4014610566578063cafd4600146105a5578063d68d9d4e146105de5761013c565b806380ba952e146103e057806382dc1ec41461042f5780638456cb59146104625780638e0cc17614610477578063a0c89a8c146104c05761013c565b80633f4ba83a116101045780633f4ba83a1461032157806346fbf68e14610336578063530e931c1461037d5780635c975abb146103b65780636ef8d66d146103cb5761013c565b80630d63a1fd1461014157806314da2906146102115780631687cc6014610257578063323c4480146102d157806336cc9e8d1461030c575b600080fd5b34801561014d57600080fd5b506101ff6004803603606081101561016457600080fd5b81019060208101813564010000000081111561017f57600080fd5b82018360208201111561019157600080fd5b803590602001918460208302840111640100000000831117156101b357600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955050600160a060020a0383351693505050602001356105fb565b60408051918252519081900360200190f35b34801561021d57600080fd5b5061023b6004803603602081101561023457600080fd5b50356107e5565b60408051600160a060020a039092168252519081900360200190f35b34801561026357600080fd5b506102816004803603602081101561027a57600080fd5b5035610807565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156102bd5781810151838201526020016102a5565b505050509050019250505060405180910390f35b3480156102dd57600080fd5b5061030a600480360360408110156102f457600080fd5b5080359060200135600160a060020a0316610873565b005b34801561031857600080fd5b506101ff6109ed565b34801561032d57600080fd5b5061030a6109f3565b34801561034257600080fd5b506103696004803603602081101561035957600080fd5b5035600160a060020a0316610a53565b604080519115158252519081900360200190f35b34801561038957600080fd5b506101ff600480360360408110156103a057600080fd5b5080359060200135600160a060020a0316610a6b565b3480156103c257600080fd5b50610369610a97565b3480156103d757600080fd5b5061030a610aa1565b3480156103ec57600080fd5b5061030a600480360360a081101561040357600080fd5b50803590602081013590600160a060020a03604082013581169160608101359091169060800135610aac565b34801561043b57600080fd5b5061030a6004803603602081101561045257600080fd5b5035600160a060020a0316610c46565b34801561046e57600080fd5b5061030a610c64565b34801561048357600080fd5b5061030a6004803603608081101561049a57600080fd5b50803590600160a060020a03602082013581169160408101359091169060600135610cc7565b3480156104cc57600080fd5b5061030a600480360360408110156104e357600080fd5b5080359060200135600160a060020a0316610e01565b34801561050557600080fd5b5061023b6004803603602081101561051c57600080fd5b5035610e93565b34801561052f57600080fd5b5061030a6004803603606081101561054657600080fd5b50600160a060020a03813581169160208101359091169060400135610eb1565b34801561057257600080fd5b5061030a6004803603606081101561058957600080fd5b50803590600160a060020a036020820135169060400135610f28565b3480156105b157600080fd5b50610369600480360360408110156105c857600080fd5b5080359060200135600160a060020a0316610fa0565b61030a600480360360208110156105f457600080fd5b503561101e565b60015460009060ff161561060e57600080fd5b600160a060020a03831661066c576040805160e560020a62461bcd02815260206004820152601a60248201527f4e6577206f70657261746f722069732061646472657373283029000000000000604482015290519081900360640190fd5b604080516c010000000000000000000000003081026020808401919091523391909102603483015260488083018690528351808403909101815260689092018352815191810191909120600081815260039092529190206001810154600160a060020a031615610726576040805160e560020a62461bcd02815260206004820152601260248201527f4f636375706965642077616c6c65742069640000000000000000000000000000604482015290519081900360640190fd5b85516107389082906020890190611676565b506001818101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03881690811790915560028054909201909155604051875188919081906020808501910280838360005b838110156107a0578181015183820152602001610788565b505060405192909401829003822095508894507fe778e91533ef049a5fc99752bc4efb2b50ca4c967dfc0d4bb4782fb128070c3493506000925050a450949350505050565b60008181526003602081905260409091200154600160a060020a03165b919050565b60008181526003602090815260409182902080548351818402810184019094528084526060939283018282801561086757602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610849575b50505050509050919050565b813361087f8282611078565b6108bd5760405160e560020a62461bcd02815260040180806020018281038252602181526020018061171a6021913960400191505060405180910390fd5b600160a060020a03831661091b576040805160e560020a62461bcd02815260206004820152601a60248201527f4e6577206f70657261746f722069732061646472657373283029000000000000604482015290519081900360640190fd5b600084815260036020819052604090912090810154600160a060020a038581169116146109765761094b816110dd565b60038101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0386161790555b336000818152600483016020526040808220805460ff1916600117905551600160a060020a0387169188917f71f9e7796b33cb192d1670169ee7f4af7c5364f8f01bab4b95466787593745c39190a46109ce81611140565b156109e6576109dd85856111a9565b6109e6816110dd565b5050505050565b60025481565b6109fc33610a53565b610a0557600080fd5b60015460ff16610a1457600080fd5b6001805460ff191690556040805133815290517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9181900360200190a1565b6000610a65818363ffffffff61127b16565b92915050565b6000828152600360209081526040808320600160a060020a038516845260020190915290205492915050565b60015460ff165b90565b610aaa336112b0565b565b60015460ff1615610abc57600080fd5b6000858152600360205260409020600101548590600160a060020a03163314610b2f576040805160e560020a62461bcd02815260206004820152601a60248201527f6d73672e73656e646572206973206e6f74206f70657261746f72000000000000604482015290519081900360640190fd5b8583610b3b8282611078565b610b795760405160e560020a62461bcd02815260040180806020018281038252602181526020018061171a6021913960400191505060405180910390fd5b8685610b858282611078565b610bc35760405160e560020a62461bcd02815260040180806020018281038252602181526020018061171a6021913960400191505060405180910390fd5b610bd08a898860016112f8565b610bdd89898860006112f8565b87600160a060020a0316898b7f1b56f805e5edb1e61b0d3f46feffdcbab5e591aa0e70e978ada9fc22093601c88a8a6040518083600160a060020a0316600160a060020a031681526020018281526020019250505060405180910390a450505050505050505050565b610c4f33610a53565b610c5857600080fd5b610c61816113a5565b50565b610c6d33610a53565b610c7657600080fd5b60015460ff1615610c8657600080fd5b6001805460ff1916811790556040805133815290517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589181900360200190a1565b60015460ff1615610cd757600080fd5b6000848152600360205260409020600101548490600160a060020a03163314610d4a576040805160e560020a62461bcd02815260206004820152601a60248201527f6d73672e73656e646572206973206e6f74206f70657261746f72000000000000604482015290519081900360640190fd5b8483610d568282611078565b610d945760405160e560020a62461bcd02815260040180806020018281038252602181526020018061171a6021913960400191505060405180910390fd5b610da187878660016112f8565b84600160a060020a031686600160a060020a0316887fd897e862036b62a0f770979fbd2227f3210565bba2eb4d9acd1dc8ccc00c928b876040518082815260200191505060405180910390a4610df88686866113ed565b50505050505050565b60015460ff1615610e1157600080fd5b6000828152600360205260409020600101548290600160a060020a03163314610e84576040805160e560020a62461bcd02815260206004820152601a60248201527f6d73672e73656e646572206973206e6f74206f70657261746f72000000000000604482015290519081900360640190fd5b610e8e83836111a9565b505050565b600090815260036020526040902060010154600160a060020a031690565b60015460ff16610ec057600080fd5b610ec933610a53565b610ed257600080fd5b81600160a060020a031683600160a060020a03167f896ecb17b26927fb33933fc5f413873193bced3c59fe736c42968a9778bf6b58836040518082815260200191505060405180910390a3610e8e8383836113ed565b60015460ff1615610f3857600080fd5b610f4583838360006112f8565b604080518281529051600160a060020a0384169185917fbc8e388b96ba8b9f627cb6d72d3513182f763c33c6107ecd31191de1f71abc1a9181900360200190a3610e8e600160a060020a03831633308463ffffffff61145416565b60008282610fae8282611078565b610fec5760405160e560020a62461bcd02815260040180806020018281038252602181526020018061171a6021913960400191505060405180910390fd5b5050506000918252600360209081526040808420600160a060020a039390931684526004909201905290205460ff1690565b60015460ff161561102e57600080fd5b3461103c82600083816112f8565b60408051828152905160009184917fbc8e388b96ba8b9f627cb6d72d3513182f763c33c6107ecd31191de1f71abc1a9181900360200190a35050565b6000828152600360205260408120815b81548110156110d2578160000181815481106110a057fe5b600091825260209091200154600160a060020a03858116911614156110ca57600192505050610a65565b600101611088565b506000949350505050565b60005b815481101561113c57600082600401600084600001848154811061110057fe5b600091825260208083209190910154600160a060020a031683528201929092526040019020805460ff19169115159190911790556001016110e0565b5050565b6000805b82548110156111a05782600401600084600001838154811061116257fe5b6000918252602080832090910154600160a060020a0316835282019290925260400190205460ff16611198576000915050610802565b600101611144565b50600192915050565b600160a060020a038116611207576040805160e560020a62461bcd02815260206004820152601a60248201527f4e6577206f70657261746f722069732061646472657373283029000000000000604482015290519081900360640190fd5b600082815260036020526040808220600181018054600160a060020a0386811673ffffffffffffffffffffffffffffffffffffffff1983168117909355935192949316929091839187917f118c3f8030bc3c8254e737a0bd0584403c33646afbcbee8321c3bd5b26543cda9190a450505050565b6000600160a060020a03821661129057600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b6112c160008263ffffffff61150316565b604051600160a060020a038216907fcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e90600090a250565b60008481526003602052604081209082600181111561131357fe5b141561136457600160a060020a0384166000908152600282016020526040902054611344908463ffffffff61154b16565b600160a060020a03851660009081526002830160205260409020556109e6565b600182600181111561137257fe5b14156113a357600160a060020a0384166000908152600282016020526040902054611344908463ffffffff61156416565bfe5b6113b660008263ffffffff61157916565b604051600160a060020a038216907f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f890600090a250565b600160a060020a03831661143a576040518290600160a060020a0382169083156108fc029084906000818181858888f19350505050158015611433573d6000803e3d6000fd5b5050610e8e565b610e8e600160a060020a038416838363ffffffff6115c516565b604080517f23b872dd000000000000000000000000000000000000000000000000000000008152600160a060020a0385811660048301528481166024830152604482018490529151918616916323b872dd916064808201926020929091908290030181600087803b1580156114c857600080fd5b505af11580156114dc573d6000803e3d6000fd5b505050506040513d60208110156114f257600080fd5b50516114fd57600080fd5b50505050565b600160a060020a03811661151657600080fd5b611520828261127b565b61152957600080fd5b600160a060020a0316600090815260209190915260409020805460ff19169055565b60008282018381101561155d57600080fd5b9392505050565b60008282111561157357600080fd5b50900390565b600160a060020a03811661158c57600080fd5b611596828261127b565b156115a057600080fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b82600160a060020a031663a9059cbb83836040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b15801561164157600080fd5b505af1158015611655573d6000803e3d6000fd5b505050506040513d602081101561166b57600080fd5b5051610e8e57600080fd5b8280548282559060005260206000209081019282156116d8579160200282015b828111156116d8578251825473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909116178255602090920191600190910190611696565b506116e49291506116e8565b5090565b610a9e91905b808211156116e457805473ffffffffffffffffffffffffffffffffffffffff191681556001016116ee56fe476976656e2061646472657373206973206e6f742077616c6c6574206f776e6572a265627a7a72305820a267d9485b9aea3cd16e5d5b2dc6fc9eaf93731dd38628af3c5eebbf47de01e064736f6c634300050a0032
Deployed Bytecode Sourcemap
10508:12936:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12017:680;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12017:680:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12017:680:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;12017:680:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;12017:680:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;12017:680:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;12017:680:0;;-1:-1:-1;;;;;;;12017:680:0;;;;-1:-1:-1;;;12017:680:0;;;;:::i;:::-;;;;;;;;;;;;;;;;19356:148;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19356:148:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19356:148:0;;:::i;:::-;;;;-1:-1:-1;;;;;19356:148:0;;;;;;;;;;;;;;18354:135;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18354:135:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18354:135:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;18354:135:0;;;;;;;;;;;;;;;;;16935:691;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16935:691:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16935:691:0;;;;;;-1:-1:-1;;;;;16935:691:0;;:::i;:::-;;11003:21;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11003:21:0;;;:::i;10035:118::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10035:118:0;;;:::i;8213:109::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8213:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8213:109:0;-1:-1:-1;;;;;8213:109:0;;:::i;:::-;;;;;;;;;;;;;;;;;;19021:156;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19021:156:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19021:156:0;;;;;;-1:-1:-1;;;;;19021:156:0;;:::i;9288:78::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9288:78:0;;;:::i;8430:77::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8430:77:0;;;:::i;15482:626::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15482:626:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;15482:626:0;;;;;;;;-1:-1:-1;;;;;15482:626:0;;;;;;;;;;;;;;;;;;;:::i;8330:92::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8330:92:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8330:92:0;-1:-1:-1;;;;;8330:92:0;;:::i;9824:116::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9824:116:0;;;:::i;14415:489::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14415:489:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;14415:489:0;;;-1:-1:-1;;;;;14415:489:0;;;;;;;;;;;;;;;;;;;:::i;16338:232::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16338:232:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16338:232:0;;;;;;-1:-1:-1;;;;;16338:232:0;;:::i;18646:122::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18646:122:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18646:122:0;;:::i;17899:302::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17899:302:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;17899:302:0;;;;;;;;;;;;;;;;;:::i;13302:396::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13302:396:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13302:396:0;;;-1:-1:-1;;;;;13302:396:0;;;;;;;;;;:::i;19764:255::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19764:255:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19764:255:0;;;;;;-1:-1:-1;;;;;19764:255:0;;:::i;12821:247::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12821:247:0;;:::i;12017:680::-;9525:7;;12184;;9525;;9524:8;9516:17;;;;;;-1:-1:-1;;;;;12217:23:0;;12209:62;;;;;-1:-1:-1;;;;;12209:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12313:51;;;;12338:4;12313:51;;;;;;;;;;12345:10;12313:51;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;12313:51:0;;;;;;12303:62;;;;;;;;;12284:16;12395:17;;;:7;:17;;;;;;12472:10;;;;-1:-1:-1;;;;;12472:10:0;:24;12464:55;;;;;-1:-1:-1;;;;;12464:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12530:18;;;;:1;;:18;;;;;:::i;:::-;-1:-1:-1;12559:10:0;;;;:22;;-1:-1:-1;;12559:22:0;-1:-1:-1;;;;;12559:22:0;;;;;;;;12592:9;:11;;;;;;;;12621:42;;;;;;;;;;;;;;;;;;-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;;;-1:-1;;12621:42:0;;;;;;;;;;;;-1:-1:-1;12634:8:0;;-1:-1:-1;12621:42:0;;-1:-1:-1;12621:42:0;;-1:-1:-1;;12621:42:0;-1:-1:-1;12681:8:0;12017:680;-1:-1:-1;;;;12017:680:0:o;19356:148::-;19429:7;19456:18;;;:7;:18;;;;;;;;:38;;-1:-1:-1;;;;;19456:38:0;19356:148;;;;:::o;18354:135::-;18456:18;;;;:7;:18;;;;;;;;;18449:32;;;;;;;;;;;;;;;;;18420:16;;18449:32;;;18456:18;18449:32;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18449:32:0;;;;;;;;;;;;;;;;;;;;;;;18354:135;;;:::o;16935:691::-;17070:9;17081:10;11658:32;11673:9;11684:5;11658:14;:32::i;:::-;11650:78;;;;-1:-1:-1;;;;;11650:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17117:26:0;;17109:65;;;;;-1:-1:-1;;;;;17109:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17187:16;17206:18;;;:7;:18;;;;;;;;17255:21;;;;-1:-1:-1;;;;;17239:37:0;;;17255:21;;17239:37;17235:135;;17293:14;17305:1;17293:11;:14::i;:::-;17322:21;;;:36;;-1:-1:-1;;17322:36:0;-1:-1:-1;;;;;17322:36:0;;;;;17235:135;17398:10;17382:27;;;;:15;;;:27;;;;;;:34;;-1:-1:-1;;17382:34:0;17412:4;17382:34;;;17432:55;-1:-1:-1;;;;;17432:55:0;;;17451:9;;17432:55;;17382:27;17432:55;17504:17;17519:1;17504:14;:17::i;:::-;17500:119;;;17538:40;17554:9;17565:12;17538:15;:40::i;:::-;17593:14;17605:1;17593:11;:14::i;:::-;11739:1;16935:691;;;;:::o;11003:21::-;;;;:::o;10035:118::-;8164:20;8173:10;8164:8;:20::i;:::-;8156:29;;;;;;9704:7;;;;9696:16;;;;;;10094:7;:15;;-1:-1:-1;;10094:15:0;;;10125:20;;;10134:10;10125:20;;;;;;;;;;;;;10035:118::o;8213:109::-;8269:4;8293:21;8269:4;8306:7;8293:21;:12;:21;:::i;:::-;8286:28;8213:109;-1:-1:-1;;8213:109:0:o;19021:156::-;19103:4;19127:18;;;:7;:18;;;;;;;;-1:-1:-1;;;;;19127:42:0;;;;:27;;:42;;;;;;19021:156;;;;:::o;9288:78::-;9351:7;;;;9288:78;;:::o;8430:77::-;8474:25;8488:10;8474:13;:25::i;:::-;8430:77::o;15482:626::-;9525:7;;;;9524:8;9516:17;;;;;;11309:18;;;;:7;:18;;;;;:27;;;:18;;-1:-1:-1;;;;;11309:27:0;11295:10;:41;11287:80;;;;;-1:-1:-1;;;;;11287:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15761:13;15776:9;11658:32;11673:9;11684:5;11658:14;:32::i;:::-;11650:78;;;;-1:-1:-1;;;;;11650:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15812:11;15825:9;11658:32;11673:9;11684:5;11658:14;:32::i;:::-;11650:78;;;;-1:-1:-1;;;;;11650:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15852:72;15867:13;15882;15897:7;15906:17;15852:14;:72::i;:::-;15935:70;15950:11;15963:13;15978:7;15987:17;15935:14;:70::i;:::-;16066:13;-1:-1:-1;;;;;16021:79:0;16053:11;16038:13;16021:79;16081:9;16092:7;16021:79;;;;-1:-1:-1;;;;;16021:79:0;-1:-1:-1;;;;;16021:79:0;;;;;;;;;;;;;;;;;;;;;11739:1;;11378;;9544;15482:626;;;;;:::o;8330:92::-;8164:20;8173:10;8164:8;:20::i;:::-;8156:29;;;;;;8395:19;8406:7;8395:10;:19::i;:::-;8330:92;:::o;9824:116::-;8164:20;8173:10;8164:8;:20::i;:::-;8156:29;;;;;;9525:7;;;;9524:8;9516:17;;;;;;9894:4;9884:14;;-1:-1:-1;;9884:14:0;;;;;9914:18;;;9921:10;9914:18;;;;;;;;;;;;;9824:116::o;14415:489::-;9525:7;;;;9524:8;9516:17;;;;;;11309:18;;;;:7;:18;;;;;:27;;;:18;;-1:-1:-1;;;;;11309:27:0;11295:10;:41;11287:80;;;;;-1:-1:-1;;;;;11287:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14648:9;14659;11658:32;11673:9;11684:5;11658:14;:32::i;:::-;11650:78;;;;-1:-1:-1;;;;;11650:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14686:68;14701:9;14712:13;14727:7;14736:17;14686:14;:68::i;:::-;14815:9;-1:-1:-1;;;;;14770:64:0;14800:13;-1:-1:-1;;;;;14770:64:0;14789:9;14770:64;14826:7;14770:64;;;;;;;;;;;;;;;;;;14847:49;14862:13;14877:9;14888:7;14847:14;:49::i;:::-;11378:1;;9544;14415:489;;;;:::o;16338:232::-;9525:7;;;;9524:8;9516:17;;;;;;11309:18;;;;:7;:18;;;;;:27;;;:18;;-1:-1:-1;;;;;11309:27:0;11295:10;:41;11287:80;;;;;-1:-1:-1;;;;;11287:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16522:40;16538:9;16549:12;16522:15;:40::i;:::-;9544:1;16338:232;;:::o;18646:122::-;18706:7;18733:18;;;:7;:18;;;;;:27;;;-1:-1:-1;;;;;18733:27:0;;18646:122::o;17899:302::-;9704:7;;;;9696:16;;;;;;8164:20;8173:10;8164:8;:20::i;:::-;8156:29;;;;;;18112:9;-1:-1:-1;;;;;18086:45:0;18097:13;-1:-1:-1;;;;;18086:45:0;;18123:7;18086:45;;;;;;;;;;;;;;;;;;18144:49;18159:13;18174:9;18185:7;18144:14;:49::i;13302:396::-;9525:7;;;;9524:8;9516:17;;;;;;13469:68;13484:9;13495:13;13510:7;13519:17;13469:14;:68::i;:::-;13553:50;;;;;;;;-1:-1:-1;;;;;13553:50:0;;;13569:9;;13553:50;;;;;;;;;13616:74;-1:-1:-1;;;;;13616:38:0;;13655:10;13675:4;13682:7;13616:74;:38;:74;:::i;19764:255::-;19942:4;19906:9;19917:6;11658:32;11673:9;11684:5;11658:14;:32::i;:::-;11650:78;;;;-1:-1:-1;;;;;11650:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;19971:18:0;;;;:7;:18;;;;;;;;-1:-1:-1;;;;;19971:40:0;;;;;;:32;;;;:40;;;;;;;;19764:255::o;12821:247::-;9525:7;;;;9524:8;9516:17;;;;;;12914:9;12934:64;12949:9;12900:11;12914:9;12900:11;12934:14;:64::i;:::-;13014:46;;;;;;;;13049:1;;13030:9;;13014:46;;;;;;;;;9544:1;12821:247;:::o;23125:316::-;23205:4;23241:18;;;:7;:18;;;;;23205:4;23270:141;23291:15;;23287:19;;23270:141;;;23341:1;:8;;23350:1;23341:11;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23332:20:0;;;23341:11;;23332:20;23328:72;;;23380:4;23373:11;;;;;;23328:72;23308:3;;23270:141;;;-1:-1:-1;23428:5:0;;23125:316;-1:-1:-1;;;;23125:316:0:o;21655:176::-;21720:6;21715:109;21736:16;;21732:20;;21715:109;;;21807:5;21774:2;:16;;:30;21791:2;:9;;21801:1;21791:12;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21791:12:0;21774:30;;;;;;;;;;;;:38;;-1:-1:-1;;21774:38:0;;;;;;;;;;-1:-1:-1;21754:3:0;21715:109;;;;21655:176;:::o;22601:273::-;22666:4;;22683:162;22704:16;;22700:20;;22683:162;;;22746:2;:16;;:30;22763:2;:9;;22773:1;22763:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22763:12:0;22746:30;;;;;;;;;;;;;;;22742:92;;22813:5;22806:12;;;;;22742:92;22722:3;;22683:162;;;-1:-1:-1;22862:4:0;;22601:273;-1:-1:-1;;22601:273:0:o;22034:356::-;-1:-1:-1;;;;;22128:26:0;;22120:65;;;;;-1:-1:-1;;;;;22120:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;22198:16;22217:18;;;:7;:18;;;;;;22268:10;;;;;-1:-1:-1;;;;;22289:25:0;;;-1:-1:-1;;22289:25:0;;;;;;;22330:52;;22217:18;;22268:10;;;22289:25;;22268:10;;22225:9;;22330:52;;22198:16;22330:52;22034:356;;;;:::o;7577:165::-;7649:4;-1:-1:-1;;;;;7674:21:0;;7666:30;;;;;;-1:-1:-1;;;;;;7714:20:0;:11;:20;;;;;;;;;;;;;;;7577:165::o;8645:130::-;8705:24;:8;8721:7;8705:24;:15;:24;:::i;:::-;8745:22;;-1:-1:-1;;;;;8745:22:0;;;;;;;;8645:130;:::o;20999:529::-;21175:16;21194:18;;;:7;:18;;;;;;21227:3;:24;;;;;;;;;21223:298;;;-1:-1:-1;;;;;21296:25:0;;;;;;:10;;;:25;;;;;;:38;;21326:7;21296:38;:29;:38;:::i;:::-;-1:-1:-1;;;;;21268:25:0;;;;;;:10;;;:25;;;;;:66;21223:298;;;21363:17;21356:3;:24;;;;;;;;;21352:169;;;-1:-1:-1;;;;;21425:25:0;;;;;;:10;;;:25;;;;;;:38;;21455:7;21425:38;:29;:38;:::i;21352:169::-;21496:13;8515:122;8572:21;:8;8585:7;8572:21;:12;:21;:::i;:::-;8609:20;;-1:-1:-1;;;;;8609:20:0;;;;;;;;8515:122;:::o;20258:500::-;-1:-1:-1;;;;;20362:27:0;;20358:393;;20626:26;;20600:9;;-1:-1:-1;;;;;20626:17:0;;;:26;;;;;20644:7;;20556:24;20626:26;20556:24;20626:26;20644:7;20626:17;:26;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20626:26:0;20358:393;;;;20685:54;-1:-1:-1;;;;;20685:34:0;;20720:9;20731:7;20685:54;:34;:54;:::i;5611:153::-;5720:35;;;;;;-1:-1:-1;;;;;5720:35:0;;;;;;;;;;;;;;;;;;;;;;:18;;;;;;:35;;;;;;;;;;;;;;;-1:-1:-1;5720:18:0;:35;;;5:2:-1;;;;30:1;27;20:12;5:2;5720:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5720:35:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5720:35:0;5712:44;;;;;;5611:153;;;;:::o;7294:189::-;-1:-1:-1;;;;;7374:21:0;;7366:30;;;;;;7415:18;7419:4;7425:7;7415:3;:18::i;:::-;7407:27;;;;;;-1:-1:-1;;;;;7447:20:0;7470:5;7447:20;;;;;;;;;;;:28;;-1:-1:-1;;7447:28:0;;;7294:189::o;3748:150::-;3806:7;3838:5;;;3862:6;;;;3854:15;;;;;;3889:1;3748:150;-1:-1:-1;;;3748:150:0:o;3512:::-;3570:7;3603:1;3598;:6;;3590:15;;;;;;-1:-1:-1;3628:5:0;;;3512:150::o;7029:186::-;-1:-1:-1;;;;;7106:21:0;;7098:30;;;;;;7148:18;7152:4;7158:7;7148:3;:18::i;:::-;7147:19;7139:28;;;;;;-1:-1:-1;;;;;7180:20:0;:11;:20;;;;;;;;;;;:27;;-1:-1:-1;;7180:27:0;7203:4;7180:27;;;7029:186::o;5478:125::-;5569:5;-1:-1:-1;;;;;5569:14:0;;5584:2;5588:5;5569:25;;;;;;;;;;;;;-1:-1:-1;;;;;5569:25:0;-1:-1:-1;;;;;5569:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5569:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5569:25:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5569:25:0;5561:34;;;;;10508:12936;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10508:12936:0;-1:-1:-1;;;;;10508:12936:0;;;;;;;;;;;-1:-1:-1;10508:12936:0;;;;;;;-1:-1:-1;10508:12936:0;;;-1:-1:-1;10508:12936:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;10508:12936:0;;;;;;
Swarm Source
bzzr://a267d9485b9aea3cd16e5d5b2dc6fc9eaf93731dd38628af3c5eebbf47de01e0
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.