ERC-20
Overview
Max Total Supply
1,000,000 MM
Holders
77
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.631639391558830298 MMValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Token
Compiler Version
v0.8.22+commit.4fc1097e
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-11-15 */ // SPDX-License-Identifier: MIT /* Website: http://milliontoken.net/ X/Twitter: https://twitter.com/themilliontoken Telegram: https://t.me/themilliontoken */ pragma solidity ^0.8.22; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address to, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address from, address to, uint256 amount ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } interface IERC20Metadata is IERC20 { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); } contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function decimals() public view virtual override returns (uint8) { return 18; } function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, _allowances[owner][spender] + addedValue); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = _allowances[owner][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; } _balances[to] += amount; emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() { _transferOwnership(_msgSender()); } function owner() public view virtual returns (address) { return _owner; } modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } } interface IUniswapV2Factory { function createPair(address tokenA, address tokenB) external returns (address pair); function getPair(address tokenA, address tokenB) external view returns (address pair); } interface IUniswapV2Router02 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract Token is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 private constant _router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); address public v2Pair; address public immutable feeAddr; uint256 public maxSwap; uint256 public maxHoldings; uint256 public feeTokenThreshold; uint256 public buyFee; uint256 public sellFee; bool private _inSwap; mapping (address => bool) private _excludedLimits; // much like onlyOwner() but used for the feeAddr so that once renounced fees, limits and threshold can still be changed modifier onlyFeeAddr() { require(feeAddr == _msgSender(), "Caller is not the feeAddr address."); _; } constructor() ERC20("Million", "MM") payable { uint256 totalSupply = 1000000 * 1e18; uint256 lpSupply = totalSupply.mul(4066).div(10000); maxSwap = totalSupply.mul(2).div(100); maxHoldings = totalSupply.mul(2).div(100); feeTokenThreshold = totalSupply.mul(10).div(10000); feeAddr = tx.origin; buyFee = 25; sellFee = 25; // exclusion from fees and limits _excludedLimits[feeAddr] = true; _excludedLimits[msg.sender] = true; _excludedLimits[address(this)] = true; _excludedLimits[address(0xdead)] = true; _mint(tx.origin, totalSupply.sub(lpSupply)); _mint(msg.sender, lpSupply); } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "Transfer from the zero address not allowed."); require(to != address(0), "Transfer to the zero address not allowed."); require(amount > 0, 'Transfer amount must be greater than zero.'); bool excluded = _excludedLimits[from] || _excludedLimits[to]; // check if liquidity pair exists require(v2Pair != address(0) || excluded, "Liquidity pair not yet created."); bool isSell = to == v2Pair; bool isBuy = from == v2Pair; // max swap check if ((isBuy || isSell) && maxSwap > 0 && !excluded) require(amount <= maxSwap, "Swap value exceeds max swap amount, try again with less swap value."); // max holdings check if (!isSell && maxHoldings > 0 && !excluded) require(balanceOf(to) + amount <= maxHoldings, "Balance exceeds max holdings amount, consider using a second wallet."); // take fees if they are on uint256 fee = isBuy ? buyFee : sellFee; if (fee > 0) { uint256 caTokenBal = balanceOf(address(this)); if ( caTokenBal >= feeTokenThreshold && !_inSwap && isSell && !excluded ) { _inSwap = true; swapFee(); _inSwap = false; } // check if we should be taking the fee if (!excluded && !_inSwap && (isBuy || isSell)) { uint256 fees = amount.mul(fee).div(100); if (fees > 0) super._transfer(from, address(this), fees); amount = amount.sub(fees); } } super._transfer(from, to, amount); } // swaps fee from tokens to eth function swapFee() public { uint256 caTokenBal = balanceOf(address(this)); if (caTokenBal == 0) return; if (caTokenBal > feeTokenThreshold) caTokenBal = feeTokenThreshold; uint256 initETHBal = address(this).balance; // swap address[] memory path = new address[](2); path[0] = address(this); path[1] = _router.WETH(); _approve(address(this), address(_router), caTokenBal); _router.swapExactTokensForETHSupportingFeeOnTransferTokens( caTokenBal, 0, path, address(this), block.timestamp ); // send eth fee uint256 ethFee = address(this).balance.sub(initETHBal); uint256 splitFee = ethFee.mul(10).div(100); ethFee = ethFee.sub(splitFee); payable(feeAddr).transfer(ethFee); payable(0xa228b6dE33d0Fe0B39A4527F5a26e95879035E5A).transfer(splitFee); } // can only ever be the actual pair as it uses getPair function enableTrading() external onlyOwner { v2Pair = IUniswapV2Factory(_router.factory()).getPair(address(this), _router.WETH()); } // updates the amount of tokens that needs to be reached before fee is swapped function updateFeeTokenThreshold(uint256 newThreshold) external onlyFeeAddr { require(newThreshold >= totalSupply().mul(1).div(100000), "Swap threshold cannot be lower than 0.001% total supply."); require(newThreshold <= totalSupply().mul(2).div(100), "Swap threshold cannot be higher than 2% total supply."); feeTokenThreshold = newThreshold; } // change fees function setFees(uint256 newBuyFee, uint256 newSellFee) external onlyFeeAddr { require(newBuyFee <= 25 && newSellFee <= 25, 'Attempting to set fee higher than initial fee.'); // smaller than or equal to initial fee buyFee = newBuyFee; sellFee = newSellFee; } // perm disables all limits function disableLimits() external onlyFeeAddr { maxHoldings = 0; maxSwap = 0; } // perm disable max holdings function disableHoldingLimit() external onlyFeeAddr { maxHoldings = 0; } // perm disable max swap function disableSwapLimit() external onlyFeeAddr { maxSwap = 0; } // transfers any stuck eth from contract to feeAddr function transferStuckETH() external { payable(feeAddr).transfer(address(this).balance); } // transfers any stuck token from contract to feeAddr function transferStuckERC20(IERC20 token) external { token.transfer(feeAddr, token.balanceOf(address(this))); } receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"payable","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":"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"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableHoldingLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableSwapLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeTokenThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxHoldings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBuyFee","type":"uint256"},{"internalType":"uint256","name":"newSellFee","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"transferStuckERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newThreshold","type":"uint256"}],"name":"updateFeeTokenThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"v2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a06040526040518060400160405280600781526020017f4d696c6c696f6e000000000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f4d4d000000000000000000000000000000000000000000000000000000000000815250816003908162000081919062000851565b50806004908162000093919062000851565b505050620000b6620000aa6200036460201b60201c565b6200036b60201b60201c565b5f69d3c21bcecceda100000090505f620000f2612710620000e3610fe2856200042e60201b90919060201c565b6200044560201b90919060201c565b90506200011f6064620001106002856200042e60201b90919060201c565b6200044560201b90919060201c565b600781905550620001506064620001416002856200042e60201b90919060201c565b6200044560201b90919060201c565b6008819055506200018261271062000173600a856200042e60201b90919060201c565b6200044560201b90919060201c565b6009819055503273ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250506019600a819055506019600b819055506001600d5f60805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600d5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600d5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600d5f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506200034a326200033e83856200045c60201b90919060201c565b6200047360201b60201c565b6200035c33826200047360201b60201c565b505062000b2e565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f81836200043d919062000962565b905092915050565b5f8183620004549190620009d9565b905092915050565b5f81836200046b919062000a10565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620004e4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004db9062000aa8565b60405180910390fd5b620004f75f8383620005e360201b60201c565b8060025f8282546200050a919062000ac8565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546200055e919062000ac8565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620005c4919062000b13565b60405180910390a3620005df5f8383620005e860201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200066957607f821691505b6020821081036200067f576200067e62000624565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620006e37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620006a6565b620006ef8683620006a6565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000739620007336200072d8462000707565b62000710565b62000707565b9050919050565b5f819050919050565b620007548362000719565b6200076c620007638262000740565b848454620006b2565b825550505050565b5f90565b6200078262000774565b6200078f81848462000749565b505050565b5b81811015620007b657620007aa5f8262000778565b60018101905062000795565b5050565b601f8211156200080557620007cf8162000685565b620007da8462000697565b81016020851015620007ea578190505b62000802620007f98562000697565b83018262000794565b50505b505050565b5f82821c905092915050565b5f620008275f19846008026200080a565b1980831691505092915050565b5f62000841838362000816565b9150826002028217905092915050565b6200085c82620005ed565b67ffffffffffffffff811115620008785762000877620005f7565b5b62000884825462000651565b62000891828285620007ba565b5f60209050601f831160018114620008c7575f8415620008b2578287015190505b620008be858262000834565b8655506200092d565b601f198416620008d78662000685565b5f5b828110156200090057848901518255600182019150602085019450602081019050620008d9565b868310156200092057848901516200091c601f89168262000816565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6200096e8262000707565b91506200097b8362000707565b92508282026200098b8162000707565b91508282048414831517620009a557620009a462000935565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f620009e58262000707565b9150620009f28362000707565b92508262000a055762000a04620009ac565b5b828204905092915050565b5f62000a1c8262000707565b915062000a298362000707565b925082820390508181111562000a445762000a4362000935565b5b92915050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000a90601f8362000a4a565b915062000a9d8262000a5a565b602082019050919050565b5f6020820190508181035f83015262000ac18162000a82565b9050919050565b5f62000ad48262000707565b915062000ae18362000707565b925082820190508082111562000afc5762000afb62000935565b5b92915050565b62000b0d8162000707565b82525050565b5f60208201905062000b285f83018462000b02565b92915050565b6080516135a062000b7f5f395f81816106f6015281816108460152818161092901528181610a7601528181610d2d01528181610e0f01528181610eab01528181611608015261178901526135a05ff3fe6080604052600436106101d0575f3560e01c80635564ad71116100f6578063a457c2d711610094578063e54f4faa11610063578063e54f4faa14610621578063f2fde38b1461064b578063f442d3fb14610673578063f928364c1461069b576101d7565b8063a457c2d714610543578063a9059cbb1461057f578063c4918b4e146105bb578063dd62ed3e146105e5576101d7565b8063715018a6116100d0578063715018a6146104c35780638a8c523c146104d95780638da5cb5b146104ef57806395d89b4114610519576101d7565b80635564ad711461044957806362aaff3a1461045f57806370a0823114610487576101d7565b80631ffc29981161016e578063395093511161013d57806339509351146103a357806339e7fddc146103df578063470624021461040957806354cf2aeb14610433576101d7565b80631ffc2998146102e957806323b872dd146103135780632b14ca561461034f578063313ce56714610379576101d7565b8063095ea7b3116101aa578063095ea7b3146102455780630b78f9c01461028157806318160ddd146102a95780631fac6a3b146102d3576101d7565b8063056939da146101db578063063be69e1461020557806306fdde031461021b576101d7565b366101d757005b5f80fd5b3480156101e6575f80fd5b506101ef6106b1565b6040516101fc9190612333565b60405180910390f35b348015610210575f80fd5b506102196106d6565b005b348015610226575f80fd5b5061022f610774565b60405161023c91906123d6565b60405180910390f35b348015610250575f80fd5b5061026b60048036038101906102669190612457565b610804565b60405161027891906124af565b60405180910390f35b34801561028c575f80fd5b506102a760048036038101906102a291906124c8565b610826565b005b3480156102b4575f80fd5b506102bd61091e565b6040516102ca9190612515565b60405180910390f35b3480156102de575f80fd5b506102e7610927565b005b3480156102f4575f80fd5b506102fd61098d565b60405161030a9190612515565b60405180910390f35b34801561031e575f80fd5b506103396004803603810190610334919061252e565b610993565b60405161034691906124af565b60405180910390f35b34801561035a575f80fd5b506103636109c1565b6040516103709190612515565b60405180910390f35b348015610384575f80fd5b5061038d6109c7565b60405161039a9190612599565b60405180910390f35b3480156103ae575f80fd5b506103c960048036038101906103c49190612457565b6109cf565b6040516103d691906124af565b60405180910390f35b3480156103ea575f80fd5b506103f3610a74565b6040516104009190612333565b60405180910390f35b348015610414575f80fd5b5061041d610a98565b60405161042a9190612515565b60405180910390f35b34801561043e575f80fd5b50610447610a9e565b005b348015610454575f80fd5b5061045d610def565b005b34801561046a575f80fd5b50610485600480360381019061048091906125ed565b610e8d565b005b348015610492575f80fd5b506104ad60048036038101906104a89190612618565b610fa3565b6040516104ba9190612515565b60405180910390f35b3480156104ce575f80fd5b506104d7610fe8565b005b3480156104e4575f80fd5b506104ed61106f565b005b3480156104fa575f80fd5b506105036112a6565b6040516105109190612333565b60405180910390f35b348015610524575f80fd5b5061052d6112ce565b60405161053a91906123d6565b60405180910390f35b34801561054e575f80fd5b5061056960048036038101906105649190612457565b61135e565b60405161057691906124af565b60405180910390f35b34801561058a575f80fd5b506105a560048036038101906105a09190612457565b611442565b6040516105b291906124af565b60405180910390f35b3480156105c6575f80fd5b506105cf611464565b6040516105dc9190612515565b60405180910390f35b3480156105f0575f80fd5b5061060b60048036038101906106069190612643565b61146a565b6040516106189190612515565b60405180910390f35b34801561062c575f80fd5b506106356114ec565b6040516106429190612515565b60405180910390f35b348015610656575f80fd5b50610671600480360381019061066c9190612618565b6114f2565b005b34801561067e575f80fd5b5061069960048036038101906106949190612681565b6115e8565b005b3480156106a6575f80fd5b506106af611769565b005b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6106de61180e565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff161461076b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107629061271c565b60405180910390fd5b5f600781905550565b60606003805461078390612767565b80601f01602080910402602001604051908101604052809291908181526020018280546107af90612767565b80156107fa5780601f106107d1576101008083540402835291602001916107fa565b820191905f5260205f20905b8154815290600101906020018083116107dd57829003601f168201915b5050505050905090565b5f8061080e61180e565b905061081b818585611815565b600191505092915050565b61082e61180e565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146108bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b29061271c565b60405180910390fd5b601982111580156108cd575060198111155b61090c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090390612807565b60405180910390fd5b81600a8190555080600b819055505050565b5f600254905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f1935050505015801561098a573d5f803e3d5ffd5b50565b60095481565b5f8061099d61180e565b90506109aa8582856119d8565b6109b5858585611a63565b60019150509392505050565b600b5481565b5f6012905090565b5f806109d961180e565b9050610a6981858560015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610a649190612852565b611815565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600a5481565b5f610aa830610fa3565b90505f8103610ab75750610ded565b600954811115610ac75760095490505b5f4790505f600267ffffffffffffffff811115610ae757610ae6612885565b5b604051908082528060200260200182016040528015610b155781602001602082028036833780820191505090505b50905030815f81518110610b2c57610b2b6128b2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bc3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610be791906128f3565b81600181518110610bfb57610bfa6128b2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050610c5430737a250d5630b4cf539739df2c5dacb4c659f2488d85611815565b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947845f8430426040518663ffffffff1660e01b8152600401610ca9959493929190612a17565b5f604051808303815f87803b158015610cc0575f80fd5b505af1158015610cd2573d5f803e3d5ffd5b505050505f610cea8347611f7390919063ffffffff16565b90505f610d146064610d06600a85611f8890919063ffffffff16565b611f9d90919063ffffffff16565b9050610d298183611f7390919063ffffffff16565b91507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f19350505050158015610d8e573d5f803e3d5ffd5b5073a228b6de33d0fe0b39a4527f5a26e95879035e5a73ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015610de6573d5f803e3d5ffd5b5050505050505b565b610df761180e565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610e84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7b9061271c565b60405180910390fd5b5f600881905550565b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb7f00000000000000000000000000000000000000000000000000000000000000008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610f039190612333565b602060405180830381865afa158015610f1e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f429190612a83565b6040518363ffffffff1660e01b8152600401610f5f929190612aae565b6020604051808303815f875af1158015610f7b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f9f9190612aff565b5050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610ff061180e565b73ffffffffffffffffffffffffffffffffffffffff1661100e6112a6565b73ffffffffffffffffffffffffffffffffffffffff1614611064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105b90612b74565b60405180910390fd5b61106d5f611fb2565b565b61107761180e565b73ffffffffffffffffffffffffffffffffffffffff166110956112a6565b73ffffffffffffffffffffffffffffffffffffffff16146110eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e290612b74565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611148573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061116c91906128f3565b73ffffffffffffffffffffffffffffffffffffffff1663e6a4390530737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111e5573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061120991906128f3565b6040518363ffffffff1660e01b8152600401611226929190612b92565b602060405180830381865afa158015611241573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061126591906128f3565b60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546112dd90612767565b80601f016020809104026020016040519081016040528092919081815260200182805461130990612767565b80156113545780601f1061132b57610100808354040283529160200191611354565b820191905f5260205f20905b81548152906001019060200180831161133757829003601f168201915b5050505050905090565b5f8061136861180e565b90505f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905083811015611429576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142090612c29565b60405180910390fd5b6114368286868403611815565b60019250505092915050565b5f8061144c61180e565b9050611459818585611a63565b600191505092915050565b60075481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60085481565b6114fa61180e565b73ffffffffffffffffffffffffffffffffffffffff166115186112a6565b73ffffffffffffffffffffffffffffffffffffffff161461156e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156590612b74565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036115dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d390612cb7565b60405180910390fd5b6115e581611fb2565b50565b6115f061180e565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff161461167d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116749061271c565b60405180910390fd5b6116ad620186a061169f600161169161091e565b611f8890919063ffffffff16565b611f9d90919063ffffffff16565b8110156116ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e690612d45565b60405180910390fd5b61171d606461170f600261170161091e565b611f8890919063ffffffff16565b611f9d90919063ffffffff16565b81111561175f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175690612dd3565b60405180910390fd5b8060098190555050565b61177161180e565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146117fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f59061271c565b60405180910390fd5b5f6008819055505f600781905550565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611883576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187a90612e61565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e890612eef565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516119cb9190612515565b60405180910390a3505050565b5f6119e3848461146a565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611a5d5781811015611a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4690612f57565b60405180910390fd5b611a5c8484848403611815565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ad1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac890612fe5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3690613073565b60405180910390fd5b5f8111611b81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7890613101565b60405180910390fd5b5f600d5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611c1d5750600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b90505f73ffffffffffffffffffffffffffffffffffffffff1660065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141580611c785750805b611cb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cae90613169565b60405180910390fd5b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161490505f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161490508080611d665750815b8015611d7357505f600754115b8015611d7d575082155b15611dc857600754841115611dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbe9061321d565b60405180910390fd5b5b81158015611dd757505f600854115b8015611de1575082155b15611e3f5760085484611df387610fa3565b611dfd9190612852565b1115611e3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e35906132d1565b60405180910390fd5b5b5f81611e4d57600b54611e51565b600a545b90505f811115611f5f575f611e6530610fa3565b90506009548110158015611e855750600c5f9054906101000a900460ff16155b8015611e8e5750835b8015611e98575084155b15611ed9576001600c5f6101000a81548160ff021916908315150217905550611ebf610a9e565b5f600c5f6101000a81548160ff0219169083151502179055505b84158015611ef35750600c5f9054906101000a900460ff16155b8015611f0457508280611f035750835b5b15611f5d575f611f306064611f22858a611f8890919063ffffffff16565b611f9d90919063ffffffff16565b90505f811115611f4657611f45893083612075565b5b611f598188611f7390919063ffffffff16565b9650505b505b611f6a878787612075565b50505050505050565b5f8183611f8091906132ef565b905092915050565b5f8183611f959190613322565b905092915050565b5f8183611faa9190613390565b905092915050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120da90613430565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612151576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612148906134be565b60405180910390fd5b61215c8383836122ea565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156121df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d69061354c565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461226d9190612852565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516122d19190612515565b60405180910390a36122e48484846122ef565b50505050565b505050565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61231d826122f4565b9050919050565b61232d81612313565b82525050565b5f6020820190506123465f830184612324565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612383578082015181840152602081019050612368565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6123a88261234c565b6123b28185612356565b93506123c2818560208601612366565b6123cb8161238e565b840191505092915050565b5f6020820190508181035f8301526123ee818461239e565b905092915050565b5f80fd5b61240381612313565b811461240d575f80fd5b50565b5f8135905061241e816123fa565b92915050565b5f819050919050565b61243681612424565b8114612440575f80fd5b50565b5f813590506124518161242d565b92915050565b5f806040838503121561246d5761246c6123f6565b5b5f61247a85828601612410565b925050602061248b85828601612443565b9150509250929050565b5f8115159050919050565b6124a981612495565b82525050565b5f6020820190506124c25f8301846124a0565b92915050565b5f80604083850312156124de576124dd6123f6565b5b5f6124eb85828601612443565b92505060206124fc85828601612443565b9150509250929050565b61250f81612424565b82525050565b5f6020820190506125285f830184612506565b92915050565b5f805f60608486031215612545576125446123f6565b5b5f61255286828701612410565b935050602061256386828701612410565b925050604061257486828701612443565b9150509250925092565b5f60ff82169050919050565b6125938161257e565b82525050565b5f6020820190506125ac5f83018461258a565b92915050565b5f6125bc82612313565b9050919050565b6125cc816125b2565b81146125d6575f80fd5b50565b5f813590506125e7816125c3565b92915050565b5f60208284031215612602576126016123f6565b5b5f61260f848285016125d9565b91505092915050565b5f6020828403121561262d5761262c6123f6565b5b5f61263a84828501612410565b91505092915050565b5f8060408385031215612659576126586123f6565b5b5f61266685828601612410565b925050602061267785828601612410565b9150509250929050565b5f60208284031215612696576126956123f6565b5b5f6126a384828501612443565b91505092915050565b7f43616c6c6572206973206e6f74207468652066656541646472206164647265735f8201527f732e000000000000000000000000000000000000000000000000000000000000602082015250565b5f612706602283612356565b9150612711826126ac565b604082019050919050565b5f6020820190508181035f830152612733816126fa565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061277e57607f821691505b6020821081036127915761279061273a565b5b50919050565b7f417474656d7074696e6720746f207365742066656520686967686572207468615f8201527f6e20696e697469616c206665652e000000000000000000000000000000000000602082015250565b5f6127f1602e83612356565b91506127fc82612797565b604082019050919050565b5f6020820190508181035f83015261281e816127e5565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61285c82612424565b915061286783612424565b925082820190508082111561287f5761287e612825565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506128ed816123fa565b92915050565b5f60208284031215612908576129076123f6565b5b5f612915848285016128df565b91505092915050565b5f819050919050565b5f819050919050565b5f61294a6129456129408461291e565b612927565b612424565b9050919050565b61295a81612930565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61299281612313565b82525050565b5f6129a38383612989565b60208301905092915050565b5f602082019050919050565b5f6129c582612960565b6129cf818561296a565b93506129da8361297a565b805f5b83811015612a0a5781516129f18882612998565b97506129fc836129af565b9250506001810190506129dd565b5085935050505092915050565b5f60a082019050612a2a5f830188612506565b612a376020830187612951565b8181036040830152612a4981866129bb565b9050612a586060830185612324565b612a656080830184612506565b9695505050505050565b5f81519050612a7d8161242d565b92915050565b5f60208284031215612a9857612a976123f6565b5b5f612aa584828501612a6f565b91505092915050565b5f604082019050612ac15f830185612324565b612ace6020830184612506565b9392505050565b612ade81612495565b8114612ae8575f80fd5b50565b5f81519050612af981612ad5565b92915050565b5f60208284031215612b1457612b136123f6565b5b5f612b2184828501612aeb565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f612b5e602083612356565b9150612b6982612b2a565b602082019050919050565b5f6020820190508181035f830152612b8b81612b52565b9050919050565b5f604082019050612ba55f830185612324565b612bb26020830184612324565b9392505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f612c13602583612356565b9150612c1e82612bb9565b604082019050919050565b5f6020820190508181035f830152612c4081612c07565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f612ca1602683612356565b9150612cac82612c47565b604082019050919050565b5f6020820190508181035f830152612cce81612c95565b9050919050565b7f53776170207468726573686f6c642063616e6e6f74206265206c6f77657220745f8201527f68616e20302e3030312520746f74616c20737570706c792e0000000000000000602082015250565b5f612d2f603883612356565b9150612d3a82612cd5565b604082019050919050565b5f6020820190508181035f830152612d5c81612d23565b9050919050565b7f53776170207468726573686f6c642063616e6e6f7420626520686967686572205f8201527f7468616e20322520746f74616c20737570706c792e0000000000000000000000602082015250565b5f612dbd603583612356565b9150612dc882612d63565b604082019050919050565b5f6020820190508181035f830152612dea81612db1565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f612e4b602483612356565b9150612e5682612df1565b604082019050919050565b5f6020820190508181035f830152612e7881612e3f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f612ed9602283612356565b9150612ee482612e7f565b604082019050919050565b5f6020820190508181035f830152612f0681612ecd565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f612f41601d83612356565b9150612f4c82612f0d565b602082019050919050565b5f6020820190508181035f830152612f6e81612f35565b9050919050565b7f5472616e736665722066726f6d20746865207a65726f2061646472657373206e5f8201527f6f7420616c6c6f7765642e000000000000000000000000000000000000000000602082015250565b5f612fcf602b83612356565b9150612fda82612f75565b604082019050919050565b5f6020820190508181035f830152612ffc81612fc3565b9050919050565b7f5472616e7366657220746f20746865207a65726f2061646472657373206e6f745f8201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000602082015250565b5f61305d602983612356565b915061306882613003565b604082019050919050565b5f6020820190508181035f83015261308a81613051565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f2e00000000000000000000000000000000000000000000602082015250565b5f6130eb602a83612356565b91506130f682613091565b604082019050919050565b5f6020820190508181035f830152613118816130df565b9050919050565b7f4c69717569646974792070616972206e6f742079657420637265617465642e005f82015250565b5f613153601f83612356565b915061315e8261311f565b602082019050919050565b5f6020820190508181035f83015261318081613147565b9050919050565b7f537761702076616c75652065786365656473206d6178207377617020616d6f755f8201527f6e742c2074727920616761696e2077697468206c65737320737761702076616c60208201527f75652e0000000000000000000000000000000000000000000000000000000000604082015250565b5f613207604383612356565b915061321282613187565b606082019050919050565b5f6020820190508181035f830152613234816131fb565b9050919050565b7f42616c616e63652065786365656473206d617820686f6c64696e677320616d6f5f8201527f756e742c20636f6e7369646572207573696e672061207365636f6e642077616c60208201527f6c65742e00000000000000000000000000000000000000000000000000000000604082015250565b5f6132bb604483612356565b91506132c68261323b565b606082019050919050565b5f6020820190508181035f8301526132e8816132af565b9050919050565b5f6132f982612424565b915061330483612424565b925082820390508181111561331c5761331b612825565b5b92915050565b5f61332c82612424565b915061333783612424565b925082820261334581612424565b9150828204841483151761335c5761335b612825565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61339a82612424565b91506133a583612424565b9250826133b5576133b4613363565b5b828204905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61341a602583612356565b9150613425826133c0565b604082019050919050565b5f6020820190508181035f8301526134478161340e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6134a8602383612356565b91506134b38261344e565b604082019050919050565b5f6020820190508181035f8301526134d58161349c565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613536602683612356565b9150613541826134dc565b604082019050919050565b5f6020820190508181035f8301526135638161352a565b905091905056fea264697066735822122094cb781f7a43ee5c694f407a2d030620862380036c8a172cc68695c9e332037b64736f6c63430008160033
Deployed Bytecode
0x6080604052600436106101d0575f3560e01c80635564ad71116100f6578063a457c2d711610094578063e54f4faa11610063578063e54f4faa14610621578063f2fde38b1461064b578063f442d3fb14610673578063f928364c1461069b576101d7565b8063a457c2d714610543578063a9059cbb1461057f578063c4918b4e146105bb578063dd62ed3e146105e5576101d7565b8063715018a6116100d0578063715018a6146104c35780638a8c523c146104d95780638da5cb5b146104ef57806395d89b4114610519576101d7565b80635564ad711461044957806362aaff3a1461045f57806370a0823114610487576101d7565b80631ffc29981161016e578063395093511161013d57806339509351146103a357806339e7fddc146103df578063470624021461040957806354cf2aeb14610433576101d7565b80631ffc2998146102e957806323b872dd146103135780632b14ca561461034f578063313ce56714610379576101d7565b8063095ea7b3116101aa578063095ea7b3146102455780630b78f9c01461028157806318160ddd146102a95780631fac6a3b146102d3576101d7565b8063056939da146101db578063063be69e1461020557806306fdde031461021b576101d7565b366101d757005b5f80fd5b3480156101e6575f80fd5b506101ef6106b1565b6040516101fc9190612333565b60405180910390f35b348015610210575f80fd5b506102196106d6565b005b348015610226575f80fd5b5061022f610774565b60405161023c91906123d6565b60405180910390f35b348015610250575f80fd5b5061026b60048036038101906102669190612457565b610804565b60405161027891906124af565b60405180910390f35b34801561028c575f80fd5b506102a760048036038101906102a291906124c8565b610826565b005b3480156102b4575f80fd5b506102bd61091e565b6040516102ca9190612515565b60405180910390f35b3480156102de575f80fd5b506102e7610927565b005b3480156102f4575f80fd5b506102fd61098d565b60405161030a9190612515565b60405180910390f35b34801561031e575f80fd5b506103396004803603810190610334919061252e565b610993565b60405161034691906124af565b60405180910390f35b34801561035a575f80fd5b506103636109c1565b6040516103709190612515565b60405180910390f35b348015610384575f80fd5b5061038d6109c7565b60405161039a9190612599565b60405180910390f35b3480156103ae575f80fd5b506103c960048036038101906103c49190612457565b6109cf565b6040516103d691906124af565b60405180910390f35b3480156103ea575f80fd5b506103f3610a74565b6040516104009190612333565b60405180910390f35b348015610414575f80fd5b5061041d610a98565b60405161042a9190612515565b60405180910390f35b34801561043e575f80fd5b50610447610a9e565b005b348015610454575f80fd5b5061045d610def565b005b34801561046a575f80fd5b50610485600480360381019061048091906125ed565b610e8d565b005b348015610492575f80fd5b506104ad60048036038101906104a89190612618565b610fa3565b6040516104ba9190612515565b60405180910390f35b3480156104ce575f80fd5b506104d7610fe8565b005b3480156104e4575f80fd5b506104ed61106f565b005b3480156104fa575f80fd5b506105036112a6565b6040516105109190612333565b60405180910390f35b348015610524575f80fd5b5061052d6112ce565b60405161053a91906123d6565b60405180910390f35b34801561054e575f80fd5b5061056960048036038101906105649190612457565b61135e565b60405161057691906124af565b60405180910390f35b34801561058a575f80fd5b506105a560048036038101906105a09190612457565b611442565b6040516105b291906124af565b60405180910390f35b3480156105c6575f80fd5b506105cf611464565b6040516105dc9190612515565b60405180910390f35b3480156105f0575f80fd5b5061060b60048036038101906106069190612643565b61146a565b6040516106189190612515565b60405180910390f35b34801561062c575f80fd5b506106356114ec565b6040516106429190612515565b60405180910390f35b348015610656575f80fd5b50610671600480360381019061066c9190612618565b6114f2565b005b34801561067e575f80fd5b5061069960048036038101906106949190612681565b6115e8565b005b3480156106a6575f80fd5b506106af611769565b005b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6106de61180e565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000f9417f9ba59b0431cfd973071134b23a48e0e60273ffffffffffffffffffffffffffffffffffffffff161461076b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107629061271c565b60405180910390fd5b5f600781905550565b60606003805461078390612767565b80601f01602080910402602001604051908101604052809291908181526020018280546107af90612767565b80156107fa5780601f106107d1576101008083540402835291602001916107fa565b820191905f5260205f20905b8154815290600101906020018083116107dd57829003601f168201915b5050505050905090565b5f8061080e61180e565b905061081b818585611815565b600191505092915050565b61082e61180e565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000f9417f9ba59b0431cfd973071134b23a48e0e60273ffffffffffffffffffffffffffffffffffffffff16146108bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b29061271c565b60405180910390fd5b601982111580156108cd575060198111155b61090c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090390612807565b60405180910390fd5b81600a8190555080600b819055505050565b5f600254905090565b7f000000000000000000000000f9417f9ba59b0431cfd973071134b23a48e0e60273ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f1935050505015801561098a573d5f803e3d5ffd5b50565b60095481565b5f8061099d61180e565b90506109aa8582856119d8565b6109b5858585611a63565b60019150509392505050565b600b5481565b5f6012905090565b5f806109d961180e565b9050610a6981858560015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610a649190612852565b611815565b600191505092915050565b7f000000000000000000000000f9417f9ba59b0431cfd973071134b23a48e0e60281565b600a5481565b5f610aa830610fa3565b90505f8103610ab75750610ded565b600954811115610ac75760095490505b5f4790505f600267ffffffffffffffff811115610ae757610ae6612885565b5b604051908082528060200260200182016040528015610b155781602001602082028036833780820191505090505b50905030815f81518110610b2c57610b2b6128b2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bc3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610be791906128f3565b81600181518110610bfb57610bfa6128b2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050610c5430737a250d5630b4cf539739df2c5dacb4c659f2488d85611815565b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947845f8430426040518663ffffffff1660e01b8152600401610ca9959493929190612a17565b5f604051808303815f87803b158015610cc0575f80fd5b505af1158015610cd2573d5f803e3d5ffd5b505050505f610cea8347611f7390919063ffffffff16565b90505f610d146064610d06600a85611f8890919063ffffffff16565b611f9d90919063ffffffff16565b9050610d298183611f7390919063ffffffff16565b91507f000000000000000000000000f9417f9ba59b0431cfd973071134b23a48e0e60273ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f19350505050158015610d8e573d5f803e3d5ffd5b5073a228b6de33d0fe0b39a4527f5a26e95879035e5a73ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015610de6573d5f803e3d5ffd5b5050505050505b565b610df761180e565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000f9417f9ba59b0431cfd973071134b23a48e0e60273ffffffffffffffffffffffffffffffffffffffff1614610e84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7b9061271c565b60405180910390fd5b5f600881905550565b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb7f000000000000000000000000f9417f9ba59b0431cfd973071134b23a48e0e6028373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610f039190612333565b602060405180830381865afa158015610f1e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f429190612a83565b6040518363ffffffff1660e01b8152600401610f5f929190612aae565b6020604051808303815f875af1158015610f7b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f9f9190612aff565b5050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610ff061180e565b73ffffffffffffffffffffffffffffffffffffffff1661100e6112a6565b73ffffffffffffffffffffffffffffffffffffffff1614611064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105b90612b74565b60405180910390fd5b61106d5f611fb2565b565b61107761180e565b73ffffffffffffffffffffffffffffffffffffffff166110956112a6565b73ffffffffffffffffffffffffffffffffffffffff16146110eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e290612b74565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611148573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061116c91906128f3565b73ffffffffffffffffffffffffffffffffffffffff1663e6a4390530737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111e5573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061120991906128f3565b6040518363ffffffff1660e01b8152600401611226929190612b92565b602060405180830381865afa158015611241573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061126591906128f3565b60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546112dd90612767565b80601f016020809104026020016040519081016040528092919081815260200182805461130990612767565b80156113545780601f1061132b57610100808354040283529160200191611354565b820191905f5260205f20905b81548152906001019060200180831161133757829003601f168201915b5050505050905090565b5f8061136861180e565b90505f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905083811015611429576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142090612c29565b60405180910390fd5b6114368286868403611815565b60019250505092915050565b5f8061144c61180e565b9050611459818585611a63565b600191505092915050565b60075481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60085481565b6114fa61180e565b73ffffffffffffffffffffffffffffffffffffffff166115186112a6565b73ffffffffffffffffffffffffffffffffffffffff161461156e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156590612b74565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036115dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d390612cb7565b60405180910390fd5b6115e581611fb2565b50565b6115f061180e565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000f9417f9ba59b0431cfd973071134b23a48e0e60273ffffffffffffffffffffffffffffffffffffffff161461167d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116749061271c565b60405180910390fd5b6116ad620186a061169f600161169161091e565b611f8890919063ffffffff16565b611f9d90919063ffffffff16565b8110156116ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e690612d45565b60405180910390fd5b61171d606461170f600261170161091e565b611f8890919063ffffffff16565b611f9d90919063ffffffff16565b81111561175f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175690612dd3565b60405180910390fd5b8060098190555050565b61177161180e565b73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000f9417f9ba59b0431cfd973071134b23a48e0e60273ffffffffffffffffffffffffffffffffffffffff16146117fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f59061271c565b60405180910390fd5b5f6008819055505f600781905550565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611883576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187a90612e61565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e890612eef565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516119cb9190612515565b60405180910390a3505050565b5f6119e3848461146a565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611a5d5781811015611a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4690612f57565b60405180910390fd5b611a5c8484848403611815565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ad1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac890612fe5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3690613073565b60405180910390fd5b5f8111611b81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7890613101565b60405180910390fd5b5f600d5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611c1d5750600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b90505f73ffffffffffffffffffffffffffffffffffffffff1660065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141580611c785750805b611cb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cae90613169565b60405180910390fd5b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161490505f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161490508080611d665750815b8015611d7357505f600754115b8015611d7d575082155b15611dc857600754841115611dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbe9061321d565b60405180910390fd5b5b81158015611dd757505f600854115b8015611de1575082155b15611e3f5760085484611df387610fa3565b611dfd9190612852565b1115611e3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e35906132d1565b60405180910390fd5b5b5f81611e4d57600b54611e51565b600a545b90505f811115611f5f575f611e6530610fa3565b90506009548110158015611e855750600c5f9054906101000a900460ff16155b8015611e8e5750835b8015611e98575084155b15611ed9576001600c5f6101000a81548160ff021916908315150217905550611ebf610a9e565b5f600c5f6101000a81548160ff0219169083151502179055505b84158015611ef35750600c5f9054906101000a900460ff16155b8015611f0457508280611f035750835b5b15611f5d575f611f306064611f22858a611f8890919063ffffffff16565b611f9d90919063ffffffff16565b90505f811115611f4657611f45893083612075565b5b611f598188611f7390919063ffffffff16565b9650505b505b611f6a878787612075565b50505050505050565b5f8183611f8091906132ef565b905092915050565b5f8183611f959190613322565b905092915050565b5f8183611faa9190613390565b905092915050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120da90613430565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612151576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612148906134be565b60405180910390fd5b61215c8383836122ea565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156121df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d69061354c565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461226d9190612852565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516122d19190612515565b60405180910390a36122e48484846122ef565b50505050565b505050565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61231d826122f4565b9050919050565b61232d81612313565b82525050565b5f6020820190506123465f830184612324565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612383578082015181840152602081019050612368565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6123a88261234c565b6123b28185612356565b93506123c2818560208601612366565b6123cb8161238e565b840191505092915050565b5f6020820190508181035f8301526123ee818461239e565b905092915050565b5f80fd5b61240381612313565b811461240d575f80fd5b50565b5f8135905061241e816123fa565b92915050565b5f819050919050565b61243681612424565b8114612440575f80fd5b50565b5f813590506124518161242d565b92915050565b5f806040838503121561246d5761246c6123f6565b5b5f61247a85828601612410565b925050602061248b85828601612443565b9150509250929050565b5f8115159050919050565b6124a981612495565b82525050565b5f6020820190506124c25f8301846124a0565b92915050565b5f80604083850312156124de576124dd6123f6565b5b5f6124eb85828601612443565b92505060206124fc85828601612443565b9150509250929050565b61250f81612424565b82525050565b5f6020820190506125285f830184612506565b92915050565b5f805f60608486031215612545576125446123f6565b5b5f61255286828701612410565b935050602061256386828701612410565b925050604061257486828701612443565b9150509250925092565b5f60ff82169050919050565b6125938161257e565b82525050565b5f6020820190506125ac5f83018461258a565b92915050565b5f6125bc82612313565b9050919050565b6125cc816125b2565b81146125d6575f80fd5b50565b5f813590506125e7816125c3565b92915050565b5f60208284031215612602576126016123f6565b5b5f61260f848285016125d9565b91505092915050565b5f6020828403121561262d5761262c6123f6565b5b5f61263a84828501612410565b91505092915050565b5f8060408385031215612659576126586123f6565b5b5f61266685828601612410565b925050602061267785828601612410565b9150509250929050565b5f60208284031215612696576126956123f6565b5b5f6126a384828501612443565b91505092915050565b7f43616c6c6572206973206e6f74207468652066656541646472206164647265735f8201527f732e000000000000000000000000000000000000000000000000000000000000602082015250565b5f612706602283612356565b9150612711826126ac565b604082019050919050565b5f6020820190508181035f830152612733816126fa565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061277e57607f821691505b6020821081036127915761279061273a565b5b50919050565b7f417474656d7074696e6720746f207365742066656520686967686572207468615f8201527f6e20696e697469616c206665652e000000000000000000000000000000000000602082015250565b5f6127f1602e83612356565b91506127fc82612797565b604082019050919050565b5f6020820190508181035f83015261281e816127e5565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61285c82612424565b915061286783612424565b925082820190508082111561287f5761287e612825565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506128ed816123fa565b92915050565b5f60208284031215612908576129076123f6565b5b5f612915848285016128df565b91505092915050565b5f819050919050565b5f819050919050565b5f61294a6129456129408461291e565b612927565b612424565b9050919050565b61295a81612930565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61299281612313565b82525050565b5f6129a38383612989565b60208301905092915050565b5f602082019050919050565b5f6129c582612960565b6129cf818561296a565b93506129da8361297a565b805f5b83811015612a0a5781516129f18882612998565b97506129fc836129af565b9250506001810190506129dd565b5085935050505092915050565b5f60a082019050612a2a5f830188612506565b612a376020830187612951565b8181036040830152612a4981866129bb565b9050612a586060830185612324565b612a656080830184612506565b9695505050505050565b5f81519050612a7d8161242d565b92915050565b5f60208284031215612a9857612a976123f6565b5b5f612aa584828501612a6f565b91505092915050565b5f604082019050612ac15f830185612324565b612ace6020830184612506565b9392505050565b612ade81612495565b8114612ae8575f80fd5b50565b5f81519050612af981612ad5565b92915050565b5f60208284031215612b1457612b136123f6565b5b5f612b2184828501612aeb565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f612b5e602083612356565b9150612b6982612b2a565b602082019050919050565b5f6020820190508181035f830152612b8b81612b52565b9050919050565b5f604082019050612ba55f830185612324565b612bb26020830184612324565b9392505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f612c13602583612356565b9150612c1e82612bb9565b604082019050919050565b5f6020820190508181035f830152612c4081612c07565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f612ca1602683612356565b9150612cac82612c47565b604082019050919050565b5f6020820190508181035f830152612cce81612c95565b9050919050565b7f53776170207468726573686f6c642063616e6e6f74206265206c6f77657220745f8201527f68616e20302e3030312520746f74616c20737570706c792e0000000000000000602082015250565b5f612d2f603883612356565b9150612d3a82612cd5565b604082019050919050565b5f6020820190508181035f830152612d5c81612d23565b9050919050565b7f53776170207468726573686f6c642063616e6e6f7420626520686967686572205f8201527f7468616e20322520746f74616c20737570706c792e0000000000000000000000602082015250565b5f612dbd603583612356565b9150612dc882612d63565b604082019050919050565b5f6020820190508181035f830152612dea81612db1565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f612e4b602483612356565b9150612e5682612df1565b604082019050919050565b5f6020820190508181035f830152612e7881612e3f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f612ed9602283612356565b9150612ee482612e7f565b604082019050919050565b5f6020820190508181035f830152612f0681612ecd565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f612f41601d83612356565b9150612f4c82612f0d565b602082019050919050565b5f6020820190508181035f830152612f6e81612f35565b9050919050565b7f5472616e736665722066726f6d20746865207a65726f2061646472657373206e5f8201527f6f7420616c6c6f7765642e000000000000000000000000000000000000000000602082015250565b5f612fcf602b83612356565b9150612fda82612f75565b604082019050919050565b5f6020820190508181035f830152612ffc81612fc3565b9050919050565b7f5472616e7366657220746f20746865207a65726f2061646472657373206e6f745f8201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000602082015250565b5f61305d602983612356565b915061306882613003565b604082019050919050565b5f6020820190508181035f83015261308a81613051565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f2e00000000000000000000000000000000000000000000602082015250565b5f6130eb602a83612356565b91506130f682613091565b604082019050919050565b5f6020820190508181035f830152613118816130df565b9050919050565b7f4c69717569646974792070616972206e6f742079657420637265617465642e005f82015250565b5f613153601f83612356565b915061315e8261311f565b602082019050919050565b5f6020820190508181035f83015261318081613147565b9050919050565b7f537761702076616c75652065786365656473206d6178207377617020616d6f755f8201527f6e742c2074727920616761696e2077697468206c65737320737761702076616c60208201527f75652e0000000000000000000000000000000000000000000000000000000000604082015250565b5f613207604383612356565b915061321282613187565b606082019050919050565b5f6020820190508181035f830152613234816131fb565b9050919050565b7f42616c616e63652065786365656473206d617820686f6c64696e677320616d6f5f8201527f756e742c20636f6e7369646572207573696e672061207365636f6e642077616c60208201527f6c65742e00000000000000000000000000000000000000000000000000000000604082015250565b5f6132bb604483612356565b91506132c68261323b565b606082019050919050565b5f6020820190508181035f8301526132e8816132af565b9050919050565b5f6132f982612424565b915061330483612424565b925082820390508181111561331c5761331b612825565b5b92915050565b5f61332c82612424565b915061333783612424565b925082820261334581612424565b9150828204841483151761335c5761335b612825565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61339a82612424565b91506133a583612424565b9250826133b5576133b4613363565b5b828204905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61341a602583612356565b9150613425826133c0565b604082019050919050565b5f6020820190508181035f8301526134478161340e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6134a8602383612356565b91506134b38261344e565b604082019050919050565b5f6020820190508181035f8301526134d58161349c565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613536602683612356565b9150613541826134dc565b604082019050919050565b5f6020820190508181035f8301526135638161352a565b905091905056fea264697066735822122094cb781f7a43ee5c694f407a2d030620862380036c8a172cc68695c9e332037b64736f6c63430008160033
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.