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
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
UBI
Compiler Version
v0.7.3+commit.9bfce1f6
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-03-10 */ // SPDX-License-Identifier: MIT pragma solidity 0.7.3; /** * This code contains elements of ERC20BurnableUpgradeable.sol https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable/blob/master/contracts/token/ERC20/ERC20BurnableUpgradeable.sol * Those have been inlined for the purpose of gas optimization. */ /** * @dev Collection of functions related to the address type */ library AddressUpgradeable { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. * * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}. * * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. */ abstract contract Initializable { /** * @dev Indicates that the contract has been initialized. */ bool private _initialized; /** * @dev Indicates that the contract is in the process of being initialized. */ bool private _initializing; /** * @dev Modifier to protect an initializer function from being invoked twice. */ modifier initializer() { require(_initializing || _isConstructor() || !_initialized, "Initializable: contract is already initialized"); bool isTopLevelCall = !_initializing; if (isTopLevelCall) { _initializing = true; _initialized = true; } _; if (isTopLevelCall) { _initializing = false; } } /// @dev Returns true if and only if the function is running in the constructor function _isConstructor() private view returns (bool) { return !AddressUpgradeable.isContract(address(this)); } } /** * @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, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, 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 (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } /** * @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) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } /** * @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) { 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, reverting 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) { require(b > 0, "SafeMath: division by zero"); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting 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) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * 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); return a - b; } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryDiv}. * * 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) { require(b > 0, errorMessage); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * 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; } } /** * @title ProofOfHumanity Interface * @dev See https://github.com/Proof-Of-Humanity/Proof-Of-Humanity. */ interface IProofOfHumanity { function isRegistered(address _submissionID) external view returns ( bool registered ); } /** * @title Universal Basic Income * @dev UBI is an ERC20 compatible token that is connected to a Proof of Humanity registry. * * Tokens are issued and drip over time for every verified submission on a Proof of Humanity registry. * The accrued tokens are updated directly on every wallet using the `balanceOf` function. * The tokens get effectively minted and persisted in memory when someone interacts with the contract doing a `transfer` or `burn`. */ contract UBI is Initializable { /* Events */ /** * @dev Emitted when `value` tokens are moved from one account (`from`) to another (`to`). * * Note that `value` may be zero. * Also note that due to continuous minting we cannot emit transfer events from the address 0 when tokens are created. * In order to keep consistency, we decided not to emit those events from the address 0 even when minting is done within a transaction. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); using SafeMath for uint256; /* Storage */ mapping (address => uint256) private balance; mapping (address => mapping (address => uint256)) public allowance; /// @dev A lower bound of the total supply. Does not take into account tokens minted as UBI by an address before it moves those (transfer or burn). uint256 public totalSupply; /// @dev Name of the token. string public name; /// @dev Symbol of the token. string public symbol; /// @dev Number of decimals of the token. uint8 public decimals; /// @dev How many tokens per second will be minted for every valid human. uint256 public accruedPerSecond; /// @dev The contract's governor. address public governor; /// @dev The Proof Of Humanity registry to reference. IProofOfHumanity public proofOfHumanity; /// @dev Timestamp since human started accruing. mapping(address => uint256) public accruedSince; /* Modifiers */ /// @dev Verifies that the sender has ability to modify governed parameters. modifier onlyByGovernor() { require(governor == msg.sender, "The caller is not the governor."); _; } /* Initializer */ /** @dev Constructor. * @param _initialSupply for the UBI coin including all decimals. * @param _name for UBI coin. * @param _symbol for UBI coin ticker. * @param _accruedPerSecond How much of the token is accrued per block. * @param _proofOfHumanity The Proof Of Humanity registry to reference. */ function initialize(uint256 _initialSupply, string memory _name, string memory _symbol, uint256 _accruedPerSecond, IProofOfHumanity _proofOfHumanity) public initializer { name = _name; symbol = _symbol; decimals = 18; accruedPerSecond = _accruedPerSecond; proofOfHumanity = _proofOfHumanity; governor = msg.sender; balance[msg.sender] = _initialSupply; totalSupply = _initialSupply; } /* External */ /** @dev Starts accruing UBI for a registered submission. * @param _human The submission ID. */ function startAccruing(address _human) external { require(proofOfHumanity.isRegistered(_human), "The submission is not registered in Proof Of Humanity."); require(accruedSince[_human] == 0, "The submission is already accruing UBI."); accruedSince[_human] = block.timestamp; } /** @dev Allows anyone to report a submission that * should no longer receive UBI due to removal from the * Proof Of Humanity registry. The reporter receives any * leftover accrued UBI. * @param _human The submission ID. */ function reportRemoval(address _human) external { require(!proofOfHumanity.isRegistered(_human), "The submission is still registered in Proof Of Humanity."); require(accruedSince[_human] != 0, "The submission is not accruing UBI."); uint256 newSupply = accruedPerSecond.mul(block.timestamp.sub(accruedSince[_human])); accruedSince[_human] = 0; balance[msg.sender] = balance[msg.sender].add(newSupply); totalSupply = totalSupply.add(newSupply); } /** @dev Changes `governor` to `_governor`. * @param _governor The address of the new governor. */ function changeGovernor(address _governor) external onlyByGovernor { governor = _governor; } /** @dev Changes `proofOfHumanity` to `_proofOfHumanity`. * @param _proofOfHumanity Registry that meets interface of Proof of Humanity. */ function changeProofOfHumanity(IProofOfHumanity _proofOfHumanity) external onlyByGovernor { proofOfHumanity = _proofOfHumanity; } /** @dev Transfers `_amount` to `_recipient` and withdraws accrued tokens. * @param _recipient The entity receiving the funds. * @param _amount The amount to tranfer in base units. */ function transfer(address _recipient, uint256 _amount) public returns (bool) { uint256 newSupplyFrom; if (accruedSince[msg.sender] != 0 && proofOfHumanity.isRegistered(msg.sender)) { newSupplyFrom = accruedPerSecond.mul(block.timestamp.sub(accruedSince[msg.sender])); totalSupply = totalSupply.add(newSupplyFrom); accruedSince[msg.sender] = block.timestamp; } balance[msg.sender] = balance[msg.sender].add(newSupplyFrom).sub(_amount, "ERC20: transfer amount exceeds balance"); balance[_recipient] = balance[_recipient].add(_amount); emit Transfer(msg.sender, _recipient, _amount); return true; } /** @dev Transfers `_amount` from `_sender` to `_recipient` and withdraws accrued tokens. * @param _sender The entity to take the funds from. * @param _recipient The entity receiving the funds. * @param _amount The amount to tranfer in base units. */ function transferFrom(address _sender, address _recipient, uint256 _amount) public returns (bool) { uint256 newSupplyFrom; allowance[_sender][msg.sender] = allowance[_sender][msg.sender].sub(_amount, "ERC20: transfer amount exceeds allowance"); if (accruedSince[_sender] != 0 && proofOfHumanity.isRegistered(_sender)) { newSupplyFrom = accruedPerSecond.mul(block.timestamp.sub(accruedSince[_sender])); totalSupply = totalSupply.add(newSupplyFrom); accruedSince[_sender] = block.timestamp; } balance[_sender] = balance[_sender].add(newSupplyFrom).sub(_amount, "ERC20: transfer amount exceeds balance"); balance[_recipient] = balance[_recipient].add(_amount); emit Transfer(_sender, _recipient, _amount); return true; } /** @dev Approves `_spender` to spend `_amount`. * @param _spender The entity allowed to spend funds. * @param _amount The amount of base units the entity will be allowed to spend. */ function approve(address _spender, uint256 _amount) public returns (bool) { allowance[msg.sender][_spender] = _amount; emit Approval(msg.sender, _spender, _amount); return true; } /** @dev Increases the `_spender` allowance by `_addedValue`. * @param _spender The entity allowed to spend funds. * @param _addedValue The amount of extra base units the entity will be allowed to spend. */ function increaseAllowance(address _spender, uint256 _addedValue) public returns (bool) { uint256 newAllowance = allowance[msg.sender][_spender].add(_addedValue); allowance[msg.sender][_spender] = newAllowance; emit Approval(msg.sender, _spender, newAllowance); return true; } /** @dev Decreases the `_spender` allowance by `_subtractedValue`. * @param _spender The entity whose spending allocation will be reduced. * @param _subtractedValue The reduction of spending allocation in base units. */ function decreaseAllowance(address _spender, uint256 _subtractedValue) public returns (bool) { uint256 newAllowance = allowance[msg.sender][_spender].sub(_subtractedValue, "ERC20: decreased allowance below zero"); allowance[msg.sender][_spender] = newAllowance; emit Approval(msg.sender, _spender, newAllowance); return true; } /** @dev Burns `_amount` of tokens and withdraws accrued tokens. * @param _amount The quantity of tokens to burn in base units. */ function burn(uint256 _amount) public { uint256 newSupplyFrom; if(accruedSince[msg.sender] != 0 && proofOfHumanity.isRegistered(msg.sender)) { newSupplyFrom = accruedPerSecond.mul(block.timestamp.sub(accruedSince[msg.sender])); accruedSince[msg.sender] = block.timestamp; } balance[msg.sender] = balance[msg.sender].add(newSupplyFrom).sub(_amount, "ERC20: burn amount exceeds balance"); totalSupply = totalSupply.add(newSupplyFrom).sub(_amount); emit Transfer(msg.sender, address(0), _amount); } /** @dev Burns `_amount` of tokens from `_account` and withdraws accrued tokens. * @param _account The entity to burn tokens from. * @param _amount The quantity of tokens to burn in base units. */ function burnFrom(address _account, uint256 _amount) public { uint256 newSupplyFrom; allowance[_account][msg.sender] = allowance[_account][msg.sender].sub(_amount, "ERC20: burn amount exceeds allowance"); if (accruedSince[_account] != 0 && proofOfHumanity.isRegistered(_account)) { newSupplyFrom = accruedPerSecond.mul(block.timestamp.sub(accruedSince[_account])); accruedSince[_account] = block.timestamp; } balance[_account] = balance[_account].add(newSupplyFrom).sub(_amount, "ERC20: burn amount exceeds balance"); totalSupply = totalSupply.add(newSupplyFrom).sub(_amount); emit Transfer(_account, address(0), _amount); } /* Getters */ /** @dev Calculates how much UBI a submission has available for withdrawal. * @param _human The submission ID. * @return accrued The available UBI for withdrawal. */ function getAccruedValue(address _human) public view returns (uint256 accrued) { // If this human have not started to accrue, or is not registered, return 0. if (accruedSince[_human] == 0 || !proofOfHumanity.isRegistered(_human)) return 0; else return accruedPerSecond.mul(block.timestamp.sub(accruedSince[_human])); } /** * @dev Calculates the current user accrued balance. * @param _human The submission ID. * @return The current balance including accrued Universal Basic Income of the user. **/ function balanceOf(address _human) public view returns (uint256) { return getAccruedValue(_human).add(balance[_human]); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"accruedPerSecond","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"accruedSince","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_human","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_governor","type":"address"}],"name":"changeGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IProofOfHumanity","name":"_proofOfHumanity","type":"address"}],"name":"changeProofOfHumanity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_human","type":"address"}],"name":"getAccruedValue","outputs":[{"internalType":"uint256","name":"accrued","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_initialSupply","type":"uint256"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint256","name":"_accruedPerSecond","type":"uint256"},{"internalType":"contract IProofOfHumanity","name":"_proofOfHumanity","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proofOfHumanity","outputs":[{"internalType":"contract IProofOfHumanity","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_human","type":"address"}],"name":"reportRemoval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_human","type":"address"}],"name":"startAccruing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b506119d8806100206000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c806342966c68116100c3578063a9059cbb1161007c578063a9059cbb1461054c578063ab9dbdca14610578578063c774a7df1461059e578063d9605867146105a6578063dd62ed3e146105ae578063e4c0aaf4146105dc5761014d565b806342966c68146104835780636dbe2045146104a057806370a08231146104c657806379cc6790146104ec57806395d89b4114610518578063a457c2d7146105205761014d565b8063226fa42d11610115578063226fa42d1461027357806323b872dd1461029b57806325dc93de146102d157806326b5bdd614610413578063313ce5671461043957806339509351146104575761014d565b806306fdde0314610152578063095ea7b3146101cf5780630c340a241461020f57806318160ddd146102335780631c77c0451461024d575b600080fd5b61015a610602565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561019457818101518382015260200161017c565b50505050905090810190601f1680156101c15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101fb600480360360408110156101e557600080fd5b506001600160a01b038135169060200135610690565b604080519115158252519081900360200190f35b6102176106f7565b604080516001600160a01b039092168252519081900360200190f35b61023b610706565b60408051918252519081900360200190f35b61023b6004803603602081101561026357600080fd5b50356001600160a01b031661070c565b6102996004803603602081101561028957600080fd5b50356001600160a01b03166107ed565b005b6101fb600480360360608110156102b157600080fd5b506001600160a01b03813581169160208101359091169060400135610978565b610299600480360360a08110156102e757600080fd5b8135919081019060408101602082013564010000000081111561030957600080fd5b82018360208201111561031b57600080fd5b8035906020019184600183028401116401000000008311171561033d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929594936020810193503591505064010000000081111561039057600080fd5b8201836020820111156103a257600080fd5b803590602001918460018302840111640100000000831117156103c457600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955050823593505050602001356001600160a01b0316610b99565b6102996004803603602081101561042957600080fd5b50356001600160a01b0316610cbb565b610441610de0565b6040805160ff9092168252519081900360200190f35b6101fb6004803603604081101561046d57600080fd5b506001600160a01b038135169060200135610de9565b6102996004803603602081101561049957600080fd5b5035610e82565b610299600480360360208110156104b657600080fd5b50356001600160a01b0316610fd9565b61023b600480360360208110156104dc57600080fd5b50356001600160a01b031661105a565b6102996004803603604081101561050257600080fd5b506001600160a01b038135169060200135611086565b61015a611272565b6101fb6004803603604081101561053657600080fd5b506001600160a01b0381351690602001356112cd565b6101fb6004803603604081101561056257600080fd5b506001600160a01b038135169060200135611318565b61023b6004803603602081101561058e57600080fd5b50356001600160a01b03166114a5565b61023b6114b7565b6102176114bd565b61023b600480360360408110156105c457600080fd5b506001600160a01b03813581169160200135166114cc565b610299600480360360208110156105f257600080fd5b50356001600160a01b03166114e9565b6004805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156106885780601f1061065d57610100808354040283529160200191610688565b820191906000526020600020905b81548152906001019060200180831161066b57829003601f168201915b505050505081565b3360008181526002602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b6008546001600160a01b031681565b60035481565b6001600160a01b0381166000908152600a602052604081205415806107a757506009546040805163c3c5a54760e01b81526001600160a01b0385811660048301529151919092169163c3c5a547916024808301926020929190829003018186803b15801561077957600080fd5b505afa15801561078d573d6000803e3d6000fd5b505050506040513d60208110156107a357600080fd5b5051155b156107b4575060006107e8565b6001600160a01b0382166000908152600a60205260409020546107e5906107dc90429061156a565b600754906115c7565b90505b919050565b6009546040805163c3c5a54760e01b81526001600160a01b0384811660048301529151919092169163c3c5a547916024808301926020929190829003018186803b15801561083a57600080fd5b505afa15801561084e573d6000803e3d6000fd5b505050506040513d602081101561086457600080fd5b5051156108a25760405162461bcd60e51b81526004018080602001828103825260388152602001806117c36038913960400191505060405180910390fd5b6001600160a01b0381166000908152600a60205260409020546108f65760405162461bcd60e51b81526004018080602001828103825260238152602001806118446023913960400191505060405180910390fd5b6001600160a01b0381166000908152600a602052604081205461091e906107dc90429061156a565b6001600160a01b0383166000908152600a6020908152604080832083905533835260019091529020549091506109549082611627565b336000908152600160205260409020556003546109719082611627565b6003555050565b6000806109c3836040518060600160405280602881526020016118dc602891396001600160a01b03881660009081526002602090815260408083203384529091529020549190611681565b6001600160a01b0386166000818152600260209081526040808320338452825280832094909455918152600a909152205415801590610a7757506009546040805163c3c5a54760e01b81526001600160a01b0388811660048301529151919092169163c3c5a547916024808301926020929190829003018186803b158015610a4a57600080fd5b505afa158015610a5e573d6000803e3d6000fd5b505050506040513d6020811015610a7457600080fd5b50515b15610ad3576001600160a01b0385166000908152600a6020526040902054610aa4906107dc90429061156a565b600354909150610ab49082611627565b6003556001600160a01b0385166000908152600a602052604090204290555b610b1a83604051806060016040528060268152602001611867602691396001600160a01b038816600090815260016020526040902054610b139085611627565b9190611681565b6001600160a01b038087166000908152600160205260408082209390935590861681522054610b499084611627565b6001600160a01b03808616600081815260016020908152604091829020949094558051878152905191939289169260008051602061192883398151915292918290030190a3506001949350505050565b600054610100900460ff1680610bb25750610bb2611718565b80610bc0575060005460ff16155b610bfb5760405162461bcd60e51b815260040180806020018281038252602e81526020018061188d602e913960400191505060405180910390fd5b600054610100900460ff16158015610c26576000805460ff1961ff0019909116610100171660011790555b8451610c3990600490602088019061172f565b508351610c4d90600590602087019061172f565b5060068054601260ff199091161790556007839055600980546001600160a01b03199081166001600160a01b038516179091556008805433921682179055600090815260016020526040902086905560038690558015610cb3576000805461ff00191690555b505050505050565b6009546040805163c3c5a54760e01b81526001600160a01b0384811660048301529151919092169163c3c5a547916024808301926020929190829003018186803b158015610d0857600080fd5b505afa158015610d1c573d6000803e3d6000fd5b505050506040513d6020811015610d3257600080fd5b5051610d6f5760405162461bcd60e51b81526004018080602001828103825260368152602001806119486036913960400191505060405180910390fd5b6001600160a01b0381166000908152600a602052604090205415610dc45760405162461bcd60e51b81526004018080602001828103825260278152602001806117fb6027913960400191505060405180910390fd5b6001600160a01b03166000908152600a60205260409020429055565b60065460ff1681565b3360009081526002602090815260408083206001600160a01b03861684529091528120548190610e199084611627565b3360008181526002602090815260408083206001600160a01b038a16808552908352928190208590558051858152905194955091937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a35060019392505050565b336000908152600a602052604081205415801590610f1357506009546040805163c3c5a54760e01b815233600482015290516001600160a01b039092169163c3c5a54791602480820192602092909190829003018186803b158015610ee657600080fd5b505afa158015610efa573d6000803e3d6000fd5b505050506040513d6020811015610f1057600080fd5b50515b15610f4c57336000908152600a6020526040902054610f37906107dc90429061156a565b336000908152600a6020526040902042905590505b610f83826040518060600160405280602281526020016118226022913933600090815260016020526040902054610b139085611627565b33600090815260016020526040902055600354610fac908390610fa69084611627565b9061156a565b60035560408051838152905160009133916000805160206119288339815191529181900360200190a35050565b6008546001600160a01b03163314611038576040805162461bcd60e51b815260206004820152601f60248201527f5468652063616c6c6572206973206e6f742074686520676f7665726e6f722e00604482015290519081900360640190fd5b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381166000908152600160205260408120546107e5906110808461070c565b90611627565b60006110d082604051806060016040528060248152602001611904602491396001600160a01b03861660009081526002602090815260408083203384529091529020549190611681565b6001600160a01b0384166000818152600260209081526040808320338452825280832094909455918152600a90915220541580159061118457506009546040805163c3c5a54760e01b81526001600160a01b0386811660048301529151919092169163c3c5a547916024808301926020929190829003018186803b15801561115757600080fd5b505afa15801561116b573d6000803e3d6000fd5b505050506040513d602081101561118157600080fd5b50515b156111cf576001600160a01b0383166000908152600a60205260409020546111b1906107dc90429061156a565b6001600160a01b0384166000908152600a6020526040902042905590505b61120f82604051806060016040528060228152602001611822602291396001600160a01b038616600090815260016020526040902054610b139085611627565b6001600160a01b03841660009081526001602052604090205560035461123b908390610fa69084611627565b6003556040805183815290516000916001600160a01b038616916000805160206119288339815191529181900360200190a3505050565b6005805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156106885780601f1061065d57610100808354040283529160200191610688565b600080610e198360405180606001604052806025815260200161197e602591393360009081526002602090815260408083206001600160a01b038b1684529091529020549190611681565b336000908152600a60205260408120548190158015906113ab57506009546040805163c3c5a54760e01b815233600482015290516001600160a01b039092169163c3c5a54791602480820192602092909190829003018186803b15801561137e57600080fd5b505afa158015611392573d6000803e3d6000fd5b505050506040513d60208110156113a857600080fd5b50515b156113f557336000908152600a60205260409020546113cf906107dc90429061156a565b6003549091506113df9082611627565b600355336000908152600a602052604090204290555b61142c836040518060600160405280602681526020016118676026913933600090815260016020526040902054610b139085611627565b33600090815260016020526040808220929092556001600160a01b038616815220546114589084611627565b6001600160a01b0385166000818152600160209081526040918290209390935580518681529051919233926000805160206119288339815191529281900390910190a35060019392505050565b600a6020526000908152604090205481565b60075481565b6009546001600160a01b031681565b600260209081526000928352604080842090915290825290205481565b6008546001600160a01b03163314611548576040805162461bcd60e51b815260206004820152601f60248201527f5468652063616c6c6572206973206e6f742074686520676f7665726e6f722e00604482015290519081900360640190fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6000828211156115c1576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000826115d6575060006106f1565b828202828482816115e357fe5b04146116205760405162461bcd60e51b81526004018080602001828103825260218152602001806118bb6021913960400191505060405180910390fd5b9392505050565b600082820183811015611620576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600081848411156117105760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156116d55781810151838201526020016116bd565b50505050905090810190601f1680156117025780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600061172330611729565b15905090565b3b151590565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061177057805160ff191683800117855561179d565b8280016001018555821561179d579182015b8281111561179d578251825591602001919060010190611782565b506117a99291506117ad565b5090565b5b808211156117a957600081556001016117ae56fe546865207375626d697373696f6e206973207374696c6c207265676973746572656420696e2050726f6f66204f662048756d616e6974792e546865207375626d697373696f6e20697320616c7265616479206163637275696e67205542492e45524332303a206275726e20616d6f756e7420657863656564732062616c616e6365546865207375626d697373696f6e206973206e6f74206163637275696e67205542492e45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef546865207375626d697373696f6e206973206e6f74207265676973746572656420696e2050726f6f66204f662048756d616e6974792e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209b66de40a18fd818126707f38f2ebb1a4056b39576098a0af9d15ebfdfe0048164736f6c63430007030033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061014d5760003560e01c806342966c68116100c3578063a9059cbb1161007c578063a9059cbb1461054c578063ab9dbdca14610578578063c774a7df1461059e578063d9605867146105a6578063dd62ed3e146105ae578063e4c0aaf4146105dc5761014d565b806342966c68146104835780636dbe2045146104a057806370a08231146104c657806379cc6790146104ec57806395d89b4114610518578063a457c2d7146105205761014d565b8063226fa42d11610115578063226fa42d1461027357806323b872dd1461029b57806325dc93de146102d157806326b5bdd614610413578063313ce5671461043957806339509351146104575761014d565b806306fdde0314610152578063095ea7b3146101cf5780630c340a241461020f57806318160ddd146102335780631c77c0451461024d575b600080fd5b61015a610602565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561019457818101518382015260200161017c565b50505050905090810190601f1680156101c15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101fb600480360360408110156101e557600080fd5b506001600160a01b038135169060200135610690565b604080519115158252519081900360200190f35b6102176106f7565b604080516001600160a01b039092168252519081900360200190f35b61023b610706565b60408051918252519081900360200190f35b61023b6004803603602081101561026357600080fd5b50356001600160a01b031661070c565b6102996004803603602081101561028957600080fd5b50356001600160a01b03166107ed565b005b6101fb600480360360608110156102b157600080fd5b506001600160a01b03813581169160208101359091169060400135610978565b610299600480360360a08110156102e757600080fd5b8135919081019060408101602082013564010000000081111561030957600080fd5b82018360208201111561031b57600080fd5b8035906020019184600183028401116401000000008311171561033d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929594936020810193503591505064010000000081111561039057600080fd5b8201836020820111156103a257600080fd5b803590602001918460018302840111640100000000831117156103c457600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955050823593505050602001356001600160a01b0316610b99565b6102996004803603602081101561042957600080fd5b50356001600160a01b0316610cbb565b610441610de0565b6040805160ff9092168252519081900360200190f35b6101fb6004803603604081101561046d57600080fd5b506001600160a01b038135169060200135610de9565b6102996004803603602081101561049957600080fd5b5035610e82565b610299600480360360208110156104b657600080fd5b50356001600160a01b0316610fd9565b61023b600480360360208110156104dc57600080fd5b50356001600160a01b031661105a565b6102996004803603604081101561050257600080fd5b506001600160a01b038135169060200135611086565b61015a611272565b6101fb6004803603604081101561053657600080fd5b506001600160a01b0381351690602001356112cd565b6101fb6004803603604081101561056257600080fd5b506001600160a01b038135169060200135611318565b61023b6004803603602081101561058e57600080fd5b50356001600160a01b03166114a5565b61023b6114b7565b6102176114bd565b61023b600480360360408110156105c457600080fd5b506001600160a01b03813581169160200135166114cc565b610299600480360360208110156105f257600080fd5b50356001600160a01b03166114e9565b6004805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156106885780601f1061065d57610100808354040283529160200191610688565b820191906000526020600020905b81548152906001019060200180831161066b57829003601f168201915b505050505081565b3360008181526002602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b6008546001600160a01b031681565b60035481565b6001600160a01b0381166000908152600a602052604081205415806107a757506009546040805163c3c5a54760e01b81526001600160a01b0385811660048301529151919092169163c3c5a547916024808301926020929190829003018186803b15801561077957600080fd5b505afa15801561078d573d6000803e3d6000fd5b505050506040513d60208110156107a357600080fd5b5051155b156107b4575060006107e8565b6001600160a01b0382166000908152600a60205260409020546107e5906107dc90429061156a565b600754906115c7565b90505b919050565b6009546040805163c3c5a54760e01b81526001600160a01b0384811660048301529151919092169163c3c5a547916024808301926020929190829003018186803b15801561083a57600080fd5b505afa15801561084e573d6000803e3d6000fd5b505050506040513d602081101561086457600080fd5b5051156108a25760405162461bcd60e51b81526004018080602001828103825260388152602001806117c36038913960400191505060405180910390fd5b6001600160a01b0381166000908152600a60205260409020546108f65760405162461bcd60e51b81526004018080602001828103825260238152602001806118446023913960400191505060405180910390fd5b6001600160a01b0381166000908152600a602052604081205461091e906107dc90429061156a565b6001600160a01b0383166000908152600a6020908152604080832083905533835260019091529020549091506109549082611627565b336000908152600160205260409020556003546109719082611627565b6003555050565b6000806109c3836040518060600160405280602881526020016118dc602891396001600160a01b03881660009081526002602090815260408083203384529091529020549190611681565b6001600160a01b0386166000818152600260209081526040808320338452825280832094909455918152600a909152205415801590610a7757506009546040805163c3c5a54760e01b81526001600160a01b0388811660048301529151919092169163c3c5a547916024808301926020929190829003018186803b158015610a4a57600080fd5b505afa158015610a5e573d6000803e3d6000fd5b505050506040513d6020811015610a7457600080fd5b50515b15610ad3576001600160a01b0385166000908152600a6020526040902054610aa4906107dc90429061156a565b600354909150610ab49082611627565b6003556001600160a01b0385166000908152600a602052604090204290555b610b1a83604051806060016040528060268152602001611867602691396001600160a01b038816600090815260016020526040902054610b139085611627565b9190611681565b6001600160a01b038087166000908152600160205260408082209390935590861681522054610b499084611627565b6001600160a01b03808616600081815260016020908152604091829020949094558051878152905191939289169260008051602061192883398151915292918290030190a3506001949350505050565b600054610100900460ff1680610bb25750610bb2611718565b80610bc0575060005460ff16155b610bfb5760405162461bcd60e51b815260040180806020018281038252602e81526020018061188d602e913960400191505060405180910390fd5b600054610100900460ff16158015610c26576000805460ff1961ff0019909116610100171660011790555b8451610c3990600490602088019061172f565b508351610c4d90600590602087019061172f565b5060068054601260ff199091161790556007839055600980546001600160a01b03199081166001600160a01b038516179091556008805433921682179055600090815260016020526040902086905560038690558015610cb3576000805461ff00191690555b505050505050565b6009546040805163c3c5a54760e01b81526001600160a01b0384811660048301529151919092169163c3c5a547916024808301926020929190829003018186803b158015610d0857600080fd5b505afa158015610d1c573d6000803e3d6000fd5b505050506040513d6020811015610d3257600080fd5b5051610d6f5760405162461bcd60e51b81526004018080602001828103825260368152602001806119486036913960400191505060405180910390fd5b6001600160a01b0381166000908152600a602052604090205415610dc45760405162461bcd60e51b81526004018080602001828103825260278152602001806117fb6027913960400191505060405180910390fd5b6001600160a01b03166000908152600a60205260409020429055565b60065460ff1681565b3360009081526002602090815260408083206001600160a01b03861684529091528120548190610e199084611627565b3360008181526002602090815260408083206001600160a01b038a16808552908352928190208590558051858152905194955091937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a35060019392505050565b336000908152600a602052604081205415801590610f1357506009546040805163c3c5a54760e01b815233600482015290516001600160a01b039092169163c3c5a54791602480820192602092909190829003018186803b158015610ee657600080fd5b505afa158015610efa573d6000803e3d6000fd5b505050506040513d6020811015610f1057600080fd5b50515b15610f4c57336000908152600a6020526040902054610f37906107dc90429061156a565b336000908152600a6020526040902042905590505b610f83826040518060600160405280602281526020016118226022913933600090815260016020526040902054610b139085611627565b33600090815260016020526040902055600354610fac908390610fa69084611627565b9061156a565b60035560408051838152905160009133916000805160206119288339815191529181900360200190a35050565b6008546001600160a01b03163314611038576040805162461bcd60e51b815260206004820152601f60248201527f5468652063616c6c6572206973206e6f742074686520676f7665726e6f722e00604482015290519081900360640190fd5b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381166000908152600160205260408120546107e5906110808461070c565b90611627565b60006110d082604051806060016040528060248152602001611904602491396001600160a01b03861660009081526002602090815260408083203384529091529020549190611681565b6001600160a01b0384166000818152600260209081526040808320338452825280832094909455918152600a90915220541580159061118457506009546040805163c3c5a54760e01b81526001600160a01b0386811660048301529151919092169163c3c5a547916024808301926020929190829003018186803b15801561115757600080fd5b505afa15801561116b573d6000803e3d6000fd5b505050506040513d602081101561118157600080fd5b50515b156111cf576001600160a01b0383166000908152600a60205260409020546111b1906107dc90429061156a565b6001600160a01b0384166000908152600a6020526040902042905590505b61120f82604051806060016040528060228152602001611822602291396001600160a01b038616600090815260016020526040902054610b139085611627565b6001600160a01b03841660009081526001602052604090205560035461123b908390610fa69084611627565b6003556040805183815290516000916001600160a01b038616916000805160206119288339815191529181900360200190a3505050565b6005805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156106885780601f1061065d57610100808354040283529160200191610688565b600080610e198360405180606001604052806025815260200161197e602591393360009081526002602090815260408083206001600160a01b038b1684529091529020549190611681565b336000908152600a60205260408120548190158015906113ab57506009546040805163c3c5a54760e01b815233600482015290516001600160a01b039092169163c3c5a54791602480820192602092909190829003018186803b15801561137e57600080fd5b505afa158015611392573d6000803e3d6000fd5b505050506040513d60208110156113a857600080fd5b50515b156113f557336000908152600a60205260409020546113cf906107dc90429061156a565b6003549091506113df9082611627565b600355336000908152600a602052604090204290555b61142c836040518060600160405280602681526020016118676026913933600090815260016020526040902054610b139085611627565b33600090815260016020526040808220929092556001600160a01b038616815220546114589084611627565b6001600160a01b0385166000818152600160209081526040918290209390935580518681529051919233926000805160206119288339815191529281900390910190a35060019392505050565b600a6020526000908152604090205481565b60075481565b6009546001600160a01b031681565b600260209081526000928352604080842090915290825290205481565b6008546001600160a01b03163314611548576040805162461bcd60e51b815260206004820152601f60248201527f5468652063616c6c6572206973206e6f742074686520676f7665726e6f722e00604482015290519081900360640190fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6000828211156115c1576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000826115d6575060006106f1565b828202828482816115e357fe5b04146116205760405162461bcd60e51b81526004018080602001828103825260218152602001806118bb6021913960400191505060405180910390fd5b9392505050565b600082820183811015611620576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600081848411156117105760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156116d55781810151838201526020016116bd565b50505050905090810190601f1680156117025780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600061172330611729565b15905090565b3b151590565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061177057805160ff191683800117855561179d565b8280016001018555821561179d579182015b8281111561179d578251825591602001919060010190611782565b506117a99291506117ad565b5090565b5b808211156117a957600081556001016117ae56fe546865207375626d697373696f6e206973207374696c6c207265676973746572656420696e2050726f6f66204f662048756d616e6974792e546865207375626d697373696f6e20697320616c7265616479206163637275696e67205542492e45524332303a206275726e20616d6f756e7420657863656564732062616c616e6365546865207375626d697373696f6e206973206e6f74206163637275696e67205542492e45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef546865207375626d697373696f6e206973206e6f74207265676973746572656420696e2050726f6f66204f662048756d616e6974792e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209b66de40a18fd818126707f38f2ebb1a4056b39576098a0af9d15ebfdfe0048164736f6c63430007030033
Deployed Bytecode Sourcemap
17373:10326:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18548:18;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23909:197;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23909:197:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;18862:23;;;:::i;:::-;;;;-1:-1:-1;;;;;18862:23:0;;;;;;;;;;;;;;18482:26;;;:::i;:::-;;;;;;;;;;;;;;;;27025:338;;;;;;;;;;;;;;;;-1:-1:-1;27025:338:0;-1:-1:-1;;;;;27025:338:0;;:::i;20780:483::-;;;;;;;;;;;;;;;;-1:-1:-1;20780:483:0;-1:-1:-1;;;;;20780:483:0;;:::i;:::-;;22911:794;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22911:794:0;;;;;;;;;;;;;;;;;:::i;19672:431::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19672:431:0;;;;;;;;-1:-1:-1;19672:431:0;;-1:-1:-1;;19672:431:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19672:431:0;;-1:-1:-1;;19672:431:0;;;-1:-1:-1;;;19672:431:0;;;-1:-1:-1;;;;;19672:431:0;;:::i;20235:293::-;;;;;;;;;;;;;;;;-1:-1:-1;20235:293:0;-1:-1:-1;;;;;20235:293:0;;:::i;18682:21::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24335:299;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24335:299:0;;;;;;;;:::i;25377:542::-;;;;;;;;;;;;;;;;-1:-1:-1;25377:542:0;;:::i;21633:137::-;;;;;;;;;;;;;;;;-1:-1:-1;21633:137:0;-1:-1:-1;;;;;21633:137:0;;:::i;27565:129::-;;;;;;;;;;;;;;;;-1:-1:-1;27565:129:0;-1:-1:-1;;;;;27565:129:0;;:::i;26138:680::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;26138:680:0;;;;;;;;:::i;18608:20::-;;;:::i;24876:350::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24876:350:0;;;;;;;;:::i;21974:660::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21974:660:0;;;;;;;;:::i;19050:47::-;;;;;;;;;;;;;;;;-1:-1:-1;19050:47:0;-1:-1:-1;;;;;19050:47:0;;:::i;18787:31::-;;;:::i;18951:39::-;;;:::i;18258:66::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18258:66:0;;;;;;;;;;:::i;21378:100::-;;;;;;;;;;;;;;;;-1:-1:-1;21378:100:0;-1:-1:-1;;;;;21378:100:0;;:::i;18548:18::-;;;;;;;;;;;;;;;-1:-1:-1;;18548:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23909:197::-;24000:10;23977:4;23990:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;23990:31:0;;;;;;;;;;;:41;;;24043:39;;;;;;;23977:4;;23990:31;;24000:10;;24043:39;;;;;;;;-1:-1:-1;24096:4:0;23909:197;;;;;:::o;18862:23::-;;;-1:-1:-1;;;;;18862:23:0;;:::o;18482:26::-;;;;:::o;27025:338::-;-1:-1:-1;;;;;27197:20:0;;27087:15;27197:20;;;:12;:20;;;;;;:25;;:66;;-1:-1:-1;27227:15:0;;:36;;;-1:-1:-1;;;27227:36:0;;-1:-1:-1;;;;;27227:36:0;;;;;;;;;:15;;;;;:28;;:36;;;;;;;;;;;;;;:15;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27227:36:0;27226:37;27197:66;27193:164;;;-1:-1:-1;27272:1:0;27265:8;;27193:164;-1:-1:-1;;;;;27335:20:0;;;;;;:12;:20;;;;;;27294:63;;27315:41;;:15;;:19;:41::i;:::-;27294:16;;;:20;:63::i;:::-;27287:70;;27193:164;27025:338;;;:::o;20780:483::-;20845:15;;:36;;;-1:-1:-1;;;20845:36:0;;-1:-1:-1;;;;;20845:36:0;;;;;;;;;:15;;;;;:28;;:36;;;;;;;;;;;;;;:15;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20845:36:0;20844:37;20836:106;;;;-1:-1:-1;;;20836:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20957:20:0;;;;;;:12;:20;;;;;;20949:73;;;;-1:-1:-1;;;20949:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21090:20:0;;21029:17;21090:20;;;:12;:20;;;;;;21049:63;;21070:41;;:15;;:19;:41::i;21049:63::-;-1:-1:-1;;;;;21121:20:0;;21144:1;21121:20;;;:12;:20;;;;;;;;:24;;;21184:10;21176:19;;:7;:19;;;;;;21029:83;;-1:-1:-1;21176:34:0;;21029:83;21176:23;:34::i;:::-;21162:10;21154:19;;;;:7;:19;;;;;:56;21231:11;;:26;;21247:9;21231:15;:26::i;:::-;21217:11;:40;-1:-1:-1;;20780:483:0:o;22911:794::-;23003:4;23016:21;23077:87;23112:7;23077:87;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23077:18:0;;;;;;:9;:18;;;;;;;;23096:10;23077:30;;;;;;;;;:87;:34;:87::i;:::-;-1:-1:-1;;;;;23044:18:0;;;;;;:9;:18;;;;;;;;23063:10;23044:30;;;;;;;:120;;;;23175:21;;;:12;:21;;;;;:26;;;;:67;;-1:-1:-1;23205:15:0;;:37;;;-1:-1:-1;;;23205:37:0;;-1:-1:-1;;;;;23205:37:0;;;;;;;;;:15;;;;;:28;;:37;;;;;;;;;;;;;;:15;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23205:37:0;23175:67;23171:277;;;-1:-1:-1;;;;;23312:21:0;;;;;;:12;:21;;;;;;23271:64;;23292:42;;:15;;:19;:42::i;23271:64::-;23360:11;;23255:80;;-1:-1:-1;23360:30:0;;23255:80;23360:15;:30::i;:::-;23346:11;:44;-1:-1:-1;;;;;23401:21:0;;;;;;:12;:21;;;;;23425:15;23401:39;;23171:277;23473:90;23513:7;23473:90;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23473:16:0;;;;;;:7;:16;;;;;;:35;;23494:13;23473:20;:35::i;:::-;:39;:90;:39;:90::i;:::-;-1:-1:-1;;;;;23454:16:0;;;;;;;:7;:16;;;;;;:109;;;;23592:19;;;;;;;:32;;23616:7;23592:23;:32::i;:::-;-1:-1:-1;;;;;23570:19:0;;;;;;;:7;:19;;;;;;;;;:54;;;;23643:38;;;;;;;23570:19;;23643:38;;;;-1:-1:-1;;;;;;;;;;;23643:38:0;;;;;;;;-1:-1:-1;23695:4:0;;22911:794;-1:-1:-1;;;;22911:794:0:o;19672:431::-;8667:13;;;;;;;;:33;;;8684:16;:14;:16::i;:::-;8667:50;;;-1:-1:-1;8705:12:0;;;;8704:13;8667:50;8659:109;;;;-1:-1:-1;;;8659:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8781:19;8804:13;;;;;;8803:14;8828:101;;;;8863:13;:20;;-1:-1:-1;;;;8863:20:0;;;;;8898:19;8879:4;8898:19;;;8828:101;19848:12;;::::1;::::0;:4:::1;::::0;:12:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;19867:16:0;;::::1;::::0;:6:::1;::::0;:16:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;19890:8:0::1;:13:::0;;19901:2:::1;-1:-1:-1::0;;19890:13:0;;::::1;;::::0;;19912:16:::1;:36:::0;;;19955:15:::1;:34:::0;;-1:-1:-1;;;;;;19955:34:0;;::::1;-1:-1:-1::0;;;;;19955:34:0;::::1;;::::0;;;19996:8:::1;:21:::0;;20007:10:::1;19996:21:::0;::::1;::::0;::::1;::::0;;-1:-1:-1;20026:19:0;;;-1:-1:-1;20026:19:0::1;::::0;;;;:36;;;20069:11:::1;:28:::0;;;8955:68;;;;9006:5;8990:21;;-1:-1:-1;;8990:21:0;;;8955:68;19672:431;;;;;;:::o;20235:293::-;20298:15;;:36;;;-1:-1:-1;;;20298:36:0;;-1:-1:-1;;;;;20298:36:0;;;;;;;;;:15;;;;;:28;;:36;;;;;;;;;;;;;;:15;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20298:36:0;20290:103;;;;-1:-1:-1;;;20290:103:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20408:20:0;;;;;;:12;:20;;;;;;:25;20400:77;;;;-1:-1:-1;;;20400:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20484:20:0;;;;;:12;:20;;;;;20507:15;20484:38;;20235:293::o;18682:21::-;;;;;;:::o;24335:299::-;24463:10;24417:4;24453:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;24453:31:0;;;;;;;;;;24417:4;;24453:48;;24489:11;24453:35;:48::i;:::-;24518:10;24508:21;;;;:9;:21;;;;;;;;-1:-1:-1;;;;;24508:31:0;;;;;;;;;;;;:46;;;24566:44;;;;;;;24430:71;;-1:-1:-1;24508:31:0;;24566:44;;;;;;;;;;-1:-1:-1;24624:4:0;;24335:299;-1:-1:-1;;;24335:299:0:o;25377:542::-;25466:10;25422:21;25453:24;;;:12;:24;;;;;;:29;;;;:73;;-1:-1:-1;25486:15:0;;:40;;;-1:-1:-1;;;25486:40:0;;25515:10;25486:40;;;;;;-1:-1:-1;;;;;25486:15:0;;;;:28;;:40;;;;;;;;;;;;;;;:15;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25486:40:0;25453:73;25450:229;;;25607:10;25594:24;;;;:12;:24;;;;;;25553:67;;25574:45;;:15;;:19;:45::i;25553:67::-;25642:10;25629:24;;;;:12;:24;;;;;25656:15;25629:42;;25537:83;-1:-1:-1;25450:229:0;25707:89;25750:7;25707:89;;;;;;;;;;;;;;;;;25715:10;25707:19;;;;:7;:19;;;;;;:38;;25731:13;25707:23;:38::i;:89::-;25693:10;25685:19;;;;:7;:19;;;;;:111;25817:11;;:43;;25852:7;;25817:30;;25833:13;25817:15;:30::i;:::-;:34;;:43::i;:::-;25803:11;:57;25872:41;;;;;;;;25901:1;;25881:10;;-1:-1:-1;;;;;;;;;;;25872:41:0;;;;;;;;25377:542;;:::o;21633:137::-;19246:8;;-1:-1:-1;;;;;19246:8:0;19258:10;19246:22;19238:66;;;;;-1:-1:-1;;;19238:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;21730:15:::1;:34:::0;;-1:-1:-1;;;;;;21730:34:0::1;-1:-1:-1::0;;;;;21730:34:0;;;::::1;::::0;;;::::1;::::0;;21633:137::o;27565:129::-;-1:-1:-1;;;;;27672:15:0;;27621:7;27672:15;;;:7;:15;;;;;;27644:44;;:23;27680:6;27644:15;:23::i;:::-;:27;;:44::i;26138:680::-;26205:21;26267:84;26303:7;26267:84;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26267:19:0;;;;;;:9;:19;;;;;;;;26287:10;26267:31;;;;;;;;;:84;:35;:84::i;:::-;-1:-1:-1;;;;;26233:19:0;;;;;;:9;:19;;;;;;;;26253:10;26233:31;;;;;;;:118;;;;26362:22;;;:12;:22;;;;;:27;;;;:69;;-1:-1:-1;26393:15:0;;:38;;;-1:-1:-1;;;26393:38:0;;-1:-1:-1;;;;;26393:38:0;;;;;;;;;:15;;;;;:28;;:38;;;;;;;;;;;;;;:15;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26393:38:0;26362:69;26358:226;;;-1:-1:-1;;;;;26501:22:0;;;;;;:12;:22;;;;;;26460:65;;26481:43;;:15;;:19;:43::i;26460:65::-;-1:-1:-1;;;;;26536:22:0;;;;;;:12;:22;;;;;26561:15;26536:40;;26444:81;-1:-1:-1;26358:226:0;26610:87;26651:7;26610:87;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26610:17:0;;;;;;:7;:17;;;;;;:36;;26632:13;26610:21;:36::i;:87::-;-1:-1:-1;;;;;26590:17:0;;;;;;:7;:17;;;;;:107;26718:11;;:43;;26753:7;;26718:30;;26734:13;26718:15;:30::i;:43::-;26704:11;:57;26773:39;;;;;;;;26800:1;;-1:-1:-1;;;;;26773:39:0;;;-1:-1:-1;;;;;;;;;;;26773:39:0;;;;;;;;26138:680;;;:::o;18608:20::-;;;;;;;;;;;;;;;-1:-1:-1;;18608:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24876:350;24963:4;24976:20;24999:94;25035:16;24999:94;;;;;;;;;;;;;;;;;25009:10;24999:21;;;;:9;:21;;;;;;;;-1:-1:-1;;;;;24999:31:0;;;;;;;;;;;:94;:35;:94::i;21974:660::-;22103:10;22045:4;22090:24;;;:12;:24;;;;;;22045:4;;22090:29;;;;:73;;-1:-1:-1;22123:15:0;;:40;;;-1:-1:-1;;;22123:40:0;;22152:10;22123:40;;;;;;-1:-1:-1;;;;;22123:15:0;;;;:28;;:40;;;;;;;;;;;;;;;:15;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22123:40:0;22090:73;22086:289;;;22246:10;22233:24;;;;:12;:24;;;;;;22192:67;;22213:45;;:15;;:19;:45::i;22192:67::-;22284:11;;22176:83;;-1:-1:-1;22284:30:0;;22176:83;22284:15;:30::i;:::-;22270:11;:44;22338:10;22325:24;;;;:12;:24;;;;;22352:15;22325:42;;22086:289;22403:93;22446:7;22403:93;;;;;;;;;;;;;;;;;22411:10;22403:19;;;;:7;:19;;;;;;:38;;22427:13;22403:23;:38::i;:93::-;22389:10;22381:19;;;;:7;:19;;;;;;:115;;;;-1:-1:-1;;;;;22525:19:0;;;;;;:32;;22549:7;22525:23;:32::i;:::-;-1:-1:-1;;;;;22503:19:0;;;;;;:7;:19;;;;;;;;;:54;;;;22569:41;;;;;;;22503:19;;22578:10;;-1:-1:-1;;;;;;;;;;;22569:41:0;;;;;;;;;-1:-1:-1;22624:4:0;;21974:660;-1:-1:-1;;;21974:660:0:o;19050:47::-;;;;;;;;;;;;;:::o;18787:31::-;;;;:::o;18951:39::-;;;-1:-1:-1;;;;;18951:39:0;;:::o;18258:66::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;21378:100::-;19246:8;;-1:-1:-1;;;;;19246:8:0;19258:10;19246:22;19238:66;;;;;-1:-1:-1;;;19238:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;21452:8:::1;:20:::0;;-1:-1:-1;;;;;;21452:20:0::1;-1:-1:-1::0;;;;;21452:20:0;;;::::1;::::0;;;::::1;::::0;;21378:100::o;12425:158::-;12483:7;12516:1;12511;:6;;12503:49;;;;;-1:-1:-1;;;12503:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12570:5:0;;;12425:158::o;12842:220::-;12900:7;12924:6;12920:20;;-1:-1:-1;12939:1:0;12932:8;;12920:20;12963:5;;;12967:1;12963;:5;:1;12987:5;;;;;:10;12979:56;;;;-1:-1:-1;;;12979:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13053:1;12842:220;-1:-1:-1;;;12842:220:0:o;11963:179::-;12021:7;12053:5;;;12077:6;;;;12069:46;;;;;-1:-1:-1;;;12069:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;14790:166;14876:7;14912:12;14904:6;;;;14896:29;;;;-1:-1:-1;;;14896:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;14943:5:0;;;14790:166::o;9123:125::-;9171:4;9196:44;9234:4;9196:29;:44::i;:::-;9195:45;9188:52;;9123:125;:::o;1024:422::-;1391:20;1430:8;;;1024:422::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;
Swarm Source
ipfs://9b66de40a18fd818126707f38f2ebb1a4056b39576098a0af9d15ebfdfe00481
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.