More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 74,126 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Send ERC20To Sid... | 20251114 | 192 days ago | IN | 0 ETH | 0.00002717 | ||||
Receive By Ether... | 20149589 | 206 days ago | IN | 0 ETH | 0.00005346 | ||||
Add New Sidechai... | 19117075 | 351 days ago | IN | 0 ETH | 0.00032305 | ||||
Send Eth To Side... | 18448522 | 444 days ago | IN | 0.05 ETH | 0.00091663 | ||||
Send Eth To Side... | 18448522 | 444 days ago | IN | 0.05 ETH | 0.00169818 | ||||
Send Eth To Side... | 18448522 | 444 days ago | IN | 0.00888626 ETH | 0.00065129 | ||||
Send Eth To Side... | 18448522 | 444 days ago | IN | 0.00829826 ETH | 0.00067541 | ||||
Send Eth To Side... | 18448522 | 444 days ago | IN | 0.00324146 ETH | 0.00111443 | ||||
Send Eth To Side... | 18448522 | 444 days ago | IN | 0.00447626 ETH | 0.00101312 | ||||
Send Eth To Side... | 18448522 | 444 days ago | IN | 0.48 ETH | 0.00094075 | ||||
Transfer | 16944459 | 656 days ago | IN | 0.498 ETH | 0.00050019 | ||||
Send ERC20To Sid... | 16268272 | 750 days ago | IN | 0 ETH | 0.00051602 | ||||
Send ERC20To Sid... | 16268272 | 750 days ago | IN | 0 ETH | 0.00034566 | ||||
Send Eth To Side... | 15978448 | 791 days ago | IN | 0.10249478 ETH | 0.0012791 | ||||
Shut Down And Mi... | 15632624 | 839 days ago | IN | 0 ETH | 0.0474259 | ||||
Shut Down And Mi... | 15630573 | 840 days ago | IN | 0 ETH | 0.01901677 | ||||
Prepare For Migr... | 15527675 | 854 days ago | IN | 0 ETH | 0.00201516 | ||||
Receive By Ether... | 15527370 | 854 days ago | IN | 0 ETH | 0.00447038 | ||||
Receive By Ether... | 15527253 | 854 days ago | IN | 0 ETH | 0.00424622 | ||||
Send Eth To Side... | 15527250 | 854 days ago | IN | 4 ETH | 0.0008481 | ||||
Send ERC20To Sid... | 15527244 | 854 days ago | IN | 0 ETH | 0.0016944 | ||||
Send ERC20To Sid... | 15527235 | 854 days ago | IN | 0 ETH | 0.00213751 | ||||
Receive By Ether... | 15526993 | 854 days ago | IN | 0 ETH | 0.00738624 | ||||
Send ERC20To Sid... | 15526900 | 854 days ago | IN | 0 ETH | 0.0011704 | ||||
Send ERC20To Sid... | 15526624 | 854 days ago | IN | 0 ETH | 0.00026582 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
15632624 | 839 days ago | 878.76187586 ETH | ||||
15527370 | 854 days ago | 0.25437504 ETH | ||||
15526993 | 854 days ago | 0.06028671 ETH | ||||
15526526 | 854 days ago | 0.11433024 ETH | ||||
15525843 | 855 days ago | 0.85975394 ETH | ||||
15525838 | 855 days ago | 0.5 ETH | ||||
15524832 | 855 days ago | 1.5 ETH | ||||
15524613 | 855 days ago | 3.03427244 ETH | ||||
15524417 | 855 days ago | 0.27359396 ETH | ||||
15523809 | 855 days ago | 0.31389872 ETH | ||||
15522635 | 855 days ago | 1.42095311 ETH | ||||
15519445 | 856 days ago | 0.10807888 ETH | ||||
15517467 | 856 days ago | 0.60704468 ETH | ||||
15516075 | 856 days ago | 0.06973662 ETH | ||||
15515397 | 856 days ago | 16.00072619 ETH | ||||
15513246 | 857 days ago | 3.57269437 ETH | ||||
15512322 | 857 days ago | 0.01151042 ETH | ||||
15511400 | 857 days ago | 0.41199851 ETH | ||||
15511399 | 857 days ago | 2.97984824 ETH | ||||
15511007 | 857 days ago | 0.55431459 ETH | ||||
15509088 | 857 days ago | 1 ETH | ||||
15508391 | 857 days ago | 0.56923343 ETH | ||||
15507258 | 858 days ago | 0.23426583 ETH | ||||
15506870 | 858 days ago | 0.05430768 ETH | ||||
15506223 | 858 days ago | 1.94813401 ETH |
Loading...
Loading
Contract Name:
Bridge
Compiler Version
v0.7.6+commit.7338295f
Contract Source Code (Solidity Multiple files format)
pragma solidity ^0.7.4; // "SPDX-License-Identifier: Apache License 2.0" import "./MasterToken.sol"; import "./Ownable.sol"; import "./ERC20Burnable.sol"; /** * Provides functionality of the HASHI bridge */ contract Bridge { bool internal initialized_; bool internal preparedForMigration_; mapping(address => bool) public isPeer; uint public peersCount; /** Substrate proofs used */ mapping(bytes32 => bool) public used; mapping(address => bool) public _uniqueAddresses; /** White list of ERC-20 ethereum native tokens */ mapping(address => bool) public acceptedEthTokens; /** White lists of ERC-20 SORA native tokens * We use several representations of the white list for optimisation purposes. */ mapping(bytes32 => address) public _sidechainTokens; mapping(address => bytes32) public _sidechainTokensByAddress; address[] public _sidechainTokenAddressArray; event Withdrawal(bytes32 txHash); event Deposit(bytes32 destination, uint amount, address token, bytes32 sidechainAsset); event ChangePeers(address peerId, bool removal); event PreparedForMigration(); event Migrated(address to); /** * For XOR and VAL use old token contracts, created for SORA 1 bridge. * Also for XOR and VAL transfers from SORA 2 to Ethereum old bridges will be used. */ address public _addressVAL; address public _addressXOR; /** EVM netowrk ID */ bytes32 public _networkId; /** * Constructor. * @param initialPeers - list of initial bridge validators on substrate side. * @param addressVAL address of VAL token Contract * @param addressXOR address of XOR token Contract * @param networkId id of current EvM network used for bridge purpose. */ constructor( address[] memory initialPeers, address addressVAL, address addressXOR, bytes32 networkId) { for (uint8 i = 0; i < initialPeers.length; i++) { addPeer(initialPeers[i]); } _addressXOR = addressXOR; _addressVAL = addressVAL; _networkId = networkId; initialized_ = true; preparedForMigration_ = false; acceptedEthTokens[_addressXOR] = true; acceptedEthTokens[_addressVAL] = true; } modifier shouldBeInitialized { require(initialized_ == true, "Contract should be initialized to use this function"); _; } modifier shouldNotBePreparedForMigration { require(preparedForMigration_ == false, "Contract should not be prepared for migration to use this function"); _; } modifier shouldBePreparedForMigration { require(preparedForMigration_ == true, "Contract should be prepared for migration to use this function"); _; } fallback() external { revert(); } receive() external payable { revert(); } /* Used only for migration */ function receivePayment() external payable {} /** * Adds new token to whitelist. * Token should not been already added. * * @param newToken new token contract address * @param ticker token ticker (symbol) * @param name token title * @param decimals count of token decimal places * @param txHash transaction hash from sidechain * @param v array of signatures of tx_hash (v-component) * @param r array of signatures of tx_hash (r-component) * @param s array of signatures of tx_hash (s-component) */ function addEthNativeToken( address newToken, string memory ticker, string memory name, uint8 decimals, bytes32 txHash, uint8[] memory v, bytes32[] memory r, bytes32[] memory s ) public shouldBeInitialized { require(used[txHash] == false); require(acceptedEthTokens[newToken] == false); require(checkSignatures(keccak256(abi.encodePacked(newToken, ticker, name, decimals, txHash, _networkId)), v, r, s), "Peer signatures are invalid" ); acceptedEthTokens[newToken] = true; used[txHash] = true; } /** * Preparations for migration to new Bridge contract * * @param thisContractAddress address of this bridge contract * @param salt unique data used for signature * @param v array of signatures of tx_hash (v-component) * @param r array of signatures of tx_hash (r-component) * @param s array of signatures of tx_hash (s-component) */ function prepareForMigration( address thisContractAddress, bytes32 salt, uint8[] memory v, bytes32[] memory r, bytes32[] memory s ) public shouldBeInitialized shouldNotBePreparedForMigration { require(preparedForMigration_ == false); require(address(this) == thisContractAddress); require(checkSignatures(keccak256(abi.encodePacked(thisContractAddress, salt, _networkId)), v, r, s), "Peer signatures are invalid" ); preparedForMigration_ = true; emit PreparedForMigration(); } /** * Shutdown this contract and migrate tokens ownership to the new contract. * * @param thisContractAddress this bridge contract address * @param salt unique data used for signature generation * @param newContractAddress address of the new bridge contract * @param erc20nativeTokens list of ERC20 tokens with non zero balances for this contract. Can be taken from substrate bridge peers. * @param v array of signatures of tx_hash (v-component) * @param r array of signatures of tx_hash (r-component) * @param s array of signatures of tx_hash (s-component) */ function shutDownAndMigrate( address thisContractAddress, bytes32 salt, address payable newContractAddress, address[] calldata erc20nativeTokens, uint8[] memory v, bytes32[] memory r, bytes32[] memory s ) public shouldBeInitialized shouldBePreparedForMigration { require(address(this) == thisContractAddress); require(checkSignatures(keccak256(abi.encodePacked(thisContractAddress, newContractAddress, salt, erc20nativeTokens, _networkId)), v, r, s), "Peer signatures are invalid" ); for (uint i = 0; i < _sidechainTokenAddressArray.length; i++) { Ownable token = Ownable(_sidechainTokenAddressArray[i]); token.transferOwnership(newContractAddress); } for (uint i = 0; i < erc20nativeTokens.length; i++) { IERC20 token = IERC20(erc20nativeTokens[i]); token.transfer(newContractAddress, token.balanceOf(address(this))); } Bridge(newContractAddress).receivePayment{value: address(this).balance}(); initialized_ = false; emit Migrated(newContractAddress); } /** * Add new token from sidechain to the bridge white list. * * @param name token title * @param symbol token symbol * @param decimals number of decimals * @param sidechainAssetId token id on the sidechain * @param txHash sidechain transaction hash * @param v array of signatures of tx_hash (v-component) * @param r array of signatures of tx_hash (r-component) * @param s array of signatures of tx_hash (s-component) */ function addNewSidechainToken( string memory name, string memory symbol, uint8 decimals, bytes32 sidechainAssetId, bytes32 txHash, uint8[] memory v, bytes32[] memory r, bytes32[] memory s) public shouldBeInitialized { require(used[txHash] == false); require(checkSignatures(keccak256(abi.encodePacked( name, symbol, decimals, sidechainAssetId, txHash, _networkId )), v, r, s), "Peer signatures are invalid" ); // Create new instance of the token MasterToken tokenInstance = new MasterToken(name, symbol, decimals, address(this), 0, sidechainAssetId); address tokenAddress = address(tokenInstance); _sidechainTokens[sidechainAssetId] = tokenAddress; _sidechainTokensByAddress[tokenAddress] = sidechainAssetId; _sidechainTokenAddressArray.push(tokenAddress); used[txHash] = true; } /** * Send Ethereum to sidechain. * * @param to destionation address on sidechain. */ function sendEthToSidechain( bytes32 to ) public payable shouldBeInitialized shouldNotBePreparedForMigration { require(msg.value > 0, "ETH VALUE SHOULD BE MORE THAN 0"); bytes32 empty; emit Deposit(to, msg.value, address(0x0), empty); } /** * Send ERC-20 token to sidechain. * * @param to destination address on the sidechain * @param amount amount to sendERC20ToSidechain * @param tokenAddress contract address of token to send */ function sendERC20ToSidechain( bytes32 to, uint amount, address tokenAddress) external shouldBeInitialized shouldNotBePreparedForMigration { IERC20 token = IERC20(tokenAddress); require(token.allowance(msg.sender, address(this)) >= amount, "NOT ENOUGH DELEGATED TOKENS ON SENDER BALANCE"); bytes32 sidechainAssetId = _sidechainTokensByAddress[tokenAddress]; if (sidechainAssetId != "" || _addressVAL == tokenAddress || _addressXOR == tokenAddress) { ERC20Burnable mtoken = ERC20Burnable(tokenAddress); mtoken.burnFrom(msg.sender, amount); } else { require(acceptedEthTokens[tokenAddress], "The Token is not accepted for transfer to sidechain"); token.transferFrom(msg.sender, address(this), amount); } emit Deposit(to, amount, tokenAddress, sidechainAssetId); } /** * Add new peer using peers quorum. * * @param newPeerAddress address of the peer to add * @param txHash tx hash from sidechain * @param v array of signatures of tx_hash (v-component) * @param r array of signatures of tx_hash (r-component) * @param s array of signatures of tx_hash (s-component) */ function addPeerByPeer( address newPeerAddress, bytes32 txHash, uint8[] memory v, bytes32[] memory r, bytes32[] memory s ) public shouldBeInitialized returns (bool) { require(used[txHash] == false); require(checkSignatures(keccak256(abi.encodePacked(newPeerAddress, txHash, _networkId)), v, r, s), "Peer signatures are invalid" ); addPeer(newPeerAddress); used[txHash] = true; emit ChangePeers(newPeerAddress, false); return true; } /** * Remove peer using peers quorum. * * @param peerAddress address of the peer to remove * @param txHash tx hash from sidechain * @param v array of signatures of tx_hash (v-component) * @param r array of signatures of tx_hash (r-component) * @param s array of signatures of tx_hash (s-component) */ function removePeerByPeer( address peerAddress, bytes32 txHash, uint8[] memory v, bytes32[] memory r, bytes32[] memory s ) public shouldBeInitialized returns (bool) { require(used[txHash] == false); require(checkSignatures( keccak256(abi.encodePacked(peerAddress, txHash, _networkId)), v, r, s), "Peer signatures are invalid" ); removePeer(peerAddress); used[txHash] = true; emit ChangePeers(peerAddress, true); return true; } /** * Withdraws specified amount of ether or one of ERC-20 tokens to provided sidechain address * @param tokenAddress address of token to withdraw (0 for ether) * @param amount amount of tokens or ether to withdraw * @param to target account address * @param txHash hash of transaction from sidechain * @param from source of transfer * @param v array of signatures of tx_hash (v-component) * @param r array of signatures of tx_hash (r-component) * @param s array of signatures of tx_hash (s-component) */ function receiveByEthereumAssetAddress( address tokenAddress, uint256 amount, address payable to, address from, bytes32 txHash, uint8[] memory v, bytes32[] memory r, bytes32[] memory s ) public shouldBeInitialized { require(used[txHash] == false); require(checkSignatures( keccak256(abi.encodePacked(tokenAddress, amount, to, from, txHash, _networkId)), v, r, s), "Peer signatures are invalid" ); if (tokenAddress == address(0)) { used[txHash] = true; // untrusted transfer, relies on provided cryptographic proof to.transfer(amount); } else { IERC20 coin = IERC20(tokenAddress); used[txHash] = true; // untrusted call, relies on provided cryptographic proof coin.transfer(to, amount); } emit Withdrawal(txHash); } /** * Mint new Token * @param sidechainAssetId id of sidechainToken to mint * @param amount how much to mint * @param to destination address * @param from sender address * @param txHash hash of transaction from Iroha * @param v array of signatures of tx_hash (v-component) * @param r array of signatures of tx_hash (r-component) * @param s array of signatures of tx_hash (s-component) */ function receiveBySidechainAssetId( bytes32 sidechainAssetId, uint256 amount, address to, address from, bytes32 txHash, uint8[] memory v, bytes32[] memory r, bytes32[] memory s ) public shouldBeInitialized { require(_sidechainTokens[sidechainAssetId] != address(0x0), "Sidechain asset is not registered"); require(used[txHash] == false); require(checkSignatures( keccak256(abi.encodePacked(sidechainAssetId, amount, to, from, txHash, _networkId)), v, r, s), "Peer signatures are invalid" ); MasterToken tokenInstance = MasterToken(_sidechainTokens[sidechainAssetId]); tokenInstance.mintTokens(to, amount); used[txHash] = true; emit Withdrawal(txHash); } /** * Checks given addresses for duplicates and if they are peers signatures * @param hash unsigned data * @param v v-component of signature from hash * @param r r-component of signature from hash * @param s s-component of signature from hash * @return true if all given addresses are correct or false otherwise */ function checkSignatures(bytes32 hash, uint8[] memory v, bytes32[] memory r, bytes32[] memory s ) private returns (bool) { require(peersCount >= 1); require(v.length == r.length); require(r.length == s.length); uint needSigs = peersCount - (peersCount - 1) / 3; require(s.length >= needSigs); uint count = 0; address[] memory recoveredAddresses = new address[](s.length); for (uint i = 0; i < s.length; ++i) { address recoveredAddress = recoverAddress( hash, v[i], r[i], s[i] ); // not a peer address or not unique if (isPeer[recoveredAddress] != true || _uniqueAddresses[recoveredAddress] == true) { continue; } recoveredAddresses[count] = recoveredAddress; count = count + 1; _uniqueAddresses[recoveredAddress] = true; } // restore state for future usages for (uint i = 0; i < count; ++i) { _uniqueAddresses[recoveredAddresses[i]] = false; } return count >= needSigs; } /** * Recovers address from a given single signature * @param hash unsigned data * @param v v-component of signature from hash * @param r r-component of signature from hash * @param s s-component of signature from hash * @return address recovered from signature */ function recoverAddress( bytes32 hash, uint8 v, bytes32 r, bytes32 s) private pure returns (address) { bytes32 simple_hash = keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); address res = ecrecover(simple_hash, v, r, s); return res; } /** * Adds new peer to list of signature verifiers. * Internal function * @param newAddress address of new peer */ function addPeer(address newAddress) internal returns (uint) { require(isPeer[newAddress] == false); isPeer[newAddress] = true; ++peersCount; return peersCount; } function removePeer(address peerAddress) internal { require(isPeer[peerAddress] == true); isPeer[peerAddress] = false; --peersCount; } }
pragma solidity ^0.7.4; // "SPDX-License-Identifier: Apache License 2.0" import "./IERC20.sol"; import "./SafeMath.sol"; /** * @title Standard ERC20 token * * @dev Implementation of the basic standard token. * https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md * Originally based on code by FirstBlood: * https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol * * This implementation emits additional Approval events, allowing applications to reconstruct the allowance status for * all accounts just by listening to said events. Note that this isn't required by the specification, and other * compliant implementations may not do it. */ contract ERC20 is IERC20 { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowed; uint256 private _totalSupply; /** * @dev Total number of tokens in existence */ function totalSupply() public view override returns (uint256) { return _totalSupply; } /** * @dev Gets the balance of the specified address. * @param owner The address to query the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address owner) public view override returns (uint256) { return _balances[owner]; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param owner address The address which owns the funds. * @param spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance(address owner, address spender) public view override returns (uint256) { return _allowed[owner][spender]; } /** * @dev Transfer token for a specified address * @param to The address to transfer to. * @param value The amount to be transferred. */ function transfer(address to, uint256 value) public override returns (bool) { _transfer(msg.sender, to, value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * Beware that changing an allowance with this method brings the risk that someone may use both the old * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param spender The address which will spend the funds. * @param value The amount of tokens to be spent. */ function approve(address spender, uint256 value) public override returns (bool) { _approve(msg.sender, spender, value); return true; } /** * @dev Transfer tokens from one address to another. * Note that while this function emits an Approval event, this is not required as per the specification, * and other compliant implementations may not emit the event. * @param from address The address which you want to send tokens from * @param to address The address which you want to transfer to * @param value uint256 the amount of tokens to be transferred */ function transferFrom(address from, address to, uint256 value) public override returns (bool) { _transfer(from, to, value); _approve(from, msg.sender, _allowed[from][msg.sender].sub(value)); return true; } /** * @dev Increase the amount of tokens that an owner allowed to a spender. * approve should be called when allowed_[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * Emits an Approval event. * @param spender The address which will spend the funds. * @param addedValue The amount of tokens to increase the allowance by. */ function increaseAllowance(address spender, uint256 addedValue) public returns (bool) { _approve(msg.sender, spender, _allowed[msg.sender][spender].add(addedValue)); return true; } /** * @dev Decrease the amount of tokens that an owner allowed to a spender. * approve should be called when allowed_[_spender] == 0. To decrement * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * Emits an Approval event. * @param spender The address which will spend the funds. * @param subtractedValue The amount of tokens to decrease the allowance by. */ function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) { _approve(msg.sender, spender, _allowed[msg.sender][spender].sub(subtractedValue)); return true; } /** * @dev Transfer token for a specified addresses * @param from The address to transfer from. * @param to The address to transfer to. * @param value The amount to be transferred. */ function _transfer(address from, address to, uint256 value) internal { require(to != address(0)); _balances[from] = _balances[from].sub(value); _balances[to] = _balances[to].add(value); emit Transfer(from, to, value); } /** * @dev Internal function that mints an amount of the token and assigns it to * an account. This encapsulates the modification of balances such that the * proper events are emitted. * @param account The account that will receive the created tokens. * @param value The amount that will be created. */ function _mint(address account, uint256 value) internal { require(account != address(0)); _totalSupply = _totalSupply.add(value); _balances[account] = _balances[account].add(value); emit Transfer(address(0), account, value); } /** * @dev Internal function that burns an amount of the token of a given * account. * @param account The account whose tokens will be burnt. * @param value The amount that will be burnt. */ function _burn(address account, uint256 value) internal { require(account != address(0)); _totalSupply = _totalSupply.sub(value); _balances[account] = _balances[account].sub(value); emit Transfer(account, address(0), value); } /** * @dev Approve an address to spend another addresses' tokens. * @param owner The address that owns the tokens. * @param spender The address that will spend the tokens. * @param value The number of tokens that can be spent. */ function _approve(address owner, address spender, uint256 value) internal { require(spender != address(0)); require(owner != address(0)); _allowed[owner][spender] = value; emit Approval(owner, spender, value); } /** * @dev Internal function that burns an amount of the token of a given * account, deducting from the sender's allowance for said account. Uses the * internal burn function. * Emits an Approval event (reflecting the reduced allowance). * @param account The account whose tokens will be burnt. * @param value The amount that will be burnt. */ function _burnFrom(address account, uint256 value) internal { _burn(account, value); _approve(account, msg.sender, _allowed[account][msg.sender].sub(value)); } }
pragma solidity ^0.7.4; // "SPDX-License-Identifier: Apache License 2.0" import "./ERC20.sol"; /** * @title Burnable Token * @dev Token that can be irreversibly burned (destroyed). */ contract ERC20Burnable is ERC20 { /** * @dev Burns a specific amount of tokens. * @param value The amount of token to be burned. */ function burn(uint256 value) public { _burn(msg.sender, value); } /** * @dev Burns a specific amount of tokens from the target address and decrements allowance * @param from address The address which you want to send tokens from * @param value uint256 The amount of token to be burned */ function burnFrom(address from, uint256 value) public { _burnFrom(from, value); } }
pragma solidity ^0.7.4; // "SPDX-License-Identifier: Apache License 2.0" import "./IERC20.sol"; /** * @title ERC20Detailed token * @dev The decimals are only for visualization purposes. * All the operations are done using the smallest and indivisible token unit, * just as on Ethereum all the operations are done in wei. */ abstract contract ERC20Detailed is IERC20 { string private _name; string private _symbol; uint8 private _decimals; constructor ( string memory name_, string memory symbol_, uint8 decimals_) { _name = name_; _symbol = symbol_; _decimals = decimals_; } /** * @return the name of the token. */ function name() public view returns (string memory) { return _name; } /** * @return the symbol of the token. */ function symbol() public view returns (string memory) { return _symbol; } /** * @return the number of decimals of the token. */ function decimals() public view returns (uint8) { return _decimals; } }
pragma solidity ^0.7.4; // "SPDX-License-Identifier: MIT" interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); }
pragma solidity ^0.7.4; // "SPDX-License-Identifier: Apache License 2.0" import "./ERC20Detailed.sol"; import "./ERC20Burnable.sol"; import "./Ownable.sol"; contract MasterToken is ERC20Burnable, ERC20Detailed, Ownable { bytes32 public _sidechainAssetId; /** * @dev Constructor that gives the specified address all of existing tokens. */ constructor( string memory name, string memory symbol, uint8 decimals, address beneficiary, uint256 supply, bytes32 sidechainAssetId) ERC20Detailed(name, symbol, decimals) { _sidechainAssetId = sidechainAssetId; _mint(beneficiary, supply); } fallback() external { revert(); } function mintTokens(address beneficiary, uint256 amount) public onlyOwner { _mint(beneficiary, amount); } }
pragma solidity ^0.7.4; // "SPDX-License-Identifier: Apache License 2.0" /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ abstract contract Ownable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor () { _owner = msg.sender; emit OwnershipTransferred(address(0), _owner); } /** * @return the address of the owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(isOwner()); _; } /** * @return true if `msg.sender` is the owner of the contract. */ function isOwner() public view returns (bool) { return msg.sender == _owner; } /** * @dev Allows the current owner to relinquish control of the contract. * @notice Renouncing to ownership will leave the contract without an owner. * It will not be possible to call the functions with the `onlyOwner` * modifier anymore. */ function renounceOwnership() public onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function _transferOwnership(address newOwner) internal { require(newOwner != address(0)); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } }
pragma solidity ^0.7.4; // "SPDX-License-Identifier: Apache License 2.0" /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot 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-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address[]","name":"initialPeers","type":"address[]"},{"internalType":"address","name":"addressVAL","type":"address"},{"internalType":"address","name":"addressXOR","type":"address"},{"internalType":"bytes32","name":"networkId","type":"bytes32"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"peerId","type":"address"},{"indexed":false,"internalType":"bool","name":"removal","type":"bool"}],"name":"ChangePeers","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"destination","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"bytes32","name":"sidechainAsset","type":"bytes32"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"}],"name":"Migrated","type":"event"},{"anonymous":false,"inputs":[],"name":"PreparedForMigration","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"txHash","type":"bytes32"}],"name":"Withdrawal","type":"event"},{"stateMutability":"nonpayable","type":"fallback"},{"inputs":[],"name":"_addressVAL","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_addressXOR","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_networkId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_sidechainTokenAddressArray","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"_sidechainTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_sidechainTokensByAddress","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_uniqueAddresses","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"acceptedEthTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newToken","type":"address"},{"internalType":"string","name":"ticker","type":"string"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"bytes32","name":"txHash","type":"bytes32"},{"internalType":"uint8[]","name":"v","type":"uint8[]"},{"internalType":"bytes32[]","name":"r","type":"bytes32[]"},{"internalType":"bytes32[]","name":"s","type":"bytes32[]"}],"name":"addEthNativeToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"bytes32","name":"sidechainAssetId","type":"bytes32"},{"internalType":"bytes32","name":"txHash","type":"bytes32"},{"internalType":"uint8[]","name":"v","type":"uint8[]"},{"internalType":"bytes32[]","name":"r","type":"bytes32[]"},{"internalType":"bytes32[]","name":"s","type":"bytes32[]"}],"name":"addNewSidechainToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPeerAddress","type":"address"},{"internalType":"bytes32","name":"txHash","type":"bytes32"},{"internalType":"uint8[]","name":"v","type":"uint8[]"},{"internalType":"bytes32[]","name":"r","type":"bytes32[]"},{"internalType":"bytes32[]","name":"s","type":"bytes32[]"}],"name":"addPeerByPeer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isPeer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"peersCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"thisContractAddress","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint8[]","name":"v","type":"uint8[]"},{"internalType":"bytes32[]","name":"r","type":"bytes32[]"},{"internalType":"bytes32[]","name":"s","type":"bytes32[]"}],"name":"prepareForMigration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"to","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"bytes32","name":"txHash","type":"bytes32"},{"internalType":"uint8[]","name":"v","type":"uint8[]"},{"internalType":"bytes32[]","name":"r","type":"bytes32[]"},{"internalType":"bytes32[]","name":"s","type":"bytes32[]"}],"name":"receiveByEthereumAssetAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"sidechainAssetId","type":"bytes32"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"bytes32","name":"txHash","type":"bytes32"},{"internalType":"uint8[]","name":"v","type":"uint8[]"},{"internalType":"bytes32[]","name":"r","type":"bytes32[]"},{"internalType":"bytes32[]","name":"s","type":"bytes32[]"}],"name":"receiveBySidechainAssetId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"receivePayment","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"peerAddress","type":"address"},{"internalType":"bytes32","name":"txHash","type":"bytes32"},{"internalType":"uint8[]","name":"v","type":"uint8[]"},{"internalType":"bytes32[]","name":"r","type":"bytes32[]"},{"internalType":"bytes32[]","name":"s","type":"bytes32[]"}],"name":"removePeerByPeer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"to","type":"bytes32"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"sendERC20ToSidechain","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"to","type":"bytes32"}],"name":"sendEthToSidechain","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"thisContractAddress","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"address payable","name":"newContractAddress","type":"address"},{"internalType":"address[]","name":"erc20nativeTokens","type":"address[]"},{"internalType":"uint8[]","name":"v","type":"uint8[]"},{"internalType":"bytes32[]","name":"r","type":"bytes32[]"},{"internalType":"bytes32[]","name":"s","type":"bytes32[]"}],"name":"shutDownAndMigrate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"used","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040516200443338038062004433833981810160405260808110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b9083019060208201858111156200006e57600080fd5b82518660208202830111640100000000821117156200008c57600080fd5b82525081516020918201928201910280838360005b83811015620000bb578181015183820152602001620000a1565b50505050919091016040908152602083015190830151606090930151909450919250600090505b84518160ff161015620001215762000117858260ff16815181106200010357fe5b6020026020010151620001a160201b60201c565b50600101620000e2565b50600a80546001600160a01b03199081166001600160a01b03948516179182905560098054909116948416949094178455600b919091556000805460ff19908116600190811761ff0019168355928416825260056020526040808320805483168517905594549093168152929092208054909116909117905550620001fb565b6001600160a01b03811660009081526001602052604081205460ff1615620001c857600080fd5b506001600160a01b03166000908152600160208190526040909120805460ff191682179055600280549091019081905590565b614228806200020b6000396000f3fe608060405260043610620001575760003560e01c8063835c19f311620000bb578063b07c411f1162000079578063b07c411f1462000fe4578063c29bb3321462001012578063ca70cf6e146200102a578063cd55094714620011fe578063dfd9db891462001235578063fdfba25d14620015245762000162565b8063835c19f31462000bec5780638505e8681462000bf657806389c39baf1462000c245780639ee3fae51462000df8578063ae6664e01462000fcc5762000162565b806323ad7de2116200011557806323ad7de2146200066b5780633b69828814620009505780633e44cf7814620009685780635fde87c5146200099f578063687a82db14620009c957806375273ece1462000a005762000162565b806303ef9d1f146200017557806312c6fa1b14620001ba578063134064131462000205578063135f14e214620004365780631628313414620006215762000162565b366200016257600080fd5b3480156200016f57600080fd5b50600080fd5b3480156200018257600080fd5b50620001b8600480360360608110156200019b57600080fd5b50803590602081013590604001356001600160a01b031662001544565b005b348015620001c757600080fd5b50620001f160048036036020811015620001e057600080fd5b50356001600160a01b03166200188d565b604080519115158252519081900360200190f35b3480156200021257600080fd5b50620001b8600480360360e08110156200022b57600080fd5b6001600160a01b038235811692602081013592604082013590921691810190608081016060820135600160201b8111156200026557600080fd5b8201836020820111156200027857600080fd5b803590602001918460208302840111600160201b831117156200029a57600080fd5b919390929091602081019035600160201b811115620002b857600080fd5b820183602082011115620002cb57600080fd5b803590602001918460208302840111600160201b83111715620002ed57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156200033d57600080fd5b8201836020820111156200035057600080fd5b803590602001918460208302840111600160201b831117156200037257600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115620003c257600080fd5b820183602082011115620003d557600080fd5b803590602001918460208302840111600160201b83111715620003f757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550620018a2945050505050565b3480156200044357600080fd5b50620001b860048036036101008110156200045d57600080fd5b6001600160a01b03823581169260208101359260408201358316926060830135169160808101359181019060c0810160a0820135600160201b811115620004a357600080fd5b820183602082011115620004b657600080fd5b803590602001918460208302840111600160201b83111715620004d857600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156200052857600080fd5b8201836020820111156200053b57600080fd5b803590602001918460208302840111600160201b831117156200055d57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115620005ad57600080fd5b820183602082011115620005c057600080fd5b803590602001918460208302840111600160201b83111715620005e257600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955062001c8e945050505050565b3480156200062e57600080fd5b506200064f600480360360208110156200064757600080fd5b503562001ef3565b604080516001600160a01b039092168252519081900360200190f35b3480156200067857600080fd5b50620001b860048036036101008110156200069257600080fd5b810190602081018135600160201b811115620006ad57600080fd5b820183602082011115620006c057600080fd5b803590602001918460018302840111600160201b83111715620006e257600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b8111156200073557600080fd5b8201836020820111156200074857600080fd5b803590602001918460018302840111600160201b831117156200076a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929560ff85351695602086013595604081013595509193509150608081019060600135600160201b811115620007d257600080fd5b820183602082011115620007e557600080fd5b803590602001918460208302840111600160201b831117156200080757600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156200085757600080fd5b8201836020820111156200086a57600080fd5b803590602001918460208302840111600160201b831117156200088c57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115620008dc57600080fd5b820183602082011115620008ef57600080fd5b803590602001918460208302840111600160201b831117156200091157600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955062001f1e945050505050565b3480156200095d57600080fd5b506200064f62002280565b3480156200097557600080fd5b50620001f1600480360360208110156200098e57600080fd5b50356001600160a01b03166200228f565b348015620009ac57600080fd5b50620009b7620022a4565b60408051918252519081900360200190f35b348015620009d657600080fd5b50620001f160048036036020811015620009ef57600080fd5b50356001600160a01b0316620022aa565b34801562000a0d57600080fd5b50620001b8600480360361010081101562000a2757600080fd5b8135916020810135916001600160a01b0360408301358116926060810135909116916080820135919081019060c0810160a0820135600160201b81111562000a6e57600080fd5b82018360208201111562000a8157600080fd5b803590602001918460208302840111600160201b8311171562000aa357600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111562000af357600080fd5b82018360208201111562000b0657600080fd5b803590602001918460208302840111600160201b8311171562000b2857600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111562000b7857600080fd5b82018360208201111562000b8b57600080fd5b803590602001918460208302840111600160201b8311171562000bad57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550620022bf945050505050565b620001b8620024f7565b34801562000c0357600080fd5b506200064f6004803603602081101562000c1c57600080fd5b5035620024f9565b34801562000c3157600080fd5b50620001f1600480360360a081101562000c4a57600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111562000c7a57600080fd5b82018360208201111562000c8d57600080fd5b803590602001918460208302840111600160201b8311171562000caf57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111562000cff57600080fd5b82018360208201111562000d1257600080fd5b803590602001918460208302840111600160201b8311171562000d3457600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111562000d8457600080fd5b82018360208201111562000d9757600080fd5b803590602001918460208302840111600160201b8311171562000db957600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955062002514945050505050565b34801562000e0557600080fd5b50620001b8600480360360a081101562000e1e57600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111562000e4e57600080fd5b82018360208201111562000e6157600080fd5b803590602001918460208302840111600160201b8311171562000e8357600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111562000ed357600080fd5b82018360208201111562000ee657600080fd5b803590602001918460208302840111600160201b8311171562000f0857600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111562000f5857600080fd5b82018360208201111562000f6b57600080fd5b803590602001918460208302840111600160201b8311171562000f8d57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955062002683945050505050565b34801562000fd957600080fd5b50620009b762002810565b34801562000ff157600080fd5b50620001f1600480360360208110156200100a57600080fd5b503562002816565b3480156200101f57600080fd5b506200064f6200282b565b3480156200103757600080fd5b50620001f1600480360360a08110156200105057600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b8111156200108057600080fd5b8201836020820111156200109357600080fd5b803590602001918460208302840111600160201b83111715620010b557600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156200110557600080fd5b8201836020820111156200111857600080fd5b803590602001918460208302840111600160201b831117156200113a57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156200118a57600080fd5b8201836020820111156200119d57600080fd5b803590602001918460208302840111600160201b83111715620011bf57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506200283a945050505050565b3480156200120b57600080fd5b50620009b7600480360360208110156200122457600080fd5b50356001600160a01b0316620029a9565b3480156200124257600080fd5b50620001b860048036036101008110156200125c57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156200128757600080fd5b8201836020820111156200129a57600080fd5b803590602001918460018302840111600160201b83111715620012bc57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b8111156200130f57600080fd5b8201836020820111156200132257600080fd5b803590602001918460018302840111600160201b831117156200134457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929560ff85351695602086013595919450925060608101915060400135600160201b811115620013a657600080fd5b820183602082011115620013b957600080fd5b803590602001918460208302840111600160201b83111715620013db57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156200142b57600080fd5b8201836020820111156200143e57600080fd5b803590602001918460208302840111600160201b831117156200146057600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115620014b057600080fd5b820183602082011115620014c357600080fd5b803590602001918460208302840111600160201b83111715620014e557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550620029bb945050505050565b620001b8600480360360208110156200153c57600080fd5b503562002bcd565b60005460ff1615156001146200158c5760405162461bcd60e51b8152600401808060200182810382526033815260200180620041626033913960400191505060405180910390fd5b600054610100900460ff1615620015d55760405162461bcd60e51b8152600401808060200182810382526042815260200180620040ed6042913960600191505060405180910390fd5b60408051636eb1769f60e11b81523360048201523060248201529051829184916001600160a01b0384169163dd62ed3e916044808301926020929190829003018186803b1580156200162657600080fd5b505afa1580156200163b573d6000803e3d6000fd5b505050506040513d60208110156200165257600080fd5b50511015620016935760405162461bcd60e51b815260040180806020018281038252602d815260200180620040c0602d913960400191505060405180910390fd5b6001600160a01b03821660009081526007602052604090205480151580620016c857506009546001600160a01b038481169116145b80620016e15750600a546001600160a01b038481169116145b1562001759576040805163079cc67960e41b815233600482015260248101869052905184916001600160a01b038316916379cc67909160448082019260009290919082900301818387803b1580156200173957600080fd5b505af11580156200174e573d6000803e3d6000fd5b505050505062001837565b6001600160a01b03831660009081526005602052604090205460ff16620017b25760405162461bcd60e51b81526004018080602001828103825260338152602001806200412f6033913960400191505060405180910390fd5b604080516323b872dd60e01b81523360048201523060248201526044810186905290516001600160a01b038416916323b872dd9160648083019260209291908290030181600087803b1580156200180857600080fd5b505af11580156200181d573d6000803e3d6000fd5b505050506040513d60208110156200183457600080fd5b50505b60408051868152602081018690526001600160a01b038516818301526060810183905290517f85c0fa492ded927d3acca961da52b0dda1debb06d8c27fe189315f06bb6e26c89181900360800190a15050505050565b60046020526000908152604090205460ff1681565b60005460ff161515600114620018ea5760405162461bcd60e51b8152600401808060200182810382526033815260200180620041626033913960400191505060405180910390fd5b60005460ff610100909104161515600114620019385760405162461bcd60e51b815260040180806020018281038252603e81526020018062004195603e913960400191505060405180910390fd5b306001600160a01b038916146200194e57600080fd5b620019c88887898888600b5460405160200180876001600160a01b031660601b8152601401866001600160a01b031660601b81526014018581526020018484602002808284378083019250505082815260200196505050505050506040516020818303038152906040528051906020012084848462002d00565b62001a09576040805162461bcd60e51b815260206004820152601b6024820152600080516020620041d3833981519152604482015290519081900360640190fd5b60005b60085481101562001aa45760006008828154811062001a2757fe5b60009182526020822001546040805163f2fde38b60e01b81526001600160a01b038c811660048301529151919092169350839263f2fde38b926024808201939182900301818387803b15801562001a7d57600080fd5b505af115801562001a92573d6000803e3d6000fd5b50506001909301925062001a0c915050565b5060005b8481101562001be657600086868381811062001ac057fe5b905060200201356001600160a01b03169050806001600160a01b031663a9059cbb89836001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801562001b3057600080fd5b505afa15801562001b45573d6000803e3d6000fd5b505050506040513d602081101562001b5c57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801562001bae57600080fd5b505af115801562001bc3573d6000803e3d6000fd5b505050506040513d602081101562001bda57600080fd5b50505060010162001aa8565b50856001600160a01b031663835c19f3476040518263ffffffff1660e01b81526004016000604051808303818588803b15801562001c2357600080fd5b505af115801562001c38573d6000803e3d6000fd5b50506000805460ff191690555050604080516001600160a01b038916815290517fa2e7361c23d7820040603b83c0cd3f494d377bac69736377d75bb56c651a509892509081900360200190a15050505050505050565b60005460ff16151560011462001cd65760405162461bcd60e51b8152600401808060200182810382526033815260200180620041626033913960400191505060405180910390fd5b60008481526003602052604090205460ff161562001cf357600080fd5b62001d758888888888600b5460405160200180876001600160a01b031660601b8152601401868152602001856001600160a01b031660601b8152601401846001600160a01b031660601b815260140183815260200182815260200196505050505050506040516020818303038152906040528051906020012084848462002d00565b62001db6576040805162461bcd60e51b815260206004820152601b6024820152600080516020620041d3833981519152604482015290519081900360640190fd5b6001600160a01b03881662001e1957600084815260036020526040808220805460ff19166001179055516001600160a01b0388169189156108fc02918a91818181858888f1935050505015801562001e12573d6000803e3d6000fd5b5062001eb6565b6000848152600360209081526040808320805460ff19166001179055805163a9059cbb60e01b81526001600160a01b038a81166004830152602482018c905291518c949285169363a9059cbb936044808501949293928390030190829087803b15801562001e8657600080fd5b505af115801562001e9b573d6000803e3d6000fd5b505050506040513d602081101562001eb257600080fd5b5050505b6040805185815290517f0ce781a18c10c8289803c7c4cfd532d797113c4b41c9701ffad7d0a632ac555b9181900360200190a15050505050505050565b6008818154811062001f0457600080fd5b6000918252602090912001546001600160a01b0316905081565b60005460ff16151560011462001f665760405162461bcd60e51b8152600401808060200182810382526033815260200180620041626033913960400191505060405180910390fd5b60008481526003602052604090205460ff161562001f8357600080fd5b620020748888888888600b546040516020018087805190602001908083835b6020831062001fc35780518252601f19909201916020918201910162001fa2565b51815160209384036101000a600019018019909216911617905289519190930192890191508083835b602083106200200d5780518252601f19909201916020918201910162001fec565b6001836020036101000a0380198251168184511680821785525050505050509050018560ff1660f81b815260010184815260200183815260200182815260200196505050505050506040516020818303038152906040528051906020012084848462002d00565b620020b5576040805162461bcd60e51b815260206004820152601b6024820152600080516020620041d3833981519152604482015290519081900360640190fd5b60008888883060008a604051620020cc906200308e565b8080602001806020018760ff168152602001866001600160a01b03168152602001858152602001848152602001838103835289818151815260200191508051906020019080838360005b838110156200213057818101518382015260200162002116565b50505050905090810190601f1680156200215e5780820380516001836020036101000a031916815260200191505b5083810382528851815288516020918201918a019080838360005b838110156200219357818101518382015260200162002179565b50505050905090810190601f168015620021c15780820380516001836020036101000a031916815260200191505b5098505050505050505050604051809103906000f080158015620021e9573d6000803e3d6000fd5b50600087815260066020908152604080832080546001600160a01b039095166001600160a01b03199586168117909155808452600783528184209a909a556008805460018181019092557ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3018054909516909a179093559681526003909652909420805460ff191690951790945550505050505050565b6009546001600160a01b031681565b60016020526000908152604090205460ff1681565b600b5481565b60056020526000908152604090205460ff1681565b60005460ff161515600114620023075760405162461bcd60e51b8152600401808060200182810382526033815260200180620041626033913960400191505060405180910390fd5b6000888152600660205260409020546001600160a01b03166200235c5760405162461bcd60e51b81526004018080602001828103825260218152602001806200409f6021913960400191505060405180910390fd5b60008481526003602052604090205460ff16156200237957600080fd5b600b546040805160208082018c90528183018b90526bffffffffffffffffffffffff1960608b811b8216818501528a901b1660748301526088820188905260a8808301949094528251808303909401845260c89091019091528151910120620023e59084848462002d00565b62002426576040805162461bcd60e51b815260206004820152601b6024820152600080516020620041d3833981519152604482015290519081900360640190fd5b600088815260066020526040808220548151633c37699760e21b81526001600160a01b038a81166004830152602482018c905292519290911692839263f0dda65c92604480820193929182900301818387803b1580156200248657600080fd5b505af11580156200249b573d6000803e3d6000fd5b505050600086815260036020908152604091829020805460ff19166001179055815188815291517f0ce781a18c10c8289803c7c4cfd532d797113c4b41c9701ffad7d0a632ac555b9350918290030190a1505050505050505050565b565b6006602052600090815260409020546001600160a01b031681565b6000805460ff1615156001146200255d5760405162461bcd60e51b8152600401808060200182810382526033815260200180620041626033913960400191505060405180910390fd5b60008581526003602052604090205460ff16156200257a57600080fd5b620025cc8686600b5460405160200180846001600160a01b031660601b815260140183815260200182815260200193505050506040516020818303038152906040528051906020012085858562002d00565b6200260d576040805162461bcd60e51b815260206004820152601b6024820152600080516020620041d3833981519152604482015290519081900360640190fd5b620026188662002f16565b600085815260036020908152604091829020805460ff1916600190811790915582516001600160a01b038a1681529182015281517fa9fac23eb012e72fbd1f453498e7069c380385436763ee2c1c057b170d88d9f9929181900390910190a150600195945050505050565b60005460ff161515600114620026cb5760405162461bcd60e51b8152600401808060200182810382526033815260200180620041626033913960400191505060405180910390fd5b600054610100900460ff1615620027145760405162461bcd60e51b8152600401808060200182810382526042815260200180620040ed6042913960600191505060405180910390fd5b600054610100900460ff16156200272a57600080fd5b306001600160a01b038616146200274057600080fd5b620027928585600b5460405160200180846001600160a01b031660601b815260140183815260200182815260200193505050506040516020818303038152906040528051906020012084848462002d00565b620027d3576040805162461bcd60e51b815260206004820152601b6024820152600080516020620041d3833981519152604482015290519081900360640190fd5b6000805461ff0019166101001781556040517f5389de9593f75e6515eefa796bd2d3324759f441f2c9b2dcda0efb25190378ff9190a15050505050565b60025481565b60036020526000908152604090205460ff1681565b600a546001600160a01b031681565b6000805460ff161515600114620028835760405162461bcd60e51b8152600401808060200182810382526033815260200180620041626033913960400191505060405180910390fd5b60008581526003602052604090205460ff1615620028a057600080fd5b620028f28686600b5460405160200180846001600160a01b031660601b815260140183815260200182815260200193505050506040516020818303038152906040528051906020012085858562002d00565b62002933576040805162461bcd60e51b815260206004820152601b6024820152600080516020620041d3833981519152604482015290519081900360640190fd5b6200293e8662002f6d565b506000858152600360209081526040808320805460ff1916600117905580516001600160a01b038a1681529182019290925281517fa9fac23eb012e72fbd1f453498e7069c380385436763ee2c1c057b170d88d9f9929181900390910190a150600195945050505050565b60076020526000908152604090205481565b60005460ff16151560011462002a035760405162461bcd60e51b8152600401808060200182810382526033815260200180620041626033913960400191505060405180910390fd5b60008481526003602052604090205460ff161562002a2057600080fd5b6001600160a01b03881660009081526005602052604090205460ff161562002a4757600080fd5b62002b448888888888600b5460405160200180876001600160a01b031660601b815260140186805190602001908083835b6020831062002a995780518252601f19909201916020918201910162002a78565b51815160209384036101000a600019018019909216911617905288519190930192880191508083835b6020831062002ae35780518252601f19909201916020918201910162002ac2565b6001836020036101000a0380198251168184511680821785525050505050509050018460ff1660f81b815260010183815260200182815260200196505050505050506040516020818303038152906040528051906020012084848462002d00565b62002b85576040805162461bcd60e51b815260206004820152601b6024820152600080516020620041d3833981519152604482015290519081900360640190fd5b5050506001600160a01b039094166000908152600560209081526040808320805460ff1990811660019081179092559784526003909252909120805490951617909355505050565b60005460ff16151560011462002c155760405162461bcd60e51b8152600401808060200182810382526033815260200180620041626033913960400191505060405180910390fd5b600054610100900460ff161562002c5e5760405162461bcd60e51b8152600401808060200182810382526042815260200180620040ed6042913960600191505060405180910390fd5b6000341162002cb4576040805162461bcd60e51b815260206004820152601f60248201527f4554482056414c55452053484f554c44204245204d4f5245205448414e203000604482015290519081900360640190fd5b6040805182815234602082015260008183018190526060820181905291517f85c0fa492ded927d3acca961da52b0dda1debb06d8c27fe189315f06bb6e26c89181900360800190a15050565b60006001600254101562002d1357600080fd5b825184511462002d2257600080fd5b815183511462002d3157600080fd5b600060036001600254038162002d4357fe5b04600254039050808351101562002d5957600080fd5b600080845167ffffffffffffffff8111801562002d7557600080fd5b5060405190808252806020026020018201604052801562002da0578160200160208202803683370190505b50905060005b855181101562002eae57600062002dfc8a8a848151811062002dc457fe5b60200260200101518a858151811062002dd957fe5b60200260200101518a868151811062002dee57fe5b602002602001015162002fc7565b6001600160a01b03811660009081526001602081905260409091205491925060ff909116151514158062002e4d57506001600160a01b03811660009081526004602052604090205460ff1615156001145b1562002e5a575062002ea5565b8083858151811062002e6857fe5b6001600160a01b0392831660209182029290920181019190915291166000908152600490915260409020805460ff19166001908117909155909201915b60010162002da6565b5060005b8281101562002f095760006004600084848151811062002ece57fe5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905560010162002eb2565b5050101595945050505050565b6001600160a01b03811660009081526001602081905260409091205460ff1615151462002f4257600080fd5b6001600160a01b03166000908152600160205260409020805460ff1916905560028054600019019055565b6001600160a01b03811660009081526001602052604081205460ff161562002f9457600080fd5b506001600160a01b03166000908152600160208190526040909120805460ff191682179055600280549091019081905590565b6000808560405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c01828152602001915050604051602081830303815290604052805190602001209050600060018287878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801562003078573d6000803e3d6000fd5b5050604051601f19015198975050505050505050565b611002806200309d8339019056fe60806040523480156200001157600080fd5b506040516200100238038062001002833981810160405260c08110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b9083019060208201858111156200006e57600080fd5b82516401000000008111828201881017156200008957600080fd5b82525081516020918201929091019080838360005b83811015620000b85781810151838201526020016200009e565b50505050905090810190601f168015620000e65780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200010a57600080fd5b9083019060208201858111156200012057600080fd5b82516401000000008111828201881017156200013b57600080fd5b82525081516020918201929091019080838360005b838110156200016a57818101518382015260200162000150565b50505050905090810190601f168015620001985780820380516001836020036101000a031916815260200191505b506040908152602082810151918301516060840151608090940151885193965090945091879187918791620001d39160039186019062000388565b508151620001e990600490602085019062000388565b506005805460ff191660ff9290921691909117610100600160a81b03191661010033810291909117918290556040516001600160a01b0391909204169250600091507f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a360068190556200026183836200026d565b50505050505062000434565b6001600160a01b0382166200028157600080fd5b6200029d816002546200032660201b620007171790919060201c565b6002556001600160a01b03821660009081526020818152604090912054620002d09183906200071762000326821b17901c565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008282018381101562000381576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620003c057600085556200040b565b82601f10620003db57805160ff19168380011785556200040b565b828001600101855582156200040b579182015b828111156200040b578251825591602001919060010190620003ee565b50620004199291506200041d565b5090565b5b808211156200041957600081556001016200041e565b610bbe80620004446000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c806379cc6790116100ad578063a9059cbb11610071578063a9059cbb14610356578063dd62ed3e14610382578063f0dda65c146103b0578063f2fde38b146103dc578063fcec35a91461040257610121565b806379cc6790146102ca5780638da5cb5b146102f65780638f32d59b1461031a57806395d89b4114610322578063a457c2d71461032a57610121565b8063313ce567116100f4578063313ce56714610233578063395093511461025157806342966c681461027d57806370a082311461029c578063715018a6146102c257610121565b806306fdde0314610126578063095ea7b3146101a357806318160ddd146101e357806323b872dd146101fd575b600080fd5b61012e61040a565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610168578181015183820152602001610150565b50505050905090810190601f1680156101955780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101cf600480360360408110156101b957600080fd5b506001600160a01b0381351690602001356104a0565b604080519115158252519081900360200190f35b6101eb6104b6565b60408051918252519081900360200190f35b6101cf6004803603606081101561021357600080fd5b506001600160a01b038135811691602081013590911690604001356104bc565b61023b61050d565b6040805160ff9092168252519081900360200190f35b6101cf6004803603604081101561026757600080fd5b506001600160a01b038135169060200135610516565b61029a6004803603602081101561029357600080fd5b503561054c565b005b6101eb600480360360208110156102b257600080fd5b50356001600160a01b0316610559565b61029a610574565b61029a600480360360408110156102e057600080fd5b506001600160a01b0381351690602001356105d5565b6102fe6105e3565b604080516001600160a01b039092168252519081900360200190f35b6101cf6105f7565b61012e61060d565b6101cf6004803603604081101561034057600080fd5b506001600160a01b03813516906020013561066e565b6101cf6004803603604081101561036c57600080fd5b506001600160a01b0381351690602001356106a4565b6101eb6004803603604081101561039857600080fd5b506001600160a01b03813581169160200135166106b1565b61029a600480360360408110156103c657600080fd5b506001600160a01b0381351690602001356106dc565b61029a600480360360208110156103f257600080fd5b50356001600160a01b03166106f7565b6101eb610711565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104965780601f1061046b57610100808354040283529160200191610496565b820191906000526020600020905b81548152906001019060200180831161047957829003601f168201915b5050505050905090565b60006104ad338484610778565b50600192915050565b60025490565b60006104c9848484610800565b6001600160a01b0384166000908152600160209081526040808320338085529252909120546105039186916104fe90866108bf565b610778565b5060019392505050565b60055460ff1690565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916104ad9185906104fe9086610717565b6105563382610901565b50565b6001600160a01b031660009081526020819052604090205490565b61057c6105f7565b61058557600080fd5b60055460405160009161010090046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360058054610100600160a81b0319169055565b6105df828261099c565b5050565b60055461010090046001600160a01b031690565b60055461010090046001600160a01b0316331490565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104965780601f1061046b57610100808354040283529160200191610496565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916104ad9185906104fe90866108bf565b60006104ad338484610800565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6106e46105f7565b6106ed57600080fd5b6105df82826109db565b6106ff6105f7565b61070857600080fd5b61055681610a77565b60065481565b600082820183811015610771576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b03821661078b57600080fd5b6001600160a01b03831661079e57600080fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b03821661081357600080fd5b6001600160a01b03831660009081526020819052604090205461083690826108bf565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546108659082610717565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600061077183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610af1565b6001600160a01b03821661091457600080fd5b60025461092190826108bf565b6002556001600160a01b03821660009081526020819052604090205461094790826108bf565b6001600160a01b038316600081815260208181526040808320949094558351858152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35050565b6109a68282610901565b6001600160a01b0382166000908152600160209081526040808320338085529252909120546105df9184916104fe90856108bf565b6001600160a01b0382166109ee57600080fd5b6002546109fb9082610717565b6002556001600160a01b038216600090815260208190526040902054610a219082610717565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038116610a8a57600080fd5b6005546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60008184841115610b805760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610b45578181015183820152602001610b2d565b50505050905090810190601f168015610b725780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50505090039056fea26469706673582212201745b67515403da237cfceff0ec52402e781e4bdab86640854feeb20c207f96464736f6c6343000706003353696465636861696e206173736574206973206e6f7420726567697374657265644e4f5420454e4f5547482044454c45474154454420544f4b454e53204f4e2053454e4445522042414c414e4345436f6e74726163742073686f756c64206e6f7420626520707265706172656420666f72206d6967726174696f6e20746f2075736520746869732066756e6374696f6e54686520546f6b656e206973206e6f7420616363657074656420666f72207472616e7366657220746f2073696465636861696e436f6e74726163742073686f756c6420626520696e697469616c697a656420746f2075736520746869732066756e6374696f6e436f6e74726163742073686f756c6420626520707265706172656420666f72206d6967726174696f6e20746f2075736520746869732066756e6374696f6e50656572207369676e6174757265732061726520696e76616c69640000000000a2646970667358221220f60663207c0591a16edf5766605830e881fed967022786eeb35ad6068643804e64736f6c634300070600330000000000000000000000000000000000000000000000000000000000000080000000000000000000000000e88f8313e61a97cec1871ee37fbbe2a8bf3ed1e400000000000000000000000040fd72257597aa14c7231a7b1aaa29fce868f677000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000006c9e8391a0444c739e7e2edd37a2c6e3381b1cbf000000000000000000000000ef22d478a53bc8bbe854cef8ba2eb79c49a1a171
Deployed Bytecode
0x608060405260043610620001575760003560e01c8063835c19f311620000bb578063b07c411f1162000079578063b07c411f1462000fe4578063c29bb3321462001012578063ca70cf6e146200102a578063cd55094714620011fe578063dfd9db891462001235578063fdfba25d14620015245762000162565b8063835c19f31462000bec5780638505e8681462000bf657806389c39baf1462000c245780639ee3fae51462000df8578063ae6664e01462000fcc5762000162565b806323ad7de2116200011557806323ad7de2146200066b5780633b69828814620009505780633e44cf7814620009685780635fde87c5146200099f578063687a82db14620009c957806375273ece1462000a005762000162565b806303ef9d1f146200017557806312c6fa1b14620001ba578063134064131462000205578063135f14e214620004365780631628313414620006215762000162565b366200016257600080fd5b3480156200016f57600080fd5b50600080fd5b3480156200018257600080fd5b50620001b8600480360360608110156200019b57600080fd5b50803590602081013590604001356001600160a01b031662001544565b005b348015620001c757600080fd5b50620001f160048036036020811015620001e057600080fd5b50356001600160a01b03166200188d565b604080519115158252519081900360200190f35b3480156200021257600080fd5b50620001b8600480360360e08110156200022b57600080fd5b6001600160a01b038235811692602081013592604082013590921691810190608081016060820135600160201b8111156200026557600080fd5b8201836020820111156200027857600080fd5b803590602001918460208302840111600160201b831117156200029a57600080fd5b919390929091602081019035600160201b811115620002b857600080fd5b820183602082011115620002cb57600080fd5b803590602001918460208302840111600160201b83111715620002ed57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156200033d57600080fd5b8201836020820111156200035057600080fd5b803590602001918460208302840111600160201b831117156200037257600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115620003c257600080fd5b820183602082011115620003d557600080fd5b803590602001918460208302840111600160201b83111715620003f757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550620018a2945050505050565b3480156200044357600080fd5b50620001b860048036036101008110156200045d57600080fd5b6001600160a01b03823581169260208101359260408201358316926060830135169160808101359181019060c0810160a0820135600160201b811115620004a357600080fd5b820183602082011115620004b657600080fd5b803590602001918460208302840111600160201b83111715620004d857600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156200052857600080fd5b8201836020820111156200053b57600080fd5b803590602001918460208302840111600160201b831117156200055d57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115620005ad57600080fd5b820183602082011115620005c057600080fd5b803590602001918460208302840111600160201b83111715620005e257600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955062001c8e945050505050565b3480156200062e57600080fd5b506200064f600480360360208110156200064757600080fd5b503562001ef3565b604080516001600160a01b039092168252519081900360200190f35b3480156200067857600080fd5b50620001b860048036036101008110156200069257600080fd5b810190602081018135600160201b811115620006ad57600080fd5b820183602082011115620006c057600080fd5b803590602001918460018302840111600160201b83111715620006e257600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b8111156200073557600080fd5b8201836020820111156200074857600080fd5b803590602001918460018302840111600160201b831117156200076a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929560ff85351695602086013595604081013595509193509150608081019060600135600160201b811115620007d257600080fd5b820183602082011115620007e557600080fd5b803590602001918460208302840111600160201b831117156200080757600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156200085757600080fd5b8201836020820111156200086a57600080fd5b803590602001918460208302840111600160201b831117156200088c57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115620008dc57600080fd5b820183602082011115620008ef57600080fd5b803590602001918460208302840111600160201b831117156200091157600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955062001f1e945050505050565b3480156200095d57600080fd5b506200064f62002280565b3480156200097557600080fd5b50620001f1600480360360208110156200098e57600080fd5b50356001600160a01b03166200228f565b348015620009ac57600080fd5b50620009b7620022a4565b60408051918252519081900360200190f35b348015620009d657600080fd5b50620001f160048036036020811015620009ef57600080fd5b50356001600160a01b0316620022aa565b34801562000a0d57600080fd5b50620001b8600480360361010081101562000a2757600080fd5b8135916020810135916001600160a01b0360408301358116926060810135909116916080820135919081019060c0810160a0820135600160201b81111562000a6e57600080fd5b82018360208201111562000a8157600080fd5b803590602001918460208302840111600160201b8311171562000aa357600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111562000af357600080fd5b82018360208201111562000b0657600080fd5b803590602001918460208302840111600160201b8311171562000b2857600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111562000b7857600080fd5b82018360208201111562000b8b57600080fd5b803590602001918460208302840111600160201b8311171562000bad57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550620022bf945050505050565b620001b8620024f7565b34801562000c0357600080fd5b506200064f6004803603602081101562000c1c57600080fd5b5035620024f9565b34801562000c3157600080fd5b50620001f1600480360360a081101562000c4a57600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111562000c7a57600080fd5b82018360208201111562000c8d57600080fd5b803590602001918460208302840111600160201b8311171562000caf57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111562000cff57600080fd5b82018360208201111562000d1257600080fd5b803590602001918460208302840111600160201b8311171562000d3457600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111562000d8457600080fd5b82018360208201111562000d9757600080fd5b803590602001918460208302840111600160201b8311171562000db957600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955062002514945050505050565b34801562000e0557600080fd5b50620001b8600480360360a081101562000e1e57600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111562000e4e57600080fd5b82018360208201111562000e6157600080fd5b803590602001918460208302840111600160201b8311171562000e8357600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111562000ed357600080fd5b82018360208201111562000ee657600080fd5b803590602001918460208302840111600160201b8311171562000f0857600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111562000f5857600080fd5b82018360208201111562000f6b57600080fd5b803590602001918460208302840111600160201b8311171562000f8d57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955062002683945050505050565b34801562000fd957600080fd5b50620009b762002810565b34801562000ff157600080fd5b50620001f1600480360360208110156200100a57600080fd5b503562002816565b3480156200101f57600080fd5b506200064f6200282b565b3480156200103757600080fd5b50620001f1600480360360a08110156200105057600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b8111156200108057600080fd5b8201836020820111156200109357600080fd5b803590602001918460208302840111600160201b83111715620010b557600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156200110557600080fd5b8201836020820111156200111857600080fd5b803590602001918460208302840111600160201b831117156200113a57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156200118a57600080fd5b8201836020820111156200119d57600080fd5b803590602001918460208302840111600160201b83111715620011bf57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506200283a945050505050565b3480156200120b57600080fd5b50620009b7600480360360208110156200122457600080fd5b50356001600160a01b0316620029a9565b3480156200124257600080fd5b50620001b860048036036101008110156200125c57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156200128757600080fd5b8201836020820111156200129a57600080fd5b803590602001918460018302840111600160201b83111715620012bc57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b8111156200130f57600080fd5b8201836020820111156200132257600080fd5b803590602001918460018302840111600160201b831117156200134457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929560ff85351695602086013595919450925060608101915060400135600160201b811115620013a657600080fd5b820183602082011115620013b957600080fd5b803590602001918460208302840111600160201b83111715620013db57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156200142b57600080fd5b8201836020820111156200143e57600080fd5b803590602001918460208302840111600160201b831117156200146057600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115620014b057600080fd5b820183602082011115620014c357600080fd5b803590602001918460208302840111600160201b83111715620014e557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550620029bb945050505050565b620001b8600480360360208110156200153c57600080fd5b503562002bcd565b60005460ff1615156001146200158c5760405162461bcd60e51b8152600401808060200182810382526033815260200180620041626033913960400191505060405180910390fd5b600054610100900460ff1615620015d55760405162461bcd60e51b8152600401808060200182810382526042815260200180620040ed6042913960600191505060405180910390fd5b60408051636eb1769f60e11b81523360048201523060248201529051829184916001600160a01b0384169163dd62ed3e916044808301926020929190829003018186803b1580156200162657600080fd5b505afa1580156200163b573d6000803e3d6000fd5b505050506040513d60208110156200165257600080fd5b50511015620016935760405162461bcd60e51b815260040180806020018281038252602d815260200180620040c0602d913960400191505060405180910390fd5b6001600160a01b03821660009081526007602052604090205480151580620016c857506009546001600160a01b038481169116145b80620016e15750600a546001600160a01b038481169116145b1562001759576040805163079cc67960e41b815233600482015260248101869052905184916001600160a01b038316916379cc67909160448082019260009290919082900301818387803b1580156200173957600080fd5b505af11580156200174e573d6000803e3d6000fd5b505050505062001837565b6001600160a01b03831660009081526005602052604090205460ff16620017b25760405162461bcd60e51b81526004018080602001828103825260338152602001806200412f6033913960400191505060405180910390fd5b604080516323b872dd60e01b81523360048201523060248201526044810186905290516001600160a01b038416916323b872dd9160648083019260209291908290030181600087803b1580156200180857600080fd5b505af11580156200181d573d6000803e3d6000fd5b505050506040513d60208110156200183457600080fd5b50505b60408051868152602081018690526001600160a01b038516818301526060810183905290517f85c0fa492ded927d3acca961da52b0dda1debb06d8c27fe189315f06bb6e26c89181900360800190a15050505050565b60046020526000908152604090205460ff1681565b60005460ff161515600114620018ea5760405162461bcd60e51b8152600401808060200182810382526033815260200180620041626033913960400191505060405180910390fd5b60005460ff610100909104161515600114620019385760405162461bcd60e51b815260040180806020018281038252603e81526020018062004195603e913960400191505060405180910390fd5b306001600160a01b038916146200194e57600080fd5b620019c88887898888600b5460405160200180876001600160a01b031660601b8152601401866001600160a01b031660601b81526014018581526020018484602002808284378083019250505082815260200196505050505050506040516020818303038152906040528051906020012084848462002d00565b62001a09576040805162461bcd60e51b815260206004820152601b6024820152600080516020620041d3833981519152604482015290519081900360640190fd5b60005b60085481101562001aa45760006008828154811062001a2757fe5b60009182526020822001546040805163f2fde38b60e01b81526001600160a01b038c811660048301529151919092169350839263f2fde38b926024808201939182900301818387803b15801562001a7d57600080fd5b505af115801562001a92573d6000803e3d6000fd5b50506001909301925062001a0c915050565b5060005b8481101562001be657600086868381811062001ac057fe5b905060200201356001600160a01b03169050806001600160a01b031663a9059cbb89836001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801562001b3057600080fd5b505afa15801562001b45573d6000803e3d6000fd5b505050506040513d602081101562001b5c57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801562001bae57600080fd5b505af115801562001bc3573d6000803e3d6000fd5b505050506040513d602081101562001bda57600080fd5b50505060010162001aa8565b50856001600160a01b031663835c19f3476040518263ffffffff1660e01b81526004016000604051808303818588803b15801562001c2357600080fd5b505af115801562001c38573d6000803e3d6000fd5b50506000805460ff191690555050604080516001600160a01b038916815290517fa2e7361c23d7820040603b83c0cd3f494d377bac69736377d75bb56c651a509892509081900360200190a15050505050505050565b60005460ff16151560011462001cd65760405162461bcd60e51b8152600401808060200182810382526033815260200180620041626033913960400191505060405180910390fd5b60008481526003602052604090205460ff161562001cf357600080fd5b62001d758888888888600b5460405160200180876001600160a01b031660601b8152601401868152602001856001600160a01b031660601b8152601401846001600160a01b031660601b815260140183815260200182815260200196505050505050506040516020818303038152906040528051906020012084848462002d00565b62001db6576040805162461bcd60e51b815260206004820152601b6024820152600080516020620041d3833981519152604482015290519081900360640190fd5b6001600160a01b03881662001e1957600084815260036020526040808220805460ff19166001179055516001600160a01b0388169189156108fc02918a91818181858888f1935050505015801562001e12573d6000803e3d6000fd5b5062001eb6565b6000848152600360209081526040808320805460ff19166001179055805163a9059cbb60e01b81526001600160a01b038a81166004830152602482018c905291518c949285169363a9059cbb936044808501949293928390030190829087803b15801562001e8657600080fd5b505af115801562001e9b573d6000803e3d6000fd5b505050506040513d602081101562001eb257600080fd5b5050505b6040805185815290517f0ce781a18c10c8289803c7c4cfd532d797113c4b41c9701ffad7d0a632ac555b9181900360200190a15050505050505050565b6008818154811062001f0457600080fd5b6000918252602090912001546001600160a01b0316905081565b60005460ff16151560011462001f665760405162461bcd60e51b8152600401808060200182810382526033815260200180620041626033913960400191505060405180910390fd5b60008481526003602052604090205460ff161562001f8357600080fd5b620020748888888888600b546040516020018087805190602001908083835b6020831062001fc35780518252601f19909201916020918201910162001fa2565b51815160209384036101000a600019018019909216911617905289519190930192890191508083835b602083106200200d5780518252601f19909201916020918201910162001fec565b6001836020036101000a0380198251168184511680821785525050505050509050018560ff1660f81b815260010184815260200183815260200182815260200196505050505050506040516020818303038152906040528051906020012084848462002d00565b620020b5576040805162461bcd60e51b815260206004820152601b6024820152600080516020620041d3833981519152604482015290519081900360640190fd5b60008888883060008a604051620020cc906200308e565b8080602001806020018760ff168152602001866001600160a01b03168152602001858152602001848152602001838103835289818151815260200191508051906020019080838360005b838110156200213057818101518382015260200162002116565b50505050905090810190601f1680156200215e5780820380516001836020036101000a031916815260200191505b5083810382528851815288516020918201918a019080838360005b838110156200219357818101518382015260200162002179565b50505050905090810190601f168015620021c15780820380516001836020036101000a031916815260200191505b5098505050505050505050604051809103906000f080158015620021e9573d6000803e3d6000fd5b50600087815260066020908152604080832080546001600160a01b039095166001600160a01b03199586168117909155808452600783528184209a909a556008805460018181019092557ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3018054909516909a179093559681526003909652909420805460ff191690951790945550505050505050565b6009546001600160a01b031681565b60016020526000908152604090205460ff1681565b600b5481565b60056020526000908152604090205460ff1681565b60005460ff161515600114620023075760405162461bcd60e51b8152600401808060200182810382526033815260200180620041626033913960400191505060405180910390fd5b6000888152600660205260409020546001600160a01b03166200235c5760405162461bcd60e51b81526004018080602001828103825260218152602001806200409f6021913960400191505060405180910390fd5b60008481526003602052604090205460ff16156200237957600080fd5b600b546040805160208082018c90528183018b90526bffffffffffffffffffffffff1960608b811b8216818501528a901b1660748301526088820188905260a8808301949094528251808303909401845260c89091019091528151910120620023e59084848462002d00565b62002426576040805162461bcd60e51b815260206004820152601b6024820152600080516020620041d3833981519152604482015290519081900360640190fd5b600088815260066020526040808220548151633c37699760e21b81526001600160a01b038a81166004830152602482018c905292519290911692839263f0dda65c92604480820193929182900301818387803b1580156200248657600080fd5b505af11580156200249b573d6000803e3d6000fd5b505050600086815260036020908152604091829020805460ff19166001179055815188815291517f0ce781a18c10c8289803c7c4cfd532d797113c4b41c9701ffad7d0a632ac555b9350918290030190a1505050505050505050565b565b6006602052600090815260409020546001600160a01b031681565b6000805460ff1615156001146200255d5760405162461bcd60e51b8152600401808060200182810382526033815260200180620041626033913960400191505060405180910390fd5b60008581526003602052604090205460ff16156200257a57600080fd5b620025cc8686600b5460405160200180846001600160a01b031660601b815260140183815260200182815260200193505050506040516020818303038152906040528051906020012085858562002d00565b6200260d576040805162461bcd60e51b815260206004820152601b6024820152600080516020620041d3833981519152604482015290519081900360640190fd5b620026188662002f16565b600085815260036020908152604091829020805460ff1916600190811790915582516001600160a01b038a1681529182015281517fa9fac23eb012e72fbd1f453498e7069c380385436763ee2c1c057b170d88d9f9929181900390910190a150600195945050505050565b60005460ff161515600114620026cb5760405162461bcd60e51b8152600401808060200182810382526033815260200180620041626033913960400191505060405180910390fd5b600054610100900460ff1615620027145760405162461bcd60e51b8152600401808060200182810382526042815260200180620040ed6042913960600191505060405180910390fd5b600054610100900460ff16156200272a57600080fd5b306001600160a01b038616146200274057600080fd5b620027928585600b5460405160200180846001600160a01b031660601b815260140183815260200182815260200193505050506040516020818303038152906040528051906020012084848462002d00565b620027d3576040805162461bcd60e51b815260206004820152601b6024820152600080516020620041d3833981519152604482015290519081900360640190fd5b6000805461ff0019166101001781556040517f5389de9593f75e6515eefa796bd2d3324759f441f2c9b2dcda0efb25190378ff9190a15050505050565b60025481565b60036020526000908152604090205460ff1681565b600a546001600160a01b031681565b6000805460ff161515600114620028835760405162461bcd60e51b8152600401808060200182810382526033815260200180620041626033913960400191505060405180910390fd5b60008581526003602052604090205460ff1615620028a057600080fd5b620028f28686600b5460405160200180846001600160a01b031660601b815260140183815260200182815260200193505050506040516020818303038152906040528051906020012085858562002d00565b62002933576040805162461bcd60e51b815260206004820152601b6024820152600080516020620041d3833981519152604482015290519081900360640190fd5b6200293e8662002f6d565b506000858152600360209081526040808320805460ff1916600117905580516001600160a01b038a1681529182019290925281517fa9fac23eb012e72fbd1f453498e7069c380385436763ee2c1c057b170d88d9f9929181900390910190a150600195945050505050565b60076020526000908152604090205481565b60005460ff16151560011462002a035760405162461bcd60e51b8152600401808060200182810382526033815260200180620041626033913960400191505060405180910390fd5b60008481526003602052604090205460ff161562002a2057600080fd5b6001600160a01b03881660009081526005602052604090205460ff161562002a4757600080fd5b62002b448888888888600b5460405160200180876001600160a01b031660601b815260140186805190602001908083835b6020831062002a995780518252601f19909201916020918201910162002a78565b51815160209384036101000a600019018019909216911617905288519190930192880191508083835b6020831062002ae35780518252601f19909201916020918201910162002ac2565b6001836020036101000a0380198251168184511680821785525050505050509050018460ff1660f81b815260010183815260200182815260200196505050505050506040516020818303038152906040528051906020012084848462002d00565b62002b85576040805162461bcd60e51b815260206004820152601b6024820152600080516020620041d3833981519152604482015290519081900360640190fd5b5050506001600160a01b039094166000908152600560209081526040808320805460ff1990811660019081179092559784526003909252909120805490951617909355505050565b60005460ff16151560011462002c155760405162461bcd60e51b8152600401808060200182810382526033815260200180620041626033913960400191505060405180910390fd5b600054610100900460ff161562002c5e5760405162461bcd60e51b8152600401808060200182810382526042815260200180620040ed6042913960600191505060405180910390fd5b6000341162002cb4576040805162461bcd60e51b815260206004820152601f60248201527f4554482056414c55452053484f554c44204245204d4f5245205448414e203000604482015290519081900360640190fd5b6040805182815234602082015260008183018190526060820181905291517f85c0fa492ded927d3acca961da52b0dda1debb06d8c27fe189315f06bb6e26c89181900360800190a15050565b60006001600254101562002d1357600080fd5b825184511462002d2257600080fd5b815183511462002d3157600080fd5b600060036001600254038162002d4357fe5b04600254039050808351101562002d5957600080fd5b600080845167ffffffffffffffff8111801562002d7557600080fd5b5060405190808252806020026020018201604052801562002da0578160200160208202803683370190505b50905060005b855181101562002eae57600062002dfc8a8a848151811062002dc457fe5b60200260200101518a858151811062002dd957fe5b60200260200101518a868151811062002dee57fe5b602002602001015162002fc7565b6001600160a01b03811660009081526001602081905260409091205491925060ff909116151514158062002e4d57506001600160a01b03811660009081526004602052604090205460ff1615156001145b1562002e5a575062002ea5565b8083858151811062002e6857fe5b6001600160a01b0392831660209182029290920181019190915291166000908152600490915260409020805460ff19166001908117909155909201915b60010162002da6565b5060005b8281101562002f095760006004600084848151811062002ece57fe5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905560010162002eb2565b5050101595945050505050565b6001600160a01b03811660009081526001602081905260409091205460ff1615151462002f4257600080fd5b6001600160a01b03166000908152600160205260409020805460ff1916905560028054600019019055565b6001600160a01b03811660009081526001602052604081205460ff161562002f9457600080fd5b506001600160a01b03166000908152600160208190526040909120805460ff191682179055600280549091019081905590565b6000808560405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c01828152602001915050604051602081830303815290604052805190602001209050600060018287878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801562003078573d6000803e3d6000fd5b5050604051601f19015198975050505050505050565b611002806200309d8339019056fe60806040523480156200001157600080fd5b506040516200100238038062001002833981810160405260c08110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b9083019060208201858111156200006e57600080fd5b82516401000000008111828201881017156200008957600080fd5b82525081516020918201929091019080838360005b83811015620000b85781810151838201526020016200009e565b50505050905090810190601f168015620000e65780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200010a57600080fd5b9083019060208201858111156200012057600080fd5b82516401000000008111828201881017156200013b57600080fd5b82525081516020918201929091019080838360005b838110156200016a57818101518382015260200162000150565b50505050905090810190601f168015620001985780820380516001836020036101000a031916815260200191505b506040908152602082810151918301516060840151608090940151885193965090945091879187918791620001d39160039186019062000388565b508151620001e990600490602085019062000388565b506005805460ff191660ff9290921691909117610100600160a81b03191661010033810291909117918290556040516001600160a01b0391909204169250600091507f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a360068190556200026183836200026d565b50505050505062000434565b6001600160a01b0382166200028157600080fd5b6200029d816002546200032660201b620007171790919060201c565b6002556001600160a01b03821660009081526020818152604090912054620002d09183906200071762000326821b17901c565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008282018381101562000381576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620003c057600085556200040b565b82601f10620003db57805160ff19168380011785556200040b565b828001600101855582156200040b579182015b828111156200040b578251825591602001919060010190620003ee565b50620004199291506200041d565b5090565b5b808211156200041957600081556001016200041e565b610bbe80620004446000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c806379cc6790116100ad578063a9059cbb11610071578063a9059cbb14610356578063dd62ed3e14610382578063f0dda65c146103b0578063f2fde38b146103dc578063fcec35a91461040257610121565b806379cc6790146102ca5780638da5cb5b146102f65780638f32d59b1461031a57806395d89b4114610322578063a457c2d71461032a57610121565b8063313ce567116100f4578063313ce56714610233578063395093511461025157806342966c681461027d57806370a082311461029c578063715018a6146102c257610121565b806306fdde0314610126578063095ea7b3146101a357806318160ddd146101e357806323b872dd146101fd575b600080fd5b61012e61040a565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610168578181015183820152602001610150565b50505050905090810190601f1680156101955780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101cf600480360360408110156101b957600080fd5b506001600160a01b0381351690602001356104a0565b604080519115158252519081900360200190f35b6101eb6104b6565b60408051918252519081900360200190f35b6101cf6004803603606081101561021357600080fd5b506001600160a01b038135811691602081013590911690604001356104bc565b61023b61050d565b6040805160ff9092168252519081900360200190f35b6101cf6004803603604081101561026757600080fd5b506001600160a01b038135169060200135610516565b61029a6004803603602081101561029357600080fd5b503561054c565b005b6101eb600480360360208110156102b257600080fd5b50356001600160a01b0316610559565b61029a610574565b61029a600480360360408110156102e057600080fd5b506001600160a01b0381351690602001356105d5565b6102fe6105e3565b604080516001600160a01b039092168252519081900360200190f35b6101cf6105f7565b61012e61060d565b6101cf6004803603604081101561034057600080fd5b506001600160a01b03813516906020013561066e565b6101cf6004803603604081101561036c57600080fd5b506001600160a01b0381351690602001356106a4565b6101eb6004803603604081101561039857600080fd5b506001600160a01b03813581169160200135166106b1565b61029a600480360360408110156103c657600080fd5b506001600160a01b0381351690602001356106dc565b61029a600480360360208110156103f257600080fd5b50356001600160a01b03166106f7565b6101eb610711565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104965780601f1061046b57610100808354040283529160200191610496565b820191906000526020600020905b81548152906001019060200180831161047957829003601f168201915b5050505050905090565b60006104ad338484610778565b50600192915050565b60025490565b60006104c9848484610800565b6001600160a01b0384166000908152600160209081526040808320338085529252909120546105039186916104fe90866108bf565b610778565b5060019392505050565b60055460ff1690565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916104ad9185906104fe9086610717565b6105563382610901565b50565b6001600160a01b031660009081526020819052604090205490565b61057c6105f7565b61058557600080fd5b60055460405160009161010090046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360058054610100600160a81b0319169055565b6105df828261099c565b5050565b60055461010090046001600160a01b031690565b60055461010090046001600160a01b0316331490565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104965780601f1061046b57610100808354040283529160200191610496565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916104ad9185906104fe90866108bf565b60006104ad338484610800565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6106e46105f7565b6106ed57600080fd5b6105df82826109db565b6106ff6105f7565b61070857600080fd5b61055681610a77565b60065481565b600082820183811015610771576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b03821661078b57600080fd5b6001600160a01b03831661079e57600080fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b03821661081357600080fd5b6001600160a01b03831660009081526020819052604090205461083690826108bf565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546108659082610717565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600061077183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610af1565b6001600160a01b03821661091457600080fd5b60025461092190826108bf565b6002556001600160a01b03821660009081526020819052604090205461094790826108bf565b6001600160a01b038316600081815260208181526040808320949094558351858152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35050565b6109a68282610901565b6001600160a01b0382166000908152600160209081526040808320338085529252909120546105df9184916104fe90856108bf565b6001600160a01b0382166109ee57600080fd5b6002546109fb9082610717565b6002556001600160a01b038216600090815260208190526040902054610a219082610717565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038116610a8a57600080fd5b6005546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60008184841115610b805760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610b45578181015183820152602001610b2d565b50505050905090810190601f168015610b725780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50505090039056fea26469706673582212201745b67515403da237cfceff0ec52402e781e4bdab86640854feeb20c207f96464736f6c6343000706003353696465636861696e206173736574206973206e6f7420726567697374657265644e4f5420454e4f5547482044454c45474154454420544f4b454e53204f4e2053454e4445522042414c414e4345436f6e74726163742073686f756c64206e6f7420626520707265706172656420666f72206d6967726174696f6e20746f2075736520746869732066756e6374696f6e54686520546f6b656e206973206e6f7420616363657074656420666f72207472616e7366657220746f2073696465636861696e436f6e74726163742073686f756c6420626520696e697469616c697a656420746f2075736520746869732066756e6374696f6e436f6e74726163742073686f756c6420626520707265706172656420666f72206d6967726174696f6e20746f2075736520746869732066756e6374696f6e50656572207369676e6174757265732061726520696e76616c69640000000000a2646970667358221220f60663207c0591a16edf5766605830e881fed967022786eeb35ad6068643804e64736f6c63430007060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000e88f8313e61a97cec1871ee37fbbe2a8bf3ed1e400000000000000000000000040fd72257597aa14c7231a7b1aaa29fce868f677000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000006c9e8391a0444c739e7e2edd37a2c6e3381b1cbf000000000000000000000000ef22d478a53bc8bbe854cef8ba2eb79c49a1a171
-----Decoded View---------------
Arg [0] : initialPeers (address[]): 0x6C9E8391a0444c739e7e2edd37A2C6e3381b1cbF,0xEf22D478a53bc8BBe854ceF8bA2eb79C49A1a171
Arg [1] : addressVAL (address): 0xe88f8313e61A97cEc1871EE37fBbe2a8bf3ed1E4
Arg [2] : addressXOR (address): 0x40FD72257597aA14C7231A7B1aaa29Fce868F677
Arg [3] : networkId (bytes32): 0x0000000000000000000000000000000000000000000000000000000000000000
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 000000000000000000000000e88f8313e61a97cec1871ee37fbbe2a8bf3ed1e4
Arg [2] : 00000000000000000000000040fd72257597aa14c7231a7b1aaa29fce868f677
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [5] : 0000000000000000000000006c9e8391a0444c739e7e2edd37a2c6e3381b1cbf
Arg [6] : 000000000000000000000000ef22d478a53bc8bbe854cef8ba2eb79c49a1a171
Deployed Bytecode Sourcemap
211:17375:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2900:8;;;211:17375;;;;;;;;;;;2842:8;;;9176:903;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9176:903:0;;;;;;;;;;;-1:-1:-1;;;;;9176:903:0;;:::i;:::-;;455:48;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;455:48:0;-1:-1:-1;;;;;455:48:0;;:::i;:::-;;;;;;;;;;;;;;;;;;5801:1190;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5801:1190:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5801:1190:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5801:1190:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5801:1190:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5801:1190:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5801:1190:0;;;;;;;;-1:-1:-1;5801:1190:0;;-1:-1:-1;;;;;5801:1190:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5801:1190:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5801:1190:0;;;;;;;;-1:-1:-1;5801:1190:0;;-1:-1:-1;;;;;5801:1190:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5801:1190:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5801:1190:0;;-1:-1:-1;5801:1190:0;;-1:-1:-1;;;;;5801:1190:0:i;12547:999::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12547:999:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12547:999:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12547:999:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12547:999:0;;;;;;;;-1:-1:-1;12547:999:0;;-1:-1:-1;;;;;12547:999:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12547:999:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12547:999:0;;;;;;;;-1:-1:-1;12547:999:0;;-1:-1:-1;;;;;12547:999:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12547:999:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12547:999:0;;-1:-1:-1;12547:999:0;;-1:-1:-1;;;;;12547:999:0:i;882:44::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;882:44:0;;:::i;:::-;;;;-1:-1:-1;;;;;882:44:0;;;;;;;;;;;;;;7466:1075;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7466:1075:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7466:1075:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7466:1075:0;;;;;;;;-1:-1:-1;7466:1075:0;;-1:-1:-1;;;;;7466:1075:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7466:1075:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7466:1075:0;;;;;;;;;;;;;;;;;-1:-1:-1;7466:1075:0;;-1:-1:-1;7466:1075:0;-1:-1:-1;7466:1075:0;;;;;;;-1:-1:-1;;;7466:1075:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7466:1075:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7466:1075:0;;;;;;;;-1:-1:-1;7466:1075:0;;-1:-1:-1;;;;;7466:1075:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7466:1075:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7466:1075:0;;;;;;;;-1:-1:-1;7466:1075:0;;-1:-1:-1;;;;;7466:1075:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7466:1075:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7466:1075:0;;-1:-1:-1;7466:1075:0;;-1:-1:-1;;;;;7466:1075:0:i;1362:26::-;;;;;;;;;;;;;:::i;307:38::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;307:38:0;-1:-1:-1;;;;;307:38:0;;:::i;1452:25::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;565:49;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;565:49:0;-1:-1:-1;;;;;565:49:0;;:::i;13994:862::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13994:862:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;13994:862:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;13994:862:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13994:862:0;;;;;;;;-1:-1:-1;13994:862:0;;-1:-1:-1;;;;;13994:862:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;13994:862:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13994:862:0;;;;;;;;-1:-1:-1;13994:862:0;;-1:-1:-1;;;;;13994:862:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;13994:862:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13994:862:0;;-1:-1:-1;13994:862:0;;-1:-1:-1;;;;;13994:862:0:i;2967:45::-;;;:::i;759:51::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;759:51:0;;:::i;11371:611::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11371:611:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11371:611:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11371:611:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11371:611:0;;;;;;;;-1:-1:-1;11371:611:0;;-1:-1:-1;;;;;11371:611:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11371:611:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11371:611:0;;;;;;;;-1:-1:-1;11371:611:0;;-1:-1:-1;;;;;11371:611:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11371:611:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11371:611:0;;-1:-1:-1;11371:611:0;;-1:-1:-1;;;;;11371:611:0:i;4574:616::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4574:616:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4574:616:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4574:616:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4574:616:0;;;;;;;;-1:-1:-1;4574:616:0;;-1:-1:-1;;;;;4574:616:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4574:616:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4574:616:0;;;;;;;;-1:-1:-1;4574:616:0;;-1:-1:-1;;;;;4574:616:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4574:616:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4574:616:0;;-1:-1:-1;4574:616:0;;-1:-1:-1;;;;;4574:616:0:i;351:22::-;;;;;;;;;;;;;:::i;413:36::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;413:36:0;;:::i;1394:26::-;;;;;;;;;;;;;:::i;10431:589::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10431:589:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;10431:589:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;10431:589:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10431:589:0;;;;;;;;-1:-1:-1;10431:589:0;;-1:-1:-1;;;;;10431:589:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;10431:589:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10431:589:0;;;;;;;;-1:-1:-1;10431:589:0;;-1:-1:-1;;;;;10431:589:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;10431:589:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10431:589:0;;-1:-1:-1;10431:589:0;;-1:-1:-1;;;;;10431:589:0:i;816:60::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;816:60:0;-1:-1:-1;;;;;816:60:0;;:::i;3534:655::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3534:655:0;;;;;;;;;;;;;;;-1:-1:-1;;;3534:655:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3534:655:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3534:655:0;;;;;;;;-1:-1:-1;3534:655:0;;-1:-1:-1;;;;;3534:655:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3534:655:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3534:655:0;;;;;;;;;;;;;;-1:-1:-1;3534:655:0;-1:-1:-1;3534:655:0;;;;-1:-1:-1;3534:655:0;;;-1:-1:-1;;;3534:655:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3534:655:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3534:655:0;;;;;;;;-1:-1:-1;3534:655:0;;-1:-1:-1;;;;;3534:655:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3534:655:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3534:655:0;;;;;;;;-1:-1:-1;3534:655:0;;-1:-1:-1;;;;;3534:655:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3534:655:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3534:655:0;;-1:-1:-1;3534:655:0;;-1:-1:-1;;;;;3534:655:0:i;8653:288::-;;;;;;;;;;;;;;;;-1:-1:-1;8653:288:0;;:::i;9176:903::-;2352:12;;;;:20;;:12;:20;2344:84;;;;-1:-1:-1;;;2344:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2511:21:::1;::::0;::::1;::::0;::::1;;;:30;2503:109;;;;-1:-1:-1::0;;;2503:109:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9411:42:::2;::::0;;-1:-1:-1;;;9411:42:0;;9427:10:::2;9411:42;::::0;::::2;::::0;9447:4:::2;9411:42:::0;;;;;;9379:12;;9457:6;;-1:-1:-1;;;;;9411:15:0;::::2;::::0;::::2;::::0;:42;;;;;::::2;::::0;;;;;;;;:15;:42;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;9411:42:0;:52:::2;;9403:110;;;;-1:-1:-1::0;;;9403:110:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;9551:39:0;::::2;9524:24;9551:39:::0;;;:25:::2;:39;::::0;;;;;9604:22;;::::2;::::0;:53:::2;;-1:-1:-1::0;9630:11:0::2;::::0;-1:-1:-1;;;;;9630:27:0;;::::2;:11:::0;::::2;:27;9604:53;:84;;;-1:-1:-1::0;9661:11:0::2;::::0;-1:-1:-1;;;;;9661:27:0;;::::2;:11:::0;::::2;:27;9604:84;9600:407;;;9768:35;::::0;;-1:-1:-1;;;9768:35:0;;9784:10:::2;9768:35;::::0;::::2;::::0;;;;;;;;;9741:12;;-1:-1:-1;;;;;9768:15:0;::::2;::::0;::::2;::::0;:35;;;;;9704:20:::2;::::0;9768:35;;;;;;;;9704:20;9768:15;:35;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;9600:407;;;;-1:-1:-1::0;;;;;9842:31:0;::::2;;::::0;;;:17:::2;:31;::::0;;;;;::::2;;9834:95;;;;-1:-1:-1::0;;;9834:95:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9943:53;::::0;;-1:-1:-1;;;9943:53:0;;9962:10:::2;9943:53;::::0;::::2;::::0;9982:4:::2;9943:53:::0;;;;;;;;;;;;-1:-1:-1;;;;;9943:18:0;::::2;::::0;::::2;::::0;:53;;;;;::::2;::::0;;;;;;;;-1:-1:-1;9943:18:0;:53;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;;9600:407:0::2;10021:51;::::0;;;;;::::2;::::0;::::2;::::0;;;-1:-1:-1;;;;;10021:51:0;::::2;::::0;;;;;;;;;;;;::::2;::::0;;;;;;;::::2;2622:1;;9176:903:::0;;;:::o;455:48::-;;;;;;;;;;;;;;;:::o;5801:1190::-;2352:12;;;;:20;;:12;:20;2344:84;;;;-1:-1:-1;;;2344:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2692:21:::1;::::0;::::1;;::::0;;::::1;;:29;;:21;:29;2684:104;;;;-1:-1:-1::0;;;2684:104:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6156:4:::2;-1:-1:-1::0;;;;;6148:36:0;::::2;;6140:45;;;::::0;::::2;;6203:167;6246:19;6267:18;6287:4;6293:17;;6312:10;;6229:94;;;;;;-1:-1:-1::0;;;;;6229:94:0::2;;;;;;;;-1:-1:-1::0;;;;;6229:94:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6219:105;;;;;;6338:1;6353;6368;6203:15;:167::i;:::-;6195:216;;;::::0;;-1:-1:-1;;;6195:216:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;;;;;;;;;6195:216:0;;;;;;;;;;;;;::::2;;6426:6;6421:199;6442:27;:34:::0;6438:38;::::2;6421:199;;;6497:13;6521:27;6549:1;6521:30;;;;;;;;;::::0;;;::::2;::::0;;::::2;::::0;6566:43:::2;::::0;;-1:-1:-1;;;6566:43:0;;-1:-1:-1;;;;;6566:43:0;;::::2;;::::0;::::2;::::0;;;6521:30;;;::::2;::::0;-1:-1:-1;6521:30:0;;6566:23:::2;::::0;:43;;;;;;;;;;;6521:30;;6566:43;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;6478:3:0::2;::::0;;::::2;::::0;-1:-1:-1;6421:199:0::2;::::0;-1:-1:-1;;6421:199:0::2;;;6634:6;6629:200;6646:28:::0;;::::2;6629:200;;;6695:12;6717:17;;6735:1;6717:20;;;;;;;;;;;;;-1:-1:-1::0;;;;;6717:20:0::2;6695:43;;6752:5;-1:-1:-1::0;;;;;6752:14:0::2;;6767:18;6787:5;-1:-1:-1::0;;;;;6787:15:0::2;;6811:4;6787:30;;;;;;;;;;;;;-1:-1:-1::0;;;;;6787:30:0::2;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;6787:30:0;6752:66:::2;::::0;;-1:-1:-1;;;;;;6752:66:0::2;::::0;;;;;;-1:-1:-1;;;;;6752:66:0;;::::2;;::::0;::::2;::::0;;;;;;;;;;;;;;6787:30:::2;::::0;6752:66;;;;;;;-1:-1:-1;6752:66:0;;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;;;6676:3:0::2;;6629:200;;;;6845:18;-1:-1:-1::0;;;;;6838:41:0::2;;6887:21;6838:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;6936:5:0::2;6921:20:::0;;-1:-1:-1;;6921:20:0::2;::::0;;-1:-1:-1;;6956:28:0::2;::::0;;-1:-1:-1;;;;;6956:28:0;::::2;::::0;;;;::::2;::::0;-1:-1:-1;6956:28:0;;;;::::2;::::0;;::::2;5801:1190:::0;;;;;;;;:::o;12547:999::-;2352:12;;;;:20;;:12;:20;2344:84;;;;-1:-1:-1;;;2344:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12855:12:::1;::::0;;;:4:::1;:12;::::0;;;;;::::1;;:21;12847:30;;;::::0;::::1;;12895:170;12955:12;12969:6;12977:2;12981:4;12987:6;12995:10;;12938:68;;;;;;-1:-1:-1::0;;;;;12938:68:0::1;;;;;;;;;;;;;-1:-1:-1::0;;;;;12938:68:0::1;;;;;;;;-1:-1:-1::0;;;;;12938:68:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12928:79;;;;;;13025:1;13044;13063;12895:15;:170::i;:::-;12887:219;;;::::0;;-1:-1:-1;;;12887:219:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;12887:219:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;13121:26:0;::::1;13117:390;;13163:12;::::0;;;:4:::1;:12;::::0;;;;;:19;;-1:-1:-1;;13163:19:0::1;13178:4;13163:19;::::0;;13270;-1:-1:-1;;;;;13270:11:0;::::1;::::0;:19;::::1;;;::::0;13282:6;;13270:19;13163:12;13270:19;13282:6;13270:11;:19;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;13117:390;;;13320:11;13368:12:::0;;;:4:::1;:12;::::0;;;;;;;:19;;-1:-1:-1;;13368:19:0::1;13383:4;13368:19;::::0;;13471:25;;-1:-1:-1;;;13471:25:0;;-1:-1:-1;;;;;13471:25:0;;::::1;;::::0;::::1;::::0;;;;;;;;;13341:12;;13471:13;;::::1;::::0;::::1;::::0;:25;;;;;13368:12;;13471:25;;;;;;;;:13;:25;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;;13117:390:0::1;13521:18;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;12547:999:::0;;;;;;;;:::o;882:44::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;882:44:0;;-1:-1:-1;882:44:0;:::o;7466:1075::-;2352:12;;;;:20;;:12;:20;2344:84;;;;-1:-1:-1;;;2344:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7768:12:::1;::::0;;;:4:::1;:12;::::0;;;;;::::1;;:21;7760:30;;;::::0;::::1;;7808:261;7868:4;7890:6;7914:8;7940:16;7974:6;7998:10;;7834:188;;;;;;;;;;;;;;;;;;;;;::::0;;;;-1:-1:-1;;7834:188:0;;;;::::1;::::0;;::::1;::::0;::::1;;;;::::0;;;::::1;::::0;;::::1;;;-1:-1:-1::0;;7834:188:0;;::::1;::::0;;::::1;::::0;::::1;;::::0;;;;;;;::::1;::::0;;::::1;::::0;-1:-1:-1;7834:188:0;;;::::1;;;;;;::::0;;;;-1:-1:-1;;7834:188:0;;;;::::1;::::0;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7824:199;;;;;;8037:1;8052;8067;7808:15;:261::i;:::-;7800:310;;;::::0;;-1:-1:-1;;;7800:310:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;7800:310:0;;;;;;;;;;;;;::::1;;8164:25;8208:4;8214:6;8222:8;8240:4;8247:1;8250:16;8192:75;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;8192:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;8192:75:0;;::::1;::::0;;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;::::1;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;8277:20:0::1;8332:34:::0;;;:16:::1;:34;::::0;;;;;;;:49;;-1:-1:-1;;;;;8332:49:0;;::::1;-1:-1:-1::0;;;;;;8332:49:0;;::::1;::::0;::::1;::::0;;;8391:39;;;:25:::1;:39:::0;;;;;:58;;;;8459:27:::1;:46:::0;;8332:49;8459:46;;::::1;::::0;;;;::::1;::::0;;;;::::1;::::0;;::::1;::::0;;;8515:12;;;:4:::1;:12:::0;;;;;;:19;;-1:-1:-1;;8515:19:0::1;::::0;;::::1;::::0;;;-1:-1:-1;;;;;;;7466:1075:0:o;1362:26::-;;;-1:-1:-1;;;;;1362:26:0;;:::o;307:38::-;;;;;;;;;;;;;;;:::o;1452:25::-;;;;:::o;565:49::-;;;;;;;;;;;;;;;:::o;13994:862::-;2352:12;;;;:20;;:12;:20;2344:84;;;;-1:-1:-1;;;2344:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14340:3:::1;14294:34:::0;;;:16:::1;:34;::::0;;;;;-1:-1:-1;;;;;14294:34:0::1;14286:96;;;;-1:-1:-1::0;;;14286:96:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14400:12;::::0;;;:4:::1;:12;::::0;;;;;::::1;;:21;14392:30;;;::::0;::::1;;14544:10;::::0;14483:72:::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;-1:-1:-1;;14483:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14473:83;;;::::1;::::0;14440:174:::1;::::0;14574:1;14593;14612;14440:15:::1;:174::i;:::-;14432:223;;;::::0;;-1:-1:-1;;;14432:223:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;14432:223:0;;;;;;;;;;;;;::::1;;14666:25;14706:34:::0;;;:16:::1;:34;::::0;;;;;;14751:36;;-1:-1:-1;;;14751:36:0;;-1:-1:-1;;;;;14751:36:0;;::::1;;::::0;::::1;::::0;;;;;;;;;14706:34;;;::::1;::::0;;;14751:24:::1;::::0;:36;;;;;14666:25;14751:36;;;;;;14666:25;14706:34;14751:36;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;;14797:12:0::1;::::0;;;:4:::1;:12;::::0;;;;;;;;:19;;-1:-1:-1;;14797:19:0::1;14812:4;14797:19;::::0;;14831:18;;;;;;;::::1;::::0;-1:-1:-1;14831:18:0;;;;;;::::1;2438:1;13994:862:::0;;;;;;;;:::o;2967:45::-;:::o;759:51::-;;;;;;;;;;;;-1:-1:-1;;;;;759:51:0;;:::o;11371:611::-;11586:4;2352:12;;;;:20;;:12;:20;2344:84;;;;-1:-1:-1;;;2344:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11614:12:::1;::::0;;;:4:::1;:12;::::0;;;;;::::1;;:21;11606:30;;;::::0;::::1;;11654:151;11714:11;11727:6;11735:10;;11697:49;;;;;;-1:-1:-1::0;;;;;11697:49:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11687:60;;;;;;11765:1;11784;11803;11654:15;:151::i;:::-;11646:200;;;::::0;;-1:-1:-1;;;11646:200:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;11646:200:0;;;;;;;;;;;;;::::1;;11857:23;11868:11;11857:10;:23::i;:::-;11890:12;::::0;;;:4:::1;:12;::::0;;;;;;;;:19;;-1:-1:-1;;11890:19:0::1;11905:4;11890:19:::0;;::::1;::::0;;;11924:30;;-1:-1:-1;;;;;11924:30:0;::::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;;;;;;;::::1;-1:-1:-1::0;11971:4:0::1;11371:611:::0;;;;;;;:::o;4574:616::-;2352:12;;;;:20;;:12;:20;2344:84;;;;-1:-1:-1;;;2344:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2511:21:::1;::::0;::::1;::::0;::::1;;;:30;2503:109;;;;-1:-1:-1::0;;;2503:109:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4835:21:::2;::::0;::::2;::::0;::::2;;;:30;4827:39;;;::::0;::::2;;4892:4;-1:-1:-1::0;;;;;4884:36:0;::::2;;4876:45;;;::::0;::::2;;4939:128;4982:19;5003:4;5009:10;;4965:55;;;;;;-1:-1:-1::0;;;;;4965:55:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4955:66;;;;;;5035:1;5050;5065;4939:15;:128::i;:::-;4931:177;;;::::0;;-1:-1:-1;;;4931:177:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;;;;;;;;;4931:177:0;;;;;;;;;;;;;::::2;;5118:21;:28:::0;;-1:-1:-1;;5118:28:0::2;;;::::0;;5161:22:::2;::::0;::::2;::::0;5118:21;5161:22:::2;4574:616:::0;;;;;:::o;351:22::-;;;;:::o;413:36::-;;;;;;;;;;;;;;;:::o;1394:26::-;;;-1:-1:-1;;;;;1394:26:0;;:::o;10431:589::-;10646:4;2352:12;;;;:20;;:12;:20;2344:84;;;;-1:-1:-1;;;2344:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10674:12:::1;::::0;;;:4:::1;:12;::::0;;;;;::::1;;:21;10666:30;;;::::0;::::1;;10714:125;10757:14;10773:6;10781:10;;10740:52;;;;;;-1:-1:-1::0;;;;;10740:52:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10730:63;;;;;;10807:1;10822;10837;10714:15;:125::i;:::-;10706:174;;;::::0;;-1:-1:-1;;;10706:174:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;10706:174:0;;;;;;;;;;;;;::::1;;10891:23;10899:14;10891:7;:23::i;:::-;-1:-1:-1::0;10924:12:0::1;::::0;;;:4:::1;:12;::::0;;;;;;;:19;;-1:-1:-1;;10924:19:0::1;10939:4;10924:19;::::0;;10958:34;;-1:-1:-1;;;;;10958:34:0;::::1;::::0;;;;::::1;::::0;;;;;;::::1;::::0;;;;;;;;;::::1;-1:-1:-1::0;11009:4:0::1;10431:589:::0;;;;;;;:::o;816:60::-;;;;;;;;;;;;;:::o;3534:655::-;2352:12;;;;:20;;:12;:20;2344:84;;;;-1:-1:-1;;;2344:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3830:12:::1;::::0;;;:4:::1;:12;::::0;;;;;::::1;;:21;3822:30;;;::::0;::::1;;-1:-1:-1::0;;;;;3870:27:0;::::1;;::::0;;;:17:::1;:27;::::0;;;;;::::1;;:36;3862:45;;;::::0;::::1;;3925:143;3968:8;3978:6;3986:4;3992:8;4002:6;4010:10;;3951:70;;;;;;-1:-1:-1::0;;;;;3951:70:0::1;;;;;;;;;;;;;;;;;;;;;;;::::0;;;;-1:-1:-1;;3951:70:0;;;;::::1;::::0;;::::1;::::0;::::1;;;;::::0;;;::::1;::::0;;::::1;;;-1:-1:-1::0;;3951:70:0;;::::1;::::0;;::::1;::::0;::::1;;::::0;;;;;;;::::1;::::0;;::::1;::::0;-1:-1:-1;3951:70:0;;;::::1;;;;;;::::0;;;;-1:-1:-1;;3951:70:0;;;;::::1;::::0;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3941:81;;;;;;4036:1;4051;4066;3925:15;:143::i;:::-;3917:192;;;::::0;;-1:-1:-1;;;3917:192:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;3917:192:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;;;;4119:27:0;;::::1;;::::0;;;:17:::1;:27;::::0;;;;;;;:34;;-1:-1:-1;;4119:34:0;;::::1;4149:4;4119:34:::0;;::::1;::::0;;;4163:12;;;:4:::1;:12:::0;;;;;;:19;;;;::::1;;::::0;;;-1:-1:-1;;;3534:655:0:o;8653:288::-;2352:12;;;;:20;;:12;:20;2344:84;;;;-1:-1:-1;;;2344:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2511:21:::1;::::0;::::1;::::0;::::1;;;:30;2503:109;;;;-1:-1:-1::0;;;2503:109:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8816:1:::2;8804:9;:13;8796:57;;;::::0;;-1:-1:-1;;;8796:57:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;8891:43;::::0;;;;;8903:9:::2;8891:43;::::0;::::2;::::0;8863:13:::2;8891:43:::0;;;;;;;;;;;;;;::::2;::::0;;;;;;;::::2;2622:1;8653:288:::0;:::o;15216:1207::-;15367:4;15405:1;15391:10;;:15;;15383:24;;;;;;15437:1;:8;15425:1;:8;:20;15417:29;;;;;;15476:1;:8;15464:1;:8;:20;15456:29;;;;;;15495:13;15543:1;15538;15525:10;;:14;15524:20;;;;;;15511:10;;:33;15495:49;;15574:8;15562:1;:8;:20;;15554:29;;;;;;15594:10;15618:35;15670:1;:8;15656:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15656:23:0;;15618:61;;15694:6;15689:535;15710:1;:8;15706:1;:12;15689:535;;;15739:24;15766:116;15798:4;15820:1;15822;15820:4;;;;;;;;;;;;;;15842:1;15844;15842:4;;;;;;;;;;;;;;15864:1;15866;15864:4;;;;;;;;;;;;;;15766:14;:116::i;:::-;-1:-1:-1;;;;;15949:24:0;;;;;;:6;:24;;;;;;;;;15739:143;;-1:-1:-1;15949:24:0;;;;:32;;;;;:78;;-1:-1:-1;;;;;;15985:34:0;;;;;;:16;:34;;;;;;;;:42;;:34;:42;15949:78;15945:125;;;16047:8;;;15945:125;16111:16;16083:18;16102:5;16083:25;;;;;;;;-1:-1:-1;;;;;16083:44:0;;;:25;;;;;;;;;;:44;;;;16172:34;;;;;;:16;:34;;;;;;:41;;-1:-1:-1;;16172:41:0;16157:1;16172:41;;;;;;16149:9;;;;15689:535;15720:3;;15689:535;;;;16282:6;16277:105;16298:5;16294:1;:9;16277:105;;;16366:5;16324:16;:39;16341:18;16360:1;16341:21;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16324:39:0;;;;;;;;;;;-1:-1:-1;16324:39:0;:47;;-1:-1:-1;;16324:47:0;;;;;;;;;;-1:-1:-1;16305:3:0;16277:105;;;-1:-1:-1;;16399:17:0;;;15216:1207;-1:-1:-1;;;;;15216:1207:0:o;17418:166::-;-1:-1:-1;;;;;17490:19:0;;;;;;:6;:19;;;;;;;;;;;:27;;;17482:36;;;;;;-1:-1:-1;;;;;17528:19:0;17550:5;17528:19;;;:6;:19;;;;;:27;;-1:-1:-1;;17528:27:0;;;17567:10;17565:12;;-1:-1:-1;;17565:12:0;;;17418:166::o;17206:206::-;-1:-1:-1;;;;;17293:18:0;;17269:4;17293:18;;;:6;:18;;;;;;;;:27;17285:36;;;;;;-1:-1:-1;;;;;;17331:18:0;;;;;17352:4;17331:18;;;;;;;;:25;;-1:-1:-1;;17331:25:0;;;;;17368:10;17366:12;;;;;;;;;;17206:206::o;16733:328::-;16869:7;16888:19;16973:4;16920:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16910:69;;;;;;16888:91;;16989:11;17003:31;17013:11;17026:1;17029;17032;17003:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17003:31:0;;-1:-1:-1;;17003:31:0;;;16733:328;-1:-1:-1;;;;;;;;16733:328:0:o;-1:-1:-1:-;;;;;;;;:::o
Swarm Source
ipfs://f60663207c0591a16edf5766605830e881fed967022786eeb35ad6068643804e
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
BSC | 88.86% | $697.12 | 3.6443 | $2,540.51 | |
BSC | 0.57% | $3,242.8 | 0.005 | $16.21 | |
BSC | <0.01% | $0.000563 | 409.3732 | $0.2304 | |
FTM | 4.66% | $0.708921 | 187.8388 | $133.16 | |
POL | 4.53% | $0.457459 | 282.909 | $129.42 | |
ETH | 0.44% | $0.246941 | 50.6214 | $12.5 | |
ETH | 0.18% | $0.315059 | 15.9027 | $5.01 | |
ETH | 0.05% | $1.23 | 1.0886 | $1.34 | |
ETH | 0.03% | $0.999631 | 1 | $0.9996 | |
ETH | <0.01% | $0.164268 | 1 | $0.1642 | |
MOVR | 0.32% | $11.23 | 0.8139 | $9.14 | |
GNO | 0.17% | $1 | 5 | $5 | |
AVAX | 0.11% | $37.12 | 0.0845 | $3.14 | |
GLMR | 0.07% | $0.216471 | 9.1708 | $1.99 | |
CRONOS | <0.01% | $0.13742 | 2 | $0.274841 |
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.