ETH Price: $3,253.70 (-0.20%)
Gas: 3 Gwei

Token

KENNY ERC20 ($KENNY)
 

Overview

Max Total Supply

416,970,340,436.38845615829511528 $KENNY

Holders

74

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
373,205,160.067847352624851139 $KENNY

Value
$0.00
0xd6bcad28a88a1ea2ffb030ee5ab1169c0fe3ae3b
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:
KENNY

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-10
*/

/*
    ██╗  ██╗    ███████╗    ███╗   ██╗    ███╗   ██╗    ██╗   ██╗        
    ██║ ██╔╝    ██╔════╝    ████╗  ██║    ████╗  ██║    ╚██╗ ██╔╝        
    █████╔╝     █████╗      ██╔██╗ ██║    ██╔██╗ ██║     ╚████╔╝         
    ██╔═██╗     ██╔══╝      ██║╚██╗██║    ██║╚██╗██║      ╚██╔╝          
    ██║  ██╗    ███████╗    ██║ ╚████║    ██║ ╚████║       ██║           
    ╚═╝  ╚═╝    ╚══════╝    ╚═╝  ╚═══╝    ╚═╝  ╚═══╝       ╚═╝   ERC20        

https://t.me/Kenny_ERC20
https://kennyisdead.wtf/
https://twitter.com/kennyerc20token
 */
// SPDX-License-Identifier: MIT
pragma solidity 0.8.18;
pragma experimental ABIEncoderV2;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

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() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual 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");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(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"
        );
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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);

    function allowance(
        address owner,
        address spender
    ) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @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);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @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;
    }

    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];
    }

    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;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(
            currentAllowance >= amount,
            "ERC20: transfer amount exceeds allowance"
        );
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    function increaseAllowance(
        address spender,
        uint256 addedValue
    ) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender] + addedValue
        );
        return true;
    }

    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(
            senderBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

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

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

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

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

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function getPair(
        address tokenA,
        address tokenB
    ) external view returns (address pair);

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

    function createPair(
        address tokenA,
        address tokenB
    ) external returns (address pair);

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(
        address owner,
        address spender
    ) external view returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    event Mint(address indexed sender, uint256 amount0, uint256 amount1);
    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(
        address to
    ) external returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router02 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB, uint256 liquidity);

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

contract KENNY is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant DEAD = address(0xdead);
    address public constant ZERO_ADDRESS = address(0);
    bool private swapping;

    address public KennyMarketing;
    address public SouthParkEcosystem;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public swapEnabled = true;

    uint256 public buyTotalFees = 1;
    uint256 public buyMarketingFee = 0;
    uint256 public buySPEcosystemFee = 0;
    uint256 public buyKennyBurnFee = 1;

    uint256 public sellTotalFees = 1;
    uint256 public sellMarketingFee = 0;
    uint256 public sellKennyBurnFee = 1;
    uint256 public sellSPEcosystemFee = 0;

    //Burn Kenny From AMM to Boost Price
    uint256 public kennyBooster = 10; //by defaul Booster set to 1%
    uint256 public KENNYsDead;

    uint256 tokensForMarketing;
    uint256 tokensForSPEcosystem;
    uint256 tokensForKennyBurn;

    /******************/

    // exlcude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;

    // 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 automatedMarketMakerPairs;

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event KennyMarketingUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event SouthParkEcosystemUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() ERC20("KENNY ERC20", "$KENNY") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 totalSupply = 420_069_420_069 ether;

        maxTransactionAmount = totalSupply.div(100);
        maxWallet = totalSupply.mul(3).div(100);
        swapTokensAtAmount = 10000 ether;

        KennyMarketing = address(msg.sender); // set as marketing wallet
        SouthParkEcosystem = address(msg.sender);
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

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

    receive() external payable {}

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(
        uint256 newAmount
    ) external onlyOwner returns (bool) {
        require(newAmount >= 10_000 ether,"invalid swap amount");
        swapTokensAtAmount = newAmount * (10 ** 18);
        return true;
    }


    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {

      require(newNum >= 4_200_694_200 ether,"invalid max trx amount");
        maxTransactionAmount = newNum * (10 ** 18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
       require(newNum >=12_602_082_602 ether,"invalid max wallet amount");
        maxWallet = newNum * (10 ** 18);
    }

    function excludeFromMaxTransaction(
        address updAds,
        bool isEx
    ) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

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

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _kennyBurnFee,
        uint256 _SPEcosystemFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyKennyBurnFee = _kennyBurnFee;
        buySPEcosystemFee = _SPEcosystemFee;
        buyTotalFees = buyMarketingFee + buySPEcosystemFee + buyKennyBurnFee;
        require(buyTotalFees <= 25, "MAX Buy Fee is 25%");
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _SPEcosystemFee,
        uint256 _kennyBurnFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellSPEcosystemFee = _SPEcosystemFee;
        sellKennyBurnFee = _kennyBurnFee;
        sellTotalFees =
            sellMarketingFee +
            sellSPEcosystemFee +
            sellKennyBurnFee;
        require(sellTotalFees <= 25, "MAX Sell Fee is 25%");
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function setAutomatedMarketMakerPair(
        address pair,
        bool value
    ) public onlyOwner {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateKennyMarketing(
        address newKennyMarketing
    ) external onlyOwner {
        emit KennyMarketingUpdated(newKennyMarketing, KennyMarketing);
        KennyMarketing = newKennyMarketing;
    }

    function updateSouthParkEcosystem(address newWallet) external onlyOwner {
        emit SouthParkEcosystemUpdated(newWallet, SouthParkEcosystem);
        SouthParkEcosystem = newWallet;
    }

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Sell transfer amount exceeds the maxTransactionAmount."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
                tokensForSPEcosystem +=
                    (fees * sellSPEcosystemFee) /
                    sellTotalFees;
                tokensForKennyBurn = (fees * sellKennyBurnFee) / sellTotalFees;

                //Kenny Booster
                uint256 plburn = amount.mul(kennyBooster).div(1000);
                _burn(uniswapV2Pair, plburn);
                KENNYsDead += plburn;
                IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
                pair.sync();
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
                tokensForSPEcosystem +=
                    (fees * buySPEcosystemFee) /
                    buyTotalFees;
                tokensForKennyBurn = (fees * buyKennyBurnFee) / buyTotalFees;
            }

            if (fees > 0) {
                _burn(from, tokensForKennyBurn);
                KENNYsDead += tokensForKennyBurn;
                super._transfer(from, address(this), fees - tokensForKennyBurn);
            }

            amount -= fees;
        }

        super._transfer(from, to, amount);
    }

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

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

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

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

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForMarketing + tokensForSPEcosystem;
        bool success;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount) {
            contractBalance = swapTokensAtAmount;
        }

        uint256 amountToSwapForETH = contractBalance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance;

        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(
            totalTokensToSwap
        );

        (success, ) = address(KennyMarketing).call{value: ethForMarketing}("");
        (success, ) = address(SouthParkEcosystem).call{
            value: address(this).balance
        }("");

        tokensForMarketing = 0;
        tokensForSPEcosystem = 0;
    }
 

    function withdrawETH(uint256 _amount) external onlyOwner {
        require(address(this).balance >= _amount, "Invalid Amount");
        payable(msg.sender).transfer(_amount);
    }

    function withdrawToken(IERC20 _token, uint256 _amount) external onlyOwner {
        require(_token.balanceOf(address(this)) >= _amount, "Invalid Amount");
        _token.transfer(msg.sender, _amount);
    }

    function KENNYbooster(uint256 _kennyBooster) external onlyOwner {
        kennyBooster = _kennyBooster;
    }
}

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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"KennyMarketingUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"SouthParkEcosystemUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_kennyBooster","type":"uint256"}],"name":"KENNYbooster","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"KENNYsDead","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"KennyMarketing","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SouthParkEcosystem","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ZERO_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyKennyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buySPEcosystemFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"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":"kennyBooster","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellKennyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellSPEcosystemFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_kennyBurnFee","type":"uint256"},{"internalType":"uint256","name":"_SPEcosystemFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newKennyMarketing","type":"address"}],"name":"updateKennyMarketing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_SPEcosystemFee","type":"uint256"},{"internalType":"uint256","name":"_kennyBurnFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateSouthParkEcosystem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600b60006101000a81548160ff0219169083151502179055506001600b60016101000a81548160ff0219169083151502179055506001600c556000600d556000600e556001600f556001601055600060115560016012556000601355600a6014553480156200007457600080fd5b506040518060400160405280600b81526020017f4b454e4e592045524332300000000000000000000000000000000000000000008152506040518060400160405280600681526020017f244b454e4e5900000000000000000000000000000000000000000000000000008152508160039081620000f2919062000cf0565b50806004908162000104919062000cf0565b505050620001276200011b6200050760201b60201c565b6200050f60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905062000153816001620005d560201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001d3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f9919062000e41565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000261573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000287919062000e41565b6040518363ffffffff1660e01b8152600401620002a692919062000e84565b6020604051808303816000875af1158015620002c6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ec919062000e41565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200033460a0516001620005d560201b60201c565b6200034960a0516001620006bf60201b60201c565b60006c054d5147bbad41f706617400009050620003766064826200076060201b620023951790919060201c565b600881905550620003b160646200039d6003846200077860201b620023ab1790919060201c565b6200076060201b620023951790919060201c565b600a8190555069021e19e0c9bab240000060098190555033600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200046c6200045e6200079060201b60201c565b6001620007ba60201b60201c565b6200047f306001620007ba60201b60201c565b6200049461dead6001620007ba60201b60201c565b620004b6620004a86200079060201b60201c565b6001620005d560201b60201c565b620004c9306001620005d560201b60201c565b620004de61dead6001620005d560201b60201c565b620004ff620004f26200079060201b60201c565b82620008f460201b60201c565b50506200112a565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620005e56200050760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200060b6200079060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000664576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200065b9062000f12565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000818362000770919062000f92565b905092915050565b6000818362000788919062000fca565b905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007ca6200050760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620007f06200079060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000849576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008409062000f12565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620008e8919062001032565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000966576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200095d906200109f565b60405180910390fd5b6200097a6000838362000a6c60201b60201c565b80600260008282546200098e9190620010c1565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620009e59190620010c1565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a4c91906200110d565b60405180910390a362000a686000838362000a7160201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000af857607f821691505b60208210810362000b0e5762000b0d62000ab0565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000b787fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000b39565b62000b84868362000b39565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000bd162000bcb62000bc58462000b9c565b62000ba6565b62000b9c565b9050919050565b6000819050919050565b62000bed8362000bb0565b62000c0562000bfc8262000bd8565b84845462000b46565b825550505050565b600090565b62000c1c62000c0d565b62000c2981848462000be2565b505050565b5b8181101562000c515762000c4560008262000c12565b60018101905062000c2f565b5050565b601f82111562000ca05762000c6a8162000b14565b62000c758462000b29565b8101602085101562000c85578190505b62000c9d62000c948562000b29565b83018262000c2e565b50505b505050565b600082821c905092915050565b600062000cc56000198460080262000ca5565b1980831691505092915050565b600062000ce0838362000cb2565b9150826002028217905092915050565b62000cfb8262000a76565b67ffffffffffffffff81111562000d175762000d1662000a81565b5b62000d23825462000adf565b62000d3082828562000c55565b600060209050601f83116001811462000d68576000841562000d53578287015190505b62000d5f858262000cd2565b86555062000dcf565b601f19841662000d788662000b14565b60005b8281101562000da25784890151825560018201915060208501945060208101905062000d7b565b8683101562000dc2578489015162000dbe601f89168262000cb2565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000e098262000ddc565b9050919050565b62000e1b8162000dfc565b811462000e2757600080fd5b50565b60008151905062000e3b8162000e10565b92915050565b60006020828403121562000e5a5762000e5962000dd7565b5b600062000e6a8482850162000e2a565b91505092915050565b62000e7e8162000dfc565b82525050565b600060408201905062000e9b600083018562000e73565b62000eaa602083018462000e73565b9392505050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000efa60208362000eb1565b915062000f078262000ec2565b602082019050919050565b6000602082019050818103600083015262000f2d8162000eeb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000f9f8262000b9c565b915062000fac8362000b9c565b92508262000fbf5762000fbe62000f34565b5b828204905092915050565b600062000fd78262000b9c565b915062000fe48362000b9c565b925082820262000ff48162000b9c565b915082820484148315176200100e576200100d62000f63565b5b5092915050565b60008115159050919050565b6200102c8162001015565b82525050565b600060208201905062001049600083018462001021565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001087601f8362000eb1565b915062001094826200104f565b602082019050919050565b60006020820190508181036000830152620010ba8162001078565b9050919050565b6000620010ce8262000b9c565b9150620010db8362000b9c565b9250828201905080821115620010f657620010f562000f63565b5b92915050565b620011078162000b9c565b82525050565b6000602082019050620011246000830184620010fc565b92915050565b60805160a051614ed36200117a600039600081816111ca0152818161183601528181612e290152612e6b015260008181610da5015281816138990152818161397a01526139a10152614ed36000f3fe60806040526004361061031e5760003560e01c80637571336a116101ab578063b62496f5116100f7578063d85ba06311610095578063e2f456051161006f578063e2f4560514610bff578063f14210a614610c2a578063f2fde38b14610c53578063f8b45b0514610c7c57610325565b8063d85ba06314610b6e578063dd62ed3e14610b99578063df3c058f14610bd657610325565b8063c18bc195116100d1578063c18bc19514610ab2578063c8c8ebe414610adb578063cc42cb4514610b06578063d257b34f14610b3157610325565b8063b62496f514610a23578063c024666814610a60578063c17b5b8c14610a8957610325565b8063924de9b7116101645780639e281a981161013e5780639e281a9814610955578063a457c2d71461097e578063a9059cbb146109bb578063b3c9423b146109f857610325565b8063924de9b7146108d857806395d89b41146109015780639a7a23d61461092c57610325565b80637571336a146107da5780637bce5a04146108035780638055dbd61461082e5780638095d564146108595780638da5cb5b1461088257806392136913146108ad57610325565b806349bd5a5e1161026a5780636a486a8e1161022357806370a08231116101fd57806370a0823114610732578063715018a61461076f57806371f2859914610786578063751039fc146107af57610325565b80636a486a8e146106b15780636dd06a20146106dc5780636ddd17131461070757610325565b806349bd5a5e1461059d5780634a62bb65146105c85780634fbee193146105f3578063538ba4f9146106305780635792244c1461065b5780636918bb531461068657610325565b806318160ddd116102d75780632800fe97116102b15780632800fe97146104e1578063313ce5671461050c5780633475ba2814610537578063395093511461056057610325565b806318160ddd14610450578063203e727e1461047b57806323b872dd146104a457610325565b806303fd2a451461032a57806306fdde0314610355578063095ea7b31461038057806310d5de53146103bd578063162ccb36146103fa5780631694505e1461042557610325565b3661032557005b600080fd5b34801561033657600080fd5b5061033f610ca7565b60405161034c9190613a78565b60405180910390f35b34801561036157600080fd5b5061036a610cad565b6040516103779190613b23565b60405180910390f35b34801561038c57600080fd5b506103a760048036038101906103a29190613bac565b610d3f565b6040516103b49190613c07565b60405180910390f35b3480156103c957600080fd5b506103e460048036038101906103df9190613c22565b610d5d565b6040516103f19190613c07565b60405180910390f35b34801561040657600080fd5b5061040f610d7d565b60405161041c9190613a78565b60405180910390f35b34801561043157600080fd5b5061043a610da3565b6040516104479190613cae565b60405180910390f35b34801561045c57600080fd5b50610465610dc7565b6040516104729190613cd8565b60405180910390f35b34801561048757600080fd5b506104a2600480360381019061049d9190613cf3565b610dd1565b005b3480156104b057600080fd5b506104cb60048036038101906104c69190613d20565b610eb9565b6040516104d89190613c07565b60405180910390f35b3480156104ed57600080fd5b506104f6610fb1565b6040516105039190613a78565b60405180910390f35b34801561051857600080fd5b50610521610fd7565b60405161052e9190613d8f565b60405180910390f35b34801561054357600080fd5b5061055e60048036038101906105599190613c22565b610fe0565b005b34801561056c57600080fd5b5061058760048036038101906105829190613bac565b61111c565b6040516105949190613c07565b60405180910390f35b3480156105a957600080fd5b506105b26111c8565b6040516105bf9190613a78565b60405180910390f35b3480156105d457600080fd5b506105dd6111ec565b6040516105ea9190613c07565b60405180910390f35b3480156105ff57600080fd5b5061061a60048036038101906106159190613c22565b6111ff565b6040516106279190613c07565b60405180910390f35b34801561063c57600080fd5b50610645611255565b6040516106529190613a78565b60405180910390f35b34801561066757600080fd5b5061067061125a565b60405161067d9190613cd8565b60405180910390f35b34801561069257600080fd5b5061069b611260565b6040516106a89190613cd8565b60405180910390f35b3480156106bd57600080fd5b506106c6611266565b6040516106d39190613cd8565b60405180910390f35b3480156106e857600080fd5b506106f161126c565b6040516106fe9190613cd8565b60405180910390f35b34801561071357600080fd5b5061071c611272565b6040516107299190613c07565b60405180910390f35b34801561073e57600080fd5b5061075960048036038101906107549190613c22565b611285565b6040516107669190613cd8565b60405180910390f35b34801561077b57600080fd5b506107846112cd565b005b34801561079257600080fd5b506107ad60048036038101906107a89190613cf3565b611355565b005b3480156107bb57600080fd5b506107c46113db565b6040516107d19190613c07565b60405180910390f35b3480156107e657600080fd5b5061080160048036038101906107fc9190613dd6565b61147b565b005b34801561080f57600080fd5b50610818611552565b6040516108259190613cd8565b60405180910390f35b34801561083a57600080fd5b50610843611558565b6040516108509190613cd8565b60405180910390f35b34801561086557600080fd5b50610880600480360381019061087b9190613e16565b61155e565b005b34801561088e57600080fd5b5061089761165d565b6040516108a49190613a78565b60405180910390f35b3480156108b957600080fd5b506108c2611687565b6040516108cf9190613cd8565b60405180910390f35b3480156108e457600080fd5b506108ff60048036038101906108fa9190613e69565b61168d565b005b34801561090d57600080fd5b50610916611726565b6040516109239190613b23565b60405180910390f35b34801561093857600080fd5b50610953600480360381019061094e9190613dd6565b6117b8565b005b34801561096157600080fd5b5061097c60048036038101906109779190613ed4565b6118d0565b005b34801561098a57600080fd5b506109a560048036038101906109a09190613bac565b611a8b565b6040516109b29190613c07565b60405180910390f35b3480156109c757600080fd5b506109e260048036038101906109dd9190613bac565b611b76565b6040516109ef9190613c07565b60405180910390f35b348015610a0457600080fd5b50610a0d611b94565b604051610a1a9190613cd8565b60405180910390f35b348015610a2f57600080fd5b50610a4a6004803603810190610a459190613c22565b611b9a565b604051610a579190613c07565b60405180910390f35b348015610a6c57600080fd5b50610a876004803603810190610a829190613dd6565b611bba565b005b348015610a9557600080fd5b50610ab06004803603810190610aab9190613e16565b611cdf565b005b348015610abe57600080fd5b50610ad96004803603810190610ad49190613cf3565b611dde565b005b348015610ae757600080fd5b50610af0611ec6565b604051610afd9190613cd8565b60405180910390f35b348015610b1257600080fd5b50610b1b611ecc565b604051610b289190613cd8565b60405180910390f35b348015610b3d57600080fd5b50610b586004803603810190610b539190613cf3565b611ed2565b604051610b659190613c07565b60405180910390f35b348015610b7a57600080fd5b50610b83611fc0565b604051610b909190613cd8565b60405180910390f35b348015610ba557600080fd5b50610bc06004803603810190610bbb9190613f14565b611fc6565b604051610bcd9190613cd8565b60405180910390f35b348015610be257600080fd5b50610bfd6004803603810190610bf89190613c22565b61204d565b005b348015610c0b57600080fd5b50610c14612189565b604051610c219190613cd8565b60405180910390f35b348015610c3657600080fd5b50610c516004803603810190610c4c9190613cf3565b61218f565b005b348015610c5f57600080fd5b50610c7a6004803603810190610c759190613c22565b612298565b005b348015610c8857600080fd5b50610c9161238f565b604051610c9e9190613cd8565b60405180910390f35b61dead81565b606060038054610cbc90613f83565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce890613f83565b8015610d355780601f10610d0a57610100808354040283529160200191610d35565b820191906000526020600020905b815481529060010190602001808311610d1857829003601f168201915b5050505050905090565b6000610d53610d4c6123c1565b84846123c9565b6001905092915050565b601a6020528060005260406000206000915054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610dd96123c1565b73ffffffffffffffffffffffffffffffffffffffff16610df761165d565b73ffffffffffffffffffffffffffffffffffffffff1614610e4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4490614000565b60405180910390fd5b6b0d92bb98e11ded5db3e00000811015610e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e939061406c565b60405180910390fd5b670de0b6b3a764000081610eb091906140bb565b60088190555050565b6000610ec6848484612592565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f116123c1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610f91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f889061416f565b60405180910390fd5b610fa585610f9d6123c1565b8584036123c9565b60019150509392505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006012905090565b610fe86123c1565b73ffffffffffffffffffffffffffffffffffffffff1661100661165d565b73ffffffffffffffffffffffffffffffffffffffff161461105c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105390614000565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f841c66122369dc517e99f0b979e5aca5bad6d1adca3f413a1934f533a690c35e60405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006111be6111296123c1565b8484600160006111376123c1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111b9919061418f565b6123c9565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600081565b60145481565b600e5481565b60105481565b60125481565b600b60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112d56123c1565b73ffffffffffffffffffffffffffffffffffffffff166112f361165d565b73ffffffffffffffffffffffffffffffffffffffff1614611349576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134090614000565b60405180910390fd5b6113536000613073565b565b61135d6123c1565b73ffffffffffffffffffffffffffffffffffffffff1661137b61165d565b73ffffffffffffffffffffffffffffffffffffffff16146113d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c890614000565b60405180910390fd5b8060148190555050565b60006113e56123c1565b73ffffffffffffffffffffffffffffffffffffffff1661140361165d565b73ffffffffffffffffffffffffffffffffffffffff1614611459576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145090614000565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6114836123c1565b73ffffffffffffffffffffffffffffffffffffffff166114a161165d565b73ffffffffffffffffffffffffffffffffffffffff16146114f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ee90614000565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d5481565b60155481565b6115666123c1565b73ffffffffffffffffffffffffffffffffffffffff1661158461165d565b73ffffffffffffffffffffffffffffffffffffffff16146115da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d190614000565b60405180910390fd5b82600d8190555081600f8190555080600e81905550600f54600e54600d54611602919061418f565b61160c919061418f565b600c819055506019600c541115611658576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164f9061420f565b60405180910390fd5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60115481565b6116956123c1565b73ffffffffffffffffffffffffffffffffffffffff166116b361165d565b73ffffffffffffffffffffffffffffffffffffffff1614611709576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170090614000565b60405180910390fd5b80600b60016101000a81548160ff02191690831515021790555050565b60606004805461173590613f83565b80601f016020809104026020016040519081016040528092919081815260200182805461176190613f83565b80156117ae5780601f10611783576101008083540402835291602001916117ae565b820191906000526020600020905b81548152906001019060200180831161179157829003601f168201915b5050505050905090565b6117c06123c1565b73ffffffffffffffffffffffffffffffffffffffff166117de61165d565b73ffffffffffffffffffffffffffffffffffffffff1614611834576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182b90614000565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b9906142a1565b60405180910390fd5b6118cc8282613139565b5050565b6118d86123c1565b73ffffffffffffffffffffffffffffffffffffffff166118f661165d565b73ffffffffffffffffffffffffffffffffffffffff161461194c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194390614000565b60405180910390fd5b808273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016119869190613a78565b602060405180830381865afa1580156119a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c791906142d6565b1015611a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ff9061434f565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611a4392919061436f565b6020604051808303816000875af1158015611a62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a8691906143ad565b505050565b60008060016000611a9a6123c1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611b57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4e9061444c565b60405180910390fd5b611b6b611b626123c1565b858584036123c9565b600191505092915050565b6000611b8a611b836123c1565b8484612592565b6001905092915050565b600f5481565b601b6020528060005260406000206000915054906101000a900460ff1681565b611bc26123c1565b73ffffffffffffffffffffffffffffffffffffffff16611be061165d565b73ffffffffffffffffffffffffffffffffffffffff1614611c36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2d90614000565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611cd39190613c07565b60405180910390a25050565b611ce76123c1565b73ffffffffffffffffffffffffffffffffffffffff16611d0561165d565b73ffffffffffffffffffffffffffffffffffffffff1614611d5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5290614000565b60405180910390fd5b826011819055508160138190555080601281905550601254601354601154611d83919061418f565b611d8d919061418f565b60108190555060196010541115611dd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd0906144b8565b60405180910390fd5b505050565b611de66123c1565b73ffffffffffffffffffffffffffffffffffffffff16611e0461165d565b73ffffffffffffffffffffffffffffffffffffffff1614611e5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5190614000565b60405180910390fd5b6b28b832cabf1b35806a680000811015611ea9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea090614524565b60405180910390fd5b670de0b6b3a764000081611ebd91906140bb565b600a8190555050565b60085481565b60135481565b6000611edc6123c1565b73ffffffffffffffffffffffffffffffffffffffff16611efa61165d565b73ffffffffffffffffffffffffffffffffffffffff1614611f50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4790614000565b60405180910390fd5b69021e19e0c9bab2400000821015611f9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9490614590565b60405180910390fd5b670de0b6b3a764000082611fb191906140bb565b60098190555060019050919050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6120556123c1565b73ffffffffffffffffffffffffffffffffffffffff1661207361165d565b73ffffffffffffffffffffffffffffffffffffffff16146120c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c090614000565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f6836954c8acdbeeb85a47ecdb1feb7be68a4a5a91b5a34771ca7d7b758aba2ae60405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60095481565b6121976123c1565b73ffffffffffffffffffffffffffffffffffffffff166121b561165d565b73ffffffffffffffffffffffffffffffffffffffff161461220b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220290614000565b60405180910390fd5b8047101561224e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122459061434f565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612294573d6000803e3d6000fd5b5050565b6122a06123c1565b73ffffffffffffffffffffffffffffffffffffffff166122be61165d565b73ffffffffffffffffffffffffffffffffffffffff1614612314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230b90614000565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612383576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237a90614622565b60405180910390fd5b61238c81613073565b50565b600a5481565b600081836123a39190614671565b905092915050565b600081836123b991906140bb565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242f90614714565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249e906147a6565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125859190613cd8565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f890614838565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612670576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612667906148ca565b60405180910390fd5b6000810361268957612684838360006131da565b61306e565b600b60009054906101000a900460ff1615612a8f576126a661165d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561271457506126e461165d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561274d5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612787575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127a05750600560149054906101000a900460ff16155b15612a8e57601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128485750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156128ef57600854811115612892576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128899061495c565b60405180910390fd5b600a5461289e83611285565b826128a9919061418f565b11156128ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e1906149c8565b60405180910390fd5b612a8d565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129925750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129e1576008548111156129dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d390614a5a565b60405180910390fd5b612a8c565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612a8b57600a54612a3e83611285565b82612a49919061418f565b1115612a8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a81906149c8565b60405180910390fd5b5b5b5b5b5b6000612a9a30611285565b905060006009548210159050808015612abf5750600b60019054906101000a900460ff165b8015612ad85750600560149054906101000a900460ff16155b8015612b2e5750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612b845750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612bda5750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c1e576001600560146101000a81548160ff021916908315150217905550612c02613459565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612cd45750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612cde57600090505b6000811561305e57601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d4157506000601054115b15612ef357612d6e6064612d60601054886123ab90919063ffffffff16565b61239590919063ffffffff16565b905060105460115482612d8191906140bb565b612d8b9190614671565b60166000828254612d9c919061418f565b9250508190555060105460135482612db491906140bb565b612dbe9190614671565b60176000828254612dcf919061418f565b9250508190555060105460125482612de791906140bb565b612df19190614671565b6018819055506000612e226103e8612e14601454896123ab90919063ffffffff16565b61239590919063ffffffff16565b9050612e4e7f00000000000000000000000000000000000000000000000000000000000000008261361a565b8060156000828254612e60919061418f565b9250508190555060007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612ed457600080fd5b505af1158015612ee8573d6000803e3d6000fd5b505050505050613006565b601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f4e57506000600c54115b1561300557612f7b6064612f6d600c54886123ab90919063ffffffff16565b61239590919063ffffffff16565b9050600c54600d5482612f8e91906140bb565b612f989190614671565b60166000828254612fa9919061418f565b92505081905550600c54600e5482612fc191906140bb565b612fcb9190614671565b60176000828254612fdc919061418f565b92505081905550600c54600f5482612ff491906140bb565b612ffe9190614671565b6018819055505b5b600081111561304f5761301b8760185461361a565b6018546015600082825461302f919061418f565b9250508190555061304e8730601854846130499190614a7a565b6131da565b5b808561305b9190614a7a565b94505b6130698787876131da565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613249576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161324090614838565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036132b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132af906148ca565b60405180910390fd5b6132c38383836137f0565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613349576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161334090614b20565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133dc919061418f565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516134409190613cd8565b60405180910390a36134538484846137f5565b50505050565b600061346430611285565b90506000601754601654613478919061418f565b905060008083148061348a5750600082145b1561349757505050613618565b6009548311156134a75760095492505b60008390506134b5816137fa565b600047905060006134e3856134d5601654856123ab90919063ffffffff16565b61239590919063ffffffff16565b9050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161352b90614b71565b60006040518083038185875af1925050503d8060008114613568576040519150601f19603f3d011682016040523d82523d6000602084013e61356d565b606091505b505080945050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516135b990614b71565b60006040518083038185875af1925050503d80600081146135f6576040519150601f19603f3d011682016040523d82523d6000602084013e6135fb565b606091505b505080945050600060168190555060006017819055505050505050505b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613689576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161368090614bf8565b60405180910390fd5b613695826000836137f0565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561371b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161371290614c8a565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546137729190614a7a565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516137d79190613cd8565b60405180910390a36137eb836000846137f5565b505050565b505050565b505050565b6000600267ffffffffffffffff81111561381757613816614caa565b5b6040519080825280602002602001820160405280156138455781602001602082028036833780820191505090505b509050308160008151811061385d5761385c614cd9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613902573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139269190614d1d565b8160018151811061393a57613939614cd9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061399f307f0000000000000000000000000000000000000000000000000000000000000000846123c9565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613a01959493929190614e43565b600060405180830381600087803b158015613a1b57600080fd5b505af1158015613a2f573d6000803e3d6000fd5b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613a6282613a37565b9050919050565b613a7281613a57565b82525050565b6000602082019050613a8d6000830184613a69565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613acd578082015181840152602081019050613ab2565b60008484015250505050565b6000601f19601f8301169050919050565b6000613af582613a93565b613aff8185613a9e565b9350613b0f818560208601613aaf565b613b1881613ad9565b840191505092915050565b60006020820190508181036000830152613b3d8184613aea565b905092915050565b600080fd5b613b5381613a57565b8114613b5e57600080fd5b50565b600081359050613b7081613b4a565b92915050565b6000819050919050565b613b8981613b76565b8114613b9457600080fd5b50565b600081359050613ba681613b80565b92915050565b60008060408385031215613bc357613bc2613b45565b5b6000613bd185828601613b61565b9250506020613be285828601613b97565b9150509250929050565b60008115159050919050565b613c0181613bec565b82525050565b6000602082019050613c1c6000830184613bf8565b92915050565b600060208284031215613c3857613c37613b45565b5b6000613c4684828501613b61565b91505092915050565b6000819050919050565b6000613c74613c6f613c6a84613a37565b613c4f565b613a37565b9050919050565b6000613c8682613c59565b9050919050565b6000613c9882613c7b565b9050919050565b613ca881613c8d565b82525050565b6000602082019050613cc36000830184613c9f565b92915050565b613cd281613b76565b82525050565b6000602082019050613ced6000830184613cc9565b92915050565b600060208284031215613d0957613d08613b45565b5b6000613d1784828501613b97565b91505092915050565b600080600060608486031215613d3957613d38613b45565b5b6000613d4786828701613b61565b9350506020613d5886828701613b61565b9250506040613d6986828701613b97565b9150509250925092565b600060ff82169050919050565b613d8981613d73565b82525050565b6000602082019050613da46000830184613d80565b92915050565b613db381613bec565b8114613dbe57600080fd5b50565b600081359050613dd081613daa565b92915050565b60008060408385031215613ded57613dec613b45565b5b6000613dfb85828601613b61565b9250506020613e0c85828601613dc1565b9150509250929050565b600080600060608486031215613e2f57613e2e613b45565b5b6000613e3d86828701613b97565b9350506020613e4e86828701613b97565b9250506040613e5f86828701613b97565b9150509250925092565b600060208284031215613e7f57613e7e613b45565b5b6000613e8d84828501613dc1565b91505092915050565b6000613ea182613a57565b9050919050565b613eb181613e96565b8114613ebc57600080fd5b50565b600081359050613ece81613ea8565b92915050565b60008060408385031215613eeb57613eea613b45565b5b6000613ef985828601613ebf565b9250506020613f0a85828601613b97565b9150509250929050565b60008060408385031215613f2b57613f2a613b45565b5b6000613f3985828601613b61565b9250506020613f4a85828601613b61565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613f9b57607f821691505b602082108103613fae57613fad613f54565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613fea602083613a9e565b9150613ff582613fb4565b602082019050919050565b6000602082019050818103600083015261401981613fdd565b9050919050565b7f696e76616c6964206d61782074727820616d6f756e7400000000000000000000600082015250565b6000614056601683613a9e565b915061406182614020565b602082019050919050565b6000602082019050818103600083015261408581614049565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006140c682613b76565b91506140d183613b76565b92508282026140df81613b76565b915082820484148315176140f6576140f561408c565b5b5092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614159602883613a9e565b9150614164826140fd565b604082019050919050565b600060208201905081810360008301526141888161414c565b9050919050565b600061419a82613b76565b91506141a583613b76565b92508282019050808211156141bd576141bc61408c565b5b92915050565b7f4d41582042757920466565206973203235250000000000000000000000000000600082015250565b60006141f9601283613a9e565b9150614204826141c3565b602082019050919050565b60006020820190508181036000830152614228816141ec565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061428b603983613a9e565b91506142968261422f565b604082019050919050565b600060208201905081810360008301526142ba8161427e565b9050919050565b6000815190506142d081613b80565b92915050565b6000602082840312156142ec576142eb613b45565b5b60006142fa848285016142c1565b91505092915050565b7f496e76616c696420416d6f756e74000000000000000000000000000000000000600082015250565b6000614339600e83613a9e565b915061434482614303565b602082019050919050565b600060208201905081810360008301526143688161432c565b9050919050565b60006040820190506143846000830185613a69565b6143916020830184613cc9565b9392505050565b6000815190506143a781613daa565b92915050565b6000602082840312156143c3576143c2613b45565b5b60006143d184828501614398565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614436602583613a9e565b9150614441826143da565b604082019050919050565b6000602082019050818103600083015261446581614429565b9050919050565b7f4d41582053656c6c204665652069732032352500000000000000000000000000600082015250565b60006144a2601383613a9e565b91506144ad8261446c565b602082019050919050565b600060208201905081810360008301526144d181614495565b9050919050565b7f696e76616c6964206d61782077616c6c657420616d6f756e7400000000000000600082015250565b600061450e601983613a9e565b9150614519826144d8565b602082019050919050565b6000602082019050818103600083015261453d81614501565b9050919050565b7f696e76616c6964207377617020616d6f756e7400000000000000000000000000600082015250565b600061457a601383613a9e565b915061458582614544565b602082019050919050565b600060208201905081810360008301526145a98161456d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061460c602683613a9e565b9150614617826145b0565b604082019050919050565b6000602082019050818103600083015261463b816145ff565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061467c82613b76565b915061468783613b76565b92508261469757614696614642565b5b828204905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006146fe602483613a9e565b9150614709826146a2565b604082019050919050565b6000602082019050818103600083015261472d816146f1565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614790602283613a9e565b915061479b82614734565b604082019050919050565b600060208201905081810360008301526147bf81614783565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614822602583613a9e565b915061482d826147c6565b604082019050919050565b6000602082019050818103600083015261485181614815565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006148b4602383613a9e565b91506148bf82614858565b604082019050919050565b600060208201905081810360008301526148e3816148a7565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614946603583613a9e565b9150614951826148ea565b604082019050919050565b6000602082019050818103600083015261497581614939565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006149b2601383613a9e565b91506149bd8261497c565b602082019050919050565b600060208201905081810360008301526149e1816149a5565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614a44603683613a9e565b9150614a4f826149e8565b604082019050919050565b60006020820190508181036000830152614a7381614a37565b9050919050565b6000614a8582613b76565b9150614a9083613b76565b9250828203905081811115614aa857614aa761408c565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614b0a602683613a9e565b9150614b1582614aae565b604082019050919050565b60006020820190508181036000830152614b3981614afd565b9050919050565b600081905092915050565b50565b6000614b5b600083614b40565b9150614b6682614b4b565b600082019050919050565b6000614b7c82614b4e565b9150819050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614be2602183613a9e565b9150614bed82614b86565b604082019050919050565b60006020820190508181036000830152614c1181614bd5565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000614c74602283613a9e565b9150614c7f82614c18565b604082019050919050565b60006020820190508181036000830152614ca381614c67565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614d1781613b4a565b92915050565b600060208284031215614d3357614d32613b45565b5b6000614d4184828501614d08565b91505092915050565b6000819050919050565b6000614d6f614d6a614d6584614d4a565b613c4f565b613b76565b9050919050565b614d7f81614d54565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614dba81613a57565b82525050565b6000614dcc8383614db1565b60208301905092915050565b6000602082019050919050565b6000614df082614d85565b614dfa8185614d90565b9350614e0583614da1565b8060005b83811015614e36578151614e1d8882614dc0565b9750614e2883614dd8565b925050600181019050614e09565b5085935050505092915050565b600060a082019050614e586000830188613cc9565b614e656020830187614d76565b8181036040830152614e778186614de5565b9050614e866060830185613a69565b614e936080830184613cc9565b969550505050505056fea26469706673582212204a63f51ad52ab33019dec404492852f068c74c39397d31352e061df3dde14b2164736f6c63430008120033

Deployed Bytecode

0x60806040526004361061031e5760003560e01c80637571336a116101ab578063b62496f5116100f7578063d85ba06311610095578063e2f456051161006f578063e2f4560514610bff578063f14210a614610c2a578063f2fde38b14610c53578063f8b45b0514610c7c57610325565b8063d85ba06314610b6e578063dd62ed3e14610b99578063df3c058f14610bd657610325565b8063c18bc195116100d1578063c18bc19514610ab2578063c8c8ebe414610adb578063cc42cb4514610b06578063d257b34f14610b3157610325565b8063b62496f514610a23578063c024666814610a60578063c17b5b8c14610a8957610325565b8063924de9b7116101645780639e281a981161013e5780639e281a9814610955578063a457c2d71461097e578063a9059cbb146109bb578063b3c9423b146109f857610325565b8063924de9b7146108d857806395d89b41146109015780639a7a23d61461092c57610325565b80637571336a146107da5780637bce5a04146108035780638055dbd61461082e5780638095d564146108595780638da5cb5b1461088257806392136913146108ad57610325565b806349bd5a5e1161026a5780636a486a8e1161022357806370a08231116101fd57806370a0823114610732578063715018a61461076f57806371f2859914610786578063751039fc146107af57610325565b80636a486a8e146106b15780636dd06a20146106dc5780636ddd17131461070757610325565b806349bd5a5e1461059d5780634a62bb65146105c85780634fbee193146105f3578063538ba4f9146106305780635792244c1461065b5780636918bb531461068657610325565b806318160ddd116102d75780632800fe97116102b15780632800fe97146104e1578063313ce5671461050c5780633475ba2814610537578063395093511461056057610325565b806318160ddd14610450578063203e727e1461047b57806323b872dd146104a457610325565b806303fd2a451461032a57806306fdde0314610355578063095ea7b31461038057806310d5de53146103bd578063162ccb36146103fa5780631694505e1461042557610325565b3661032557005b600080fd5b34801561033657600080fd5b5061033f610ca7565b60405161034c9190613a78565b60405180910390f35b34801561036157600080fd5b5061036a610cad565b6040516103779190613b23565b60405180910390f35b34801561038c57600080fd5b506103a760048036038101906103a29190613bac565b610d3f565b6040516103b49190613c07565b60405180910390f35b3480156103c957600080fd5b506103e460048036038101906103df9190613c22565b610d5d565b6040516103f19190613c07565b60405180910390f35b34801561040657600080fd5b5061040f610d7d565b60405161041c9190613a78565b60405180910390f35b34801561043157600080fd5b5061043a610da3565b6040516104479190613cae565b60405180910390f35b34801561045c57600080fd5b50610465610dc7565b6040516104729190613cd8565b60405180910390f35b34801561048757600080fd5b506104a2600480360381019061049d9190613cf3565b610dd1565b005b3480156104b057600080fd5b506104cb60048036038101906104c69190613d20565b610eb9565b6040516104d89190613c07565b60405180910390f35b3480156104ed57600080fd5b506104f6610fb1565b6040516105039190613a78565b60405180910390f35b34801561051857600080fd5b50610521610fd7565b60405161052e9190613d8f565b60405180910390f35b34801561054357600080fd5b5061055e60048036038101906105599190613c22565b610fe0565b005b34801561056c57600080fd5b5061058760048036038101906105829190613bac565b61111c565b6040516105949190613c07565b60405180910390f35b3480156105a957600080fd5b506105b26111c8565b6040516105bf9190613a78565b60405180910390f35b3480156105d457600080fd5b506105dd6111ec565b6040516105ea9190613c07565b60405180910390f35b3480156105ff57600080fd5b5061061a60048036038101906106159190613c22565b6111ff565b6040516106279190613c07565b60405180910390f35b34801561063c57600080fd5b50610645611255565b6040516106529190613a78565b60405180910390f35b34801561066757600080fd5b5061067061125a565b60405161067d9190613cd8565b60405180910390f35b34801561069257600080fd5b5061069b611260565b6040516106a89190613cd8565b60405180910390f35b3480156106bd57600080fd5b506106c6611266565b6040516106d39190613cd8565b60405180910390f35b3480156106e857600080fd5b506106f161126c565b6040516106fe9190613cd8565b60405180910390f35b34801561071357600080fd5b5061071c611272565b6040516107299190613c07565b60405180910390f35b34801561073e57600080fd5b5061075960048036038101906107549190613c22565b611285565b6040516107669190613cd8565b60405180910390f35b34801561077b57600080fd5b506107846112cd565b005b34801561079257600080fd5b506107ad60048036038101906107a89190613cf3565b611355565b005b3480156107bb57600080fd5b506107c46113db565b6040516107d19190613c07565b60405180910390f35b3480156107e657600080fd5b5061080160048036038101906107fc9190613dd6565b61147b565b005b34801561080f57600080fd5b50610818611552565b6040516108259190613cd8565b60405180910390f35b34801561083a57600080fd5b50610843611558565b6040516108509190613cd8565b60405180910390f35b34801561086557600080fd5b50610880600480360381019061087b9190613e16565b61155e565b005b34801561088e57600080fd5b5061089761165d565b6040516108a49190613a78565b60405180910390f35b3480156108b957600080fd5b506108c2611687565b6040516108cf9190613cd8565b60405180910390f35b3480156108e457600080fd5b506108ff60048036038101906108fa9190613e69565b61168d565b005b34801561090d57600080fd5b50610916611726565b6040516109239190613b23565b60405180910390f35b34801561093857600080fd5b50610953600480360381019061094e9190613dd6565b6117b8565b005b34801561096157600080fd5b5061097c60048036038101906109779190613ed4565b6118d0565b005b34801561098a57600080fd5b506109a560048036038101906109a09190613bac565b611a8b565b6040516109b29190613c07565b60405180910390f35b3480156109c757600080fd5b506109e260048036038101906109dd9190613bac565b611b76565b6040516109ef9190613c07565b60405180910390f35b348015610a0457600080fd5b50610a0d611b94565b604051610a1a9190613cd8565b60405180910390f35b348015610a2f57600080fd5b50610a4a6004803603810190610a459190613c22565b611b9a565b604051610a579190613c07565b60405180910390f35b348015610a6c57600080fd5b50610a876004803603810190610a829190613dd6565b611bba565b005b348015610a9557600080fd5b50610ab06004803603810190610aab9190613e16565b611cdf565b005b348015610abe57600080fd5b50610ad96004803603810190610ad49190613cf3565b611dde565b005b348015610ae757600080fd5b50610af0611ec6565b604051610afd9190613cd8565b60405180910390f35b348015610b1257600080fd5b50610b1b611ecc565b604051610b289190613cd8565b60405180910390f35b348015610b3d57600080fd5b50610b586004803603810190610b539190613cf3565b611ed2565b604051610b659190613c07565b60405180910390f35b348015610b7a57600080fd5b50610b83611fc0565b604051610b909190613cd8565b60405180910390f35b348015610ba557600080fd5b50610bc06004803603810190610bbb9190613f14565b611fc6565b604051610bcd9190613cd8565b60405180910390f35b348015610be257600080fd5b50610bfd6004803603810190610bf89190613c22565b61204d565b005b348015610c0b57600080fd5b50610c14612189565b604051610c219190613cd8565b60405180910390f35b348015610c3657600080fd5b50610c516004803603810190610c4c9190613cf3565b61218f565b005b348015610c5f57600080fd5b50610c7a6004803603810190610c759190613c22565b612298565b005b348015610c8857600080fd5b50610c9161238f565b604051610c9e9190613cd8565b60405180910390f35b61dead81565b606060038054610cbc90613f83565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce890613f83565b8015610d355780601f10610d0a57610100808354040283529160200191610d35565b820191906000526020600020905b815481529060010190602001808311610d1857829003601f168201915b5050505050905090565b6000610d53610d4c6123c1565b84846123c9565b6001905092915050565b601a6020528060005260406000206000915054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610dd96123c1565b73ffffffffffffffffffffffffffffffffffffffff16610df761165d565b73ffffffffffffffffffffffffffffffffffffffff1614610e4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4490614000565b60405180910390fd5b6b0d92bb98e11ded5db3e00000811015610e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e939061406c565b60405180910390fd5b670de0b6b3a764000081610eb091906140bb565b60088190555050565b6000610ec6848484612592565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f116123c1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610f91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f889061416f565b60405180910390fd5b610fa585610f9d6123c1565b8584036123c9565b60019150509392505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006012905090565b610fe86123c1565b73ffffffffffffffffffffffffffffffffffffffff1661100661165d565b73ffffffffffffffffffffffffffffffffffffffff161461105c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105390614000565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f841c66122369dc517e99f0b979e5aca5bad6d1adca3f413a1934f533a690c35e60405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006111be6111296123c1565b8484600160006111376123c1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111b9919061418f565b6123c9565b6001905092915050565b7f000000000000000000000000704877b9e394430a2909b2c5924e819ab892c56481565b600b60009054906101000a900460ff1681565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600081565b60145481565b600e5481565b60105481565b60125481565b600b60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112d56123c1565b73ffffffffffffffffffffffffffffffffffffffff166112f361165d565b73ffffffffffffffffffffffffffffffffffffffff1614611349576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134090614000565b60405180910390fd5b6113536000613073565b565b61135d6123c1565b73ffffffffffffffffffffffffffffffffffffffff1661137b61165d565b73ffffffffffffffffffffffffffffffffffffffff16146113d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c890614000565b60405180910390fd5b8060148190555050565b60006113e56123c1565b73ffffffffffffffffffffffffffffffffffffffff1661140361165d565b73ffffffffffffffffffffffffffffffffffffffff1614611459576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145090614000565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6114836123c1565b73ffffffffffffffffffffffffffffffffffffffff166114a161165d565b73ffffffffffffffffffffffffffffffffffffffff16146114f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ee90614000565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d5481565b60155481565b6115666123c1565b73ffffffffffffffffffffffffffffffffffffffff1661158461165d565b73ffffffffffffffffffffffffffffffffffffffff16146115da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d190614000565b60405180910390fd5b82600d8190555081600f8190555080600e81905550600f54600e54600d54611602919061418f565b61160c919061418f565b600c819055506019600c541115611658576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164f9061420f565b60405180910390fd5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60115481565b6116956123c1565b73ffffffffffffffffffffffffffffffffffffffff166116b361165d565b73ffffffffffffffffffffffffffffffffffffffff1614611709576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170090614000565b60405180910390fd5b80600b60016101000a81548160ff02191690831515021790555050565b60606004805461173590613f83565b80601f016020809104026020016040519081016040528092919081815260200182805461176190613f83565b80156117ae5780601f10611783576101008083540402835291602001916117ae565b820191906000526020600020905b81548152906001019060200180831161179157829003601f168201915b5050505050905090565b6117c06123c1565b73ffffffffffffffffffffffffffffffffffffffff166117de61165d565b73ffffffffffffffffffffffffffffffffffffffff1614611834576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182b90614000565b60405180910390fd5b7f000000000000000000000000704877b9e394430a2909b2c5924e819ab892c56473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b9906142a1565b60405180910390fd5b6118cc8282613139565b5050565b6118d86123c1565b73ffffffffffffffffffffffffffffffffffffffff166118f661165d565b73ffffffffffffffffffffffffffffffffffffffff161461194c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194390614000565b60405180910390fd5b808273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016119869190613a78565b602060405180830381865afa1580156119a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c791906142d6565b1015611a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ff9061434f565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611a4392919061436f565b6020604051808303816000875af1158015611a62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a8691906143ad565b505050565b60008060016000611a9a6123c1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611b57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4e9061444c565b60405180910390fd5b611b6b611b626123c1565b858584036123c9565b600191505092915050565b6000611b8a611b836123c1565b8484612592565b6001905092915050565b600f5481565b601b6020528060005260406000206000915054906101000a900460ff1681565b611bc26123c1565b73ffffffffffffffffffffffffffffffffffffffff16611be061165d565b73ffffffffffffffffffffffffffffffffffffffff1614611c36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2d90614000565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611cd39190613c07565b60405180910390a25050565b611ce76123c1565b73ffffffffffffffffffffffffffffffffffffffff16611d0561165d565b73ffffffffffffffffffffffffffffffffffffffff1614611d5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5290614000565b60405180910390fd5b826011819055508160138190555080601281905550601254601354601154611d83919061418f565b611d8d919061418f565b60108190555060196010541115611dd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd0906144b8565b60405180910390fd5b505050565b611de66123c1565b73ffffffffffffffffffffffffffffffffffffffff16611e0461165d565b73ffffffffffffffffffffffffffffffffffffffff1614611e5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5190614000565b60405180910390fd5b6b28b832cabf1b35806a680000811015611ea9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea090614524565b60405180910390fd5b670de0b6b3a764000081611ebd91906140bb565b600a8190555050565b60085481565b60135481565b6000611edc6123c1565b73ffffffffffffffffffffffffffffffffffffffff16611efa61165d565b73ffffffffffffffffffffffffffffffffffffffff1614611f50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4790614000565b60405180910390fd5b69021e19e0c9bab2400000821015611f9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9490614590565b60405180910390fd5b670de0b6b3a764000082611fb191906140bb565b60098190555060019050919050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6120556123c1565b73ffffffffffffffffffffffffffffffffffffffff1661207361165d565b73ffffffffffffffffffffffffffffffffffffffff16146120c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c090614000565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f6836954c8acdbeeb85a47ecdb1feb7be68a4a5a91b5a34771ca7d7b758aba2ae60405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60095481565b6121976123c1565b73ffffffffffffffffffffffffffffffffffffffff166121b561165d565b73ffffffffffffffffffffffffffffffffffffffff161461220b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220290614000565b60405180910390fd5b8047101561224e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122459061434f565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612294573d6000803e3d6000fd5b5050565b6122a06123c1565b73ffffffffffffffffffffffffffffffffffffffff166122be61165d565b73ffffffffffffffffffffffffffffffffffffffff1614612314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230b90614000565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612383576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237a90614622565b60405180910390fd5b61238c81613073565b50565b600a5481565b600081836123a39190614671565b905092915050565b600081836123b991906140bb565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242f90614714565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249e906147a6565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125859190613cd8565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f890614838565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612670576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612667906148ca565b60405180910390fd5b6000810361268957612684838360006131da565b61306e565b600b60009054906101000a900460ff1615612a8f576126a661165d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561271457506126e461165d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561274d5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612787575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127a05750600560149054906101000a900460ff16155b15612a8e57601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128485750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156128ef57600854811115612892576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128899061495c565b60405180910390fd5b600a5461289e83611285565b826128a9919061418f565b11156128ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e1906149c8565b60405180910390fd5b612a8d565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129925750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129e1576008548111156129dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d390614a5a565b60405180910390fd5b612a8c565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612a8b57600a54612a3e83611285565b82612a49919061418f565b1115612a8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a81906149c8565b60405180910390fd5b5b5b5b5b5b6000612a9a30611285565b905060006009548210159050808015612abf5750600b60019054906101000a900460ff165b8015612ad85750600560149054906101000a900460ff16155b8015612b2e5750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612b845750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612bda5750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c1e576001600560146101000a81548160ff021916908315150217905550612c02613459565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612cd45750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612cde57600090505b6000811561305e57601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d4157506000601054115b15612ef357612d6e6064612d60601054886123ab90919063ffffffff16565b61239590919063ffffffff16565b905060105460115482612d8191906140bb565b612d8b9190614671565b60166000828254612d9c919061418f565b9250508190555060105460135482612db491906140bb565b612dbe9190614671565b60176000828254612dcf919061418f565b9250508190555060105460125482612de791906140bb565b612df19190614671565b6018819055506000612e226103e8612e14601454896123ab90919063ffffffff16565b61239590919063ffffffff16565b9050612e4e7f000000000000000000000000704877b9e394430a2909b2c5924e819ab892c5648261361a565b8060156000828254612e60919061418f565b9250508190555060007f000000000000000000000000704877b9e394430a2909b2c5924e819ab892c56490508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612ed457600080fd5b505af1158015612ee8573d6000803e3d6000fd5b505050505050613006565b601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f4e57506000600c54115b1561300557612f7b6064612f6d600c54886123ab90919063ffffffff16565b61239590919063ffffffff16565b9050600c54600d5482612f8e91906140bb565b612f989190614671565b60166000828254612fa9919061418f565b92505081905550600c54600e5482612fc191906140bb565b612fcb9190614671565b60176000828254612fdc919061418f565b92505081905550600c54600f5482612ff491906140bb565b612ffe9190614671565b6018819055505b5b600081111561304f5761301b8760185461361a565b6018546015600082825461302f919061418f565b9250508190555061304e8730601854846130499190614a7a565b6131da565b5b808561305b9190614a7a565b94505b6130698787876131da565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613249576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161324090614838565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036132b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132af906148ca565b60405180910390fd5b6132c38383836137f0565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613349576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161334090614b20565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133dc919061418f565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516134409190613cd8565b60405180910390a36134538484846137f5565b50505050565b600061346430611285565b90506000601754601654613478919061418f565b905060008083148061348a5750600082145b1561349757505050613618565b6009548311156134a75760095492505b60008390506134b5816137fa565b600047905060006134e3856134d5601654856123ab90919063ffffffff16565b61239590919063ffffffff16565b9050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161352b90614b71565b60006040518083038185875af1925050503d8060008114613568576040519150601f19603f3d011682016040523d82523d6000602084013e61356d565b606091505b505080945050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516135b990614b71565b60006040518083038185875af1925050503d80600081146135f6576040519150601f19603f3d011682016040523d82523d6000602084013e6135fb565b606091505b505080945050600060168190555060006017819055505050505050505b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613689576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161368090614bf8565b60405180910390fd5b613695826000836137f0565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561371b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161371290614c8a565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546137729190614a7a565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516137d79190613cd8565b60405180910390a36137eb836000846137f5565b505050565b505050565b505050565b6000600267ffffffffffffffff81111561381757613816614caa565b5b6040519080825280602002602001820160405280156138455781602001602082028036833780820191505090505b509050308160008151811061385d5761385c614cd9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613902573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139269190614d1d565b8160018151811061393a57613939614cd9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061399f307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846123c9565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613a01959493929190614e43565b600060405180830381600087803b158015613a1b57600080fd5b505af1158015613a2f573d6000803e3d6000fd5b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613a6282613a37565b9050919050565b613a7281613a57565b82525050565b6000602082019050613a8d6000830184613a69565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613acd578082015181840152602081019050613ab2565b60008484015250505050565b6000601f19601f8301169050919050565b6000613af582613a93565b613aff8185613a9e565b9350613b0f818560208601613aaf565b613b1881613ad9565b840191505092915050565b60006020820190508181036000830152613b3d8184613aea565b905092915050565b600080fd5b613b5381613a57565b8114613b5e57600080fd5b50565b600081359050613b7081613b4a565b92915050565b6000819050919050565b613b8981613b76565b8114613b9457600080fd5b50565b600081359050613ba681613b80565b92915050565b60008060408385031215613bc357613bc2613b45565b5b6000613bd185828601613b61565b9250506020613be285828601613b97565b9150509250929050565b60008115159050919050565b613c0181613bec565b82525050565b6000602082019050613c1c6000830184613bf8565b92915050565b600060208284031215613c3857613c37613b45565b5b6000613c4684828501613b61565b91505092915050565b6000819050919050565b6000613c74613c6f613c6a84613a37565b613c4f565b613a37565b9050919050565b6000613c8682613c59565b9050919050565b6000613c9882613c7b565b9050919050565b613ca881613c8d565b82525050565b6000602082019050613cc36000830184613c9f565b92915050565b613cd281613b76565b82525050565b6000602082019050613ced6000830184613cc9565b92915050565b600060208284031215613d0957613d08613b45565b5b6000613d1784828501613b97565b91505092915050565b600080600060608486031215613d3957613d38613b45565b5b6000613d4786828701613b61565b9350506020613d5886828701613b61565b9250506040613d6986828701613b97565b9150509250925092565b600060ff82169050919050565b613d8981613d73565b82525050565b6000602082019050613da46000830184613d80565b92915050565b613db381613bec565b8114613dbe57600080fd5b50565b600081359050613dd081613daa565b92915050565b60008060408385031215613ded57613dec613b45565b5b6000613dfb85828601613b61565b9250506020613e0c85828601613dc1565b9150509250929050565b600080600060608486031215613e2f57613e2e613b45565b5b6000613e3d86828701613b97565b9350506020613e4e86828701613b97565b9250506040613e5f86828701613b97565b9150509250925092565b600060208284031215613e7f57613e7e613b45565b5b6000613e8d84828501613dc1565b91505092915050565b6000613ea182613a57565b9050919050565b613eb181613e96565b8114613ebc57600080fd5b50565b600081359050613ece81613ea8565b92915050565b60008060408385031215613eeb57613eea613b45565b5b6000613ef985828601613ebf565b9250506020613f0a85828601613b97565b9150509250929050565b60008060408385031215613f2b57613f2a613b45565b5b6000613f3985828601613b61565b9250506020613f4a85828601613b61565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613f9b57607f821691505b602082108103613fae57613fad613f54565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613fea602083613a9e565b9150613ff582613fb4565b602082019050919050565b6000602082019050818103600083015261401981613fdd565b9050919050565b7f696e76616c6964206d61782074727820616d6f756e7400000000000000000000600082015250565b6000614056601683613a9e565b915061406182614020565b602082019050919050565b6000602082019050818103600083015261408581614049565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006140c682613b76565b91506140d183613b76565b92508282026140df81613b76565b915082820484148315176140f6576140f561408c565b5b5092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614159602883613a9e565b9150614164826140fd565b604082019050919050565b600060208201905081810360008301526141888161414c565b9050919050565b600061419a82613b76565b91506141a583613b76565b92508282019050808211156141bd576141bc61408c565b5b92915050565b7f4d41582042757920466565206973203235250000000000000000000000000000600082015250565b60006141f9601283613a9e565b9150614204826141c3565b602082019050919050565b60006020820190508181036000830152614228816141ec565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061428b603983613a9e565b91506142968261422f565b604082019050919050565b600060208201905081810360008301526142ba8161427e565b9050919050565b6000815190506142d081613b80565b92915050565b6000602082840312156142ec576142eb613b45565b5b60006142fa848285016142c1565b91505092915050565b7f496e76616c696420416d6f756e74000000000000000000000000000000000000600082015250565b6000614339600e83613a9e565b915061434482614303565b602082019050919050565b600060208201905081810360008301526143688161432c565b9050919050565b60006040820190506143846000830185613a69565b6143916020830184613cc9565b9392505050565b6000815190506143a781613daa565b92915050565b6000602082840312156143c3576143c2613b45565b5b60006143d184828501614398565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614436602583613a9e565b9150614441826143da565b604082019050919050565b6000602082019050818103600083015261446581614429565b9050919050565b7f4d41582053656c6c204665652069732032352500000000000000000000000000600082015250565b60006144a2601383613a9e565b91506144ad8261446c565b602082019050919050565b600060208201905081810360008301526144d181614495565b9050919050565b7f696e76616c6964206d61782077616c6c657420616d6f756e7400000000000000600082015250565b600061450e601983613a9e565b9150614519826144d8565b602082019050919050565b6000602082019050818103600083015261453d81614501565b9050919050565b7f696e76616c6964207377617020616d6f756e7400000000000000000000000000600082015250565b600061457a601383613a9e565b915061458582614544565b602082019050919050565b600060208201905081810360008301526145a98161456d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061460c602683613a9e565b9150614617826145b0565b604082019050919050565b6000602082019050818103600083015261463b816145ff565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061467c82613b76565b915061468783613b76565b92508261469757614696614642565b5b828204905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006146fe602483613a9e565b9150614709826146a2565b604082019050919050565b6000602082019050818103600083015261472d816146f1565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614790602283613a9e565b915061479b82614734565b604082019050919050565b600060208201905081810360008301526147bf81614783565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614822602583613a9e565b915061482d826147c6565b604082019050919050565b6000602082019050818103600083015261485181614815565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006148b4602383613a9e565b91506148bf82614858565b604082019050919050565b600060208201905081810360008301526148e3816148a7565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614946603583613a9e565b9150614951826148ea565b604082019050919050565b6000602082019050818103600083015261497581614939565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006149b2601383613a9e565b91506149bd8261497c565b602082019050919050565b600060208201905081810360008301526149e1816149a5565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614a44603683613a9e565b9150614a4f826149e8565b604082019050919050565b60006020820190508181036000830152614a7381614a37565b9050919050565b6000614a8582613b76565b9150614a9083613b76565b9250828203905081811115614aa857614aa761408c565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614b0a602683613a9e565b9150614b1582614aae565b604082019050919050565b60006020820190508181036000830152614b3981614afd565b9050919050565b600081905092915050565b50565b6000614b5b600083614b40565b9150614b6682614b4b565b600082019050919050565b6000614b7c82614b4e565b9150819050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614be2602183613a9e565b9150614bed82614b86565b604082019050919050565b60006020820190508181036000830152614c1181614bd5565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000614c74602283613a9e565b9150614c7f82614c18565b604082019050919050565b60006020820190508181036000830152614ca381614c67565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614d1781613b4a565b92915050565b600060208284031215614d3357614d32613b45565b5b6000614d4184828501614d08565b91505092915050565b6000819050919050565b6000614d6f614d6a614d6584614d4a565b613c4f565b613b76565b9050919050565b614d7f81614d54565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614dba81613a57565b82525050565b6000614dcc8383614db1565b60208301905092915050565b6000602082019050919050565b6000614df082614d85565b614dfa8185614d90565b9350614e0583614da1565b8060005b83811015614e36578151614e1d8882614dc0565b9750614e2883614dd8565b925050600181019050614e09565b5085935050505092915050565b600060a082019050614e586000830188613cc9565b614e656020830187614d76565b8181036040830152614e778186614de5565b9050614e866060830185613a69565b614e936080830184613cc9565b969550505050505056fea26469706673582212204a63f51ad52ab33019dec404492852f068c74c39397d31352e061df3dde14b2164736f6c63430008120033

Deployed Bytecode Sourcemap

19585:14037:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19763:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5635:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7032:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20896:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19902:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19660:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6124:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23845:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7234:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19938:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5966:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26462:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7771:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19718:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20095:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26663:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19816:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20550:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20253:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20339:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20420:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20135:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6295:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2067:103;;;;;;;;;;;;;:::i;:::-;;33508:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23390:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24251:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20212:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20619:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24624:424;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1759:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20378:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24516:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5854:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25727:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33291:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8069:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6446:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20296:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21117:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25537:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25056:473;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24051:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19980:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20462:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23581:254;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20174:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6709:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26237:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20022:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33100:183;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2325:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20062:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19763:46;19802:6;19763:46;:::o;5635:100::-;5689:13;5722:5;5715:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5635:100;:::o;7032:194::-;7140:4;7157:39;7166:12;:10;:12::i;:::-;7180:7;7189:6;7157:8;:39::i;:::-;7214:4;7207:11;;7032:194;;;;:::o;20896:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;19902:29::-;;;;;;;;;;;;;:::o;19660:51::-;;;:::o;6124:108::-;6185:7;6212:12;;6205:19;;6124:108;:::o;23845:198::-;1990:12;:10;:12::i;:::-;1979:23;;:7;:5;:7::i;:::-;:23;;;1971:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23937:19:::1;23927:6;:29;;23919:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;24026:8;24016:6;:19;;;;:::i;:::-;23993:20;:42;;;;23845:198:::0;:::o;7234:529::-;7374:4;7391:36;7401:6;7409:9;7420:6;7391:9;:36::i;:::-;7440:24;7467:11;:19;7479:6;7467:19;;;;;;;;;;;;;;;:33;7487:12;:10;:12::i;:::-;7467:33;;;;;;;;;;;;;;;;7440:60;;7553:6;7533:16;:26;;7511:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;7663:57;7672:6;7680:12;:10;:12::i;:::-;7713:6;7694:16;:25;7663:8;:57::i;:::-;7751:4;7744:11;;;7234:529;;;;;:::o;19938:33::-;;;;;;;;;;;;;:::o;5966:93::-;6024:5;6049:2;6042:9;;5966:93;:::o;26462:193::-;1990:12;:10;:12::i;:::-;1979:23;;:7;:5;:7::i;:::-;:23;;;1971:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26587:18:::1;;;;;;;;;;;26550:56;;26576:9;26550:56;;;;;;;;;;;;26638:9;26617:18;;:30;;;;;;;;;;;;;;;;;;26462:193:::0;:::o;7771:290::-;7884:4;7901:130;7924:12;:10;:12::i;:::-;7951:7;8010:10;7973:11;:25;7985:12;:10;:12::i;:::-;7973:25;;;;;;;;;;;;;;;:34;7999:7;7973:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;7901:8;:130::i;:::-;8049:4;8042:11;;7771:290;;;;:::o;19718:38::-;;;:::o;20095:33::-;;;;;;;;;;;;;:::o;26663:126::-;26729:4;26753:19;:28;26773:7;26753:28;;;;;;;;;;;;;;;;;;;;;;;;;26746:35;;26663:126;;;:::o;19816:49::-;19863:1;19816:49;:::o;20550:32::-;;;;:::o;20253:36::-;;;;:::o;20339:32::-;;;;:::o;20420:35::-;;;;:::o;20135:30::-;;;;;;;;;;;;;:::o;6295:143::-;6385:7;6412:9;:18;6422:7;6412:18;;;;;;;;;;;;;;;;6405:25;;6295:143;;;:::o;2067:103::-;1990:12;:10;:12::i;:::-;1979:23;;:7;:5;:7::i;:::-;:23;;;1971:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2132:30:::1;2159:1;2132:18;:30::i;:::-;2067:103::o:0;33508:111::-;1990:12;:10;:12::i;:::-;1979:23;;:7;:5;:7::i;:::-;:23;;;1971:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33598:13:::1;33583:12;:28;;;;33508:111:::0;:::o;23390:121::-;23442:4;1990:12;:10;:12::i;:::-;1979:23;;:7;:5;:7::i;:::-;:23;;;1971:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23476:5:::1;23459:14;;:22;;;;;;;;;;;;;;;;;;23499:4;23492:11;;23390:121:::0;:::o;24251:169::-;1990:12;:10;:12::i;:::-;1979:23;;:7;:5;:7::i;:::-;:23;;;1971:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24408:4:::1;24366:31;:39;24398:6;24366:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;24251:169:::0;;:::o;20212:34::-;;;;:::o;20619:25::-;;;;:::o;24624:424::-;1990:12;:10;:12::i;:::-;1979:23;;:7;:5;:7::i;:::-;:23;;;1971:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24800:13:::1;24782:15;:31;;;;24842:13;24824:15;:31;;;;24886:15;24866:17;:35;;;;24965:15;;24945:17;;24927:15;;:35;;;;:::i;:::-;:53;;;;:::i;:::-;24912:12;:68;;;;25015:2;24999:12;;:18;;24991:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;24624:424:::0;;;:::o;1759:87::-;1805:7;1832:6;;;;;;;;;;;1825:13;;1759:87;:::o;20378:35::-;;;;:::o;24516:100::-;1990:12;:10;:12::i;:::-;1979:23;;:7;:5;:7::i;:::-;:23;;;1971:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24601:7:::1;24587:11;;:21;;;;;;;;;;;;;;;;;;24516:100:::0;:::o;5854:104::-;5910:13;5943:7;5936:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5854:104;:::o;25727:306::-;1990:12;:10;:12::i;:::-;1979:23;;:7;:5;:7::i;:::-;:23;;;1971:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25873:13:::1;25865:21;;:4;:21;;::::0;25843:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;25984:41;26013:4;26019:5;25984:28;:41::i;:::-;25727:306:::0;;:::o;33291:209::-;1990:12;:10;:12::i;:::-;1979:23;;:7;:5;:7::i;:::-;:23;;;1971:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33419:7:::1;33384:6;:16;;;33409:4;33384:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:42;;33376:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;33456:6;:15;;;33472:10;33484:7;33456:36;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33291:209:::0;;:::o;8069:475::-;8187:4;8204:24;8231:11;:25;8243:12;:10;:12::i;:::-;8231:25;;;;;;;;;;;;;;;:34;8257:7;8231:34;;;;;;;;;;;;;;;;8204:61;;8318:15;8298:16;:35;;8276:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;8434:67;8443:12;:10;:12::i;:::-;8457:7;8485:15;8466:16;:34;8434:8;:67::i;:::-;8532:4;8525:11;;;8069:475;;;;:::o;6446:200::-;6557:4;6574:42;6584:12;:10;:12::i;:::-;6598:9;6609:6;6574:9;:42::i;:::-;6634:4;6627:11;;6446:200;;;;:::o;20296:34::-;;;;:::o;21117:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;25537:182::-;1990:12;:10;:12::i;:::-;1979:23;;:7;:5;:7::i;:::-;:23;;;1971:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25653:8:::1;25622:19;:28;25642:7;25622:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;25693:7;25677:34;;;25702:8;25677:34;;;;;;:::i;:::-;;;;;;;;25537:182:::0;;:::o;25056:473::-;1990:12;:10;:12::i;:::-;1979:23;;:7;:5;:7::i;:::-;:23;;;1971:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25234:13:::1;25215:16;:32;;;;25279:15;25258:18;:36;;;;25324:13;25305:16;:32;;;;25443:16;;25409:18;;25377:16;;:50;;;;:::i;:::-;:82;;;;:::i;:::-;25348:13;:111;;;;25495:2;25478:13;;:19;;25470:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;25056:473:::0;;;:::o;24051:192::-;1990:12;:10;:12::i;:::-;1979:23;;:7;:5;:7::i;:::-;:23;;;1971:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24144:20:::1;24135:6;:29;;24127:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;24226:8;24216:6;:19;;;;:::i;:::-;24204:9;:31;;;;24051:192:::0;:::o;19980:35::-;;;;:::o;20462:37::-;;;;:::o;23581:254::-;23678:4;1990:12;:10;:12::i;:::-;1979:23;;:7;:5;:7::i;:::-;:23;;;1971:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23716:12:::1;23703:9;:25;;23695:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;23796:8;23783:9;:22;;;;:::i;:::-;23762:18;:43;;;;23823:4;23816:11;;23581:254:::0;;;:::o;20174:31::-;;;;:::o;6709:176::-;6823:7;6850:11;:18;6862:5;6850:18;;;;;;;;;;;;;;;:27;6869:7;6850:27;;;;;;;;;;;;;;;;6843:34;;6709:176;;;;:::o;26237:217::-;1990:12;:10;:12::i;:::-;1979:23;;:7;:5;:7::i;:::-;:23;;;1971:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26386:14:::1;;;;;;;;;;;26345:56;;26367:17;26345:56;;;;;;;;;;;;26429:17;26412:14;;:34;;;;;;;;;;;;;;;;;;26237:217:::0;:::o;20022:33::-;;;;:::o;33100:183::-;1990:12;:10;:12::i;:::-;1979:23;;:7;:5;:7::i;:::-;:23;;;1971:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33201:7:::1;33176:21;:32;;33168:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;33246:10;33238:28;;:37;33267:7;33238:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;33100:183:::0;:::o;2325:238::-;1990:12;:10;:12::i;:::-;1979:23;;:7;:5;:7::i;:::-;:23;;;1971:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2448:1:::1;2428:22;;:8;:22;;::::0;2406:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2527:28;2546:8;2527:18;:28::i;:::-;2325:238:::0;:::o;20062:24::-;;;;:::o;13543:98::-;13601:7;13632:1;13628;:5;;;;:::i;:::-;13621:12;;13543:98;;;;:::o;13437:::-;13495:7;13526:1;13522;:5;;;;:::i;:::-;13515:12;;13437:98;;;;:::o;1117:::-;1170:7;1197:10;1190:17;;1117:98;:::o;10336:380::-;10489:1;10472:19;;:5;:19;;;10464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10570:1;10551:21;;:7;:21;;;10543:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10654:6;10624:11;:18;10636:5;10624:18;;;;;;;;;;;;;;;:27;10643:7;10624:27;;;;;;;;;;;;;;;:36;;;;10692:7;10676:32;;10685:5;10676:32;;;10701:6;10676:32;;;;;;:::i;:::-;;;;;;;;10336:380;;;:::o;26797:4206::-;26945:1;26929:18;;:4;:18;;;26921:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27022:1;27008:16;;:2;:16;;;27000:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;27089:1;27079:6;:11;27075:93;;27107:28;27123:4;27129:2;27133:1;27107:15;:28::i;:::-;27150:7;;27075:93;27184:14;;;;;;;;;;;27180:1451;;;27245:7;:5;:7::i;:::-;27237:15;;:4;:15;;;;:49;;;;;27279:7;:5;:7::i;:::-;27273:13;;:2;:13;;;;27237:49;:86;;;;;27321:1;27307:16;;:2;:16;;;;27237:86;:128;;;;;27358:6;27344:21;;:2;:21;;;;27237:128;:158;;;;;27387:8;;;;;;;;;;;27386:9;27237:158;27215:1405;;;27484:25;:31;27510:4;27484:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;27541:31;:35;27573:2;27541:35;;;;;;;;;;;;;;;;;;;;;;;;;27540:36;27484:92;27458:1147;;;27663:20;;27653:6;:30;;27619:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;27871:9;;27854:13;27864:2;27854:9;:13::i;:::-;27845:6;:22;;;;:::i;:::-;:35;;27811:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;27458:1147;;;28049:25;:29;28075:2;28049:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;28104:31;:37;28136:4;28104:37;;;;;;;;;;;;;;;;;;;;;;;;;28103:38;28049:92;28023:582;;;28228:20;;28218:6;:30;;28184:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;28023:582;;;28385:31;:35;28417:2;28385:35;;;;;;;;;;;;;;;;;;;;;;;;;28380:225;;28505:9;;28488:13;28498:2;28488:9;:13::i;:::-;28479:6;:22;;;;:::i;:::-;:35;;28445:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;28380:225;28023:582;27458:1147;27215:1405;27180:1451;28643:28;28674:24;28692:4;28674:9;:24::i;:::-;28643:55;;28711:12;28750:18;;28726:20;:42;;28711:57;;28799:7;:35;;;;;28823:11;;;;;;;;;;;28799:35;:61;;;;;28852:8;;;;;;;;;;;28851:9;28799:61;:110;;;;;28878:25;:31;28904:4;28878:31;;;;;;;;;;;;;;;;;;;;;;;;;28877:32;28799:110;:153;;;;;28927:19;:25;28947:4;28927:25;;;;;;;;;;;;;;;;;;;;;;;;;28926:26;28799:153;:194;;;;;28970:19;:23;28990:2;28970:23;;;;;;;;;;;;;;;;;;;;;;;;;28969:24;28799:194;28781:326;;;29031:4;29020:8;;:15;;;;;;;;;;;;;;;;;;29052:10;:8;:10::i;:::-;29090:5;29079:8;;:16;;;;;;;;;;;;;;;;;;28781:326;29119:12;29135:8;;;;;;;;;;;29134:9;29119:24;;29245:19;:25;29265:4;29245:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;29274:19;:23;29294:2;29274:23;;;;;;;;;;;;;;;;;;;;;;;;;29245:52;29241:100;;;29324:5;29314:15;;29241:100;29353:12;29458:7;29454:1496;;;29510:25;:29;29536:2;29510:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;29559:1;29543:13;;:17;29510:50;29506:1173;;;29588:34;29618:3;29588:25;29599:13;;29588:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;29581:41;;29691:13;;29671:16;;29664:4;:23;;;;:::i;:::-;29663:41;;;;:::i;:::-;29641:18;;:63;;;;;;;:::i;:::-;;;;;;;;29819:13;;29776:18;;29769:4;:25;;;;:::i;:::-;29768:64;;;;:::i;:::-;29723:20;;:109;;;;;;;:::i;:::-;;;;;;;;29900:13;;29880:16;;29873:4;:23;;;;:::i;:::-;29872:41;;;;:::i;:::-;29851:18;:62;;;;29967:14;29984:34;30013:4;29984:24;29995:12;;29984:6;:10;;:24;;;;:::i;:::-;:28;;:34;;;;:::i;:::-;29967:51;;30037:28;30043:13;30058:6;30037:5;:28::i;:::-;30098:6;30084:10;;:20;;;;;;;:::i;:::-;;;;;;;;30123:19;30160:13;30123:51;;30193:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29562:658;;29506:1173;;;30266:25;:31;30292:4;30266:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;30316:1;30301:12;;:16;30266:51;30262:417;;;30345:33;30374:3;30345:24;30356:12;;30345:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;30338:40;;30446:12;;30427:15;;30420:4;:22;;;;:::i;:::-;30419:39;;;;:::i;:::-;30397:18;;:61;;;;;;;:::i;:::-;;;;;;;;30572:12;;30530:17;;30523:4;:24;;;;:::i;:::-;30522:62;;;;:::i;:::-;30477:20;;:107;;;;;;;:::i;:::-;;;;;;;;30651:12;;30632:15;;30625:4;:22;;;;:::i;:::-;30624:39;;;;:::i;:::-;30603:18;:60;;;;30262:417;29506:1173;30706:1;30699:4;:8;30695:213;;;30728:31;30734:4;30740:18;;30728:5;:31::i;:::-;30792:18;;30778:10;;:32;;;;;;;:::i;:::-;;;;;;;;30829:63;30845:4;30859;30873:18;;30866:4;:25;;;;:::i;:::-;30829:15;:63::i;:::-;30695:213;30934:4;30924:14;;;;;:::i;:::-;;;29454:1496;30962:33;30978:4;30984:2;30988:6;30962:15;:33::i;:::-;26910:4093;;;;26797:4206;;;;:::o;2723:191::-;2797:16;2816:6;;;;;;;;;;;2797:25;;2842:8;2833:6;;:17;;;;;;;;;;;;;;;;;;2897:8;2866:40;;2887:8;2866:40;;;;;;;;;;;;2786:128;2723:191;:::o;26041:188::-;26158:5;26124:25;:31;26150:4;26124:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;26215:5;26181:40;;26209:4;26181:40;;;;;;;;;;;;26041:188;;:::o;8552:770::-;8710:1;8692:20;;:6;:20;;;8684:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;8794:1;8773:23;;:9;:23;;;8765:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;8849:47;8870:6;8878:9;8889:6;8849:20;:47::i;:::-;8909:21;8933:9;:17;8943:6;8933:17;;;;;;;;;;;;;;;;8909:41;;9000:6;8983:13;:23;;8961:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;9144:6;9128:13;:22;9108:9;:17;9118:6;9108:17;;;;;;;;;;;;;;;:42;;;;9196:6;9172:9;:20;9182:9;9172:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;9237:9;9220:35;;9229:6;9220:35;;;9248:6;9220:35;;;;;;:::i;:::-;;;;;;;;9268:46;9288:6;9296:9;9307:6;9268:19;:46::i;:::-;8673:649;8552:770;;;:::o;32126:963::-;32165:23;32191:24;32209:4;32191:9;:24::i;:::-;32165:50;;32226:25;32275:20;;32254:18;;:41;;;;:::i;:::-;32226:69;;32306:12;32354:1;32335:15;:20;:46;;;;32380:1;32359:17;:22;32335:46;32331:85;;;32398:7;;;;;32331:85;32450:18;;32432:15;:36;32428:105;;;32503:18;;32485:36;;32428:105;32545:26;32574:15;32545:44;;32602:36;32619:18;32602:16;:36::i;:::-;32651:18;32672:21;32651:42;;32706:23;32732:81;32785:17;32732:34;32747:18;;32732:10;:14;;:34;;;;:::i;:::-;:38;;:81;;;;:::i;:::-;32706:107;;32848:14;;;;;;;;;;;32840:28;;32876:15;32840:56;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32826:70;;;;;32929:18;;;;;;;;;;;32921:32;;32975:21;32921:90;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32907:104;;;;;33045:1;33024:18;:22;;;;33080:1;33057:20;:24;;;;32154:935;;;;;;32126:963;:::o;9737:591::-;9840:1;9821:21;;:7;:21;;;9813:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;9893:49;9914:7;9931:1;9935:6;9893:20;:49::i;:::-;9955:22;9980:9;:18;9990:7;9980:18;;;;;;;;;;;;;;;;9955:43;;10035:6;10017:14;:24;;10009:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;10154:6;10137:14;:23;10116:9;:18;10126:7;10116:18;;;;;;;;;;;;;;;:44;;;;10198:6;10182:12;;:22;;;;;;;:::i;:::-;;;;;;;;10248:1;10222:37;;10231:7;10222:37;;;10252:6;10222:37;;;;;;:::i;:::-;;;;;;;;10272:48;10292:7;10309:1;10313:6;10272:19;:48::i;:::-;9802:526;9737:591;;:::o;10724:125::-;;;;:::o;10857:124::-;;;;:::o;31011:589::-;31137:21;31175:1;31161:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31137:40;;31206:4;31188;31193:1;31188:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;31232:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31222:4;31227:1;31222:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;31267:62;31284:4;31299:15;31317:11;31267:8;:62::i;:::-;31368:15;:66;;;31449:11;31475:1;31519:4;31546;31566:15;31368:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31066:534;31011:589;:::o;7:126:1:-;44:7;84:42;77:5;73:54;62:65;;7:126;;;:::o;139:96::-;176:7;205:24;223:5;205:24;:::i;:::-;194:35;;139:96;;;:::o;241:118::-;328:24;346:5;328:24;:::i;:::-;323:3;316:37;241:118;;:::o;365:222::-;458:4;496:2;485:9;481:18;473:26;;509:71;577:1;566:9;562:17;553:6;509:71;:::i;:::-;365:222;;;;:::o;593:99::-;645:6;679:5;673:12;663:22;;593:99;;;:::o;698:169::-;782:11;816:6;811:3;804:19;856:4;851:3;847:14;832:29;;698:169;;;;:::o;873:246::-;954:1;964:113;978:6;975:1;972:13;964:113;;;1063:1;1058:3;1054:11;1048:18;1044:1;1039:3;1035:11;1028:39;1000:2;997:1;993:10;988:15;;964:113;;;1111:1;1102:6;1097:3;1093:16;1086:27;935:184;873:246;;;:::o;1125:102::-;1166:6;1217:2;1213:7;1208:2;1201:5;1197:14;1193:28;1183:38;;1125:102;;;:::o;1233:377::-;1321:3;1349:39;1382:5;1349:39;:::i;:::-;1404:71;1468:6;1463:3;1404:71;:::i;:::-;1397:78;;1484:65;1542:6;1537:3;1530:4;1523:5;1519:16;1484:65;:::i;:::-;1574:29;1596:6;1574:29;:::i;:::-;1569:3;1565:39;1558:46;;1325:285;1233:377;;;;:::o;1616:313::-;1729:4;1767:2;1756:9;1752:18;1744:26;;1816:9;1810:4;1806:20;1802:1;1791:9;1787:17;1780:47;1844:78;1917:4;1908:6;1844:78;:::i;:::-;1836:86;;1616:313;;;;:::o;2016:117::-;2125:1;2122;2115:12;2262:122;2335:24;2353:5;2335:24;:::i;:::-;2328:5;2325:35;2315:63;;2374:1;2371;2364:12;2315:63;2262:122;:::o;2390:139::-;2436:5;2474:6;2461:20;2452:29;;2490:33;2517:5;2490:33;:::i;:::-;2390:139;;;;:::o;2535:77::-;2572:7;2601:5;2590:16;;2535:77;;;:::o;2618:122::-;2691:24;2709:5;2691:24;:::i;:::-;2684:5;2681:35;2671:63;;2730:1;2727;2720:12;2671:63;2618:122;:::o;2746:139::-;2792:5;2830:6;2817:20;2808:29;;2846:33;2873:5;2846:33;:::i;:::-;2746:139;;;;:::o;2891:474::-;2959:6;2967;3016:2;3004:9;2995:7;2991:23;2987:32;2984:119;;;3022:79;;:::i;:::-;2984:119;3142:1;3167:53;3212:7;3203:6;3192:9;3188:22;3167:53;:::i;:::-;3157:63;;3113:117;3269:2;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3240:118;2891:474;;;;;:::o;3371:90::-;3405:7;3448:5;3441:13;3434:21;3423:32;;3371:90;;;:::o;3467:109::-;3548:21;3563:5;3548:21;:::i;:::-;3543:3;3536:34;3467:109;;:::o;3582:210::-;3669:4;3707:2;3696:9;3692:18;3684:26;;3720:65;3782:1;3771:9;3767:17;3758:6;3720:65;:::i;:::-;3582:210;;;;:::o;3798:329::-;3857:6;3906:2;3894:9;3885:7;3881:23;3877:32;3874:119;;;3912:79;;:::i;:::-;3874:119;4032:1;4057:53;4102:7;4093:6;4082:9;4078:22;4057:53;:::i;:::-;4047:63;;4003:117;3798:329;;;;:::o;4133:60::-;4161:3;4182:5;4175:12;;4133:60;;;:::o;4199:142::-;4249:9;4282:53;4300:34;4309:24;4327:5;4309:24;:::i;:::-;4300:34;:::i;:::-;4282:53;:::i;:::-;4269:66;;4199:142;;;:::o;4347:126::-;4397:9;4430:37;4461:5;4430:37;:::i;:::-;4417:50;;4347:126;;;:::o;4479:153::-;4556:9;4589:37;4620:5;4589:37;:::i;:::-;4576:50;;4479:153;;;:::o;4638:185::-;4752:64;4810:5;4752:64;:::i;:::-;4747:3;4740:77;4638:185;;:::o;4829:276::-;4949:4;4987:2;4976:9;4972:18;4964:26;;5000:98;5095:1;5084:9;5080:17;5071:6;5000:98;:::i;:::-;4829:276;;;;:::o;5111:118::-;5198:24;5216:5;5198:24;:::i;:::-;5193:3;5186:37;5111:118;;:::o;5235:222::-;5328:4;5366:2;5355:9;5351:18;5343:26;;5379:71;5447:1;5436:9;5432:17;5423:6;5379:71;:::i;:::-;5235:222;;;;:::o;5463:329::-;5522:6;5571:2;5559:9;5550:7;5546:23;5542:32;5539:119;;;5577:79;;:::i;:::-;5539:119;5697:1;5722:53;5767:7;5758:6;5747:9;5743:22;5722:53;:::i;:::-;5712:63;;5668:117;5463:329;;;;:::o;5798:619::-;5875:6;5883;5891;5940:2;5928:9;5919:7;5915:23;5911:32;5908:119;;;5946:79;;:::i;:::-;5908:119;6066:1;6091:53;6136:7;6127:6;6116:9;6112:22;6091:53;:::i;:::-;6081:63;;6037:117;6193:2;6219:53;6264:7;6255:6;6244:9;6240:22;6219:53;:::i;:::-;6209:63;;6164:118;6321:2;6347:53;6392:7;6383:6;6372:9;6368:22;6347:53;:::i;:::-;6337:63;;6292:118;5798:619;;;;;:::o;6423:86::-;6458:7;6498:4;6491:5;6487:16;6476:27;;6423:86;;;:::o;6515:112::-;6598:22;6614:5;6598:22;:::i;:::-;6593:3;6586:35;6515:112;;:::o;6633:214::-;6722:4;6760:2;6749:9;6745:18;6737:26;;6773:67;6837:1;6826:9;6822:17;6813:6;6773:67;:::i;:::-;6633:214;;;;:::o;6853:116::-;6923:21;6938:5;6923:21;:::i;:::-;6916:5;6913:32;6903:60;;6959:1;6956;6949:12;6903:60;6853:116;:::o;6975:133::-;7018:5;7056:6;7043:20;7034:29;;7072:30;7096:5;7072:30;:::i;:::-;6975:133;;;;:::o;7114:468::-;7179:6;7187;7236:2;7224:9;7215:7;7211:23;7207:32;7204:119;;;7242:79;;:::i;:::-;7204:119;7362:1;7387:53;7432:7;7423:6;7412:9;7408:22;7387:53;:::i;:::-;7377:63;;7333:117;7489:2;7515:50;7557:7;7548:6;7537:9;7533:22;7515:50;:::i;:::-;7505:60;;7460:115;7114:468;;;;;:::o;7588:619::-;7665:6;7673;7681;7730:2;7718:9;7709:7;7705:23;7701:32;7698:119;;;7736:79;;:::i;:::-;7698:119;7856:1;7881:53;7926:7;7917:6;7906:9;7902:22;7881:53;:::i;:::-;7871:63;;7827:117;7983:2;8009:53;8054:7;8045:6;8034:9;8030:22;8009:53;:::i;:::-;7999:63;;7954:118;8111:2;8137:53;8182:7;8173:6;8162:9;8158:22;8137:53;:::i;:::-;8127:63;;8082:118;7588:619;;;;;:::o;8213:323::-;8269:6;8318:2;8306:9;8297:7;8293:23;8289:32;8286:119;;;8324:79;;:::i;:::-;8286:119;8444:1;8469:50;8511:7;8502:6;8491:9;8487:22;8469:50;:::i;:::-;8459:60;;8415:114;8213:323;;;;:::o;8542:110::-;8593:7;8622:24;8640:5;8622:24;:::i;:::-;8611:35;;8542:110;;;:::o;8658:150::-;8745:38;8777:5;8745:38;:::i;:::-;8738:5;8735:49;8725:77;;8798:1;8795;8788:12;8725:77;8658:150;:::o;8814:167::-;8874:5;8912:6;8899:20;8890:29;;8928:47;8969:5;8928:47;:::i;:::-;8814:167;;;;:::o;8987:502::-;9069:6;9077;9126:2;9114:9;9105:7;9101:23;9097:32;9094:119;;;9132:79;;:::i;:::-;9094:119;9252:1;9277:67;9336:7;9327:6;9316:9;9312:22;9277:67;:::i;:::-;9267:77;;9223:131;9393:2;9419:53;9464:7;9455:6;9444:9;9440:22;9419:53;:::i;:::-;9409:63;;9364:118;8987:502;;;;;:::o;9495:474::-;9563:6;9571;9620:2;9608:9;9599:7;9595:23;9591:32;9588:119;;;9626:79;;:::i;:::-;9588:119;9746:1;9771:53;9816:7;9807:6;9796:9;9792:22;9771:53;:::i;:::-;9761:63;;9717:117;9873:2;9899:53;9944:7;9935:6;9924:9;9920:22;9899:53;:::i;:::-;9889:63;;9844:118;9495:474;;;;;:::o;9975:180::-;10023:77;10020:1;10013:88;10120:4;10117:1;10110:15;10144:4;10141:1;10134:15;10161:320;10205:6;10242:1;10236:4;10232:12;10222:22;;10289:1;10283:4;10279:12;10310:18;10300:81;;10366:4;10358:6;10354:17;10344:27;;10300:81;10428:2;10420:6;10417:14;10397:18;10394:38;10391:84;;10447:18;;:::i;:::-;10391:84;10212:269;10161:320;;;:::o;10487:182::-;10627:34;10623:1;10615:6;10611:14;10604:58;10487:182;:::o;10675:366::-;10817:3;10838:67;10902:2;10897:3;10838:67;:::i;:::-;10831:74;;10914:93;11003:3;10914:93;:::i;:::-;11032:2;11027:3;11023:12;11016:19;;10675:366;;;:::o;11047:419::-;11213:4;11251:2;11240:9;11236:18;11228:26;;11300:9;11294:4;11290:20;11286:1;11275:9;11271:17;11264:47;11328:131;11454:4;11328:131;:::i;:::-;11320:139;;11047:419;;;:::o;11472:172::-;11612:24;11608:1;11600:6;11596:14;11589:48;11472:172;:::o;11650:366::-;11792:3;11813:67;11877:2;11872:3;11813:67;:::i;:::-;11806:74;;11889:93;11978:3;11889:93;:::i;:::-;12007:2;12002:3;11998:12;11991:19;;11650:366;;;:::o;12022:419::-;12188:4;12226:2;12215:9;12211:18;12203:26;;12275:9;12269:4;12265:20;12261:1;12250:9;12246:17;12239:47;12303:131;12429:4;12303:131;:::i;:::-;12295:139;;12022:419;;;:::o;12447:180::-;12495:77;12492:1;12485:88;12592:4;12589:1;12582:15;12616:4;12613:1;12606:15;12633:410;12673:7;12696:20;12714:1;12696:20;:::i;:::-;12691:25;;12730:20;12748:1;12730:20;:::i;:::-;12725:25;;12785:1;12782;12778:9;12807:30;12825:11;12807:30;:::i;:::-;12796:41;;12986:1;12977:7;12973:15;12970:1;12967:22;12947:1;12940:9;12920:83;12897:139;;13016:18;;:::i;:::-;12897:139;12681:362;12633:410;;;;:::o;13049:227::-;13189:34;13185:1;13177:6;13173:14;13166:58;13258:10;13253:2;13245:6;13241:15;13234:35;13049:227;:::o;13282:366::-;13424:3;13445:67;13509:2;13504:3;13445:67;:::i;:::-;13438:74;;13521:93;13610:3;13521:93;:::i;:::-;13639:2;13634:3;13630:12;13623:19;;13282:366;;;:::o;13654:419::-;13820:4;13858:2;13847:9;13843:18;13835:26;;13907:9;13901:4;13897:20;13893:1;13882:9;13878:17;13871:47;13935:131;14061:4;13935:131;:::i;:::-;13927:139;;13654:419;;;:::o;14079:191::-;14119:3;14138:20;14156:1;14138:20;:::i;:::-;14133:25;;14172:20;14190:1;14172:20;:::i;:::-;14167:25;;14215:1;14212;14208:9;14201:16;;14236:3;14233:1;14230:10;14227:36;;;14243:18;;:::i;:::-;14227:36;14079:191;;;;:::o;14276:168::-;14416:20;14412:1;14404:6;14400:14;14393:44;14276:168;:::o;14450:366::-;14592:3;14613:67;14677:2;14672:3;14613:67;:::i;:::-;14606:74;;14689:93;14778:3;14689:93;:::i;:::-;14807:2;14802:3;14798:12;14791:19;;14450:366;;;:::o;14822:419::-;14988:4;15026:2;15015:9;15011:18;15003:26;;15075:9;15069:4;15065:20;15061:1;15050:9;15046:17;15039:47;15103:131;15229:4;15103:131;:::i;:::-;15095:139;;14822:419;;;:::o;15247:244::-;15387:34;15383:1;15375:6;15371:14;15364:58;15456:27;15451:2;15443:6;15439:15;15432:52;15247:244;:::o;15497:366::-;15639:3;15660:67;15724:2;15719:3;15660:67;:::i;:::-;15653:74;;15736:93;15825:3;15736:93;:::i;:::-;15854:2;15849:3;15845:12;15838:19;;15497:366;;;:::o;15869:419::-;16035:4;16073:2;16062:9;16058:18;16050:26;;16122:9;16116:4;16112:20;16108:1;16097:9;16093:17;16086:47;16150:131;16276:4;16150:131;:::i;:::-;16142:139;;15869:419;;;:::o;16294:143::-;16351:5;16382:6;16376:13;16367:22;;16398:33;16425:5;16398:33;:::i;:::-;16294:143;;;;:::o;16443:351::-;16513:6;16562:2;16550:9;16541:7;16537:23;16533:32;16530:119;;;16568:79;;:::i;:::-;16530:119;16688:1;16713:64;16769:7;16760:6;16749:9;16745:22;16713:64;:::i;:::-;16703:74;;16659:128;16443:351;;;;:::o;16800:164::-;16940:16;16936:1;16928:6;16924:14;16917:40;16800:164;:::o;16970:366::-;17112:3;17133:67;17197:2;17192:3;17133:67;:::i;:::-;17126:74;;17209:93;17298:3;17209:93;:::i;:::-;17327:2;17322:3;17318:12;17311:19;;16970:366;;;:::o;17342:419::-;17508:4;17546:2;17535:9;17531:18;17523:26;;17595:9;17589:4;17585:20;17581:1;17570:9;17566:17;17559:47;17623:131;17749:4;17623:131;:::i;:::-;17615:139;;17342:419;;;:::o;17767:332::-;17888:4;17926:2;17915:9;17911:18;17903:26;;17939:71;18007:1;17996:9;17992:17;17983:6;17939:71;:::i;:::-;18020:72;18088:2;18077:9;18073:18;18064:6;18020:72;:::i;:::-;17767:332;;;;;:::o;18105:137::-;18159:5;18190:6;18184:13;18175:22;;18206:30;18230:5;18206:30;:::i;:::-;18105:137;;;;:::o;18248:345::-;18315:6;18364:2;18352:9;18343:7;18339:23;18335:32;18332:119;;;18370:79;;:::i;:::-;18332:119;18490:1;18515:61;18568:7;18559:6;18548:9;18544:22;18515:61;:::i;:::-;18505:71;;18461:125;18248:345;;;;:::o;18599:224::-;18739:34;18735:1;18727:6;18723:14;18716:58;18808:7;18803:2;18795:6;18791:15;18784:32;18599:224;:::o;18829:366::-;18971:3;18992:67;19056:2;19051:3;18992:67;:::i;:::-;18985:74;;19068:93;19157:3;19068:93;:::i;:::-;19186:2;19181:3;19177:12;19170:19;;18829:366;;;:::o;19201:419::-;19367:4;19405:2;19394:9;19390:18;19382:26;;19454:9;19448:4;19444:20;19440:1;19429:9;19425:17;19418:47;19482:131;19608:4;19482:131;:::i;:::-;19474:139;;19201:419;;;:::o;19626:169::-;19766:21;19762:1;19754:6;19750:14;19743:45;19626:169;:::o;19801:366::-;19943:3;19964:67;20028:2;20023:3;19964:67;:::i;:::-;19957:74;;20040:93;20129:3;20040:93;:::i;:::-;20158:2;20153:3;20149:12;20142:19;;19801:366;;;:::o;20173:419::-;20339:4;20377:2;20366:9;20362:18;20354:26;;20426:9;20420:4;20416:20;20412:1;20401:9;20397:17;20390:47;20454:131;20580:4;20454:131;:::i;:::-;20446:139;;20173:419;;;:::o;20598:175::-;20738:27;20734:1;20726:6;20722:14;20715:51;20598:175;:::o;20779:366::-;20921:3;20942:67;21006:2;21001:3;20942:67;:::i;:::-;20935:74;;21018:93;21107:3;21018:93;:::i;:::-;21136:2;21131:3;21127:12;21120:19;;20779:366;;;:::o;21151:419::-;21317:4;21355:2;21344:9;21340:18;21332:26;;21404:9;21398:4;21394:20;21390:1;21379:9;21375:17;21368:47;21432:131;21558:4;21432:131;:::i;:::-;21424:139;;21151:419;;;:::o;21576:169::-;21716:21;21712:1;21704:6;21700:14;21693:45;21576:169;:::o;21751:366::-;21893:3;21914:67;21978:2;21973:3;21914:67;:::i;:::-;21907:74;;21990:93;22079:3;21990:93;:::i;:::-;22108:2;22103:3;22099:12;22092:19;;21751:366;;;:::o;22123:419::-;22289:4;22327:2;22316:9;22312:18;22304:26;;22376:9;22370:4;22366:20;22362:1;22351:9;22347:17;22340:47;22404:131;22530:4;22404:131;:::i;:::-;22396:139;;22123:419;;;:::o;22548:225::-;22688:34;22684:1;22676:6;22672:14;22665:58;22757:8;22752:2;22744:6;22740:15;22733:33;22548:225;:::o;22779:366::-;22921:3;22942:67;23006:2;23001:3;22942:67;:::i;:::-;22935:74;;23018:93;23107:3;23018:93;:::i;:::-;23136:2;23131:3;23127:12;23120:19;;22779:366;;;:::o;23151:419::-;23317:4;23355:2;23344:9;23340:18;23332:26;;23404:9;23398:4;23394:20;23390:1;23379:9;23375:17;23368:47;23432:131;23558:4;23432:131;:::i;:::-;23424:139;;23151:419;;;:::o;23576:180::-;23624:77;23621:1;23614:88;23721:4;23718:1;23711:15;23745:4;23742:1;23735:15;23762:185;23802:1;23819:20;23837:1;23819:20;:::i;:::-;23814:25;;23853:20;23871:1;23853:20;:::i;:::-;23848:25;;23892:1;23882:35;;23897:18;;:::i;:::-;23882:35;23939:1;23936;23932:9;23927:14;;23762:185;;;;:::o;23953:223::-;24093:34;24089:1;24081:6;24077:14;24070:58;24162:6;24157:2;24149:6;24145:15;24138:31;23953:223;:::o;24182:366::-;24324:3;24345:67;24409:2;24404:3;24345:67;:::i;:::-;24338:74;;24421:93;24510:3;24421:93;:::i;:::-;24539:2;24534:3;24530:12;24523:19;;24182:366;;;:::o;24554:419::-;24720:4;24758:2;24747:9;24743:18;24735:26;;24807:9;24801:4;24797:20;24793:1;24782:9;24778:17;24771:47;24835:131;24961:4;24835:131;:::i;:::-;24827:139;;24554:419;;;:::o;24979:221::-;25119:34;25115:1;25107:6;25103:14;25096:58;25188:4;25183:2;25175:6;25171:15;25164:29;24979:221;:::o;25206:366::-;25348:3;25369:67;25433:2;25428:3;25369:67;:::i;:::-;25362:74;;25445:93;25534:3;25445:93;:::i;:::-;25563:2;25558:3;25554:12;25547:19;;25206:366;;;:::o;25578:419::-;25744:4;25782:2;25771:9;25767:18;25759:26;;25831:9;25825:4;25821:20;25817:1;25806:9;25802:17;25795:47;25859:131;25985:4;25859:131;:::i;:::-;25851:139;;25578:419;;;:::o;26003:224::-;26143:34;26139:1;26131:6;26127:14;26120:58;26212:7;26207:2;26199:6;26195:15;26188:32;26003:224;:::o;26233:366::-;26375:3;26396:67;26460:2;26455:3;26396:67;:::i;:::-;26389:74;;26472:93;26561:3;26472:93;:::i;:::-;26590:2;26585:3;26581:12;26574:19;;26233:366;;;:::o;26605:419::-;26771:4;26809:2;26798:9;26794:18;26786:26;;26858:9;26852:4;26848:20;26844:1;26833:9;26829:17;26822:47;26886:131;27012:4;26886:131;:::i;:::-;26878:139;;26605:419;;;:::o;27030:222::-;27170:34;27166:1;27158:6;27154:14;27147:58;27239:5;27234:2;27226:6;27222:15;27215:30;27030:222;:::o;27258:366::-;27400:3;27421:67;27485:2;27480:3;27421:67;:::i;:::-;27414:74;;27497:93;27586:3;27497:93;:::i;:::-;27615:2;27610:3;27606:12;27599:19;;27258:366;;;:::o;27630:419::-;27796:4;27834:2;27823:9;27819:18;27811:26;;27883:9;27877:4;27873:20;27869:1;27858:9;27854:17;27847:47;27911:131;28037:4;27911:131;:::i;:::-;27903:139;;27630:419;;;:::o;28055:240::-;28195:34;28191:1;28183:6;28179:14;28172:58;28264:23;28259:2;28251:6;28247:15;28240:48;28055:240;:::o;28301:366::-;28443:3;28464:67;28528:2;28523:3;28464:67;:::i;:::-;28457:74;;28540:93;28629:3;28540:93;:::i;:::-;28658:2;28653:3;28649:12;28642:19;;28301:366;;;:::o;28673:419::-;28839:4;28877:2;28866:9;28862:18;28854:26;;28926:9;28920:4;28916:20;28912:1;28901:9;28897:17;28890:47;28954:131;29080:4;28954:131;:::i;:::-;28946:139;;28673:419;;;:::o;29098:169::-;29238:21;29234:1;29226:6;29222:14;29215:45;29098:169;:::o;29273:366::-;29415:3;29436:67;29500:2;29495:3;29436:67;:::i;:::-;29429:74;;29512:93;29601:3;29512:93;:::i;:::-;29630:2;29625:3;29621:12;29614:19;;29273:366;;;:::o;29645:419::-;29811:4;29849:2;29838:9;29834:18;29826:26;;29898:9;29892:4;29888:20;29884:1;29873:9;29869:17;29862:47;29926:131;30052:4;29926:131;:::i;:::-;29918:139;;29645:419;;;:::o;30070:241::-;30210:34;30206:1;30198:6;30194:14;30187:58;30279:24;30274:2;30266:6;30262:15;30255:49;30070:241;:::o;30317:366::-;30459:3;30480:67;30544:2;30539:3;30480:67;:::i;:::-;30473:74;;30556:93;30645:3;30556:93;:::i;:::-;30674:2;30669:3;30665:12;30658:19;;30317:366;;;:::o;30689:419::-;30855:4;30893:2;30882:9;30878:18;30870:26;;30942:9;30936:4;30932:20;30928:1;30917:9;30913:17;30906:47;30970:131;31096:4;30970:131;:::i;:::-;30962:139;;30689:419;;;:::o;31114:194::-;31154:4;31174:20;31192:1;31174:20;:::i;:::-;31169:25;;31208:20;31226:1;31208:20;:::i;:::-;31203:25;;31252:1;31249;31245:9;31237:17;;31276:1;31270:4;31267:11;31264:37;;;31281:18;;:::i;:::-;31264:37;31114:194;;;;:::o;31314:225::-;31454:34;31450:1;31442:6;31438:14;31431:58;31523:8;31518:2;31510:6;31506:15;31499:33;31314:225;:::o;31545:366::-;31687:3;31708:67;31772:2;31767:3;31708:67;:::i;:::-;31701:74;;31784:93;31873:3;31784:93;:::i;:::-;31902:2;31897:3;31893:12;31886:19;;31545:366;;;:::o;31917:419::-;32083:4;32121:2;32110:9;32106:18;32098:26;;32170:9;32164:4;32160:20;32156:1;32145:9;32141:17;32134:47;32198:131;32324:4;32198:131;:::i;:::-;32190:139;;31917:419;;;:::o;32342:147::-;32443:11;32480:3;32465:18;;32342:147;;;;:::o;32495:114::-;;:::o;32615:398::-;32774:3;32795:83;32876:1;32871:3;32795:83;:::i;:::-;32788:90;;32887:93;32976:3;32887:93;:::i;:::-;33005:1;33000:3;32996:11;32989:18;;32615:398;;;:::o;33019:379::-;33203:3;33225:147;33368:3;33225:147;:::i;:::-;33218:154;;33389:3;33382:10;;33019:379;;;:::o;33404:220::-;33544:34;33540:1;33532:6;33528:14;33521:58;33613:3;33608:2;33600:6;33596:15;33589:28;33404:220;:::o;33630:366::-;33772:3;33793:67;33857:2;33852:3;33793:67;:::i;:::-;33786:74;;33869:93;33958:3;33869:93;:::i;:::-;33987:2;33982:3;33978:12;33971:19;;33630:366;;;:::o;34002:419::-;34168:4;34206:2;34195:9;34191:18;34183:26;;34255:9;34249:4;34245:20;34241:1;34230:9;34226:17;34219:47;34283:131;34409:4;34283:131;:::i;:::-;34275:139;;34002:419;;;:::o;34427:221::-;34567:34;34563:1;34555:6;34551:14;34544:58;34636:4;34631:2;34623:6;34619:15;34612:29;34427:221;:::o;34654:366::-;34796:3;34817:67;34881:2;34876:3;34817:67;:::i;:::-;34810:74;;34893:93;34982:3;34893:93;:::i;:::-;35011:2;35006:3;35002:12;34995:19;;34654:366;;;:::o;35026:419::-;35192:4;35230:2;35219:9;35215:18;35207:26;;35279:9;35273:4;35269:20;35265:1;35254:9;35250:17;35243:47;35307:131;35433:4;35307:131;:::i;:::-;35299:139;;35026:419;;;:::o;35451:180::-;35499:77;35496:1;35489:88;35596:4;35593:1;35586:15;35620:4;35617:1;35610:15;35637:180;35685:77;35682:1;35675:88;35782:4;35779:1;35772:15;35806:4;35803:1;35796:15;35823:143;35880:5;35911:6;35905:13;35896:22;;35927:33;35954:5;35927:33;:::i;:::-;35823:143;;;;:::o;35972:351::-;36042:6;36091:2;36079:9;36070:7;36066:23;36062:32;36059:119;;;36097:79;;:::i;:::-;36059:119;36217:1;36242:64;36298:7;36289:6;36278:9;36274:22;36242:64;:::i;:::-;36232:74;;36188:128;35972:351;;;;:::o;36329:85::-;36374:7;36403:5;36392:16;;36329:85;;;:::o;36420:158::-;36478:9;36511:61;36529:42;36538:32;36564:5;36538:32;:::i;:::-;36529:42;:::i;:::-;36511:61;:::i;:::-;36498:74;;36420:158;;;:::o;36584:147::-;36679:45;36718:5;36679:45;:::i;:::-;36674:3;36667:58;36584:147;;:::o;36737:114::-;36804:6;36838:5;36832:12;36822:22;;36737:114;;;:::o;36857:184::-;36956:11;36990:6;36985:3;36978:19;37030:4;37025:3;37021:14;37006:29;;36857:184;;;;:::o;37047:132::-;37114:4;37137:3;37129:11;;37167:4;37162:3;37158:14;37150:22;;37047:132;;;:::o;37185:108::-;37262:24;37280:5;37262:24;:::i;:::-;37257:3;37250:37;37185:108;;:::o;37299:179::-;37368:10;37389:46;37431:3;37423:6;37389:46;:::i;:::-;37467:4;37462:3;37458:14;37444:28;;37299:179;;;;:::o;37484:113::-;37554:4;37586;37581:3;37577:14;37569:22;;37484:113;;;:::o;37633:732::-;37752:3;37781:54;37829:5;37781:54;:::i;:::-;37851:86;37930:6;37925:3;37851:86;:::i;:::-;37844:93;;37961:56;38011:5;37961:56;:::i;:::-;38040:7;38071:1;38056:284;38081:6;38078:1;38075:13;38056:284;;;38157:6;38151:13;38184:63;38243:3;38228:13;38184:63;:::i;:::-;38177:70;;38270:60;38323:6;38270:60;:::i;:::-;38260:70;;38116:224;38103:1;38100;38096:9;38091:14;;38056:284;;;38060:14;38356:3;38349:10;;37757:608;;;37633:732;;;;:::o;38371:831::-;38634:4;38672:3;38661:9;38657:19;38649:27;;38686:71;38754:1;38743:9;38739:17;38730:6;38686:71;:::i;:::-;38767:80;38843:2;38832:9;38828:18;38819:6;38767:80;:::i;:::-;38894:9;38888:4;38884:20;38879:2;38868:9;38864:18;38857:48;38922:108;39025:4;39016:6;38922:108;:::i;:::-;38914:116;;39040:72;39108:2;39097:9;39093:18;39084:6;39040:72;:::i;:::-;39122:73;39190:3;39179:9;39175:19;39166:6;39122:73;:::i;:::-;38371:831;;;;;;;;:::o

Swarm Source

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