Contract Overview
Balance:
0 Ether
More Info
My Name Tag:
Not Available
TokenTracker:
Txn Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
0xe3f513f2eb96321f5dde7b36d0b90e98efb1b42c3024f7a445986821f65e4a34 | Approve | 23574820 | 498 days 22 hrs ago | 0xe50fb5e4f608d96beb8b4364522e189fb98d821d | IN | 0xcc1f3fbce7e0bb962c8ad39e28bd58edd5b2d7a5 | 0 Ether | 0.00040727 | |
0xe918c9fc37eb401d2a979da29f1019e19fb5d082ac282b7e6be8edcdcfce682f | Approve | 23572541 | 499 days 1 hr ago | 0xe50fb5e4f608d96beb8b4364522e189fb98d821d | IN | 0xcc1f3fbce7e0bb962c8ad39e28bd58edd5b2d7a5 | 0 Ether | 0.00061727 | |
0xd5dfdb786c2853107868e28426f1abad065e4ca1f004143ba0903713d78b15aa | 0x60806040 | 21801269 | 612 days 17 hrs ago | 0xfe84a210846a21146a529c569f0059fe7f313fca | IN | Create: CoverERC20 | 0 Ether | 0.04548244 |
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
Contract Name:
CoverERC20
Compiler Version
v0.7.3+commit.9bfce1f6
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-12-16 */ // SPDX-License-Identifier: MIT // solhint-disable-next-line compiler-version pragma solidity >=0.4.24 <0.8.0; /** * @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) { // extcodesize checks the size of the code stored in an address, and // address returns the current address. Since the code is still not // deployed when running a constructor, any checks on its code size will // yield zero, making it an effective way to detect if a contract is // under construction or not. address self = address(this); uint256 cs; // solhint-disable-next-line no-inline-assembly assembly { cs := extcodesize(self) } return cs == 0; } } pragma solidity ^0.7.3; /** * @title Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); function symbol() external view returns (string memory); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function approve(address spender, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); function totalSupply() external view returns (uint256); function increaseAllowance(address spender, uint256 addedValue) external returns (bool); function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool); } /** * @title Interface of Ownable */ interface IOwnable { function owner() external view returns (address); } pragma solidity ^0.7.3; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * @author [email protected] * * By initialization, the owner account will be the one that called initializeOwner. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Initializable { address private _owner; address private _newOwner; event OwnershipTransferInitiated(address indexed previousOwner, address indexed newOwner); event OwnershipTransferCompleted(address indexed previousOwner, address indexed newOwner); /** * @dev COVER: Initializes the contract setting the deployer as the initial owner. */ function initializeOwner() internal initializer { _owner = msg.sender; emit OwnershipTransferCompleted(address(0), _owner); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == msg.sender, "Ownable: caller is not the owner"); _; } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferInitiated(_owner, newOwner); _newOwner = newOwner; } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function claimOwnership() public virtual { require(_newOwner == msg.sender, "Ownable: caller is not the owner"); emit OwnershipTransferCompleted(_owner, _newOwner); _owner = _newOwner; } } pragma solidity ^0.7.3; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } interface ICoverERC20 is IERC20 { function burn(uint256 _amount) external returns (bool); /// @notice access restriction - owner (Cover) function mint(address _account, uint256 _amount) external returns (bool); function setSymbol(string calldata _symbol) external returns (bool); function burnByCover(address _account, uint256 _amount) external returns (bool); } pragma solidity ^0.7.3; /** * @title CoverERC20 implements {ERC20} standards with expended features for COVER * @author [email protected] * * COVER's covToken Features: * - Has mint and burn by owner (Cover contract) only feature. * - No limit on the totalSupply. * - Should only be created from Cover contract. See {Cover} */ contract CoverERC20 is ICoverERC20, Initializable, Ownable { using SafeMath for uint256; uint8 public constant decimals = 18; string public constant name = "covToken"; // The symbol of the contract string public override symbol; uint256 private _totalSupply; mapping(address => uint256) private balances; mapping(address => mapping (address => uint256)) private allowances; /// @notice Initialize, called once function initialize (string calldata _symbol) external initializer { symbol = _symbol; initializeOwner(); } /// @notice Standard ERC20 function function balanceOf(address account) external view override returns (uint256) { return balances[account]; } /// @notice Standard ERC20 function function totalSupply() external view override returns (uint256) { return _totalSupply; } /// @notice Standard ERC20 function function transfer(address recipient, uint256 amount) external virtual override returns (bool) { _transfer(msg.sender, recipient, amount); return true; } /// @notice Standard ERC20 function function allowance(address owner, address spender) external view virtual override returns (uint256) { return allowances[owner][spender]; } /// @notice Standard ERC20 function function approve(address spender, uint256 amount) external virtual override returns (bool) { _approve(msg.sender, spender, amount); return true; } /// @notice Standard ERC20 function function transferFrom(address sender, address recipient, uint256 amount) external virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, msg.sender, allowances[sender][msg.sender].sub(amount, "CoverERC20: transfer amount exceeds allowance")); return true; } /// @notice New ERC20 function function increaseAllowance(address spender, uint256 addedValue) public virtual override returns (bool) { _approve(msg.sender, spender, allowances[msg.sender][spender].add(addedValue)); return true; } /// @notice New ERC20 function function decreaseAllowance(address spender, uint256 subtractedValue) public virtual override returns (bool) { _approve(msg.sender, spender, allowances[msg.sender][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /// @notice COVER specific function function mint(address _account, uint256 _amount) external override onlyOwner returns (bool) { require(_account != address(0), "CoverERC20: mint to the zero address"); _totalSupply = _totalSupply.add(_amount); balances[_account] = balances[_account].add(_amount); emit Transfer(address(0), _account, _amount); return true; } /// @notice COVER specific function function setSymbol(string calldata _symbol) external override onlyOwner returns (bool) { symbol = _symbol; return true; } /// @notice COVER specific function function burnByCover(address _account, uint256 _amount) external override onlyOwner returns (bool) { _burn(_account, _amount); return true; } /// @notice COVER specific function function burn(uint256 _amount) external override returns (bool) { _burn(msg.sender, _amount); return true; } function _transfer(address sender, address recipient, uint256 amount) internal { require(sender != address(0), "CoverERC20: transfer from the zero address"); require(recipient != address(0), "CoverERC20: transfer to the zero address"); balances[sender] = balances[sender].sub(amount, "CoverERC20: transfer amount exceeds balance"); balances[recipient] = balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } function _burn(address account, uint256 amount) internal { require(account != address(0), "CoverERC20: burn from the zero address"); balances[account] = balances[account].sub(amount, "CoverERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } function _approve(address owner, address spender, uint256 amount) internal { require(owner != address(0), "CoverERC20: approve from the zero address"); require(spender != address(0), "CoverERC20: approve to the zero address"); allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } }
[{"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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferCompleted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferInitiated","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":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burnByCover","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimOwnership","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":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_symbol","type":"string"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_symbol","type":"string"}],"name":"setSymbol","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b5061139c806100206000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c806370a08231116100ad578063b84c824611610071578063b84c82461461037a578063dd62ed3e146103ea578063f2fde38b14610418578063f62d18881461043e578063f8cc02df146104ae57610121565b806370a08231146102d05780638da5cb5b146102f657806395d89b411461031a578063a457c2d714610322578063a9059cbb1461034e57610121565b8063313ce567116100f4578063313ce56714610233578063395093511461025157806340c10f191461027d57806342966c68146102a95780634e71e0c8146102c657610121565b806306fdde0314610126578063095ea7b3146101a357806318160ddd146101e357806323b872dd146101fd575b600080fd5b61012e6104da565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610168578181015183820152602001610150565b50505050905090810190601f1680156101955780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101cf600480360360408110156101b957600080fd5b506001600160a01b0381351690602001356104fe565b604080519115158252519081900360200190f35b6101eb610514565b60408051918252519081900360200190f35b6101cf6004803603606081101561021357600080fd5b506001600160a01b0381358116916020810135909116906040013561051a565b61023b610583565b6040805160ff9092168252519081900360200190f35b6101cf6004803603604081101561026757600080fd5b506001600160a01b038135169060200135610588565b6101cf6004803603604081101561029357600080fd5b506001600160a01b0381351690602001356105be565b6101cf600480360360208110156102bf57600080fd5b50356106e7565b6102ce6106fb565b005b6101eb600480360360208110156102e657600080fd5b50356001600160a01b03166107b7565b6102fe6107d2565b604080516001600160a01b039092168252519081900360200190f35b61012e6107e7565b6101cf6004803603604081101561033857600080fd5b506001600160a01b038135169060200135610872565b6101cf6004803603604081101561036457600080fd5b506001600160a01b0381351690602001356108c1565b6101cf6004803603602081101561039057600080fd5b8101906020810181356401000000008111156103ab57600080fd5b8201836020820111156103bd57600080fd5b803590602001918460018302840111640100000000831117156103df57600080fd5b5090925090506108ce565b6101eb6004803603604081101561040057600080fd5b506001600160a01b038135811691602001351661092e565b6102ce6004803603602081101561042e57600080fd5b50356001600160a01b0316610959565b6102ce6004803603602081101561045457600080fd5b81019060208101813564010000000081111561046f57600080fd5b82018360208201111561048157600080fd5b803590602001918460018302840111640100000000831117156104a357600080fd5b509092509050610a52565b6101cf600480360360408110156104c457600080fd5b506001600160a01b038135169060200135610b0b565b6040518060400160405280600881526020016731b7bb2a37b5b2b760c11b81525081565b600061050b338484610b69565b50600192915050565b60035490565b6000610527848484610c55565b6105798433610574856040518060600160405280602d81526020016112ca602d91396001600160a01b038a1660009081526005602090815260408083203384529091529020549190610da7565b610b69565b5060019392505050565b601281565b3360008181526005602090815260408083206001600160a01b0387168452909152812054909161050b9185906105749086610e3e565b600080546201000090046001600160a01b03163314610612576040805162461bcd60e51b815260206004820181905260248201526000805160206112f7833981519152604482015290519081900360640190fd5b6001600160a01b0383166106575760405162461bcd60e51b81526004018080602001828103825260248152602001806112256024913960400191505060405180910390fd5b6003546106649083610e3e565b6003556001600160a01b03831660009081526004602052604090205461068a9083610e3e565b6001600160a01b03841660008181526004602090815260408083209490945583518681529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a350600192915050565b60006106f33383610e9f565b506001919050565b6001546001600160a01b03163314610748576040805162461bcd60e51b815260206004820181905260248201526000805160206112f7833981519152604482015290519081900360640190fd5b600154600080546040516001600160a01b039384169362010000909204909116917fe9a5158ac7353c7c7322ececc080bc8e89334efa5795b6e21e40eb266b0003d691a36001546000805462010000600160b01b0319166001600160a01b039092166201000002919091179055565b6001600160a01b031660009081526004602052604090205490565b6000546201000090046001600160a01b031690565b6002805460408051602060018416156101000260001901909316849004601f8101849004840282018401909252818152929183018282801561086a5780601f1061083f5761010080835404028352916020019161086a565b820191906000526020600020905b81548152906001019060200180831161084d57829003601f168201915b505050505081565b600061050b338461057485604051806060016040528060258152602001611342602591393360009081526005602090815260408083206001600160a01b038d1684529091529020549190610da7565b600061050b338484610c55565b600080546201000090046001600160a01b03163314610922576040805162461bcd60e51b815260206004820181905260248201526000805160206112f7833981519152604482015290519081900360640190fd5b610579600284846110cf565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b6000546201000090046001600160a01b031633146109ac576040805162461bcd60e51b815260206004820181905260248201526000805160206112f7833981519152604482015290519081900360640190fd5b6001600160a01b0381166109f15760405162461bcd60e51b81526004018080602001828103825260268152602001806111d86026913960400191505060405180910390fd5b600080546040516001600160a01b03808516936201000090930416917fb150023a879fd806e3599b6ca8ee3b60f0e360ab3846d128d67ebce1a391639a91a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b600054610100900460ff1680610a6b5750610a6b610f8f565b80610a79575060005460ff16155b610ab45760405162461bcd60e51b815260040180806020018281038252602e815260200180611273602e913960400191505060405180910390fd5b600054610100900460ff16158015610adf576000805460ff1961ff0019909116610100171660011790555b610aeb600284846110cf565b50610af4610f95565b8015610b06576000805461ff00191690555b505050565b600080546201000090046001600160a01b03163314610b5f576040805162461bcd60e51b815260206004820181905260248201526000805160206112f7833981519152604482015290519081900360640190fd5b61050b8383610e9f565b6001600160a01b038316610bae5760405162461bcd60e51b81526004018080602001828103825260298152602001806112a16029913960400191505060405180910390fd5b6001600160a01b038216610bf35760405162461bcd60e51b81526004018080602001828103825260278152602001806111fe6027913960400191505060405180910390fd5b6001600160a01b03808416600081815260056020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316610c9a5760405162461bcd60e51b815260040180806020018281038252602a815260200180611249602a913960400191505060405180910390fd5b6001600160a01b038216610cdf5760405162461bcd60e51b81526004018080602001828103825260288152602001806111b06028913960400191505060405180910390fd5b610d1c816040518060600160405280602b8152602001611317602b91396001600160a01b0386166000908152600460205260409020549190610da7565b6001600160a01b038085166000908152600460205260408082209390935590841681522054610d4b9082610e3e565b6001600160a01b0380841660008181526004602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115610e365760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610dfb578181015183820152602001610de3565b50505050905090810190601f168015610e285780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015610e98576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038216610ee45760405162461bcd60e51b81526004018080602001828103825260268152602001806111636026913960400191505060405180910390fd5b610f2181604051806060016040528060278152602001611189602791396001600160a01b0385166000908152600460205260409020549190610da7565b6001600160a01b038316600090815260046020526040902055600354610f47908261108d565b6003556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b303b1590565b600054610100900460ff1680610fae5750610fae610f8f565b80610fbc575060005460ff16155b610ff75760405162461bcd60e51b815260040180806020018281038252602e815260200180611273602e913960400191505060405180910390fd5b600054610100900460ff16158015611022576000805460ff1961ff0019909116610100171660011790555b600080546201000033810262010000600160b01b0319909216919091178083556040519190046001600160a01b031691907fe9a5158ac7353c7c7322ececc080bc8e89334efa5795b6e21e40eb266b0003d6908290a3801561108a576000805461ff00191690555b50565b6000610e9883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610da7565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106111105782800160ff1982351617855561113d565b8280016001018555821561113d579182015b8281111561113d578235825591602001919060010190611122565b5061114992915061114d565b5090565b5b80821115611149576000815560010161114e56fe436f76657245524332303a206275726e2066726f6d20746865207a65726f2061646472657373436f76657245524332303a206275726e20616d6f756e7420657863656564732062616c616e6365436f76657245524332303a207472616e7366657220746f20746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373436f76657245524332303a20617070726f766520746f20746865207a65726f2061646472657373436f76657245524332303a206d696e7420746f20746865207a65726f2061646472657373436f76657245524332303a207472616e736665722066726f6d20746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564436f76657245524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373436f76657245524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572436f76657245524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205a1b85bd186bbccf0aea5142b0b82eef6ce2029412a61fc78cfa1ba33c68c9a864736f6c63430007030033
Deployed ByteCode Sourcemap
12102:4497:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12239:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13417:159;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;13417:159:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;12875:96;;;:::i;:::-;;;;;;;;;;;;;;;;13621:317;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;13621:317:0;;;;;;;;;;;;;;;;;:::i;12199:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13978:212;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;13978:212:0;;;;;;;;:::i;14538:361::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;14538:361:0;;;;;;;;:::i;15330:121::-;;;;;;;;;;;;;;;;-1:-1:-1;15330:121:0;;:::i;5800:218::-;;;:::i;:::-;;12716:114;;;;;;;;;;;;;;;;-1:-1:-1;12716:114:0;-1:-1:-1;;;;;12716:114:0;;:::i;4948:79::-;;;:::i;:::-;;;;-1:-1:-1;;;;;4948:79:0;;;;;;;;;;;;;;12320:29;;;:::i;14230:263::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;14230:263:0;;;;;;;;:::i;13016:165::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;13016:165:0;;;;;;;;:::i;14944:142::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14944:142:0;;-1:-1:-1;14944:142:0;-1:-1:-1;14944:142:0;:::i;13226:146::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;13226:146:0;;;;;;;;;;:::i;5392:253::-;;;;;;;;;;;;;;;;-1:-1:-1;5392:253:0;-1:-1:-1;;;;;5392:253:0;;:::i;12551:120::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12551:120:0;;-1:-1:-1;12551:120:0;-1:-1:-1;12551:120:0;:::i;15131:154::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15131:154:0;;;;;;;;:::i;12239:40::-;;;;;;;;;;;;;;-1:-1:-1;;;12239:40:0;;;;:::o;13417:159::-;13502:4;13515:37;13524:10;13536:7;13545:6;13515:8;:37::i;:::-;-1:-1:-1;13566:4:0;13417:159;;;;:::o;12875:96::-;12953:12;;12875:96;:::o;13621:317::-;13734:4;13750:36;13760:6;13768:9;13779:6;13750:9;:36::i;:::-;13793:121;13802:6;13810:10;13822:91;13857:6;13822:91;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13822:18:0;;;;;;:10;:18;;;;;;;;13841:10;13822:30;;;;;;;;;:91;:34;:91::i;:::-;13793:8;:121::i;:::-;-1:-1:-1;13928:4:0;13621:317;;;;;:::o;12199:35::-;12232:2;12199:35;:::o;13978:212::-;14097:10;14075:4;14118:22;;;:10;:22;;;;;;;;-1:-1:-1;;;;;14118:31:0;;;;;;;;;;14075:4;;14088:78;;14109:7;;14118:47;;14154:10;14118:35;:47::i;14538:361::-;14629:4;5160:6;;;;;-1:-1:-1;;;;;5160:6:0;5170:10;5160:20;5152:65;;;;;-1:-1:-1;;;5152:65:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5152:65:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;14653:22:0;::::1;14645:71;;;;-1:-1:-1::0;;;14645:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14740:12;::::0;:25:::1;::::0;14757:7;14740:16:::1;:25::i;:::-;14725:12;:40:::0;-1:-1:-1;;;;;14793:18:0;::::1;;::::0;;;:8:::1;:18;::::0;;;;;:31:::1;::::0;14816:7;14793:22:::1;:31::i;:::-;-1:-1:-1::0;;;;;14772:18:0;::::1;;::::0;;;:8:::1;:18;::::0;;;;;;;:52;;;;14836:39;;;;;;;14772:18;;;;14836:39:::1;::::0;;;;;;;;::::1;-1:-1:-1::0;14889:4:0::1;14538:361:::0;;;;:::o;15330:121::-;15388:4;15401:26;15407:10;15419:7;15401:5;:26::i;:::-;-1:-1:-1;15441:4:0;15330:121;;;:::o;5800:218::-;5860:9;;-1:-1:-1;;;;;5860:9:0;5873:10;5860:23;5852:68;;;;;-1:-1:-1;;;5852:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5852:68:0;;;;;;;;;;;;;;;5971:9;;;5963:6;;5936:45;;-1:-1:-1;;;;;5971:9:0;;;;5963:6;;;;;;;;5936:45;;;6001:9;;;5992:18;;-1:-1:-1;;;;;;5992:18:0;-1:-1:-1;;;;;6001:9:0;;;5992:18;;;;;;;;5800:218::o;12716:114::-;-1:-1:-1;;;;;12807:17:0;12784:7;12807:17;;;:8;:17;;;;;;;12716:114::o;4948:79::-;4986:7;5013:6;;;;-1:-1:-1;;;;;5013:6:0;;4948:79::o;12320:29::-;;;;;;;;;;;;;;-1:-1:-1;;12320:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14230:263::-;14332:4;14345:124;14354:10;14366:7;14375:93;14411:15;14375:93;;;;;;;;;;;;;;;;;14386:10;14375:22;;;;:10;:22;;;;;;;;-1:-1:-1;;;;;14375:31:0;;;;;;;;;;;:93;:35;:93::i;13016:165::-;13104:4;13117:40;13127:10;13139:9;13150:6;13117:9;:40::i;14944:142::-;15030:4;5160:6;;;;;-1:-1:-1;;;;;5160:6:0;5170:10;5160:20;5152:65;;;;;-1:-1:-1;;;5152:65:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5152:65:0;;;;;;;;;;;;;;;15046:16:::1;:6;15055:7:::0;;15046:16:::1;:::i;13226:146::-:0;-1:-1:-1;;;;;13340:17:0;;;13317:7;13340:17;;;:10;:17;;;;;;;;:26;;;;;;;;;;;;;13226:146::o;5392:253::-;5160:6;;;;;-1:-1:-1;;;;;5160:6:0;5170:10;5160:20;5152:65;;;;;-1:-1:-1;;;5152:65:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5152:65:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;5481:22:0;::::1;5473:73;;;;-1:-1:-1::0;;;5473:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5589:6;::::0;;5562:44:::1;::::0;-1:-1:-1;;;;;5562:44:0;;::::1;::::0;5589:6;;;::::1;;::::0;5562:44:::1;::::0;::::1;5617:9;:20:::0;;-1:-1:-1;;;;;;5617:20:0::1;-1:-1:-1::0;;;;;5617:20:0;;;::::1;::::0;;;::::1;::::0;;5392:253::o;12551:120::-;1506:13;;;;;;;;:33;;;1523:16;:14;:16::i;:::-;1506:50;;;-1:-1:-1;1544:12:0;;;;1543:13;1506:50;1498:109;;;;-1:-1:-1;;;1498:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1620:19;1643:13;;;;;;1642:14;1667:101;;;;1702:13;:20;;-1:-1:-1;;;;1702:20:0;;;;;1737:19;1718:4;1737:19;;;1667:101;12625:16:::1;:6;12634:7:::0;;12625:16:::1;:::i;:::-;;12648:17;:15;:17::i;:::-;1798:14:::0;1794:68;;;1845:5;1829:21;;-1:-1:-1;;1829:21:0;;;1794:68;12551:120;;;:::o;15131:154::-;15224:4;5160:6;;;;;-1:-1:-1;;;;;5160:6:0;5170:10;5160:20;5152:65;;;;;-1:-1:-1;;;5152:65:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5152:65:0;;;;;;;;;;;;;;;15237:24:::1;15243:8;15253:7;15237:5;:24::i;16267:329::-:0;-1:-1:-1;;;;;16357:19:0;;16349:73;;;;-1:-1:-1;;;16349:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16437:21:0;;16429:73;;;;-1:-1:-1;;;16429:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16511:17:0;;;;;;;:10;:17;;;;;;;;:26;;;;;;;;;;;;;:35;;;16558:32;;;;;;;;;;;;;;;;;16267:329;;;:::o;15457:460::-;-1:-1:-1;;;;;15551:20:0;;15543:75;;;;-1:-1:-1;;;15543:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15633:23:0;;15625:76;;;;-1:-1:-1;;;15625:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15729:75;15750:6;15729:75;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15729:16:0;;;;;;:8;:16;;;;;;;:75;:20;:75::i;:::-;-1:-1:-1;;;;;15710:16:0;;;;;;;:8;:16;;;;;;:94;;;;15833:19;;;;;;;:31;;15857:6;15833:23;:31::i;:::-;-1:-1:-1;;;;;15811:19:0;;;;;;;:8;:19;;;;;;;;;:53;;;;15876:35;;;;;;;15811:19;;15876:35;;;;;;;;;;;;;15457:460;;;:::o;7797:192::-;7883:7;7919:12;7911:6;;;;7903:29;;;;-1:-1:-1;;;7903:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7955:5:0;;;7797:192::o;6894:181::-;6952:7;6984:5;;;7008:6;;;;7000:46;;;;;-1:-1:-1;;;7000:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;7066:1;6894:181;-1:-1:-1;;;6894:181:0:o;15923:338::-;-1:-1:-1;;;;;15995:21:0;;15987:72;;;;-1:-1:-1;;;15987:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16088;16110:6;16088:72;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16088:17:0;;;;;;:8;:17;;;;;;;:72;:21;:72::i;:::-;-1:-1:-1;;;;;16068:17:0;;;;;;:8;:17;;;;;:92;16182:12;;:24;;16199:6;16182:16;:24::i;:::-;16167:12;:39;16218:37;;;;;;;;16244:1;;-1:-1:-1;;;;;16218:37:0;;;;;;;;;;;;15923:338;;:::o;1962:604::-;2404:4;2515:17;2551:7;1962:604;:::o;4719:148::-;1506:13;;;;;;;;:33;;;1523:16;:14;:16::i;:::-;1506:50;;;-1:-1:-1;1544:12:0;;;;1543:13;1506:50;1498:109;;;;-1:-1:-1;;;1498:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1620:19;1643:13;;;;;;1642:14;1667:101;;;;1702:13;:20;;-1:-1:-1;;;;1702:20:0;;;;;1737:19;1718:4;1737:19;;;1667:101;4778:6:::1;:19:::0;;;4787:10:::1;4778:19:::0;::::1;-1:-1:-1::0;;;;;;4778:19:0;;::::1;::::0;;;::::1;::::0;;;4813:46:::1;::::0;4852:6;;::::1;-1:-1:-1::0;;;;;4852:6:0::1;::::0;4778;4813:46:::1;::::0;4778:6;;4813:46:::1;1798:14:::0;1794:68;;;1845:5;1829:21;;-1:-1:-1;;1829:21:0;;;1794:68;4719:148;:::o;7358:136::-;7416:7;7443:43;7447:1;7450;7443:43;;;;;;;;;;;;;;;;;:3;:43::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;
Swarm Source
ipfs://5a1b85bd186bbccf0aea5142b0b82eef6ce2029412a61fc78cfa1ba33c68c9a8
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.