ERC-20
Stablecoin
Overview
Max Total Supply
7,000,000,000 HKMT
Holders
87 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 6 Decimals)
Balance
291.543452 HKMTValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
HKMT
Compiler Version
v0.5.17+commit.d19bba13
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-05-31 */ pragma solidity ^0.5.0; /** * @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. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be aplied to your functions to restrict their use to * the owner. */ contract Ownable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { _owner = msg.sender; emit OwnershipTransferred(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(isOwner(), "Ownable: caller is not the owner"); _; } /** * @dev Returns true if the caller is the current owner. */ function isOwner() public view returns (bool) { return msg.sender == _owner; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * > Note: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). */ function _transferOwnership(address newOwner) internal { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } /** * @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) { require(b <= a, "SafeMath: subtraction overflow"); 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-solidity/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) { // Solidity only automatically asserts when dividing by 0 require(b > 0, "SafeMath: division by zero"); 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) { require(b != 0, "SafeMath: modulo by zero"); return a % b; } } /** * @dev Interface of the ERC20 standard as defined in the EIP. Does not include * the optional functions; to access them see `ERC20Detailed`. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a `Transfer` event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through `transferFrom`. This is * zero by default. * * This value changes when `approve` or `transferFrom` are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * > Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an `Approval` event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a `Transfer` event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ 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); } /** * @dev Optional functions from the ERC20 standard. */ contract ERC20Detailed is IERC20 { string private _name; string private _symbol; uint8 private _decimals; /** * @dev Sets the values for `name`, `symbol`, and `decimals`. All three of * these values are immutable: they can only be set once during * construction. */ constructor (string memory name, string memory symbol, uint8 decimals) public { _name = name; _symbol = symbol; _decimals = decimals; } /** * @dev Returns the name of the token. */ function name() public view returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. * * > Note that this information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * `IERC20.balanceOf` and `IERC20.transfer`. */ function decimals() public view returns (uint8) { return _decimals; } } contract MinterRole { using Roles for Roles.Role; event MinterAdded(address indexed account); event MinterRemoved(address indexed account); Roles.Role private _minters; constructor () internal { _addMinter(msg.sender); } modifier onlyMinter() { require(isMinter(msg.sender), "MinterRole: caller does not have the Minter role"); _; } function isMinter(address account) public view returns (bool) { return _minters.has(account); } function addMinter(address account) public onlyMinter { _addMinter(account); } function renounceMinter() public { _removeMinter(msg.sender); } function _addMinter(address account) internal { _minters.add(account); emit MinterAdded(account); } function _removeMinter(address account) internal { _minters.remove(account); emit MinterRemoved(account); } } /** * @title Roles * @dev Library for managing addresses assigned to a Role. */ library Roles { struct Role { mapping (address => bool) bearer; } /** * @dev Give an account access to this role. */ function add(Role storage role, address account) internal { require(!has(role, account), "Roles: account already has role"); role.bearer[account] = true; } /** * @dev Remove an account's access to this role. */ function remove(Role storage role, address account) internal { require(has(role, account), "Roles: account does not have role"); role.bearer[account] = false; } /** * @dev Check if an account has this role. * @return bool */ function has(Role storage role, address account) internal view returns (bool) { require(account != address(0), "Roles: account is the zero address"); return role.bearer[account]; } } /** * @dev Derived From the `ERC20` . * */ contract HkmtFeePool is Ownable , IERC20, MinterRole { using SafeMath for uint256; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; /** * @dev See `IERC20.totalSupply`. */ function totalSupply() public view returns (uint256) { return _totalSupply; } /** * @dev See `IERC20.balanceOf`. */ function balanceOf(address account) public view returns (uint256) { return _balances[account]; } /** * @dev See `IERC20.allowance`. */ function allowance(address owner, address spender) public view returns (uint256) { return _allowances[owner][spender]; } /** * @dev See `IERC20.approve`. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 value) public returns (bool) { _approve(msg.sender, spender, value); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to `approve` that can be used as a mitigation for * problems described in `IERC20.approve`. * * Emits an `Approval` event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public returns (bool) { _approve(msg.sender, spender, _allowances[msg.sender][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to `approve` that can be used as a mitigation for * problems described in `IERC20.approve`. * * Emits an `Approval` event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) { _approve(msg.sender, spender, _allowances[msg.sender][spender].sub(subtractedValue)); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to `transfer`, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a `Transfer` event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address sender, address recipient, uint256 amount) internal { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _balances[sender] = _balances[sender].sub(amount); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a `Transfer` event with `from` set to the zero address. * * Requirements * * - `to` cannot be the zero address. */ function _mint(address account, uint256 amount) internal { require(account != address(0), "ERC20: mint to the zero address"); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destoys `amount` tokens from `account`, reducing the * total supply. * * Emits a `Transfer` event with `to` set to the zero address. * * Requirements * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 value) internal { require(account != address(0), "ERC20: burn from the zero address"); _totalSupply = _totalSupply.sub(value); _balances[account] = _balances[account].sub(value); emit Transfer(account, address(0), value); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens. * * This is internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an `Approval` event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve(address owner, address spender, uint256 value) internal { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = value; emit Approval(owner, spender, value); } /** * @dev Destoys `amount` tokens from `account`.`amount` is then deducted * from the caller's allowance. * * See `_burn` and `_approve`. */ function _burnFrom(address account, uint256 amount) internal { _burn(account, amount); _approve(account, msg.sender, _allowances[account][msg.sender].sub(amount)); } using SafeMath for uint; uint public createdAt = block.timestamp; uint public difficultyIncreaseInPercentPerDay = 1; HKMT public hkmtContract; modifier onlySender(address _sender) { require(msg.sender == _sender); _; } event Claimed( address indexed by, uint256 tokenReturned, uint256 reward ); constructor(address _hkmtContract) public { hkmtContract = HKMT(_hkmtContract); } function set_difficultyIncreaseInPercentPerDay(uint value) external onlyOwner returns (bool) { difficultyIncreaseInPercentPerDay = value; return true; } function currentReward(uint256 _value) public view returns (uint256) { uint timeDiff = block.timestamp.sub(createdAt); uint currentDifficulty = 100 + timeDiff.div(24 * 3600).mul(difficultyIncreaseInPercentPerDay); uint256 supposedReward = _value.mul(100).div(currentDifficulty); if (_balances[address(this)] > supposedReward) { return supposedReward; } else { return _balances[address(this)]; } } function currentMined() public view returns (uint256) { return _totalSupply - _balances[address(this)]; } function notifyTx(address _payer, uint256 _value) external onlySender(address(hkmtContract)) returns (bool) { require(_payer != address(0)); uint256 reward = currentReward(_value); _balances[address(this)] = _balances[address(this)].sub(reward); _balances[_payer] = _balances[_payer].add(reward); emit Transfer(owner(), _payer, reward); return true; } function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= _balances[msg.sender]); if (_to == address(this)) { uint256 currentPool = hkmtContract.balanceOf(address(this)); uint256 currentPZ = currentMined(); uint256 result = currentPool.mul(_value).div(currentPZ); _transfer(msg.sender, _to, _value); hkmtContract.feePoolTransfer(msg.sender, result); emit Claimed(msg.sender, _value, result); } else { _transfer(msg.sender, _to, _value); } return true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= _balances[_from]); require(_value <= _allowances[_from][msg.sender]); if (_to == address(this)) { uint256 currentPool = hkmtContract.balanceOf(address(this)); uint256 currentPZ = currentMined(); uint256 result = currentPool.mul(_value).div(currentPZ); _balances[_from] = _balances[_from].sub(_value); _balances[_to] = _balances[_to].add(_value); _allowances[_from][msg.sender] = _allowances[_from][msg.sender].sub(_value); emit Transfer(_from, _to, _value); hkmtContract.feePoolTransfer(msg.sender, result); emit Claimed(msg.sender, _value, result); } else { _balances[_from] = _balances[_from].sub(_value); _balances[_to] = _balances[_to].add(_value); _allowances[_from][msg.sender] = _allowances[_from][msg.sender].sub(_value); emit Transfer(_from, _to, _value); } return true; } function mint(address account, uint256 amount) public onlyMinter returns (bool) { _mint(account, amount); return true; } /** * @dev Destoys `amount` tokens from the caller. * * See `ERC20._burn`. */ function burn(uint256 amount) public { _burn(msg.sender, amount); } /** * @dev See `ERC20._burnFrom`. */ function burnFrom(address account, uint256 amount) public { _burnFrom(account, amount); } } /** * @dev Derived From the `ERC20` . * */ contract HKMT is Ownable, IERC20, MinterRole, ERC20Detailed { using SafeMath for uint256; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; /** * @dev See `IERC20.totalSupply`. */ function totalSupply() public view returns (uint256) { return _totalSupply; } /** * @dev See `IERC20.balanceOf`. */ function balanceOf(address account) public view returns (uint256) { return _balances[account]; } /** * @dev See `IERC20.allowance`. */ function allowance(address owner, address spender) public view returns (uint256) { return _allowances[owner][spender]; } /** * @dev See `IERC20.approve`. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 value) public returns (bool) { _approve(msg.sender, spender, value); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to `approve` that can be used as a mitigation for * problems described in `IERC20.approve`. * * Emits an `Approval` event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public returns (bool) { _approve(msg.sender, spender, _allowances[msg.sender][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to `approve` that can be used as a mitigation for * problems described in `IERC20.approve`. * * Emits an `Approval` event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) { _approve(msg.sender, spender, _allowances[msg.sender][spender].sub(subtractedValue)); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to `transfer`, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a `Transfer` event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address sender, address recipient, uint256 amount) internal { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _balances[sender] = _balances[sender].sub(amount); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a `Transfer` event with `from` set to the zero address. * * Requirements * * - `to` cannot be the zero address. */ function _mint(address account, uint256 amount) internal { require(account != address(0), "ERC20: mint to the zero address"); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destoys `amount` tokens from `account`, reducing the * total supply. * * Emits a `Transfer` event with `to` set to the zero address. * * Requirements * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 value) internal { require(account != address(0), "ERC20: burn from the zero address"); _totalSupply = _totalSupply.sub(value); _balances[account] = _balances[account].sub(value); emit Transfer(account, address(0), value); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens. * * This is internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an `Approval` event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve(address owner, address spender, uint256 value) internal { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = value; emit Approval(owner, spender, value); } /** * @dev Destoys `amount` tokens from `account`.`amount` is then deducted * from the caller's allowance. * * See `_burn` and `_approve`. */ function _burnFrom(address account, uint256 amount) internal { _burn(account, amount); _approve(account, msg.sender, _allowances[account][msg.sender].sub(amount)); } using SafeMath for uint; uint public txFeePerMillion = 0; uint256 public INITIAL_SUPPLY = 4000000000*(10**6); HkmtFeePool public feePool; constructor() public ERC20Detailed("HK Monetary Token", "HKMT", 6) { _totalSupply = INITIAL_SUPPLY; _balances[msg.sender] = INITIAL_SUPPLY; } modifier onlySender(address _sender) { require(msg.sender == _sender); _; } function setTxFee(uint _value) external onlyOwner returns (bool) { txFeePerMillion = _value; return true; } /** * @dev Set the fee pool to a specified address * @param _feePool The FeePool contract address */ function setFeePool(address _feePool) external onlyOwner returns (bool) { require(_feePool != address(0)); feePool = HkmtFeePool(_feePool); return true; } /** * @dev Change the fee pool to a specified address. Transfer the balance of current fee pool to the new one. * @param _newFeePool The new FeePool contract address */ function changeFeePool(address _newFeePool) external onlyOwner returns (bool) { require(address(feePool) != address(0), "no FeePool set yet"); require(_newFeePool != address(0)); require(_balances[_newFeePool] == 0); uint256 currentPoolBalance = _balances[address(feePool)]; delete _balances[address(feePool)]; feePool = HkmtFeePool(_newFeePool); _balances[_newFeePool] = currentPoolBalance; return true; } // Fee pool transfer doesn't pay fee again. function feePoolTransfer(address _to, uint256 _value) external onlySender(address(feePool)) returns (bool) { require(_to != address(0)); require(_value <= _balances[msg.sender]); _transfer(msg.sender, _to, _value); return true; } /** * @dev Transfer tokens to a specified address after diverting a fee to a central account. * @param _to The receiving address. * @param _value The number of tokens to transfer. */ function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= _balances[msg.sender]); uint256 fee = _value.mul(txFeePerMillion).div(10**6); uint256 taxedValue = _value.sub(fee); // SafeMath.sub will throw if there is not enough balance. _transfer(msg.sender, _to, taxedValue); if (address(feePool) != address(0)) { _balances[address(feePool)] = _balances[address(feePool)].add(fee); emit Transfer(msg.sender, address(feePool), fee); if (msg.sender != owner()) { feePool.notifyTx(msg.sender, _value); } } return true; } /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amount of tokens to be transferred */ function transferFrom( address _from, address _to, uint256 _value ) public returns (bool) { require(_to != address(0)); require(_value <= _balances[_from]); require(_value <= _allowances[_from][msg.sender]); uint256 fee = _value.mul(txFeePerMillion).div(10**6); uint256 taxedValue = _value.sub(fee); _balances[_from] = _balances[_from].sub(_value); _balances[_to] = _balances[_to].add(taxedValue); _allowances[_from][msg.sender] = _allowances[_from][msg.sender].sub(_value); emit Transfer(_from, _to, _value); if (address(feePool) != address(0)) { _balances[address(feePool)] = _balances[address(feePool)].add(fee); emit Transfer(msg.sender, address(feePool), fee); feePool.notifyTx(msg.sender, _value); } return true; } function mint(address account, uint256 amount) public onlyMinter returns (bool) { _mint(account, amount); return true; } /** * @dev Destoys `amount` tokens from the caller. * * See `ERC20._burn`. */ function burn(uint256 amount) public { _burn(msg.sender, amount); } /** * @dev See `ERC20._burnFrom`. */ function burnFrom(address account, uint256 amount) public { _burnFrom(account, amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"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":"account","type":"address"}],"name":"MinterAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"MinterRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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"},{"constant":true,"inputs":[],"name":"INITIAL_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_newFeePool","type":"address"}],"name":"changeFeePool","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"feePool","outputs":[{"internalType":"contract HkmtFeePool","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"feePoolTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_feePool","type":"address"}],"name":"setFeePool","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setTxFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"txFeePerMillion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526000600855660e35fa931a00006009553480156200002157600080fd5b50604080518082018252601181527024259026b7b732ba30b93c902a37b5b2b760791b6020808301919091528251808401845260048152631212d35560e21b91810191909152600080546001600160a01b03191633178082559351929391926006926001600160a01b031691907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3620000c7336001600160e01b036200012716565b8251620000dc9060029060208601906200026f565b508151620000f29060039060208501906200026f565b506004805460ff191660ff92909216919091179055505060095460078190553360009081526005602052604090205562000314565b620001428160016200017960201b620017371790919060201c565b6040516001600160a01b038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b6200018e82826001600160e01b036200020616565b15620001e1576040805162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b60006001600160a01b0382166200024f5760405162461bcd60e51b815260040180806020018281038252602281526020018062001d216022913960400191505060405180910390fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620002b257805160ff1916838001178555620002e2565b82800160010185558215620002e2579182015b82811115620002e2578251825591602001919060010190620002c5565b50620002f0929150620002f4565b5090565b6200031191905b80821115620002f05760008155600101620002fb565b90565b6119fd80620003246000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c8063825b31b8116100f9578063a9059cbb11610097578063d367e2aa11610071578063d367e2aa1461050f578063dd62ed3e14610535578063f05d16f714610563578063f2fde38b14610580576101c4565b8063a9059cbb146104b5578063aa271e1a146104e1578063ae2e933b14610507576101c4565b806395d89b41116100d357806395d89b4114610453578063983b2d561461045b5780639865027514610481578063a457c2d714610489576101c4565b8063825b31b8146103fb5780638da5cb5b146104275780638f32d59b1461044b576101c4565b806339509351116101665780635f8c7fd8116101405780635f8c7fd81461039957806370a08231146103a1578063715018a6146103c757806379cc6790146103cf576101c4565b8063395093511461032257806340c10f191461034e57806342966c681461037a576101c4565b806319db2228116101a257806319db2228146102a057806323b872dd146102c65780632ff2e9dc146102fc578063313ce56714610304576101c4565b806306fdde03146101c9578063095ea7b31461024657806318160ddd14610286575b600080fd5b6101d16105a6565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561020b5781810151838201526020016101f3565b50505050905090810190601f1680156102385780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102726004803603604081101561025c57600080fd5b506001600160a01b038135169060200135610639565b604080519115158252519081900360200190f35b61028e610650565b60408051918252519081900360200190f35b610272600480360360208110156102b657600080fd5b50356001600160a01b0316610656565b610272600480360360608110156102dc57600080fd5b506001600160a01b038135811691602081013590911690604001356106d7565b61028e610988565b61030c61098e565b6040805160ff9092168252519081900360200190f35b6102726004803603604081101561033857600080fd5b506001600160a01b038135169060200135610997565b6102726004803603604081101561036457600080fd5b506001600160a01b0381351690602001356109d8565b6103976004803603602081101561039057600080fd5b5035610a28565b005b61028e610a35565b61028e600480360360208110156103b757600080fd5b50356001600160a01b0316610a3b565b610397610a56565b610397600480360360408110156103e557600080fd5b506001600160a01b038135169060200135610ae7565b6102726004803603604081101561041157600080fd5b506001600160a01b038135169060200135610af5565b61042f610b54565b604080516001600160a01b039092168252519081900360200190f35b610272610b63565b6101d1610b74565b6103976004803603602081101561047157600080fd5b50356001600160a01b0316610bd5565b610397610c22565b6102726004803603604081101561049f57600080fd5b506001600160a01b038135169060200135610c2d565b610272600480360360408110156104cb57600080fd5b506001600160a01b038135169060200135610c69565b610272600480360360208110156104f757600080fd5b50356001600160a01b0316610e0d565b61042f610e20565b6102726004803603602081101561052557600080fd5b50356001600160a01b0316610e2f565b61028e6004803603604081101561054b57600080fd5b506001600160a01b0381358116916020013516610f46565b6102726004803603602081101561057957600080fd5b5035610f71565b6103976004803603602081101561059657600080fd5b50356001600160a01b0316610fc3565b60028054604080516020601f600019610100600187161502019094168590049384018190048102820181019092528281526060939092909183018282801561062f5780601f106106045761010080835404028352916020019161062f565b820191906000526020600020905b81548152906001019060200180831161061257829003601f168201915b5050505050905090565b6000610646338484611013565b5060015b92915050565b60075490565b6000610660610b63565b61069f576040805162461bcd60e51b815260206004820181905260248201526000805160206118fd833981519152604482015290519081900360640190fd5b6001600160a01b0382166106b257600080fd5b50600a80546001600160a01b0383166001600160a01b03199091161790556001919050565b60006001600160a01b0383166106ec57600080fd5b6001600160a01b03841660009081526005602052604090205482111561071157600080fd5b6001600160a01b038416600090815260066020908152604080832033845290915290205482111561074157600080fd5b600061076b620f424061075f600854866110ff90919063ffffffff16565b9063ffffffff61115f16565b9050600061077f848363ffffffff6111c916565b6001600160a01b0387166000908152600560205260409020549091506107ab908563ffffffff6111c916565b6001600160a01b0380881660009081526005602052604080822093909355908716815220546107e0908263ffffffff61122616565b6001600160a01b038087166000908152600560209081526040808320949094559189168152600682528281203382529091522054610824908563ffffffff6111c916565b6001600160a01b038088166000818152600660209081526040808320338452825291829020949094558051888152905192891693919260008051602061193f833981519152929181900390910190a3600a546001600160a01b03161561097c57600a546001600160a01b03166000908152600560205260409020546108af908363ffffffff61122616565b600a80546001600160a01b0390811660009081526005602090815260409182902094909455915482518681529251911692339260008051602061193f833981519152929081900390910190a3600a5460408051636a15fe4960e01b81523360048201526024810187905290516001600160a01b0390921691636a15fe49916044808201926020929091908290030181600087803b15801561094f57600080fd5b505af1158015610963573d6000803e3d6000fd5b505050506040513d602081101561097957600080fd5b50505b50600195945050505050565b60095481565b60045460ff1690565b3360008181526006602090815260408083206001600160a01b038716845290915281205490916106469185906109d3908663ffffffff61122616565b611013565b60006109e333610e0d565b610a1e5760405162461bcd60e51b815260040180806020018281038252603081526020018061188b6030913960400191505060405180910390fd5b6106468383611280565b610a323382611360565b50565b60085481565b6001600160a01b031660009081526005602052604090205490565b610a5e610b63565b610a9d576040805162461bcd60e51b815260206004820181905260248201526000805160206118fd833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b610af18282611429565b5050565b600a546000906001600160a01b0316338114610b1057600080fd5b6001600160a01b038416610b2357600080fd5b33600090815260056020526040902054831115610b3f57600080fd5b610b4a33858561146e565b5060019392505050565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b60038054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561062f5780601f106106045761010080835404028352916020019161062f565b610bde33610e0d565b610c195760405162461bcd60e51b815260040180806020018281038252603081526020018061188b6030913960400191505060405180910390fd5b610a32816115a0565b610c2b336115e8565b565b3360008181526006602090815260408083206001600160a01b038716845290915281205490916106469185906109d3908663ffffffff6111c916565b60006001600160a01b038316610c7e57600080fd5b33600090815260056020526040902054821115610c9a57600080fd5b6000610cb8620f424061075f600854866110ff90919063ffffffff16565b90506000610ccc848363ffffffff6111c916565b9050610cd933868361146e565b600a546001600160a01b031615610e0257600a546001600160a01b0316600090815260056020526040902054610d15908363ffffffff61122616565b600a80546001600160a01b0390811660009081526005602090815260409182902094909455915482518681529251911692339260008051602061193f833981519152929081900390910190a3610d69610b54565b6001600160a01b0316336001600160a01b031614610e0257600a5460408051636a15fe4960e01b81523360048201526024810187905290516001600160a01b0390921691636a15fe49916044808201926020929091908290030181600087803b158015610dd557600080fd5b505af1158015610de9573d6000803e3d6000fd5b505050506040513d6020811015610dff57600080fd5b50505b506001949350505050565b600061064a60018363ffffffff61163016565b600a546001600160a01b031681565b6000610e39610b63565b610e78576040805162461bcd60e51b815260206004820181905260248201526000805160206118fd833981519152604482015290519081900360640190fd5b600a546001600160a01b0316610eca576040805162461bcd60e51b81526020600482015260126024820152711b9bc8119959541bdbdb081cd95d081e595d60721b604482015290519081900360640190fd5b6001600160a01b038216610edd57600080fd5b6001600160a01b03821660009081526005602052604090205415610f0057600080fd5b50600a80546001600160a01b0390811660009081526005602052604080822080549083905584546001600160a01b03191695909316948517909355928352912055600190565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b6000610f7b610b63565b610fba576040805162461bcd60e51b815260206004820181905260248201526000805160206118fd833981519152604482015290519081900360640190fd5b50600855600190565b610fcb610b63565b61100a576040805162461bcd60e51b815260206004820181905260248201526000805160206118fd833981519152604482015290519081900360640190fd5b610a3281611697565b6001600160a01b0383166110585760405162461bcd60e51b81526004018080602001828103825260248152602001806119a56024913960400191505060405180910390fd5b6001600160a01b03821661109d5760405162461bcd60e51b81526004018080602001828103825260228152602001806118696022913960400191505060405180910390fd5b6001600160a01b03808416600081815260066020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b60008261110e5750600061064a565b8282028284828161111b57fe5b04146111585760405162461bcd60e51b81526004018080602001828103825260218152602001806118dc6021913960400191505060405180910390fd5b9392505050565b60008082116111b5576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b60008284816111c057fe5b04949350505050565b600082821115611220576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600082820183811015611158576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6001600160a01b0382166112db576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6007546112ee908263ffffffff61122616565b6007556001600160a01b03821660009081526005602052604090205461131a908263ffffffff61122616565b6001600160a01b038316600081815260056020908152604080832094909455835185815293519293919260008051602061193f8339815191529281900390910190a35050565b6001600160a01b0382166113a55760405162461bcd60e51b815260040180806020018281038252602181526020018061195f6021913960400191505060405180910390fd5b6007546113b8908263ffffffff6111c916565b6007556001600160a01b0382166000908152600560205260409020546113e4908263ffffffff6111c916565b6001600160a01b03831660008181526005602090815260408083209490945583518581529351919360008051602061193f833981519152929081900390910190a35050565b6114338282611360565b6001600160a01b038216600090815260066020908152604080832033808552925290912054610af19184916109d3908563ffffffff6111c916565b6001600160a01b0383166114b35760405162461bcd60e51b81526004018080602001828103825260258152602001806119806025913960400191505060405180910390fd5b6001600160a01b0382166114f85760405162461bcd60e51b81526004018080602001828103825260238152602001806118206023913960400191505060405180910390fd5b6001600160a01b038316600090815260056020526040902054611521908263ffffffff6111c916565b6001600160a01b038085166000908152600560205260408082209390935590841681522054611556908263ffffffff61122616565b6001600160a01b03808416600081815260056020908152604091829020949094558051858152905191939287169260008051602061193f83398151915292918290030190a3505050565b6115b160018263ffffffff61173716565b6040516001600160a01b038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b6115f960018263ffffffff6117b816565b6040516001600160a01b038216907fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669290600090a250565b60006001600160a01b0382166116775760405162461bcd60e51b815260040180806020018281038252602281526020018061191d6022913960400191505060405180910390fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b6001600160a01b0381166116dc5760405162461bcd60e51b81526004018080602001828103825260268152602001806118436026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6117418282611630565b15611793576040805162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b6117c28282611630565b6117fd5760405162461bcd60e51b81526004018080602001828103825260218152602001806118bb6021913960400191505060405180910390fd5b6001600160a01b0316600090815260209190915260409020805460ff1916905556fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573734d696e746572526f6c653a2063616c6c657220646f6573206e6f74206861766520746865204d696e74657220726f6c65526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c65536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572526f6c65733a206163636f756e7420697320746865207a65726f2061646472657373ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373a265627a7a72315820df4a841a69cac45d168096af4d7f6df6c3205a5faefe872f12721aba3e3c4e9364736f6c63430005110032526f6c65733a206163636f756e7420697320746865207a65726f2061646472657373
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101c45760003560e01c8063825b31b8116100f9578063a9059cbb11610097578063d367e2aa11610071578063d367e2aa1461050f578063dd62ed3e14610535578063f05d16f714610563578063f2fde38b14610580576101c4565b8063a9059cbb146104b5578063aa271e1a146104e1578063ae2e933b14610507576101c4565b806395d89b41116100d357806395d89b4114610453578063983b2d561461045b5780639865027514610481578063a457c2d714610489576101c4565b8063825b31b8146103fb5780638da5cb5b146104275780638f32d59b1461044b576101c4565b806339509351116101665780635f8c7fd8116101405780635f8c7fd81461039957806370a08231146103a1578063715018a6146103c757806379cc6790146103cf576101c4565b8063395093511461032257806340c10f191461034e57806342966c681461037a576101c4565b806319db2228116101a257806319db2228146102a057806323b872dd146102c65780632ff2e9dc146102fc578063313ce56714610304576101c4565b806306fdde03146101c9578063095ea7b31461024657806318160ddd14610286575b600080fd5b6101d16105a6565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561020b5781810151838201526020016101f3565b50505050905090810190601f1680156102385780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102726004803603604081101561025c57600080fd5b506001600160a01b038135169060200135610639565b604080519115158252519081900360200190f35b61028e610650565b60408051918252519081900360200190f35b610272600480360360208110156102b657600080fd5b50356001600160a01b0316610656565b610272600480360360608110156102dc57600080fd5b506001600160a01b038135811691602081013590911690604001356106d7565b61028e610988565b61030c61098e565b6040805160ff9092168252519081900360200190f35b6102726004803603604081101561033857600080fd5b506001600160a01b038135169060200135610997565b6102726004803603604081101561036457600080fd5b506001600160a01b0381351690602001356109d8565b6103976004803603602081101561039057600080fd5b5035610a28565b005b61028e610a35565b61028e600480360360208110156103b757600080fd5b50356001600160a01b0316610a3b565b610397610a56565b610397600480360360408110156103e557600080fd5b506001600160a01b038135169060200135610ae7565b6102726004803603604081101561041157600080fd5b506001600160a01b038135169060200135610af5565b61042f610b54565b604080516001600160a01b039092168252519081900360200190f35b610272610b63565b6101d1610b74565b6103976004803603602081101561047157600080fd5b50356001600160a01b0316610bd5565b610397610c22565b6102726004803603604081101561049f57600080fd5b506001600160a01b038135169060200135610c2d565b610272600480360360408110156104cb57600080fd5b506001600160a01b038135169060200135610c69565b610272600480360360208110156104f757600080fd5b50356001600160a01b0316610e0d565b61042f610e20565b6102726004803603602081101561052557600080fd5b50356001600160a01b0316610e2f565b61028e6004803603604081101561054b57600080fd5b506001600160a01b0381358116916020013516610f46565b6102726004803603602081101561057957600080fd5b5035610f71565b6103976004803603602081101561059657600080fd5b50356001600160a01b0316610fc3565b60028054604080516020601f600019610100600187161502019094168590049384018190048102820181019092528281526060939092909183018282801561062f5780601f106106045761010080835404028352916020019161062f565b820191906000526020600020905b81548152906001019060200180831161061257829003601f168201915b5050505050905090565b6000610646338484611013565b5060015b92915050565b60075490565b6000610660610b63565b61069f576040805162461bcd60e51b815260206004820181905260248201526000805160206118fd833981519152604482015290519081900360640190fd5b6001600160a01b0382166106b257600080fd5b50600a80546001600160a01b0383166001600160a01b03199091161790556001919050565b60006001600160a01b0383166106ec57600080fd5b6001600160a01b03841660009081526005602052604090205482111561071157600080fd5b6001600160a01b038416600090815260066020908152604080832033845290915290205482111561074157600080fd5b600061076b620f424061075f600854866110ff90919063ffffffff16565b9063ffffffff61115f16565b9050600061077f848363ffffffff6111c916565b6001600160a01b0387166000908152600560205260409020549091506107ab908563ffffffff6111c916565b6001600160a01b0380881660009081526005602052604080822093909355908716815220546107e0908263ffffffff61122616565b6001600160a01b038087166000908152600560209081526040808320949094559189168152600682528281203382529091522054610824908563ffffffff6111c916565b6001600160a01b038088166000818152600660209081526040808320338452825291829020949094558051888152905192891693919260008051602061193f833981519152929181900390910190a3600a546001600160a01b03161561097c57600a546001600160a01b03166000908152600560205260409020546108af908363ffffffff61122616565b600a80546001600160a01b0390811660009081526005602090815260409182902094909455915482518681529251911692339260008051602061193f833981519152929081900390910190a3600a5460408051636a15fe4960e01b81523360048201526024810187905290516001600160a01b0390921691636a15fe49916044808201926020929091908290030181600087803b15801561094f57600080fd5b505af1158015610963573d6000803e3d6000fd5b505050506040513d602081101561097957600080fd5b50505b50600195945050505050565b60095481565b60045460ff1690565b3360008181526006602090815260408083206001600160a01b038716845290915281205490916106469185906109d3908663ffffffff61122616565b611013565b60006109e333610e0d565b610a1e5760405162461bcd60e51b815260040180806020018281038252603081526020018061188b6030913960400191505060405180910390fd5b6106468383611280565b610a323382611360565b50565b60085481565b6001600160a01b031660009081526005602052604090205490565b610a5e610b63565b610a9d576040805162461bcd60e51b815260206004820181905260248201526000805160206118fd833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b610af18282611429565b5050565b600a546000906001600160a01b0316338114610b1057600080fd5b6001600160a01b038416610b2357600080fd5b33600090815260056020526040902054831115610b3f57600080fd5b610b4a33858561146e565b5060019392505050565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b60038054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561062f5780601f106106045761010080835404028352916020019161062f565b610bde33610e0d565b610c195760405162461bcd60e51b815260040180806020018281038252603081526020018061188b6030913960400191505060405180910390fd5b610a32816115a0565b610c2b336115e8565b565b3360008181526006602090815260408083206001600160a01b038716845290915281205490916106469185906109d3908663ffffffff6111c916565b60006001600160a01b038316610c7e57600080fd5b33600090815260056020526040902054821115610c9a57600080fd5b6000610cb8620f424061075f600854866110ff90919063ffffffff16565b90506000610ccc848363ffffffff6111c916565b9050610cd933868361146e565b600a546001600160a01b031615610e0257600a546001600160a01b0316600090815260056020526040902054610d15908363ffffffff61122616565b600a80546001600160a01b0390811660009081526005602090815260409182902094909455915482518681529251911692339260008051602061193f833981519152929081900390910190a3610d69610b54565b6001600160a01b0316336001600160a01b031614610e0257600a5460408051636a15fe4960e01b81523360048201526024810187905290516001600160a01b0390921691636a15fe49916044808201926020929091908290030181600087803b158015610dd557600080fd5b505af1158015610de9573d6000803e3d6000fd5b505050506040513d6020811015610dff57600080fd5b50505b506001949350505050565b600061064a60018363ffffffff61163016565b600a546001600160a01b031681565b6000610e39610b63565b610e78576040805162461bcd60e51b815260206004820181905260248201526000805160206118fd833981519152604482015290519081900360640190fd5b600a546001600160a01b0316610eca576040805162461bcd60e51b81526020600482015260126024820152711b9bc8119959541bdbdb081cd95d081e595d60721b604482015290519081900360640190fd5b6001600160a01b038216610edd57600080fd5b6001600160a01b03821660009081526005602052604090205415610f0057600080fd5b50600a80546001600160a01b0390811660009081526005602052604080822080549083905584546001600160a01b03191695909316948517909355928352912055600190565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b6000610f7b610b63565b610fba576040805162461bcd60e51b815260206004820181905260248201526000805160206118fd833981519152604482015290519081900360640190fd5b50600855600190565b610fcb610b63565b61100a576040805162461bcd60e51b815260206004820181905260248201526000805160206118fd833981519152604482015290519081900360640190fd5b610a3281611697565b6001600160a01b0383166110585760405162461bcd60e51b81526004018080602001828103825260248152602001806119a56024913960400191505060405180910390fd5b6001600160a01b03821661109d5760405162461bcd60e51b81526004018080602001828103825260228152602001806118696022913960400191505060405180910390fd5b6001600160a01b03808416600081815260066020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b60008261110e5750600061064a565b8282028284828161111b57fe5b04146111585760405162461bcd60e51b81526004018080602001828103825260218152602001806118dc6021913960400191505060405180910390fd5b9392505050565b60008082116111b5576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b60008284816111c057fe5b04949350505050565b600082821115611220576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600082820183811015611158576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6001600160a01b0382166112db576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6007546112ee908263ffffffff61122616565b6007556001600160a01b03821660009081526005602052604090205461131a908263ffffffff61122616565b6001600160a01b038316600081815260056020908152604080832094909455835185815293519293919260008051602061193f8339815191529281900390910190a35050565b6001600160a01b0382166113a55760405162461bcd60e51b815260040180806020018281038252602181526020018061195f6021913960400191505060405180910390fd5b6007546113b8908263ffffffff6111c916565b6007556001600160a01b0382166000908152600560205260409020546113e4908263ffffffff6111c916565b6001600160a01b03831660008181526005602090815260408083209490945583518581529351919360008051602061193f833981519152929081900390910190a35050565b6114338282611360565b6001600160a01b038216600090815260066020908152604080832033808552925290912054610af19184916109d3908563ffffffff6111c916565b6001600160a01b0383166114b35760405162461bcd60e51b81526004018080602001828103825260258152602001806119806025913960400191505060405180910390fd5b6001600160a01b0382166114f85760405162461bcd60e51b81526004018080602001828103825260238152602001806118206023913960400191505060405180910390fd5b6001600160a01b038316600090815260056020526040902054611521908263ffffffff6111c916565b6001600160a01b038085166000908152600560205260408082209390935590841681522054611556908263ffffffff61122616565b6001600160a01b03808416600081815260056020908152604091829020949094558051858152905191939287169260008051602061193f83398151915292918290030190a3505050565b6115b160018263ffffffff61173716565b6040516001600160a01b038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b6115f960018263ffffffff6117b816565b6040516001600160a01b038216907fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669290600090a250565b60006001600160a01b0382166116775760405162461bcd60e51b815260040180806020018281038252602281526020018061191d6022913960400191505060405180910390fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b6001600160a01b0381166116dc5760405162461bcd60e51b81526004018080602001828103825260268152602001806118436026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6117418282611630565b15611793576040805162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b6117c28282611630565b6117fd5760405162461bcd60e51b81526004018080602001828103825260218152602001806118bb6021913960400191505060405180910390fd5b6001600160a01b0316600090815260209190915260409020805460ff1916905556fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573734d696e746572526f6c653a2063616c6c657220646f6573206e6f74206861766520746865204d696e74657220726f6c65526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c65536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572526f6c65733a206163636f756e7420697320746865207a65726f2061646472657373ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373a265627a7a72315820df4a841a69cac45d168096af4d7f6df6c3205a5faefe872f12721aba3e3c4e9364736f6c63430005110032
Deployed Bytecode Sourcemap
22234:10334:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22234:10334:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9414:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;9414:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23171:148;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;23171:148:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;22563:91;;;:::i;:::-;;;;;;;;;;;;;;;;28654:188;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28654:188:0;-1:-1:-1;;;;;28654:188:0;;:::i;31104:949::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;31104:949:0;;;;;;;;;;;;;;;;;:::i;28023:50::-;;;:::i;10272:83::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23728:206;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;23728:206:0;;;;;;;;:::i;32061:143::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;32061:143:0;;;;;;;;:::i;32319:81::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32319:81:0;;:::i;:::-;;27985:31;;;:::i;22717:110::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22717:110:0;-1:-1:-1;;;;;22717:110:0;;:::i;1654:140::-;;;:::i;32462:103::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;32462:103:0;;;;;;;;:::i;29585:272::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;29585:272:0;;;;;;;;:::i;843:79::-;;;:::i;:::-;;;;-1:-1:-1;;;;;843:79:0;;;;;;;;;;;;;;1209:92;;;:::i;9616:87::-;;;:::i;10894:92::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10894:92:0;-1:-1:-1;;;;;10894:92:0;;:::i;10994:77::-;;;:::i;24437:216::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;24437:216:0;;;;;;;;:::i;30075:735::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;30075:735:0;;;;;;;;:::i;10777:109::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10777:109:0;-1:-1:-1;;;;;10777:109:0;;:::i;28080:26::-;;;:::i;29041:487::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29041:487:0;-1:-1:-1;;;;;29041:487:0;;:::i;22890:134::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;22890:134:0;;;;;;;;;;:::i;28393:130::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28393:130:0;;:::i;1949:109::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1949:109:0;-1:-1:-1;;;;;1949:109:0;;:::i;9414:83::-;9484:5;9477:12;;;;;;;-1:-1:-1;;9477:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9451:13;;9477:12;;9484:5;;9477:12;;9484:5;9477:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9414:83;:::o;23171:148::-;23236:4;23253:36;23262:10;23274:7;23283:5;23253:8;:36::i;:::-;-1:-1:-1;23307:4:0;23171:148;;;;;:::o;22563:91::-;22634:12;;22563:91;:::o;28654:188::-;28720:4;1055:9;:7;:9::i;:::-;1047:54;;;;;-1:-1:-1;;;1047:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1047:54:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28745:22:0;;28737:31;;;;;;-1:-1:-1;28781:7:0;:31;;-1:-1:-1;;;;;28781:31:0;;-1:-1:-1;;;;;;28781:31:0;;;;;;;28654:188;;;:::o;31104:949::-;31238:4;-1:-1:-1;;;;;31268:17:0;;31260:26;;;;;;-1:-1:-1;;;;;31315:16:0;;;;;;:9;:16;;;;;;31305:26;;;31297:35;;;;;;-1:-1:-1;;;;;31361:18:0;;;;;;:11;:18;;;;;;;;31380:10;31361:30;;;;;;;;31351:40;;;31343:49;;;;;;31405:11;31419:38;31451:5;31419:27;31430:15;;31419:6;:10;;:27;;;;:::i;:::-;:31;:38;:31;:38;:::i;:::-;31405:52;-1:-1:-1;31468:18:0;31489:15;:6;31405:52;31489:15;:10;:15;:::i;:::-;-1:-1:-1;;;;;31536:16:0;;;;;;:9;:16;;;;;;31468:36;;-1:-1:-1;31536:28:0;;31557:6;31536:28;:20;:28;:::i;:::-;-1:-1:-1;;;;;31517:16:0;;;;;;;:9;:16;;;;;;:47;;;;31592:14;;;;;;;:30;;31611:10;31592:30;:18;:30;:::i;:::-;-1:-1:-1;;;;;31575:14:0;;;;;;;:9;:14;;;;;;;;:47;;;;31666:18;;;;;:11;:18;;;;;31685:10;31666:30;;;;;;;:42;;31701:6;31666:42;:34;:42;:::i;:::-;-1:-1:-1;;;;;31633:18:0;;;;;;;:11;:18;;;;;;;;31652:10;31633:30;;;;;;;;:75;;;;31724:28;;;;;;;;;;;31633:18;;-1:-1:-1;;;;;;;;;;;31724:28:0;;;;;;;;;;31785:7;;-1:-1:-1;;;;;31785:7:0;31777:30;31773:251;;31872:7;;-1:-1:-1;;;;;31872:7:0;31854:27;;;;:9;:27;;;;;;:36;;31886:3;31854:36;:31;:36;:::i;:::-;31842:7;;;-1:-1:-1;;;;;31842:7:0;;;31824:27;;;;:9;:27;;;;;;;;;:66;;;;31939:7;;31910:43;;;;;;;31939:7;;;31919:10;;-1:-1:-1;;;;;;;;;;;31910:43:0;;;;;;;;;;31976:7;;:36;;;-1:-1:-1;;;31976:36:0;;31993:10;31976:36;;;;;;;;;;;;-1:-1:-1;;;;;31976:7:0;;;;:16;;:36;;;;;;;;;;;;;;;:7;;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;31976:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31976:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;31773:251:0;-1:-1:-1;32041:4:0;;31104:949;-1:-1:-1;;;;;31104:949:0:o;28023:50::-;;;;:::o;10272:83::-;10338:9;;;;10272:83;:::o;23728:206::-;23834:10;23808:4;23855:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;23855:32:0;;;;;;;;;;23808:4;;23825:79;;23846:7;;23855:48;;23892:10;23855:48;:36;:48;:::i;:::-;23825:8;:79::i;32061:143::-;32135:4;10676:20;10685:10;10676:8;:20::i;:::-;10668:81;;;;-1:-1:-1;;;10668:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32152:22;32158:7;32167:6;32152:5;:22::i;32319:81::-;32367:25;32373:10;32385:6;32367:5;:25::i;:::-;32319:81;:::o;27985:31::-;;;;:::o;22717:110::-;-1:-1:-1;;;;;22801:18:0;22774:7;22801:18;;;:9;:18;;;;;;;22717:110::o;1654:140::-;1055:9;:7;:9::i;:::-;1047:54;;;;;-1:-1:-1;;;1047:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1047:54:0;;;;;;;;;;;;;;;1753:1;1737:6;;1716:40;;-1:-1:-1;;;;;1737:6:0;;;;1716:40;;1753:1;;1716:40;1784:1;1767:19;;-1:-1:-1;;;;;;1767:19:0;;;1654:140::o;32462:103::-;32531:26;32541:7;32550:6;32531:9;:26::i;:::-;32462:103;;:::o;29585:272::-;29667:7;;29686:4;;-1:-1:-1;;;;;29667:7:0;28343:10;:21;;28335:30;;;;;;-1:-1:-1;;;;;29711:17:0;;29703:26;;;;;;29768:10;29758:21;;;;:9;:21;;;;;;29748:31;;;29740:40;;;;;;29793:34;29803:10;29815:3;29820:6;29793:9;:34::i;:::-;-1:-1:-1;29845:4:0;;29585:272;-1:-1:-1;;;29585:272:0:o;843:79::-;881:7;908:6;-1:-1:-1;;;;;908:6:0;843:79;:::o;1209:92::-;1249:4;1287:6;-1:-1:-1;;;;;1287:6:0;1273:10;:20;;1209:92::o;9616:87::-;9688:7;9681:14;;;;;;;;-1:-1:-1;;9681:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9655:13;;9681:14;;9688:7;;9681:14;;9688:7;9681:14;;;;;;;;;;;;;;;;;;;;;;;;10894:92;10676:20;10685:10;10676:8;:20::i;:::-;10668:81;;;;-1:-1:-1;;;10668:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10959:19;10970:7;10959:10;:19::i;10994:77::-;11038:25;11052:10;11038:13;:25::i;:::-;10994:77::o;24437:216::-;24548:10;24522:4;24569:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;24569:32:0;;;;;;;;;;24522:4;;24539:84;;24560:7;;24569:53;;24606:15;24569:53;:36;:53;:::i;30075:735::-;30138:4;-1:-1:-1;;;;;30163:17:0;;30155:26;;;;;;30220:10;30210:21;;;;:9;:21;;;;;;30200:31;;;30192:40;;;;;;30245:11;30259:38;30291:5;30259:27;30270:15;;30259:6;:10;;:27;;;;:::i;:38::-;30245:52;-1:-1:-1;30308:18:0;30329:15;:6;30245:52;30329:15;:10;:15;:::i;:::-;30308:36;;30425:38;30435:10;30447:3;30452:10;30425:9;:38::i;:::-;30488:7;;-1:-1:-1;;;;;30488:7:0;30480:30;30476:305;;30575:7;;-1:-1:-1;;;;;30575:7:0;30557:27;;;;:9;:27;;;;;;:36;;30589:3;30557:36;:31;:36;:::i;:::-;30545:7;;;-1:-1:-1;;;;;30545:7:0;;;30527:27;;;;:9;:27;;;;;;;;;:66;;;;30642:7;;30613:43;;;;;;;30642:7;;;30622:10;;-1:-1:-1;;;;;;;;;;;30613:43:0;;;;;;;;;;30689:7;:5;:7::i;:::-;-1:-1:-1;;;;;30675:21:0;:10;-1:-1:-1;;;;;30675:21:0;;30671:98;;30717:7;;:36;;;-1:-1:-1;;;30717:36:0;;30734:10;30717:36;;;;;;;;;;;;-1:-1:-1;;;;;30717:7:0;;;;:16;;:36;;;;;;;;;;;;;;;:7;;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;30717:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30717:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;30671:98:0;-1:-1:-1;30798:4:0;;30075:735;-1:-1:-1;;;;30075:735:0:o;10777:109::-;10833:4;10857:21;:8;10870:7;10857:21;:12;:21;:::i;28080:26::-;;;-1:-1:-1;;;;;28080:26:0;;:::o;29041:487::-;29113:4;1055:9;:7;:9::i;:::-;1047:54;;;;;-1:-1:-1;;;1047:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1047:54:0;;;;;;;;;;;;;;;29146:7;;-1:-1:-1;;;;;29146:7:0;29130:61;;;;;-1:-1:-1;;;29130:61:0;;;;;;;;;;;;-1:-1:-1;;;29130:61:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;29210:25:0;;29202:34;;;;;;-1:-1:-1;;;;;29255:22:0;;;;;;:9;:22;;;;;;:27;29247:36;;;;;;-1:-1:-1;29343:7:0;;;-1:-1:-1;;;;;29343:7:0;;;29296:26;29325:27;;;:9;:27;;;;;;;;29363:34;;;;29408;;-1:-1:-1;;;;;;29408:34:0;;;;;;;;;;;29453:22;;;;;:43;-1:-1:-1;;29041:487:0:o;22890:134::-;-1:-1:-1;;;;;22989:18:0;;;22962:7;22989:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;22890:134::o;28393:130::-;28452:4;1055:9;:7;:9::i;:::-;1047:54;;;;;-1:-1:-1;;;1047:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1047:54:0;;;;;;;;;;;;;;;-1:-1:-1;28469:15:0;:24;28511:4;;28393:130::o;1949:109::-;1055:9;:7;:9::i;:::-;1047:54;;;;;-1:-1:-1;;;1047:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1047:54:0;;;;;;;;;;;;;;;2022:28;2041:8;2022:18;:28::i;27239:335::-;-1:-1:-1;;;;;27332:19:0;;27324:68;;;;-1:-1:-1;;;27324:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27411:21:0;;27403:68;;;;-1:-1:-1;;;27403:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27484:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:35;;;27535:31;;;;;;;;;;;;;;;;;27239:335;;;:::o;4125:470::-;4183:7;4427:6;4423:47;;-1:-1:-1;4457:1:0;4450:8;;4423:47;4494:5;;;4498:1;4494;:5;:1;4518:5;;;;;:10;4510:56;;;;-1:-1:-1;;;4510:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4586:1;4125:470;-1:-1:-1;;;4125:470:0:o;5063:333::-;5121:7;5220:1;5216;:5;5208:44;;;;;-1:-1:-1;;;5208:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;5263:9;5279:1;5275;:5;;;;;;;5063:333;-1:-1:-1;;;;5063:333:0:o;3690:184::-;3748:7;3781:1;3776;:6;;3768:49;;;;;-1:-1:-1;;;3768:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3840:5:0;;;3690:184::o;3234:181::-;3292:7;3324:5;;;3348:6;;;;3340:46;;;;;-1:-1:-1;;;3340:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;25853:308;-1:-1:-1;;;;;25929:21:0;;25921:65;;;;;-1:-1:-1;;;25921:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;26014:12;;:24;;26031:6;26014:24;:16;:24;:::i;:::-;25999:12;:39;-1:-1:-1;;;;;26070:18:0;;;;;;:9;:18;;;;;;:30;;26093:6;26070:30;:22;:30;:::i;:::-;-1:-1:-1;;;;;26049:18:0;;;;;;:9;:18;;;;;;;;:51;;;;26116:37;;;;;;;26049:18;;;;-1:-1:-1;;;;;;;;;;;26116:37:0;;;;;;;;;25853:308;;:::o;26493:306::-;-1:-1:-1;;;;;26568:21:0;;26560:67;;;;-1:-1:-1;;;26560:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26655:12;;:23;;26672:5;26655:23;:16;:23;:::i;:::-;26640:12;:38;-1:-1:-1;;;;;26710:18:0;;;;;;:9;:18;;;;;;:29;;26733:5;26710:29;:22;:29;:::i;:::-;-1:-1:-1;;;;;26689:18:0;;;;;;:9;:18;;;;;;;;:50;;;;26755:36;;;;;;;26689:18;;-1:-1:-1;;;;;;;;;;;26755:36:0;;;;;;;;;;26493:306;;:::o;27759:188::-;27831:22;27837:7;27846:6;27831:5;:22::i;:::-;-1:-1:-1;;;;;27894:20:0;;;;;;:11;:20;;;;;;;;27882:10;27894:32;;;;;;;;;27864:75;;27873:7;;27894:44;;27931:6;27894:44;:36;:44;:::i;25143:429::-;-1:-1:-1;;;;;25241:20:0;;25233:70;;;;-1:-1:-1;;;25233:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25322:23:0;;25314:71;;;;-1:-1:-1;;;25314:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25418:17:0;;;;;;:9;:17;;;;;;:29;;25440:6;25418:29;:21;:29;:::i;:::-;-1:-1:-1;;;;;25398:17:0;;;;;;;:9;:17;;;;;;:49;;;;25481:20;;;;;;;:32;;25506:6;25481:32;:24;:32;:::i;:::-;-1:-1:-1;;;;;25458:20:0;;;;;;;:9;:20;;;;;;;;;:55;;;;25529:35;;;;;;;25458:20;;25529:35;;;;-1:-1:-1;;;;;;;;;;;25529:35:0;;;;;;;;25143:429;;;:::o;11079:122::-;11136:21;:8;11149:7;11136:21;:12;:21;:::i;:::-;11173:20;;-1:-1:-1;;;;;11173:20:0;;;;;;;;11079:122;:::o;11209:130::-;11269:24;:8;11285:7;11269:24;:15;:24;:::i;:::-;11309:22;;-1:-1:-1;;;;;11309:22:0;;;;;;;;11209:130;:::o;12129:203::-;12201:4;-1:-1:-1;;;;;12226:21:0;;12218:68;;;;-1:-1:-1;;;12218:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;12304:20:0;:11;:20;;;;;;;;;;;;;;;12129:203::o;2164:229::-;-1:-1:-1;;;;;2238:22:0;;2230:73;;;;-1:-1:-1;;;2230:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2340:6;;;2319:38;;-1:-1:-1;;;;;2319:38:0;;;;2340:6;;;2319:38;;;2368:6;:17;;-1:-1:-1;;;;;;2368:17:0;-1:-1:-1;;;;;2368:17:0;;;;;;;;;;2164:229::o;11593:178::-;11671:18;11675:4;11681:7;11671:3;:18::i;:::-;11670:19;11662:63;;;;;-1:-1:-1;;;11662:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11736:20:0;:11;:20;;;;;;;;;;;:27;;-1:-1:-1;;11736:27:0;11759:4;11736:27;;;11593:178::o;11851:183::-;11931:18;11935:4;11941:7;11931:3;:18::i;:::-;11923:64;;;;-1:-1:-1;;;11923:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11998:20:0;12021:5;11998:20;;;;;;;;;;;:28;;-1:-1:-1;;11998:28:0;;;11851:183::o
Swarm Source
bzzr://df4a841a69cac45d168096af4d7f6df6c3205a5faefe872f12721aba3e3c4e93
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.