Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
7,999,166,416 TG
Holders
735
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 6 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
TG
Compiler Version
v0.5.7+commit.6da8b019
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2019-07-26 */ pragma solidity ^0.5.7; /** * @title SafeMath * @dev Unsigned math operations with safety checks that revert on error. */ library SafeMath { /** * @dev Adds two unsigned integers, reverts on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } /** * @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Multiplies two unsigned integers, reverts on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two unsigned integers truncating the quotient, * reverts on division by zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { assert(b > 0); uint256 c = a / b; assert(a == b * c + a % b); return a / b; } /** * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo), * reverts when dividing by zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b != 0); return a % b; } } /** * @title ERC20 interface * @dev see https://eips.ethereum.org/EIPS/eip-20 */ interface IERC20{ function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function transfer(address to, uint256 value) external returns (bool); function transferFrom(address from, address to, uint256 value) external returns (bool); function approve(address spender, uint256 value) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @title Ownable */ contract Ownable { address internal _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract * to the sender account. */ constructor () internal { _owner = msg.sender; emit OwnershipTransferred(address(0), _owner); } /** * @return the address of the owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == _owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) external onlyOwner { require(newOwner != address(0)); _owner = newOwner; emit OwnershipTransferred(_owner, newOwner); } /** * @dev Rescue compatible ERC20 Token * * @param tokenAddr ERC20 The address of the ERC20 token contract * @param receiver The address of the receiver * @param amount uint256 */ function rescueTokens(address tokenAddr, address receiver, uint256 amount) external onlyOwner { IERC20 _token = IERC20(tokenAddr); require(receiver != address(0)); uint256 balance = _token.balanceOf(address(this)); require(balance >= amount); assert(_token.transfer(receiver, amount)); } /** * @dev Withdraw Ether */ function withdrawEther(address payable to, uint256 amount) external onlyOwner { require(to != address(0)); uint256 balance = address(this).balance; require(balance >= amount); to.transfer(amount); } } /** * @title Pausable * @dev Base contract which allows children to implement an emergency stop mechanism. */ contract Pausable is Ownable { bool private _paused; event Paused(address account); event Unpaused(address account); constructor () internal { _paused = false; } /** * @return Returns true if the contract is paused, false otherwise. */ function paused() public view returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. */ modifier whenNotPaused() { require(!_paused); _; } /** * @dev Modifier to make a function callable only when the contract is paused. */ modifier whenPaused() { require(_paused); _; } /** * @dev Called by a pauser to pause, triggers stopped state. */ function pause() external onlyOwner whenNotPaused { _paused = true; emit Paused(msg.sender); } /** * @dev Called by a pauser to unpause, returns to normal state. */ function unpause() external onlyOwner whenPaused { _paused = false; emit Unpaused(msg.sender); } } /** * @title TG Main Contract */ contract TG is Ownable, Pausable, IERC20 { using SafeMath for uint256; string private _name = "TG NETWORK"; string private _symbol = "TG"; uint8 private _decimals = 6; // 6 decimals uint256 private _cap = 35000000000000000; // 35 billion cap, that is 35000000000.000000 uint256 private _totalSupply; mapping (address => bool) private _minter; event Mint(address indexed to, uint256 value); event MinterChanged(address account, bool state); mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowed; bool private _allowWhitelistRegistration; mapping(address => address) private _referrer; mapping(address => uint256) private _refCount; event TGSaleWhitelistRegistered(address indexed addr, address indexed refAddr); event TGSaleWhitelistTransferred(address indexed previousAddr, address indexed _newAddr); event TGSaleWhitelistRegistrationEnabled(); event TGSaleWhitelistRegistrationDisabled(); uint256 private _whitelistRegistrationValue = 1001000000; // 1001 TG, 1001.000000 uint256[15] private _whitelistRefRewards = [ // 100% Reward 301000000, // 301 TG for Level.1 200000000, // 200 TG for Level.2 100000000, // 100 TG for Level.3 100000000, // 100 TG for Level.4 100000000, // 100 TG for Level.5 50000000, // 50 TG for Level.6 40000000, // 40 TG for Level.7 30000000, // 30 TG for Level.8 20000000, // 20 TG for Level.9 10000000, // 10 TG for Level.10 10000000, // 10 TG for Level.11 10000000, // 10 TG for Level.12 10000000, // 10 TG for Level.13 10000000, // 10 TG for Level.14 10000000 // 10 TG for Level.15 ]; event Donate(address indexed account, uint256 amount); event WithdrawToken(address indexed from, address indexed to, uint256 value); /** * @dev Constructor */ constructor() public { _minter[msg.sender] = true; _allowWhitelistRegistration = true; emit TGSaleWhitelistRegistrationEnabled(); _referrer[msg.sender] = msg.sender; emit TGSaleWhitelistRegistered(msg.sender, msg.sender); } /** * @dev donate */ function () external payable { emit Donate(msg.sender, msg.value); } /** * @return the name of the token. */ function name() public view returns (string memory) { return _name; } /** * @return the symbol of the token. */ function symbol() public view returns (string memory) { return _symbol; } /** * @return the number of decimals of the token. */ function decimals() public view returns (uint8) { return _decimals; } /** * @return the cap for the token minting. */ function cap() public view returns (uint256) { return _cap; } /** * @dev Total number of tokens in existence. */ function totalSupply() public view returns (uint256) { return _totalSupply; } /** * @dev Gets the balance of the specified address. * @param owner The address to query the balance of. * @return A uint256 representing the amount owned by the passed address. */ function balanceOf(address owner) public view returns (uint256) { return _balances[owner]; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param owner address The address which owns the funds. * @param spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance(address owner, address spender) public view returns (uint256) { return _allowed[owner][spender]; } /** * @dev Transfer token to a specified address. * @param to The address to transfer to. * @param value The amount to be transferred. */ function transfer(address to, uint256 value) public whenNotPaused returns (bool) { if (_allowWhitelistRegistration && value == _whitelistRegistrationValue && inWhitelist(to) && !inWhitelist(msg.sender) && isNotContract(msg.sender)) { // Register whitelist for TG-Sale _regWhitelist(msg.sender, to); return true; } else { // Normal Transfer _transfer(msg.sender, to, value); return true; } } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * @param spender The address which will spend the funds. * @param value The amount of tokens to be spent. */ function approve(address spender, uint256 value) public returns (bool) { _approve(msg.sender, spender, value); return true; } /** * @dev Increase the amount of tokens that an owner allowed to a spender. * @param spender The address which will spend the funds. * @param addedValue The amount of tokens to increase the allowance by. */ function increaseAllowance(address spender, uint256 addedValue) public returns (bool) { _approve(msg.sender, spender, _allowed[msg.sender][spender].add(addedValue)); return true; } /** * @dev Decrease the amount of tokens that an owner allowed to a spender. * @param spender The address which will spend the funds. * @param subtractedValue The amount of tokens to decrease the allowance by. */ function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) { _approve(msg.sender, spender, _allowed[msg.sender][spender].sub(subtractedValue)); return true; } /** * @dev Transfer 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 whenNotPaused returns (bool) { require(_allowed[from][msg.sender] >= value); _transfer(from, to, value); _approve(from, msg.sender, _allowed[from][msg.sender].sub(value)); return true; } /** * @dev Transfer token for a specified addresses. * @param from The address to transfer from. * @param to The address to transfer to. * @param value The amount to be transferred. */ function _transfer(address from, address to, uint256 value) internal { require(to != address(0)); _balances[from] = _balances[from].sub(value); _balances[to] = _balances[to].add(value); emit Transfer(from, to, value); } /** * @dev Approve an address to spend another addresses' tokens. * @param owner The address that owns the tokens. * @param spender The address that will spend the tokens. * @param value The number of tokens that can be spent. */ function _approve(address owner, address spender, uint256 value) internal { require(owner != address(0)); require(spender != address(0)); _allowed[owner][spender] = value; emit Approval(owner, spender, value); } /** * @dev Throws if called by account not a minter. */ modifier onlyMinter() { require(_minter[msg.sender]); _; } /** * @dev Returns true if the given account is minter. */ function isMinter(address account) public view returns (bool) { return _minter[account]; } /** * @dev Set a minter state */ function setMinterState(address account, bool state) external onlyOwner { _minter[account] = state; emit MinterChanged(account, state); } /** * @dev Function to mint tokens * @param to The address that will receive the minted tokens. * @param value The amount of tokens to mint. * @return A boolean that indicates if the operation was successful. */ function mint(address to, uint256 value) public onlyMinter returns (bool) { _mint(to, value); return true; } /** * @dev Internal function that mints an amount of the token and assigns it to an account. * @param account The account that will receive the created tokens. * @param value The amount that will be created. */ function _mint(address account, uint256 value) internal { require(_totalSupply.add(value) <= _cap); require(account != address(0)); _totalSupply = _totalSupply.add(value); _balances[account] = _balances[account].add(value); emit Mint(account, value); emit Transfer(address(0), account, value); } /** * @dev Throws if called by account not in whitelist. */ modifier onlyInWhitelist() { require(_referrer[msg.sender] != address(0)); _; } /** * @dev Returns true if the whitelist registration is allowed. */ function allowWhitelistRegistration() public view returns (bool) { return _allowWhitelistRegistration; } /** * @dev Returns true if the given account is in whitelist. */ function inWhitelist(address account) public view returns (bool) { return _referrer[account] != address(0); } /** * @dev Returns the referrer of a given account address */ function referrer(address account) public view returns (address) { return _referrer[account]; } /** * @dev Returns the referrals count of a given account address */ function refCount(address account) public view returns (uint256) { return _refCount[account]; } /** * @dev Disable TG-Sale whitelist registration. Unrecoverable! */ function disableTGSaleWhitelistRegistration() external onlyOwner { _allowWhitelistRegistration = false; emit TGSaleWhitelistRegistrationDisabled(); } /** * @dev Register whitelist for TG-Sale */ function _regWhitelist(address account, address refAccount) internal { _refCount[refAccount] = _refCount[refAccount].add(1); _referrer[account] = refAccount; emit TGSaleWhitelistRegistered(account, refAccount); // Whitelist Registration Referral Reward _transfer(msg.sender, address(this), _whitelistRegistrationValue); address cursor = account; uint256 remain = _whitelistRegistrationValue; uint256 _rebackToContract = 0; for(uint i = 0; i < _whitelistRefRewards.length; i++) { address receiver = _referrer[cursor]; if (cursor != receiver) { if (_refCount[receiver] > i) { _transfer(address(this), receiver, _whitelistRefRewards[i]); remain = remain.sub(_whitelistRefRewards[i]); } else { _rebackToContract = _rebackToContract.add(_whitelistRefRewards[i]); remain = remain.sub(_whitelistRefRewards[i]); continue; } } else { _rebackToContract = _rebackToContract.add(remain); break; } cursor = _referrer[cursor]; } if (_rebackToContract > 0) { _transfer(address(this), address(this), _rebackToContract); } } /** * @dev Transfer the whitelisted address to another. */ function transferWhitelist(address account) external onlyInWhitelist { require(isNotContract(account)); _refCount[account] = _refCount[msg.sender]; _refCount[msg.sender] = 0; _referrer[account] = _referrer[msg.sender]; _referrer[msg.sender] = address(0); emit TGSaleWhitelistTransferred(msg.sender, account); } /** * @dev Returns true if the given address is not a contract */ function isNotContract(address addr) internal view returns (bool) { uint size; assembly { size := extcodesize(addr) } return size == 0; } /** * @dev Calculator * Returns the reward amount if someone now registers the whitelist directly with the given whitelistedAccount. */ function calculateTheRewardOfDirectWhitelistRegistration(address whitelistedAccount) external view returns (uint256 reward) { if (!inWhitelist(whitelistedAccount)) { return 0; } address cursor = whitelistedAccount; uint256 remain = _whitelistRegistrationValue; for(uint i = 1; i < _whitelistRefRewards.length; i++) { address receiver = _referrer[cursor]; if (cursor != receiver) { if (_refCount[receiver] > i) { remain = remain.sub(_whitelistRefRewards[i]); } } else { reward = reward.add(remain); break; } cursor = _referrer[cursor]; } return reward; } /** * @dev owner can transfer the token store in this contract address. */ function withdrawToken(address _to, uint256 _value) public onlyOwner { require (_value > 0); require (_to != address(0)); _transfer(address(this), _to, _value); emit WithdrawToken(address(this), _to, _value); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"disableTGSaleWhitelistRegistration","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"referrer","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"cap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"allowWhitelistRegistration","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"mint","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"amount","type":"uint256"}],"name":"withdrawEther","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"whitelistedAccount","type":"address"}],"name":"calculateTheRewardOfDirectWhitelistRegistration","outputs":[{"name":"reward","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"transferWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"withdrawToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"},{"name":"state","type":"bool"}],"name":"setMinterState","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isMinter","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"tokenAddr","type":"address"},{"name":"receiver","type":"address"},{"name":"amount","type":"uint256"}],"name":"rescueTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"inWhitelist","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"refCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"account","type":"address"},{"indexed":false,"name":"state","type":"bool"}],"name":"MinterChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"},{"indexed":true,"name":"refAddr","type":"address"}],"name":"TGSaleWhitelistRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousAddr","type":"address"},{"indexed":true,"name":"_newAddr","type":"address"}],"name":"TGSaleWhitelistTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"TGSaleWhitelistRegistrationEnabled","type":"event"},{"anonymous":false,"inputs":[],"name":"TGSaleWhitelistRegistrationDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Donate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"WithdrawToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]
Contract Creation Code
60c0604052600a60808190527f5447204e4554574f524b0000000000000000000000000000000000000000000060a090815262000040916001919062000249565b506040805180820190915260028082527f5447000000000000000000000000000000000000000000000000000000000000602090920191825262000085918162000249565b506003805460ff19166006179055667c585087238000600455633baa0c40600c55604080516101e0810182526311f0e5408152630bebc20060208201526305f5e1009181018290526060810182905260808101919091526302faf08060a08201526302625a0060c08201526301c9c38060e08201526301312d006101008201526298968061012082018190526101408201819052610160820181905261018082018190526101a082018190526101c08201526200014790600d90600f620002ce565b503480156200015557600080fd5b50600080546001600160a01b03191633178082556040516001600160a01b039190911691907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a360008054600160a01b60ff021916815533815260066020526040808220805460ff199081166001908117909255600980549091169091179055517f7108b088d8aa4859393733b5224c67fe9cebc5d211d29749447bbbf4fc7230fe9190a1336000818152600a602052604080822080546001600160a01b031916841790555182917f3a07358387d93faec95087b5ca8f16372dcbe4a2eb4a58e62def44c379c3cc8491a362000327565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200028c57805160ff1916838001178555620002bc565b82800160010185558215620002bc579182015b82811115620002bc5782518255916020019190600101906200029f565b50620002ca92915062000307565b5090565b82600f8101928215620002bc579160200282015b82811115620002bc578251829063ffffffff16905591602001919060010190620002e2565b6200032491905b80821115620002ca57600081556001016200030e565b90565b61161880620003376000396000f3fe6080604052600436106101cd5760003560e01c806370a08231116100f7578063a746f93a11610095578063dd62ed3e11610064578063dd62ed3e1461070a578063e2aafa2114610745578063ec8f95fc14610778578063f2fde38b146107ab576101cd565b8063a746f93a14610620578063a9059cbb1461065b578063aa271e1a14610694578063cea9d26f146106c7576101cd565b80638da5cb5b116100d15780638da5cb5b1461058457806395d89b41146105995780639e281a98146105ae578063a457c2d7146105e7576101cd565b806370a08231146105095780637ffbe2411461053c5780638456cb591461056f576101cd565b8063355274ea1161016f57806340c10f191161013e57806340c10f191461044f578063522f6815146104885780635c975abb146104c15780635ca23ce2146104d6576101cd565b8063355274ea146103d757806336b21ed4146103ec57806339509351146104015780633f4ba83a1461043a576101cd565b8063236c25d1116101ab578063236c25d11461030357806323b872dd1461031a5780632cf003c21461035d578063313ce567146103ac576101cd565b806306fdde0314610205578063095ea7b31461028f57806318160ddd146102dc575b60408051348152905133917f0553260a2e46b0577270d8992db02d30856ca880144c72d6e9503760946aef13919081900360200190a2005b34801561021157600080fd5b5061021a6107de565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561025457818101518382015260200161023c565b50505050905090810190601f1680156102815780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561029b57600080fd5b506102c8600480360360408110156102b257600080fd5b506001600160a01b038135169060200135610873565b604080519115158252519081900360200190f35b3480156102e857600080fd5b506102f161088a565b60408051918252519081900360200190f35b34801561030f57600080fd5b50610318610890565b005b34801561032657600080fd5b506102c86004803603606081101561033d57600080fd5b506001600160a01b038135811691602081013590911690604001356108dc565b34801561036957600080fd5b506103906004803603602081101561038057600080fd5b50356001600160a01b0316610979565b604080516001600160a01b039092168252519081900360200190f35b3480156103b857600080fd5b506103c161099a565b6040805160ff9092168252519081900360200190f35b3480156103e357600080fd5b506102f16109a3565b3480156103f857600080fd5b506102c86109a9565b34801561040d57600080fd5b506102c86004803603604081101561042457600080fd5b506001600160a01b0381351690602001356109b2565b34801561044657600080fd5b506103186109ee565b34801561045b57600080fd5b506102c86004803603604081101561047257600080fd5b506001600160a01b038135169060200135610a60565b34801561049457600080fd5b50610318600480360360408110156104ab57600080fd5b506001600160a01b038135169060200135610a86565b3480156104cd57600080fd5b506102c8610afb565b3480156104e257600080fd5b506102f1600480360360208110156104f957600080fd5b50356001600160a01b0316610b0b565b34801561051557600080fd5b506102f16004803603602081101561052c57600080fd5b50356001600160a01b0316610be5565b34801561054857600080fd5b506103186004803603602081101561055f57600080fd5b50356001600160a01b0316610c00565b34801561057b57600080fd5b50610318610cbe565b34801561059057600080fd5b50610390610d37565b3480156105a557600080fd5b5061021a610d46565b3480156105ba57600080fd5b50610318600480360360408110156105d157600080fd5b506001600160a01b038135169060200135610da4565b3480156105f357600080fd5b506102c86004803603604081101561060a57600080fd5b506001600160a01b038135169060200135610e2a565b34801561062c57600080fd5b506103186004803603604081101561064357600080fd5b506001600160a01b0381351690602001351515610e66565b34801561066757600080fd5b506102c86004803603604081101561067e57600080fd5b506001600160a01b038135169060200135610ee1565b3480156106a057600080fd5b506102c8600480360360208110156106b757600080fd5b50356001600160a01b0316610f60565b3480156106d357600080fd5b50610318600480360360608110156106ea57600080fd5b506001600160a01b03813581169160208101359091169060400135610f7e565b34801561071657600080fd5b506102f16004803603604081101561072d57600080fd5b506001600160a01b03813581169160200135166110ca565b34801561075157600080fd5b506102c86004803603602081101561076857600080fd5b50356001600160a01b03166110f5565b34801561078457600080fd5b506102f16004803603602081101561079b57600080fd5b50356001600160a01b0316611115565b3480156107b757600080fd5b50610318600480360360208110156107ce57600080fd5b50356001600160a01b0316611130565b60018054604080516020601f600260001961010087891615020190951694909404938401819004810282018101909252828152606093909290918301828280156108695780601f1061083e57610100808354040283529160200191610869565b820191906000526020600020905b81548152906001019060200180831161084c57829003601f168201915b5050505050905090565b60006108803384846111a8565b5060015b92915050565b60055490565b6000546001600160a01b031633146108a757600080fd5b6009805460ff191690556040517fc090b72d6fc6f54e9d92fd0cb56ec5038df5e252a0db7cdf2ac82a118570f45a90600090a1565b60008054600160a01b900460ff16156108f457600080fd5b6001600160a01b038416600090815260086020908152604080832033845290915290205482111561092457600080fd5b61092f848484611230565b6001600160a01b03841660009081526008602090815260408083203380855292529091205461096f91869161096a908663ffffffff6112fd16565b6111a8565b5060019392505050565b6001600160a01b038082166000908152600a6020526040902054165b919050565b60035460ff1690565b60045490565b60095460ff1690565b3360008181526008602090815260408083206001600160a01b0387168452909152812054909161088091859061096a908663ffffffff61130f16565b6000546001600160a01b03163314610a0557600080fd5b600054600160a01b900460ff16610a1b57600080fd5b60008054600160a01b60ff02191690556040805133815290517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9181900360200190a1565b3360009081526006602052604081205460ff16610a7c57600080fd5b610880838361131c565b6000546001600160a01b03163314610a9d57600080fd5b6001600160a01b038216610ab057600080fd5b303181811015610abf57600080fd5b6040516001600160a01b0384169083156108fc029084906000818181858888f19350505050158015610af5573d6000803e3d6000fd5b50505050565b600054600160a01b900460ff1690565b6000610b16826110f5565b610b2257506000610995565b600c54829060015b600f811015610bdd576001600160a01b038084166000818152600a6020526040902054909116908114610b9e576001600160a01b0381166000908152600b6020526040902054821015610b9957610b96600d83600f8110610b8757fe5b0154849063ffffffff6112fd16565b92505b610bb6565b610bae858463ffffffff61130f16565b945050610bdd565b506001600160a01b039283166000908152600a602052604090205490921691600101610b2a565b505050919050565b6001600160a01b031660009081526007602052604090205490565b336000908152600a60205260409020546001600160a01b0316610c2257600080fd5b610c2b81611426565b610c3457600080fd5b336000818152600b6020908152604080832080546001600160a01b038781168087528487209290925586865291859055600a90935281842080548486528386208054919093166001600160a01b03199182161790925585855280549091169055519092917f59f0ca9d00e60414f79a01398514c78ab21f41bb858ea66945850531cc4a511c91a350565b6000546001600160a01b03163314610cd557600080fd5b600054600160a01b900460ff1615610cec57600080fd5b60008054600160a01b60ff021916600160a01b1790556040805133815290517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589181900360200190a1565b6000546001600160a01b031690565b60028054604080516020601f60001961010060018716150201909416859004938401819004810282018101909252828152606093909290918301828280156108695780601f1061083e57610100808354040283529160200191610869565b6000546001600160a01b03163314610dbb57600080fd5b60008111610dc857600080fd5b6001600160a01b038216610ddb57600080fd5b610de6308383611230565b6040805182815290516001600160a01b0384169130917f037238854fe57fbf51f09946f854fc3916fe83938d6521f09bd05463839f13049181900360200190a35050565b3360008181526008602090815260408083206001600160a01b0387168452909152812054909161088091859061096a908663ffffffff6112fd16565b6000546001600160a01b03163314610e7d57600080fd5b6001600160a01b038216600081815260066020908152604091829020805460ff191685151590811790915582519384529083015280517f04bca3656717d14c20f88f2a0122832cb0d2807bfc66ed9e932a2202cc59f4959281900390910190a15050565b60008054600160a01b900460ff1615610ef957600080fd5b60095460ff168015610f0c5750600c5482145b8015610f1c5750610f1c836110f5565b8015610f2e5750610f2c336110f5565b155b8015610f3e5750610f3e33611426565b15610f5557610f4d338461142b565b506001610884565b610f4d338484611230565b6001600160a01b031660009081526006602052604090205460ff1690565b6000546001600160a01b03163314610f9557600080fd5b826001600160a01b038316610fa957600080fd5b60408051600160e01b6370a0823102815230600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b158015610ff657600080fd5b505afa15801561100a573d6000803e3d6000fd5b505050506040513d602081101561102057600080fd5b505190508281101561103157600080fd5b816001600160a01b031663a9059cbb85856040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561109157600080fd5b505af11580156110a5573d6000803e3d6000fd5b505050506040513d60208110156110bb57600080fd5b50516110c357fe5b5050505050565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b6001600160a01b039081166000908152600a602052604090205416151590565b6001600160a01b03166000908152600b602052604090205490565b6000546001600160a01b0316331461114757600080fd5b6001600160a01b03811661115a57600080fd5b600080546001600160a01b0319166001600160a01b0383811691821780845560405192939116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6001600160a01b0383166111bb57600080fd5b6001600160a01b0382166111ce57600080fd5b6001600160a01b03808416600081815260086020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b03821661124357600080fd5b6001600160a01b03831660009081526007602052604090205461126c908263ffffffff6112fd16565b6001600160a01b0380851660009081526007602052604080822093909355908416815220546112a1908263ffffffff61130f16565b6001600160a01b0380841660008181526007602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008282111561130957fe5b50900390565b8181018281101561088457fe5b600454600554611332908363ffffffff61130f16565b111561133d57600080fd5b6001600160a01b03821661135057600080fd5b600554611363908263ffffffff61130f16565b6005556001600160a01b03821660009081526007602052604090205461138f908263ffffffff61130f16565b6001600160a01b038316600081815260076020908152604091829020939093558051848152905191927f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688592918290030190a26040805182815290516001600160a01b038416916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b3b1590565b6001600160a01b0381166000908152600b602052604090205461145590600163ffffffff61130f16565b6001600160a01b038083166000818152600b6020908152604080832095909555928616808252600a90935283812080546001600160a01b03191683179055925190927f3a07358387d93faec95087b5ca8f16372dcbe4a2eb4a58e62def44c379c3cc8491a36114c73330600c54611230565b600c5482906000805b600f8110156115da576001600160a01b038085166000818152600a602052604090205490911690811461159a576001600160a01b0381166000908152600b602052604090205482101561155c576115363082600d85600f811061152f57fe5b0154611230565b611555600d83600f811061154657fe5b0154859063ffffffff6112fd16565b9350611595565b61157b600d83600f811061156c57fe5b0154849063ffffffff61130f16565b925061158d600d83600f811061154657fe5b9350506115d2565b6115b2565b6115aa838563ffffffff61130f16565b9250506115da565b506001600160a01b039384166000908152600a6020526040902054909316925b6001016114d0565b5080156110c3576110c330308361123056fea165627a7a72305820e907576360ae007fb0144f5429ab2119ec8cf7b2fb1c001227df5bfff88ccd010029
Deployed Bytecode
0x6080604052600436106101cd5760003560e01c806370a08231116100f7578063a746f93a11610095578063dd62ed3e11610064578063dd62ed3e1461070a578063e2aafa2114610745578063ec8f95fc14610778578063f2fde38b146107ab576101cd565b8063a746f93a14610620578063a9059cbb1461065b578063aa271e1a14610694578063cea9d26f146106c7576101cd565b80638da5cb5b116100d15780638da5cb5b1461058457806395d89b41146105995780639e281a98146105ae578063a457c2d7146105e7576101cd565b806370a08231146105095780637ffbe2411461053c5780638456cb591461056f576101cd565b8063355274ea1161016f57806340c10f191161013e57806340c10f191461044f578063522f6815146104885780635c975abb146104c15780635ca23ce2146104d6576101cd565b8063355274ea146103d757806336b21ed4146103ec57806339509351146104015780633f4ba83a1461043a576101cd565b8063236c25d1116101ab578063236c25d11461030357806323b872dd1461031a5780632cf003c21461035d578063313ce567146103ac576101cd565b806306fdde0314610205578063095ea7b31461028f57806318160ddd146102dc575b60408051348152905133917f0553260a2e46b0577270d8992db02d30856ca880144c72d6e9503760946aef13919081900360200190a2005b34801561021157600080fd5b5061021a6107de565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561025457818101518382015260200161023c565b50505050905090810190601f1680156102815780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561029b57600080fd5b506102c8600480360360408110156102b257600080fd5b506001600160a01b038135169060200135610873565b604080519115158252519081900360200190f35b3480156102e857600080fd5b506102f161088a565b60408051918252519081900360200190f35b34801561030f57600080fd5b50610318610890565b005b34801561032657600080fd5b506102c86004803603606081101561033d57600080fd5b506001600160a01b038135811691602081013590911690604001356108dc565b34801561036957600080fd5b506103906004803603602081101561038057600080fd5b50356001600160a01b0316610979565b604080516001600160a01b039092168252519081900360200190f35b3480156103b857600080fd5b506103c161099a565b6040805160ff9092168252519081900360200190f35b3480156103e357600080fd5b506102f16109a3565b3480156103f857600080fd5b506102c86109a9565b34801561040d57600080fd5b506102c86004803603604081101561042457600080fd5b506001600160a01b0381351690602001356109b2565b34801561044657600080fd5b506103186109ee565b34801561045b57600080fd5b506102c86004803603604081101561047257600080fd5b506001600160a01b038135169060200135610a60565b34801561049457600080fd5b50610318600480360360408110156104ab57600080fd5b506001600160a01b038135169060200135610a86565b3480156104cd57600080fd5b506102c8610afb565b3480156104e257600080fd5b506102f1600480360360208110156104f957600080fd5b50356001600160a01b0316610b0b565b34801561051557600080fd5b506102f16004803603602081101561052c57600080fd5b50356001600160a01b0316610be5565b34801561054857600080fd5b506103186004803603602081101561055f57600080fd5b50356001600160a01b0316610c00565b34801561057b57600080fd5b50610318610cbe565b34801561059057600080fd5b50610390610d37565b3480156105a557600080fd5b5061021a610d46565b3480156105ba57600080fd5b50610318600480360360408110156105d157600080fd5b506001600160a01b038135169060200135610da4565b3480156105f357600080fd5b506102c86004803603604081101561060a57600080fd5b506001600160a01b038135169060200135610e2a565b34801561062c57600080fd5b506103186004803603604081101561064357600080fd5b506001600160a01b0381351690602001351515610e66565b34801561066757600080fd5b506102c86004803603604081101561067e57600080fd5b506001600160a01b038135169060200135610ee1565b3480156106a057600080fd5b506102c8600480360360208110156106b757600080fd5b50356001600160a01b0316610f60565b3480156106d357600080fd5b50610318600480360360608110156106ea57600080fd5b506001600160a01b03813581169160208101359091169060400135610f7e565b34801561071657600080fd5b506102f16004803603604081101561072d57600080fd5b506001600160a01b03813581169160200135166110ca565b34801561075157600080fd5b506102c86004803603602081101561076857600080fd5b50356001600160a01b03166110f5565b34801561078457600080fd5b506102f16004803603602081101561079b57600080fd5b50356001600160a01b0316611115565b3480156107b757600080fd5b50610318600480360360208110156107ce57600080fd5b50356001600160a01b0316611130565b60018054604080516020601f600260001961010087891615020190951694909404938401819004810282018101909252828152606093909290918301828280156108695780601f1061083e57610100808354040283529160200191610869565b820191906000526020600020905b81548152906001019060200180831161084c57829003601f168201915b5050505050905090565b60006108803384846111a8565b5060015b92915050565b60055490565b6000546001600160a01b031633146108a757600080fd5b6009805460ff191690556040517fc090b72d6fc6f54e9d92fd0cb56ec5038df5e252a0db7cdf2ac82a118570f45a90600090a1565b60008054600160a01b900460ff16156108f457600080fd5b6001600160a01b038416600090815260086020908152604080832033845290915290205482111561092457600080fd5b61092f848484611230565b6001600160a01b03841660009081526008602090815260408083203380855292529091205461096f91869161096a908663ffffffff6112fd16565b6111a8565b5060019392505050565b6001600160a01b038082166000908152600a6020526040902054165b919050565b60035460ff1690565b60045490565b60095460ff1690565b3360008181526008602090815260408083206001600160a01b0387168452909152812054909161088091859061096a908663ffffffff61130f16565b6000546001600160a01b03163314610a0557600080fd5b600054600160a01b900460ff16610a1b57600080fd5b60008054600160a01b60ff02191690556040805133815290517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9181900360200190a1565b3360009081526006602052604081205460ff16610a7c57600080fd5b610880838361131c565b6000546001600160a01b03163314610a9d57600080fd5b6001600160a01b038216610ab057600080fd5b303181811015610abf57600080fd5b6040516001600160a01b0384169083156108fc029084906000818181858888f19350505050158015610af5573d6000803e3d6000fd5b50505050565b600054600160a01b900460ff1690565b6000610b16826110f5565b610b2257506000610995565b600c54829060015b600f811015610bdd576001600160a01b038084166000818152600a6020526040902054909116908114610b9e576001600160a01b0381166000908152600b6020526040902054821015610b9957610b96600d83600f8110610b8757fe5b0154849063ffffffff6112fd16565b92505b610bb6565b610bae858463ffffffff61130f16565b945050610bdd565b506001600160a01b039283166000908152600a602052604090205490921691600101610b2a565b505050919050565b6001600160a01b031660009081526007602052604090205490565b336000908152600a60205260409020546001600160a01b0316610c2257600080fd5b610c2b81611426565b610c3457600080fd5b336000818152600b6020908152604080832080546001600160a01b038781168087528487209290925586865291859055600a90935281842080548486528386208054919093166001600160a01b03199182161790925585855280549091169055519092917f59f0ca9d00e60414f79a01398514c78ab21f41bb858ea66945850531cc4a511c91a350565b6000546001600160a01b03163314610cd557600080fd5b600054600160a01b900460ff1615610cec57600080fd5b60008054600160a01b60ff021916600160a01b1790556040805133815290517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589181900360200190a1565b6000546001600160a01b031690565b60028054604080516020601f60001961010060018716150201909416859004938401819004810282018101909252828152606093909290918301828280156108695780601f1061083e57610100808354040283529160200191610869565b6000546001600160a01b03163314610dbb57600080fd5b60008111610dc857600080fd5b6001600160a01b038216610ddb57600080fd5b610de6308383611230565b6040805182815290516001600160a01b0384169130917f037238854fe57fbf51f09946f854fc3916fe83938d6521f09bd05463839f13049181900360200190a35050565b3360008181526008602090815260408083206001600160a01b0387168452909152812054909161088091859061096a908663ffffffff6112fd16565b6000546001600160a01b03163314610e7d57600080fd5b6001600160a01b038216600081815260066020908152604091829020805460ff191685151590811790915582519384529083015280517f04bca3656717d14c20f88f2a0122832cb0d2807bfc66ed9e932a2202cc59f4959281900390910190a15050565b60008054600160a01b900460ff1615610ef957600080fd5b60095460ff168015610f0c5750600c5482145b8015610f1c5750610f1c836110f5565b8015610f2e5750610f2c336110f5565b155b8015610f3e5750610f3e33611426565b15610f5557610f4d338461142b565b506001610884565b610f4d338484611230565b6001600160a01b031660009081526006602052604090205460ff1690565b6000546001600160a01b03163314610f9557600080fd5b826001600160a01b038316610fa957600080fd5b60408051600160e01b6370a0823102815230600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b158015610ff657600080fd5b505afa15801561100a573d6000803e3d6000fd5b505050506040513d602081101561102057600080fd5b505190508281101561103157600080fd5b816001600160a01b031663a9059cbb85856040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561109157600080fd5b505af11580156110a5573d6000803e3d6000fd5b505050506040513d60208110156110bb57600080fd5b50516110c357fe5b5050505050565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b6001600160a01b039081166000908152600a602052604090205416151590565b6001600160a01b03166000908152600b602052604090205490565b6000546001600160a01b0316331461114757600080fd5b6001600160a01b03811661115a57600080fd5b600080546001600160a01b0319166001600160a01b0383811691821780845560405192939116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6001600160a01b0383166111bb57600080fd5b6001600160a01b0382166111ce57600080fd5b6001600160a01b03808416600081815260086020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b03821661124357600080fd5b6001600160a01b03831660009081526007602052604090205461126c908263ffffffff6112fd16565b6001600160a01b0380851660009081526007602052604080822093909355908416815220546112a1908263ffffffff61130f16565b6001600160a01b0380841660008181526007602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008282111561130957fe5b50900390565b8181018281101561088457fe5b600454600554611332908363ffffffff61130f16565b111561133d57600080fd5b6001600160a01b03821661135057600080fd5b600554611363908263ffffffff61130f16565b6005556001600160a01b03821660009081526007602052604090205461138f908263ffffffff61130f16565b6001600160a01b038316600081815260076020908152604091829020939093558051848152905191927f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688592918290030190a26040805182815290516001600160a01b038416916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b3b1590565b6001600160a01b0381166000908152600b602052604090205461145590600163ffffffff61130f16565b6001600160a01b038083166000818152600b6020908152604080832095909555928616808252600a90935283812080546001600160a01b03191683179055925190927f3a07358387d93faec95087b5ca8f16372dcbe4a2eb4a58e62def44c379c3cc8491a36114c73330600c54611230565b600c5482906000805b600f8110156115da576001600160a01b038085166000818152600a602052604090205490911690811461159a576001600160a01b0381166000908152600b602052604090205482101561155c576115363082600d85600f811061152f57fe5b0154611230565b611555600d83600f811061154657fe5b0154859063ffffffff6112fd16565b9350611595565b61157b600d83600f811061156c57fe5b0154849063ffffffff61130f16565b925061158d600d83600f811061154657fe5b9350506115d2565b6115b2565b6115aa838563ffffffff61130f16565b9250506115da565b506001600160a01b039384166000908152600a6020526040902054909316925b6001016114d0565b5080156110c3576110c330308361123056fea165627a7a72305820e907576360ae007fb0144f5429ab2119ec8cf7b2fb1c001227df5bfff88ccd010029
Deployed Bytecode Sourcemap
5798:14059:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8263:29;;;8282:9;8263:29;;;;8270:10;;8263:29;;;;;;;;;;5798:14059;8367:83;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8367:83:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;8367:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10813:148;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10813:148:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;10813:148:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;8990:91;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8990:91:0;;;:::i;:::-;;;;;;;;;;;;;;;;16144:172;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16144:172:0;;;:::i;:::-;;12165:297;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12165:297:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;12165:297:0;;;;;;;;;;;;;;;;;:::i;15738:109::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15738:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15738:109:0;-1:-1:-1;;;;;15738:109:0;;:::i;:::-;;;;-1:-1:-1;;;;;15738:109:0;;;;;;;;;;;;;;8683:83;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8683:83:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8839:75;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8839:75:0;;;:::i;15320:118::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15320:118:0;;;:::i;11206:203::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11206:203:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;11206:203:0;;;;;;;;:::i;5634:119::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5634:119:0;;;:::i;14304:131::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14304:131:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;14304:131:0;;;;;;;;:::i;4221:243::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4221:243:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;4221:243:0;;;;;;;;:::i;4886:78::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4886:78:0;;;:::i;18705:796::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18705:796:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18705:796:0;-1:-1:-1;;;;;18705:796:0;;:::i;9300:106::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9300:106:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9300:106:0;-1:-1:-1;;;;;9300:106:0;;:::i;17885:371::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17885:371:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17885:371:0;-1:-1:-1;;;;;17885:371:0;;:::i;5422:117::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5422:117:0;;;:::i;2972:79::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2972:79:0;;;:::i;8517:87::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8517:87:0;;;:::i;19601:251::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19601:251:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;19601:251:0;;;;;;;;:::i;11659:213::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11659:213:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;11659:213:0;;;;;;;;:::i;13889:160::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13889:160:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;13889:160:0;;;;;;;;;;:::i;10051:513::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10051:513:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;10051:513:0;;;;;;;;:::i;13727:104::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13727:104:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13727:104:0;-1:-1:-1;;;;;13727:104:0;;:::i;3828:339::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3828:339:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;3828:339:0;;;;;;;;;;;;;;;;;:::i;9745:131::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9745:131:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;9745:131:0;;;;;;;;;;:::i;15528:123::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15528:123:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15528:123:0;-1:-1:-1;;;;;15528:123:0;;:::i;15941:109::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15941:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15941:109:0;-1:-1:-1;;;;;15941:109:0;;:::i;3402:196::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3402:196:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3402:196:0;-1:-1:-1;;;;;3402:196:0;;:::i;8367:83::-;8437:5;8430:12;;;;;;;;-1:-1:-1;;8430:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8404:13;;8430:12;;8437:5;;8430:12;;8437:5;8430:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8367:83;:::o;10813:148::-;10878:4;10895:36;10904:10;10916:7;10925:5;10895:8;:36::i;:::-;-1:-1:-1;10949:4:0;10813:148;;;;;:::o;8990:91::-;9061:12;;8990:91;:::o;16144:172::-;3198:6;;-1:-1:-1;;;;;3198:6:0;3184:10;:20;3176:29;;;;;;16220:27;:35;;-1:-1:-1;;16220:35:0;;;16271:37;;;;16250:5;;16271:37;16144:172::o;12165:297::-;12258:4;5123:7;;-1:-1:-1;;;5123:7:0;;;;5122:8;5114:17;;;;;;-1:-1:-1;;;;;12283:14:0;;;;;;:8;:14;;;;;;;;12298:10;12283:26;;;;;;;;:35;-1:-1:-1;12283:35:0;12275:44;;;;;;12330:26;12340:4;12346:2;12350:5;12330:9;:26::i;:::-;-1:-1:-1;;;;;12394:14:0;;;;;;:8;:14;;;;;;;;12382:10;12394:26;;;;;;;;;12367:65;;12376:4;;12394:37;;12425:5;12394:37;:30;:37;:::i;:::-;12367:8;:65::i;:::-;-1:-1:-1;12450:4:0;12165:297;;;;;:::o;15738:109::-;-1:-1:-1;;;;;15821:18:0;;;15794:7;15821:18;;;:9;:18;;;;;;;15738:109;;;;:::o;8683:83::-;8749:9;;;;8683:83;:::o;8839:75::-;8902:4;;8839:75;:::o;15320:118::-;15403:27;;;;15320:118;:::o;11206:203::-;11312:10;11286:4;11333:20;;;:8;:20;;;;;;;;-1:-1:-1;;;;;11333:29:0;;;;;;;;;;11286:4;;11303:76;;11324:7;;11333:45;;11367:10;11333:45;:33;:45;:::i;5634:119::-;3198:6;;-1:-1:-1;;;;;3198:6:0;3184:10;:20;3176:29;;;;;;5302:7;;-1:-1:-1;;;5302:7:0;;;;5294:16;;;;;;5704:5;5694:15;;-1:-1:-1;;;;;;5694:15:0;;;5725:20;;;5734:10;5725:20;;;;;;;;;;;;;5634:119::o;14304:131::-;13611:10;14372:4;13603:19;;;:7;:19;;;;;;;;13595:28;;;;;;14389:16;14395:2;14399:5;14389;:16::i;4221:243::-;3198:6;;-1:-1:-1;;;;;3198:6:0;3184:10;:20;3176:29;;;;;;-1:-1:-1;;;;;4318:16:0;;4310:25;;;;;;4374:4;4366:21;4408:17;;;;4400:26;;;;;;4437:19;;-1:-1:-1;;;;;4437:11:0;;;:19;;;;;4449:6;;4437:19;;;;4449:6;4437:11;:19;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4437:19:0;3216:1;4221:243;;:::o;4886:78::-;4925:4;4949:7;-1:-1:-1;;;4949:7:0;;;;;4886:78::o;18705:796::-;18813:14;18845:31;18857:18;18845:11;:31::i;:::-;18840:73;;-1:-1:-1;18900:1:0;18893:8;;18840:73;18988:27;;18942:18;;19039:1;19026:442;19046:27;19042:1;:31;19026:442;;;-1:-1:-1;;;;;19114:17:0;;;19095:16;19114:17;;;:9;:17;;;;;;;;;;19152:18;;19148:266;;-1:-1:-1;;;;;19195:19:0;;;;;;:9;:19;;;;;;:23;-1:-1:-1;19191:116:0;;;19252:35;19263:20;19284:1;19263:23;;;;;;;;;19252:6;;:35;:10;:35;:::i;:::-;19243:44;;19191:116;19148:266;;;19356:18;:6;19367;19356:18;:10;:18;:::i;:::-;19347:27;;19393:5;;;19148:266;-1:-1:-1;;;;;;19439:17:0;;;;;;;:9;:17;;;;;;;;;;;19075:3;19026:442;;;-1:-1:-1;;;18705:796:0;;;:::o;9300:106::-;-1:-1:-1;;;;;9382:16:0;9355:7;9382:16;;;:9;:16;;;;;;;9300:106::o;17885:371::-;15180:10;15203:1;15170:21;;;:9;:21;;;;;;-1:-1:-1;;;;;15170:21:0;15162:44;;;;;;17973:22;17987:7;17973:13;:22::i;:::-;17965:31;;;;;;18040:10;18030:21;;;;:9;:21;;;;;;;;;;-1:-1:-1;;;;;18009:18:0;;;;;;;;;:42;;;;18062:21;;;:25;;;;18119:9;:21;;;;;;;;18098:18;;;;;;:42;;18119:21;;;;-1:-1:-1;;;;;;18098:42:0;;;;;;;18151:21;;;:34;;;;;;;18201:47;18009:18;;18040:10;18201:47;;;17885:371;:::o;5422:117::-;3198:6;;-1:-1:-1;;;;;3198:6:0;3184:10;:20;3176:29;;;;;;5123:7;;-1:-1:-1;;;5123:7:0;;;;5122:8;5114:17;;;;;;5483:7;:14;;-1:-1:-1;;;;;;5483:14:0;-1:-1:-1;;;5483:14:0;;;5513:18;;;5520:10;5513:18;;;;;;;;;;;;;5422:117::o;2972:79::-;3010:7;3037:6;-1:-1:-1;;;;;3037:6:0;2972:79;:::o;8517:87::-;8589:7;8582:14;;;;;;;-1:-1:-1;;8582:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8556:13;;8582:14;;8589:7;;8582:14;;8589:7;8582:14;;;;;;;;;;;;;;;;;;;;;;;;19601:251;3198:6;;-1:-1:-1;;;;;3198:6:0;3184:10;:20;3176:29;;;;;;19699:1;19690:6;:10;19681:20;;;;;;-1:-1:-1;;;;;19721:17:0;;19712:27;;;;;;19750:37;19768:4;19775:3;19780:6;19750:9;:37::i;:::-;19803:41;;;;;;;;-1:-1:-1;;;;;19803:41:0;;;19825:4;;19803:41;;;;;;;;;19601:251;;:::o;11659:213::-;11770:10;11744:4;11791:20;;;:8;:20;;;;;;;;-1:-1:-1;;;;;11791:29:0;;;;;;;;;;11744:4;;11761:81;;11782:7;;11791:50;;11825:15;11791:50;:33;:50;:::i;13889:160::-;3198:6;;-1:-1:-1;;;;;3198:6:0;3184:10;:20;3176:29;;;;;;-1:-1:-1;;;;;13972:16:0;;;;;;:7;:16;;;;;;;;;:24;;-1:-1:-1;;13972:24:0;;;;;;;;;;14012:29;;;;;;;;;;;;;;;;;;;;;13889:160;;:::o;10051:513::-;10126:4;5123:7;;-1:-1:-1;;;5123:7:0;;;;5122:8;5114:17;;;;;;10147:27;;;;:67;;;;;10187:27;;10178:5;:36;10147:67;:99;;;;;10231:15;10243:2;10231:11;:15::i;:::-;10147:127;;;;;10251:23;10263:10;10251:11;:23::i;:::-;10250:24;10147:127;:156;;;;;10278:25;10292:10;10278:13;:25::i;:::-;10143:414;;;10367:29;10381:10;10393:2;10367:13;:29::i;:::-;-1:-1:-1;10418:4:0;10411:11;;10143:414;10487:32;10497:10;10509:2;10513:5;10487:9;:32::i;13727:104::-;-1:-1:-1;;;;;13807:16:0;13783:4;13807:16;;;:7;:16;;;;;;;;;13727:104::o;3828:339::-;3198:6;;-1:-1:-1;;;;;3198:6:0;3184:10;:20;3176:29;;;;;;3956:9;-1:-1:-1;;;;;3985:22:0;;3977:31;;;;;;4037;;;-1:-1:-1;;;;;4037:31:0;;4062:4;4037:31;;;;;;4019:15;;-1:-1:-1;;;;;4037:16:0;;;;;:31;;;;;;;;;;;;;;;:16;:31;;;5:2:-1;;;;30:1;27;20:12;5:2;4037:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4037:31:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4037:31:0;;-1:-1:-1;4089:17:0;;;;4081:26;;;;;;4125:6;-1:-1:-1;;;;;4125:15:0;;4141:8;4151:6;4125:33;;;;;;;;;;;;;-1:-1:-1;;;;;4125:33:0;-1:-1:-1;;;;;4125:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4125:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4125:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4125:33:0;4118:41;;;;3216:1;;3828:339;;;:::o;9745:131::-;-1:-1:-1;;;;;9844:15:0;;;9817:7;9844:15;;;:8;:15;;;;;;;;:24;;;;;;;;;;;;;9745:131::o;15528:123::-;-1:-1:-1;;;;;15611:18:0;;;15587:4;15611:18;;;:9;:18;;;;;;;:32;;;15528:123::o;15941:109::-;-1:-1:-1;;;;;16024:18:0;15997:7;16024:18;;;:9;:18;;;;;;;15941:109::o;3402:196::-;3198:6;;-1:-1:-1;;;;;3198:6:0;3184:10;:20;3176:29;;;;;;-1:-1:-1;;;;;3485:22:0;;3477:31;;;;;;3519:6;:17;;-1:-1:-1;;;;;;3519:17:0;-1:-1:-1;;;;;3519:17:0;;;;;;;;;3552:38;;3519:17;;3573:6;;;3552:38;;3519:6;3552:38;3402:196;:::o;13225:254::-;-1:-1:-1;;;;;13318:19:0;;13310:28;;;;;;-1:-1:-1;;;;;13357:21:0;;13349:30;;;;;;-1:-1:-1;;;;;13392:15:0;;;;;;;:8;:15;;;;;;;;:24;;;;;;;;;;;;;:32;;;13440:31;;;;;;;;;;;;;;;;;13225:254;;;:::o;12690:262::-;-1:-1:-1;;;;;12778:16:0;;12770:25;;;;;;-1:-1:-1;;;;;12826:15:0;;;;;;:9;:15;;;;;;:26;;12846:5;12826:26;:19;:26;:::i;:::-;-1:-1:-1;;;;;12808:15:0;;;;;;;:9;:15;;;;;;:44;;;;12879:13;;;;;;;:24;;12897:5;12879:24;:17;:24;:::i;:::-;-1:-1:-1;;;;;12863:13:0;;;;;;;:9;:13;;;;;;;;;:40;;;;12919:25;;;;;;;12863:13;;12919:25;;;;;;;;;;;;;12690:262;;;:::o;515:123::-;573:7;605:1;600;:6;;593:14;;;;-1:-1:-1;625:5:0;;;515:123::o;236:141::-;320:5;;;343:6;;;;336:14;;;14683:356;14785:4;;14758:12;;:23;;14775:5;14758:23;:16;:23;:::i;:::-;:31;;14750:40;;;;;;-1:-1:-1;;;;;14809:21:0;;14801:30;;;;;;14859:12;;:23;;14876:5;14859:23;:16;:23;:::i;:::-;14844:12;:38;-1:-1:-1;;;;;14914:18:0;;;;;;:9;:18;;;;;;:29;;14937:5;14914:29;:22;:29;:::i;:::-;-1:-1:-1;;;;;14893:18:0;;;;;;:9;:18;;;;;;;;;:50;;;;14959:20;;;;;;;14893:18;;14959:20;;;;;;;;;14995:36;;;;;;;;-1:-1:-1;;;;;14995:36:0;;;15012:1;;14995:36;;;;;;;;;14683:356;;:::o;18347:191::-;18476:17;18521:9;;18347:191::o;16386:1415::-;-1:-1:-1;;;;;16490:21:0;;;;;;:9;:21;;;;;;:28;;16516:1;16490:28;:25;:28;:::i;:::-;-1:-1:-1;;;;;16466:21:0;;;;;;;:9;:21;;;;;;;;:52;;;;16529:18;;;;;;:9;:18;;;;;;:31;;-1:-1:-1;;;;;;16529:31:0;;;;;16578:46;;16466:21;;16578:46;;;16688:65;16698:10;16718:4;16725:27;;16688:9;:65::i;:::-;16816:27;;16781:7;;16764:14;;16894:776;16914:27;16910:1;:31;16894:776;;;-1:-1:-1;;;;;16982:17:0;;;16963:16;16982:17;;;:9;:17;;;;;;;;;;17020:18;;17016:600;;-1:-1:-1;;;;;17063:19:0;;;;;;:9;:19;;;;;;:23;-1:-1:-1;17059:428:0;;;17111:59;17129:4;17136:8;17146:20;17167:1;17146:23;;;;;;;;;17111:9;:59::i;:::-;17202:35;17213:20;17234:1;17213:23;;;;;;;;;17202:6;;:35;:10;:35;:::i;:::-;17193:44;;17059:428;;;17323:46;17345:20;17366:1;17345:23;;;;;;;;;17323:17;;:46;:21;:46;:::i;:::-;17303:66;;17401:35;17412:20;17433:1;17412:23;;;;;;17401:35;17392:44;;17459:8;;;17059:428;17016:600;;;17547:29;:17;17569:6;17547:29;:21;:29;:::i;:::-;17527:49;;17595:5;;;17016:600;-1:-1:-1;;;;;;17641:17:0;;;;;;;:9;:17;;;;;;;;;;16894:776;16943:3;;16894:776;;;-1:-1:-1;17686:21:0;;17682:112;;17724:58;17742:4;17757;17764:17;17724:9;:58::i
Swarm Source
bzzr://e907576360ae007fb0144f5429ab2119ec8cf7b2fb1c001227df5bfff88ccd01
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.