ETH Price: $2,678.12 (-0.71%)

Token

Culthereum (CULTTER)
 

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 CULTTER

Value
$0.00
0xd7d6c53e14e0a1533cbc7fc118461ad5087e4e09
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
TOKEN

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 1 : CULTER.sol
// 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);
    }

}

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"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"}]

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.