ETH Price: $3,342.34 (-1.11%)

Token

Degrain (DGRN)
 

Overview

Max Total Supply

1,000,000,000 DGRN

Holders

5,995

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
Coinbase 6
Balance
1,310 DGRN

Value
$0.00
0xeb2629a2734e272bcc07bda959863f316f4bd4cf
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:
Degrain

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-06-17
*/

//SPDX-License-Identifier: MIT

pragma solidity 0.8.15;

interface IERC20 {
    function totalSupply() external view returns (uint);
    function balanceOf(address account) external view returns (uint);
    function transfer(address recipient, uint amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address spender, uint amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint value);
    event Approval(address indexed owner, address indexed spender, uint value);
}
library SafeMath {
    function add(uint a, uint b) internal pure returns (uint) {
        uint c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }
    function sub(uint a, uint b) internal pure returns (uint) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
    function sub(uint a, uint b, string memory errorMessage) internal pure returns (uint) {
        require(b <= a, errorMessage);
        uint c = a - b;

        return c;
    }
    function mul(uint a, uint b) internal pure returns (uint) {
        if (a == 0) {
            return 0;
        }

        uint c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }
    function div(uint a, uint b) internal pure returns (uint) {
        return div(a, b, "SafeMath: division by zero");
    }
    function div(uint a, uint b, string memory errorMessage) internal pure returns (uint) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint c = a / b;

        return c;
    }
}

contract Context {
    constructor () { }
    // solhint-disable-previous-line no-empty-blocks

    function _msgSender() internal view returns (address) {
        return msg.sender;
    }
}

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
       
        _owner = msg.sender ;
        emit OwnershipTransferred(address(0), _owner);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender() , "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}


contract ERC20Detailed {
    string private _name;
    string private _symbol;
    uint8 private _decimals;

    constructor (string memory tname, string memory tsymbol, uint8 tdecimals) {
        _name = tname;
        _symbol = tsymbol;
        _decimals = tdecimals;
        
    }
    function name() public view returns (string memory) {
        return _name;
    }
    function symbol() public view returns (string memory) {
        return _symbol;
    }
    function decimals() public view returns (uint8) {
        return _decimals;
    }
}



library Address {
    function isContract(address account) internal view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != 0x0 && codehash != accountHash);
    }
}

library SafeERC20 {
    using SafeMath for uint;
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function safeApprove(IERC20 token, address spender, uint value) internal {
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }
    function callOptionalReturn(IERC20 token, bytes memory data) private {
        require(address(token).isContract(), "SafeERC20: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = address(token).call(data);
        require(success, "SafeERC20: low-level call failed");

        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

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 Degrain is Context, Ownable, IERC20, ERC20Detailed {
  using SafeERC20 for IERC20;
  using Address for address;
  using SafeMath for uint256;
  
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    
    mapping (address => uint) internal _balances;
    mapping (address => mapping (address => uint)) internal _allowances;
    mapping (address => bool) private _isExcludedFromFee;
    
    uint256 internal _totalSupply;


    uint256 private marketingFee;
    uint256 private burnFee;
    uint256 private liquidityFee;
    uint256 private totalFee;

    uint256 public BUYmarketingFee = 2;
    uint256 public BUYburnFee = 1;
    uint256 public BUYliquidityFee = 2;
    uint256 public BUYtotalFee = BUYliquidityFee.add(BUYmarketingFee).add(BUYburnFee);

    uint256 public SELLmarketingFee = 2;
    uint256 public SELLburnFee = 2;
    uint256 public SELLliquidityFee = 6;
    uint256 public SELLtotalFee = SELLliquidityFee.add(SELLmarketingFee).add(SELLburnFee);

    address payable public marketingaddress = payable(0x78282540167f21A17d80248721261DBd0dD5e8da);
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
   

    uint256 public numTokensSellToAddToLiquidity = 100000 * 10**18;
    uint256 public maxTxAmount =   1000000000 * 10**18;
   
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
     event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    bool private swapping;
    
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
  
    address public _owner;
  
    constructor () ERC20Detailed("Degrain", "DGRN", 18) {
      _owner = msg.sender ;
    _totalSupply = 1000000000 * (10**18);
    
	_balances[_owner] = _totalSupply;
	//uniswapv3 router = 0xE592427A0AEce92De3Edee1F18E0157C05861564
	 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[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[marketingaddress] = true;

     emit Transfer(address(0), _msgSender(), _totalSupply);
  }
  
    function totalSupply() public view override returns (uint) {
        return _totalSupply;
    }
    function balanceOf(address account) public view override returns (uint) {
        return _balances[account];
    }
    function transfer(address recipient, uint amount) public override  returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
    function allowance(address towner, address spender) public view override returns (uint) {
        return _allowances[towner][spender];
    }
    function approve(address spender, uint amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
    function transferFrom(address sender, address recipient, uint 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, uint addedValue) public returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }
    function decreaseAllowance(address spender, uint subtractedValue) public returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function setMarketingAddress(address payable wallet) external onlyOwner
    {
        marketingaddress = wallet;
    }



    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function changeNumTokensSellToAddToLiquidity(uint256 _numTokensSellToAddToLiquidity) external onlyOwner
    {
        numTokensSellToAddToLiquidity = _numTokensSellToAddToLiquidity;
    }
    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }


        function changeMaxTxLimit(uint256 _number) external onlyOwner
    {
        maxTxAmount = _number;
    }
   
     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}
    function _transfer(address sender, address recipient, uint amount) internal{

        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        if(sender != owner() && recipient != owner())
        {
            require(amount <= maxTxAmount, "Transaction size limit reached");
        }

        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap + liquidity lock?
        // also, don't get caught in a circular liquidity event.
        // also, don't swap & liquify if sender is uniswap pair.
        uint256 contractTokenBalance = balanceOf(address(this));
        

        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (
            overMinTokenBalance &&
            !swapping &&
            sender != uniswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
            swapping = true;
           
            uint256 walletTokens = contractTokenBalance.mul(SELLmarketingFee).div(SELLtotalFee);
            uint256 contractBalance = address(this).balance;
            swapTokensForEth(walletTokens);
            uint256 newBalance = address(this).balance.sub(contractBalance);
            uint256 marketingShare = newBalance.mul(SELLmarketingFee).div((SELLmarketingFee));
            //uint256 rewardShare = newBalance.sub(marketingShare);
            payable(marketingaddress).transfer(marketingShare);

            uint256 swapTokens = contractTokenBalance.mul(SELLliquidityFee).div(SELLtotalFee);
            swapAndLiquify(swapTokens);

            swapping = false;

        }
        
         //indicates if fee should be deducted from transfer
        bool takeFee = !swapping;
        
        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]){
            takeFee = false;
        }

        if(sender != uniswapV2Pair && recipient != uniswapV2Pair)
        {
            takeFee = false;
        }
        if(takeFee){
        if(sender == uniswapV2Pair)
        {
            marketingFee = BUYmarketingFee;
            liquidityFee = BUYliquidityFee;
            burnFee = BUYburnFee;
            totalFee = BUYtotalFee;
           
        }
        if(recipient == uniswapV2Pair)
        {
            marketingFee = SELLmarketingFee;
            liquidityFee = SELLliquidityFee;
            burnFee = SELLburnFee;
            totalFee = SELLtotalFee;

        }
        }
       
        if(takeFee)
        {
            uint256 taxAmount = amount.mul(totalFee).div(100);
            uint256 burnAmount = taxAmount.mul(burnFee).div(totalFee);
            uint256 TotalSent = amount.sub(taxAmount);
            _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
            _balances[recipient] = _balances[recipient].add(TotalSent);
            _balances[address(this)] = _balances[address(this)].add(taxAmount);
            _balances[address(0)] = _balances[address(0)].add(burnAmount);
            emit Transfer(sender, recipient, TotalSent);
            emit Transfer(sender, address(this), taxAmount);
            emit Transfer(sender, address(0), burnAmount);
        }
        else
        {
            _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
            _balances[recipient] = _balances[recipient].add(amount);
            emit Transfer(sender, recipient, amount);
        }

      
    }


    function setSellFee(uint256 _onSellEthBurndFee, uint256 _onSellliuidityFee, uint256 _onSellMarketingFee) public onlyOwner {

        SELLmarketingFee = _onSellMarketingFee;
        SELLburnFee = _onSellEthBurndFee;
        SELLliquidityFee = _onSellliuidityFee;
        uint256  onSelltotalFees;
        onSelltotalFees = SELLmarketingFee.add(SELLburnFee).add(SELLliquidityFee);
        require(onSelltotalFees <= 15, "Sell Fee should be 15% or less");
    }

    function setBuyFee(uint256 _onBuyBurndFee, uint256 _onBuyliuidityFee, uint256 _onBuyMarketingFee) public onlyOwner {

        BUYmarketingFee = _onBuyMarketingFee;
        BUYburnFee = _onBuyBurndFee;
        BUYliquidityFee = _onBuyliuidityFee;
        uint256  onBuytotalFees;
        onBuytotalFees = BUYmarketingFee.add(BUYburnFee).add(BUYliquidityFee);
        require(onBuytotalFees <= 15, "Buy Fee should be 15% or less");
    }


     function swapAndLiquify(uint256 tokens) private lockTheSwap {
       
       // split the contract balance into halves
        uint256 half = tokens.div(2);
        uint256 otherHalf = tokens.sub(half);

        // capture the contract's current ETH balance.
        // this is so that we can capture exactly the amount of ETH that the
        // swap creates, and not make the liquidity event include any ETH that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered

        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);

        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

      function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {

        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );

    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function _approve(address towner, address spender, uint amount) internal {
        require(towner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[towner][spender] = amount;
        emit Approval(towner, spender, amount);
    }

    function withdrawStuckETh() external onlyOwner{
        require (address(this).balance > 0, "Can't withdraw negative or zero");
        payable(owner()).transfer(address(this).balance);
    }



    function removeStuckToken(address _address) external onlyOwner {
        require(_address != address(this), "Can't withdraw tokens destined for liquidity");
        require(IERC20(_address).balanceOf(address(this)) > 0, "Can't withdraw 0");

        IERC20(_address).transfer(owner(), IERC20(_address).balanceOf(address(this)));
    } 

}

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":"BUYburnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BUYliquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BUYmarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BUYtotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SELLburnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SELLliquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SELLmarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SELLtotalFee","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":"address","name":"towner","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":[{"internalType":"uint256","name":"_number","type":"uint256"}],"name":"changeMaxTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numTokensSellToAddToLiquidity","type":"uint256"}],"name":"changeNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","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":[],"name":"marketingaddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"address","name":"_address","type":"address"}],"name":"removeStuckToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_onBuyBurndFee","type":"uint256"},{"internalType":"uint256","name":"_onBuyliuidityFee","type":"uint256"},{"internalType":"uint256","name":"_onBuyMarketingFee","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"wallet","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_onSellEthBurndFee","type":"uint256"},{"internalType":"uint256","name":"_onSellliuidityFee","type":"uint256"},{"internalType":"uint256","name":"_onSellMarketingFee","type":"uint256"}],"name":"setSellFee","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":[],"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":"withdrawStuckETh","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526002600c556001600d556002600e556200004c600d5462000038600c54600e54620006fb60201b62001ce81790919060201c565b620006fb60201b62001ce81790919060201c565b600f556002601055600260115560066012556200009760115462000083601054601254620006fb60201b62001ce81790919060201c565b620006fb60201b62001ce81790919060201c565b6013557378282540167f21a17d80248721261dbd0dd5e8da601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601460156101000a81548160ff02191690831515021790555069152d02c7e14af68000006015556b033b2e3c9fd0803ce80000006016553480156200013557600080fd5b506040518060400160405280600781526020017f4465677261696e000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4447524e000000000000000000000000000000000000000000000000000000008152506012336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3826001908162000270919062000a09565b50816002908162000282919062000a09565b5080600360006101000a81548160ff021916908360ff16021790555050505033601760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506b033b2e3c9fd0803ce800000060078190555060075460046000601760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003e8919062000b5a565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000450573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000476919062000b5a565b6040518363ffffffff1660e01b81526004016200049592919062000b9d565b6020604051808303816000875af1158015620004b5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004db919062000b5a565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050600160066000620005586200075e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200068b6200078760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600754604051620006ec919062000bdb565b60405180910390a35062000d07565b60008082846200070c919062000c27565b90508381101562000754576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200074b9062000ce5565b60405180910390fd5b8091505092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600033905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200081157607f821691505b602082108103620008275762000826620007c9565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620008917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000852565b6200089d868362000852565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620008ea620008e4620008de84620008b5565b620008bf565b620008b5565b9050919050565b6000819050919050565b6200090683620008c9565b6200091e6200091582620008f1565b8484546200085f565b825550505050565b600090565b6200093562000926565b62000942818484620008fb565b505050565b5b818110156200096a576200095e6000826200092b565b60018101905062000948565b5050565b601f821115620009b95762000983816200082d565b6200098e8462000842565b810160208510156200099e578190505b620009b6620009ad8562000842565b83018262000947565b50505b505050565b600082821c905092915050565b6000620009de60001984600802620009be565b1980831691505092915050565b6000620009f98383620009cb565b9150826002028217905092915050565b62000a14826200078f565b67ffffffffffffffff81111562000a305762000a2f6200079a565b5b62000a3c8254620007f8565b62000a498282856200096e565b600060209050601f83116001811462000a81576000841562000a6c578287015190505b62000a788582620009eb565b86555062000ae8565b601f19841662000a91866200082d565b60005b8281101562000abb5784890151825560018201915060208501945060208101905062000a94565b8683101562000adb578489015162000ad7601f891682620009cb565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b228262000af5565b9050919050565b62000b348162000b15565b811462000b4057600080fd5b50565b60008151905062000b548162000b29565b92915050565b60006020828403121562000b735762000b7262000af0565b5b600062000b838482850162000b43565b91505092915050565b62000b978162000b15565b82525050565b600060408201905062000bb4600083018562000b8c565b62000bc3602083018462000b8c565b9392505050565b62000bd581620008b5565b82525050565b600060208201905062000bf2600083018462000bca565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000c3482620008b5565b915062000c4183620008b5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000c795762000c7862000bf8565b5b828201905092915050565b600082825260208201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062000ccd601b8362000c84565b915062000cda8262000c95565b602082019050919050565b6000602082019050818103600083015262000d008162000cbe565b9050919050565b60805160a0516142aa62000d7360003960008181611002015281816120f001528181612378015281816123cf0152818161243001526124a8015260008181610af501528181612cb401528181612d9501528181612dbc01528181612fd9015261300001526142aa6000f3fe6080604052600436106102345760003560e01c806370a082311161012e578063c49b9a80116100ab578063e0f07e3a1161006f578063e0f07e3a1461083c578063e745b25414610867578063ea2f0b3714610892578063f2fde38b146108bb578063fa716d13146108e45761023b565b8063c49b9a8014610759578063c57a6c4414610782578063d12a7688146107ab578063dd62ed3e146107d6578063e083e922146108135761023b565b8063906e9dd0116100f2578063906e9dd01461066057806395d89b4114610689578063a457c2d7146106b4578063a9059cbb146106f1578063b2bdfa7b1461072e5761023b565b806370a082311461058b578063715018a6146105c8578063889b408c146105df5780638c0b5e221461060a5780638da5cb5b146106355761023b565b806325519cf2116101bc57806349bd5a5e1161018057806349bd5a5e146104b65780634a74bb02146104e15780635eb043471461050c57806366b77e8a146105355780636ed705f8146105605761023b565b806325519cf2146103d1578063313ce567146103fa57806333759dfb146104255780633950935114610450578063437823ec1461048d5761023b565b80630b4ae420116102035780630b4ae420146102fe5780631694505e1461031557806318160ddd146103405780631d865c301461036b57806323b872dd146103945761023b565b8063043a28ee1461024057806306e8781a1461026b57806306fdde0314610296578063095ea7b3146102c15761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b5061025561090f565b60405161026291906130cd565b60405180910390f35b34801561027757600080fd5b50610280610915565b60405161028d91906130cd565b60405180910390f35b3480156102a257600080fd5b506102ab61091b565b6040516102b89190613181565b60405180910390f35b3480156102cd57600080fd5b506102e860048036038101906102e39190613232565b6109ad565b6040516102f5919061328d565b60405180910390f35b34801561030a57600080fd5b506103136109cb565b005b34801561032157600080fd5b5061032a610af3565b6040516103379190613307565b60405180910390f35b34801561034c57600080fd5b50610355610b17565b60405161036291906130cd565b60405180910390f35b34801561037757600080fd5b50610392600480360381019061038d9190613322565b610b21565b005b3480156103a057600080fd5b506103bb60048036038101906103b69190613375565b610c44565b6040516103c8919061328d565b60405180910390f35b3480156103dd57600080fd5b506103f860048036038101906103f39190613322565b610d1d565b005b34801561040657600080fd5b5061040f610e40565b60405161041c91906133e4565b60405180910390f35b34801561043157600080fd5b5061043a610e57565b60405161044791906130cd565b60405180910390f35b34801561045c57600080fd5b5061047760048036038101906104729190613232565b610e5d565b604051610484919061328d565b60405180910390f35b34801561049957600080fd5b506104b460048036038101906104af91906133ff565b610f10565b005b3480156104c257600080fd5b506104cb611000565b6040516104d8919061343b565b60405180910390f35b3480156104ed57600080fd5b506104f6611024565b604051610503919061328d565b60405180910390f35b34801561051857600080fd5b50610533600480360381019061052e9190613456565b611037565b005b34801561054157600080fd5b5061054a6110d6565b60405161055791906130cd565b60405180910390f35b34801561056c57600080fd5b506105756110dc565b60405161058291906130cd565b60405180910390f35b34801561059757600080fd5b506105b260048036038101906105ad91906133ff565b6110e2565b6040516105bf91906130cd565b60405180910390f35b3480156105d457600080fd5b506105dd61112b565b005b3480156105eb57600080fd5b506105f461127e565b60405161060191906130cd565b60405180910390f35b34801561061657600080fd5b5061061f611284565b60405161062c91906130cd565b60405180910390f35b34801561064157600080fd5b5061064a61128a565b604051610657919061343b565b60405180910390f35b34801561066c57600080fd5b50610687600480360381019061068291906134c1565b6112b3565b005b34801561069557600080fd5b5061069e61138c565b6040516106ab9190613181565b60405180910390f35b3480156106c057600080fd5b506106db60048036038101906106d69190613232565b61141e565b6040516106e8919061328d565b60405180910390f35b3480156106fd57600080fd5b5061071860048036038101906107139190613232565b6114eb565b604051610725919061328d565b60405180910390f35b34801561073a57600080fd5b50610743611509565b604051610750919061343b565b60405180910390f35b34801561076557600080fd5b50610780600480360381019061077b919061351a565b61152f565b005b34801561078e57600080fd5b506107a960048036038101906107a49190613456565b611618565b005b3480156107b757600080fd5b506107c06116b7565b6040516107cd91906130cd565b60405180910390f35b3480156107e257600080fd5b506107fd60048036038101906107f89190613547565b6116bd565b60405161080a91906130cd565b60405180910390f35b34801561081f57600080fd5b5061083a600480360381019061083591906133ff565b611744565b005b34801561084857600080fd5b50610851611a05565b60405161085e9190613596565b60405180910390f35b34801561087357600080fd5b5061087c611a2b565b60405161088991906130cd565b60405180910390f35b34801561089e57600080fd5b506108b960048036038101906108b491906133ff565b611a31565b005b3480156108c757600080fd5b506108e260048036038101906108dd91906133ff565b611b21565b005b3480156108f057600080fd5b506108f9611ce2565b60405161090691906130cd565b60405180910390f35b600f5481565b600c5481565b60606001805461092a906135e0565b80601f0160208091040260200160405190810160405280929190818152602001828054610956906135e0565b80156109a35780601f10610978576101008083540402835291602001916109a3565b820191906000526020600020905b81548152906001019060200180831161098657829003601f168201915b5050505050905090565b60006109c16109ba611d46565b8484611d4e565b6001905092915050565b6109d3611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a579061365d565b60405180910390fd5b60004711610aa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9a906136c9565b60405180910390fd5b610aab61128a565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610af0573d6000803e3d6000fd5b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600754905090565b610b29611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bad9061365d565b60405180910390fd5b8060108190555082601181905550816012819055506000610bf8601254610bea601154601054611ce890919063ffffffff16565b611ce890919063ffffffff16565b9050600f811115610c3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3590613735565b60405180910390fd5b50505050565b6000610c51848484611f17565b610d1284610c5d611d46565b610d0d8560405180606001604052806028815260200161422860289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610cc3611d46565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612aed9092919063ffffffff16565b611d4e565b600190509392505050565b610d25611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610db2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da99061365d565b60405180910390fd5b80600c8190555082600d8190555081600e819055506000610df4600e54610de6600d54600c54611ce890919063ffffffff16565b611ce890919063ffffffff16565b9050600f811115610e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e31906137a1565b60405180910390fd5b50505050565b6000600360009054906101000a900460ff16905090565b60135481565b6000610f06610e6a611d46565b84610f018560056000610e7b611d46565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ce890919063ffffffff16565b611d4e565b6001905092915050565b610f18611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9c9061365d565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601460159054906101000a900460ff1681565b61103f611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c39061365d565b60405180910390fd5b8060168190555050565b600d5481565b60115481565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611133611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b79061365d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60125481565b60165481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6112bb611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611348576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133f9061365d565b60405180910390fd5b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606002805461139b906135e0565b80601f01602080910402602001604051908101604052809291908181526020018280546113c7906135e0565b80156114145780601f106113e957610100808354040283529160200191611414565b820191906000526020600020905b8154815290600101906020018083116113f757829003601f168201915b5050505050905090565b60006114e161142b611d46565b846114dc856040518060600160405280602581526020016142506025913960056000611455611d46565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612aed9092919063ffffffff16565b611d4e565b6001905092915050565b60006114ff6114f8611d46565b8484611f17565b6001905092915050565b601760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611537611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bb9061365d565b60405180910390fd5b80601460156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161160d919061328d565b60405180910390a150565b611620611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a49061365d565b60405180910390fd5b8060158190555050565b60155481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61174c611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d09061365d565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183e90613833565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611882919061343b565b602060405180830381865afa15801561189f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c39190613868565b11611903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fa906138e1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61192761128a565b8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611960919061343b565b602060405180830381865afa15801561197d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a19190613868565b6040518363ffffffff1660e01b81526004016119be929190613901565b6020604051808303816000875af11580156119dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a01919061393f565b5050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b611a39611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ac6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abd9061365d565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611b29611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bad9061365d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1c906139de565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e5481565b6000808284611cf79190613a2d565b905083811015611d3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3390613acf565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611dbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db490613b61565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2390613bf3565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f0a91906130cd565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7d90613c85565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fec90613d17565b60405180910390fd5b611ffd61128a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561206b575061203b61128a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156120b6576016548111156120b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ac90613d83565b60405180910390fd5b5b60006120c1306110e2565b9050600060155482101590508080156120e75750601760009054906101000a900460ff16155b801561213f57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156121575750601460159054906101000a900460ff165b156122b6576001601760006101000a81548160ff02191690831515021790555060006121a260135461219460105486612b5190919063ffffffff16565b612bcb90919063ffffffff16565b905060004790506121b282612c15565b60006121c78247612e5290919063ffffffff16565b905060006121f46010546121e660105485612b5190919063ffffffff16565b612bcb90919063ffffffff16565b9050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561225e573d6000803e3d6000fd5b50600061228a60135461227c6012548a612b5190919063ffffffff16565b612bcb90919063ffffffff16565b905061229581612e9c565b6000601760006101000a81548160ff02191690831515021790555050505050505b6000601760009054906101000a900460ff16159050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061236c5750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561237657600090505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415801561241e57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b1561242857600090505b801561251f577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16036124a657600c54600881905550600e54600a81905550600d54600981905550600f54600b819055505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361251e57601054600881905550601254600a81905550601154600981905550601354600b819055505b5b801561293b57600061254f6064612541600b5488612b5190919063ffffffff16565b612bcb90919063ffffffff16565b9050600061257c600b5461256e60095485612b5190919063ffffffff16565b612bcb90919063ffffffff16565b905060006125938388612e5290919063ffffffff16565b90506126018760405180606001604052806026815260200161420260269139600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612aed9092919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061269681600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ce890919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061272b83600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ce890919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506127c082600460008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ce890919063ffffffff16565b600460008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161286091906130cd565b60405180910390a33073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516128c591906130cd565b60405180910390a3600073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161292b91906130cd565b60405180910390a3505050612ae5565b6129a78460405180606001604052806026815260200161420260269139600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612aed9092919063ffffffff16565b600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612a3c84600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ce890919063ffffffff16565b600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612adc91906130cd565b60405180910390a35b505050505050565b6000838311158290612b35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2c9190613181565b60405180910390fd5b5060008385612b449190613da3565b9050809150509392505050565b6000808303612b635760009050612bc5565b60008284612b719190613dd7565b9050828482612b809190613e60565b14612bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb790613f03565b60405180910390fd5b809150505b92915050565b6000612c0d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612f70565b905092915050565b6000600267ffffffffffffffff811115612c3257612c31613f23565b5b604051908082528060200260200182016040528015612c605781602001602082028036833780820191505090505b5090503081600081518110612c7857612c77613f52565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d419190613f96565b81600181518110612d5557612d54613f52565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612dba307f000000000000000000000000000000000000000000000000000000000000000084611d4e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612e1c9594939291906140bc565b600060405180830381600087803b158015612e3657600080fd5b505af1158015612e4a573d6000803e3d6000fd5b505050505050565b6000612e9483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612aed565b905092915050565b60016014806101000a81548160ff0219169083151502179055506000612ecc600283612bcb90919063ffffffff16565b90506000612ee38284612e5290919063ffffffff16565b90506000479050612ef383612c15565b6000612f088247612e5290919063ffffffff16565b9050612f148382612fd3565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848285604051612f4793929190614116565b60405180910390a15050505060006014806101000a81548160ff02191690831515021790555050565b60008083118290612fb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fae9190613181565b60405180910390fd5b5060008385612fc69190613e60565b9050809150509392505050565b612ffe307f000000000000000000000000000000000000000000000000000000000000000084611d4e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061304861128a565b426040518863ffffffff1660e01b815260040161306a9695949392919061414d565b60606040518083038185885af1158015613088573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906130ad91906141ae565b5050505050565b6000819050919050565b6130c7816130b4565b82525050565b60006020820190506130e260008301846130be565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613122578082015181840152602081019050613107565b83811115613131576000848401525b50505050565b6000601f19601f8301169050919050565b6000613153826130e8565b61315d81856130f3565b935061316d818560208601613104565b61317681613137565b840191505092915050565b6000602082019050818103600083015261319b8184613148565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006131d3826131a8565b9050919050565b6131e3816131c8565b81146131ee57600080fd5b50565b600081359050613200816131da565b92915050565b61320f816130b4565b811461321a57600080fd5b50565b60008135905061322c81613206565b92915050565b60008060408385031215613249576132486131a3565b5b6000613257858286016131f1565b92505060206132688582860161321d565b9150509250929050565b60008115159050919050565b61328781613272565b82525050565b60006020820190506132a2600083018461327e565b92915050565b6000819050919050565b60006132cd6132c86132c3846131a8565b6132a8565b6131a8565b9050919050565b60006132df826132b2565b9050919050565b60006132f1826132d4565b9050919050565b613301816132e6565b82525050565b600060208201905061331c60008301846132f8565b92915050565b60008060006060848603121561333b5761333a6131a3565b5b60006133498682870161321d565b935050602061335a8682870161321d565b925050604061336b8682870161321d565b9150509250925092565b60008060006060848603121561338e5761338d6131a3565b5b600061339c868287016131f1565b93505060206133ad868287016131f1565b92505060406133be8682870161321d565b9150509250925092565b600060ff82169050919050565b6133de816133c8565b82525050565b60006020820190506133f960008301846133d5565b92915050565b600060208284031215613415576134146131a3565b5b6000613423848285016131f1565b91505092915050565b613435816131c8565b82525050565b6000602082019050613450600083018461342c565b92915050565b60006020828403121561346c5761346b6131a3565b5b600061347a8482850161321d565b91505092915050565b600061348e826131a8565b9050919050565b61349e81613483565b81146134a957600080fd5b50565b6000813590506134bb81613495565b92915050565b6000602082840312156134d7576134d66131a3565b5b60006134e5848285016134ac565b91505092915050565b6134f781613272565b811461350257600080fd5b50565b600081359050613514816134ee565b92915050565b6000602082840312156135305761352f6131a3565b5b600061353e84828501613505565b91505092915050565b6000806040838503121561355e5761355d6131a3565b5b600061356c858286016131f1565b925050602061357d858286016131f1565b9150509250929050565b61359081613483565b82525050565b60006020820190506135ab6000830184613587565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806135f857607f821691505b60208210810361360b5761360a6135b1565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006136476020836130f3565b915061365282613611565b602082019050919050565b600060208201905081810360008301526136768161363a565b9050919050565b7f43616e2774207769746864726177206e65676174697665206f72207a65726f00600082015250565b60006136b3601f836130f3565b91506136be8261367d565b602082019050919050565b600060208201905081810360008301526136e2816136a6565b9050919050565b7f53656c6c204665652073686f756c6420626520313525206f72206c6573730000600082015250565b600061371f601e836130f3565b915061372a826136e9565b602082019050919050565b6000602082019050818103600083015261374e81613712565b9050919050565b7f427579204665652073686f756c6420626520313525206f72206c657373000000600082015250565b600061378b601d836130f3565b915061379682613755565b602082019050919050565b600060208201905081810360008301526137ba8161377e565b9050919050565b7f43616e277420776974686472617720746f6b656e732064657374696e6564206660008201527f6f72206c69717569646974790000000000000000000000000000000000000000602082015250565b600061381d602c836130f3565b9150613828826137c1565b604082019050919050565b6000602082019050818103600083015261384c81613810565b9050919050565b60008151905061386281613206565b92915050565b60006020828403121561387e5761387d6131a3565b5b600061388c84828501613853565b91505092915050565b7f43616e2774207769746864726177203000000000000000000000000000000000600082015250565b60006138cb6010836130f3565b91506138d682613895565b602082019050919050565b600060208201905081810360008301526138fa816138be565b9050919050565b6000604082019050613916600083018561342c565b61392360208301846130be565b9392505050565b600081519050613939816134ee565b92915050565b600060208284031215613955576139546131a3565b5b60006139638482850161392a565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006139c86026836130f3565b91506139d38261396c565b604082019050919050565b600060208201905081810360008301526139f7816139bb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613a38826130b4565b9150613a43836130b4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613a7857613a776139fe565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613ab9601b836130f3565b9150613ac482613a83565b602082019050919050565b60006020820190508181036000830152613ae881613aac565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613b4b6024836130f3565b9150613b5682613aef565b604082019050919050565b60006020820190508181036000830152613b7a81613b3e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613bdd6022836130f3565b9150613be882613b81565b604082019050919050565b60006020820190508181036000830152613c0c81613bd0565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613c6f6025836130f3565b9150613c7a82613c13565b604082019050919050565b60006020820190508181036000830152613c9e81613c62565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613d016023836130f3565b9150613d0c82613ca5565b604082019050919050565b60006020820190508181036000830152613d3081613cf4565b9050919050565b7f5472616e73616374696f6e2073697a65206c696d697420726561636865640000600082015250565b6000613d6d601e836130f3565b9150613d7882613d37565b602082019050919050565b60006020820190508181036000830152613d9c81613d60565b9050919050565b6000613dae826130b4565b9150613db9836130b4565b925082821015613dcc57613dcb6139fe565b5b828203905092915050565b6000613de2826130b4565b9150613ded836130b4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e2657613e256139fe565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613e6b826130b4565b9150613e76836130b4565b925082613e8657613e85613e31565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613eed6021836130f3565b9150613ef882613e91565b604082019050919050565b60006020820190508181036000830152613f1c81613ee0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050613f90816131da565b92915050565b600060208284031215613fac57613fab6131a3565b5b6000613fba84828501613f81565b91505092915050565b6000819050919050565b6000613fe8613fe3613fde84613fc3565b6132a8565b6130b4565b9050919050565b613ff881613fcd565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614033816131c8565b82525050565b6000614045838361402a565b60208301905092915050565b6000602082019050919050565b600061406982613ffe565b6140738185614009565b935061407e8361401a565b8060005b838110156140af5781516140968882614039565b97506140a183614051565b925050600181019050614082565b5085935050505092915050565b600060a0820190506140d160008301886130be565b6140de6020830187613fef565b81810360408301526140f0818661405e565b90506140ff606083018561342c565b61410c60808301846130be565b9695505050505050565b600060608201905061412b60008301866130be565b61413860208301856130be565b61414560408301846130be565b949350505050565b600060c082019050614162600083018961342c565b61416f60208301886130be565b61417c6040830187613fef565b6141896060830186613fef565b614196608083018561342c565b6141a360a08301846130be565b979650505050505050565b6000806000606084860312156141c7576141c66131a3565b5b60006141d586828701613853565b93505060206141e686828701613853565b92505060406141f786828701613853565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220dc9dcbb895e90f37c752e7647442dbb2dd8d946fead6c564f46b8e527e09363564736f6c634300080f0033

Deployed Bytecode

0x6080604052600436106102345760003560e01c806370a082311161012e578063c49b9a80116100ab578063e0f07e3a1161006f578063e0f07e3a1461083c578063e745b25414610867578063ea2f0b3714610892578063f2fde38b146108bb578063fa716d13146108e45761023b565b8063c49b9a8014610759578063c57a6c4414610782578063d12a7688146107ab578063dd62ed3e146107d6578063e083e922146108135761023b565b8063906e9dd0116100f2578063906e9dd01461066057806395d89b4114610689578063a457c2d7146106b4578063a9059cbb146106f1578063b2bdfa7b1461072e5761023b565b806370a082311461058b578063715018a6146105c8578063889b408c146105df5780638c0b5e221461060a5780638da5cb5b146106355761023b565b806325519cf2116101bc57806349bd5a5e1161018057806349bd5a5e146104b65780634a74bb02146104e15780635eb043471461050c57806366b77e8a146105355780636ed705f8146105605761023b565b806325519cf2146103d1578063313ce567146103fa57806333759dfb146104255780633950935114610450578063437823ec1461048d5761023b565b80630b4ae420116102035780630b4ae420146102fe5780631694505e1461031557806318160ddd146103405780631d865c301461036b57806323b872dd146103945761023b565b8063043a28ee1461024057806306e8781a1461026b57806306fdde0314610296578063095ea7b3146102c15761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b5061025561090f565b60405161026291906130cd565b60405180910390f35b34801561027757600080fd5b50610280610915565b60405161028d91906130cd565b60405180910390f35b3480156102a257600080fd5b506102ab61091b565b6040516102b89190613181565b60405180910390f35b3480156102cd57600080fd5b506102e860048036038101906102e39190613232565b6109ad565b6040516102f5919061328d565b60405180910390f35b34801561030a57600080fd5b506103136109cb565b005b34801561032157600080fd5b5061032a610af3565b6040516103379190613307565b60405180910390f35b34801561034c57600080fd5b50610355610b17565b60405161036291906130cd565b60405180910390f35b34801561037757600080fd5b50610392600480360381019061038d9190613322565b610b21565b005b3480156103a057600080fd5b506103bb60048036038101906103b69190613375565b610c44565b6040516103c8919061328d565b60405180910390f35b3480156103dd57600080fd5b506103f860048036038101906103f39190613322565b610d1d565b005b34801561040657600080fd5b5061040f610e40565b60405161041c91906133e4565b60405180910390f35b34801561043157600080fd5b5061043a610e57565b60405161044791906130cd565b60405180910390f35b34801561045c57600080fd5b5061047760048036038101906104729190613232565b610e5d565b604051610484919061328d565b60405180910390f35b34801561049957600080fd5b506104b460048036038101906104af91906133ff565b610f10565b005b3480156104c257600080fd5b506104cb611000565b6040516104d8919061343b565b60405180910390f35b3480156104ed57600080fd5b506104f6611024565b604051610503919061328d565b60405180910390f35b34801561051857600080fd5b50610533600480360381019061052e9190613456565b611037565b005b34801561054157600080fd5b5061054a6110d6565b60405161055791906130cd565b60405180910390f35b34801561056c57600080fd5b506105756110dc565b60405161058291906130cd565b60405180910390f35b34801561059757600080fd5b506105b260048036038101906105ad91906133ff565b6110e2565b6040516105bf91906130cd565b60405180910390f35b3480156105d457600080fd5b506105dd61112b565b005b3480156105eb57600080fd5b506105f461127e565b60405161060191906130cd565b60405180910390f35b34801561061657600080fd5b5061061f611284565b60405161062c91906130cd565b60405180910390f35b34801561064157600080fd5b5061064a61128a565b604051610657919061343b565b60405180910390f35b34801561066c57600080fd5b50610687600480360381019061068291906134c1565b6112b3565b005b34801561069557600080fd5b5061069e61138c565b6040516106ab9190613181565b60405180910390f35b3480156106c057600080fd5b506106db60048036038101906106d69190613232565b61141e565b6040516106e8919061328d565b60405180910390f35b3480156106fd57600080fd5b5061071860048036038101906107139190613232565b6114eb565b604051610725919061328d565b60405180910390f35b34801561073a57600080fd5b50610743611509565b604051610750919061343b565b60405180910390f35b34801561076557600080fd5b50610780600480360381019061077b919061351a565b61152f565b005b34801561078e57600080fd5b506107a960048036038101906107a49190613456565b611618565b005b3480156107b757600080fd5b506107c06116b7565b6040516107cd91906130cd565b60405180910390f35b3480156107e257600080fd5b506107fd60048036038101906107f89190613547565b6116bd565b60405161080a91906130cd565b60405180910390f35b34801561081f57600080fd5b5061083a600480360381019061083591906133ff565b611744565b005b34801561084857600080fd5b50610851611a05565b60405161085e9190613596565b60405180910390f35b34801561087357600080fd5b5061087c611a2b565b60405161088991906130cd565b60405180910390f35b34801561089e57600080fd5b506108b960048036038101906108b491906133ff565b611a31565b005b3480156108c757600080fd5b506108e260048036038101906108dd91906133ff565b611b21565b005b3480156108f057600080fd5b506108f9611ce2565b60405161090691906130cd565b60405180910390f35b600f5481565b600c5481565b60606001805461092a906135e0565b80601f0160208091040260200160405190810160405280929190818152602001828054610956906135e0565b80156109a35780601f10610978576101008083540402835291602001916109a3565b820191906000526020600020905b81548152906001019060200180831161098657829003601f168201915b5050505050905090565b60006109c16109ba611d46565b8484611d4e565b6001905092915050565b6109d3611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a579061365d565b60405180910390fd5b60004711610aa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9a906136c9565b60405180910390fd5b610aab61128a565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610af0573d6000803e3d6000fd5b50565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600754905090565b610b29611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bad9061365d565b60405180910390fd5b8060108190555082601181905550816012819055506000610bf8601254610bea601154601054611ce890919063ffffffff16565b611ce890919063ffffffff16565b9050600f811115610c3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3590613735565b60405180910390fd5b50505050565b6000610c51848484611f17565b610d1284610c5d611d46565b610d0d8560405180606001604052806028815260200161422860289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610cc3611d46565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612aed9092919063ffffffff16565b611d4e565b600190509392505050565b610d25611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610db2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da99061365d565b60405180910390fd5b80600c8190555082600d8190555081600e819055506000610df4600e54610de6600d54600c54611ce890919063ffffffff16565b611ce890919063ffffffff16565b9050600f811115610e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e31906137a1565b60405180910390fd5b50505050565b6000600360009054906101000a900460ff16905090565b60135481565b6000610f06610e6a611d46565b84610f018560056000610e7b611d46565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ce890919063ffffffff16565b611d4e565b6001905092915050565b610f18611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9c9061365d565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b7f0000000000000000000000008521a3db3c1ce70060c742aeca1013f1d050c48a81565b601460159054906101000a900460ff1681565b61103f611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c39061365d565b60405180910390fd5b8060168190555050565b600d5481565b60115481565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611133611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b79061365d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60125481565b60165481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6112bb611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611348576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133f9061365d565b60405180910390fd5b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606002805461139b906135e0565b80601f01602080910402602001604051908101604052809291908181526020018280546113c7906135e0565b80156114145780601f106113e957610100808354040283529160200191611414565b820191906000526020600020905b8154815290600101906020018083116113f757829003601f168201915b5050505050905090565b60006114e161142b611d46565b846114dc856040518060600160405280602581526020016142506025913960056000611455611d46565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612aed9092919063ffffffff16565b611d4e565b6001905092915050565b60006114ff6114f8611d46565b8484611f17565b6001905092915050565b601760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611537611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bb9061365d565b60405180910390fd5b80601460156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161160d919061328d565b60405180910390a150565b611620611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a49061365d565b60405180910390fd5b8060158190555050565b60155481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61174c611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d09061365d565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183e90613833565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611882919061343b565b602060405180830381865afa15801561189f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c39190613868565b11611903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fa906138e1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61192761128a565b8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611960919061343b565b602060405180830381865afa15801561197d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a19190613868565b6040518363ffffffff1660e01b81526004016119be929190613901565b6020604051808303816000875af11580156119dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a01919061393f565b5050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b611a39611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ac6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abd9061365d565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611b29611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bad9061365d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1c906139de565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e5481565b6000808284611cf79190613a2d565b905083811015611d3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3390613acf565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611dbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db490613b61565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2390613bf3565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f0a91906130cd565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7d90613c85565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fec90613d17565b60405180910390fd5b611ffd61128a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561206b575061203b61128a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156120b6576016548111156120b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ac90613d83565b60405180910390fd5b5b60006120c1306110e2565b9050600060155482101590508080156120e75750601760009054906101000a900460ff16155b801561213f57507f0000000000000000000000008521a3db3c1ce70060c742aeca1013f1d050c48a73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156121575750601460159054906101000a900460ff165b156122b6576001601760006101000a81548160ff02191690831515021790555060006121a260135461219460105486612b5190919063ffffffff16565b612bcb90919063ffffffff16565b905060004790506121b282612c15565b60006121c78247612e5290919063ffffffff16565b905060006121f46010546121e660105485612b5190919063ffffffff16565b612bcb90919063ffffffff16565b9050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561225e573d6000803e3d6000fd5b50600061228a60135461227c6012548a612b5190919063ffffffff16565b612bcb90919063ffffffff16565b905061229581612e9c565b6000601760006101000a81548160ff02191690831515021790555050505050505b6000601760009054906101000a900460ff16159050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061236c5750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561237657600090505b7f0000000000000000000000008521a3db3c1ce70060c742aeca1013f1d050c48a73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415801561241e57507f0000000000000000000000008521a3db3c1ce70060c742aeca1013f1d050c48a73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b1561242857600090505b801561251f577f0000000000000000000000008521a3db3c1ce70060c742aeca1013f1d050c48a73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16036124a657600c54600881905550600e54600a81905550600d54600981905550600f54600b819055505b7f0000000000000000000000008521a3db3c1ce70060c742aeca1013f1d050c48a73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361251e57601054600881905550601254600a81905550601154600981905550601354600b819055505b5b801561293b57600061254f6064612541600b5488612b5190919063ffffffff16565b612bcb90919063ffffffff16565b9050600061257c600b5461256e60095485612b5190919063ffffffff16565b612bcb90919063ffffffff16565b905060006125938388612e5290919063ffffffff16565b90506126018760405180606001604052806026815260200161420260269139600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612aed9092919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061269681600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ce890919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061272b83600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ce890919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506127c082600460008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ce890919063ffffffff16565b600460008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161286091906130cd565b60405180910390a33073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516128c591906130cd565b60405180910390a3600073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161292b91906130cd565b60405180910390a3505050612ae5565b6129a78460405180606001604052806026815260200161420260269139600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612aed9092919063ffffffff16565b600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612a3c84600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ce890919063ffffffff16565b600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612adc91906130cd565b60405180910390a35b505050505050565b6000838311158290612b35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2c9190613181565b60405180910390fd5b5060008385612b449190613da3565b9050809150509392505050565b6000808303612b635760009050612bc5565b60008284612b719190613dd7565b9050828482612b809190613e60565b14612bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb790613f03565b60405180910390fd5b809150505b92915050565b6000612c0d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612f70565b905092915050565b6000600267ffffffffffffffff811115612c3257612c31613f23565b5b604051908082528060200260200182016040528015612c605781602001602082028036833780820191505090505b5090503081600081518110612c7857612c77613f52565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d419190613f96565b81600181518110612d5557612d54613f52565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612dba307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611d4e565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612e1c9594939291906140bc565b600060405180830381600087803b158015612e3657600080fd5b505af1158015612e4a573d6000803e3d6000fd5b505050505050565b6000612e9483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612aed565b905092915050565b60016014806101000a81548160ff0219169083151502179055506000612ecc600283612bcb90919063ffffffff16565b90506000612ee38284612e5290919063ffffffff16565b90506000479050612ef383612c15565b6000612f088247612e5290919063ffffffff16565b9050612f148382612fd3565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848285604051612f4793929190614116565b60405180910390a15050505060006014806101000a81548160ff02191690831515021790555050565b60008083118290612fb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fae9190613181565b60405180910390fd5b5060008385612fc69190613e60565b9050809150509392505050565b612ffe307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611d4e565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061304861128a565b426040518863ffffffff1660e01b815260040161306a9695949392919061414d565b60606040518083038185885af1158015613088573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906130ad91906141ae565b5050505050565b6000819050919050565b6130c7816130b4565b82525050565b60006020820190506130e260008301846130be565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613122578082015181840152602081019050613107565b83811115613131576000848401525b50505050565b6000601f19601f8301169050919050565b6000613153826130e8565b61315d81856130f3565b935061316d818560208601613104565b61317681613137565b840191505092915050565b6000602082019050818103600083015261319b8184613148565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006131d3826131a8565b9050919050565b6131e3816131c8565b81146131ee57600080fd5b50565b600081359050613200816131da565b92915050565b61320f816130b4565b811461321a57600080fd5b50565b60008135905061322c81613206565b92915050565b60008060408385031215613249576132486131a3565b5b6000613257858286016131f1565b92505060206132688582860161321d565b9150509250929050565b60008115159050919050565b61328781613272565b82525050565b60006020820190506132a2600083018461327e565b92915050565b6000819050919050565b60006132cd6132c86132c3846131a8565b6132a8565b6131a8565b9050919050565b60006132df826132b2565b9050919050565b60006132f1826132d4565b9050919050565b613301816132e6565b82525050565b600060208201905061331c60008301846132f8565b92915050565b60008060006060848603121561333b5761333a6131a3565b5b60006133498682870161321d565b935050602061335a8682870161321d565b925050604061336b8682870161321d565b9150509250925092565b60008060006060848603121561338e5761338d6131a3565b5b600061339c868287016131f1565b93505060206133ad868287016131f1565b92505060406133be8682870161321d565b9150509250925092565b600060ff82169050919050565b6133de816133c8565b82525050565b60006020820190506133f960008301846133d5565b92915050565b600060208284031215613415576134146131a3565b5b6000613423848285016131f1565b91505092915050565b613435816131c8565b82525050565b6000602082019050613450600083018461342c565b92915050565b60006020828403121561346c5761346b6131a3565b5b600061347a8482850161321d565b91505092915050565b600061348e826131a8565b9050919050565b61349e81613483565b81146134a957600080fd5b50565b6000813590506134bb81613495565b92915050565b6000602082840312156134d7576134d66131a3565b5b60006134e5848285016134ac565b91505092915050565b6134f781613272565b811461350257600080fd5b50565b600081359050613514816134ee565b92915050565b6000602082840312156135305761352f6131a3565b5b600061353e84828501613505565b91505092915050565b6000806040838503121561355e5761355d6131a3565b5b600061356c858286016131f1565b925050602061357d858286016131f1565b9150509250929050565b61359081613483565b82525050565b60006020820190506135ab6000830184613587565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806135f857607f821691505b60208210810361360b5761360a6135b1565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006136476020836130f3565b915061365282613611565b602082019050919050565b600060208201905081810360008301526136768161363a565b9050919050565b7f43616e2774207769746864726177206e65676174697665206f72207a65726f00600082015250565b60006136b3601f836130f3565b91506136be8261367d565b602082019050919050565b600060208201905081810360008301526136e2816136a6565b9050919050565b7f53656c6c204665652073686f756c6420626520313525206f72206c6573730000600082015250565b600061371f601e836130f3565b915061372a826136e9565b602082019050919050565b6000602082019050818103600083015261374e81613712565b9050919050565b7f427579204665652073686f756c6420626520313525206f72206c657373000000600082015250565b600061378b601d836130f3565b915061379682613755565b602082019050919050565b600060208201905081810360008301526137ba8161377e565b9050919050565b7f43616e277420776974686472617720746f6b656e732064657374696e6564206660008201527f6f72206c69717569646974790000000000000000000000000000000000000000602082015250565b600061381d602c836130f3565b9150613828826137c1565b604082019050919050565b6000602082019050818103600083015261384c81613810565b9050919050565b60008151905061386281613206565b92915050565b60006020828403121561387e5761387d6131a3565b5b600061388c84828501613853565b91505092915050565b7f43616e2774207769746864726177203000000000000000000000000000000000600082015250565b60006138cb6010836130f3565b91506138d682613895565b602082019050919050565b600060208201905081810360008301526138fa816138be565b9050919050565b6000604082019050613916600083018561342c565b61392360208301846130be565b9392505050565b600081519050613939816134ee565b92915050565b600060208284031215613955576139546131a3565b5b60006139638482850161392a565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006139c86026836130f3565b91506139d38261396c565b604082019050919050565b600060208201905081810360008301526139f7816139bb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613a38826130b4565b9150613a43836130b4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613a7857613a776139fe565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613ab9601b836130f3565b9150613ac482613a83565b602082019050919050565b60006020820190508181036000830152613ae881613aac565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613b4b6024836130f3565b9150613b5682613aef565b604082019050919050565b60006020820190508181036000830152613b7a81613b3e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613bdd6022836130f3565b9150613be882613b81565b604082019050919050565b60006020820190508181036000830152613c0c81613bd0565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613c6f6025836130f3565b9150613c7a82613c13565b604082019050919050565b60006020820190508181036000830152613c9e81613c62565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613d016023836130f3565b9150613d0c82613ca5565b604082019050919050565b60006020820190508181036000830152613d3081613cf4565b9050919050565b7f5472616e73616374696f6e2073697a65206c696d697420726561636865640000600082015250565b6000613d6d601e836130f3565b9150613d7882613d37565b602082019050919050565b60006020820190508181036000830152613d9c81613d60565b9050919050565b6000613dae826130b4565b9150613db9836130b4565b925082821015613dcc57613dcb6139fe565b5b828203905092915050565b6000613de2826130b4565b9150613ded836130b4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e2657613e256139fe565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613e6b826130b4565b9150613e76836130b4565b925082613e8657613e85613e31565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613eed6021836130f3565b9150613ef882613e91565b604082019050919050565b60006020820190508181036000830152613f1c81613ee0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050613f90816131da565b92915050565b600060208284031215613fac57613fab6131a3565b5b6000613fba84828501613f81565b91505092915050565b6000819050919050565b6000613fe8613fe3613fde84613fc3565b6132a8565b6130b4565b9050919050565b613ff881613fcd565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614033816131c8565b82525050565b6000614045838361402a565b60208301905092915050565b6000602082019050919050565b600061406982613ffe565b6140738185614009565b935061407e8361401a565b8060005b838110156140af5781516140968882614039565b97506140a183614051565b925050600181019050614082565b5085935050505092915050565b600060a0820190506140d160008301886130be565b6140de6020830187613fef565b81810360408301526140f0818661405e565b90506140ff606083018561342c565b61410c60808301846130be565b9695505050505050565b600060608201905061412b60008301866130be565b61413860208301856130be565b61414560408301846130be565b949350505050565b600060c082019050614162600083018961342c565b61416f60208301886130be565b61417c6040830187613fef565b6141896060830186613fef565b614196608083018561342c565b6141a360a08301846130be565b979650505050505050565b6000806000606084860312156141c7576141c66131a3565b5b60006141d586828701613853565b93505060206141e686828701613853565b92505060406141f786828701613853565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220dc9dcbb895e90f37c752e7647442dbb2dd8d946fead6c564f46b8e527e09363564736f6c634300080f0033

Deployed Bytecode Sourcemap

14109:12853:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14862:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14744:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4022:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17394:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26411:194;;;;;;;;;;;;;:::i;:::-;;14272:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16850:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23061:466;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17558:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23535:443;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4204:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15073:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17874:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18861:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14330:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15301:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19108:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14785:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14994:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16953:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3166:148;;;;;;;;;;;;;:::i;:::-;;15031:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15424:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2523:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18353:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4111:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18087:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17075:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15905:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18486:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18665:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15355:62;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17246:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26617:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15167:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14952:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18984:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3469:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14821:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14862:81;;;;:::o;14744:34::-;;;;:::o;4022:83::-;4059:13;4092:5;4085:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4022:83;:::o;17394:158::-;17466:4;17483:39;17492:12;:10;:12::i;:::-;17506:7;17515:6;17483:8;:39::i;:::-;17540:4;17533:11;;17394:158;;;;:::o;26411:194::-;2745:12;:10;:12::i;:::-;2735:22;;:6;;;;;;;;;;:22;;;2727:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26501:1:::1;26477:21;:25;26468:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;26557:7;:5;:7::i;:::-;26549:25;;:48;26575:21;26549:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;26411:194::o:0;14272:51::-;;;:::o;16850:97::-;16903:4;16927:12;;16920:19;;16850:97;:::o;23061:466::-;2745:12;:10;:12::i;:::-;2735:22;;:6;;;;;;;;;;:22;;;2727:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23215:19:::1;23196:16;:38;;;;23259:18;23245:11;:32;;;;23307:18;23288:16;:37;;;;23336:24;23389:55;23427:16;;23389:33;23410:11;;23389:16;;:20;;:33;;;;:::i;:::-;:37;;:55;;;;:::i;:::-;23371:73;;23482:2;23463:15;:21;;23455:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23183:344;23061:466:::0;;;:::o;17558:310::-;17653:4;17670:36;17680:6;17688:9;17699:6;17670:9;:36::i;:::-;17717:121;17726:6;17734:12;:10;:12::i;:::-;17748:89;17786:6;17748:89;;;;;;;;;;;;;;;;;:11;:19;17760:6;17748:19;;;;;;;;;;;;;;;:33;17768:12;:10;:12::i;:::-;17748:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;17717:8;:121::i;:::-;17856:4;17849:11;;17558:310;;;;;:::o;23535:443::-;2745:12;:10;:12::i;:::-;2735:22;;:6;;;;;;;;;;:22;;;2727:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23681:18:::1;23663:15;:36;;;;23723:14;23710:10;:27;;;;23766:17;23748:15;:35;;;;23794:23;23845:52;23881:15;;23845:31;23865:10;;23845:15;;:19;;:31;;;;:::i;:::-;:35;;:52;;;;:::i;:::-;23828:69;;23934:2;23916:14;:20;;23908:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23650:328;23535:443:::0;;;:::o;4204:83::-;4245:5;4270:9;;;;;;;;;;;4263:16;;4204:83;:::o;15073:85::-;;;;:::o;17874:207::-;17951:4;17968:83;17977:12;:10;:12::i;:::-;17991:7;18000:50;18039:10;18000:11;:25;18012:12;:10;:12::i;:::-;18000:25;;;;;;;;;;;;;;;:34;18026:7;18000:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;17968:8;:83::i;:::-;18069:4;18062:11;;17874:207;;;;:::o;18861:111::-;2745:12;:10;:12::i;:::-;2735:22;;:6;;;;;;;;;;:22;;;2727:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18960:4:::1;18930:18;:27;18949:7;18930:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;18861:111:::0;:::o;14330:38::-;;;:::o;15301:40::-;;;;;;;;;;;;;:::o;19108:107::-;2745:12;:10;:12::i;:::-;2735:22;;:6;;;;;;;;;;:22;;;2727:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19200:7:::1;19186:11;:21;;;;19108:107:::0;:::o;14785:29::-;;;;:::o;14994:30::-;;;;:::o;16953:116::-;17019:4;17043:9;:18;17053:7;17043:18;;;;;;;;;;;;;;;;17036:25;;16953:116;;;:::o;3166:148::-;2745:12;:10;:12::i;:::-;2735:22;;:6;;;;;;;;;;:22;;;2727:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3273:1:::1;3236:40;;3257:6;::::0;::::1;;;;;;;;3236:40;;;;;;;;;;;;3304:1;3287:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;3166:148::o:0;15031:35::-;;;;:::o;15424:50::-;;;;:::o;2523:79::-;2561:7;2588:6;;;;;;;;;;;2581:13;;2523:79;:::o;18353:121::-;2745:12;:10;:12::i;:::-;2735:22;;:6;;;;;;;;;;:22;;;2727:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18460:6:::1;18441:16;;:25;;;;;;;;;;;;;;;;;;18353:121:::0;:::o;4111:87::-;4150:13;4183:7;4176:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4111:87;:::o;18087:258::-;18169:4;18186:129;18195:12;:10;:12::i;:::-;18209:7;18218:96;18257:15;18218:96;;;;;;;;;;;;;;;;;:11;:25;18230:12;:10;:12::i;:::-;18218:25;;;;;;;;;;;;;;;:34;18244:7;18218:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;18186:8;:129::i;:::-;18333:4;18326:11;;18087:258;;;;:::o;17075:165::-;17151:4;17168:42;17178:12;:10;:12::i;:::-;17192:9;17203:6;17168:9;:42::i;:::-;17228:4;17221:11;;17075:165;;;;:::o;15905:21::-;;;;;;;;;;;;;:::o;18486:171::-;2745:12;:10;:12::i;:::-;2735:22;;:6;;;;;;;;;;:22;;;2727:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18587:8:::1;18563:21;;:32;;;;;;;;;;;;;;;;;;18611:38;18640:8;18611:38;;;;;;:::i;:::-;;;;;;;;18486:171:::0;:::o;18665:190::-;2745:12;:10;:12::i;:::-;2735:22;;:6;;;;;;;;;;:22;;;2727:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18817:30:::1;18785:29;:62;;;;18665:190:::0;:::o;15355:62::-;;;;:::o;17246:142::-;17328:4;17352:11;:19;17364:6;17352:19;;;;;;;;;;;;;;;:28;17372:7;17352:28;;;;;;;;;;;;;;;;17345:35;;17246:142;;;;:::o;26617:339::-;2745:12;:10;:12::i;:::-;2735:22;;:6;;;;;;;;;;:22;;;2727:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26719:4:::1;26699:25;;:8;:25;;::::0;26691:82:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;26836:1;26799:8;26792:26;;;26827:4;26792:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:45;26784:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26878:8;26871:25;;;26897:7;:5;:7::i;:::-;26913:8;26906:26;;;26941:4;26906:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26871:77;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26617:339:::0;:::o;15167:93::-;;;;;;;;;;;;;:::o;14952:35::-;;;;:::o;18984:110::-;2745:12;:10;:12::i;:::-;2735:22;;:6;;;;;;;;;;:22;;;2727:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19081:5:::1;19051:18;:27;19070:7;19051:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;18984:110:::0;:::o;3469:244::-;2745:12;:10;:12::i;:::-;2735:22;;:6;;;;;;;;;;:22;;;2727:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3578:1:::1;3558:22;;:8;:22;;::::0;3550:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3668:8;3639:38;;3660:6;::::0;::::1;;;;;;;;3639:38;;;;;;;;;;;;3697:8;3688:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;3469:244:::0;:::o;14821:34::-;;;;:::o;736:169::-;788:4;805:6;818:1;814;:5;;;;:::i;:::-;805:14;;843:1;838;:6;;830:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;896:1;889:8;;;736:169;;;;:::o;1960:90::-;2005:7;2032:10;2025:17;;1960:90;:::o;26064:339::-;26174:1;26156:20;;:6;:20;;;26148:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;26255:1;26236:21;;:7;:21;;;26228:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26340:6;26309:11;:19;26321:6;26309:19;;;;;;;;;;;;;;;:28;26329:7;26309:28;;;;;;;;;;;;;;;:37;;;;26379:7;26362:33;;26371:6;26362:33;;;26388:6;26362:33;;;;;;:::i;:::-;;;;;;;;26064:339;;;:::o;19318:3733::-;19432:1;19414:20;;:6;:20;;;19406:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;19516:1;19495:23;;:9;:23;;;19487:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;19582:7;:5;:7::i;:::-;19572:17;;:6;:17;;;;:41;;;;;19606:7;:5;:7::i;:::-;19593:20;;:9;:20;;;;19572:41;19569:146;;;19657:11;;19647:6;:21;;19639:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;19569:146;20009:28;20040:24;20058:4;20040:9;:24::i;:::-;20009:55;;20087:24;20138:29;;20114:20;:53;;20087:80;;20196:19;:45;;;;;20233:8;;;;;;;;;;;20232:9;20196:45;:85;;;;;20268:13;20258:23;;:6;:23;;;;20196:85;:123;;;;;20298:21;;;;;;;;;;;20196:123;20178:895;;;20357:4;20346:8;;:15;;;;;;;;;;;;;;;;;;20389:20;20412:60;20459:12;;20412:42;20437:16;;20412:20;:24;;:42;;;;:::i;:::-;:46;;:60;;;;:::i;:::-;20389:83;;20487:23;20513:21;20487:47;;20549:30;20566:12;20549:16;:30::i;:::-;20594:18;20615:42;20641:15;20615:21;:25;;:42;;;;:::i;:::-;20594:63;;20672:22;20697:56;20735:16;;20697:32;20712:16;;20697:10;:14;;:32;;;;:::i;:::-;:36;;:56;;;;:::i;:::-;20672:81;;20845:16;;;;;;;;;;;20837:34;;:50;20872:14;20837:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20904:18;20925:60;20972:12;;20925:42;20950:16;;20925:20;:24;;:42;;;;:::i;:::-;:46;;:60;;;;:::i;:::-;20904:81;;21000:26;21015:10;21000:14;:26::i;:::-;21054:5;21043:8;;:16;;;;;;;;;;;;;;;;;;20331:742;;;;;20178:895;21155:12;21171:8;;;;;;;;;;;21170:9;21155:24;;21287:18;:26;21306:6;21287:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;21317:18;:29;21336:9;21317:29;;;;;;;;;;;;;;;;;;;;;;;;;21287:59;21284:105;;;21372:5;21362:15;;21284:105;21414:13;21404:23;;:6;:23;;;;:53;;;;;21444:13;21431:26;;:9;:26;;;;21404:53;21401:109;;;21493:5;21483:15;;21401:109;21523:7;21520:487;;;21555:13;21545:23;;:6;:23;;;21542:224;;21609:15;;21594:12;:30;;;;21654:15;;21639:12;:30;;;;21694:10;;21684:7;:20;;;;21730:11;;21719:8;:22;;;;21542:224;21792:13;21779:26;;:9;:26;;;21776:220;;21846:16;;21831:12;:31;;;;21892:16;;21877:12;:31;;;;21933:11;;21923:7;:21;;;;21970:12;;21959:8;:23;;;;21776:220;21520:487;22029:7;22026:1008;;;22062:17;22082:29;22107:3;22082:20;22093:8;;22082:6;:10;;:20;;;;:::i;:::-;:24;;:29;;;;:::i;:::-;22062:49;;22126:18;22147:36;22174:8;;22147:22;22161:7;;22147:9;:13;;:22;;;;:::i;:::-;:26;;:36;;;;:::i;:::-;22126:57;;22198:17;22218:21;22229:9;22218:6;:10;;:21;;;;:::i;:::-;22198:41;;22274:71;22296:6;22274:71;;;;;;;;;;;;;;;;;:9;:17;22284:6;22274:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;22254:9;:17;22264:6;22254:17;;;;;;;;;;;;;;;:91;;;;22383:35;22408:9;22383;:20;22393:9;22383:20;;;;;;;;;;;;;;;;:24;;:35;;;;:::i;:::-;22360:9;:20;22370:9;22360:20;;;;;;;;;;;;;;;:58;;;;22460:39;22489:9;22460;:24;22478:4;22460:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;22433:9;:24;22451:4;22433:24;;;;;;;;;;;;;;;:66;;;;22538:37;22564:10;22538:9;:21;22556:1;22538:21;;;;;;;;;;;;;;;;:25;;:37;;;;:::i;:::-;22514:9;:21;22532:1;22514:21;;;;;;;;;;;;;;;:61;;;;22612:9;22595:38;;22604:6;22595:38;;;22623:9;22595:38;;;;;;:::i;:::-;;;;;;;;22678:4;22653:42;;22662:6;22653:42;;;22685:9;22653:42;;;;;;:::i;:::-;;;;;;;;22740:1;22715:40;;22724:6;22715:40;;;22744:10;22715:40;;;;;;:::i;:::-;;;;;;;;22047:720;;;22026:1008;;;22826:71;22848:6;22826:71;;;;;;;;;;;;;;;;;:9;:17;22836:6;22826:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;22806:9;:17;22816:6;22806:17;;;;;;;;;;;;;;;:91;;;;22935:32;22960:6;22935:9;:20;22945:9;22935:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;22912:9;:20;22922:9;22912:20;;;;;;;;;;;;;;;:55;;;;23004:9;22987:35;;22996:6;22987:35;;;23015:6;22987:35;;;;;;:::i;:::-;;;;;;;;22026:1008;19393:3658;;;19318:3733;;;:::o;1044:180::-;1124:4;1154:1;1149;:6;;1157:12;1141:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1181:6;1194:1;1190;:5;;;;:::i;:::-;1181:14;;1215:1;1208:8;;;1044:180;;;;;:::o;1230:238::-;1282:4;1308:1;1303;:6;1299:47;;1333:1;1326:8;;;;1299:47;1358:6;1371:1;1367;:5;;;;:::i;:::-;1358:14;;1400:1;1395;1391;:5;;;;:::i;:::-;:10;1383:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1459:1;1452:8;;;1230:238;;;;;:::o;1474:123::-;1526:4;1550:39;1554:1;1557;1550:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;1543:46;;1474:123;;;;:::o;25467:589::-;25593:21;25631:1;25617:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25593:40;;25662:4;25644;25649:1;25644:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;25688:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25678:4;25683:1;25678:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;25723:62;25740:4;25755:15;25773:11;25723:8;:62::i;:::-;25824:15;:66;;;25905:11;25931:1;25975:4;26002;26022:15;25824:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25522:534;25467:589;:::o;911:127::-;963:4;987:43;991:1;994;987:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;980:50;;911:127;;;;:::o;23989:943::-;15836:4;15817:16;;:23;;;;;;;;;;;;;;;;;;24119:12:::1;24134:13;24145:1;24134:6;:10;;:13;;;;:::i;:::-;24119:28;;24158:17;24178:16;24189:4;24178:6;:10;;:16;;;;:::i;:::-;24158:36;;24472:22;24497:21;24472:46;;24563:22;24580:4;24563:16;:22::i;:::-;24716:18;24737:41;24763:14;24737:21;:25;;:41;;;;:::i;:::-;24716:62;;24828:35;24841:9;24852:10;24828:12;:35::i;:::-;24881:43;24896:4;24902:10;24914:9;24881:43;;;;;;;;:::i;:::-;;;;;;;;24049:883;;;;15882:5:::0;15863:16;;:24;;;;;;;;;;;;;;;;;;23989:943;:::o;1603:246::-;1683:4;1779:1;1775;:5;1782:12;1767:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1806:6;1819:1;1815;:5;;;;:::i;:::-;1806:14;;1840:1;1833:8;;;1603:246;;;;;:::o;24942:517::-;25092:62;25109:4;25124:15;25142:11;25092:8;:62::i;:::-;25197:15;:31;;;25236:9;25269:4;25289:11;25315:1;25358;25401:7;:5;:7::i;:::-;25423:15;25197:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;24942:517;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:307::-;790:1;800:113;814:6;811:1;808:13;800:113;;;899:1;894:3;890:11;884:18;880:1;875:3;871:11;864:39;836:2;833:1;829:10;824:15;;800:113;;;931:6;928:1;925:13;922:101;;;1011:1;1002:6;997:3;993:16;986:27;922:101;771:258;722:307;;;:::o;1035:102::-;1076:6;1127:2;1123:7;1118:2;1111:5;1107:14;1103:28;1093:38;;1035:102;;;:::o;1143:364::-;1231:3;1259:39;1292:5;1259:39;:::i;:::-;1314:71;1378:6;1373:3;1314:71;:::i;:::-;1307:78;;1394:52;1439:6;1434:3;1427:4;1420:5;1416:16;1394:52;:::i;:::-;1471:29;1493:6;1471:29;:::i;:::-;1466:3;1462:39;1455:46;;1235:272;1143:364;;;;:::o;1513:313::-;1626:4;1664:2;1653:9;1649:18;1641:26;;1713:9;1707:4;1703:20;1699:1;1688:9;1684:17;1677:47;1741:78;1814:4;1805:6;1741:78;:::i;:::-;1733:86;;1513:313;;;;:::o;1913:117::-;2022:1;2019;2012:12;2159:126;2196:7;2236:42;2229:5;2225:54;2214:65;;2159:126;;;:::o;2291:96::-;2328:7;2357:24;2375:5;2357:24;:::i;:::-;2346:35;;2291:96;;;:::o;2393:122::-;2466:24;2484:5;2466:24;:::i;:::-;2459:5;2456:35;2446:63;;2505:1;2502;2495:12;2446:63;2393:122;:::o;2521:139::-;2567:5;2605:6;2592:20;2583:29;;2621:33;2648:5;2621:33;:::i;:::-;2521:139;;;;:::o;2666:122::-;2739:24;2757:5;2739:24;:::i;:::-;2732:5;2729:35;2719:63;;2778:1;2775;2768:12;2719:63;2666:122;:::o;2794:139::-;2840:5;2878:6;2865:20;2856:29;;2894:33;2921:5;2894:33;:::i;:::-;2794:139;;;;:::o;2939:474::-;3007:6;3015;3064:2;3052:9;3043:7;3039:23;3035:32;3032:119;;;3070:79;;:::i;:::-;3032:119;3190:1;3215:53;3260:7;3251:6;3240:9;3236:22;3215:53;:::i;:::-;3205:63;;3161:117;3317:2;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3288:118;2939:474;;;;;:::o;3419:90::-;3453:7;3496:5;3489:13;3482:21;3471:32;;3419:90;;;:::o;3515:109::-;3596:21;3611:5;3596:21;:::i;:::-;3591:3;3584:34;3515:109;;:::o;3630:210::-;3717:4;3755:2;3744:9;3740:18;3732:26;;3768:65;3830:1;3819:9;3815:17;3806:6;3768:65;:::i;:::-;3630:210;;;;:::o;3846:60::-;3874:3;3895:5;3888:12;;3846:60;;;:::o;3912:142::-;3962:9;3995:53;4013:34;4022:24;4040:5;4022:24;:::i;:::-;4013:34;:::i;:::-;3995:53;:::i;:::-;3982:66;;3912:142;;;:::o;4060:126::-;4110:9;4143:37;4174:5;4143:37;:::i;:::-;4130:50;;4060:126;;;:::o;4192:153::-;4269:9;4302:37;4333:5;4302:37;:::i;:::-;4289:50;;4192:153;;;:::o;4351:185::-;4465:64;4523:5;4465:64;:::i;:::-;4460:3;4453:77;4351:185;;:::o;4542:276::-;4662:4;4700:2;4689:9;4685:18;4677:26;;4713:98;4808:1;4797:9;4793:17;4784:6;4713:98;:::i;:::-;4542:276;;;;:::o;4824:619::-;4901:6;4909;4917;4966:2;4954:9;4945:7;4941:23;4937:32;4934:119;;;4972:79;;:::i;:::-;4934:119;5092:1;5117:53;5162:7;5153:6;5142:9;5138:22;5117:53;:::i;:::-;5107:63;;5063:117;5219:2;5245:53;5290:7;5281:6;5270:9;5266:22;5245:53;:::i;:::-;5235:63;;5190:118;5347:2;5373:53;5418:7;5409:6;5398:9;5394:22;5373:53;:::i;:::-;5363:63;;5318:118;4824:619;;;;;:::o;5449:::-;5526:6;5534;5542;5591:2;5579:9;5570:7;5566:23;5562:32;5559:119;;;5597:79;;:::i;:::-;5559:119;5717:1;5742:53;5787:7;5778:6;5767:9;5763:22;5742:53;:::i;:::-;5732:63;;5688:117;5844:2;5870:53;5915:7;5906:6;5895:9;5891:22;5870:53;:::i;:::-;5860:63;;5815:118;5972:2;5998:53;6043:7;6034:6;6023:9;6019:22;5998:53;:::i;:::-;5988:63;;5943:118;5449:619;;;;;:::o;6074:86::-;6109:7;6149:4;6142:5;6138:16;6127:27;;6074:86;;;:::o;6166:112::-;6249:22;6265:5;6249:22;:::i;:::-;6244:3;6237:35;6166:112;;:::o;6284:214::-;6373:4;6411:2;6400:9;6396:18;6388:26;;6424:67;6488:1;6477:9;6473:17;6464:6;6424:67;:::i;:::-;6284:214;;;;:::o;6504:329::-;6563:6;6612:2;6600:9;6591:7;6587:23;6583:32;6580:119;;;6618:79;;:::i;:::-;6580:119;6738:1;6763:53;6808:7;6799:6;6788:9;6784:22;6763:53;:::i;:::-;6753:63;;6709:117;6504:329;;;;:::o;6839:118::-;6926:24;6944:5;6926:24;:::i;:::-;6921:3;6914:37;6839:118;;:::o;6963:222::-;7056:4;7094:2;7083:9;7079:18;7071:26;;7107:71;7175:1;7164:9;7160:17;7151:6;7107:71;:::i;:::-;6963:222;;;;:::o;7191:329::-;7250:6;7299:2;7287:9;7278:7;7274:23;7270:32;7267:119;;;7305:79;;:::i;:::-;7267:119;7425:1;7450:53;7495:7;7486:6;7475:9;7471:22;7450:53;:::i;:::-;7440:63;;7396:117;7191:329;;;;:::o;7526:104::-;7571:7;7600:24;7618:5;7600:24;:::i;:::-;7589:35;;7526:104;;;:::o;7636:138::-;7717:32;7743:5;7717:32;:::i;:::-;7710:5;7707:43;7697:71;;7764:1;7761;7754:12;7697:71;7636:138;:::o;7780:155::-;7834:5;7872:6;7859:20;7850:29;;7888:41;7923:5;7888:41;:::i;:::-;7780:155;;;;:::o;7941:345::-;8008:6;8057:2;8045:9;8036:7;8032:23;8028:32;8025:119;;;8063:79;;:::i;:::-;8025:119;8183:1;8208:61;8261:7;8252:6;8241:9;8237:22;8208:61;:::i;:::-;8198:71;;8154:125;7941:345;;;;:::o;8292:116::-;8362:21;8377:5;8362:21;:::i;:::-;8355:5;8352:32;8342:60;;8398:1;8395;8388:12;8342:60;8292:116;:::o;8414:133::-;8457:5;8495:6;8482:20;8473:29;;8511:30;8535:5;8511:30;:::i;:::-;8414:133;;;;:::o;8553:323::-;8609:6;8658:2;8646:9;8637:7;8633:23;8629:32;8626:119;;;8664:79;;:::i;:::-;8626:119;8784:1;8809:50;8851:7;8842:6;8831:9;8827:22;8809:50;:::i;:::-;8799:60;;8755:114;8553:323;;;;:::o;8882:474::-;8950:6;8958;9007:2;8995:9;8986:7;8982:23;8978:32;8975:119;;;9013:79;;:::i;:::-;8975:119;9133:1;9158:53;9203:7;9194:6;9183:9;9179:22;9158:53;:::i;:::-;9148:63;;9104:117;9260:2;9286:53;9331:7;9322:6;9311:9;9307:22;9286:53;:::i;:::-;9276:63;;9231:118;8882:474;;;;;:::o;9362:142::-;9465:32;9491:5;9465:32;:::i;:::-;9460:3;9453:45;9362:142;;:::o;9510:254::-;9619:4;9657:2;9646:9;9642:18;9634:26;;9670:87;9754:1;9743:9;9739:17;9730:6;9670:87;:::i;:::-;9510:254;;;;:::o;9770:180::-;9818:77;9815:1;9808:88;9915:4;9912:1;9905:15;9939:4;9936:1;9929:15;9956:320;10000:6;10037:1;10031:4;10027:12;10017:22;;10084:1;10078:4;10074:12;10105:18;10095:81;;10161:4;10153:6;10149:17;10139:27;;10095:81;10223:2;10215:6;10212:14;10192:18;10189:38;10186:84;;10242:18;;:::i;:::-;10186:84;10007:269;9956:320;;;:::o;10282:182::-;10422:34;10418:1;10410:6;10406:14;10399:58;10282:182;:::o;10470:366::-;10612:3;10633:67;10697:2;10692:3;10633:67;:::i;:::-;10626:74;;10709:93;10798:3;10709:93;:::i;:::-;10827:2;10822:3;10818:12;10811:19;;10470:366;;;:::o;10842:419::-;11008:4;11046:2;11035:9;11031:18;11023:26;;11095:9;11089:4;11085:20;11081:1;11070:9;11066:17;11059:47;11123:131;11249:4;11123:131;:::i;:::-;11115:139;;10842:419;;;:::o;11267:181::-;11407:33;11403:1;11395:6;11391:14;11384:57;11267:181;:::o;11454:366::-;11596:3;11617:67;11681:2;11676:3;11617:67;:::i;:::-;11610:74;;11693:93;11782:3;11693:93;:::i;:::-;11811:2;11806:3;11802:12;11795:19;;11454:366;;;:::o;11826:419::-;11992:4;12030:2;12019:9;12015:18;12007:26;;12079:9;12073:4;12069:20;12065:1;12054:9;12050:17;12043:47;12107:131;12233:4;12107:131;:::i;:::-;12099:139;;11826:419;;;:::o;12251:180::-;12391:32;12387:1;12379:6;12375:14;12368:56;12251:180;:::o;12437:366::-;12579:3;12600:67;12664:2;12659:3;12600:67;:::i;:::-;12593:74;;12676:93;12765:3;12676:93;:::i;:::-;12794:2;12789:3;12785:12;12778:19;;12437:366;;;:::o;12809:419::-;12975:4;13013:2;13002:9;12998:18;12990:26;;13062:9;13056:4;13052:20;13048:1;13037:9;13033:17;13026:47;13090:131;13216:4;13090:131;:::i;:::-;13082:139;;12809:419;;;:::o;13234:179::-;13374:31;13370:1;13362:6;13358:14;13351:55;13234:179;:::o;13419:366::-;13561:3;13582:67;13646:2;13641:3;13582:67;:::i;:::-;13575:74;;13658:93;13747:3;13658:93;:::i;:::-;13776:2;13771:3;13767:12;13760:19;;13419:366;;;:::o;13791:419::-;13957:4;13995:2;13984:9;13980:18;13972:26;;14044:9;14038:4;14034:20;14030:1;14019:9;14015:17;14008:47;14072:131;14198:4;14072:131;:::i;:::-;14064:139;;13791:419;;;:::o;14216:231::-;14356:34;14352:1;14344:6;14340:14;14333:58;14425:14;14420:2;14412:6;14408:15;14401:39;14216:231;:::o;14453:366::-;14595:3;14616:67;14680:2;14675:3;14616:67;:::i;:::-;14609:74;;14692:93;14781:3;14692:93;:::i;:::-;14810:2;14805:3;14801:12;14794:19;;14453:366;;;:::o;14825:419::-;14991:4;15029:2;15018:9;15014:18;15006:26;;15078:9;15072:4;15068:20;15064:1;15053:9;15049:17;15042:47;15106:131;15232:4;15106:131;:::i;:::-;15098:139;;14825:419;;;:::o;15250:143::-;15307:5;15338:6;15332:13;15323:22;;15354:33;15381:5;15354:33;:::i;:::-;15250:143;;;;:::o;15399:351::-;15469:6;15518:2;15506:9;15497:7;15493:23;15489:32;15486:119;;;15524:79;;:::i;:::-;15486:119;15644:1;15669:64;15725:7;15716:6;15705:9;15701:22;15669:64;:::i;:::-;15659:74;;15615:128;15399:351;;;;:::o;15756:166::-;15896:18;15892:1;15884:6;15880:14;15873:42;15756:166;:::o;15928:366::-;16070:3;16091:67;16155:2;16150:3;16091:67;:::i;:::-;16084:74;;16167:93;16256:3;16167:93;:::i;:::-;16285:2;16280:3;16276:12;16269:19;;15928:366;;;:::o;16300:419::-;16466:4;16504:2;16493:9;16489:18;16481:26;;16553:9;16547:4;16543:20;16539:1;16528:9;16524:17;16517:47;16581:131;16707:4;16581:131;:::i;:::-;16573:139;;16300:419;;;:::o;16725:332::-;16846:4;16884:2;16873:9;16869:18;16861:26;;16897:71;16965:1;16954:9;16950:17;16941:6;16897:71;:::i;:::-;16978:72;17046:2;17035:9;17031:18;17022:6;16978:72;:::i;:::-;16725:332;;;;;:::o;17063:137::-;17117:5;17148:6;17142:13;17133:22;;17164:30;17188:5;17164:30;:::i;:::-;17063:137;;;;:::o;17206:345::-;17273:6;17322:2;17310:9;17301:7;17297:23;17293:32;17290:119;;;17328:79;;:::i;:::-;17290:119;17448:1;17473:61;17526:7;17517:6;17506:9;17502:22;17473:61;:::i;:::-;17463:71;;17419:125;17206:345;;;;:::o;17557:225::-;17697:34;17693:1;17685:6;17681:14;17674:58;17766:8;17761:2;17753:6;17749:15;17742:33;17557:225;:::o;17788:366::-;17930:3;17951:67;18015:2;18010:3;17951:67;:::i;:::-;17944:74;;18027:93;18116:3;18027:93;:::i;:::-;18145:2;18140:3;18136:12;18129:19;;17788:366;;;:::o;18160:419::-;18326:4;18364:2;18353:9;18349:18;18341:26;;18413:9;18407:4;18403:20;18399:1;18388:9;18384:17;18377:47;18441:131;18567:4;18441:131;:::i;:::-;18433:139;;18160:419;;;:::o;18585:180::-;18633:77;18630:1;18623:88;18730:4;18727:1;18720:15;18754:4;18751:1;18744:15;18771:305;18811:3;18830:20;18848:1;18830:20;:::i;:::-;18825:25;;18864:20;18882:1;18864:20;:::i;:::-;18859:25;;19018:1;18950:66;18946:74;18943:1;18940:81;18937:107;;;19024:18;;:::i;:::-;18937:107;19068:1;19065;19061:9;19054:16;;18771:305;;;;:::o;19082:177::-;19222:29;19218:1;19210:6;19206:14;19199:53;19082:177;:::o;19265:366::-;19407:3;19428:67;19492:2;19487:3;19428:67;:::i;:::-;19421:74;;19504:93;19593:3;19504:93;:::i;:::-;19622:2;19617:3;19613:12;19606:19;;19265:366;;;:::o;19637:419::-;19803:4;19841:2;19830:9;19826:18;19818:26;;19890:9;19884:4;19880:20;19876:1;19865:9;19861:17;19854:47;19918:131;20044:4;19918:131;:::i;:::-;19910:139;;19637:419;;;:::o;20062:223::-;20202:34;20198:1;20190:6;20186:14;20179:58;20271:6;20266:2;20258:6;20254:15;20247:31;20062:223;:::o;20291:366::-;20433:3;20454:67;20518:2;20513:3;20454:67;:::i;:::-;20447:74;;20530:93;20619:3;20530:93;:::i;:::-;20648:2;20643:3;20639:12;20632:19;;20291:366;;;:::o;20663:419::-;20829:4;20867:2;20856:9;20852:18;20844:26;;20916:9;20910:4;20906:20;20902:1;20891:9;20887:17;20880:47;20944:131;21070:4;20944:131;:::i;:::-;20936:139;;20663:419;;;:::o;21088:221::-;21228:34;21224:1;21216:6;21212:14;21205:58;21297:4;21292:2;21284:6;21280:15;21273:29;21088:221;:::o;21315:366::-;21457:3;21478:67;21542:2;21537:3;21478:67;:::i;:::-;21471:74;;21554:93;21643:3;21554:93;:::i;:::-;21672:2;21667:3;21663:12;21656:19;;21315:366;;;:::o;21687:419::-;21853:4;21891:2;21880:9;21876:18;21868:26;;21940:9;21934:4;21930:20;21926:1;21915:9;21911:17;21904:47;21968:131;22094:4;21968:131;:::i;:::-;21960:139;;21687:419;;;:::o;22112:224::-;22252:34;22248:1;22240:6;22236:14;22229:58;22321:7;22316:2;22308:6;22304:15;22297:32;22112:224;:::o;22342:366::-;22484:3;22505:67;22569:2;22564:3;22505:67;:::i;:::-;22498:74;;22581:93;22670:3;22581:93;:::i;:::-;22699:2;22694:3;22690:12;22683:19;;22342:366;;;:::o;22714:419::-;22880:4;22918:2;22907:9;22903:18;22895:26;;22967:9;22961:4;22957:20;22953:1;22942:9;22938:17;22931:47;22995:131;23121:4;22995:131;:::i;:::-;22987:139;;22714:419;;;:::o;23139:222::-;23279:34;23275:1;23267:6;23263:14;23256:58;23348:5;23343:2;23335:6;23331:15;23324:30;23139:222;:::o;23367:366::-;23509:3;23530:67;23594:2;23589:3;23530:67;:::i;:::-;23523:74;;23606:93;23695:3;23606:93;:::i;:::-;23724:2;23719:3;23715:12;23708:19;;23367:366;;;:::o;23739:419::-;23905:4;23943:2;23932:9;23928:18;23920:26;;23992:9;23986:4;23982:20;23978:1;23967:9;23963:17;23956:47;24020:131;24146:4;24020:131;:::i;:::-;24012:139;;23739:419;;;:::o;24164:180::-;24304:32;24300:1;24292:6;24288:14;24281:56;24164:180;:::o;24350:366::-;24492:3;24513:67;24577:2;24572:3;24513:67;:::i;:::-;24506:74;;24589:93;24678:3;24589:93;:::i;:::-;24707:2;24702:3;24698:12;24691:19;;24350:366;;;:::o;24722:419::-;24888:4;24926:2;24915:9;24911:18;24903:26;;24975:9;24969:4;24965:20;24961:1;24950:9;24946:17;24939:47;25003:131;25129:4;25003:131;:::i;:::-;24995:139;;24722:419;;;:::o;25147:191::-;25187:4;25207:20;25225:1;25207:20;:::i;:::-;25202:25;;25241:20;25259:1;25241:20;:::i;:::-;25236:25;;25280:1;25277;25274:8;25271:34;;;25285:18;;:::i;:::-;25271:34;25330:1;25327;25323:9;25315:17;;25147:191;;;;:::o;25344:348::-;25384:7;25407:20;25425:1;25407:20;:::i;:::-;25402:25;;25441:20;25459:1;25441:20;:::i;:::-;25436:25;;25629:1;25561:66;25557:74;25554:1;25551:81;25546:1;25539:9;25532:17;25528:105;25525:131;;;25636:18;;:::i;:::-;25525:131;25684:1;25681;25677:9;25666:20;;25344:348;;;;:::o;25698:180::-;25746:77;25743:1;25736:88;25843:4;25840:1;25833:15;25867:4;25864:1;25857:15;25884:185;25924:1;25941:20;25959:1;25941:20;:::i;:::-;25936:25;;25975:20;25993:1;25975:20;:::i;:::-;25970:25;;26014:1;26004:35;;26019:18;;:::i;:::-;26004:35;26061:1;26058;26054:9;26049:14;;25884:185;;;;:::o;26075:220::-;26215:34;26211:1;26203:6;26199:14;26192:58;26284:3;26279:2;26271:6;26267:15;26260:28;26075:220;:::o;26301:366::-;26443:3;26464:67;26528:2;26523:3;26464:67;:::i;:::-;26457:74;;26540:93;26629:3;26540:93;:::i;:::-;26658:2;26653:3;26649:12;26642:19;;26301:366;;;:::o;26673:419::-;26839:4;26877:2;26866:9;26862:18;26854:26;;26926:9;26920:4;26916:20;26912:1;26901:9;26897:17;26890:47;26954:131;27080:4;26954:131;:::i;:::-;26946:139;;26673:419;;;:::o;27098:180::-;27146:77;27143:1;27136:88;27243:4;27240:1;27233:15;27267:4;27264:1;27257:15;27284:180;27332:77;27329:1;27322:88;27429:4;27426:1;27419:15;27453:4;27450:1;27443:15;27470:143;27527:5;27558:6;27552:13;27543:22;;27574:33;27601:5;27574:33;:::i;:::-;27470:143;;;;:::o;27619:351::-;27689:6;27738:2;27726:9;27717:7;27713:23;27709:32;27706:119;;;27744:79;;:::i;:::-;27706:119;27864:1;27889:64;27945:7;27936:6;27925:9;27921:22;27889:64;:::i;:::-;27879:74;;27835:128;27619:351;;;;:::o;27976:85::-;28021:7;28050:5;28039:16;;27976:85;;;:::o;28067:158::-;28125:9;28158:61;28176:42;28185:32;28211:5;28185:32;:::i;:::-;28176:42;:::i;:::-;28158:61;:::i;:::-;28145:74;;28067:158;;;:::o;28231:147::-;28326:45;28365:5;28326:45;:::i;:::-;28321:3;28314:58;28231:147;;:::o;28384:114::-;28451:6;28485:5;28479:12;28469:22;;28384:114;;;:::o;28504:184::-;28603:11;28637:6;28632:3;28625:19;28677:4;28672:3;28668:14;28653:29;;28504:184;;;;:::o;28694:132::-;28761:4;28784:3;28776:11;;28814:4;28809:3;28805:14;28797:22;;28694:132;;;:::o;28832:108::-;28909:24;28927:5;28909:24;:::i;:::-;28904:3;28897:37;28832:108;;:::o;28946:179::-;29015:10;29036:46;29078:3;29070:6;29036:46;:::i;:::-;29114:4;29109:3;29105:14;29091:28;;28946:179;;;;:::o;29131:113::-;29201:4;29233;29228:3;29224:14;29216:22;;29131:113;;;:::o;29280:732::-;29399:3;29428:54;29476:5;29428:54;:::i;:::-;29498:86;29577:6;29572:3;29498:86;:::i;:::-;29491:93;;29608:56;29658:5;29608:56;:::i;:::-;29687:7;29718:1;29703:284;29728:6;29725:1;29722:13;29703:284;;;29804:6;29798:13;29831:63;29890:3;29875:13;29831:63;:::i;:::-;29824:70;;29917:60;29970:6;29917:60;:::i;:::-;29907:70;;29763:224;29750:1;29747;29743:9;29738:14;;29703:284;;;29707:14;30003:3;29996:10;;29404:608;;;29280:732;;;;:::o;30018:831::-;30281:4;30319:3;30308:9;30304:19;30296:27;;30333:71;30401:1;30390:9;30386:17;30377:6;30333:71;:::i;:::-;30414:80;30490:2;30479:9;30475:18;30466:6;30414:80;:::i;:::-;30541:9;30535:4;30531:20;30526:2;30515:9;30511:18;30504:48;30569:108;30672:4;30663:6;30569:108;:::i;:::-;30561:116;;30687:72;30755:2;30744:9;30740:18;30731:6;30687:72;:::i;:::-;30769:73;30837:3;30826:9;30822:19;30813:6;30769:73;:::i;:::-;30018:831;;;;;;;;:::o;30855:442::-;31004:4;31042:2;31031:9;31027:18;31019:26;;31055:71;31123:1;31112:9;31108:17;31099:6;31055:71;:::i;:::-;31136:72;31204:2;31193:9;31189:18;31180:6;31136:72;:::i;:::-;31218;31286:2;31275:9;31271:18;31262:6;31218:72;:::i;:::-;30855:442;;;;;;:::o;31303:807::-;31552:4;31590:3;31579:9;31575:19;31567:27;;31604:71;31672:1;31661:9;31657:17;31648:6;31604:71;:::i;:::-;31685:72;31753:2;31742:9;31738:18;31729:6;31685:72;:::i;:::-;31767:80;31843:2;31832:9;31828:18;31819:6;31767:80;:::i;:::-;31857;31933:2;31922:9;31918:18;31909:6;31857:80;:::i;:::-;31947:73;32015:3;32004:9;32000:19;31991:6;31947:73;:::i;:::-;32030;32098:3;32087:9;32083:19;32074:6;32030:73;:::i;:::-;31303:807;;;;;;;;;:::o;32116:663::-;32204:6;32212;32220;32269:2;32257:9;32248:7;32244:23;32240:32;32237:119;;;32275:79;;:::i;:::-;32237:119;32395:1;32420:64;32476:7;32467:6;32456:9;32452:22;32420:64;:::i;:::-;32410:74;;32366:128;32533:2;32559:64;32615:7;32606:6;32595:9;32591:22;32559:64;:::i;:::-;32549:74;;32504:129;32672:2;32698:64;32754:7;32745:6;32734:9;32730:22;32698:64;:::i;:::-;32688:74;;32643:129;32116:663;;;;;:::o

Swarm Source

ipfs://dc9dcbb895e90f37c752e7647442dbb2dd8d946fead6c564f46b8e527e093635
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.