ERC-20
Overview
Max Total Supply
10,000,000,000 CULTTER
Holders
15
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
129,618,467.77037735 CULTTERValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
TOKEN
Compiler Version
v0.8.15+commit.e14f2714
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: Unlicensed pragma solidity ^0.8.4; interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, 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 sender, address recipient, 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); } library SafeMath { function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } 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 mod(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; } } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } library Address { function isContract(address account) internal view returns (bool) { uint256 size; assembly { size := extcodesize(account) } return size > 0; } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { if (returndata.length > 0) { assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } abstract contract Ownable is Context { address internal _owner; address private _previousOwner; uint256 public _lockTime; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { _owner = _msgSender(); emit OwnershipTransferred(address(0), _owner); } 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 { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } //Locks the contract for owner for the amount of time provided function lock(uint256 time) public virtual onlyOwner { _previousOwner = _owner; _owner = address(0); _lockTime = time; emit OwnershipTransferred(_owner, address(0)); } //Unlocks the contract for owner when _lockTime is exceeds function unlock() public virtual { require(_previousOwner == msg.sender, "You don't have permission to unlock."); require(block.timestamp > _lockTime , "Contract is locked."); emit OwnershipTransferred(_owner, _previousOwner); _owner = _previousOwner; } } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract TOKEN is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isExcluded; address[] private _excluded; address public _marketingWalletAddress; // TODO - team wallet here address public _burnAddress = 0x000000000000000000000000000000000000dEaD; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal; uint256 private _rTotal; uint256 private _tFeeTotal; string private _name; string private _symbol; uint256 private _decimals; // Buy tax uint256 private _buyTaxFee = 1; uint256 private _buyLiquidityFee = 3; uint256 private _buyMarketingFee = 1; // Sell tax uint256 private _sellTaxFee = 1; uint256 private _sellLiquidityFee = 3; uint256 private _sellMarketingFee = 1; uint256 public _taxFee = _buyTaxFee; uint256 public _liquidityFee = _buyLiquidityFee; uint256 public _marketingFee = _buyMarketingFee; uint256 private _previousTaxFee = _taxFee; uint256 private _previousMarketingFee = _liquidityFee; uint256 private _previousLiquidityFee = _marketingFee; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; uint256 public numTokensSellToAddToLiquidity; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor () { _name = "Culthereum"; _symbol = "CULTTER"; _decimals = 9; _tTotal = 10000000000 * 10 ** _decimals; _rTotal = (MAX - (MAX % _tTotal)); numTokensSellToAddToLiquidity = 1000000 * 10 ** _decimals; _marketingWalletAddress = 0x5B4E6A5d90eB9ac58C0559772c6F5df67CB4fe15; _rOwned[_msgSender()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // Create a uniswap pair for this new token uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); // set the rest of the contract variables uniswapV2Router = _uniswapV2Router; //exclude owner and this contract from fee _isExcludedFromFee[_msgSender()] = true; _isExcludedFromFee[address(this)] = true; //exclude from rewards _isExcluded[_burnAddress] = true; _isExcluded[uniswapV2Pair] = true; _owner = _msgSender(); emit Transfer(address(0), _msgSender(), _tTotal); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint256) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function deliver(uint256 tAmount) public { address sender = _msgSender(); require(!_isExcluded[sender], "Excluded addresses cannot call this function"); (uint256 rAmount,,,,,,) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rTotal = _rTotal.sub(rAmount); _tFeeTotal = _tFeeTotal.add(tAmount); } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount,,,,,,) = _getValues(tAmount); return rAmount; } else { (,uint256 rTransferAmount,,,,,) = _getValues(tAmount); return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeFromReward(address account) public onlyOwner() { require(!_isExcluded[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner() { require(_isExcluded[account], "Account is already included"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeMarketing(tMarketing); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function setSellFeePercent(uint256 tFee, uint256 lFee, uint256 mFee) external onlyOwner() { _sellTaxFee = tFee; _sellLiquidityFee = lFee; _sellMarketingFee = mFee; } function setBuyFeePercent(uint256 tFee, uint256 lFee, uint256 mFee) external onlyOwner() { _buyTaxFee = tFee; _buyLiquidityFee = lFee; _buyMarketingFee = mFee; } function setMarketingWalletAddress(address _addr) external onlyOwner { _marketingWalletAddress = _addr; } function setNumTokensSellToAddToLiquidity(uint256 amount) external onlyOwner { numTokensSellToAddToLiquidity = amount * 10 **_decimals; } function setRouterAddress(address newRouter) external onlyOwner { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(newRouter); uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; } function setSwapAndLiquifyEnabled(bool _enabled) external onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } //to recieve ETH from uniswapV2Router when swaping receive() external payable {} // to withdraw stucked ETH function withdrawStuckedFunds(uint amount) external onlyOwner{ // This is the current recommended method to use. (bool sent,) = _owner.call{value: amount}(""); require(sent, "Failed to send ETH"); } function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, tMarketing, _getRate()); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity, tMarketing); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256) { uint256 tFee = calculateTaxFee(tAmount); uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tMarketing = calculateMarketingFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity).sub(tMarketing); return (tTransferAmount, tFee, tLiquidity, tMarketing); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rLiquidity = tLiquidity.mul(currentRate); uint256 rMarketing = tMarketing.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity).sub(rMarketing); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _takeLiquidity(uint256 tLiquidity) private { uint256 currentRate = _getRate(); uint256 rLiquidity = tLiquidity.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity); if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity); } function _takeMarketing(uint256 tMarketing) private { uint256 currentRate = _getRate(); uint256 rMarketing = tMarketing.mul(currentRate); _rOwned[_marketingWalletAddress] = _rOwned[_marketingWalletAddress].add(rMarketing); if(_isExcluded[_marketingWalletAddress]) _tOwned[_marketingWalletAddress] = _tOwned[_marketingWalletAddress].add(tMarketing); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_taxFee).div( 10**2 ); } function calculateMarketingFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_marketingFee).div( 10**2 ); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_liquidityFee).div( 10**2 ); } function removeAllFee() private { _previousTaxFee = _taxFee; _previousMarketingFee = _marketingFee; _previousLiquidityFee = _liquidityFee; _taxFee = 0; _marketingFee = 0; _liquidityFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _marketingFee = _previousMarketingFee; _liquidityFee = _previousLiquidityFee; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function _approve(address owner, address spender, uint256 amount) private { 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 _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); uint256 contractTokenBalance = balanceOf(address(this)); bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity; if ( overMinTokenBalance && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled ) { contractTokenBalance = numTokensSellToAddToLiquidity; swapAndLiquify(contractTokenBalance); } bool takeFee = true; if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){ takeFee = false; } else { if (from == uniswapV2Pair) { // Buy _taxFee = _buyTaxFee; _liquidityFee = _buyLiquidityFee; _marketingFee = _buyMarketingFee; } else if (to == uniswapV2Pair){ // Sell _taxFee = _sellTaxFee; _liquidityFee = _sellLiquidityFee; _marketingFee = _sellMarketingFee; } else { // Transfer _taxFee = _buyTaxFee; _liquidityFee = _buyLiquidityFee; _marketingFee = _buyMarketingFee; } } _tokenTransfer(from,to,amount,takeFee); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { uint256 tFee = _marketingFee.add(_liquidityFee); uint256 marketingTokens = contractTokenBalance.div(tFee).mul(_marketingFee); uint256 liquidityTokens = contractTokenBalance.sub(marketingTokens); tFee = _marketingFee.add(_liquidityFee.div(2)); uint256 half = liquidityTokens.div(2); uint256 otherHalf = liquidityTokens.sub(half); uint256 initialBalance = address(this).balance; uint256 swapTokens = marketingTokens.add(half); swapTokensForEth(swapTokens); uint256 newBalance = address(this).balance.sub(initialBalance); uint256 marketingFunds = newBalance.div(tFee).mul(_marketingFee); (bool success, ) = payable(_marketingWalletAddress).call{ value: marketingFunds, gas: 30000}(""); require(success, " _marketingWalletAddress transfer is reverted"); uint256 halfFunds = newBalance.div(tFee).mul(_liquidityFee.div(2)); addLiquidity(otherHalf, halfFunds); emit SwapAndLiquify(half, halfFunds, otherHalf); } function swapTokensForEth(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); } function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private { if(!takeFee) removeAllFee(); if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && !_isExcluded[recipient]) { _transferStandard(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } if(!takeFee) restoreAllFee(); } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeMarketing(tMarketing); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeMarketing(tMarketing); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeMarketing(tMarketing); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_burnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_lockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingWalletAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"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":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tFee","type":"uint256"},{"internalType":"uint256","name":"lFee","type":"uint256"},{"internalType":"uint256","name":"mFee","type":"uint256"}],"name":"setBuyFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setMarketingWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tFee","type":"uint256"},{"internalType":"uint256","name":"lFee","type":"uint256"},{"internalType":"uint256","name":"mFee","type":"uint256"}],"name":"setSellFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawStuckedFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405261dead600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160115560036012556001601355600160145560036015556001601655601154601755601254601855601354601955601754601a55601854601b55601954601c556001601e60156101000a81548160ff021916908315150217905550348015620000b157600080fd5b50620000c2620007b460201b60201c565b6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36040518060400160405280600a81526020017f43756c7468657265756d00000000000000000000000000000000000000000000815250600e9081620001c2919062000a36565b506040518060400160405280600781526020017f43554c5454455200000000000000000000000000000000000000000000000000815250600f908162000209919062000a36565b506009601081905550601054600a62000223919062000ca0565b6402540be40062000235919062000cf1565b600b81905550600b546000196200024d919062000d81565b6000196200025c919062000db9565b600c81905550601054600a62000273919062000ca0565b620f424062000283919062000cf1565b601f81905550735b4e6a5d90eb9ac58c0559772c6f5df67cb4fe15600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600c5460036000620002f5620007b460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000398573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003be919062000e5e565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000426573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044c919062000e5e565b6040518363ffffffff1660e01b81526004016200046b92919062000ea1565b6020604051808303816000875af11580156200048b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004b1919062000e5e565b601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016006600062000548620007b460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620006f5620007b460201b60201c565b6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000744620007b460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b54604051620007a5919062000edf565b60405180910390a35062000efc565b600033905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200083e57607f821691505b602082108103620008545762000853620007f6565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620008be7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200087f565b620008ca86836200087f565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000917620009116200090b84620008e2565b620008ec565b620008e2565b9050919050565b6000819050919050565b6200093383620008f6565b6200094b62000942826200091e565b8484546200088c565b825550505050565b600090565b6200096262000953565b6200096f81848462000928565b505050565b5b8181101562000997576200098b60008262000958565b60018101905062000975565b5050565b601f821115620009e657620009b0816200085a565b620009bb846200086f565b81016020851015620009cb578190505b620009e3620009da856200086f565b83018262000974565b50505b505050565b600082821c905092915050565b600062000a0b60001984600802620009eb565b1980831691505092915050565b600062000a268383620009f8565b9150826002028217905092915050565b62000a4182620007bc565b67ffffffffffffffff81111562000a5d5762000a5c620007c7565b5b62000a69825462000825565b62000a768282856200099b565b600060209050601f83116001811462000aae576000841562000a99578287015190505b62000aa5858262000a18565b86555062000b15565b601f19841662000abe866200085a565b60005b8281101562000ae85784890151825560018201915060208501945060208101905062000ac1565b8683101562000b08578489015162000b04601f891682620009f8565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000bab5780860481111562000b835762000b8262000b1d565b5b600185161562000b935780820291505b808102905062000ba38562000b4c565b945062000b63565b94509492505050565b60008262000bc6576001905062000c99565b8162000bd6576000905062000c99565b816001811462000bef576002811462000bfa5762000c30565b600191505062000c99565b60ff84111562000c0f5762000c0e62000b1d565b5b8360020a91508482111562000c295762000c2862000b1d565b5b5062000c99565b5060208310610133831016604e8410600b841016171562000c6a5782820a90508381111562000c645762000c6362000b1d565b5b62000c99565b62000c79848484600162000b59565b9250905081840481111562000c935762000c9262000b1d565b5b81810290505b9392505050565b600062000cad82620008e2565b915062000cba83620008e2565b925062000ce97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000bb4565b905092915050565b600062000cfe82620008e2565b915062000d0b83620008e2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000d475762000d4662000b1d565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d8e82620008e2565b915062000d9b83620008e2565b92508262000dae5762000dad62000d52565b5b828206905092915050565b600062000dc682620008e2565b915062000dd383620008e2565b92508282101562000de95762000de862000b1d565b5b828203905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000e268262000df9565b9050919050565b62000e388162000e19565b811462000e4457600080fd5b50565b60008151905062000e588162000e2d565b92915050565b60006020828403121562000e775762000e7662000df4565b5b600062000e878482850162000e47565b91505092915050565b62000e9b8162000e19565b82525050565b600060408201905062000eb8600083018562000e90565b62000ec7602083018462000e90565b9392505050565b62000ed981620008e2565b82525050565b600060208201905062000ef6600083018462000ece565b92915050565b615f148062000f0c6000396000f3fe6080604052600436106102605760003560e01c806352390c0211610144578063a9059cbb116100b6578063d12a76881161007a578063d12a76881461091b578063dd46706414610946578063dd62ed3e1461096f578063ea2f0b37146109ac578063f0f165af146109d5578063f2fde38b146109fe57610267565b8063a9059cbb14610838578063bd3900c014610875578063be19674b146108a0578063c49b9a80146108c9578063caea37b7146108f257610267565b806379af25a61161010857806379af25a61461072657806388f82020146107515780638da5cb5b1461078e57806395d89b41146107b9578063a457c2d7146107e4578063a69df4b51461082157610267565b806352390c02146106415780635342acb41461066a5780636bc87c3a146106a757806370a08231146106d2578063715018a61461070f57610267565b80633685d419116101dd57806341cb87fc116101a157806341cb87fc14610533578063437823ec1461055c5780634549b0391461058557806349bd5a5e146105c25780634a74bb02146105ed5780634cb80fd51461061857610267565b80633685d4191461044e57806339509351146104775780633b124fe7146104b45780633bd5d173146104df5780634144d9e41461050857610267565b806318160ddd1161022457806318160ddd1461035357806322976e0d1461037e57806323b872dd146103a95780632d838119146103e6578063313ce5671461042357610267565b806306fdde031461026c578063095ea7b31461029757806313114a9d146102d4578063151cd1c2146102ff5780631694505e1461032857610267565b3661026757005b600080fd5b34801561027857600080fd5b50610281610a27565b60405161028e9190614b53565b60405180910390f35b3480156102a357600080fd5b506102be60048036038101906102b99190614c0e565b610ab9565b6040516102cb9190614c69565b60405180910390f35b3480156102e057600080fd5b506102e9610ad7565b6040516102f69190614c93565b60405180910390f35b34801561030b57600080fd5b5061032660048036038101906103219190614cae565b610ae1565b005b34801561033457600080fd5b5061033d610b77565b60405161034a9190614d60565b60405180910390f35b34801561035f57600080fd5b50610368610b9d565b6040516103759190614c93565b60405180910390f35b34801561038a57600080fd5b50610393610ba7565b6040516103a09190614c93565b60405180910390f35b3480156103b557600080fd5b506103d060048036038101906103cb9190614d7b565b610bad565b6040516103dd9190614c69565b60405180910390f35b3480156103f257600080fd5b5061040d60048036038101906104089190614dce565b610c86565b60405161041a9190614c93565b60405180910390f35b34801561042f57600080fd5b50610438610cf4565b6040516104459190614c93565b60405180910390f35b34801561045a57600080fd5b5061047560048036038101906104709190614dfb565b610cfe565b005b34801561048357600080fd5b5061049e60048036038101906104999190614c0e565b611033565b6040516104ab9190614c69565b60405180910390f35b3480156104c057600080fd5b506104c96110e6565b6040516104d69190614c93565b60405180910390f35b3480156104eb57600080fd5b5061050660048036038101906105019190614dce565b6110ec565b005b34801561051457600080fd5b5061051d611268565b60405161052a9190614e37565b60405180910390f35b34801561053f57600080fd5b5061055a60048036038101906105559190614dfb565b61128e565b005b34801561056857600080fd5b50610583600480360381019061057e9190614dfb565b6114ee565b005b34801561059157600080fd5b506105ac60048036038101906105a79190614e7e565b6115c5565b6040516105b99190614c93565b60405180910390f35b3480156105ce57600080fd5b506105d761164b565b6040516105e49190614e37565b60405180910390f35b3480156105f957600080fd5b50610602611671565b60405161060f9190614c69565b60405180910390f35b34801561062457600080fd5b5061063f600480360381019061063a9190614dfb565b611684565b005b34801561064d57600080fd5b5061066860048036038101906106639190614dfb565b611744565b005b34801561067657600080fd5b50610691600480360381019061068c9190614dfb565b6119df565b60405161069e9190614c69565b60405180910390f35b3480156106b357600080fd5b506106bc611a35565b6040516106c99190614c93565b60405180910390f35b3480156106de57600080fd5b506106f960048036038101906106f49190614dfb565b611a3b565b6040516107069190614c93565b60405180910390f35b34801561071b57600080fd5b50610724611b26565b005b34801561073257600080fd5b5061073b611c60565b6040516107489190614c93565b60405180910390f35b34801561075d57600080fd5b5061077860048036038101906107739190614dfb565b611c66565b6040516107859190614c69565b60405180910390f35b34801561079a57600080fd5b506107a3611cbc565b6040516107b09190614e37565b60405180910390f35b3480156107c557600080fd5b506107ce611ce5565b6040516107db9190614b53565b60405180910390f35b3480156107f057600080fd5b5061080b60048036038101906108069190614c0e565b611d77565b6040516108189190614c69565b60405180910390f35b34801561082d57600080fd5b50610836611e44565b005b34801561084457600080fd5b5061085f600480360381019061085a9190614c0e565b612018565b60405161086c9190614c69565b60405180910390f35b34801561088157600080fd5b5061088a612036565b6040516108979190614e37565b60405180910390f35b3480156108ac57600080fd5b506108c760048036038101906108c29190614cae565b61205c565b005b3480156108d557600080fd5b506108f060048036038101906108eb9190614ebe565b6120f2565b005b3480156108fe57600080fd5b5061091960048036038101906109149190614dce565b6121c2565b005b34801561092757600080fd5b5061093061230f565b60405161093d9190614c93565b60405180910390f35b34801561095257600080fd5b5061096d60048036038101906109689190614dce565b612315565b005b34801561097b57600080fd5b5061099660048036038101906109919190614eeb565b6124b8565b6040516109a39190614c93565b60405180910390f35b3480156109b857600080fd5b506109d360048036038101906109ce9190614dfb565b61253f565b005b3480156109e157600080fd5b506109fc60048036038101906109f79190614dce565b612616565b005b348015610a0a57600080fd5b50610a256004803603810190610a209190614dfb565b6126b5565b005b6060600e8054610a3690614f5a565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6290614f5a565b8015610aaf5780601f10610a8457610100808354040283529160200191610aaf565b820191906000526020600020905b815481529060010190602001808311610a9257829003601f168201915b5050505050905090565b6000610acd610ac661285d565b8484612865565b6001905092915050565b6000600d54905090565b610ae961285d565b73ffffffffffffffffffffffffffffffffffffffff16610b07611cbc565b73ffffffffffffffffffffffffffffffffffffffff1614610b5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5490614fd7565b60405180910390fd5b826014819055508160158190555080601681905550505050565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600b54905090565b60195481565b6000610bba848484612a2e565b610c7b84610bc661285d565b610c7685604051806060016040528060288152602001615e9260289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c2c61285d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dd79092919063ffffffff16565b612865565b600190509392505050565b6000600c54821115610ccd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc490615069565b60405180910390fd5b6000610cd7612e2c565b9050610cec8184612e5790919063ffffffff16565b915050919050565b6000601054905090565b610d0661285d565b73ffffffffffffffffffffffffffffffffffffffff16610d24611cbc565b73ffffffffffffffffffffffffffffffffffffffff1614610d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7190614fd7565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610e06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfd906150d5565b60405180910390fd5b60005b60088054905081101561102f578173ffffffffffffffffffffffffffffffffffffffff1660088281548110610e4157610e406150f5565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361101c5760086001600880549050610e9b9190615153565b81548110610eac57610eab6150f5565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660088281548110610eeb57610eea6150f5565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008805480610fe257610fe1615187565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561102f565b8080611027906151b6565b915050610e09565b5050565b60006110dc61104061285d565b846110d7856005600061105161285d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e6d90919063ffffffff16565b612865565b6001905092915050565b60175481565b60006110f661285d565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611185576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117c90615270565b60405180910390fd5b600061119083612e83565b50505050505090506111ea81600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612eeb90919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061124281600c54612eeb90919063ffffffff16565b600c8190555061125d83600d54612e6d90919063ffffffff16565b600d81905550505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61129661285d565b73ffffffffffffffffffffffffffffffffffffffff166112b4611cbc565b73ffffffffffffffffffffffffffffffffffffffff161461130a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130190614fd7565b60405180910390fd5b60008190508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561135a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137e91906152a5565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140991906152a5565b6040518363ffffffff1660e01b81526004016114269291906152d2565b6020604051808303816000875af1158015611445573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146991906152a5565b601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6114f661285d565b73ffffffffffffffffffffffffffffffffffffffff16611514611cbc565b73ffffffffffffffffffffffffffffffffffffffff161461156a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156190614fd7565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600b5483111561160c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160390615347565b60405180910390fd5b8161162d57600061161c84612e83565b505050505050905080915050611645565b600061163884612e83565b5050505050915050809150505b92915050565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601e60159054906101000a900460ff1681565b61168c61285d565b73ffffffffffffffffffffffffffffffffffffffff166116aa611cbc565b73ffffffffffffffffffffffffffffffffffffffff1614611700576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f790614fd7565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61174c61285d565b73ffffffffffffffffffffffffffffffffffffffff1661176a611cbc565b73ffffffffffffffffffffffffffffffffffffffff16146117c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b790614fd7565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561184d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611844906153b3565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611921576118dd600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c86565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611ad657600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611b21565b611b1e600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c86565b90505b919050565b611b2e61285d565b73ffffffffffffffffffffffffffffffffffffffff16611b4c611cbc565b73ffffffffffffffffffffffffffffffffffffffff1614611ba2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9990614fd7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60025481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600f8054611cf490614f5a565b80601f0160208091040260200160405190810160405280929190818152602001828054611d2090614f5a565b8015611d6d5780601f10611d4257610100808354040283529160200191611d6d565b820191906000526020600020905b815481529060010190602001808311611d5057829003601f168201915b5050505050905090565b6000611e3a611d8461285d565b84611e3585604051806060016040528060258152602001615eba6025913960056000611dae61285d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dd79092919063ffffffff16565b612865565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ed4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecb90615445565b60405180910390fd5b6002544211611f18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0f906154b1565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061202c61202561285d565b8484612a2e565b6001905092915050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61206461285d565b73ffffffffffffffffffffffffffffffffffffffff16612082611cbc565b73ffffffffffffffffffffffffffffffffffffffff16146120d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cf90614fd7565b60405180910390fd5b826011819055508160128190555080601381905550505050565b6120fa61285d565b73ffffffffffffffffffffffffffffffffffffffff16612118611cbc565b73ffffffffffffffffffffffffffffffffffffffff161461216e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216590614fd7565b60405180910390fd5b80601e60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516121b79190614c69565b60405180910390a150565b6121ca61285d565b73ffffffffffffffffffffffffffffffffffffffff166121e8611cbc565b73ffffffffffffffffffffffffffffffffffffffff161461223e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223590614fd7565b60405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161228590615502565b60006040518083038185875af1925050503d80600081146122c2576040519150601f19603f3d011682016040523d82523d6000602084013e6122c7565b606091505b505090508061230b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230290615563565b60405180910390fd5b5050565b601f5481565b61231d61285d565b73ffffffffffffffffffffffffffffffffffffffff1661233b611cbc565b73ffffffffffffffffffffffffffffffffffffffff1614612391576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238890614fd7565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61254761285d565b73ffffffffffffffffffffffffffffffffffffffff16612565611cbc565b73ffffffffffffffffffffffffffffffffffffffff16146125bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b290614fd7565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61261e61285d565b73ffffffffffffffffffffffffffffffffffffffff1661263c611cbc565b73ffffffffffffffffffffffffffffffffffffffff1614612692576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268990614fd7565b60405180910390fd5b601054600a6126a191906156b6565b816126ac9190615701565b601f8190555050565b6126bd61285d565b73ffffffffffffffffffffffffffffffffffffffff166126db611cbc565b73ffffffffffffffffffffffffffffffffffffffff1614612731576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272890614fd7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036127a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612797906157cd565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036128d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128cb9061585f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612943576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293a906158f1565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a219190614c93565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9490615983565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0390615a15565b60405180910390fd5b60008111612b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4690615aa7565b60405180910390fd5b6000612b5a30611a3b565b90506000601f548210159050808015612b805750601e60149054906101000a900460ff16155b8015612bda5750601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612bf25750601e60159054906101000a900460ff165b15612c0657601f549150612c0582612f01565b5b600060019050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612cad5750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612cbb5760009050612dc3565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1603612d3057601154601781905550601254601881905550601354601981905550612dc2565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612da557601454601781905550601554601881905550601654601981905550612dc1565b6011546017819055506012546018819055506013546019819055505b5b5b612dcf868686846131ba565b505050505050565b6000838311158290612e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e169190614b53565b60405180910390fd5b5082840390509392505050565b6000806000612e396134cb565b91509150612e508183612e5790919063ffffffff16565b9250505090565b60008183612e659190615af6565b905092915050565b60008183612e7b9190615b27565b905092915050565b6000806000806000806000806000806000612e9d8c61377e565b93509350935093506000806000612ebe8f878787612eb9612e2c565b6137fd565b925092509250828282898989899d509d509d509d509d509d509d5050505050505050919395979092949650565b60008183612ef99190615153565b905092915050565b6001601e60146101000a81548160ff0219169083151502179055506000612f35601854601954612e6d90919063ffffffff16565b90506000612f60601954612f528486612e5790919063ffffffff16565b6138b190919063ffffffff16565b90506000612f778285612eeb90919063ffffffff16565b9050612fa3612f926002601854612e5790919063ffffffff16565b601954612e6d90919063ffffffff16565b92506000612fbb600283612e5790919063ffffffff16565b90506000612fd28284612eeb90919063ffffffff16565b905060004790506000612fee8487612e6d90919063ffffffff16565b9050612ff9816138c7565b600061300e8347612eeb90919063ffffffff16565b9050600061303960195461302b8b85612e5790919063ffffffff16565b6138b190919063ffffffff16565b90506000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826175309060405161308790615502565b600060405180830381858888f193505050503d80600081146130c5576040519150601f19603f3d011682016040523d82523d6000602084013e6130ca565b606091505b505090508061310e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161310590615bef565b60405180910390fd5b600061314a6131296002601854612e5790919063ffffffff16565b61313c8d87612e5790919063ffffffff16565b6138b190919063ffffffff16565b90506131568782613b0a565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56188828960405161318993929190615c0f565b60405180910390a150505050505050505050506000601e60146101000a81548160ff02191690831515021790555050565b806131c8576131c7613bef565b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561326b5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132805761327b848484613c24565b6134b7565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156133235750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561333857613333848484613e92565b6134b6565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156133dc5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133f1576133ec848484614100565b6134b5565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134935750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156134a8576134a38484846142d9565b6134b4565b6134b3848484614100565b5b5b5b5b806134c5576134c46145dc565b5b50505050565b6000806000600c5490506000600b54905060005b60088054905081101561374157826003600060088481548110613505576135046150f5565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806135f3575081600460006008848154811061358b5761358a6150f5565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561360a57600c54600b549450945050505061377a565b61369a6003600060088481548110613625576136246150f5565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612eeb90919063ffffffff16565b925061372c60046000600884815481106136b7576136b66150f5565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612eeb90919063ffffffff16565b91508080613739906151b6565b9150506134df565b50613759600b54600c54612e5790919063ffffffff16565b82101561377157600c54600b5493509350505061377a565b81819350935050505b9091565b600080600080600061378f866145f9565b9050600061379c8761462a565b905060006137a98861465b565b905060006137e4826137d6856137c8888e612eeb90919063ffffffff16565b612eeb90919063ffffffff16565b612eeb90919063ffffffff16565b9050808484849750975097509750505050509193509193565b600080600080613816858a6138b190919063ffffffff16565b9050600061382d868a6138b190919063ffffffff16565b90506000613844878a6138b190919063ffffffff16565b9050600061385b888a6138b190919063ffffffff16565b90506000613896826138888561387a888a612eeb90919063ffffffff16565b612eeb90919063ffffffff16565b612eeb90919063ffffffff16565b90508481859750975097505050505050955095509592505050565b600081836138bf9190615701565b905092915050565b6000600267ffffffffffffffff8111156138e4576138e3615c46565b5b6040519080825280602002602001820160405280156139125781602001602082028036833780820191505090505b509050308160008151811061392a576139296150f5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156139d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139f591906152a5565b81600181518110613a0957613a086150f5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613a7030601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612865565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613ad4959493929190615d6e565b600060405180830381600087803b158015613aee57600080fd5b505af1158015613b02573d6000803e3d6000fd5b505050505050565b613b3730601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612865565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613b83611cbc565b426040518863ffffffff1660e01b8152600401613ba596959493929190615dc8565b60606040518083038185885af1158015613bc3573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613be89190615e3e565b5050505050565b601754601a81905550601954601b81905550601854601c81905550600060178190555060006019819055506000601881905550565b6000806000806000806000613c3888612e83565b9650965096509650965096509650613c9888600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612eeb90919063ffffffff16565b600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d2d87600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612eeb90919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613dc286600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e6d90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e0e8261468c565b613e1781614831565b613e218584614a80565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613e7e9190614c93565b60405180910390a350505050505050505050565b6000806000806000806000613ea688612e83565b9650965096509650965096509650613f0687600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612eeb90919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f9b84600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e6d90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061403086600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e6d90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061407c8261468c565b61408581614831565b61408f8584614a80565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516140ec9190614c93565b60405180910390a350505050505050505050565b600080600080600080600061411488612e83565b965096509650965096509650965061417487600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612eeb90919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061420986600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e6d90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506142558261468c565b61425e81614831565b6142688584614a80565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516142c59190614c93565b60405180910390a350505050505050505050565b60008060008060008060006142ed88612e83565b965096509650965096509650965061434d88600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612eeb90919063ffffffff16565b600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143e287600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612eeb90919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061447784600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e6d90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061450c86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e6d90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506145588261468c565b61456181614831565b61456b8584614a80565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516145c89190614c93565b60405180910390a350505050505050505050565b601a54601781905550601b54601981905550601c54601881905550565b60006146236064614615601754856138b190919063ffffffff16565b612e5790919063ffffffff16565b9050919050565b60006146546064614646601854856138b190919063ffffffff16565b612e5790919063ffffffff16565b9050919050565b60006146856064614677601954856138b190919063ffffffff16565b612e5790919063ffffffff16565b9050919050565b6000614696612e2c565b905060006146ad82846138b190919063ffffffff16565b905061470181600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e6d90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561482c576147e883600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e6d90919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b600061483b612e2c565b9050600061485282846138b190919063ffffffff16565b90506148c88160036000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e6d90919063ffffffff16565b60036000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060076000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614a7b57614a158360046000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e6d90919063ffffffff16565b60046000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b614a9582600c54612eeb90919063ffffffff16565b600c81905550614ab081600d54612e6d90919063ffffffff16565b600d819055505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614af4578082015181840152602081019050614ad9565b83811115614b03576000848401525b50505050565b6000601f19601f8301169050919050565b6000614b2582614aba565b614b2f8185614ac5565b9350614b3f818560208601614ad6565b614b4881614b09565b840191505092915050565b60006020820190508181036000830152614b6d8184614b1a565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614ba582614b7a565b9050919050565b614bb581614b9a565b8114614bc057600080fd5b50565b600081359050614bd281614bac565b92915050565b6000819050919050565b614beb81614bd8565b8114614bf657600080fd5b50565b600081359050614c0881614be2565b92915050565b60008060408385031215614c2557614c24614b75565b5b6000614c3385828601614bc3565b9250506020614c4485828601614bf9565b9150509250929050565b60008115159050919050565b614c6381614c4e565b82525050565b6000602082019050614c7e6000830184614c5a565b92915050565b614c8d81614bd8565b82525050565b6000602082019050614ca86000830184614c84565b92915050565b600080600060608486031215614cc757614cc6614b75565b5b6000614cd586828701614bf9565b9350506020614ce686828701614bf9565b9250506040614cf786828701614bf9565b9150509250925092565b6000819050919050565b6000614d26614d21614d1c84614b7a565b614d01565b614b7a565b9050919050565b6000614d3882614d0b565b9050919050565b6000614d4a82614d2d565b9050919050565b614d5a81614d3f565b82525050565b6000602082019050614d756000830184614d51565b92915050565b600080600060608486031215614d9457614d93614b75565b5b6000614da286828701614bc3565b9350506020614db386828701614bc3565b9250506040614dc486828701614bf9565b9150509250925092565b600060208284031215614de457614de3614b75565b5b6000614df284828501614bf9565b91505092915050565b600060208284031215614e1157614e10614b75565b5b6000614e1f84828501614bc3565b91505092915050565b614e3181614b9a565b82525050565b6000602082019050614e4c6000830184614e28565b92915050565b614e5b81614c4e565b8114614e6657600080fd5b50565b600081359050614e7881614e52565b92915050565b60008060408385031215614e9557614e94614b75565b5b6000614ea385828601614bf9565b9250506020614eb485828601614e69565b9150509250929050565b600060208284031215614ed457614ed3614b75565b5b6000614ee284828501614e69565b91505092915050565b60008060408385031215614f0257614f01614b75565b5b6000614f1085828601614bc3565b9250506020614f2185828601614bc3565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614f7257607f821691505b602082108103614f8557614f84614f2b565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614fc1602083614ac5565b9150614fcc82614f8b565b602082019050919050565b60006020820190508181036000830152614ff081614fb4565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000615053602a83614ac5565b915061505e82614ff7565b604082019050919050565b6000602082019050818103600083015261508281615046565b9050919050565b7f4163636f756e7420697320616c726561647920696e636c756465640000000000600082015250565b60006150bf601b83614ac5565b91506150ca82615089565b602082019050919050565b600060208201905081810360008301526150ee816150b2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061515e82614bd8565b915061516983614bd8565b92508282101561517c5761517b615124565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60006151c182614bd8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036151f3576151f2615124565b5b600182019050919050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b600061525a602c83614ac5565b9150615265826151fe565b604082019050919050565b600060208201905081810360008301526152898161524d565b9050919050565b60008151905061529f81614bac565b92915050565b6000602082840312156152bb576152ba614b75565b5b60006152c984828501615290565b91505092915050565b60006040820190506152e76000830185614e28565b6152f46020830184614e28565b9392505050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b6000615331601f83614ac5565b915061533c826152fb565b602082019050919050565b6000602082019050818103600083015261536081615324565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b600061539d601b83614ac5565b91506153a882615367565b602082019050919050565b600060208201905081810360008301526153cc81615390565b9050919050565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b2e00000000000000000000000000000000000000000000000000000000602082015250565b600061542f602483614ac5565b915061543a826153d3565b604082019050919050565b6000602082019050818103600083015261545e81615422565b9050919050565b7f436f6e7472616374206973206c6f636b65642e00000000000000000000000000600082015250565b600061549b601383614ac5565b91506154a682615465565b602082019050919050565b600060208201905081810360008301526154ca8161548e565b9050919050565b600081905092915050565b50565b60006154ec6000836154d1565b91506154f7826154dc565b600082019050919050565b600061550d826154df565b9150819050919050565b7f4661696c656420746f2073656e64204554480000000000000000000000000000600082015250565b600061554d601283614ac5565b915061555882615517565b602082019050919050565b6000602082019050818103600083015261557c81615540565b9050919050565b60008160011c9050919050565b6000808291508390505b60018511156155da578086048111156155b6576155b5615124565b5b60018516156155c55780820291505b80810290506155d385615583565b945061559a565b94509492505050565b6000826155f357600190506156af565b8161560157600090506156af565b8160018114615617576002811461562157615650565b60019150506156af565b60ff84111561563357615632615124565b5b8360020a91508482111561564a57615649615124565b5b506156af565b5060208310610133831016604e8410600b84101617156156855782820a9050838111156156805761567f615124565b5b6156af565b6156928484846001615590565b925090508184048111156156a9576156a8615124565b5b81810290505b9392505050565b60006156c182614bd8565b91506156cc83614bd8565b92506156f97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846155e3565b905092915050565b600061570c82614bd8565b915061571783614bd8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156157505761574f615124565b5b828202905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006157b7602683614ac5565b91506157c28261575b565b604082019050919050565b600060208201905081810360008301526157e6816157aa565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615849602483614ac5565b9150615854826157ed565b604082019050919050565b600060208201905081810360008301526158788161583c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006158db602283614ac5565b91506158e68261587f565b604082019050919050565b6000602082019050818103600083015261590a816158ce565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061596d602583614ac5565b915061597882615911565b604082019050919050565b6000602082019050818103600083015261599c81615960565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006159ff602383614ac5565b9150615a0a826159a3565b604082019050919050565b60006020820190508181036000830152615a2e816159f2565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000615a91602983614ac5565b9150615a9c82615a35565b604082019050919050565b60006020820190508181036000830152615ac081615a84565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615b0182614bd8565b9150615b0c83614bd8565b925082615b1c57615b1b615ac7565b5b828204905092915050565b6000615b3282614bd8565b9150615b3d83614bd8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115615b7257615b71615124565b5b828201905092915050565b7f205f6d61726b6574696e6757616c6c657441646472657373207472616e73666560008201527f7220697320726576657274656400000000000000000000000000000000000000602082015250565b6000615bd9602d83614ac5565b9150615be482615b7d565b604082019050919050565b60006020820190508181036000830152615c0881615bcc565b9050919050565b6000606082019050615c246000830186614c84565b615c316020830185614c84565b615c3e6040830184614c84565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000819050919050565b6000615c9a615c95615c9084615c75565b614d01565b614bd8565b9050919050565b615caa81615c7f565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615ce581614b9a565b82525050565b6000615cf78383615cdc565b60208301905092915050565b6000602082019050919050565b6000615d1b82615cb0565b615d258185615cbb565b9350615d3083615ccc565b8060005b83811015615d61578151615d488882615ceb565b9750615d5383615d03565b925050600181019050615d34565b5085935050505092915050565b600060a082019050615d836000830188614c84565b615d906020830187615ca1565b8181036040830152615da28186615d10565b9050615db16060830185614e28565b615dbe6080830184614c84565b9695505050505050565b600060c082019050615ddd6000830189614e28565b615dea6020830188614c84565b615df76040830187615ca1565b615e046060830186615ca1565b615e116080830185614e28565b615e1e60a0830184614c84565b979650505050505050565b600081519050615e3881614be2565b92915050565b600080600060608486031215615e5757615e56614b75565b5b6000615e6586828701615e29565b9350506020615e7686828701615e29565b9250506040615e8786828701615e29565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122064d66ff997bf85c54a76645b1036bb0b5d001cbed5aefdfaa0592ae6266c0a2e64736f6c634300080f0033
Deployed Bytecode
0x6080604052600436106102605760003560e01c806352390c0211610144578063a9059cbb116100b6578063d12a76881161007a578063d12a76881461091b578063dd46706414610946578063dd62ed3e1461096f578063ea2f0b37146109ac578063f0f165af146109d5578063f2fde38b146109fe57610267565b8063a9059cbb14610838578063bd3900c014610875578063be19674b146108a0578063c49b9a80146108c9578063caea37b7146108f257610267565b806379af25a61161010857806379af25a61461072657806388f82020146107515780638da5cb5b1461078e57806395d89b41146107b9578063a457c2d7146107e4578063a69df4b51461082157610267565b806352390c02146106415780635342acb41461066a5780636bc87c3a146106a757806370a08231146106d2578063715018a61461070f57610267565b80633685d419116101dd57806341cb87fc116101a157806341cb87fc14610533578063437823ec1461055c5780634549b0391461058557806349bd5a5e146105c25780634a74bb02146105ed5780634cb80fd51461061857610267565b80633685d4191461044e57806339509351146104775780633b124fe7146104b45780633bd5d173146104df5780634144d9e41461050857610267565b806318160ddd1161022457806318160ddd1461035357806322976e0d1461037e57806323b872dd146103a95780632d838119146103e6578063313ce5671461042357610267565b806306fdde031461026c578063095ea7b31461029757806313114a9d146102d4578063151cd1c2146102ff5780631694505e1461032857610267565b3661026757005b600080fd5b34801561027857600080fd5b50610281610a27565b60405161028e9190614b53565b60405180910390f35b3480156102a357600080fd5b506102be60048036038101906102b99190614c0e565b610ab9565b6040516102cb9190614c69565b60405180910390f35b3480156102e057600080fd5b506102e9610ad7565b6040516102f69190614c93565b60405180910390f35b34801561030b57600080fd5b5061032660048036038101906103219190614cae565b610ae1565b005b34801561033457600080fd5b5061033d610b77565b60405161034a9190614d60565b60405180910390f35b34801561035f57600080fd5b50610368610b9d565b6040516103759190614c93565b60405180910390f35b34801561038a57600080fd5b50610393610ba7565b6040516103a09190614c93565b60405180910390f35b3480156103b557600080fd5b506103d060048036038101906103cb9190614d7b565b610bad565b6040516103dd9190614c69565b60405180910390f35b3480156103f257600080fd5b5061040d60048036038101906104089190614dce565b610c86565b60405161041a9190614c93565b60405180910390f35b34801561042f57600080fd5b50610438610cf4565b6040516104459190614c93565b60405180910390f35b34801561045a57600080fd5b5061047560048036038101906104709190614dfb565b610cfe565b005b34801561048357600080fd5b5061049e60048036038101906104999190614c0e565b611033565b6040516104ab9190614c69565b60405180910390f35b3480156104c057600080fd5b506104c96110e6565b6040516104d69190614c93565b60405180910390f35b3480156104eb57600080fd5b5061050660048036038101906105019190614dce565b6110ec565b005b34801561051457600080fd5b5061051d611268565b60405161052a9190614e37565b60405180910390f35b34801561053f57600080fd5b5061055a60048036038101906105559190614dfb565b61128e565b005b34801561056857600080fd5b50610583600480360381019061057e9190614dfb565b6114ee565b005b34801561059157600080fd5b506105ac60048036038101906105a79190614e7e565b6115c5565b6040516105b99190614c93565b60405180910390f35b3480156105ce57600080fd5b506105d761164b565b6040516105e49190614e37565b60405180910390f35b3480156105f957600080fd5b50610602611671565b60405161060f9190614c69565b60405180910390f35b34801561062457600080fd5b5061063f600480360381019061063a9190614dfb565b611684565b005b34801561064d57600080fd5b5061066860048036038101906106639190614dfb565b611744565b005b34801561067657600080fd5b50610691600480360381019061068c9190614dfb565b6119df565b60405161069e9190614c69565b60405180910390f35b3480156106b357600080fd5b506106bc611a35565b6040516106c99190614c93565b60405180910390f35b3480156106de57600080fd5b506106f960048036038101906106f49190614dfb565b611a3b565b6040516107069190614c93565b60405180910390f35b34801561071b57600080fd5b50610724611b26565b005b34801561073257600080fd5b5061073b611c60565b6040516107489190614c93565b60405180910390f35b34801561075d57600080fd5b5061077860048036038101906107739190614dfb565b611c66565b6040516107859190614c69565b60405180910390f35b34801561079a57600080fd5b506107a3611cbc565b6040516107b09190614e37565b60405180910390f35b3480156107c557600080fd5b506107ce611ce5565b6040516107db9190614b53565b60405180910390f35b3480156107f057600080fd5b5061080b60048036038101906108069190614c0e565b611d77565b6040516108189190614c69565b60405180910390f35b34801561082d57600080fd5b50610836611e44565b005b34801561084457600080fd5b5061085f600480360381019061085a9190614c0e565b612018565b60405161086c9190614c69565b60405180910390f35b34801561088157600080fd5b5061088a612036565b6040516108979190614e37565b60405180910390f35b3480156108ac57600080fd5b506108c760048036038101906108c29190614cae565b61205c565b005b3480156108d557600080fd5b506108f060048036038101906108eb9190614ebe565b6120f2565b005b3480156108fe57600080fd5b5061091960048036038101906109149190614dce565b6121c2565b005b34801561092757600080fd5b5061093061230f565b60405161093d9190614c93565b60405180910390f35b34801561095257600080fd5b5061096d60048036038101906109689190614dce565b612315565b005b34801561097b57600080fd5b5061099660048036038101906109919190614eeb565b6124b8565b6040516109a39190614c93565b60405180910390f35b3480156109b857600080fd5b506109d360048036038101906109ce9190614dfb565b61253f565b005b3480156109e157600080fd5b506109fc60048036038101906109f79190614dce565b612616565b005b348015610a0a57600080fd5b50610a256004803603810190610a209190614dfb565b6126b5565b005b6060600e8054610a3690614f5a565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6290614f5a565b8015610aaf5780601f10610a8457610100808354040283529160200191610aaf565b820191906000526020600020905b815481529060010190602001808311610a9257829003601f168201915b5050505050905090565b6000610acd610ac661285d565b8484612865565b6001905092915050565b6000600d54905090565b610ae961285d565b73ffffffffffffffffffffffffffffffffffffffff16610b07611cbc565b73ffffffffffffffffffffffffffffffffffffffff1614610b5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5490614fd7565b60405180910390fd5b826014819055508160158190555080601681905550505050565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600b54905090565b60195481565b6000610bba848484612a2e565b610c7b84610bc661285d565b610c7685604051806060016040528060288152602001615e9260289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c2c61285d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dd79092919063ffffffff16565b612865565b600190509392505050565b6000600c54821115610ccd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc490615069565b60405180910390fd5b6000610cd7612e2c565b9050610cec8184612e5790919063ffffffff16565b915050919050565b6000601054905090565b610d0661285d565b73ffffffffffffffffffffffffffffffffffffffff16610d24611cbc565b73ffffffffffffffffffffffffffffffffffffffff1614610d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7190614fd7565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610e06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfd906150d5565b60405180910390fd5b60005b60088054905081101561102f578173ffffffffffffffffffffffffffffffffffffffff1660088281548110610e4157610e406150f5565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361101c5760086001600880549050610e9b9190615153565b81548110610eac57610eab6150f5565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660088281548110610eeb57610eea6150f5565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008805480610fe257610fe1615187565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561102f565b8080611027906151b6565b915050610e09565b5050565b60006110dc61104061285d565b846110d7856005600061105161285d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e6d90919063ffffffff16565b612865565b6001905092915050565b60175481565b60006110f661285d565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611185576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117c90615270565b60405180910390fd5b600061119083612e83565b50505050505090506111ea81600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612eeb90919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061124281600c54612eeb90919063ffffffff16565b600c8190555061125d83600d54612e6d90919063ffffffff16565b600d81905550505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61129661285d565b73ffffffffffffffffffffffffffffffffffffffff166112b4611cbc565b73ffffffffffffffffffffffffffffffffffffffff161461130a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130190614fd7565b60405180910390fd5b60008190508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561135a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137e91906152a5565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140991906152a5565b6040518363ffffffff1660e01b81526004016114269291906152d2565b6020604051808303816000875af1158015611445573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146991906152a5565b601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6114f661285d565b73ffffffffffffffffffffffffffffffffffffffff16611514611cbc565b73ffffffffffffffffffffffffffffffffffffffff161461156a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156190614fd7565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600b5483111561160c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160390615347565b60405180910390fd5b8161162d57600061161c84612e83565b505050505050905080915050611645565b600061163884612e83565b5050505050915050809150505b92915050565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601e60159054906101000a900460ff1681565b61168c61285d565b73ffffffffffffffffffffffffffffffffffffffff166116aa611cbc565b73ffffffffffffffffffffffffffffffffffffffff1614611700576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f790614fd7565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61174c61285d565b73ffffffffffffffffffffffffffffffffffffffff1661176a611cbc565b73ffffffffffffffffffffffffffffffffffffffff16146117c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b790614fd7565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561184d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611844906153b3565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611921576118dd600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c86565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611ad657600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611b21565b611b1e600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c86565b90505b919050565b611b2e61285d565b73ffffffffffffffffffffffffffffffffffffffff16611b4c611cbc565b73ffffffffffffffffffffffffffffffffffffffff1614611ba2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9990614fd7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60025481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600f8054611cf490614f5a565b80601f0160208091040260200160405190810160405280929190818152602001828054611d2090614f5a565b8015611d6d5780601f10611d4257610100808354040283529160200191611d6d565b820191906000526020600020905b815481529060010190602001808311611d5057829003601f168201915b5050505050905090565b6000611e3a611d8461285d565b84611e3585604051806060016040528060258152602001615eba6025913960056000611dae61285d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dd79092919063ffffffff16565b612865565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ed4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecb90615445565b60405180910390fd5b6002544211611f18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0f906154b1565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061202c61202561285d565b8484612a2e565b6001905092915050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61206461285d565b73ffffffffffffffffffffffffffffffffffffffff16612082611cbc565b73ffffffffffffffffffffffffffffffffffffffff16146120d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cf90614fd7565b60405180910390fd5b826011819055508160128190555080601381905550505050565b6120fa61285d565b73ffffffffffffffffffffffffffffffffffffffff16612118611cbc565b73ffffffffffffffffffffffffffffffffffffffff161461216e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216590614fd7565b60405180910390fd5b80601e60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516121b79190614c69565b60405180910390a150565b6121ca61285d565b73ffffffffffffffffffffffffffffffffffffffff166121e8611cbc565b73ffffffffffffffffffffffffffffffffffffffff161461223e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223590614fd7565b60405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161228590615502565b60006040518083038185875af1925050503d80600081146122c2576040519150601f19603f3d011682016040523d82523d6000602084013e6122c7565b606091505b505090508061230b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230290615563565b60405180910390fd5b5050565b601f5481565b61231d61285d565b73ffffffffffffffffffffffffffffffffffffffff1661233b611cbc565b73ffffffffffffffffffffffffffffffffffffffff1614612391576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238890614fd7565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61254761285d565b73ffffffffffffffffffffffffffffffffffffffff16612565611cbc565b73ffffffffffffffffffffffffffffffffffffffff16146125bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b290614fd7565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61261e61285d565b73ffffffffffffffffffffffffffffffffffffffff1661263c611cbc565b73ffffffffffffffffffffffffffffffffffffffff1614612692576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268990614fd7565b60405180910390fd5b601054600a6126a191906156b6565b816126ac9190615701565b601f8190555050565b6126bd61285d565b73ffffffffffffffffffffffffffffffffffffffff166126db611cbc565b73ffffffffffffffffffffffffffffffffffffffff1614612731576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272890614fd7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036127a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612797906157cd565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036128d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128cb9061585f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612943576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293a906158f1565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a219190614c93565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9490615983565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0390615a15565b60405180910390fd5b60008111612b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4690615aa7565b60405180910390fd5b6000612b5a30611a3b565b90506000601f548210159050808015612b805750601e60149054906101000a900460ff16155b8015612bda5750601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612bf25750601e60159054906101000a900460ff165b15612c0657601f549150612c0582612f01565b5b600060019050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612cad5750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612cbb5760009050612dc3565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1603612d3057601154601781905550601254601881905550601354601981905550612dc2565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612da557601454601781905550601554601881905550601654601981905550612dc1565b6011546017819055506012546018819055506013546019819055505b5b5b612dcf868686846131ba565b505050505050565b6000838311158290612e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e169190614b53565b60405180910390fd5b5082840390509392505050565b6000806000612e396134cb565b91509150612e508183612e5790919063ffffffff16565b9250505090565b60008183612e659190615af6565b905092915050565b60008183612e7b9190615b27565b905092915050565b6000806000806000806000806000806000612e9d8c61377e565b93509350935093506000806000612ebe8f878787612eb9612e2c565b6137fd565b925092509250828282898989899d509d509d509d509d509d509d5050505050505050919395979092949650565b60008183612ef99190615153565b905092915050565b6001601e60146101000a81548160ff0219169083151502179055506000612f35601854601954612e6d90919063ffffffff16565b90506000612f60601954612f528486612e5790919063ffffffff16565b6138b190919063ffffffff16565b90506000612f778285612eeb90919063ffffffff16565b9050612fa3612f926002601854612e5790919063ffffffff16565b601954612e6d90919063ffffffff16565b92506000612fbb600283612e5790919063ffffffff16565b90506000612fd28284612eeb90919063ffffffff16565b905060004790506000612fee8487612e6d90919063ffffffff16565b9050612ff9816138c7565b600061300e8347612eeb90919063ffffffff16565b9050600061303960195461302b8b85612e5790919063ffffffff16565b6138b190919063ffffffff16565b90506000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826175309060405161308790615502565b600060405180830381858888f193505050503d80600081146130c5576040519150601f19603f3d011682016040523d82523d6000602084013e6130ca565b606091505b505090508061310e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161310590615bef565b60405180910390fd5b600061314a6131296002601854612e5790919063ffffffff16565b61313c8d87612e5790919063ffffffff16565b6138b190919063ffffffff16565b90506131568782613b0a565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56188828960405161318993929190615c0f565b60405180910390a150505050505050505050506000601e60146101000a81548160ff02191690831515021790555050565b806131c8576131c7613bef565b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561326b5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132805761327b848484613c24565b6134b7565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156133235750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561333857613333848484613e92565b6134b6565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156133dc5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133f1576133ec848484614100565b6134b5565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134935750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156134a8576134a38484846142d9565b6134b4565b6134b3848484614100565b5b5b5b5b806134c5576134c46145dc565b5b50505050565b6000806000600c5490506000600b54905060005b60088054905081101561374157826003600060088481548110613505576135046150f5565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806135f3575081600460006008848154811061358b5761358a6150f5565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561360a57600c54600b549450945050505061377a565b61369a6003600060088481548110613625576136246150f5565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612eeb90919063ffffffff16565b925061372c60046000600884815481106136b7576136b66150f5565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612eeb90919063ffffffff16565b91508080613739906151b6565b9150506134df565b50613759600b54600c54612e5790919063ffffffff16565b82101561377157600c54600b5493509350505061377a565b81819350935050505b9091565b600080600080600061378f866145f9565b9050600061379c8761462a565b905060006137a98861465b565b905060006137e4826137d6856137c8888e612eeb90919063ffffffff16565b612eeb90919063ffffffff16565b612eeb90919063ffffffff16565b9050808484849750975097509750505050509193509193565b600080600080613816858a6138b190919063ffffffff16565b9050600061382d868a6138b190919063ffffffff16565b90506000613844878a6138b190919063ffffffff16565b9050600061385b888a6138b190919063ffffffff16565b90506000613896826138888561387a888a612eeb90919063ffffffff16565b612eeb90919063ffffffff16565b612eeb90919063ffffffff16565b90508481859750975097505050505050955095509592505050565b600081836138bf9190615701565b905092915050565b6000600267ffffffffffffffff8111156138e4576138e3615c46565b5b6040519080825280602002602001820160405280156139125781602001602082028036833780820191505090505b509050308160008151811061392a576139296150f5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156139d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139f591906152a5565b81600181518110613a0957613a086150f5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613a7030601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612865565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613ad4959493929190615d6e565b600060405180830381600087803b158015613aee57600080fd5b505af1158015613b02573d6000803e3d6000fd5b505050505050565b613b3730601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612865565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613b83611cbc565b426040518863ffffffff1660e01b8152600401613ba596959493929190615dc8565b60606040518083038185885af1158015613bc3573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613be89190615e3e565b5050505050565b601754601a81905550601954601b81905550601854601c81905550600060178190555060006019819055506000601881905550565b6000806000806000806000613c3888612e83565b9650965096509650965096509650613c9888600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612eeb90919063ffffffff16565b600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d2d87600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612eeb90919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613dc286600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e6d90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e0e8261468c565b613e1781614831565b613e218584614a80565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613e7e9190614c93565b60405180910390a350505050505050505050565b6000806000806000806000613ea688612e83565b9650965096509650965096509650613f0687600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612eeb90919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f9b84600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e6d90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061403086600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e6d90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061407c8261468c565b61408581614831565b61408f8584614a80565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516140ec9190614c93565b60405180910390a350505050505050505050565b600080600080600080600061411488612e83565b965096509650965096509650965061417487600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612eeb90919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061420986600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e6d90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506142558261468c565b61425e81614831565b6142688584614a80565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516142c59190614c93565b60405180910390a350505050505050505050565b60008060008060008060006142ed88612e83565b965096509650965096509650965061434d88600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612eeb90919063ffffffff16565b600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143e287600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612eeb90919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061447784600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e6d90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061450c86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e6d90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506145588261468c565b61456181614831565b61456b8584614a80565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516145c89190614c93565b60405180910390a350505050505050505050565b601a54601781905550601b54601981905550601c54601881905550565b60006146236064614615601754856138b190919063ffffffff16565b612e5790919063ffffffff16565b9050919050565b60006146546064614646601854856138b190919063ffffffff16565b612e5790919063ffffffff16565b9050919050565b60006146856064614677601954856138b190919063ffffffff16565b612e5790919063ffffffff16565b9050919050565b6000614696612e2c565b905060006146ad82846138b190919063ffffffff16565b905061470181600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e6d90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561482c576147e883600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e6d90919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b600061483b612e2c565b9050600061485282846138b190919063ffffffff16565b90506148c88160036000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e6d90919063ffffffff16565b60036000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060076000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614a7b57614a158360046000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e6d90919063ffffffff16565b60046000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b614a9582600c54612eeb90919063ffffffff16565b600c81905550614ab081600d54612e6d90919063ffffffff16565b600d819055505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614af4578082015181840152602081019050614ad9565b83811115614b03576000848401525b50505050565b6000601f19601f8301169050919050565b6000614b2582614aba565b614b2f8185614ac5565b9350614b3f818560208601614ad6565b614b4881614b09565b840191505092915050565b60006020820190508181036000830152614b6d8184614b1a565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614ba582614b7a565b9050919050565b614bb581614b9a565b8114614bc057600080fd5b50565b600081359050614bd281614bac565b92915050565b6000819050919050565b614beb81614bd8565b8114614bf657600080fd5b50565b600081359050614c0881614be2565b92915050565b60008060408385031215614c2557614c24614b75565b5b6000614c3385828601614bc3565b9250506020614c4485828601614bf9565b9150509250929050565b60008115159050919050565b614c6381614c4e565b82525050565b6000602082019050614c7e6000830184614c5a565b92915050565b614c8d81614bd8565b82525050565b6000602082019050614ca86000830184614c84565b92915050565b600080600060608486031215614cc757614cc6614b75565b5b6000614cd586828701614bf9565b9350506020614ce686828701614bf9565b9250506040614cf786828701614bf9565b9150509250925092565b6000819050919050565b6000614d26614d21614d1c84614b7a565b614d01565b614b7a565b9050919050565b6000614d3882614d0b565b9050919050565b6000614d4a82614d2d565b9050919050565b614d5a81614d3f565b82525050565b6000602082019050614d756000830184614d51565b92915050565b600080600060608486031215614d9457614d93614b75565b5b6000614da286828701614bc3565b9350506020614db386828701614bc3565b9250506040614dc486828701614bf9565b9150509250925092565b600060208284031215614de457614de3614b75565b5b6000614df284828501614bf9565b91505092915050565b600060208284031215614e1157614e10614b75565b5b6000614e1f84828501614bc3565b91505092915050565b614e3181614b9a565b82525050565b6000602082019050614e4c6000830184614e28565b92915050565b614e5b81614c4e565b8114614e6657600080fd5b50565b600081359050614e7881614e52565b92915050565b60008060408385031215614e9557614e94614b75565b5b6000614ea385828601614bf9565b9250506020614eb485828601614e69565b9150509250929050565b600060208284031215614ed457614ed3614b75565b5b6000614ee284828501614e69565b91505092915050565b60008060408385031215614f0257614f01614b75565b5b6000614f1085828601614bc3565b9250506020614f2185828601614bc3565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614f7257607f821691505b602082108103614f8557614f84614f2b565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614fc1602083614ac5565b9150614fcc82614f8b565b602082019050919050565b60006020820190508181036000830152614ff081614fb4565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000615053602a83614ac5565b915061505e82614ff7565b604082019050919050565b6000602082019050818103600083015261508281615046565b9050919050565b7f4163636f756e7420697320616c726561647920696e636c756465640000000000600082015250565b60006150bf601b83614ac5565b91506150ca82615089565b602082019050919050565b600060208201905081810360008301526150ee816150b2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061515e82614bd8565b915061516983614bd8565b92508282101561517c5761517b615124565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60006151c182614bd8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036151f3576151f2615124565b5b600182019050919050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b600061525a602c83614ac5565b9150615265826151fe565b604082019050919050565b600060208201905081810360008301526152898161524d565b9050919050565b60008151905061529f81614bac565b92915050565b6000602082840312156152bb576152ba614b75565b5b60006152c984828501615290565b91505092915050565b60006040820190506152e76000830185614e28565b6152f46020830184614e28565b9392505050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b6000615331601f83614ac5565b915061533c826152fb565b602082019050919050565b6000602082019050818103600083015261536081615324565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b600061539d601b83614ac5565b91506153a882615367565b602082019050919050565b600060208201905081810360008301526153cc81615390565b9050919050565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b2e00000000000000000000000000000000000000000000000000000000602082015250565b600061542f602483614ac5565b915061543a826153d3565b604082019050919050565b6000602082019050818103600083015261545e81615422565b9050919050565b7f436f6e7472616374206973206c6f636b65642e00000000000000000000000000600082015250565b600061549b601383614ac5565b91506154a682615465565b602082019050919050565b600060208201905081810360008301526154ca8161548e565b9050919050565b600081905092915050565b50565b60006154ec6000836154d1565b91506154f7826154dc565b600082019050919050565b600061550d826154df565b9150819050919050565b7f4661696c656420746f2073656e64204554480000000000000000000000000000600082015250565b600061554d601283614ac5565b915061555882615517565b602082019050919050565b6000602082019050818103600083015261557c81615540565b9050919050565b60008160011c9050919050565b6000808291508390505b60018511156155da578086048111156155b6576155b5615124565b5b60018516156155c55780820291505b80810290506155d385615583565b945061559a565b94509492505050565b6000826155f357600190506156af565b8161560157600090506156af565b8160018114615617576002811461562157615650565b60019150506156af565b60ff84111561563357615632615124565b5b8360020a91508482111561564a57615649615124565b5b506156af565b5060208310610133831016604e8410600b84101617156156855782820a9050838111156156805761567f615124565b5b6156af565b6156928484846001615590565b925090508184048111156156a9576156a8615124565b5b81810290505b9392505050565b60006156c182614bd8565b91506156cc83614bd8565b92506156f97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846155e3565b905092915050565b600061570c82614bd8565b915061571783614bd8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156157505761574f615124565b5b828202905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006157b7602683614ac5565b91506157c28261575b565b604082019050919050565b600060208201905081810360008301526157e6816157aa565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615849602483614ac5565b9150615854826157ed565b604082019050919050565b600060208201905081810360008301526158788161583c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006158db602283614ac5565b91506158e68261587f565b604082019050919050565b6000602082019050818103600083015261590a816158ce565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061596d602583614ac5565b915061597882615911565b604082019050919050565b6000602082019050818103600083015261599c81615960565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006159ff602383614ac5565b9150615a0a826159a3565b604082019050919050565b60006020820190508181036000830152615a2e816159f2565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000615a91602983614ac5565b9150615a9c82615a35565b604082019050919050565b60006020820190508181036000830152615ac081615a84565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615b0182614bd8565b9150615b0c83614bd8565b925082615b1c57615b1b615ac7565b5b828204905092915050565b6000615b3282614bd8565b9150615b3d83614bd8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115615b7257615b71615124565b5b828201905092915050565b7f205f6d61726b6574696e6757616c6c657441646472657373207472616e73666560008201527f7220697320726576657274656400000000000000000000000000000000000000602082015250565b6000615bd9602d83614ac5565b9150615be482615b7d565b604082019050919050565b60006020820190508181036000830152615c0881615bcc565b9050919050565b6000606082019050615c246000830186614c84565b615c316020830185614c84565b615c3e6040830184614c84565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000819050919050565b6000615c9a615c95615c9084615c75565b614d01565b614bd8565b9050919050565b615caa81615c7f565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615ce581614b9a565b82525050565b6000615cf78383615cdc565b60208301905092915050565b6000602082019050919050565b6000615d1b82615cb0565b615d258185615cbb565b9350615d3083615ccc565b8060005b83811015615d61578151615d488882615ceb565b9750615d5383615d03565b925050600181019050615d34565b5085935050505092915050565b600060a082019050615d836000830188614c84565b615d906020830187615ca1565b8181036040830152615da28186615d10565b9050615db16060830185614e28565b615dbe6080830184614c84565b9695505050505050565b600060c082019050615ddd6000830189614e28565b615dea6020830188614c84565b615df76040830187615ca1565b615e046060830186615ca1565b615e116080830185614e28565b615e1e60a0830184614c84565b979650505050505050565b600081519050615e3881614be2565b92915050565b600080600060608486031215615e5757615e56614b75565b5b6000615e6586828701615e29565b9350506020615e7686828701615e29565b9250506040615e8786828701615e29565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122064d66ff997bf85c54a76645b1036bb0b5d001cbed5aefdfaa0592ae6266c0a2e64736f6c634300080f0033
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.