Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 11 from a total of 11 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Donate | 12592388 | 1357 days ago | IN | 0.025 ETH | 0.0010353 | ||||
Pass To Charity | 12502835 | 1371 days ago | IN | 0 ETH | 0.00156297 | ||||
Donate | 12177535 | 1421 days ago | IN | 0.03 ETH | 0.00681997 | ||||
Donate | 11867371 | 1469 days ago | IN | 0.035 ETH | 0.01111255 | ||||
Donate | 11717367 | 1492 days ago | IN | 0.03 ETH | 0.00437767 | ||||
Pass To Charity | 11613525 | 1508 days ago | IN | 0 ETH | 0.00277705 | ||||
Donate | 11496690 | 1526 days ago | IN | 0.05 ETH | 0.00336744 | ||||
Donate | 11365677 | 1546 days ago | IN | 0.05 ETH | 0.00396304 | ||||
Donate | 11244751 | 1565 days ago | IN | 0.1 ETH | 0.00109528 | ||||
Donate | 11243325 | 1565 days ago | IN | 0.08 ETH | 0.00285632 | ||||
Add Whitelisted | 11243136 | 1565 days ago | IN | 0 ETH | 0.00114802 |
Latest 17 internal transactions
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
12592388 | 1357 days ago | 0.0025 ETH | ||||
12592388 | 1357 days ago | 0.0225 ETH | ||||
12177535 | 1421 days ago | 0.003 ETH | ||||
12177535 | 1421 days ago | 0.027 ETH | ||||
11867371 | 1469 days ago | 0.0035 ETH | ||||
11867371 | 1469 days ago | 0.0315 ETH | ||||
11717367 | 1492 days ago | 0.003 ETH | ||||
11717367 | 1492 days ago | 0.027 ETH | ||||
11496690 | 1526 days ago | 0.005 ETH | ||||
11496690 | 1526 days ago | 0.045 ETH | ||||
11365677 | 1546 days ago | 0.005 ETH | ||||
11365677 | 1546 days ago | 0.045 ETH | ||||
11244751 | 1565 days ago | 0.01 ETH | ||||
11244751 | 1565 days ago | 0.09 ETH | ||||
11243325 | 1565 days ago | 0.008 ETH | ||||
11243325 | 1565 days ago | 0.072 ETH | ||||
11243132 | 1565 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0x608e35Ca...8899CE0e3 The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
DonationCommunity
Compiler Version
v0.5.8+commit.23d335f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-11-12 */ // File: openzeppelin-solidity/contracts/GSN/Context.sol pragma solidity ^0.5.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ contract Context { // Empty internal constructor, to prevent people from mistakenly deploying // an instance of this contract, which should be used via inheritance. constructor () internal { } // solhint-disable-previous-line no-empty-blocks function _msgSender() internal view returns (address payable) { return msg.sender; } function _msgData() internal view returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File: openzeppelin-solidity/contracts/access/Roles.sol pragma solidity ^0.5.0; /** * @title Roles * @dev Library for managing addresses assigned to a Role. */ library Roles { struct Role { mapping (address => bool) bearer; } /** * @dev Give an account access to this role. */ function add(Role storage role, address account) internal { require(!has(role, account), "Roles: account already has role"); role.bearer[account] = true; } /** * @dev Remove an account's access to this role. */ function remove(Role storage role, address account) internal { require(has(role, account), "Roles: account does not have role"); role.bearer[account] = false; } /** * @dev Check if an account has this role. * @return bool */ function has(Role storage role, address account) internal view returns (bool) { require(account != address(0), "Roles: account is the zero address"); return role.bearer[account]; } } // File: openzeppelin-solidity/contracts/access/roles/WhitelistAdminRole.sol pragma solidity ^0.5.0; /** * @title WhitelistAdminRole * @dev WhitelistAdmins are responsible for assigning and removing Whitelisted accounts. */ contract WhitelistAdminRole is Context { using Roles for Roles.Role; event WhitelistAdminAdded(address indexed account); event WhitelistAdminRemoved(address indexed account); Roles.Role private _whitelistAdmins; constructor () internal { _addWhitelistAdmin(_msgSender()); } modifier onlyWhitelistAdmin() { require(isWhitelistAdmin(_msgSender()), "WhitelistAdminRole: caller does not have the WhitelistAdmin role"); _; } function isWhitelistAdmin(address account) public view returns (bool) { return _whitelistAdmins.has(account); } function addWhitelistAdmin(address account) public onlyWhitelistAdmin { _addWhitelistAdmin(account); } function renounceWhitelistAdmin() public { _removeWhitelistAdmin(_msgSender()); } function _addWhitelistAdmin(address account) internal { _whitelistAdmins.add(account); emit WhitelistAdminAdded(account); } function _removeWhitelistAdmin(address account) internal { _whitelistAdmins.remove(account); emit WhitelistAdminRemoved(account); } } // File: openzeppelin-solidity/contracts/access/roles/WhitelistedRole.sol pragma solidity ^0.5.0; /** * @title WhitelistedRole * @dev Whitelisted accounts have been approved by a WhitelistAdmin to perform certain actions (e.g. participate in a * crowdsale). This role is special in that the only accounts that can add it are WhitelistAdmins (who can also remove * it), and not Whitelisteds themselves. */ contract WhitelistedRole is Context, WhitelistAdminRole { using Roles for Roles.Role; event WhitelistedAdded(address indexed account); event WhitelistedRemoved(address indexed account); Roles.Role private _whitelisteds; modifier onlyWhitelisted() { require(isWhitelisted(_msgSender()), "WhitelistedRole: caller does not have the Whitelisted role"); _; } function isWhitelisted(address account) public view returns (bool) { return _whitelisteds.has(account); } function addWhitelisted(address account) public onlyWhitelistAdmin { _addWhitelisted(account); } function removeWhitelisted(address account) public onlyWhitelistAdmin { _removeWhitelisted(account); } function renounceWhitelisted() public { _removeWhitelisted(_msgSender()); } function _addWhitelisted(address account) internal { _whitelisteds.add(account); emit WhitelistedAdded(account); } function _removeWhitelisted(address account) internal { _whitelisteds.remove(account); emit WhitelistedRemoved(account); } } // File: openzeppelin-solidity/contracts/math/SafeMath.sol pragma solidity ^0.5.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. * * _Available since v2.4.0._ */ 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. * * _Available since v2.4.0._ */ 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. * * _Available since v2.4.0._ */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File: openzeppelin-solidity/contracts/ownership/Secondary.sol pragma solidity ^0.5.0; /** * @dev A Secondary contract can only be used by its primary account (the one that created it). */ contract Secondary is Context { address private _primary; /** * @dev Emitted when the primary contract changes. */ event PrimaryTransferred( address recipient ); /** * @dev Sets the primary account to the one that is creating the Secondary contract. */ constructor () internal { address msgSender = _msgSender(); _primary = msgSender; emit PrimaryTransferred(msgSender); } /** * @dev Reverts if called from any account other than the primary. */ modifier onlyPrimary() { require(_msgSender() == _primary, "Secondary: caller is not the primary account"); _; } /** * @return the address of the primary. */ function primary() public view returns (address) { return _primary; } /** * @dev Transfers contract to a new primary. * @param recipient The address of new primary. */ function transferPrimary(address recipient) public onlyPrimary { require(recipient != address(0), "Secondary: new primary is the zero address"); _primary = recipient; emit PrimaryTransferred(recipient); } } // File: contracts/ERC20.sol pragma solidity ^0.5.2; interface ERC20 { function totalSupply() external view returns (uint supply); function balanceOf(address _owner) external view returns (uint balance); function transfer(address _to, uint _value) external returns (bool success); function transferFrom(address _from, address _to, uint _value) external returns (bool success); function approve(address _spender, uint _value) external returns (bool success); function allowance(address _owner, address _spender) external view returns (uint remaining); function decimals() external view returns (uint digits); event Approval(address indexed _owner, address indexed _spender, uint _value); } // File: contracts/BondingVaultInterface.sol pragma solidity ^0.5.2; interface BondingVaultInterface { function fundWithReward(address payable _donor) external payable; function getEthKidsToken() external view returns (address); function calculateReward(uint256 _ethAmount) external view returns (uint256 _tokenAmount); function calculateReturn(uint256 _tokenAmount) external view returns (uint256 _returnEth); function sweepVault(address payable _operator) external; function addWhitelisted(address account) external; function removeWhitelisted(address account) external; } // File: contracts/YieldVaultInterface.sol pragma solidity ^0.5.8; interface YieldVaultInterface { function withdraw(address _token, address _atoken, uint _amount) external; function addWhitelisted(address account) external; function removeWhitelisted(address account) external; } // File: contracts/RegistryInterface.sol pragma solidity ^0.5.2; interface RegistryInterface { function getCurrencyConverter() external view returns (address); function getBondingVault() external view returns (BondingVaultInterface); function yieldVault() external view returns (YieldVaultInterface); function getCharityVaults() external view returns (address[] memory); function communityCount() external view returns (uint256); } // File: contracts/RegistryAware.sol pragma solidity ^0.5.2; interface RegistryAware { function setRegistry(address _registry) external; function getRegistry() external view returns (RegistryInterface); } // File: contracts/community/CharityVault.sol pragma solidity ^0.5.2; /** * @title CharityVault * @dev Vault which holds the assets until the community leader(s) decide to transfer * them to the actual charity destination. * Deposit and withdrawal calls come only from the actual community contract */ contract CharityVault is RegistryAware, Secondary { using SafeMath for uint256; RegistryInterface public registry; uint256 public sumStats; event LogDonationReceived( uint256 amount, address indexed account ); event LogDonationWithdrawn( uint256 amount, address indexed account ); /** * @dev 'deposit' must be used instead **/ function() external { //no 'payable' here } /** * @dev Receives some ETH and stores it. * @param _payee the donor's address. */ function deposit(address _payee) public payable { sumStats = sumStats.add(msg.value); emit LogDonationReceived(msg.value, _payee); } /** * @dev Withdraw some of accumulated balance for a _payee. */ function withdraw(address payable _payee, uint256 _payment) public onlyPrimary { require(_payment > 0 && address(this).balance >= _payment, "Insufficient funds in the charity vault"); _payee.transfer(_payment); emit LogDonationWithdrawn(_payment, _payee); } function setRegistry(address _registry) public onlyPrimary { registry = (RegistryInterface)(_registry); } function getRegistry() public view returns (RegistryInterface) { return registry; } } // File: contracts/community/IDonationCommunity.sol pragma solidity ^0.5.2; interface IDonationCommunity { function donateDelegated(address payable _donator) external payable; function name() external view returns (string memory); function charityVault() external view returns (address); } // File: contracts/community/DonationCommunity.sol pragma solidity ^0.5.2; /** * @title DonationCommunity * @dev Manages donations and owns a charity vault * Aware of the EthKidsRegistry and passes a part of donations to the whole community * The 'admin' is the community leader * The 'whitelisted' account is the EthKidsRegistry and must be specified * prior to adding to the EthKidsRegistry */ contract DonationCommunity is IDonationCommunity, RegistryAware, WhitelistedRole { using SafeMath for uint256; uint256 public constant CHARITY_DISTRIBUTION = 90; //%, the rest funds bonding curve string private _name; CharityVault public charityVault; RegistryInterface public registry; event LogDonationReceived ( address from, uint256 amount ); event LogPassToCharity ( address by, address intermediary, uint256 amount, string ipfsHash ); /** * @dev not allowed, can't store ETH **/ function() external { //no 'payable' here } /** * @dev Constructor * @param name for reference */ constructor (string memory name) public { _name = name; charityVault = new CharityVault(); } function setRegistry(address _registry) public onlyWhitelisted { registry = (RegistryInterface)(_registry); charityVault.setRegistry(_registry); } function getRegistry() public view returns (RegistryInterface) { return registry; } function allocate(uint256 donation) internal pure returns (uint256 _charityAllocation, uint256 _bondingAllocation) { uint256 _multiplier = 100; _charityAllocation = (donation).mul(CHARITY_DISTRIBUTION).div(_multiplier); _bondingAllocation = donation.sub(_charityAllocation); return (_charityAllocation, _bondingAllocation); } function myReward(uint256 _ethAmount) public view returns (uint256 tokenAmount) { (uint256 _charityAllocation, uint256 _bondingAllocation) = allocate(_ethAmount); return getRegistry().getBondingVault().calculateReward(_bondingAllocation); } function myReturn(uint256 _tokenAmount) public view returns (uint256 returnEth) { return getRegistry().getBondingVault().calculateReturn(_tokenAmount); } function donate() public payable { donateDelegated(msg.sender); } /** * @dev Donate funds on behalf of someone else. * Primary use is to pass the actual donor when the caller is a proxy, like KyberConverter * @param _donor address that will be recorded as a donor and will receive the community tokens **/ function donateDelegated(address payable _donor) public payable { require(msg.value > 0, "Must include some ETH to donate"); (uint256 _charityAllocation, uint256 _bondingAllocation) = allocate(msg.value); charityVault.deposit.value(_charityAllocation)(_donor); getRegistry().getBondingVault().fundWithReward.value(_bondingAllocation)(_donor); emit LogDonationReceived(_donor, msg.value); } /** * @dev Donate funds on behalf of someone else without being rewarded. * @param _donor address that will be recorded as a donor **/ function donateDelegatedNoReward(address payable _donor) public payable { require(msg.value > 0, "Must include some ETH to donate"); (uint256 _charityAllocation, uint256 _bondingAllocation) = allocate(msg.value); charityVault.deposit.value(_charityAllocation)(_donor); address payable bondingVaultPayable = address(uint160(address(getRegistry().getBondingVault()))); bondingVaultPayable.transfer(_bondingAllocation); emit LogDonationReceived(_donor, msg.value); } function passToCharity(uint256 _amount, address payable _intermediary, string memory _ipfsHash) public onlyWhitelistAdmin { require(_intermediary != address(0)); charityVault.withdraw(_intermediary, _amount); emit LogPassToCharity(msg.sender, _intermediary, _amount, _ipfsHash); } function passToCharityWithInterest(uint256 _amount, address payable _intermediary, string memory _ipfsHash, address _aaveToken, address _aaveAToken) public onlyWhitelistAdmin { passToCharity(_amount, _intermediary, _ipfsHash); //distribute accumulated interest amongst the communities registry.yieldVault().withdraw(_aaveToken, _aaveAToken, 0); } function name() public view returns (string memory) { return _name; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[],"name":"charityVault","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_donor","type":"address"}],"name":"donateDelegated","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"addWhitelisted","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"removeWhitelisted","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_donor","type":"address"}],"name":"donateDelegatedNoReward","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isWhitelisted","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"},{"name":"_intermediary","type":"address"},{"name":"_ipfsHash","type":"string"}],"name":"passToCharity","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceWhitelistAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getRegistry","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"addWhitelistAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"registry","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_registry","type":"address"}],"name":"setRegistry","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isWhitelistAdmin","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_ethAmount","type":"uint256"}],"name":"myReward","outputs":[{"name":"tokenAmount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"CHARITY_DISTRIBUTION","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceWhitelisted","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenAmount","type":"uint256"}],"name":"myReturn","outputs":[{"name":"returnEth","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"donate","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"},{"name":"_intermediary","type":"address"},{"name":"_ipfsHash","type":"string"},{"name":"_aaveToken","type":"address"},{"name":"_aaveAToken","type":"address"}],"name":"passToCharityWithInterest","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"name","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":false,"stateMutability":"nonpayable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"from","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"LogDonationReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"by","type":"address"},{"indexed":false,"name":"intermediary","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"ipfsHash","type":"string"}],"name":"LogPassToCharity","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"WhitelistedAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"WhitelistedRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"WhitelistAdminAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"WhitelistAdminRemoved","type":"event"}]
Deployed Bytecode
0x60806040526004361061011f5760003560e01c80637362d9c8116100a0578063cba8b92811610064578063cba8b928146104c0578063d6cd9473146104d5578063d990c9b3146104ea578063ed88c68e14610514578063ff3850b71461051c5761011f565b80637362d9c8146103d65780637b10399914610409578063a91ee0dc1461041e578063bb5f747b14610451578063c1658a95146104845761011f565b80632a970d2a116100e75780632a970d2a146102775780633af32abf1461029d57806343dcfeaa146102e45780634c5a628c146103ac5780635ab1bd53146103c15761011f565b806302b09ac51461012e57806306fdde031461015f5780630dda1fde146101e957806310154bad14610211578063291d954914610244575b34801561012b57600080fd5b50005b34801561013a57600080fd5b506101436105fa565b604080516001600160a01b039092168252519081900360200190f35b34801561016b57600080fd5b50610174610609565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101ae578181015183820152602001610196565b50505050905090810190601f1680156101db5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61020f600480360360208110156101ff57600080fd5b50356001600160a01b031661069c565b005b34801561021d57600080fd5b5061020f6004803603602081101561023457600080fd5b50356001600160a01b031661088e565b34801561025057600080fd5b5061020f6004803603602081101561026757600080fd5b50356001600160a01b03166108e8565b61020f6004803603602081101561028d57600080fd5b50356001600160a01b031661093a565b3480156102a957600080fd5b506102d0600480360360208110156102c057600080fd5b50356001600160a01b0316610afe565b604080519115158252519081900360200190f35b3480156102f057600080fd5b5061020f6004803603606081101561030757600080fd5b8135916001600160a01b036020820135169181019060608101604082013564010000000081111561033757600080fd5b82018360208201111561034957600080fd5b8035906020019184600183028401116401000000008311171561036b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610b17945050505050565b3480156103b857600080fd5b5061020f610cbd565b3480156103cd57600080fd5b50610143610ccf565b3480156103e257600080fd5b5061020f600480360360208110156103f957600080fd5b50356001600160a01b0316610cde565b34801561041557600080fd5b50610143610d30565b34801561042a57600080fd5b5061020f6004803603602081101561044157600080fd5b50356001600160a01b0316610d3f565b34801561045d57600080fd5b506102d06004803603602081101561047457600080fd5b50356001600160a01b0316610e0c565b34801561049057600080fd5b506104ae600480360360208110156104a757600080fd5b5035610e1e565b60408051918252519081900360200190f35b3480156104cc57600080fd5b506104ae610f1c565b3480156104e157600080fd5b5061020f610f21565b3480156104f657600080fd5b506104ae6004803603602081101561050d57600080fd5b5035610f31565b61020f61101d565b34801561052857600080fd5b5061020f600480360360a081101561053f57600080fd5b8135916001600160a01b036020820135169181019060608101604082013564010000000081111561056f57600080fd5b82018360208201111561058157600080fd5b803590602001918460018302840111640100000000831117156105a357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b0383358116945060209093013590921691506110269050565b6003546001600160a01b031681565b60028054604080516020601f60001961010060018716150201909416859004938401819004810282018101909252828152606093909290918301828280156106925780601f1061066757610100808354040283529160200191610692565b820191906000526020600020905b81548152906001019060200180831161067557829003601f168201915b5050505050905090565b600034116106f45760408051600160e51b62461bcd02815260206004820152601f60248201527f4d75737420696e636c75646520736f6d652045544820746f20646f6e61746500604482015290519081900360640190fd5b60008061070034611165565b60035460408051600160e01b63f340fa010281526001600160a01b0388811660048301529151949650929450169163f340fa01918591602480830192600092919082900301818588803b15801561075657600080fd5b505af115801561076a573d6000803e3d6000fd5b5050505050610777610ccf565b6001600160a01b031663799463e76040518163ffffffff1660e01b815260040160206040518083038186803b1580156107af57600080fd5b505afa1580156107c3573d6000803e3d6000fd5b505050506040513d60208110156107d957600080fd5b505160408051600160e11b637bb0f5a10281526001600160a01b0386811660048301529151919092169163f761eb4291849160248082019260009290919082900301818588803b15801561082c57600080fd5b505af1158015610840573d6000803e3d6000fd5b5050604080516001600160a01b038816815234602082015281517fde5c26dd3fd805828d78c07f1efc4c8972ca8efa32679f943954cbba78eccef095509081900390910192509050a1505050565b61089e6108996111a5565b610e0c565b6108dc57604051600160e51b62461bcd02815260040180806020018281038252604081526020018061166f6040913960400191505060405180910390fd5b6108e5816111a9565b50565b6108f36108996111a5565b61093157604051600160e51b62461bcd02815260040180806020018281038252604081526020018061166f6040913960400191505060405180910390fd5b6108e5816111f1565b600034116109925760408051600160e51b62461bcd02815260206004820152601f60248201527f4d75737420696e636c75646520736f6d652045544820746f20646f6e61746500604482015290519081900360640190fd5b60008061099e34611165565b60035460408051600160e01b63f340fa010281526001600160a01b0388811660048301529151949650929450169163f340fa01918591602480830192600092919082900301818588803b1580156109f457600080fd5b505af1158015610a08573d6000803e3d6000fd5b50505050506000610a17610ccf565b6001600160a01b031663799463e76040518163ffffffff1660e01b815260040160206040518083038186803b158015610a4f57600080fd5b505afa158015610a63573d6000803e3d6000fd5b505050506040513d6020811015610a7957600080fd5b50516040519091506001600160a01b0382169083156108fc029084906000818181858888f19350505050158015610ab4573d6000803e3d6000fd5b50604080516001600160a01b038616815234602082015281517fde5c26dd3fd805828d78c07f1efc4c8972ca8efa32679f943954cbba78eccef0929181900390910190a150505050565b6000610b1160018363ffffffff61123916565b92915050565b610b226108996111a5565b610b6057604051600160e51b62461bcd02815260040180806020018281038252604081526020018061166f6040913960400191505060405180910390fd5b6001600160a01b038216610b7357600080fd5b60035460408051600160e01b63f3fef3a30281526001600160a01b038581166004830152602482018790529151919092169163f3fef3a391604480830192600092919082900301818387803b158015610bcb57600080fd5b505af1158015610bdf573d6000803e3d6000fd5b505050507f89d6cf333f7822aae7e846ae3e07d77f0f8ac2733673b94e987c5ccb7d1afe923383858460405180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610c7b578181015183820152602001610c63565b50505050905090810190601f168015610ca85780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1505050565b610ccd610cc86111a5565b6112a3565b565b6004546001600160a01b031690565b610ce96108996111a5565b610d2757604051600160e51b62461bcd02815260040180806020018281038252604081526020018061166f6040913960400191505060405180910390fd5b6108e5816112eb565b6004546001600160a01b031681565b610d4f610d4a6111a5565b610afe565b610d8d57604051600160e51b62461bcd02815260040180806020018281038252603a8152602001806116af603a913960400191505060405180910390fd5b600480546001600160a01b0319166001600160a01b03838116918217835560035460408051600160e21b632a47b83702815294850193909352915191169163a91ee0dc91602480830192600092919082900301818387803b158015610df157600080fd5b505af1158015610e05573d6000803e3d6000fd5b5050505050565b6000610b11818363ffffffff61123916565b6000806000610e2c84611165565b91509150610e38610ccf565b6001600160a01b031663799463e76040518163ffffffff1660e01b815260040160206040518083038186803b158015610e7057600080fd5b505afa158015610e84573d6000803e3d6000fd5b505050506040513d6020811015610e9a57600080fd5b505160408051600160e01b63d2d7231f0281526004810184905290516001600160a01b039092169163d2d7231f91602480820192602092909190829003018186803b158015610ee857600080fd5b505afa158015610efc573d6000803e3d6000fd5b505050506040513d6020811015610f1257600080fd5b5051949350505050565b605a81565b610ccd610f2c6111a5565b6111f1565b6000610f3b610ccf565b6001600160a01b031663799463e76040518163ffffffff1660e01b815260040160206040518083038186803b158015610f7357600080fd5b505afa158015610f87573d6000803e3d6000fd5b505050506040513d6020811015610f9d57600080fd5b505160408051600160e11b6324af22590281526004810185905290516001600160a01b039092169163495e44b291602480820192602092909190829003018186803b158015610feb57600080fd5b505afa158015610fff573d6000803e3d6000fd5b505050506040513d602081101561101557600080fd5b505192915050565b610ccd3361069c565b6110316108996111a5565b61106f57604051600160e51b62461bcd02815260040180806020018281038252604081526020018061166f6040913960400191505060405180910390fd5b61107a858585610b17565b6004805460408051600160e11b6353fc52f102815290516001600160a01b039092169263a7f8a5e2928282019260209290829003018186803b1580156110bf57600080fd5b505afa1580156110d3573d6000803e3d6000fd5b505050506040513d60208110156110e957600080fd5b505160408051600160e11b636ce576890281526001600160a01b0385811660048301528481166024830152600060448301819052925193169263d9caed129260648084019391929182900301818387803b15801561114657600080fd5b505af115801561115a573d6000803e3d6000fd5b505050505050505050565b600080606461118b8161117f86605a63ffffffff61133316565b9063ffffffff61139616565b925061119d848463ffffffff6113d816565b915050915091565b3390565b6111ba60018263ffffffff61141a16565b6040516001600160a01b038216907fee1504a83b6d4a361f4c1dc78ab59bfa30d6a3b6612c403e86bb01ef2984295f90600090a250565b61120260018263ffffffff61149e16565b6040516001600160a01b038216907f270d9b30cf5b0793bbfd54c9d5b94aeb49462b8148399000265144a8722da6b690600090a250565b60006001600160a01b03821661128357604051600160e51b62461bcd02815260040180806020018281038252602281526020018061164d6022913960400191505060405180910390fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b6112b460008263ffffffff61149e16565b6040516001600160a01b038216907f0a8eb35e5ca14b3d6f28e4abf2f128dbab231a58b56e89beb5d636115001e16590600090a250565b6112fc60008263ffffffff61141a16565b6040516001600160a01b038216907f22380c05984257a1cb900161c713dd71d39e74820f1aea43bd3f1bdd2096129990600090a250565b60008261134257506000610b11565b8282028284828161134f57fe5b041461138f57604051600160e51b62461bcd02815260040180806020018281038252602181526020018061162c6021913960400191505060405180910390fd5b9392505050565b600061138f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611508565b600061138f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506115ad565b6114248282611239565b156114795760408051600160e51b62461bcd02815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b6114a88282611239565b6114e657604051600160e51b62461bcd02815260040180806020018281038252602181526020018061160b6021913960400191505060405180910390fd5b6001600160a01b0316600090815260209190915260409020805460ff19169055565b6000818361159757604051600160e51b62461bcd0281526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561155c578181015183820152602001611544565b50505050905090810190601f1680156115895780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816115a357fe5b0495945050505050565b6000818484111561160257604051600160e51b62461bcd02815260206004820181815283516024840152835190928392604490910191908501908083836000831561155c578181015183820152602001611544565b50505090039056fe526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c65536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77526f6c65733a206163636f756e7420697320746865207a65726f206164647265737357686974656c69737441646d696e526f6c653a2063616c6c657220646f6573206e6f742068617665207468652057686974656c69737441646d696e20726f6c6557686974656c6973746564526f6c653a2063616c6c657220646f6573206e6f742068617665207468652057686974656c697374656420726f6c65a165627a7a72305820e9e68c8ad175872541e0bcba0b8c1797141db79cb2869ba29d115f8e8d19df020029
Deployed Bytecode Sourcemap
17125:4285:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17125:4285:0;;17367:32;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17367:32:0;;;:::i;:::-;;;;-1:-1:-1;;;;;17367:32:0;;;;;;;;;;;;;;21320:83;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21320:83:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;21320:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19466:446;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19466:446:0;-1:-1:-1;;;;;19466:446:0;;:::i;:::-;;4673:110;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4673:110:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4673:110:0;-1:-1:-1;;;;;4673:110:0;;:::i;4791:116::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4791:116:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4791:116:0;-1:-1:-1;;;;;4791:116:0;;:::i;20075:529::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20075:529:0;-1:-1:-1;;;;;20075:529:0;;:::i;4546:119::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4546:119:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4546:119:0;-1:-1:-1;;;;;4546:119:0;;:::i;:::-;;;;;;;;;;;;;;;;;;20612:314;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20612:314:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20612:314:0;;;-1:-1:-1;;;;;20612:314:0;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;20612:314:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;20612:314:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;20612:314:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;20612:314:0;;-1:-1:-1;20612:314:0;;-1:-1:-1;;;;;20612:314:0:i;3285:95::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3285:95:0;;;:::i;18188:97::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18188:97:0;;;:::i;3161:116::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3161:116:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3161:116:0;-1:-1:-1;;;;;3161:116:0;;:::i;17408:33::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17408:33:0;;;:::i;18011:169::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18011:169:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18011:169:0;-1:-1:-1;;;;;18011:169:0;;:::i;3028:125::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3028:125:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3028:125:0;-1:-1:-1;;;;;3028:125:0;;:::i;18667:264::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18667:264:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18667:264:0;;:::i;:::-;;;;;;;;;;;;;;;;17248:49;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17248:49:0;;;:::i;4915:89::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4915:89:0;;;:::i;18939:167::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18939:167:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18939:167:0;;:::i;19114:79::-;;;:::i;20934:378::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20934:378:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;20934:378:0;;;-1:-1:-1;;;;;20934:378:0;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;20934:378:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;20934:378:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;20934:378:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;20934:378:0;;-1:-1:-1;;;;;;;20934:378:0;;;;;-1:-1:-1;20934:378:0;;;;;;;;;-1:-1:-1;20934:378:0;;-1:-1:-1;20934:378:0:i;17367:32::-;;;-1:-1:-1;;;;;17367:32:0;;:::o;21320:83::-;21390:5;21383:12;;;;;;;-1:-1:-1;;21383:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21357:13;;21383:12;;21390:5;;21383:12;;21390:5;21383:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21320:83;:::o;19466:446::-;19561:1;19549:9;:13;19541:57;;;;;-1:-1:-1;;;;;19541:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19612:26;19640:27;19671:19;19680:9;19671:8;:19::i;:::-;19701:12;;:54;;;-1:-1:-1;;;;;19701:54:0;;-1:-1:-1;;;;;19701:54:0;;;;;;;;;19611:79;;-1:-1:-1;19611:79:0;;-1:-1:-1;19701:12:0;;:20;;19611:79;;19701:54;;;;;:12;;:54;;;;;;;19611:79;19701:12;:54;;;5:2:-1;;;;30:1;27;20:12;5:2;19701:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19701:54:0;;;;;19768:13;:11;:13::i;:::-;-1:-1:-1;;;;;19768:29:0;;:31;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19768:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19768:31:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19768:31:0;:80;;;-1:-1:-1;;;;;19768:80:0;;-1:-1:-1;;;;;19768:80:0;;;;;;;;;:46;;;;;;;19821:18;;19768:80;;;;;-1:-1:-1;;19768:80:0;;;;;;;;19821:18;19768:46;:80;;;5:2:-1;;;;30:1;27;20:12;5:2;19768:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;19866:38:0;;;-1:-1:-1;;;;;19866:38:0;;;;19894:9;19866:38;;;;;;;;-1:-1:-1;19866:38:0;;;;;;;;-1:-1:-1;19866:38:0;-1:-1:-1;19866:38:0;19466:446;;;:::o;4673:110::-;2901:30;2918:12;:10;:12::i;:::-;2901:16;:30::i;:::-;2893:107;;;;-1:-1:-1;;;;;2893:107:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4751:24;4767:7;4751:15;:24::i;:::-;4673:110;:::o;4791:116::-;2901:30;2918:12;:10;:12::i;2901:30::-;2893:107;;;;-1:-1:-1;;;;;2893:107:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4872:27;4891:7;4872:18;:27::i;20075:529::-;20178:1;20166:9;:13;20158:57;;;;;-1:-1:-1;;;;;20158:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;20229:26;20257:27;20288:19;20297:9;20288:8;:19::i;:::-;20318:12;;:54;;;-1:-1:-1;;;;;20318:54:0;;-1:-1:-1;;;;;20318:54:0;;;;;;;;;20228:79;;-1:-1:-1;20228:79:0;;-1:-1:-1;20318:12:0;;:20;;20228:79;;20318:54;;;;;:12;;:54;;;;;;;20228:79;20318:12;:54;;;5:2:-1;;;;30:1;27;20:12;5:2;20318:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20318:54:0;;;;;20385:35;20447:13;:11;:13::i;:::-;-1:-1:-1;;;;;20447:29:0;;:31;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20447:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20447:31:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20447:31:0;20492:48;;20447:31;;-1:-1:-1;;;;;;20492:28:0;;;:48;;;;;20521:18;;20492:48;;;;20521:18;20492:28;:48;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;20558:38:0;;;-1:-1:-1;;;;;20558:38:0;;;;20586:9;20558:38;;;;;;;;;;;;;;;;;20075:529;;;;:::o;4546:119::-;4607:4;4631:26;:13;4649:7;4631:26;:17;:26;:::i;:::-;4624:33;4546:119;-1:-1:-1;;4546:119:0:o;20612:314::-;2901:30;2918:12;:10;:12::i;2901:30::-;2893:107;;;;-1:-1:-1;;;;;2893:107:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20753:27:0;;20745:36;;;;;;20792:12;;:45;;;-1:-1:-1;;;;;20792:45:0;;-1:-1:-1;;;;;20792:45:0;;;;;;;;;;;;;;;:12;;;;;:21;;:45;;;;;:12;;:45;;;;;;;:12;;:45;;;5:2:-1;;;;30:1;27;20:12;5:2;20792:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20792:45:0;;;;20855:63;20872:10;20884:13;20899:7;20908:9;20855:63;;;;-1:-1:-1;;;;;20855:63:0;-1:-1:-1;;;;;20855:63:0;;;;;;-1:-1:-1;;;;;20855:63:0;-1:-1:-1;;;;;20855:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;20855:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20612:314;;;:::o;3285:95::-;3337:35;3359:12;:10;:12::i;:::-;3337:21;:35::i;:::-;3285:95::o;18188:97::-;18269:8;;-1:-1:-1;;;;;18269:8:0;18188:97;:::o;3161:116::-;2901:30;2918:12;:10;:12::i;2901:30::-;2893:107;;;;-1:-1:-1;;;;;2893:107:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3242:27;3261:7;3242:18;:27::i;17408:33::-;;;-1:-1:-1;;;;;17408:33:0;;:::o;18011:169::-;4428:27;4442:12;:10;:12::i;:::-;4428:13;:27::i;:::-;4420:98;;;;-1:-1:-1;;;;;4420:98:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18085:8;:41;;-1:-1:-1;;;;;;18085:41:0;-1:-1:-1;;;;;18085:41:0;;;;;;;;18137:12;;:35;;;-1:-1:-1;;;;;18137:35:0;;;;;;;;;;;:12;;;:24;;:35;;;;;-1:-1:-1;;18137:35:0;;;;;;;-1:-1:-1;18137:12:0;:35;;;5:2:-1;;;;30:1;27;20:12;5:2;18137:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18137:35:0;;;;18011:169;:::o;3028:125::-;3092:4;3116:29;3092:4;3137:7;3116:29;:20;:29;:::i;18667:264::-;18726:19;18759:26;18787:27;18818:20;18827:10;18818:8;:20::i;:::-;18758:80;;;;18856:13;:11;:13::i;:::-;-1:-1:-1;;;;;18856:29:0;;:31;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18856:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18856:31:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18856:31:0;:67;;;-1:-1:-1;;;;;18856:67:0;;;;;;;;;;-1:-1:-1;;;;;18856:47:0;;;;;;:67;;;;;:31;;:67;;;;;;;;:47;:67;;;5:2:-1;;;;30:1;27;20:12;5:2;18856:67:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18856:67:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18856:67:0;;18667:264;-1:-1:-1;;;;18667:264:0:o;17248:49::-;17295:2;17248:49;:::o;4915:89::-;4964:32;4983:12;:10;:12::i;:::-;4964:18;:32::i;18939:167::-;19000:17;19037:13;:11;:13::i;:::-;-1:-1:-1;;;;;19037:29:0;;:31;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19037:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19037:31:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19037:31:0;:61;;;-1:-1:-1;;;;;19037:61:0;;;;;;;;;;-1:-1:-1;;;;;19037:47:0;;;;;;:61;;;;;:31;;:61;;;;;;;;:47;:61;;;5:2:-1;;;;30:1;27;20:12;5:2;19037:61:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19037:61:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19037:61:0;;18939:167;-1:-1:-1;;18939:167:0:o;19114:79::-;19158:27;19174:10;19158:15;:27::i;20934:378::-;2901:30;2918:12;:10;:12::i;2901:30::-;2893:107;;;;-1:-1:-1;;;;;2893:107:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21120:48;21134:7;21143:13;21158:9;21120:13;:48::i;:::-;21246:8;;;:21;;;-1:-1:-1;;;;;21246:21:0;;;;-1:-1:-1;;;;;21246:8:0;;;;:19;;:21;;;;;;;;;;;;:8;:21;;;5:2:-1;;;;30:1;27;20:12;5:2;21246:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21246:21:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21246:21:0;:58;;;-1:-1:-1;;;;;21246:58:0;;-1:-1:-1;;;;;21246:58:0;;;;;;;;;;;;;;21302:1;21246:58;;;;;;;;:30;;;;;:58;;;;;21302:1;;21246:58;;;;;;21302:1;21246:30;:58;;;5:2:-1;;;;30:1;27;20:12;5:2;21246:58:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21246:58:0;;;;20934:378;;;;;:::o;18293:366::-;18352:26;;18441:3;18476:53;18441:3;18476:36;18477:8;17295:2;18476:36;:14;:36;:::i;:::-;:40;:53;:40;:53;:::i;:::-;18455:74;-1:-1:-1;18561:32:0;:8;18455:74;18561:32;:12;:32;:::i;:::-;18540:53;-1:-1:-1;;18293:366:0;;;:::o;866:98::-;946:10;866:98;:::o;5012:137::-;5074:26;:13;5092:7;5074:26;:17;:26;:::i;:::-;5116:25;;-1:-1:-1;;;;;5116:25:0;;;;;;;;5012:137;:::o;5157:145::-;5222:29;:13;5243:7;5222:29;:20;:29;:::i;:::-;5267:27;;-1:-1:-1;;;;;5267:27:0;;;;;;;;5157:145;:::o;2075:203::-;2147:4;-1:-1:-1;;;;;2172:21:0;;2164:68;;;;-1:-1:-1;;;;;2164:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2250:20:0;:11;:20;;;;;;;;;;;;;;;2075:203::o;3542:154::-;3610:32;:16;3634:7;3610:32;:23;:32;:::i;:::-;3658:30;;-1:-1:-1;;;;;3658:30:0;;;;;;;;3542:154;:::o;3388:146::-;3453:29;:16;3474:7;3453:29;:20;:29;:::i;:::-;3498:28;;-1:-1:-1;;;;;3498:28:0;;;;;;;;3388:146;:::o;7602:471::-;7660:7;7905:6;7901:47;;-1:-1:-1;7935:1:0;7928:8;;7901:47;7972:5;;;7976:1;7972;:5;:1;7996:5;;;;;:10;7988:56;;;;-1:-1:-1;;;;;7988:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8064:1;7602:471;-1:-1:-1;;;7602:471:0:o;8541:132::-;8599:7;8626:39;8630:1;8633;8626:39;;;;;;;;;;;;;;;;;:3;:39::i;6686:136::-;6744:7;6771:43;6775:1;6778;6771:43;;;;;;;;;;;;;;;;;:3;:43::i;1539:178::-;1617:18;1621:4;1627:7;1617:3;:18::i;:::-;1616:19;1608:63;;;;;-1:-1:-1;;;;;1608:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1682:20:0;:11;:20;;;;;;;;;;;:27;;-1:-1:-1;;1682:27:0;1705:4;1682:27;;;1539:178::o;1797:183::-;1877:18;1881:4;1887:7;1877:3;:18::i;:::-;1869:64;;;;-1:-1:-1;;;;;1869:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1944:20:0;1967:5;1944:20;;;;;;;;;;;:28;;-1:-1:-1;;1944:28:0;;;1797:183::o;9203:345::-;9289:7;9391:12;9384:5;9376:28;;;;-1:-1:-1;;;;;9376:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;9376:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9415:9;9431:1;9427;:5;;;;;;;9203:345;-1:-1:-1;;;;;9203:345:0:o;7159:192::-;7245:7;7281:12;7273:6;;;;7265:29;;;;-1:-1:-1;;;;;7265:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;7265:29:0;-1:-1:-1;;;7317:5:0;;;7159:192::o
Swarm Source
bzzr://d211a8cbaab2127e4dcc4e4e6400c2746851f2d5df2a7c4dd8918f8ee5cb2f1b
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.