ETH Price: $3,332.55 (-0.83%)

Token

Elon Musk (MUSK)
 

Overview

Max Total Supply

10,000,000,000 MUSK

Holders

2,723

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
llikeshitcoin.eth
Balance
0.801562032694352287 MUSK

Value
$0.00
0x7a586967e512b04d956a42afd7685597ac3e0da9
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:
MUSK

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-04-27
*/

// SPDX-License-Identifier: MIT

//telegram: https://t.me/musk_erc
//twitter: https://twitter.com/musk_erc
// website: https://elonmuskcoin.io
pragma solidity 0.8.9;
 


interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns(address pair);
}

interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns(uint256);

    /**
    * @dev Returns the amount of tokens owned by `account`.
    */
    function balanceOf(address account) external view returns(uint256);

    /**
    * @dev Moves `amount` tokens from the caller's account to `recipient`.
    *
    * Returns a boolean value indicating whether the operation succeeded.
    *
    * Emits a {Transfer} event.
    */
    function transfer(address recipient, uint256 amount) external returns(bool);

    /**
    * @dev Returns the remaining number of tokens that `spender` will be
    * allowed to spend on behalf of `owner` through {transferFrom}. This is
    * zero by default.
    *
    * This value changes when {approve} or {transferFrom} are called.
    */
    function allowance(address owner, address spender) external view returns(uint256);

    /**
    * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
    *
    * Returns a boolean value indicating whether the operation succeeded.
    *
    * IMPORTANT: Beware that changing an allowance with this method brings the risk
    * that someone may use both the old and the new allowance by unfortunate
    * transaction ordering. One possible solution to mitigate this race
    * condition is to first reduce the spender's allowance to 0 and set the
    * desired value afterwards:
    * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
    *
    * Emits an {Approval} event.
    */
    function approve(address spender, uint256 amount) external returns(bool);

    /**
    * @dev Moves `amount` tokens from `sender` to `recipient` using the
    * allowance mechanism. `amount` is then deducted from the caller's
    * allowance.
    *
    * Returns a boolean value indicating whether the operation succeeded.
    *
    * Emits a {Transfer} event.
    */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns(bool);

        /**
        * @dev Emitted when `value` tokens are moved from one account (`from`) to
        * another (`to`).
        *
        * Note that `value` may be zero.
        */
        event Transfer(address indexed from, address indexed to, uint256 value);

        /**
        * @dev Emitted when the allowance of a `spender` for an `owner` is set by
        * a call to {approve}. `value` is the new allowance.
        */
        event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns(string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns(string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns(uint8);
}

abstract contract Context {
    function _msgSender() internal view virtual returns(address) {
        return msg.sender;
    }

}

 
contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

        mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;
 
    uint256 private _totalSupply;
 
    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns(string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns(string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns(uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns(uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns(uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns(bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns(uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns(bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns(bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns(bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns(bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased cannot be below zero"));
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    
    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    
}
 
library SafeMath {
   
    function add(uint256 a, uint256 b) internal pure returns(uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

   
    function sub(uint256 a, uint256 b) internal pure returns(uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

   
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns(uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns(uint256) {
    
        if (a == 0) {
            return 0;
        }
 
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

 
    function div(uint256 a, uint256 b) internal pure returns(uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

  
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns(uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    
}
 
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() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @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;
    }
}
 
 
 
library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns(int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns(int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns(int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns(int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns(int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }


    function toUint256Safe(int256 a) internal pure returns(uint256) {
        require(a >= 0);
        return uint256(a);
    }
}
 
library SafeMathUint {
    function toInt256Safe(uint256 a) internal pure returns(int256) {
    int256 b = int256(a);
        require(b >= 0);
        return b;
    }
}


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 MUSK is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable router;
    address public immutable uniswapV2Pair;


    // addresses
    address public  devWallet;
    address private marketingWallet;

    // limits 
    uint256 private maxBuyAmount;
    uint256 private maxSellAmount;   
    uint256 private maxWalletAmount;
 
    uint256 private thresholdSwapAmount;

    // status flags
    bool private isTrading = false;
    bool public swapEnabled = false;
    bool public isSwapping;


    struct Fees {
        uint8 buyTotalFees;
        uint8 buyMarketingFee;
        uint8 buyDevFee;
        uint8 buyLiquidityFee;

        uint8 sellTotalFees;
        uint8 sellMarketingFee;
        uint8 sellDevFee;
        uint8 sellLiquidityFee;
    }  

    Fees public _fees = Fees({
        buyTotalFees: 0,
        buyMarketingFee: 0,
        buyDevFee:0,
        buyLiquidityFee: 0,

        sellTotalFees: 0,
        sellMarketingFee: 0,
        sellDevFee:0,
        sellLiquidityFee: 0
    });
    
    

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    uint256 private taxTill;
    // exclude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;
    mapping(address => bool) public _isExcludedMaxWalletAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public marketPair;
    mapping(address => bool) public _isBlacklisted;
 
  
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived
    );


    constructor() ERC20("Elon Musk", "MUSK") {
 
        router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);


        uniswapV2Pair = IUniswapV2Factory(router.factory()).createPair(address(this), router.WETH());

        _isExcludedMaxTransactionAmount[address(router)] = true;
        _isExcludedMaxTransactionAmount[address(uniswapV2Pair)] = true;        
        _isExcludedMaxTransactionAmount[owner()] = true;
        _isExcludedMaxTransactionAmount[address(this)] = true;

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;

        _isExcludedMaxWalletAmount[owner()] = true;
        _isExcludedMaxWalletAmount[address(this)] = true;
        _isExcludedMaxWalletAmount[address(uniswapV2Pair)] = true;


        marketPair[address(uniswapV2Pair)] = true;

        approve(address(router), type(uint256).max);
        uint256 totalSupply = 1e10 * 1e18;

        maxBuyAmount = totalSupply * 1 / 100; // 1% maxTransactionAmountTxn
        maxSellAmount = totalSupply * 1 / 100; // 1% maxTransactionAmountTxn
        maxWalletAmount = totalSupply * 1 / 100; // 1% maxWallet
        thresholdSwapAmount = totalSupply * 1 / 10000; // 0.01% swap wallet

        _fees.buyMarketingFee = 2;
        _fees.buyLiquidityFee = 1;
        _fees.buyDevFee = 1;
        _fees.buyTotalFees = _fees.buyMarketingFee + _fees.buyLiquidityFee + _fees.buyDevFee;

        _fees.sellMarketingFee = 2;
        _fees.sellLiquidityFee = 1;
        _fees.sellDevFee = 1;
        _fees.sellTotalFees = _fees.sellMarketingFee + _fees.sellLiquidityFee + _fees.sellDevFee;


        marketingWallet = address(0xc585ba763c9916f77f82cca388F1D4Dc48Bf3b1D);
        devWallet = address(0xc585ba763c9916f77f82cca388F1D4Dc48Bf3b1D);

        // exclude from paying fees or having max transaction amount

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {

    }

    // once enabled, can never be turned off
    function swapTrading() external onlyOwner {
        isTrading = true;
        swapEnabled = true;
        taxTill = block.number + 2;
    }



    // change the minimum amount of tokens to sell from fees
    function updateThresholdSwapAmount(uint256 newAmount) external onlyOwner returns(bool){
        thresholdSwapAmount = newAmount;
        return true;
    }


    function updateMaxTxnAmount(uint256 newMaxBuy, uint256 newMaxSell) external onlyOwner {
        require(((totalSupply() * newMaxBuy) / 1000) >= (totalSupply() / 100), "maxBuyAmount must be higher than 1%");
        require(((totalSupply() * newMaxSell) / 1000) >= (totalSupply() / 100), "maxSellAmount must be higher than 1%");
        maxBuyAmount = (totalSupply() * newMaxBuy) / 1000;
        maxSellAmount = (totalSupply() * newMaxSell) / 1000;
    }


    function updateMaxWalletAmount(uint256 newPercentage) external onlyOwner {
        require(((totalSupply() * newPercentage) / 1000) >= (totalSupply() / 100), "Cannot set maxWallet lower than 1%");
        maxWalletAmount = (totalSupply() * newPercentage) / 1000;
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function toggleSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }

      function blacklistAddress(address account, bool value) external onlyOwner{
        _isBlacklisted[account] = value;
    }

    function updateFees(uint8 _marketingFeeBuy, uint8 _liquidityFeeBuy,uint8 _devFeeBuy,uint8 _marketingFeeSell, uint8 _liquidityFeeSell,uint8 _devFeeSell) external onlyOwner{
        _fees.buyMarketingFee = _marketingFeeBuy;
        _fees.buyLiquidityFee = _liquidityFeeBuy;
        _fees.buyDevFee = _devFeeBuy;
        _fees.buyTotalFees = _fees.buyMarketingFee + _fees.buyLiquidityFee + _fees.buyDevFee;

        _fees.sellMarketingFee = _marketingFeeSell;
        _fees.sellLiquidityFee = _liquidityFeeSell;
        _fees.sellDevFee = _devFeeSell;
        _fees.sellTotalFees = _fees.sellMarketingFee + _fees.sellLiquidityFee + _fees.sellDevFee;
        require(_fees.buyTotalFees <= 30, "Must keep fees at 30% or less");   
        require(_fees.sellTotalFees <= 30, "Must keep fees at 30% or less");
     
    }
    
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
    }
    function excludeFromWalletLimit(address account, bool excluded) public onlyOwner {
        _isExcludedMaxWalletAmount[account] = excluded;
    }
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }


    function setMarketPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "Must keep uniswapV2Pair");
        marketPair[pair] = value;
    }


    function setWallets(address _marketingWallet,address _devWallet) external onlyOwner{
        marketingWallet = _marketingWallet;
        devWallet = _devWallet;
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
        
    ) internal override {
        
        if (amount == 0) {
            super._transfer(sender, recipient, 0);
            return;
        }

        if (
            sender != owner() &&
            recipient != owner() &&
            !isSwapping
        ) {

            if (!isTrading) {
                require(_isExcludedFromFees[sender] || _isExcludedFromFees[recipient], "Trading is not active.");
            }
            if (marketPair[sender] && !_isExcludedMaxTransactionAmount[recipient]) {
                require(amount <= maxBuyAmount, "buy transfer over max amount");
            } 
            else if (marketPair[recipient] && !_isExcludedMaxTransactionAmount[sender]) {
                require(amount <= maxSellAmount, "Sell transfer over max amount");
            }

            if (!_isExcludedMaxWalletAmount[recipient]) {
                require(amount + balanceOf(recipient) <= maxWalletAmount, "Max wallet exceeded");
            }
           require(!_isBlacklisted[sender] && !_isBlacklisted[recipient], "Blacklisted address");
        }
 
        
 
        uint256 contractTokenBalance = balanceOf(address(this));
 
        bool canSwap = contractTokenBalance >= thresholdSwapAmount;

        if (
            canSwap &&
            swapEnabled &&
            !isSwapping &&
            marketPair[recipient] &&
            !_isExcludedFromFees[sender] &&
            !_isExcludedFromFees[recipient]
        ) {
            isSwapping = true;
            swapBack();
            isSwapping = false;
        }
 
        bool takeFee = !isSwapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[sender] || _isExcludedFromFees[recipient]) {
            takeFee = false;
        }
 
        
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            uint256 fees = 0;
            if(block.number < taxTill) {
                fees = amount.mul(99).div(100);
                tokensForMarketing += (fees * 94) / 99;
                tokensForDev += (fees * 5) / 99;
            } else if (marketPair[recipient] && _fees.sellTotalFees > 0) {
                fees = amount.mul(_fees.sellTotalFees).div(100);
                tokensForLiquidity += fees * _fees.sellLiquidityFee / _fees.sellTotalFees;
                tokensForMarketing += fees * _fees.sellMarketingFee / _fees.sellTotalFees;
                tokensForDev += fees * _fees.sellDevFee / _fees.sellTotalFees;
            }
            // on buy
            else if (marketPair[sender] && _fees.buyTotalFees > 0) {
                fees = amount.mul(_fees.buyTotalFees).div(100);
                tokensForLiquidity += fees * _fees.buyLiquidityFee / _fees.buyTotalFees;
                tokensForMarketing += fees * _fees.buyMarketingFee / _fees.buyTotalFees;
                tokensForDev += fees * _fees.buyDevFee / _fees.buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(sender, address(this), fees);
            }

            amount -= fees;

        }

        super._transfer(sender, recipient, amount);
    }

    function swapTokensForEth(uint256 tAmount) private {

        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

        _approve(address(this), address(router), tAmount);

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

    }

    function addLiquidity(uint256 tAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(router), tAmount);

        // add the liquidity
        router.addLiquidityETH{ value: ethAmount } (address(this), tAmount, 0, 0 , address(this), block.timestamp);
    }

    function swapBack() private {
        uint256 contractTokenBalance = balanceOf(address(this));
        uint256 toSwap = tokensForLiquidity + tokensForMarketing + tokensForDev;
        bool success;

        if (contractTokenBalance == 0 || toSwap == 0) { return; }

        if (contractTokenBalance > thresholdSwapAmount * 20) {
            contractTokenBalance = thresholdSwapAmount * 20;
        }

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractTokenBalance * tokensForLiquidity / toSwap / 2;
        uint256 amountToSwapForETH = contractTokenBalance.sub(liquidityTokens);
 
        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH); 
 
        uint256 newBalance = address(this).balance.sub(initialETHBalance);
 
        uint256 ethForMarketing = newBalance.mul(tokensForMarketing).div(toSwap);
        uint256 ethForDev = newBalance.mul(tokensForDev).div(toSwap);
        uint256 ethForLiquidity = newBalance - (ethForMarketing + ethForDev);


        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;


        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity);
        }

        (success,) = address(devWallet).call{ value: (address(this).balance - ethForMarketing) } ("");
        (success,) = address(marketingWallet).call{ value: address(this).balance } ("");
    }

}

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":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"}],"name":"SwapAndLiquify","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":"_fees","outputs":[{"internalType":"uint8","name":"buyTotalFees","type":"uint8"},{"internalType":"uint8","name":"buyMarketingFee","type":"uint8"},{"internalType":"uint8","name":"buyDevFee","type":"uint8"},{"internalType":"uint8","name":"buyLiquidityFee","type":"uint8"},{"internalType":"uint8","name":"sellTotalFees","type":"uint8"},{"internalType":"uint8","name":"sellMarketingFee","type":"uint8"},{"internalType":"uint8","name":"sellDevFee","type":"uint8"},{"internalType":"uint8","name":"sellLiquidityFee","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxWalletAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"blacklistAddress","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":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSwapping","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"marketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setMarketPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_devWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"toggleSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_marketingFeeBuy","type":"uint8"},{"internalType":"uint8","name":"_liquidityFeeBuy","type":"uint8"},{"internalType":"uint8","name":"_devFeeBuy","type":"uint8"},{"internalType":"uint8","name":"_marketingFeeSell","type":"uint8"},{"internalType":"uint8","name":"_liquidityFeeSell","type":"uint8"},{"internalType":"uint8","name":"_devFeeSell","type":"uint8"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxBuy","type":"uint256"},{"internalType":"uint256","name":"newMaxSell","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPercentage","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateThresholdSwapAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526000600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff021916908315150217905550604051806101000160405280600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff16815250600d60008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff16021790555060808201518160000160046101000a81548160ff021916908360ff16021790555060a08201518160000160056101000a81548160ff021916908360ff16021790555060c08201518160000160066101000a81548160ff021916908360ff16021790555060e08201518160000160076101000a81548160ff021916908360ff1602179055505050348015620001ad57600080fd5b506040518060400160405280600981526020017f456c6f6e204d75736b00000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4d55534b0000000000000000000000000000000000000000000000000000000081525081600390805190602001906200023292919062000f2f565b5080600490805190602001906200024b92919062000f2f565b50505060006200026062000be460201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060805173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200039057600080fd5b505afa158015620003a5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003cb919062001049565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060805173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200043057600080fd5b505afa15801562000445573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200046b919062001049565b6040518363ffffffff1660e01b81526004016200048a9291906200108c565b602060405180830381600087803b158015620004a557600080fd5b505af1158015620004ba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004e0919062001049565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505060016013600060805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016013600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160136000620005dd62000bec60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601260006200069c62000bec60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460006200075b62000bec60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016014600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016015600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620008ec6080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000c1660201b60201c565b5060006b204fce5e3e25026110000000905060646001826200090f9190620010f2565b6200091b919062001182565b6008819055506064600182620009329190620010f2565b6200093e919062001182565b6009819055506064600182620009559190620010f2565b62000961919062001182565b600a81905550612710600182620009799190620010f2565b62000985919062001182565b600b819055506002600d60000160016101000a81548160ff021916908360ff1602179055506001600d60000160036101000a81548160ff021916908360ff1602179055506001600d60000160026101000a81548160ff021916908360ff160217905550600d60000160029054906101000a900460ff16600d60000160039054906101000a900460ff16600d60000160019054906101000a900460ff1662000a2d9190620011c7565b62000a399190620011c7565b600d60000160006101000a81548160ff021916908360ff1602179055506002600d60000160056101000a81548160ff021916908360ff1602179055506001600d60000160076101000a81548160ff021916908360ff1602179055506001600d60000160066101000a81548160ff021916908360ff160217905550600d60000160069054906101000a900460ff16600d60000160079054906101000a900460ff16600d60000160059054906101000a900460ff1662000af89190620011c7565b62000b049190620011c7565b600d60000160046101000a81548160ff021916908360ff16021790555073c585ba763c9916f77f82cca388f1d4dc48bf3b1d600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c585ba763c9916f77f82cca388f1d4dc48bf3b1d600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000bdd338262000c4460201b60201c565b50620013ea565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600062000c3a62000c2c62000be460201b60201c565b848462000ddf60201b60201c565b6001905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000cb7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000cae9062001266565b60405180910390fd5b62000cd38160025462000ecc60201b620022381790919060201c565b60028190555062000d31816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000ecc60201b620022381790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000dd3919062001299565b60405180910390a35050565b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000ebf919062001299565b60405180910390a3505050565b600080828462000edd9190620012b6565b90508381101562000f25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000f1c9062001363565b60405180910390fd5b8091505092915050565b82805462000f3d90620013b4565b90600052602060002090601f01602090048101928262000f61576000855562000fad565b82601f1062000f7c57805160ff191683800117855562000fad565b8280016001018555821562000fad579182015b8281111562000fac57825182559160200191906001019062000f8f565b5b50905062000fbc919062000fc0565b5090565b5b8082111562000fdb57600081600090555060010162000fc1565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620010118262000fe4565b9050919050565b620010238162001004565b81146200102f57600080fd5b50565b600081519050620010438162001018565b92915050565b60006020828403121562001062576200106162000fdf565b5b6000620010728482850162001032565b91505092915050565b620010868162001004565b82525050565b6000604082019050620010a360008301856200107b565b620010b260208301846200107b565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620010ff82620010b9565b91506200110c83620010b9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620011485762001147620010c3565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200118f82620010b9565b91506200119c83620010b9565b925082620011af57620011ae62001153565b5b828204905092915050565b600060ff82169050919050565b6000620011d482620011ba565b9150620011e183620011ba565b92508260ff03821115620011fa57620011f9620010c3565b5b828201905092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200124e601f8362001205565b91506200125b8262001216565b602082019050919050565b6000602082019050818103600083015262001281816200123f565b9050919050565b6200129381620010b9565b82525050565b6000602082019050620012b0600083018462001288565b92915050565b6000620012c382620010b9565b9150620012d083620010b9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620013085762001307620010c3565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006200134b601b8362001205565b9150620013588262001313565b602082019050919050565b600060208201905081810360008301526200137e816200133c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620013cd57607f821691505b60208210811415620013e457620013e362001385565b5b50919050565b60805160a051614b366200143a600039600081816112a30152611adc015260008181612216015281816135ec015281816136dc015281816137030152818161379f01526137c60152614b366000f3fe60806040526004361061023f5760003560e01c80637571336a1161012e578063c0246668116100ab578063dd62ed3e1161006f578063dd62ed3e146108bf578063e16830a8146108fc578063f2fde38b14610925578063f5b3c3bf1461094e578063f887ea401461098b57610246565b8063c0246668146107e9578063c16dd4a414610812578063c18bc1951461083b578063d212a69a14610864578063d3f6a1571461089657610246565b80639fccce32116100f25780639fccce3214610702578063a457c2d71461072d578063a9059cbb1461076a578063b8863115146107a7578063b9e418e7146107d257610246565b80637571336a1461061b5780638da5cb5b146106445780638ea5220f1461066f57806395d89b411461069a57806396880b17146106c557610246565b8063313ce567116101bc5780634fbee193116101805780634fbee19314610522578063555467a11461055f5780636ddd17131461059c57806370a08231146105c7578063715018a61461060457610246565b8063313ce5671461043d5780633265e846146104685780633950935114610491578063455a4396146104ce57806349bd5a5e146104f757610246565b80631a8145bb116102035780631a8145bb146103445780631c6e8a751461036f5780631cdd3be3146103985780631f3fed8f146103d557806323b872dd1461040057610246565b806306fdde031461024b578063095ea7b31461027657806310d5de53146102b357806311a582c3146102f057806318160ddd1461031957610246565b3661024657005b600080fd5b34801561025757600080fd5b506102606109b6565b60405161026d919061397e565b60405180910390f35b34801561028257600080fd5b5061029d60048036038101906102989190613a39565b610a48565b6040516102aa9190613a94565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d59190613aaf565b610a66565b6040516102e79190613a94565b60405180910390f35b3480156102fc57600080fd5b5061031760048036038101906103129190613adc565b610a86565b005b34801561032557600080fd5b5061032e610c57565b60405161033b9190613b2b565b60405180910390f35b34801561035057600080fd5b50610359610c61565b6040516103669190613b2b565b60405180910390f35b34801561037b57600080fd5b5061039660048036038101906103919190613b72565b610c67565b005b3480156103a457600080fd5b506103bf60048036038101906103ba9190613aaf565b610d1b565b6040516103cc9190613a94565b60405180910390f35b3480156103e157600080fd5b506103ea610d3b565b6040516103f79190613b2b565b60405180910390f35b34801561040c57600080fd5b5061042760048036038101906104229190613b9f565b610d41565b6040516104349190613a94565b60405180910390f35b34801561044957600080fd5b50610452610e1a565b60405161045f9190613c0e565b60405180910390f35b34801561047457600080fd5b5061048f600480360381019061048a9190613c55565b610e23565b005b34801561049d57600080fd5b506104b860048036038101906104b39190613a39565b6110fc565b6040516104c59190613a94565b60405180910390f35b3480156104da57600080fd5b506104f560048036038101906104f09190613ce2565b6111af565b005b34801561050357600080fd5b5061050c6112a1565b6040516105199190613d31565b60405180910390f35b34801561052e57600080fd5b5061054960048036038101906105449190613aaf565b6112c5565b6040516105569190613a94565b60405180910390f35b34801561056b57600080fd5b5061058660048036038101906105819190613d4c565b61131b565b6040516105939190613a94565b60405180910390f35b3480156105a857600080fd5b506105b16113c4565b6040516105be9190613a94565b60405180910390f35b3480156105d357600080fd5b506105ee60048036038101906105e99190613aaf565b6113d7565b6040516105fb9190613b2b565b60405180910390f35b34801561061057600080fd5b5061061961141f565b005b34801561062757600080fd5b50610642600480360381019061063d9190613ce2565b611577565b005b34801561065057600080fd5b50610659611669565b6040516106669190613d31565b60405180910390f35b34801561067b57600080fd5b50610684611693565b6040516106919190613d31565b60405180910390f35b3480156106a657600080fd5b506106af6116b9565b6040516106bc919061397e565b60405180910390f35b3480156106d157600080fd5b506106ec60048036038101906106e79190613aaf565b61174b565b6040516106f99190613a94565b60405180910390f35b34801561070e57600080fd5b5061071761176b565b6040516107249190613b2b565b60405180910390f35b34801561073957600080fd5b50610754600480360381019061074f9190613a39565b611771565b6040516107619190613a94565b60405180910390f35b34801561077657600080fd5b50610791600480360381019061078c9190613a39565b61183e565b60405161079e9190613a94565b60405180910390f35b3480156107b357600080fd5b506107bc61185c565b6040516107c99190613a94565b60405180910390f35b3480156107de57600080fd5b506107e761186f565b005b3480156107f557600080fd5b50610810600480360381019061080b9190613ce2565b611951565b005b34801561081e57600080fd5b5061083960048036038101906108349190613ce2565b611a43565b005b34801561084757600080fd5b50610862600480360381019061085d9190613d4c565b611bc4565b005b34801561087057600080fd5b50610879611cf9565b60405161088d989796959493929190613d79565b60405180910390f35b3480156108a257600080fd5b506108bd60048036038101906108b89190613df7565b611d97565b005b3480156108cb57600080fd5b506108e660048036038101906108e19190613df7565b611eb4565b6040516108f39190613b2b565b60405180910390f35b34801561090857600080fd5b50610923600480360381019061091e9190613ce2565b611f3b565b005b34801561093157600080fd5b5061094c60048036038101906109479190613aaf565b61202d565b005b34801561095a57600080fd5b5061097560048036038101906109709190613aaf565b6121f4565b6040516109829190613a94565b60405180910390f35b34801561099757600080fd5b506109a0612214565b6040516109ad9190613e96565b60405180910390f35b6060600380546109c590613ee0565b80601f01602080910402602001604051908101604052809291908181526020018280546109f190613ee0565b8015610a3e5780601f10610a1357610100808354040283529160200191610a3e565b820191906000526020600020905b815481529060010190602001808311610a2157829003601f168201915b5050505050905090565b6000610a5c610a55612296565b848461229e565b6001905092915050565b60136020528060005260406000206000915054906101000a900460ff1681565b610a8e612296565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1490613f5e565b60405180910390fd5b6064610b27610c57565b610b319190613fdc565b6103e883610b3d610c57565b610b47919061400d565b610b519190613fdc565b1015610b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b89906140d9565b60405180910390fd5b6064610b9c610c57565b610ba69190613fdc565b6103e882610bb2610c57565b610bbc919061400d565b610bc69190613fdc565b1015610c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfe9061416b565b60405180910390fd5b6103e882610c13610c57565b610c1d919061400d565b610c279190613fdc565b6008819055506103e881610c39610c57565b610c43919061400d565b610c4d9190613fdc565b6009819055505050565b6000600254905090565b600f5481565b610c6f612296565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf590613f5e565b60405180910390fd5b80600c60016101000a81548160ff02191690831515021790555050565b60166020528060005260406000206000915054906101000a900460ff1681565b600e5481565b6000610d4e848484612389565b610e0f84610d5a612296565b610e0a85604051806060016040528060288152602001614ad960289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610dc0612296565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f429092919063ffffffff16565b61229e565b600190509392505050565b60006012905090565b610e2b612296565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb190613f5e565b60405180910390fd5b85600d60000160016101000a81548160ff021916908360ff16021790555084600d60000160036101000a81548160ff021916908360ff16021790555083600d60000160026101000a81548160ff021916908360ff160217905550600d60000160029054906101000a900460ff16600d60000160039054906101000a900460ff16600d60000160019054906101000a900460ff16610f57919061418b565b610f61919061418b565b600d60000160006101000a81548160ff021916908360ff16021790555082600d60000160056101000a81548160ff021916908360ff16021790555081600d60000160076101000a81548160ff021916908360ff16021790555080600d60000160066101000a81548160ff021916908360ff160217905550600d60000160069054906101000a900460ff16600d60000160079054906101000a900460ff16600d60000160059054906101000a900460ff1661101b919061418b565b611025919061418b565b600d60000160046101000a81548160ff021916908360ff160217905550601e600d60000160009054906101000a900460ff1660ff16111561109b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110929061420e565b60405180910390fd5b601e600d60000160049054906101000a900460ff1660ff1611156110f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110eb9061420e565b60405180910390fd5b505050505050565b60006111a5611109612296565b846111a0856001600061111a612296565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461223890919063ffffffff16565b61229e565b6001905092915050565b6111b7612296565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611246576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123d90613f5e565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000611325612296565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ab90613f5e565b60405180910390fd5b81600b8190555060019050919050565b600c60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611427612296565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ad90613f5e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61157f612296565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461160e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160590613f5e565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600480546116c890613ee0565b80601f01602080910402602001604051908101604052809291908181526020018280546116f490613ee0565b80156117415780601f1061171657610100808354040283529160200191611741565b820191906000526020600020905b81548152906001019060200180831161172457829003601f168201915b5050505050905090565b60146020528060005260406000206000915054906101000a900460ff1681565b60105481565b600061183461177e612296565b8461182f85604051806060016040528060258152602001614a8e60259139600160006117a8612296565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f429092919063ffffffff16565b61229e565b6001905092915050565b600061185261184b612296565b8484612389565b6001905092915050565b600c60029054906101000a900460ff1681565b611877612296565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611906576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fd90613f5e565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff021916908315150217905550600243611949919061422e565b601181905550565b611959612296565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119df90613f5e565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611a4b612296565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ada576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad190613f5e565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b60906142d0565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611bcc612296565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5290613f5e565b60405180910390fd5b6064611c65610c57565b611c6f9190613fdc565b6103e882611c7b610c57565b611c85919061400d565b611c8f9190613fdc565b1015611cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc790614362565b60405180910390fd5b6103e881611cdc610c57565b611ce6919061400d565b611cf09190613fdc565b600a8190555050565b600d8060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900460ff16908060000160039054906101000a900460ff16908060000160049054906101000a900460ff16908060000160059054906101000a900460ff16908060000160069054906101000a900460ff16908060000160079054906101000a900460ff16905088565b611d9f612296565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2590613f5e565b60405180910390fd5b81600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611f43612296565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc990613f5e565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b612035612296565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bb90613f5e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612134576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212b906143f4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60156020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000808284612247919061422e565b90508381101561228c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228390614460565b60405180910390fd5b8091505092915050565b600033905090565b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161237c9190613b2b565b60405180910390a3505050565b60008114156123a35761239e83836000612fa6565b612f3d565b6123ab611669565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561241957506123e9611669565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124325750600c60029054906101000a900460ff16155b1561289b57600c60009054906101000a900460ff1661252c57601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124ec5750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61252b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612522906144cc565b60405180910390fd5b5b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125cf5750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561261e57600854811115612619576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261090614538565b60405180910390fd5b61270d565b601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126c15750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561270c5760095481111561270b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612702906145a4565b60405180910390fd5b5b5b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166127b757600a5461276a836113d7565b82612775919061422e565b11156127b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ad90614610565b60405180910390fd5b5b601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561285b5750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61289a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128919061467c565b60405180910390fd5b5b60006128a6306113d7565b90506000600b5482101590508080156128cb5750600c60019054906101000a900460ff165b80156128e45750600c60029054906101000a900460ff16155b80156129395750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b801561298f5750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156129e55750601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a29576001600c60026101000a81548160ff021916908315150217905550612a0d613150565b6000600c60026101000a81548160ff0219169083151502179055505b6000600c60029054906101000a900460ff16159050601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612adf5750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612ae957600090505b8015612f2e576000601154431015612b8b57612b226064612b1460638861343e90919063ffffffff16565b6134b990919063ffffffff16565b90506063605e82612b33919061400d565b612b3d9190613fdc565b600e6000828254612b4e919061422e565b925050819055506063600582612b64919061400d565b612b6e9190613fdc565b60106000828254612b7f919061422e565b92505081905550612f09565b601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612bf957506000600d60000160049054906101000a900460ff1660ff16115b15612d4b57612c396064612c2b600d60000160049054906101000a900460ff1660ff168861343e90919063ffffffff16565b6134b990919063ffffffff16565b9050600d60000160049054906101000a900460ff1660ff16600d60000160079054906101000a900460ff1660ff1682612c72919061400d565b612c7c9190613fdc565b600f6000828254612c8d919061422e565b92505081905550600d60000160049054906101000a900460ff1660ff16600d60000160059054906101000a900460ff1660ff1682612ccb919061400d565b612cd59190613fdc565b600e6000828254612ce6919061422e565b92505081905550600d60000160049054906101000a900460ff1660ff16600d60000160069054906101000a900460ff1660ff1682612d24919061400d565b612d2e9190613fdc565b60106000828254612d3f919061422e565b92505081905550612f08565b601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612db957506000600d60000160009054906101000a900460ff1660ff16115b15612f0757612df96064612deb600d60000160009054906101000a900460ff1660ff168861343e90919063ffffffff16565b6134b990919063ffffffff16565b9050600d60000160009054906101000a900460ff1660ff16600d60000160039054906101000a900460ff1660ff1682612e32919061400d565b612e3c9190613fdc565b600f6000828254612e4d919061422e565b92505081905550600d60000160009054906101000a900460ff1660ff16600d60000160019054906101000a900460ff1660ff1682612e8b919061400d565b612e959190613fdc565b600e6000828254612ea6919061422e565b92505081905550600d60000160009054906101000a900460ff1660ff16600d60000160029054906101000a900460ff1660ff1682612ee4919061400d565b612eee9190613fdc565b60106000828254612eff919061422e565b925050819055505b5b5b6000811115612f1e57612f1d873083612fa6565b5b8085612f2a919061469c565b9450505b612f39868686612fa6565b5050505b505050565b6000838311158290612f8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f81919061397e565b60405180910390fd5b5060008385612f99919061469c565b9050809150509392505050565b61301181604051806060016040528060268152602001614ab3602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f429092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506130a4816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461223890919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516131439190613b2b565b60405180910390a3505050565b600061315b306113d7565b90506000601054600e54600f54613172919061422e565b61317c919061422e565b905060008083148061318e5750600082145b1561319b5750505061343c565b6014600b546131aa919061400d565b8311156131c3576014600b546131c0919061400d565b92505b6000600283600f54866131d6919061400d565b6131e09190613fdc565b6131ea9190613fdc565b90506000613201828661350390919063ffffffff16565b905060004790506132118261354d565b6000613226824761350390919063ffffffff16565b9050600061325187613243600e548561343e90919063ffffffff16565b6134b990919063ffffffff16565b9050600061327c8861326e6010548661343e90919063ffffffff16565b6134b990919063ffffffff16565b90506000818361328c919061422e565b84613297919061469c565b90506000600f819055506000600e8190555060006010819055506000871180156132c15750600081115b1561330a576132d08782613799565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f838148686826040516133019291906146d0565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16834761334f919061469c565b60405161335b9061472a565b60006040518083038185875af1925050503d8060008114613398576040519150601f19603f3d011682016040523d82523d6000602084013e61339d565b606091505b505080985050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516133e99061472a565b60006040518083038185875af1925050503d8060008114613426576040519150601f19603f3d011682016040523d82523d6000602084013e61342b565b606091505b505080985050505050505050505050505b565b60008083141561345157600090506134b3565b6000828461345f919061400d565b905082848261346e9190613fdc565b146134ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134a5906147b1565b60405180910390fd5b809150505b92915050565b60006134fb83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613882565b905092915050565b600061354583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612f42565b905092915050565b6000600267ffffffffffffffff81111561356a576135696147d1565b5b6040519080825280602002602001820160405280156135985781602001602082028036833780820191505090505b50905030816000815181106135b0576135af614800565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561365057600080fd5b505afa158015613664573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136889190614844565b8160018151811061369c5761369b614800565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613701307f00000000000000000000000000000000000000000000000000000000000000008461229e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161376395949392919061496a565b600060405180830381600087803b15801561377d57600080fd5b505af1158015613791573d6000803e3d6000fd5b505050505050565b6137c4307f00000000000000000000000000000000000000000000000000000000000000008461229e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b8152600401613829969594939291906149c4565b6060604051808303818588803b15801561384257600080fd5b505af1158015613856573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061387b9190614a3a565b5050505050565b600080831182906138c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138c0919061397e565b60405180910390fd5b50600083856138d89190613fdc565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561391f578082015181840152602081019050613904565b8381111561392e576000848401525b50505050565b6000601f19601f8301169050919050565b6000613950826138e5565b61395a81856138f0565b935061396a818560208601613901565b61397381613934565b840191505092915050565b600060208201905081810360008301526139988184613945565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006139d0826139a5565b9050919050565b6139e0816139c5565b81146139eb57600080fd5b50565b6000813590506139fd816139d7565b92915050565b6000819050919050565b613a1681613a03565b8114613a2157600080fd5b50565b600081359050613a3381613a0d565b92915050565b60008060408385031215613a5057613a4f6139a0565b5b6000613a5e858286016139ee565b9250506020613a6f85828601613a24565b9150509250929050565b60008115159050919050565b613a8e81613a79565b82525050565b6000602082019050613aa96000830184613a85565b92915050565b600060208284031215613ac557613ac46139a0565b5b6000613ad3848285016139ee565b91505092915050565b60008060408385031215613af357613af26139a0565b5b6000613b0185828601613a24565b9250506020613b1285828601613a24565b9150509250929050565b613b2581613a03565b82525050565b6000602082019050613b406000830184613b1c565b92915050565b613b4f81613a79565b8114613b5a57600080fd5b50565b600081359050613b6c81613b46565b92915050565b600060208284031215613b8857613b876139a0565b5b6000613b9684828501613b5d565b91505092915050565b600080600060608486031215613bb857613bb76139a0565b5b6000613bc6868287016139ee565b9350506020613bd7868287016139ee565b9250506040613be886828701613a24565b9150509250925092565b600060ff82169050919050565b613c0881613bf2565b82525050565b6000602082019050613c236000830184613bff565b92915050565b613c3281613bf2565b8114613c3d57600080fd5b50565b600081359050613c4f81613c29565b92915050565b60008060008060008060c08789031215613c7257613c716139a0565b5b6000613c8089828a01613c40565b9650506020613c9189828a01613c40565b9550506040613ca289828a01613c40565b9450506060613cb389828a01613c40565b9350506080613cc489828a01613c40565b92505060a0613cd589828a01613c40565b9150509295509295509295565b60008060408385031215613cf957613cf86139a0565b5b6000613d07858286016139ee565b9250506020613d1885828601613b5d565b9150509250929050565b613d2b816139c5565b82525050565b6000602082019050613d466000830184613d22565b92915050565b600060208284031215613d6257613d616139a0565b5b6000613d7084828501613a24565b91505092915050565b600061010082019050613d8f600083018b613bff565b613d9c602083018a613bff565b613da96040830189613bff565b613db66060830188613bff565b613dc36080830187613bff565b613dd060a0830186613bff565b613ddd60c0830185613bff565b613dea60e0830184613bff565b9998505050505050505050565b60008060408385031215613e0e57613e0d6139a0565b5b6000613e1c858286016139ee565b9250506020613e2d858286016139ee565b9150509250929050565b6000819050919050565b6000613e5c613e57613e52846139a5565b613e37565b6139a5565b9050919050565b6000613e6e82613e41565b9050919050565b6000613e8082613e63565b9050919050565b613e9081613e75565b82525050565b6000602082019050613eab6000830184613e87565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613ef857607f821691505b60208210811415613f0c57613f0b613eb1565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613f486020836138f0565b9150613f5382613f12565b602082019050919050565b60006020820190508181036000830152613f7781613f3b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613fe782613a03565b9150613ff283613a03565b92508261400257614001613f7e565b5b828204905092915050565b600061401882613a03565b915061402383613a03565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561405c5761405b613fad565b5b828202905092915050565b7f6d6178427579416d6f756e74206d75737420626520686967686572207468616e60008201527f2031250000000000000000000000000000000000000000000000000000000000602082015250565b60006140c36023836138f0565b91506140ce82614067565b604082019050919050565b600060208201905081810360008301526140f2816140b6565b9050919050565b7f6d617853656c6c416d6f756e74206d757374206265206869676865722074686160008201527f6e20312500000000000000000000000000000000000000000000000000000000602082015250565b60006141556024836138f0565b9150614160826140f9565b604082019050919050565b6000602082019050818103600083015261418481614148565b9050919050565b600061419682613bf2565b91506141a183613bf2565b92508260ff038211156141b7576141b6613fad565b5b828201905092915050565b7f4d757374206b656570206665657320617420333025206f72206c657373000000600082015250565b60006141f8601d836138f0565b9150614203826141c2565b602082019050919050565b60006020820190508181036000830152614227816141eb565b9050919050565b600061423982613a03565b915061424483613a03565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561427957614278613fad565b5b828201905092915050565b7f4d757374206b65657020756e6973776170563250616972000000000000000000600082015250565b60006142ba6017836138f0565b91506142c582614284565b602082019050919050565b600060208201905081810360008301526142e9816142ad565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b600061434c6022836138f0565b9150614357826142f0565b604082019050919050565b6000602082019050818103600083015261437b8161433f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006143de6026836138f0565b91506143e982614382565b604082019050919050565b6000602082019050818103600083015261440d816143d1565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061444a601b836138f0565b915061445582614414565b602082019050919050565b600060208201905081810360008301526144798161443d565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006144b66016836138f0565b91506144c182614480565b602082019050919050565b600060208201905081810360008301526144e5816144a9565b9050919050565b7f627579207472616e73666572206f766572206d617820616d6f756e7400000000600082015250565b6000614522601c836138f0565b915061452d826144ec565b602082019050919050565b6000602082019050818103600083015261455181614515565b9050919050565b7f53656c6c207472616e73666572206f766572206d617820616d6f756e74000000600082015250565b600061458e601d836138f0565b915061459982614558565b602082019050919050565b600060208201905081810360008301526145bd81614581565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006145fa6013836138f0565b9150614605826145c4565b602082019050919050565b60006020820190508181036000830152614629816145ed565b9050919050565b7f426c61636b6c6973746564206164647265737300000000000000000000000000600082015250565b60006146666013836138f0565b915061467182614630565b602082019050919050565b6000602082019050818103600083015261469581614659565b9050919050565b60006146a782613a03565b91506146b283613a03565b9250828210156146c5576146c4613fad565b5b828203905092915050565b60006040820190506146e56000830185613b1c565b6146f26020830184613b1c565b9392505050565b600081905092915050565b50565b60006147146000836146f9565b915061471f82614704565b600082019050919050565b600061473582614707565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061479b6021836138f0565b91506147a68261473f565b604082019050919050565b600060208201905081810360008301526147ca8161478e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061483e816139d7565b92915050565b60006020828403121561485a576148596139a0565b5b60006148688482850161482f565b91505092915050565b6000819050919050565b600061489661489161488c84614871565b613e37565b613a03565b9050919050565b6148a68161487b565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6148e1816139c5565b82525050565b60006148f383836148d8565b60208301905092915050565b6000602082019050919050565b6000614917826148ac565b61492181856148b7565b935061492c836148c8565b8060005b8381101561495d57815161494488826148e7565b975061494f836148ff565b925050600181019050614930565b5085935050505092915050565b600060a08201905061497f6000830188613b1c565b61498c602083018761489d565b818103604083015261499e818661490c565b90506149ad6060830185613d22565b6149ba6080830184613b1c565b9695505050505050565b600060c0820190506149d96000830189613d22565b6149e66020830188613b1c565b6149f3604083018761489d565b614a00606083018661489d565b614a0d6080830185613d22565b614a1a60a0830184613b1c565b979650505050505050565b600081519050614a3481613a0d565b92915050565b600080600060608486031215614a5357614a526139a0565b5b6000614a6186828701614a25565b9350506020614a7286828701614a25565b9250506040614a8386828701614a25565b915050925092509256fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220de886b003367b644ed8c8e42e78b1307e15b75f9beffbb7590cb66015049f6b964736f6c63430008090033

Deployed Bytecode

0x60806040526004361061023f5760003560e01c80637571336a1161012e578063c0246668116100ab578063dd62ed3e1161006f578063dd62ed3e146108bf578063e16830a8146108fc578063f2fde38b14610925578063f5b3c3bf1461094e578063f887ea401461098b57610246565b8063c0246668146107e9578063c16dd4a414610812578063c18bc1951461083b578063d212a69a14610864578063d3f6a1571461089657610246565b80639fccce32116100f25780639fccce3214610702578063a457c2d71461072d578063a9059cbb1461076a578063b8863115146107a7578063b9e418e7146107d257610246565b80637571336a1461061b5780638da5cb5b146106445780638ea5220f1461066f57806395d89b411461069a57806396880b17146106c557610246565b8063313ce567116101bc5780634fbee193116101805780634fbee19314610522578063555467a11461055f5780636ddd17131461059c57806370a08231146105c7578063715018a61461060457610246565b8063313ce5671461043d5780633265e846146104685780633950935114610491578063455a4396146104ce57806349bd5a5e146104f757610246565b80631a8145bb116102035780631a8145bb146103445780631c6e8a751461036f5780631cdd3be3146103985780631f3fed8f146103d557806323b872dd1461040057610246565b806306fdde031461024b578063095ea7b31461027657806310d5de53146102b357806311a582c3146102f057806318160ddd1461031957610246565b3661024657005b600080fd5b34801561025757600080fd5b506102606109b6565b60405161026d919061397e565b60405180910390f35b34801561028257600080fd5b5061029d60048036038101906102989190613a39565b610a48565b6040516102aa9190613a94565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d59190613aaf565b610a66565b6040516102e79190613a94565b60405180910390f35b3480156102fc57600080fd5b5061031760048036038101906103129190613adc565b610a86565b005b34801561032557600080fd5b5061032e610c57565b60405161033b9190613b2b565b60405180910390f35b34801561035057600080fd5b50610359610c61565b6040516103669190613b2b565b60405180910390f35b34801561037b57600080fd5b5061039660048036038101906103919190613b72565b610c67565b005b3480156103a457600080fd5b506103bf60048036038101906103ba9190613aaf565b610d1b565b6040516103cc9190613a94565b60405180910390f35b3480156103e157600080fd5b506103ea610d3b565b6040516103f79190613b2b565b60405180910390f35b34801561040c57600080fd5b5061042760048036038101906104229190613b9f565b610d41565b6040516104349190613a94565b60405180910390f35b34801561044957600080fd5b50610452610e1a565b60405161045f9190613c0e565b60405180910390f35b34801561047457600080fd5b5061048f600480360381019061048a9190613c55565b610e23565b005b34801561049d57600080fd5b506104b860048036038101906104b39190613a39565b6110fc565b6040516104c59190613a94565b60405180910390f35b3480156104da57600080fd5b506104f560048036038101906104f09190613ce2565b6111af565b005b34801561050357600080fd5b5061050c6112a1565b6040516105199190613d31565b60405180910390f35b34801561052e57600080fd5b5061054960048036038101906105449190613aaf565b6112c5565b6040516105569190613a94565b60405180910390f35b34801561056b57600080fd5b5061058660048036038101906105819190613d4c565b61131b565b6040516105939190613a94565b60405180910390f35b3480156105a857600080fd5b506105b16113c4565b6040516105be9190613a94565b60405180910390f35b3480156105d357600080fd5b506105ee60048036038101906105e99190613aaf565b6113d7565b6040516105fb9190613b2b565b60405180910390f35b34801561061057600080fd5b5061061961141f565b005b34801561062757600080fd5b50610642600480360381019061063d9190613ce2565b611577565b005b34801561065057600080fd5b50610659611669565b6040516106669190613d31565b60405180910390f35b34801561067b57600080fd5b50610684611693565b6040516106919190613d31565b60405180910390f35b3480156106a657600080fd5b506106af6116b9565b6040516106bc919061397e565b60405180910390f35b3480156106d157600080fd5b506106ec60048036038101906106e79190613aaf565b61174b565b6040516106f99190613a94565b60405180910390f35b34801561070e57600080fd5b5061071761176b565b6040516107249190613b2b565b60405180910390f35b34801561073957600080fd5b50610754600480360381019061074f9190613a39565b611771565b6040516107619190613a94565b60405180910390f35b34801561077657600080fd5b50610791600480360381019061078c9190613a39565b61183e565b60405161079e9190613a94565b60405180910390f35b3480156107b357600080fd5b506107bc61185c565b6040516107c99190613a94565b60405180910390f35b3480156107de57600080fd5b506107e761186f565b005b3480156107f557600080fd5b50610810600480360381019061080b9190613ce2565b611951565b005b34801561081e57600080fd5b5061083960048036038101906108349190613ce2565b611a43565b005b34801561084757600080fd5b50610862600480360381019061085d9190613d4c565b611bc4565b005b34801561087057600080fd5b50610879611cf9565b60405161088d989796959493929190613d79565b60405180910390f35b3480156108a257600080fd5b506108bd60048036038101906108b89190613df7565b611d97565b005b3480156108cb57600080fd5b506108e660048036038101906108e19190613df7565b611eb4565b6040516108f39190613b2b565b60405180910390f35b34801561090857600080fd5b50610923600480360381019061091e9190613ce2565b611f3b565b005b34801561093157600080fd5b5061094c60048036038101906109479190613aaf565b61202d565b005b34801561095a57600080fd5b5061097560048036038101906109709190613aaf565b6121f4565b6040516109829190613a94565b60405180910390f35b34801561099757600080fd5b506109a0612214565b6040516109ad9190613e96565b60405180910390f35b6060600380546109c590613ee0565b80601f01602080910402602001604051908101604052809291908181526020018280546109f190613ee0565b8015610a3e5780601f10610a1357610100808354040283529160200191610a3e565b820191906000526020600020905b815481529060010190602001808311610a2157829003601f168201915b5050505050905090565b6000610a5c610a55612296565b848461229e565b6001905092915050565b60136020528060005260406000206000915054906101000a900460ff1681565b610a8e612296565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1490613f5e565b60405180910390fd5b6064610b27610c57565b610b319190613fdc565b6103e883610b3d610c57565b610b47919061400d565b610b519190613fdc565b1015610b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b89906140d9565b60405180910390fd5b6064610b9c610c57565b610ba69190613fdc565b6103e882610bb2610c57565b610bbc919061400d565b610bc69190613fdc565b1015610c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfe9061416b565b60405180910390fd5b6103e882610c13610c57565b610c1d919061400d565b610c279190613fdc565b6008819055506103e881610c39610c57565b610c43919061400d565b610c4d9190613fdc565b6009819055505050565b6000600254905090565b600f5481565b610c6f612296565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf590613f5e565b60405180910390fd5b80600c60016101000a81548160ff02191690831515021790555050565b60166020528060005260406000206000915054906101000a900460ff1681565b600e5481565b6000610d4e848484612389565b610e0f84610d5a612296565b610e0a85604051806060016040528060288152602001614ad960289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610dc0612296565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f429092919063ffffffff16565b61229e565b600190509392505050565b60006012905090565b610e2b612296565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb190613f5e565b60405180910390fd5b85600d60000160016101000a81548160ff021916908360ff16021790555084600d60000160036101000a81548160ff021916908360ff16021790555083600d60000160026101000a81548160ff021916908360ff160217905550600d60000160029054906101000a900460ff16600d60000160039054906101000a900460ff16600d60000160019054906101000a900460ff16610f57919061418b565b610f61919061418b565b600d60000160006101000a81548160ff021916908360ff16021790555082600d60000160056101000a81548160ff021916908360ff16021790555081600d60000160076101000a81548160ff021916908360ff16021790555080600d60000160066101000a81548160ff021916908360ff160217905550600d60000160069054906101000a900460ff16600d60000160079054906101000a900460ff16600d60000160059054906101000a900460ff1661101b919061418b565b611025919061418b565b600d60000160046101000a81548160ff021916908360ff160217905550601e600d60000160009054906101000a900460ff1660ff16111561109b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110929061420e565b60405180910390fd5b601e600d60000160049054906101000a900460ff1660ff1611156110f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110eb9061420e565b60405180910390fd5b505050505050565b60006111a5611109612296565b846111a0856001600061111a612296565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461223890919063ffffffff16565b61229e565b6001905092915050565b6111b7612296565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611246576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123d90613f5e565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b7f00000000000000000000000019f96bdc38c929b53b7ba5331a9399da04a5f32f81565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000611325612296565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ab90613f5e565b60405180910390fd5b81600b8190555060019050919050565b600c60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611427612296565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ad90613f5e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61157f612296565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461160e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160590613f5e565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600480546116c890613ee0565b80601f01602080910402602001604051908101604052809291908181526020018280546116f490613ee0565b80156117415780601f1061171657610100808354040283529160200191611741565b820191906000526020600020905b81548152906001019060200180831161172457829003601f168201915b5050505050905090565b60146020528060005260406000206000915054906101000a900460ff1681565b60105481565b600061183461177e612296565b8461182f85604051806060016040528060258152602001614a8e60259139600160006117a8612296565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f429092919063ffffffff16565b61229e565b6001905092915050565b600061185261184b612296565b8484612389565b6001905092915050565b600c60029054906101000a900460ff1681565b611877612296565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611906576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fd90613f5e565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff021916908315150217905550600243611949919061422e565b601181905550565b611959612296565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119df90613f5e565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611a4b612296565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ada576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad190613f5e565b60405180910390fd5b7f00000000000000000000000019f96bdc38c929b53b7ba5331a9399da04a5f32f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b60906142d0565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611bcc612296565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5290613f5e565b60405180910390fd5b6064611c65610c57565b611c6f9190613fdc565b6103e882611c7b610c57565b611c85919061400d565b611c8f9190613fdc565b1015611cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc790614362565b60405180910390fd5b6103e881611cdc610c57565b611ce6919061400d565b611cf09190613fdc565b600a8190555050565b600d8060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900460ff16908060000160039054906101000a900460ff16908060000160049054906101000a900460ff16908060000160059054906101000a900460ff16908060000160069054906101000a900460ff16908060000160079054906101000a900460ff16905088565b611d9f612296565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2590613f5e565b60405180910390fd5b81600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611f43612296565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc990613f5e565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b612035612296565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bb90613f5e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612134576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212b906143f4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60156020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000808284612247919061422e565b90508381101561228c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228390614460565b60405180910390fd5b8091505092915050565b600033905090565b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161237c9190613b2b565b60405180910390a3505050565b60008114156123a35761239e83836000612fa6565b612f3d565b6123ab611669565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561241957506123e9611669565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124325750600c60029054906101000a900460ff16155b1561289b57600c60009054906101000a900460ff1661252c57601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124ec5750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61252b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612522906144cc565b60405180910390fd5b5b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125cf5750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561261e57600854811115612619576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261090614538565b60405180910390fd5b61270d565b601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126c15750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561270c5760095481111561270b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612702906145a4565b60405180910390fd5b5b5b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166127b757600a5461276a836113d7565b82612775919061422e565b11156127b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ad90614610565b60405180910390fd5b5b601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561285b5750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61289a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128919061467c565b60405180910390fd5b5b60006128a6306113d7565b90506000600b5482101590508080156128cb5750600c60019054906101000a900460ff165b80156128e45750600c60029054906101000a900460ff16155b80156129395750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b801561298f5750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156129e55750601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a29576001600c60026101000a81548160ff021916908315150217905550612a0d613150565b6000600c60026101000a81548160ff0219169083151502179055505b6000600c60029054906101000a900460ff16159050601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612adf5750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612ae957600090505b8015612f2e576000601154431015612b8b57612b226064612b1460638861343e90919063ffffffff16565b6134b990919063ffffffff16565b90506063605e82612b33919061400d565b612b3d9190613fdc565b600e6000828254612b4e919061422e565b925050819055506063600582612b64919061400d565b612b6e9190613fdc565b60106000828254612b7f919061422e565b92505081905550612f09565b601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612bf957506000600d60000160049054906101000a900460ff1660ff16115b15612d4b57612c396064612c2b600d60000160049054906101000a900460ff1660ff168861343e90919063ffffffff16565b6134b990919063ffffffff16565b9050600d60000160049054906101000a900460ff1660ff16600d60000160079054906101000a900460ff1660ff1682612c72919061400d565b612c7c9190613fdc565b600f6000828254612c8d919061422e565b92505081905550600d60000160049054906101000a900460ff1660ff16600d60000160059054906101000a900460ff1660ff1682612ccb919061400d565b612cd59190613fdc565b600e6000828254612ce6919061422e565b92505081905550600d60000160049054906101000a900460ff1660ff16600d60000160069054906101000a900460ff1660ff1682612d24919061400d565b612d2e9190613fdc565b60106000828254612d3f919061422e565b92505081905550612f08565b601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612db957506000600d60000160009054906101000a900460ff1660ff16115b15612f0757612df96064612deb600d60000160009054906101000a900460ff1660ff168861343e90919063ffffffff16565b6134b990919063ffffffff16565b9050600d60000160009054906101000a900460ff1660ff16600d60000160039054906101000a900460ff1660ff1682612e32919061400d565b612e3c9190613fdc565b600f6000828254612e4d919061422e565b92505081905550600d60000160009054906101000a900460ff1660ff16600d60000160019054906101000a900460ff1660ff1682612e8b919061400d565b612e959190613fdc565b600e6000828254612ea6919061422e565b92505081905550600d60000160009054906101000a900460ff1660ff16600d60000160029054906101000a900460ff1660ff1682612ee4919061400d565b612eee9190613fdc565b60106000828254612eff919061422e565b925050819055505b5b5b6000811115612f1e57612f1d873083612fa6565b5b8085612f2a919061469c565b9450505b612f39868686612fa6565b5050505b505050565b6000838311158290612f8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f81919061397e565b60405180910390fd5b5060008385612f99919061469c565b9050809150509392505050565b61301181604051806060016040528060268152602001614ab3602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f429092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506130a4816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461223890919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516131439190613b2b565b60405180910390a3505050565b600061315b306113d7565b90506000601054600e54600f54613172919061422e565b61317c919061422e565b905060008083148061318e5750600082145b1561319b5750505061343c565b6014600b546131aa919061400d565b8311156131c3576014600b546131c0919061400d565b92505b6000600283600f54866131d6919061400d565b6131e09190613fdc565b6131ea9190613fdc565b90506000613201828661350390919063ffffffff16565b905060004790506132118261354d565b6000613226824761350390919063ffffffff16565b9050600061325187613243600e548561343e90919063ffffffff16565b6134b990919063ffffffff16565b9050600061327c8861326e6010548661343e90919063ffffffff16565b6134b990919063ffffffff16565b90506000818361328c919061422e565b84613297919061469c565b90506000600f819055506000600e8190555060006010819055506000871180156132c15750600081115b1561330a576132d08782613799565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f838148686826040516133019291906146d0565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16834761334f919061469c565b60405161335b9061472a565b60006040518083038185875af1925050503d8060008114613398576040519150601f19603f3d011682016040523d82523d6000602084013e61339d565b606091505b505080985050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516133e99061472a565b60006040518083038185875af1925050503d8060008114613426576040519150601f19603f3d011682016040523d82523d6000602084013e61342b565b606091505b505080985050505050505050505050505b565b60008083141561345157600090506134b3565b6000828461345f919061400d565b905082848261346e9190613fdc565b146134ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134a5906147b1565b60405180910390fd5b809150505b92915050565b60006134fb83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613882565b905092915050565b600061354583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612f42565b905092915050565b6000600267ffffffffffffffff81111561356a576135696147d1565b5b6040519080825280602002602001820160405280156135985781602001602082028036833780820191505090505b50905030816000815181106135b0576135af614800565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561365057600080fd5b505afa158015613664573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136889190614844565b8160018151811061369c5761369b614800565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613701307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461229e565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161376395949392919061496a565b600060405180830381600087803b15801561377d57600080fd5b505af1158015613791573d6000803e3d6000fd5b505050505050565b6137c4307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461229e565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b8152600401613829969594939291906149c4565b6060604051808303818588803b15801561384257600080fd5b505af1158015613856573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061387b9190614a3a565b5050505050565b600080831182906138c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138c0919061397e565b60405180910390fd5b50600083856138d89190613fdc565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561391f578082015181840152602081019050613904565b8381111561392e576000848401525b50505050565b6000601f19601f8301169050919050565b6000613950826138e5565b61395a81856138f0565b935061396a818560208601613901565b61397381613934565b840191505092915050565b600060208201905081810360008301526139988184613945565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006139d0826139a5565b9050919050565b6139e0816139c5565b81146139eb57600080fd5b50565b6000813590506139fd816139d7565b92915050565b6000819050919050565b613a1681613a03565b8114613a2157600080fd5b50565b600081359050613a3381613a0d565b92915050565b60008060408385031215613a5057613a4f6139a0565b5b6000613a5e858286016139ee565b9250506020613a6f85828601613a24565b9150509250929050565b60008115159050919050565b613a8e81613a79565b82525050565b6000602082019050613aa96000830184613a85565b92915050565b600060208284031215613ac557613ac46139a0565b5b6000613ad3848285016139ee565b91505092915050565b60008060408385031215613af357613af26139a0565b5b6000613b0185828601613a24565b9250506020613b1285828601613a24565b9150509250929050565b613b2581613a03565b82525050565b6000602082019050613b406000830184613b1c565b92915050565b613b4f81613a79565b8114613b5a57600080fd5b50565b600081359050613b6c81613b46565b92915050565b600060208284031215613b8857613b876139a0565b5b6000613b9684828501613b5d565b91505092915050565b600080600060608486031215613bb857613bb76139a0565b5b6000613bc6868287016139ee565b9350506020613bd7868287016139ee565b9250506040613be886828701613a24565b9150509250925092565b600060ff82169050919050565b613c0881613bf2565b82525050565b6000602082019050613c236000830184613bff565b92915050565b613c3281613bf2565b8114613c3d57600080fd5b50565b600081359050613c4f81613c29565b92915050565b60008060008060008060c08789031215613c7257613c716139a0565b5b6000613c8089828a01613c40565b9650506020613c9189828a01613c40565b9550506040613ca289828a01613c40565b9450506060613cb389828a01613c40565b9350506080613cc489828a01613c40565b92505060a0613cd589828a01613c40565b9150509295509295509295565b60008060408385031215613cf957613cf86139a0565b5b6000613d07858286016139ee565b9250506020613d1885828601613b5d565b9150509250929050565b613d2b816139c5565b82525050565b6000602082019050613d466000830184613d22565b92915050565b600060208284031215613d6257613d616139a0565b5b6000613d7084828501613a24565b91505092915050565b600061010082019050613d8f600083018b613bff565b613d9c602083018a613bff565b613da96040830189613bff565b613db66060830188613bff565b613dc36080830187613bff565b613dd060a0830186613bff565b613ddd60c0830185613bff565b613dea60e0830184613bff565b9998505050505050505050565b60008060408385031215613e0e57613e0d6139a0565b5b6000613e1c858286016139ee565b9250506020613e2d858286016139ee565b9150509250929050565b6000819050919050565b6000613e5c613e57613e52846139a5565b613e37565b6139a5565b9050919050565b6000613e6e82613e41565b9050919050565b6000613e8082613e63565b9050919050565b613e9081613e75565b82525050565b6000602082019050613eab6000830184613e87565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613ef857607f821691505b60208210811415613f0c57613f0b613eb1565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613f486020836138f0565b9150613f5382613f12565b602082019050919050565b60006020820190508181036000830152613f7781613f3b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613fe782613a03565b9150613ff283613a03565b92508261400257614001613f7e565b5b828204905092915050565b600061401882613a03565b915061402383613a03565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561405c5761405b613fad565b5b828202905092915050565b7f6d6178427579416d6f756e74206d75737420626520686967686572207468616e60008201527f2031250000000000000000000000000000000000000000000000000000000000602082015250565b60006140c36023836138f0565b91506140ce82614067565b604082019050919050565b600060208201905081810360008301526140f2816140b6565b9050919050565b7f6d617853656c6c416d6f756e74206d757374206265206869676865722074686160008201527f6e20312500000000000000000000000000000000000000000000000000000000602082015250565b60006141556024836138f0565b9150614160826140f9565b604082019050919050565b6000602082019050818103600083015261418481614148565b9050919050565b600061419682613bf2565b91506141a183613bf2565b92508260ff038211156141b7576141b6613fad565b5b828201905092915050565b7f4d757374206b656570206665657320617420333025206f72206c657373000000600082015250565b60006141f8601d836138f0565b9150614203826141c2565b602082019050919050565b60006020820190508181036000830152614227816141eb565b9050919050565b600061423982613a03565b915061424483613a03565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561427957614278613fad565b5b828201905092915050565b7f4d757374206b65657020756e6973776170563250616972000000000000000000600082015250565b60006142ba6017836138f0565b91506142c582614284565b602082019050919050565b600060208201905081810360008301526142e9816142ad565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b600061434c6022836138f0565b9150614357826142f0565b604082019050919050565b6000602082019050818103600083015261437b8161433f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006143de6026836138f0565b91506143e982614382565b604082019050919050565b6000602082019050818103600083015261440d816143d1565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061444a601b836138f0565b915061445582614414565b602082019050919050565b600060208201905081810360008301526144798161443d565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006144b66016836138f0565b91506144c182614480565b602082019050919050565b600060208201905081810360008301526144e5816144a9565b9050919050565b7f627579207472616e73666572206f766572206d617820616d6f756e7400000000600082015250565b6000614522601c836138f0565b915061452d826144ec565b602082019050919050565b6000602082019050818103600083015261455181614515565b9050919050565b7f53656c6c207472616e73666572206f766572206d617820616d6f756e74000000600082015250565b600061458e601d836138f0565b915061459982614558565b602082019050919050565b600060208201905081810360008301526145bd81614581565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006145fa6013836138f0565b9150614605826145c4565b602082019050919050565b60006020820190508181036000830152614629816145ed565b9050919050565b7f426c61636b6c6973746564206164647265737300000000000000000000000000600082015250565b60006146666013836138f0565b915061467182614630565b602082019050919050565b6000602082019050818103600083015261469581614659565b9050919050565b60006146a782613a03565b91506146b283613a03565b9250828210156146c5576146c4613fad565b5b828203905092915050565b60006040820190506146e56000830185613b1c565b6146f26020830184613b1c565b9392505050565b600081905092915050565b50565b60006147146000836146f9565b915061471f82614704565b600082019050919050565b600061473582614707565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061479b6021836138f0565b91506147a68261473f565b604082019050919050565b600060208201905081810360008301526147ca8161478e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061483e816139d7565b92915050565b60006020828403121561485a576148596139a0565b5b60006148688482850161482f565b91505092915050565b6000819050919050565b600061489661489161488c84614871565b613e37565b613a03565b9050919050565b6148a68161487b565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6148e1816139c5565b82525050565b60006148f383836148d8565b60208301905092915050565b6000602082019050919050565b6000614917826148ac565b61492181856148b7565b935061492c836148c8565b8060005b8381101561495d57815161494488826148e7565b975061494f836148ff565b925050600181019050614930565b5085935050505092915050565b600060a08201905061497f6000830188613b1c565b61498c602083018761489d565b818103604083015261499e818661490c565b90506149ad6060830185613d22565b6149ba6080830184613b1c565b9695505050505050565b600060c0820190506149d96000830189613d22565b6149e66020830188613b1c565b6149f3604083018761489d565b614a00606083018661489d565b614a0d6080830185613d22565b614a1a60a0830184613b1c565b979650505050505050565b600081519050614a3481613a0d565b92915050565b600080600060608486031215614a5357614a526139a0565b5b6000614a6186828701614a25565b9350506020614a7286828701614a25565b9250506040614a8386828701614a25565b915050925092509256fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220de886b003367b644ed8c8e42e78b1307e15b75f9beffbb7590cb66015049f6b964736f6c63430008090033

Deployed Bytecode Sourcemap

20785:13128:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4360:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6520:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22153:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25211:458;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5477:107;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21937:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26046:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22488:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21897:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7170:354;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5320:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26288:827;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7933:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26157:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20908:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27935:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25043:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21280:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5647:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13457:148;;;;;;;;;;;;;:::i;:::-;;27417:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12816:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20975:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4578:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22223:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21977:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8653:268;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5986:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21318:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24826:143;;;;;;;;;;;;;:::i;:::-;;27127:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27571:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25679:271;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21625:251;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;27758:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6223:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27265:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13760:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22439:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20859;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4360:99;4413:13;4446:5;4439:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4360:99;:::o;6520:168::-;6602:4;6619:39;6628:12;:10;:12::i;:::-;6642:7;6651:6;6619:8;:39::i;:::-;6676:4;6669:11;;6520:168;;;;:::o;22153:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;25211:458::-;13037:12;:10;:12::i;:::-;13027:22;;:6;;;;;;;;;;;:22;;;13019:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25373:3:::1;25357:13;:11;:13::i;:::-;:19;;;;:::i;:::-;25347:4;25334:9;25318:13;:11;:13::i;:::-;:25;;;;:::i;:::-;25317:34;;;;:::i;:::-;25316:61;;25308:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;25494:3;25478:13;:11;:13::i;:::-;:19;;;;:::i;:::-;25468:4;25454:10;25438:13;:11;:13::i;:::-;:26;;;;:::i;:::-;25437:35;;;;:::i;:::-;25436:62;;25428:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25595:4;25582:9;25566:13;:11;:13::i;:::-;:25;;;;:::i;:::-;25565:34;;;;:::i;:::-;25550:12;:49;;;;25657:4;25643:10;25627:13;:11;:13::i;:::-;:26;;;;:::i;:::-;25626:35;;;;:::i;:::-;25610:13;:51;;;;25211:458:::0;;:::o;5477:107::-;5537:7;5564:12;;5557:19;;5477:107;:::o;21937:33::-;;;;:::o;26046:101::-;13037:12;:10;:12::i;:::-;13027:22;;:6;;;;;;;;;;;:22;;;13019:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26132:7:::1;26118:11;;:21;;;;;;;;;;;;;;;;;;26046:101:::0;:::o;22488:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;21897:33::-;;;;:::o;7170:354::-;7309:4;7326:36;7336:6;7344:9;7355:6;7326:9;:36::i;:::-;7373:121;7382:6;7390:12;:10;:12::i;:::-;7404:89;7442:6;7404:89;;;;;;;;;;;;;;;;;:11;:19;7416:6;7404:19;;;;;;;;;;;;;;;:33;7424:12;:10;:12::i;:::-;7404:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;7373:8;:121::i;:::-;7512:4;7505:11;;7170:354;;;;;:::o;5320:92::-;5377:5;5402:2;5395:9;;5320:92;:::o;26288:827::-;13037:12;:10;:12::i;:::-;13027:22;;:6;;;;;;;;;;;:22;;;13019:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26493:16:::1;26469:5;:21;;;:40;;;;;;;;;;;;;;;;;;26544:16;26520:5;:21;;;:40;;;;;;;;;;;;;;;;;;26589:10;26571:5;:15;;;:28;;;;;;;;;;;;;;;;;;26679:5;:15;;;;;;;;;;;;26655:5;:21;;;;;;;;;;;;26631:5;:21;;;;;;;;;;;;:45;;;;:::i;:::-;:63;;;;:::i;:::-;26610:5;:18;;;:84;;;;;;;;;;;;;;;;;;26732:17;26707:5;:22;;;:42;;;;;;;;;;;;;;;;;;26785:17;26760:5;:22;;;:42;;;;;;;;;;;;;;;;;;26832:11;26813:5;:16;;;:30;;;;;;;;;;;;;;;;;;26926:5;:16;;;;;;;;;;;;26901:5;:22;;;;;;;;;;;;26876:5;:22;;;;;;;;;;;;:47;;;;:::i;:::-;:66;;;;:::i;:::-;26854:5;:19;;;:88;;;;;;;;;;;;;;;;;;26983:2;26961:5;:18;;;;;;;;;;;;:24;;;;26953:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;27064:2;27041:5;:19;;;;;;;;;;;;:25;;;;27033:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26288:827:::0;;;;;;:::o;7933:217::-;8020:4;8037:83;8046:12;:10;:12::i;:::-;8060:7;8069:50;8108:10;8069:11;:25;8081:12;:10;:12::i;:::-;8069:25;;;;;;;;;;;;;;;:34;8095:7;8069:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;8037:8;:83::i;:::-;8138:4;8131:11;;7933:217;;;;:::o;26157:123::-;13037:12;:10;:12::i;:::-;13027:22;;:6;;;;;;;;;;;:22;;;13019:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26267:5:::1;26241:14;:23;26256:7;26241:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;26157:123:::0;;:::o;20908:38::-;;;:::o;27935:125::-;28000:4;28024:19;:28;28044:7;28024:28;;;;;;;;;;;;;;;;;;;;;;;;;28017:35;;27935:125;;;:::o;25043:158::-;25124:4;13037:12;:10;:12::i;:::-;13027:22;;:6;;;;;;;;;;;:22;;;13019:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25162:9:::1;25140:19;:31;;;;25189:4;25182:11;;25043:158:::0;;;:::o;21280:31::-;;;;;;;;;;;;;:::o;5647:126::-;5720:7;5747:9;:18;5757:7;5747:18;;;;;;;;;;;;;;;;5740:25;;5647:126;;;:::o;13457:148::-;13037:12;:10;:12::i;:::-;13027:22;;:6;;;;;;;;;;;:22;;;13019:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13564:1:::1;13527:40;;13548:6;;;;;;;;;;;13527:40;;;;;;;;;;;;13595:1;13578:6;;:19;;;;;;;;;;;;;;;;;;13457:148::o:0;27417:144::-;13037:12;:10;:12::i;:::-;13027:22;;:6;;;;;;;;;;;:22;;;13019:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27549:4:::1;27507:31;:39;27539:6;27507:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;27417:144:::0;;:::o;12816:78::-;12853:7;12880:6;;;;;;;;;;;12873:13;;12816:78;:::o;20975:25::-;;;;;;;;;;;;;:::o;4578:103::-;4633:13;4666:7;4659:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4578:103;:::o;22223:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;21977:27::-;;;;:::o;8653:268::-;8745:4;8762:129;8771:12;:10;:12::i;:::-;8785:7;8794:96;8833:15;8794:96;;;;;;;;;;;;;;;;;:11;:25;8806:12;:10;:12::i;:::-;8794:25;;;;;;;;;;;;;;;:34;8820:7;8794:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;8762:8;:129::i;:::-;8909:4;8902:11;;8653:268;;;;:::o;5986:174::-;6071:4;6088:42;6098:12;:10;:12::i;:::-;6112:9;6123:6;6088:9;:42::i;:::-;6148:4;6141:11;;5986:174;;;;:::o;21318:22::-;;;;;;;;;;;;;:::o;24826:143::-;13037:12;:10;:12::i;:::-;13027:22;;:6;;;;;;;;;;;:22;;;13019:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24891:4:::1;24879:9;;:16;;;;;;;;;;;;;;;;;;24920:4;24906:11;;:18;;;;;;;;;;;;;;;;;;24960:1;24945:12;:16;;;;:::i;:::-;24935:7;:26;;;;24826:143::o:0;27127:132::-;13037:12;:10;:12::i;:::-;13027:22;;:6;;;;;;;;;;;:22;;;13019:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27243:8:::1;27212:19;:28;27232:7;27212:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;27127:132:::0;;:::o;27571:177::-;13037:12;:10;:12::i;:::-;13027:22;;:6;;;;;;;;;;;:22;;;13019:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27664:13:::1;27656:21;;:4;:21;;;;27648:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27735:5;27716:10;:16;27727:4;27716:16;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;27571:177:::0;;:::o;25679:271::-;13037:12;:10;:12::i;:::-;13027:22;;:6;;;;;;;;;;;:22;;;13019:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25832:3:::1;25816:13;:11;:13::i;:::-;:19;;;;:::i;:::-;25806:4;25789:13;25773;:11;:13::i;:::-;:29;;;;:::i;:::-;25772:38;;;;:::i;:::-;25771:65;;25763:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;25938:4;25921:13;25905;:11;:13::i;:::-;:29;;;;:::i;:::-;25904:38;;;;:::i;:::-;25886:15;:56;;;;25679:271:::0;:::o;21625:251::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27758:169::-;13037:12;:10;:12::i;:::-;13027:22;;:6;;;;;;;;;;;:22;;;13019:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27870:16:::1;27852:15;;:34;;;;;;;;;;;;;;;;;;27909:10;27897:9;;:22;;;;;;;;;;;;;;;;;;27758:169:::0;;:::o;6223:150::-;6311:7;6338:11;:18;6350:5;6338:18;;;;;;;;;;;;;;;:27;6357:7;6338:27;;;;;;;;;;;;;;;;6331:34;;6223:150;;;;:::o;27265:146::-;13037:12;:10;:12::i;:::-;13027:22;;:6;;;;;;;;;;;:22;;;13019:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27395:8:::1;27357:26;:35;27384:7;27357:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;27265:146:::0;;:::o;13760:244::-;13037:12;:10;:12::i;:::-;13027:22;;:6;;;;;;;;;;;:22;;;13019:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13869:1:::1;13849:22;;:8;:22;;;;13841:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;13959:8;13930:38;;13951:6;;;;;;;;;;;13930:38;;;;;;;;;;;;13988:8;13979:6;;:17;;;;;;;;;;;;;;;;;;13760:244:::0;:::o;22439:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;20859:::-;;;:::o;11081:180::-;11138:7;11158:9;11174:1;11170;:5;;;;:::i;:::-;11158:17;;11199:1;11194;:6;;11186:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;11252:1;11245:8;;;11081:180;;;;:::o;3430:97::-;3482:7;3509:10;3502:17;;3430:97;:::o;10816:220::-;10974:6;10944:11;:18;10956:5;10944:18;;;;;;;;;;;;;;;:27;10963:7;10944:27;;;;;;;;;;;;;;;:36;;;;11012:7;10996:32;;11005:5;10996:32;;;11021:6;10996:32;;;;;;:::i;:::-;;;;;;;;10816:220;;;:::o;28068:3347::-;28235:1;28225:6;:11;28221:102;;;28253:37;28269:6;28277:9;28288:1;28253:15;:37::i;:::-;28305:7;;28221:102;28363:7;:5;:7::i;:::-;28353:17;;:6;:17;;;;:54;;;;;28400:7;:5;:7::i;:::-;28387:20;;:9;:20;;;;28353:54;:82;;;;;28425:10;;;;;;;;;;;28424:11;28353:82;28335:935;;;28469:9;;;;;;;;;;;28464:147;;28507:19;:27;28527:6;28507:27;;;;;;;;;;;;;;;;;;;;;;;;;:61;;;;28538:19;:30;28558:9;28538:30;;;;;;;;;;;;;;;;;;;;;;;;;28507:61;28499:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;28464:147;28629:10;:18;28640:6;28629:18;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;;28652:31;:42;28684:9;28652:42;;;;;;;;;;;;;;;;;;;;;;;;;28651:43;28629:65;28625:360;;;28733:12;;28723:6;:22;;28715:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;28625:360;;;28818:10;:21;28829:9;28818:21;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;;28844:31;:39;28876:6;28844:39;;;;;;;;;;;;;;;;;;;;;;;;;28843:40;28818:65;28814:171;;;28922:13;;28912:6;:23;;28904:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;28814:171;28625:360;29006:26;:37;29033:9;29006:37;;;;;;;;;;;;;;;;;;;;;;;;;29001:159;;29105:15;;29081:20;29091:9;29081;:20::i;:::-;29072:6;:29;;;;:::i;:::-;:48;;29064:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;29001:159;29182:14;:22;29197:6;29182:22;;;;;;;;;;;;;;;;;;;;;;;;;29181:23;:53;;;;;29209:14;:25;29224:9;29209:25;;;;;;;;;;;;;;;;;;;;;;;;;29208:26;29181:53;29173:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;28335:935;29296:28;29327:24;29345:4;29327:9;:24::i;:::-;29296:55;;29365:12;29404:19;;29380:20;:43;;29365:58;;29454:7;:35;;;;;29478:11;;;;;;;;;;;29454:35;:63;;;;;29507:10;;;;;;;;;;;29506:11;29454:63;:101;;;;;29534:10;:21;29545:9;29534:21;;;;;;;;;;;;;;;;;;;;;;;;;29454:101;:146;;;;;29573:19;:27;29593:6;29573:27;;;;;;;;;;;;;;;;;;;;;;;;;29572:28;29454:146;:194;;;;;29618:19;:30;29638:9;29618:30;;;;;;;;;;;;;;;;;;;;;;;;;29617:31;29454:194;29436:326;;;29688:4;29675:10;;:17;;;;;;;;;;;;;;;;;;29707:10;:8;:10::i;:::-;29745:5;29732:10;;:18;;;;;;;;;;;;;;;;;;29436:326;29775:12;29791:10;;;;;;;;;;;29790:11;29775:26;;29903:19;:27;29923:6;29903:27;;;;;;;;;;;;;;;;;;;;;;;;;:61;;;;29934:19;:30;29954:9;29934:30;;;;;;;;;;;;;;;;;;;;;;;;;29903:61;29899:109;;;29991:5;29981:15;;29899:109;30109:7;30105:1248;;;30133:12;30182:7;;30167:12;:22;30164:1036;;;30217:23;30236:3;30217:14;30228:2;30217:6;:10;;:14;;;;:::i;:::-;:18;;:23;;;;:::i;:::-;30210:30;;30295:2;30289;30282:4;:9;;;;:::i;:::-;30281:16;;;;:::i;:::-;30259:18;;:38;;;;;;;:::i;:::-;;;;;;;;30345:2;30340:1;30333:4;:8;;;;:::i;:::-;30332:15;;;;:::i;:::-;30316:12;;:31;;;;;;;:::i;:::-;;;;;;;;30164:1036;;;30373:10;:21;30384:9;30373:21;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;;30420:1;30398:5;:19;;;;;;;;;;;;:23;;;30373:48;30369:831;;;30449:40;30485:3;30449:31;30460:5;:19;;;;;;;;;;;;30449:31;;:6;:10;;:31;;;;:::i;:::-;:35;;:40;;;;:::i;:::-;30442:47;;30562:5;:19;;;;;;;;;;;;30530:51;;30537:5;:22;;;;;;;;;;;;30530:29;;:4;:29;;;;:::i;:::-;:51;;;;:::i;:::-;30508:18;;:73;;;;;;;:::i;:::-;;;;;;;;30654:5;:19;;;;;;;;;;;;30622:51;;30629:5;:22;;;;;;;;;;;;30622:29;;:4;:29;;;;:::i;:::-;:51;;;;:::i;:::-;30600:18;;:73;;;;;;;:::i;:::-;;;;;;;;30734:5;:19;;;;;;;;;;;;30708:45;;30715:5;:16;;;;;;;;;;;;30708:23;;:4;:23;;;;:::i;:::-;:45;;;;:::i;:::-;30692:12;;:61;;;;;;;:::i;:::-;;;;;;;;30369:831;;;30815:10;:18;30826:6;30815:18;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;;;30858:1;30837:5;:18;;;;;;;;;;;;:22;;;30815:44;30811:389;;;30887:39;30922:3;30887:30;30898:5;:18;;;;;;;;;;;;30887:30;;:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;30880:46;;30998:5;:18;;;;;;;;;;;;30967:49;;30974:5;:21;;;;;;;;;;;;30967:28;;:4;:28;;;;:::i;:::-;:49;;;;:::i;:::-;30945:18;;:71;;;;;;;:::i;:::-;;;;;;;;31088:5;:18;;;;;;;;;;;;31057:49;;31064:5;:21;;;;;;;;;;;;31057:28;;:4;:28;;;;:::i;:::-;:49;;;;:::i;:::-;31035:18;;:71;;;;;;;:::i;:::-;;;;;;;;31166:5;:18;;;;;;;;;;;;31141:43;;31148:5;:15;;;;;;;;;;;;31141:22;;:4;:22;;;;:::i;:::-;:43;;;;:::i;:::-;31125:12;;:59;;;;;;;:::i;:::-;;;;;;;;30811:389;30369:831;30164:1036;31227:1;31220:4;:8;31216:93;;;31249:44;31265:6;31281:4;31288;31249:15;:44::i;:::-;31216:93;31335:4;31325:14;;;;;:::i;:::-;;;30118:1235;30105:1248;31365:42;31381:6;31389:9;31400:6;31365:15;:42::i;:::-;28200:3215;;;28068:3347;;;;:::o;11422:191::-;11507:7;11540:1;11535;:6;;11543:12;11527:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;11567:9;11583:1;11579;:5;;;;:::i;:::-;11567:17;;11604:1;11597:8;;;11422:191;;;;;:::o;9411:358::-;9573:71;9595:6;9573:71;;;;;;;;;;;;;;;;;:9;:17;9583:6;9573:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;9553:9;:17;9563:6;9553:17;;;;;;;;;;;;;;;:91;;;;9678:32;9703:6;9678:9;:20;9688:9;9678:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;9655:9;:20;9665:9;9655:20;;;;;;;;;;;;;;;:55;;;;9743:9;9726:35;;9735:6;9726:35;;;9754:6;9726:35;;;;;;:::i;:::-;;;;;;;;9411:358;;;:::o;32343:1565::-;32382:28;32413:24;32431:4;32413:9;:24::i;:::-;32382:55;;32448:14;32507:12;;32486:18;;32465;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;32448:71;;32530:12;32583:1;32559:20;:25;:40;;;;32598:1;32588:6;:11;32559:40;32555:57;;;32603:7;;;;;32555:57;32673:2;32651:19;;:24;;;;:::i;:::-;32628:20;:47;32624:127;;;32737:2;32715:19;;:24;;;;:::i;:::-;32692:47;;32624:127;32812:23;32891:1;32882:6;32861:18;;32838:20;:41;;;;:::i;:::-;:50;;;;:::i;:::-;:54;;;;:::i;:::-;32812:80;;32903:26;32932:41;32957:15;32932:20;:24;;:41;;;;:::i;:::-;32903:70;;32987:25;33015:21;32987:49;;33049:36;33066:18;33049:16;:36::i;:::-;33100:18;33121:44;33147:17;33121:21;:25;;:44;;;;:::i;:::-;33100:65;;33179:23;33205:46;33244:6;33205:34;33220:18;;33205:10;:14;;:34;;;;:::i;:::-;:38;;:46;;;;:::i;:::-;33179:72;;33262:17;33282:40;33315:6;33282:28;33297:12;;33282:10;:14;;:28;;;;:::i;:::-;:32;;:40;;;;:::i;:::-;33262:60;;33333:23;33391:9;33373:15;:27;;;;:::i;:::-;33359:10;:42;;;;:::i;:::-;33333:68;;33437:1;33416:18;:22;;;;33470:1;33449:18;:22;;;;33497:1;33482:12;:16;;;;33535:1;33517:15;:19;:42;;;;;33558:1;33540:15;:19;33517:42;33513:192;;;33576:46;33589:15;33606;33576:12;:46::i;:::-;33642:51;33657:18;33677:15;33642:51;;;;;;;:::i;:::-;;;;;;;;33513:192;33738:9;;;;;;;;;;;33730:23;;33787:15;33763:21;:39;;;;:::i;:::-;33730:80;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33717:93;;;;;33842:15;;;;;;;;;;;33834:29;;33872:21;33834:66;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33821:79;;;;;32371:1537;;;;;;;;;;32343:1565;:::o;11621:256::-;11678:7;11713:1;11708;:6;11704:47;;;11738:1;11731:8;;;;11704:47;11764:9;11780:1;11776;:5;;;;:::i;:::-;11764:17;;11809:1;11804;11800;:5;;;;:::i;:::-;:10;11792:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;11868:1;11861:8;;;11621:256;;;;;:::o;11888:131::-;11945:7;11972:39;11976:1;11979;11972:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;11965:46;;11888:131;;;;:::o;11274:135::-;11331:7;11358:43;11362:1;11365;11358:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;11351:50;;11274:135;;;;:::o;31423:554::-;31547:21;31585:1;31571:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31547:40;;31616:4;31598;31603:1;31598:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;31642:6;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31632:4;31637:1;31632:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;31668:49;31685:4;31700:6;31709:7;31668:8;:49::i;:::-;31756:6;:57;;;31828:7;31850:1;31894:4;31921;31941:15;31756:211;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31474:503;31423:554;:::o;31985:350::-;32129:49;32146:4;32161:6;32170:7;32129:8;:49::i;:::-;32221:6;:22;;;32252:9;32273:4;32280:7;32289:1;32292;32304:4;32311:15;32221:106;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31985:350;;:::o;12031:277::-;12116:7;12148:1;12144;:5;12151:12;12136:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;12175:9;12191:1;12187;:5;;;;:::i;:::-;12175:17;;12299:1;12292:8;;;12031:277;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:474::-;3897:6;3905;3954:2;3942:9;3933:7;3929:23;3925:32;3922:119;;;3960:79;;:::i;:::-;3922:119;4080:1;4105:53;4150:7;4141:6;4130:9;4126:22;4105:53;:::i;:::-;4095:63;;4051:117;4207:2;4233:53;4278:7;4269:6;4258:9;4254:22;4233:53;:::i;:::-;4223:63;;4178:118;3829:474;;;;;:::o;4309:118::-;4396:24;4414:5;4396:24;:::i;:::-;4391:3;4384:37;4309:118;;:::o;4433:222::-;4526:4;4564:2;4553:9;4549:18;4541:26;;4577:71;4645:1;4634:9;4630:17;4621:6;4577:71;:::i;:::-;4433:222;;;;:::o;4661:116::-;4731:21;4746:5;4731:21;:::i;:::-;4724:5;4721:32;4711:60;;4767:1;4764;4757:12;4711:60;4661:116;:::o;4783:133::-;4826:5;4864:6;4851:20;4842:29;;4880:30;4904:5;4880:30;:::i;:::-;4783:133;;;;:::o;4922:323::-;4978:6;5027:2;5015:9;5006:7;5002:23;4998:32;4995:119;;;5033:79;;:::i;:::-;4995:119;5153:1;5178:50;5220:7;5211:6;5200:9;5196:22;5178:50;:::i;:::-;5168:60;;5124:114;4922:323;;;;:::o;5251:619::-;5328:6;5336;5344;5393:2;5381:9;5372:7;5368:23;5364:32;5361:119;;;5399:79;;:::i;:::-;5361:119;5519:1;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5490:117;5646:2;5672:53;5717:7;5708:6;5697:9;5693:22;5672:53;:::i;:::-;5662:63;;5617:118;5774:2;5800:53;5845:7;5836:6;5825:9;5821:22;5800:53;:::i;:::-;5790:63;;5745:118;5251:619;;;;;:::o;5876:86::-;5911:7;5951:4;5944:5;5940:16;5929:27;;5876:86;;;:::o;5968:112::-;6051:22;6067:5;6051:22;:::i;:::-;6046:3;6039:35;5968:112;;:::o;6086:214::-;6175:4;6213:2;6202:9;6198:18;6190:26;;6226:67;6290:1;6279:9;6275:17;6266:6;6226:67;:::i;:::-;6086:214;;;;:::o;6306:118::-;6377:22;6393:5;6377:22;:::i;:::-;6370:5;6367:33;6357:61;;6414:1;6411;6404:12;6357:61;6306:118;:::o;6430:135::-;6474:5;6512:6;6499:20;6490:29;;6528:31;6553:5;6528:31;:::i;:::-;6430:135;;;;:::o;6571:1033::-;6663:6;6671;6679;6687;6695;6703;6752:3;6740:9;6731:7;6727:23;6723:33;6720:120;;;6759:79;;:::i;:::-;6720:120;6879:1;6904:51;6947:7;6938:6;6927:9;6923:22;6904:51;:::i;:::-;6894:61;;6850:115;7004:2;7030:51;7073:7;7064:6;7053:9;7049:22;7030:51;:::i;:::-;7020:61;;6975:116;7130:2;7156:51;7199:7;7190:6;7179:9;7175:22;7156:51;:::i;:::-;7146:61;;7101:116;7256:2;7282:51;7325:7;7316:6;7305:9;7301:22;7282:51;:::i;:::-;7272:61;;7227:116;7382:3;7409:51;7452:7;7443:6;7432:9;7428:22;7409:51;:::i;:::-;7399:61;;7353:117;7509:3;7536:51;7579:7;7570:6;7559:9;7555:22;7536:51;:::i;:::-;7526:61;;7480:117;6571:1033;;;;;;;;:::o;7610:468::-;7675:6;7683;7732:2;7720:9;7711:7;7707:23;7703:32;7700:119;;;7738:79;;:::i;:::-;7700:119;7858:1;7883:53;7928:7;7919:6;7908:9;7904:22;7883:53;:::i;:::-;7873:63;;7829:117;7985:2;8011:50;8053:7;8044:6;8033:9;8029:22;8011:50;:::i;:::-;8001:60;;7956:115;7610:468;;;;;:::o;8084:118::-;8171:24;8189:5;8171:24;:::i;:::-;8166:3;8159:37;8084:118;;:::o;8208:222::-;8301:4;8339:2;8328:9;8324:18;8316:26;;8352:71;8420:1;8409:9;8405:17;8396:6;8352:71;:::i;:::-;8208:222;;;;:::o;8436:329::-;8495:6;8544:2;8532:9;8523:7;8519:23;8515:32;8512:119;;;8550:79;;:::i;:::-;8512:119;8670:1;8695:53;8740:7;8731:6;8720:9;8716:22;8695:53;:::i;:::-;8685:63;;8641:117;8436:329;;;;:::o;8771:933::-;9028:4;9066:3;9055:9;9051:19;9043:27;;9080:67;9144:1;9133:9;9129:17;9120:6;9080:67;:::i;:::-;9157:68;9221:2;9210:9;9206:18;9197:6;9157:68;:::i;:::-;9235;9299:2;9288:9;9284:18;9275:6;9235:68;:::i;:::-;9313;9377:2;9366:9;9362:18;9353:6;9313:68;:::i;:::-;9391:69;9455:3;9444:9;9440:19;9431:6;9391:69;:::i;:::-;9470;9534:3;9523:9;9519:19;9510:6;9470:69;:::i;:::-;9549;9613:3;9602:9;9598:19;9589:6;9549:69;:::i;:::-;9628;9692:3;9681:9;9677:19;9668:6;9628:69;:::i;:::-;8771:933;;;;;;;;;;;:::o;9710:474::-;9778:6;9786;9835:2;9823:9;9814:7;9810:23;9806:32;9803:119;;;9841:79;;:::i;:::-;9803:119;9961:1;9986:53;10031:7;10022:6;10011:9;10007:22;9986:53;:::i;:::-;9976:63;;9932:117;10088:2;10114:53;10159:7;10150:6;10139:9;10135:22;10114:53;:::i;:::-;10104:63;;10059:118;9710:474;;;;;:::o;10190:60::-;10218:3;10239:5;10232:12;;10190:60;;;:::o;10256:142::-;10306:9;10339:53;10357:34;10366:24;10384:5;10366:24;:::i;:::-;10357:34;:::i;:::-;10339:53;:::i;:::-;10326:66;;10256:142;;;:::o;10404:126::-;10454:9;10487:37;10518:5;10487:37;:::i;:::-;10474:50;;10404:126;;;:::o;10536:153::-;10613:9;10646:37;10677:5;10646:37;:::i;:::-;10633:50;;10536:153;;;:::o;10695:185::-;10809:64;10867:5;10809:64;:::i;:::-;10804:3;10797:77;10695:185;;:::o;10886:276::-;11006:4;11044:2;11033:9;11029:18;11021:26;;11057:98;11152:1;11141:9;11137:17;11128:6;11057:98;:::i;:::-;10886:276;;;;:::o;11168:180::-;11216:77;11213:1;11206:88;11313:4;11310:1;11303:15;11337:4;11334:1;11327:15;11354:320;11398:6;11435:1;11429:4;11425:12;11415:22;;11482:1;11476:4;11472:12;11503:18;11493:81;;11559:4;11551:6;11547:17;11537:27;;11493:81;11621:2;11613:6;11610:14;11590:18;11587:38;11584:84;;;11640:18;;:::i;:::-;11584:84;11405:269;11354:320;;;:::o;11680:182::-;11820:34;11816:1;11808:6;11804:14;11797:58;11680:182;:::o;11868:366::-;12010:3;12031:67;12095:2;12090:3;12031:67;:::i;:::-;12024:74;;12107:93;12196:3;12107:93;:::i;:::-;12225:2;12220:3;12216:12;12209:19;;11868:366;;;:::o;12240:419::-;12406:4;12444:2;12433:9;12429:18;12421:26;;12493:9;12487:4;12483:20;12479:1;12468:9;12464:17;12457:47;12521:131;12647:4;12521:131;:::i;:::-;12513:139;;12240:419;;;:::o;12665:180::-;12713:77;12710:1;12703:88;12810:4;12807:1;12800:15;12834:4;12831:1;12824:15;12851:180;12899:77;12896:1;12889:88;12996:4;12993:1;12986:15;13020:4;13017:1;13010:15;13037:185;13077:1;13094:20;13112:1;13094:20;:::i;:::-;13089:25;;13128:20;13146:1;13128:20;:::i;:::-;13123:25;;13167:1;13157:35;;13172:18;;:::i;:::-;13157:35;13214:1;13211;13207:9;13202:14;;13037:185;;;;:::o;13228:348::-;13268:7;13291:20;13309:1;13291:20;:::i;:::-;13286:25;;13325:20;13343:1;13325:20;:::i;:::-;13320:25;;13513:1;13445:66;13441:74;13438:1;13435:81;13430:1;13423:9;13416:17;13412:105;13409:131;;;13520:18;;:::i;:::-;13409:131;13568:1;13565;13561:9;13550:20;;13228:348;;;;:::o;13582:222::-;13722:34;13718:1;13710:6;13706:14;13699:58;13791:5;13786:2;13778:6;13774:15;13767:30;13582:222;:::o;13810:366::-;13952:3;13973:67;14037:2;14032:3;13973:67;:::i;:::-;13966:74;;14049:93;14138:3;14049:93;:::i;:::-;14167:2;14162:3;14158:12;14151:19;;13810:366;;;:::o;14182:419::-;14348:4;14386:2;14375:9;14371:18;14363:26;;14435:9;14429:4;14425:20;14421:1;14410:9;14406:17;14399:47;14463:131;14589:4;14463:131;:::i;:::-;14455:139;;14182:419;;;:::o;14607:223::-;14747:34;14743:1;14735:6;14731:14;14724:58;14816:6;14811:2;14803:6;14799:15;14792:31;14607:223;:::o;14836:366::-;14978:3;14999:67;15063:2;15058:3;14999:67;:::i;:::-;14992:74;;15075:93;15164:3;15075:93;:::i;:::-;15193:2;15188:3;15184:12;15177:19;;14836:366;;;:::o;15208:419::-;15374:4;15412:2;15401:9;15397:18;15389:26;;15461:9;15455:4;15451:20;15447:1;15436:9;15432:17;15425:47;15489:131;15615:4;15489:131;:::i;:::-;15481:139;;15208:419;;;:::o;15633:237::-;15671:3;15690:18;15706:1;15690:18;:::i;:::-;15685:23;;15722:18;15738:1;15722:18;:::i;:::-;15717:23;;15812:1;15806:4;15802:12;15799:1;15796:19;15793:45;;;15818:18;;:::i;:::-;15793:45;15862:1;15859;15855:9;15848:16;;15633:237;;;;:::o;15876:179::-;16016:31;16012:1;16004:6;16000:14;15993:55;15876:179;:::o;16061:366::-;16203:3;16224:67;16288:2;16283:3;16224:67;:::i;:::-;16217:74;;16300:93;16389:3;16300:93;:::i;:::-;16418:2;16413:3;16409:12;16402:19;;16061:366;;;:::o;16433:419::-;16599:4;16637:2;16626:9;16622:18;16614:26;;16686:9;16680:4;16676:20;16672:1;16661:9;16657:17;16650:47;16714:131;16840:4;16714:131;:::i;:::-;16706:139;;16433:419;;;:::o;16858:305::-;16898:3;16917:20;16935:1;16917:20;:::i;:::-;16912:25;;16951:20;16969:1;16951:20;:::i;:::-;16946:25;;17105:1;17037:66;17033:74;17030:1;17027:81;17024:107;;;17111:18;;:::i;:::-;17024:107;17155:1;17152;17148:9;17141:16;;16858:305;;;;:::o;17169:173::-;17309:25;17305:1;17297:6;17293:14;17286:49;17169:173;:::o;17348:366::-;17490:3;17511:67;17575:2;17570:3;17511:67;:::i;:::-;17504:74;;17587:93;17676:3;17587:93;:::i;:::-;17705:2;17700:3;17696:12;17689:19;;17348:366;;;:::o;17720:419::-;17886:4;17924:2;17913:9;17909:18;17901:26;;17973:9;17967:4;17963:20;17959:1;17948:9;17944:17;17937:47;18001:131;18127:4;18001:131;:::i;:::-;17993:139;;17720:419;;;:::o;18145:221::-;18285:34;18281:1;18273:6;18269:14;18262:58;18354:4;18349:2;18341:6;18337:15;18330:29;18145:221;:::o;18372:366::-;18514:3;18535:67;18599:2;18594:3;18535:67;:::i;:::-;18528:74;;18611:93;18700:3;18611:93;:::i;:::-;18729:2;18724:3;18720:12;18713:19;;18372:366;;;:::o;18744:419::-;18910:4;18948:2;18937:9;18933:18;18925:26;;18997:9;18991:4;18987:20;18983:1;18972:9;18968:17;18961:47;19025:131;19151:4;19025:131;:::i;:::-;19017:139;;18744:419;;;:::o;19169:225::-;19309:34;19305:1;19297:6;19293:14;19286:58;19378:8;19373:2;19365:6;19361:15;19354:33;19169:225;:::o;19400:366::-;19542:3;19563:67;19627:2;19622:3;19563:67;:::i;:::-;19556:74;;19639:93;19728:3;19639:93;:::i;:::-;19757:2;19752:3;19748:12;19741:19;;19400:366;;;:::o;19772:419::-;19938:4;19976:2;19965:9;19961:18;19953:26;;20025:9;20019:4;20015:20;20011:1;20000:9;19996:17;19989:47;20053:131;20179:4;20053:131;:::i;:::-;20045:139;;19772:419;;;:::o;20197:177::-;20337:29;20333:1;20325:6;20321:14;20314:53;20197:177;:::o;20380:366::-;20522:3;20543:67;20607:2;20602:3;20543:67;:::i;:::-;20536:74;;20619:93;20708:3;20619:93;:::i;:::-;20737:2;20732:3;20728:12;20721:19;;20380:366;;;:::o;20752:419::-;20918:4;20956:2;20945:9;20941:18;20933:26;;21005:9;20999:4;20995:20;20991:1;20980:9;20976:17;20969:47;21033:131;21159:4;21033:131;:::i;:::-;21025:139;;20752:419;;;:::o;21177:172::-;21317:24;21313:1;21305:6;21301:14;21294:48;21177:172;:::o;21355:366::-;21497:3;21518:67;21582:2;21577:3;21518:67;:::i;:::-;21511:74;;21594:93;21683:3;21594:93;:::i;:::-;21712:2;21707:3;21703:12;21696:19;;21355:366;;;:::o;21727:419::-;21893:4;21931:2;21920:9;21916:18;21908:26;;21980:9;21974:4;21970:20;21966:1;21955:9;21951:17;21944:47;22008:131;22134:4;22008:131;:::i;:::-;22000:139;;21727:419;;;:::o;22152:178::-;22292:30;22288:1;22280:6;22276:14;22269:54;22152:178;:::o;22336:366::-;22478:3;22499:67;22563:2;22558:3;22499:67;:::i;:::-;22492:74;;22575:93;22664:3;22575:93;:::i;:::-;22693:2;22688:3;22684:12;22677:19;;22336:366;;;:::o;22708:419::-;22874:4;22912:2;22901:9;22897:18;22889:26;;22961:9;22955:4;22951:20;22947:1;22936:9;22932:17;22925:47;22989:131;23115:4;22989:131;:::i;:::-;22981:139;;22708:419;;;:::o;23133:179::-;23273:31;23269:1;23261:6;23257:14;23250:55;23133:179;:::o;23318:366::-;23460:3;23481:67;23545:2;23540:3;23481:67;:::i;:::-;23474:74;;23557:93;23646:3;23557:93;:::i;:::-;23675:2;23670:3;23666:12;23659:19;;23318:366;;;:::o;23690:419::-;23856:4;23894:2;23883:9;23879:18;23871:26;;23943:9;23937:4;23933:20;23929:1;23918:9;23914:17;23907:47;23971:131;24097:4;23971:131;:::i;:::-;23963:139;;23690:419;;;:::o;24115:169::-;24255:21;24251:1;24243:6;24239:14;24232:45;24115:169;:::o;24290:366::-;24432:3;24453:67;24517:2;24512:3;24453:67;:::i;:::-;24446:74;;24529:93;24618:3;24529:93;:::i;:::-;24647:2;24642:3;24638:12;24631:19;;24290:366;;;:::o;24662:419::-;24828:4;24866:2;24855:9;24851:18;24843:26;;24915:9;24909:4;24905:20;24901:1;24890:9;24886:17;24879:47;24943:131;25069:4;24943:131;:::i;:::-;24935:139;;24662:419;;;:::o;25087:169::-;25227:21;25223:1;25215:6;25211:14;25204:45;25087:169;:::o;25262:366::-;25404:3;25425:67;25489:2;25484:3;25425:67;:::i;:::-;25418:74;;25501:93;25590:3;25501:93;:::i;:::-;25619:2;25614:3;25610:12;25603:19;;25262:366;;;:::o;25634:419::-;25800:4;25838:2;25827:9;25823:18;25815:26;;25887:9;25881:4;25877:20;25873:1;25862:9;25858:17;25851:47;25915:131;26041:4;25915:131;:::i;:::-;25907:139;;25634:419;;;:::o;26059:191::-;26099:4;26119:20;26137:1;26119:20;:::i;:::-;26114:25;;26153:20;26171:1;26153:20;:::i;:::-;26148:25;;26192:1;26189;26186:8;26183:34;;;26197:18;;:::i;:::-;26183:34;26242:1;26239;26235:9;26227:17;;26059:191;;;;:::o;26256:332::-;26377:4;26415:2;26404:9;26400:18;26392:26;;26428:71;26496:1;26485:9;26481:17;26472:6;26428:71;:::i;:::-;26509:72;26577:2;26566:9;26562:18;26553:6;26509:72;:::i;:::-;26256:332;;;;;:::o;26594:147::-;26695:11;26732:3;26717:18;;26594:147;;;;:::o;26747:114::-;;:::o;26867:398::-;27026:3;27047:83;27128:1;27123:3;27047:83;:::i;:::-;27040:90;;27139:93;27228:3;27139:93;:::i;:::-;27257:1;27252:3;27248:11;27241:18;;26867:398;;;:::o;27271:379::-;27455:3;27477:147;27620:3;27477:147;:::i;:::-;27470:154;;27641:3;27634:10;;27271:379;;;:::o;27656:220::-;27796:34;27792:1;27784:6;27780:14;27773:58;27865:3;27860:2;27852:6;27848:15;27841:28;27656:220;:::o;27882:366::-;28024:3;28045:67;28109:2;28104:3;28045:67;:::i;:::-;28038:74;;28121:93;28210:3;28121:93;:::i;:::-;28239:2;28234:3;28230:12;28223:19;;27882:366;;;:::o;28254:419::-;28420:4;28458:2;28447:9;28443:18;28435:26;;28507:9;28501:4;28497:20;28493:1;28482:9;28478:17;28471:47;28535:131;28661:4;28535:131;:::i;:::-;28527:139;;28254:419;;;:::o;28679:180::-;28727:77;28724:1;28717:88;28824:4;28821:1;28814:15;28848:4;28845:1;28838:15;28865:180;28913:77;28910:1;28903:88;29010:4;29007:1;29000:15;29034:4;29031:1;29024:15;29051:143;29108:5;29139:6;29133:13;29124:22;;29155:33;29182:5;29155:33;:::i;:::-;29051:143;;;;:::o;29200:351::-;29270:6;29319:2;29307:9;29298:7;29294:23;29290:32;29287:119;;;29325:79;;:::i;:::-;29287:119;29445:1;29470:64;29526:7;29517:6;29506:9;29502:22;29470:64;:::i;:::-;29460:74;;29416:128;29200:351;;;;:::o;29557:85::-;29602:7;29631:5;29620:16;;29557:85;;;:::o;29648:158::-;29706:9;29739:61;29757:42;29766:32;29792:5;29766:32;:::i;:::-;29757:42;:::i;:::-;29739:61;:::i;:::-;29726:74;;29648:158;;;:::o;29812:147::-;29907:45;29946:5;29907:45;:::i;:::-;29902:3;29895:58;29812:147;;:::o;29965:114::-;30032:6;30066:5;30060:12;30050:22;;29965:114;;;:::o;30085:184::-;30184:11;30218:6;30213:3;30206:19;30258:4;30253:3;30249:14;30234:29;;30085:184;;;;:::o;30275:132::-;30342:4;30365:3;30357:11;;30395:4;30390:3;30386:14;30378:22;;30275:132;;;:::o;30413:108::-;30490:24;30508:5;30490:24;:::i;:::-;30485:3;30478:37;30413:108;;:::o;30527:179::-;30596:10;30617:46;30659:3;30651:6;30617:46;:::i;:::-;30695:4;30690:3;30686:14;30672:28;;30527:179;;;;:::o;30712:113::-;30782:4;30814;30809:3;30805:14;30797:22;;30712:113;;;:::o;30861:732::-;30980:3;31009:54;31057:5;31009:54;:::i;:::-;31079:86;31158:6;31153:3;31079:86;:::i;:::-;31072:93;;31189:56;31239:5;31189:56;:::i;:::-;31268:7;31299:1;31284:284;31309:6;31306:1;31303:13;31284:284;;;31385:6;31379:13;31412:63;31471:3;31456:13;31412:63;:::i;:::-;31405:70;;31498:60;31551:6;31498:60;:::i;:::-;31488:70;;31344:224;31331:1;31328;31324:9;31319:14;;31284:284;;;31288:14;31584:3;31577:10;;30985:608;;;30861:732;;;;:::o;31599:831::-;31862:4;31900:3;31889:9;31885:19;31877:27;;31914:71;31982:1;31971:9;31967:17;31958:6;31914:71;:::i;:::-;31995:80;32071:2;32060:9;32056:18;32047:6;31995:80;:::i;:::-;32122:9;32116:4;32112:20;32107:2;32096:9;32092:18;32085:48;32150:108;32253:4;32244:6;32150:108;:::i;:::-;32142:116;;32268:72;32336:2;32325:9;32321:18;32312:6;32268:72;:::i;:::-;32350:73;32418:3;32407:9;32403:19;32394:6;32350:73;:::i;:::-;31599:831;;;;;;;;:::o;32436:807::-;32685:4;32723:3;32712:9;32708:19;32700:27;;32737:71;32805:1;32794:9;32790:17;32781:6;32737:71;:::i;:::-;32818:72;32886:2;32875:9;32871:18;32862:6;32818:72;:::i;:::-;32900:80;32976:2;32965:9;32961:18;32952:6;32900:80;:::i;:::-;32990;33066:2;33055:9;33051:18;33042:6;32990:80;:::i;:::-;33080:73;33148:3;33137:9;33133:19;33124:6;33080:73;:::i;:::-;33163;33231:3;33220:9;33216:19;33207:6;33163:73;:::i;:::-;32436:807;;;;;;;;;:::o;33249:143::-;33306:5;33337:6;33331:13;33322:22;;33353:33;33380:5;33353:33;:::i;:::-;33249:143;;;;:::o;33398:663::-;33486:6;33494;33502;33551:2;33539:9;33530:7;33526:23;33522:32;33519:119;;;33557:79;;:::i;:::-;33519:119;33677:1;33702:64;33758:7;33749:6;33738:9;33734:22;33702:64;:::i;:::-;33692:74;;33648:128;33815:2;33841:64;33897:7;33888:6;33877:9;33873:22;33841:64;:::i;:::-;33831:74;;33786:129;33954:2;33980:64;34036:7;34027:6;34016:9;34012:22;33980:64;:::i;:::-;33970:74;;33925:129;33398:663;;;;;:::o

Swarm Source

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