ETH Price: $3,163.82 (+3.04%)
 

Overview

Max Total Supply

100,000,000,000,000 COOMER

Holders

116,942

Market

Price

$0.00 @ 0.000000 ETH

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
69 COOMER

Value
$0.00
0x041fDF3F472D2c8A7Ecc458fc3B7F543E6c57EF7
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
COOMER

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at basescan.org on 2024-05-05
*/

/*
 * SPDX-License-Identifier: MIT
 * https://basedcoomer.net
 * https://t.me/basedcoomercoin
 * https://x.com/basedcoomercoin                       
*/

pragma solidity 0.8.19;

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

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        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);
    }

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

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

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

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

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    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);
    }

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

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _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");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _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 IDexFactory {
    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 IDexRouter {
    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 COOMER is Context, ERC20, Ownable {
    using SafeMath for uint256;
    mapping(address => bool) private _isExcludedFromFee;
    address payable private _taxWallet;
    uint256 firstBlock;

    uint64 private lastLiquifyTime;

    uint256 private buyFee = 15;
    uint256 private sellFee = 40;
    uint256 private _preventSwapBefore = 1;
    uint256 private _buyCount = 0;

    uint256 private _txAmountLimit;
    uint256 private _walletAmountLimit;
    uint256 private _swapbackMin;
    uint256 private _swapbackMax;

    IDexRouter private uniswapV2Router;
    address private uniswapV2Pair;
    bool private tradingOpen;
    bool private inSwap = false;
    bool private swapEnabled = false;
    bool private launchmode = true;
    mapping(address => bool) private _canTx;

    event MaxTxAmountUpdated(uint _txAmountLimit);
    event MaxWalletAmountUpdated(uint _walletAmountLimit);
    event FeesUpdated(uint buyFee, uint sellFee);
    event SwapbackUpdated(uint _swapbackMin, uint _swapbackMax);
    event FeeReceiverUpdated(address _taxWallet);
    event ExcludedFromFee(address account, bool status);
    event LimitsRemoved();
    event TradingOpened();

    modifier lockTheSwap() {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor() ERC20("Coomer", "COOMER") {
        uint256 _totalSupply = 100_000_000_000_000 * 10 ** 18;

        _txAmountLimit = (_totalSupply * 20) / 1000;
        _walletAmountLimit = (_totalSupply * 20) / 1000;
        _swapbackMin = (_totalSupply * 5) / 10000;
        _swapbackMax = (_totalSupply * 200) / 10000;
        _canTx [address(this)] = true;
        _taxWallet = payable(0x56428962466472B0BbFacFCa5354664073263a8D);
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_taxWallet] = true;

        _mint(_msgSender(), _totalSupply);
    }


    receive() external payable {}

    function open() external onlyOwner {
        require(!tradingOpen, "trading is already open");
        uniswapV2Router = IDexRouter(
            0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24
        );
        _approve(address(this), address(uniswapV2Router), totalSupply());
        uniswapV2Pair = IDexFactory(uniswapV2Router.factory()).createPair(
            address(this),
            uniswapV2Router.WETH()
        );
        uniswapV2Router.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0,
            0,
            owner(),
            block.timestamp
        );
        IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max);
        swapEnabled = true;
        tradingOpen = true;
        firstBlock = block.number;
        lastLiquifyTime = uint64(block.number);
        _isExcludedFromFee[address(this)] = true;
        buyFee = 25;
        sellFee = 40;

        emit TradingOpened();
    }

    function setMkt(address payable marketingWallet) external onlyOwner {
        _taxWallet = marketingWallet;

        emit FeeReceiverUpdated(marketingWallet);
    }

    function setTx(uint256 newValue) external onlyOwner {
        require(newValue >= 1, "Max tx cant be lower than 0.1%");
        _txAmountLimit = (totalSupply() * newValue) / 1000;
        emit MaxTxAmountUpdated(_txAmountLimit);
    }

    function setWallet(uint256 newValue) external onlyOwner {
        require(newValue >= 1, "Max wallet cant be lower than 0.1%");
        _walletAmountLimit = (totalSupply() * newValue) / 1000;
        emit MaxWalletAmountUpdated(_walletAmountLimit);
    }

    function setSwapback(
        uint256 taxSwapThreshold,
        uint256 maxTaxSwap
    ) external onlyOwner {
        _swapbackMin = (totalSupply() * taxSwapThreshold) / 10000;
        _swapbackMax = (totalSupply() * maxTaxSwap) / 10000;
        emit SwapbackUpdated(taxSwapThreshold, maxTaxSwap);
    }

    function setMode() external onlyOwner {
        require(launchmode, "Launch mode is already disabled");
        launchmode = false;
    }

    function rmvLimits() external onlyOwner {
        _txAmountLimit = totalSupply();
        _walletAmountLimit = totalSupply();
        emit MaxTxAmountUpdated(totalSupply());
        emit MaxWalletAmountUpdated(totalSupply());
    }

    function setTax(uint256 buyTax, uint256 sellTax) external onlyOwner {
        require(buyTax <= 99, "Invalid buy tax value");
        require(sellTax <= 99, "Invalid sell tax value");
        buyFee = buyTax;
        sellFee = sellTax;
        emit FeesUpdated(buyTax, sellTax);
    }

    function removeETH() external {
        require(msg.sender == _taxWallet, "Only fee receiver can trigger");
        _taxWallet.transfer(address(this).balance);
    }

    function addAddress(address[] calldata amount, bool status)
        external
        onlyOwner
    {
        for (uint256 i = 0; i < amount.length; i++) {
            _canTx[amount[i]] = status;
        }
    }

    function exemptFee(address account, bool status) external onlyOwner {
        _isExcludedFromFee[account] = status;
        emit ExcludedFromFee(account, status);
    }

    function viewInfo()
        external
        view
        returns (
            uint256 _buyFee,
            uint256 _sellFee,
            uint256 maxTxAmount,
            uint256 maxWalletSize,
            uint256 taxSwapThreshold,
            uint256 maxTaxSwap
        )
    {
        return (
            buyFee,
            sellFee,
            _txAmountLimit,
            _walletAmountLimit,
            _swapbackMin,
            _swapbackMax
        );
    }

    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");
        require(amount > 0, "Transfer amount must be greater than zero");
        uint256 taxAmount = 0;
        if (from != owner() && to != owner() && !inSwap) {
            if (launchmode){
                require(_canTx[from] || _canTx[to], "");
            }

            taxAmount = amount.mul(buyFee).div(100);

            if (
                from == uniswapV2Pair &&
                to != address(uniswapV2Router) &&
                !_isExcludedFromFee[to]
            ) {
                require(amount <= _txAmountLimit, "Exceeds the _txAmountLimit.");
                require(
                    balanceOf(to) + amount <= _walletAmountLimit,
                    "Exceeds the maxWalletSize."
                );

                if (firstBlock + 3 > block.number) {
                    require(!isContract(to));
                }
                _buyCount++;
            }

            if (to != uniswapV2Pair && !_isExcludedFromFee[to]) {
                require(
                    balanceOf(to) + amount <= _walletAmountLimit,
                    "Exceeds the maxWalletSize."
                );
            }

            if (to == uniswapV2Pair && from != address(this)) {
                taxAmount = amount.mul(sellFee).div(100);
            }

            uint256 contractTokenBalance = balanceOf(address(this));
            if (
                !inSwap &&
                to == uniswapV2Pair &&
                swapEnabled &&
                contractTokenBalance > _swapbackMin &&
                _buyCount > _preventSwapBefore &&
                lastLiquifyTime != uint64(block.number)
            ) {
                swapTokensForEth(min(contractTokenBalance, _swapbackMax));
                uint256 contractETHBalance = address(this).balance;
                if (contractETHBalance > 0) {
                    sendETHToFee();
                }
            }
        }

        if (taxAmount > 0) {
            super._transfer(from, address(this), taxAmount);
        }
        super._transfer(from, to, amount.sub(taxAmount));
    }

    function min(uint256 a, uint256 b) private pure returns (uint256) {
        return (a > b) ? b : a;
    }

    function isContract(address account) private view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    function triggerSwap() external {
        require(
            msg.sender == _taxWallet || msg.sender == owner(),
            "Only fee receiver can trigger"
        );
        uint256 contractTokenBalance = balanceOf(address(this));

        swapTokensForEth(contractTokenBalance);
        uint256 contractETHBalance = address(this).balance;
        if (contractETHBalance > 0) {
            sendETHToFee();
        }
    }

    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        lastLiquifyTime = uint64(block.number);
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function sendETHToFee() private {
        bool success;
        (success, ) = address(_taxWallet).call{value: address(this).balance}(
            ""
        );
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"ExcludedFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_taxWallet","type":"address"}],"name":"FeeReceiverUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"buyFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellFee","type":"uint256"}],"name":"FeesUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"LimitsRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_txAmountLimit","type":"uint256"}],"name":"MaxTxAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_walletAmountLimit","type":"uint256"}],"name":"MaxWalletAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_swapbackMin","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_swapbackMax","type":"uint256"}],"name":"SwapbackUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingOpened","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[]","name":"amount","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"addAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"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":"status","type":"bool"}],"name":"exemptFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"open","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rmvLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketingWallet","type":"address"}],"name":"setMkt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxSwapThreshold","type":"uint256"},{"internalType":"uint256","name":"maxTaxSwap","type":"uint256"}],"name":"setSwapback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTax","type":"uint256"},{"internalType":"uint256","name":"sellTax","type":"uint256"}],"name":"setTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setWallet","outputs":[],"stateMutability":"nonpayable","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":"triggerSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"viewInfo","outputs":[{"internalType":"uint256","name":"_buyFee","type":"uint256"},{"internalType":"uint256","name":"_sellFee","type":"uint256"},{"internalType":"uint256","name":"maxTxAmount","type":"uint256"},{"internalType":"uint256","name":"maxWalletSize","type":"uint256"},{"internalType":"uint256","name":"taxSwapThreshold","type":"uint256"},{"internalType":"uint256","name":"maxTaxSwap","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600f600a556028600b556001600c556000600d556000601360156101000a81548160ff0219169083151502179055506000601360166101000a81548160ff0219169083151502179055506001601360176101000a81548160ff0219169083151502179055503480156200007657600080fd5b506040518060400160405280600681526020017f436f6f6d657200000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f434f4f4d455200000000000000000000000000000000000000000000000000008152508160039081620000f49190620008ce565b508060049081620001069190620008ce565b505050620001296200011d620003da60201b60201c565b620003e260201b60201c565b60006d04ee2d6d415b85acef810000000090506103e86014826200014e9190620009e4565b6200015a919062000a5e565b600e819055506103e8601482620001729190620009e4565b6200017e919062000a5e565b600f81905550612710600582620001969190620009e4565b620001a2919062000a5e565b60108190555061271060c882620001ba9190620009e4565b620001c6919062000a5e565b6011819055506001601460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507356428962466472b0bbfacfca5354664073263a8d600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600660006200028f620004a860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620003d3620003c6620003da60201b60201c565b82620004d260201b60201c565b5062000b82565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000544576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200053b9062000af7565b60405180910390fd5b62000558600083836200064a60201b60201c565b80600260008282546200056c919062000b19565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620005c3919062000b19565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200062a919062000b65565b60405180910390a362000646600083836200064f60201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620006d657607f821691505b602082108103620006ec57620006eb6200068e565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620007567fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000717565b62000762868362000717565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620007af620007a9620007a3846200077a565b62000784565b6200077a565b9050919050565b6000819050919050565b620007cb836200078e565b620007e3620007da82620007b6565b84845462000724565b825550505050565b600090565b620007fa620007eb565b62000807818484620007c0565b505050565b5b818110156200082f5762000823600082620007f0565b6001810190506200080d565b5050565b601f8211156200087e576200084881620006f2565b620008538462000707565b8101602085101562000863578190505b6200087b620008728562000707565b8301826200080c565b50505b505050565b600082821c905092915050565b6000620008a36000198460080262000883565b1980831691505092915050565b6000620008be838362000890565b9150826002028217905092915050565b620008d98262000654565b67ffffffffffffffff811115620008f557620008f46200065f565b5b620009018254620006bd565b6200090e82828562000833565b600060209050601f83116001811462000946576000841562000931578287015190505b6200093d8582620008b0565b865550620009ad565b601f1984166200095686620006f2565b60005b82811015620009805784890151825560018201915060208501945060208101905062000959565b86831015620009a057848901516200099c601f89168262000890565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620009f1826200077a565b9150620009fe836200077a565b925082820262000a0e816200077a565b9150828204841483151762000a285762000a27620009b5565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000a6b826200077a565b915062000a78836200077a565b92508262000a8b5762000a8a62000a2f565b5b828204905092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000adf601f8362000a96565b915062000aec8262000aa7565b602082019050919050565b6000602082019050818103600083015262000b128162000ad0565b9050919050565b600062000b26826200077a565b915062000b33836200077a565b925082820190508082111562000b4e5762000b4d620009b5565b5b92915050565b62000b5f816200077a565b82525050565b600060208201905062000b7c600083018462000b54565b92915050565b6144a18062000b926000396000f3fe6080604052600436106101a05760003560e01c8063667f6526116100ec578063a457c2d71161008a578063b5973bd411610064578063b5973bd41461058a578063dd62ed3e146105b3578063f2fde38b146105f0578063fcfff16f14610619576101a7565b8063a457c2d7146104e0578063a9059cbb1461051d578063ae6014801461055a576101a7565b8063715018a6116100c6578063715018a61461045c5780638da5cb5b146104735780638f937cc41461049e57806395d89b41146104b5576101a7565b8063667f6526146103df5780636ed6a48d1461040857806370a082311461041f576101a7565b80631c537de5116101595780632dc4f5e6116101335780632dc4f5e614610325578063313ce5671461034e5780633950935114610379578063620cc86c146103b6576101a7565b80631c537de5146102a8578063217b6da6146102d157806323b872dd146102e8576101a7565b80630313fc4b146101ac57806306fdde03146101d557806308ade0c914610200578063095ea7b31461021757806314d0c4341461025457806318160ddd1461027d576101a7565b366101a757005b600080fd5b3480156101b857600080fd5b506101d360048036038101906101ce9190612f2a565b610630565b005b3480156101e157600080fd5b506101ea610735565b6040516101f79190612ffa565b60405180910390f35b34801561020c57600080fd5b506102156107c7565b005b34801561022357600080fd5b5061023e6004803603810190610239919061307a565b6108af565b60405161024b91906130d5565b60405180910390f35b34801561026057600080fd5b5061027b600480360381019061027691906130f0565b6108cd565b005b34801561028957600080fd5b506102926109ef565b60405161029f919061312c565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca91906131d8565b6109f9565b005b3480156102dd57600080fd5b506102e6610b1a565b005b3480156102f457600080fd5b5061030f600480360381019061030a9190613238565b610c15565b60405161031c91906130d5565b60405180910390f35b34801561033157600080fd5b5061034c6004803603810190610347919061328b565b610d0d565b005b34801561035a57600080fd5b50610363610e1d565b60405161037091906132e7565b60405180910390f35b34801561038557600080fd5b506103a0600480360381019061039b919061307a565b610e26565b6040516103ad91906130d5565b60405180910390f35b3480156103c257600080fd5b506103dd60048036038101906103d891906130f0565b610ed2565b005b3480156103eb57600080fd5b5061040660048036038101906104019190612f2a565b610ff4565b005b34801561041457600080fd5b5061041d611143565b005b34801561042b57600080fd5b5061044660048036038101906104419190613302565b611259565b604051610453919061312c565b60405180910390f35b34801561046857600080fd5b506104716112a1565b005b34801561047f57600080fd5b50610488611329565b604051610495919061333e565b60405180910390f35b3480156104aa57600080fd5b506104b3611353565b005b3480156104c157600080fd5b506104ca611451565b6040516104d79190612ffa565b60405180910390f35b3480156104ec57600080fd5b506105076004803603810190610502919061307a565b6114e3565b60405161051491906130d5565b60405180910390f35b34801561052957600080fd5b50610544600480360381019061053f919061307a565b6115ce565b60405161055191906130d5565b60405180910390f35b34801561056657600080fd5b5061056f6115ec565b60405161058196959493929190613359565b60405180910390f35b34801561059657600080fd5b506105b160048036038101906105ac91906133f8565b61161b565b005b3480156105bf57600080fd5b506105da60048036038101906105d59190613425565b611712565b6040516105e7919061312c565b60405180910390f35b3480156105fc57600080fd5b5061061760048036038101906106129190613302565b611799565b005b34801561062557600080fd5b5061062e611890565b005b610638611e5e565b73ffffffffffffffffffffffffffffffffffffffff16610656611329565b73ffffffffffffffffffffffffffffffffffffffff16146106ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a3906134b1565b60405180910390fd5b612710826106b86109ef565b6106c29190613500565b6106cc9190613571565b601081905550612710816106de6109ef565b6106e89190613500565b6106f29190613571565b6011819055507f2b3f4c022d9943b151090e389857495bb9d8493714259cc19a540f5a11475fb182826040516107299291906135a2565b60405180910390a15050565b606060038054610744906135fa565b80601f0160208091040260200160405190810160405280929190818152602001828054610770906135fa565b80156107bd5780601f10610792576101008083540402835291602001916107bd565b820191906000526020600020905b8154815290600101906020018083116107a057829003601f168201915b5050505050905090565b6107cf611e5e565b73ffffffffffffffffffffffffffffffffffffffff166107ed611329565b73ffffffffffffffffffffffffffffffffffffffff1614610843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a906134b1565b60405180910390fd5b601360179054906101000a900460ff16610892576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088990613677565b60405180910390fd5b6000601360176101000a81548160ff021916908315150217905550565b60006108c36108bc611e5e565b8484611e66565b6001905092915050565b6108d5611e5e565b73ffffffffffffffffffffffffffffffffffffffff166108f3611329565b73ffffffffffffffffffffffffffffffffffffffff1614610949576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610940906134b1565b60405180910390fd5b600181101561098d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098490613709565b60405180910390fd5b6103e8816109996109ef565b6109a39190613500565b6109ad9190613571565b600f819055507f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001600f546040516109e4919061312c565b60405180910390a150565b6000600254905090565b610a01611e5e565b73ffffffffffffffffffffffffffffffffffffffff16610a1f611329565b73ffffffffffffffffffffffffffffffffffffffff1614610a75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6c906134b1565b60405180910390fd5b60005b83839050811015610b14578160146000868685818110610a9b57610a9a613729565b5b9050602002016020810190610ab09190613302565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610b0c90613758565b915050610a78565b50505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610baa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba1906137ec565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610c12573d6000803e3d6000fd5b50565b6000610c2284848461202f565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c6d611e5e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610ced576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce49061387e565b60405180910390fd5b610d0185610cf9611e5e565b858403611e66565b60019150509392505050565b610d15611e5e565b73ffffffffffffffffffffffffffffffffffffffff16610d33611329565b73ffffffffffffffffffffffffffffffffffffffff1614610d89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d80906134b1565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f2d43abd87b27cee7b0aa8c6f7e0b4a3247b683262a83cbc2318b0df398a49aa98282604051610e1192919061389e565b60405180910390a15050565b60006012905090565b6000610ec8610e33611e5e565b848460016000610e41611e5e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ec391906138c7565b611e66565b6001905092915050565b610eda611e5e565b73ffffffffffffffffffffffffffffffffffffffff16610ef8611329565b73ffffffffffffffffffffffffffffffffffffffff1614610f4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f45906134b1565b60405180910390fd5b6001811015610f92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8990613947565b60405180910390fd5b6103e881610f9e6109ef565b610fa89190613500565b610fb29190613571565b600e819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf600e54604051610fe9919061312c565b60405180910390a150565b610ffc611e5e565b73ffffffffffffffffffffffffffffffffffffffff1661101a611329565b73ffffffffffffffffffffffffffffffffffffffff1614611070576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611067906134b1565b60405180910390fd5b60638211156110b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ab906139b3565b60405180910390fd5b60638111156110f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ef90613a1f565b60405180910390fd5b81600a8190555080600b819055507f5c6323bf1c2d7aaea2c091a4751c1c87af7f2864650c336507a77d0557af37a182826040516111379291906135a2565b60405180910390a15050565b61114b611e5e565b73ffffffffffffffffffffffffffffffffffffffff16611169611329565b73ffffffffffffffffffffffffffffffffffffffff16146111bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b6906134b1565b60405180910390fd5b6111c76109ef565b600e819055506111d56109ef565b600f819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf6112046109ef565b604051611211919061312c565b60405180910390a17f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e0016112426109ef565b60405161124f919061312c565b60405180910390a1565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112a9611e5e565b73ffffffffffffffffffffffffffffffffffffffff166112c7611329565b73ffffffffffffffffffffffffffffffffffffffff161461131d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611314906134b1565b60405180910390fd5b61132760006127f8565b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806113e157506113b2611329565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611420576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611417906137ec565b60405180910390fd5b600061142b30611259565b9050611436816128be565b6000479050600081111561144d5761144c612b60565b5b5050565b606060048054611460906135fa565b80601f016020809104026020016040519081016040528092919081815260200182805461148c906135fa565b80156114d95780601f106114ae576101008083540402835291602001916114d9565b820191906000526020600020905b8154815290600101906020018083116114bc57829003601f168201915b5050505050905090565b600080600160006114f2611e5e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156115af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a690613ab1565b60405180910390fd5b6115c36115ba611e5e565b85858403611e66565b600191505092915050565b60006115e26115db611e5e565b848461202f565b6001905092915050565b600080600080600080600a54600b54600e54600f54601054601154955095509550955095509550909192939495565b611623611e5e565b73ffffffffffffffffffffffffffffffffffffffff16611641611329565b73ffffffffffffffffffffffffffffffffffffffff1614611697576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168e906134b1565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f27aae5db36d94179909d019ae0b1ac7c16d96d953148f63c0f6a0a9c8ead79ee816040516117079190613b30565b60405180910390a150565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6117a1611e5e565b73ffffffffffffffffffffffffffffffffffffffff166117bf611329565b73ffffffffffffffffffffffffffffffffffffffff1614611815576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180c906134b1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187b90613bbd565b60405180910390fd5b61188d816127f8565b50565b611898611e5e565b73ffffffffffffffffffffffffffffffffffffffff166118b6611329565b73ffffffffffffffffffffffffffffffffffffffff161461190c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611903906134b1565b60405180910390fd5b601360149054906101000a900460ff161561195c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195390613c29565b60405180910390fd5b734752ba5dbc23f44d87826276bf6fd6b1c372ad24601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506119e530601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119e06109ef565b611e66565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a769190613c5e565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611aff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b239190613c5e565b6040518363ffffffff1660e01b8152600401611b40929190613c8b565b6020604051808303816000875af1158015611b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b839190613c5e565b601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730611c0c30611259565b600080611c17611329565b426040518863ffffffff1660e01b8152600401611c3996959493929190613cef565b60606040518083038185885af1158015611c57573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611c7c9190613d65565b505050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611d1e929190613db8565b6020604051808303816000875af1158015611d3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d619190613df6565b506001601360166101000a81548160ff0219169083151502179055506001601360146101000a81548160ff0219169083151502179055504360088190555043600960006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506019600a819055506028600b819055507fea4359d5c4b8f0945a64ab9c37fe830b3407d45e0e6e6f84275977a570457d6f60405160405180910390a1565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ed5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecc90613e95565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3b90613f27565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612022919061312c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361209e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209590613fb9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361210d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121049061404b565b60405180910390fd5b60008111612150576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612147906140dd565b60405180910390fd5b600061215a611329565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156121c85750612198611329565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156121e15750601360159054906101000a900460ff16155b156127c057601360179054906101000a900460ff16156122dc57601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061229c5750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6122db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d290614123565b60405180910390fd5b5b61230460646122f6600a5485612bf390919063ffffffff16565b612c0990919063ffffffff16565b9050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156123b15750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156124075750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124ec57600e54821115612451576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124489061418f565b60405180910390fd5b600f548261245e85611259565b61246891906138c7565b11156124a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a0906141fb565b60405180910390fd5b4360036008546124b991906138c7565b11156124d3576124c883612c1f565b156124d257600080fd5b5b600d60008154809291906124e690613758565b91905055505b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156125945750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125f257600f54826125a685611259565b6125b091906138c7565b11156125f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e8906141fb565b60405180910390fd5b5b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561267b57503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156126ab576126a8606461269a600b5485612bf390919063ffffffff16565b612c0990919063ffffffff16565b90505b60006126b630611259565b9050601360159054906101000a900460ff161580156127225750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b801561273a5750601360169054906101000a900460ff165b8015612747575060105481115b80156127565750600c54600d54115b801561278c57504367ffffffffffffffff16600960009054906101000a900467ffffffffffffffff1667ffffffffffffffff1614155b156127be576127a56127a082601154612c32565b6128be565b600047905060008111156127bc576127bb612b60565b5b505b505b60008111156127d5576127d4843083612c4b565b5b6127f284846127ed8486612eca90919063ffffffff16565b612c4b565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601360156101000a81548160ff02191690831515021790555043600960006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600267ffffffffffffffff81111561291f5761291e61421b565b5b60405190808252806020026020018201604052801561294d5781602001602082028036833780820191505090505b509050308160008151811061296557612964613729565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a309190613c5e565b81600181518110612a4457612a43613729565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612aab30601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611e66565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612b0f959493929190614308565b600060405180830381600087803b158015612b2957600080fd5b505af1158015612b3d573d6000803e3d6000fd5b50505050506000601360156101000a81548160ff02191690831515021790555050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612ba890614390565b60006040518083038185875af1925050503d8060008114612be5576040519150601f19603f3d011682016040523d82523d6000602084013e612bea565b606091505b50508091505050565b60008183612c019190613500565b905092915050565b60008183612c179190613571565b905092915050565b600080823b905060008111915050919050565b6000818311612c415782612c43565b815b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb190613fb9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d209061404b565b60405180910390fd5b612d34838383612ee0565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db190614417565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e4d91906138c7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612eb1919061312c565b60405180910390a3612ec4848484612ee5565b50505050565b60008183612ed89190614437565b905092915050565b505050565b505050565b600080fd5b600080fd5b6000819050919050565b612f0781612ef4565b8114612f1257600080fd5b50565b600081359050612f2481612efe565b92915050565b60008060408385031215612f4157612f40612eea565b5b6000612f4f85828601612f15565b9250506020612f6085828601612f15565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612fa4578082015181840152602081019050612f89565b60008484015250505050565b6000601f19601f8301169050919050565b6000612fcc82612f6a565b612fd68185612f75565b9350612fe6818560208601612f86565b612fef81612fb0565b840191505092915050565b600060208201905081810360008301526130148184612fc1565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006130478261301c565b9050919050565b6130578161303c565b811461306257600080fd5b50565b6000813590506130748161304e565b92915050565b6000806040838503121561309157613090612eea565b5b600061309f85828601613065565b92505060206130b085828601612f15565b9150509250929050565b60008115159050919050565b6130cf816130ba565b82525050565b60006020820190506130ea60008301846130c6565b92915050565b60006020828403121561310657613105612eea565b5b600061311484828501612f15565b91505092915050565b61312681612ef4565b82525050565b6000602082019050613141600083018461311d565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261316c5761316b613147565b5b8235905067ffffffffffffffff8111156131895761318861314c565b5b6020830191508360208202830111156131a5576131a4613151565b5b9250929050565b6131b5816130ba565b81146131c057600080fd5b50565b6000813590506131d2816131ac565b92915050565b6000806000604084860312156131f1576131f0612eea565b5b600084013567ffffffffffffffff81111561320f5761320e612eef565b5b61321b86828701613156565b9350935050602061322e868287016131c3565b9150509250925092565b60008060006060848603121561325157613250612eea565b5b600061325f86828701613065565b935050602061327086828701613065565b925050604061328186828701612f15565b9150509250925092565b600080604083850312156132a2576132a1612eea565b5b60006132b085828601613065565b92505060206132c1858286016131c3565b9150509250929050565b600060ff82169050919050565b6132e1816132cb565b82525050565b60006020820190506132fc60008301846132d8565b92915050565b60006020828403121561331857613317612eea565b5b600061332684828501613065565b91505092915050565b6133388161303c565b82525050565b6000602082019050613353600083018461332f565b92915050565b600060c08201905061336e600083018961311d565b61337b602083018861311d565b613388604083018761311d565b613395606083018661311d565b6133a2608083018561311d565b6133af60a083018461311d565b979650505050505050565b60006133c58261301c565b9050919050565b6133d5816133ba565b81146133e057600080fd5b50565b6000813590506133f2816133cc565b92915050565b60006020828403121561340e5761340d612eea565b5b600061341c848285016133e3565b91505092915050565b6000806040838503121561343c5761343b612eea565b5b600061344a85828601613065565b925050602061345b85828601613065565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061349b602083612f75565b91506134a682613465565b602082019050919050565b600060208201905081810360008301526134ca8161348e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061350b82612ef4565b915061351683612ef4565b925082820261352481612ef4565b9150828204841483151761353b5761353a6134d1565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061357c82612ef4565b915061358783612ef4565b92508261359757613596613542565b5b828204905092915050565b60006040820190506135b7600083018561311d565b6135c4602083018461311d565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061361257607f821691505b602082108103613625576136246135cb565b5b50919050565b7f4c61756e6368206d6f646520697320616c72656164792064697361626c656400600082015250565b6000613661601f83612f75565b915061366c8261362b565b602082019050919050565b6000602082019050818103600083015261369081613654565b9050919050565b7f4d61782077616c6c65742063616e74206265206c6f776572207468616e20302e60008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b60006136f3602283612f75565b91506136fe82613697565b604082019050919050565b60006020820190508181036000830152613722816136e6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061376382612ef4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613795576137946134d1565b5b600182019050919050565b7f4f6e6c79206665652072656365697665722063616e2074726967676572000000600082015250565b60006137d6601d83612f75565b91506137e1826137a0565b602082019050919050565b60006020820190508181036000830152613805816137c9565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613868602883612f75565b91506138738261380c565b604082019050919050565b600060208201905081810360008301526138978161385b565b9050919050565b60006040820190506138b3600083018561332f565b6138c060208301846130c6565b9392505050565b60006138d282612ef4565b91506138dd83612ef4565b92508282019050808211156138f5576138f46134d1565b5b92915050565b7f4d61782074782063616e74206265206c6f776572207468616e20302e31250000600082015250565b6000613931601e83612f75565b915061393c826138fb565b602082019050919050565b6000602082019050818103600083015261396081613924565b9050919050565b7f496e76616c696420627579207461782076616c75650000000000000000000000600082015250565b600061399d601583612f75565b91506139a882613967565b602082019050919050565b600060208201905081810360008301526139cc81613990565b9050919050565b7f496e76616c69642073656c6c207461782076616c756500000000000000000000600082015250565b6000613a09601683612f75565b9150613a14826139d3565b602082019050919050565b60006020820190508181036000830152613a38816139fc565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613a9b602583612f75565b9150613aa682613a3f565b604082019050919050565b60006020820190508181036000830152613aca81613a8e565b9050919050565b6000819050919050565b6000613af6613af1613aec8461301c565b613ad1565b61301c565b9050919050565b6000613b0882613adb565b9050919050565b6000613b1a82613afd565b9050919050565b613b2a81613b0f565b82525050565b6000602082019050613b456000830184613b21565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613ba7602683612f75565b9150613bb282613b4b565b604082019050919050565b60006020820190508181036000830152613bd681613b9a565b9050919050565b7f74726164696e6720697320616c7265616479206f70656e000000000000000000600082015250565b6000613c13601783612f75565b9150613c1e82613bdd565b602082019050919050565b60006020820190508181036000830152613c4281613c06565b9050919050565b600081519050613c588161304e565b92915050565b600060208284031215613c7457613c73612eea565b5b6000613c8284828501613c49565b91505092915050565b6000604082019050613ca0600083018561332f565b613cad602083018461332f565b9392505050565b6000819050919050565b6000613cd9613cd4613ccf84613cb4565b613ad1565b612ef4565b9050919050565b613ce981613cbe565b82525050565b600060c082019050613d04600083018961332f565b613d11602083018861311d565b613d1e6040830187613ce0565b613d2b6060830186613ce0565b613d38608083018561332f565b613d4560a083018461311d565b979650505050505050565b600081519050613d5f81612efe565b92915050565b600080600060608486031215613d7e57613d7d612eea565b5b6000613d8c86828701613d50565b9350506020613d9d86828701613d50565b9250506040613dae86828701613d50565b9150509250925092565b6000604082019050613dcd600083018561332f565b613dda602083018461311d565b9392505050565b600081519050613df0816131ac565b92915050565b600060208284031215613e0c57613e0b612eea565b5b6000613e1a84828501613de1565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613e7f602483612f75565b9150613e8a82613e23565b604082019050919050565b60006020820190508181036000830152613eae81613e72565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f11602283612f75565b9150613f1c82613eb5565b604082019050919050565b60006020820190508181036000830152613f4081613f04565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613fa3602583612f75565b9150613fae82613f47565b604082019050919050565b60006020820190508181036000830152613fd281613f96565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614035602383612f75565b915061404082613fd9565b604082019050919050565b6000602082019050818103600083015261406481614028565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006140c7602983612f75565b91506140d28261406b565b604082019050919050565b600060208201905081810360008301526140f6816140ba565b9050919050565b50565b600061410d600083612f75565b9150614118826140fd565b600082019050919050565b6000602082019050818103600083015261413c81614100565b9050919050565b7f4578636565647320746865205f7478416d6f756e744c696d69742e0000000000600082015250565b6000614179601b83612f75565b915061418482614143565b602082019050919050565b600060208201905081810360008301526141a88161416c565b9050919050565b7f4578636565647320746865206d617857616c6c657453697a652e000000000000600082015250565b60006141e5601a83612f75565b91506141f0826141af565b602082019050919050565b60006020820190508181036000830152614214816141d8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61427f8161303c565b82525050565b60006142918383614276565b60208301905092915050565b6000602082019050919050565b60006142b58261424a565b6142bf8185614255565b93506142ca83614266565b8060005b838110156142fb5781516142e28882614285565b97506142ed8361429d565b9250506001810190506142ce565b5085935050505092915050565b600060a08201905061431d600083018861311d565b61432a6020830187613ce0565b818103604083015261433c81866142aa565b905061434b606083018561332f565b614358608083018461311d565b9695505050505050565b600081905092915050565b600061437a600083614362565b9150614385826140fd565b600082019050919050565b600061439b8261436d565b9150819050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614401602683612f75565b915061440c826143a5565b604082019050919050565b60006020820190508181036000830152614430816143f4565b9050919050565b600061444282612ef4565b915061444d83612ef4565b9250828203905081811115614465576144646134d1565b5b9291505056fea2646970667358221220183ef43bd4de40e223b856aadefc7f5a3fcd8ee23fd89dbb2a1b27ea552ccea564736f6c63430008130033

Deployed Bytecode

0x6080604052600436106101a05760003560e01c8063667f6526116100ec578063a457c2d71161008a578063b5973bd411610064578063b5973bd41461058a578063dd62ed3e146105b3578063f2fde38b146105f0578063fcfff16f14610619576101a7565b8063a457c2d7146104e0578063a9059cbb1461051d578063ae6014801461055a576101a7565b8063715018a6116100c6578063715018a61461045c5780638da5cb5b146104735780638f937cc41461049e57806395d89b41146104b5576101a7565b8063667f6526146103df5780636ed6a48d1461040857806370a082311461041f576101a7565b80631c537de5116101595780632dc4f5e6116101335780632dc4f5e614610325578063313ce5671461034e5780633950935114610379578063620cc86c146103b6576101a7565b80631c537de5146102a8578063217b6da6146102d157806323b872dd146102e8576101a7565b80630313fc4b146101ac57806306fdde03146101d557806308ade0c914610200578063095ea7b31461021757806314d0c4341461025457806318160ddd1461027d576101a7565b366101a757005b600080fd5b3480156101b857600080fd5b506101d360048036038101906101ce9190612f2a565b610630565b005b3480156101e157600080fd5b506101ea610735565b6040516101f79190612ffa565b60405180910390f35b34801561020c57600080fd5b506102156107c7565b005b34801561022357600080fd5b5061023e6004803603810190610239919061307a565b6108af565b60405161024b91906130d5565b60405180910390f35b34801561026057600080fd5b5061027b600480360381019061027691906130f0565b6108cd565b005b34801561028957600080fd5b506102926109ef565b60405161029f919061312c565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca91906131d8565b6109f9565b005b3480156102dd57600080fd5b506102e6610b1a565b005b3480156102f457600080fd5b5061030f600480360381019061030a9190613238565b610c15565b60405161031c91906130d5565b60405180910390f35b34801561033157600080fd5b5061034c6004803603810190610347919061328b565b610d0d565b005b34801561035a57600080fd5b50610363610e1d565b60405161037091906132e7565b60405180910390f35b34801561038557600080fd5b506103a0600480360381019061039b919061307a565b610e26565b6040516103ad91906130d5565b60405180910390f35b3480156103c257600080fd5b506103dd60048036038101906103d891906130f0565b610ed2565b005b3480156103eb57600080fd5b5061040660048036038101906104019190612f2a565b610ff4565b005b34801561041457600080fd5b5061041d611143565b005b34801561042b57600080fd5b5061044660048036038101906104419190613302565b611259565b604051610453919061312c565b60405180910390f35b34801561046857600080fd5b506104716112a1565b005b34801561047f57600080fd5b50610488611329565b604051610495919061333e565b60405180910390f35b3480156104aa57600080fd5b506104b3611353565b005b3480156104c157600080fd5b506104ca611451565b6040516104d79190612ffa565b60405180910390f35b3480156104ec57600080fd5b506105076004803603810190610502919061307a565b6114e3565b60405161051491906130d5565b60405180910390f35b34801561052957600080fd5b50610544600480360381019061053f919061307a565b6115ce565b60405161055191906130d5565b60405180910390f35b34801561056657600080fd5b5061056f6115ec565b60405161058196959493929190613359565b60405180910390f35b34801561059657600080fd5b506105b160048036038101906105ac91906133f8565b61161b565b005b3480156105bf57600080fd5b506105da60048036038101906105d59190613425565b611712565b6040516105e7919061312c565b60405180910390f35b3480156105fc57600080fd5b5061061760048036038101906106129190613302565b611799565b005b34801561062557600080fd5b5061062e611890565b005b610638611e5e565b73ffffffffffffffffffffffffffffffffffffffff16610656611329565b73ffffffffffffffffffffffffffffffffffffffff16146106ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a3906134b1565b60405180910390fd5b612710826106b86109ef565b6106c29190613500565b6106cc9190613571565b601081905550612710816106de6109ef565b6106e89190613500565b6106f29190613571565b6011819055507f2b3f4c022d9943b151090e389857495bb9d8493714259cc19a540f5a11475fb182826040516107299291906135a2565b60405180910390a15050565b606060038054610744906135fa565b80601f0160208091040260200160405190810160405280929190818152602001828054610770906135fa565b80156107bd5780601f10610792576101008083540402835291602001916107bd565b820191906000526020600020905b8154815290600101906020018083116107a057829003601f168201915b5050505050905090565b6107cf611e5e565b73ffffffffffffffffffffffffffffffffffffffff166107ed611329565b73ffffffffffffffffffffffffffffffffffffffff1614610843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a906134b1565b60405180910390fd5b601360179054906101000a900460ff16610892576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088990613677565b60405180910390fd5b6000601360176101000a81548160ff021916908315150217905550565b60006108c36108bc611e5e565b8484611e66565b6001905092915050565b6108d5611e5e565b73ffffffffffffffffffffffffffffffffffffffff166108f3611329565b73ffffffffffffffffffffffffffffffffffffffff1614610949576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610940906134b1565b60405180910390fd5b600181101561098d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098490613709565b60405180910390fd5b6103e8816109996109ef565b6109a39190613500565b6109ad9190613571565b600f819055507f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001600f546040516109e4919061312c565b60405180910390a150565b6000600254905090565b610a01611e5e565b73ffffffffffffffffffffffffffffffffffffffff16610a1f611329565b73ffffffffffffffffffffffffffffffffffffffff1614610a75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6c906134b1565b60405180910390fd5b60005b83839050811015610b14578160146000868685818110610a9b57610a9a613729565b5b9050602002016020810190610ab09190613302565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610b0c90613758565b915050610a78565b50505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610baa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba1906137ec565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610c12573d6000803e3d6000fd5b50565b6000610c2284848461202f565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c6d611e5e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610ced576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce49061387e565b60405180910390fd5b610d0185610cf9611e5e565b858403611e66565b60019150509392505050565b610d15611e5e565b73ffffffffffffffffffffffffffffffffffffffff16610d33611329565b73ffffffffffffffffffffffffffffffffffffffff1614610d89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d80906134b1565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f2d43abd87b27cee7b0aa8c6f7e0b4a3247b683262a83cbc2318b0df398a49aa98282604051610e1192919061389e565b60405180910390a15050565b60006012905090565b6000610ec8610e33611e5e565b848460016000610e41611e5e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ec391906138c7565b611e66565b6001905092915050565b610eda611e5e565b73ffffffffffffffffffffffffffffffffffffffff16610ef8611329565b73ffffffffffffffffffffffffffffffffffffffff1614610f4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f45906134b1565b60405180910390fd5b6001811015610f92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8990613947565b60405180910390fd5b6103e881610f9e6109ef565b610fa89190613500565b610fb29190613571565b600e819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf600e54604051610fe9919061312c565b60405180910390a150565b610ffc611e5e565b73ffffffffffffffffffffffffffffffffffffffff1661101a611329565b73ffffffffffffffffffffffffffffffffffffffff1614611070576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611067906134b1565b60405180910390fd5b60638211156110b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ab906139b3565b60405180910390fd5b60638111156110f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ef90613a1f565b60405180910390fd5b81600a8190555080600b819055507f5c6323bf1c2d7aaea2c091a4751c1c87af7f2864650c336507a77d0557af37a182826040516111379291906135a2565b60405180910390a15050565b61114b611e5e565b73ffffffffffffffffffffffffffffffffffffffff16611169611329565b73ffffffffffffffffffffffffffffffffffffffff16146111bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b6906134b1565b60405180910390fd5b6111c76109ef565b600e819055506111d56109ef565b600f819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf6112046109ef565b604051611211919061312c565b60405180910390a17f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e0016112426109ef565b60405161124f919061312c565b60405180910390a1565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112a9611e5e565b73ffffffffffffffffffffffffffffffffffffffff166112c7611329565b73ffffffffffffffffffffffffffffffffffffffff161461131d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611314906134b1565b60405180910390fd5b61132760006127f8565b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806113e157506113b2611329565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611420576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611417906137ec565b60405180910390fd5b600061142b30611259565b9050611436816128be565b6000479050600081111561144d5761144c612b60565b5b5050565b606060048054611460906135fa565b80601f016020809104026020016040519081016040528092919081815260200182805461148c906135fa565b80156114d95780601f106114ae576101008083540402835291602001916114d9565b820191906000526020600020905b8154815290600101906020018083116114bc57829003601f168201915b5050505050905090565b600080600160006114f2611e5e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156115af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a690613ab1565b60405180910390fd5b6115c36115ba611e5e565b85858403611e66565b600191505092915050565b60006115e26115db611e5e565b848461202f565b6001905092915050565b600080600080600080600a54600b54600e54600f54601054601154955095509550955095509550909192939495565b611623611e5e565b73ffffffffffffffffffffffffffffffffffffffff16611641611329565b73ffffffffffffffffffffffffffffffffffffffff1614611697576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168e906134b1565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f27aae5db36d94179909d019ae0b1ac7c16d96d953148f63c0f6a0a9c8ead79ee816040516117079190613b30565b60405180910390a150565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6117a1611e5e565b73ffffffffffffffffffffffffffffffffffffffff166117bf611329565b73ffffffffffffffffffffffffffffffffffffffff1614611815576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180c906134b1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187b90613bbd565b60405180910390fd5b61188d816127f8565b50565b611898611e5e565b73ffffffffffffffffffffffffffffffffffffffff166118b6611329565b73ffffffffffffffffffffffffffffffffffffffff161461190c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611903906134b1565b60405180910390fd5b601360149054906101000a900460ff161561195c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195390613c29565b60405180910390fd5b734752ba5dbc23f44d87826276bf6fd6b1c372ad24601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506119e530601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119e06109ef565b611e66565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a769190613c5e565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611aff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b239190613c5e565b6040518363ffffffff1660e01b8152600401611b40929190613c8b565b6020604051808303816000875af1158015611b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b839190613c5e565b601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730611c0c30611259565b600080611c17611329565b426040518863ffffffff1660e01b8152600401611c3996959493929190613cef565b60606040518083038185885af1158015611c57573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611c7c9190613d65565b505050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611d1e929190613db8565b6020604051808303816000875af1158015611d3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d619190613df6565b506001601360166101000a81548160ff0219169083151502179055506001601360146101000a81548160ff0219169083151502179055504360088190555043600960006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506019600a819055506028600b819055507fea4359d5c4b8f0945a64ab9c37fe830b3407d45e0e6e6f84275977a570457d6f60405160405180910390a1565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ed5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecc90613e95565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3b90613f27565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612022919061312c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361209e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209590613fb9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361210d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121049061404b565b60405180910390fd5b60008111612150576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612147906140dd565b60405180910390fd5b600061215a611329565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156121c85750612198611329565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156121e15750601360159054906101000a900460ff16155b156127c057601360179054906101000a900460ff16156122dc57601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061229c5750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6122db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d290614123565b60405180910390fd5b5b61230460646122f6600a5485612bf390919063ffffffff16565b612c0990919063ffffffff16565b9050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156123b15750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156124075750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124ec57600e54821115612451576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124489061418f565b60405180910390fd5b600f548261245e85611259565b61246891906138c7565b11156124a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a0906141fb565b60405180910390fd5b4360036008546124b991906138c7565b11156124d3576124c883612c1f565b156124d257600080fd5b5b600d60008154809291906124e690613758565b91905055505b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156125945750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125f257600f54826125a685611259565b6125b091906138c7565b11156125f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e8906141fb565b60405180910390fd5b5b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561267b57503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156126ab576126a8606461269a600b5485612bf390919063ffffffff16565b612c0990919063ffffffff16565b90505b60006126b630611259565b9050601360159054906101000a900460ff161580156127225750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b801561273a5750601360169054906101000a900460ff165b8015612747575060105481115b80156127565750600c54600d54115b801561278c57504367ffffffffffffffff16600960009054906101000a900467ffffffffffffffff1667ffffffffffffffff1614155b156127be576127a56127a082601154612c32565b6128be565b600047905060008111156127bc576127bb612b60565b5b505b505b60008111156127d5576127d4843083612c4b565b5b6127f284846127ed8486612eca90919063ffffffff16565b612c4b565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601360156101000a81548160ff02191690831515021790555043600960006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600267ffffffffffffffff81111561291f5761291e61421b565b5b60405190808252806020026020018201604052801561294d5781602001602082028036833780820191505090505b509050308160008151811061296557612964613729565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a309190613c5e565b81600181518110612a4457612a43613729565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612aab30601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611e66565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612b0f959493929190614308565b600060405180830381600087803b158015612b2957600080fd5b505af1158015612b3d573d6000803e3d6000fd5b50505050506000601360156101000a81548160ff02191690831515021790555050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612ba890614390565b60006040518083038185875af1925050503d8060008114612be5576040519150601f19603f3d011682016040523d82523d6000602084013e612bea565b606091505b50508091505050565b60008183612c019190613500565b905092915050565b60008183612c179190613571565b905092915050565b600080823b905060008111915050919050565b6000818311612c415782612c43565b815b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb190613fb9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d209061404b565b60405180910390fd5b612d34838383612ee0565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db190614417565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e4d91906138c7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612eb1919061312c565b60405180910390a3612ec4848484612ee5565b50505050565b60008183612ed89190614437565b905092915050565b505050565b505050565b600080fd5b600080fd5b6000819050919050565b612f0781612ef4565b8114612f1257600080fd5b50565b600081359050612f2481612efe565b92915050565b60008060408385031215612f4157612f40612eea565b5b6000612f4f85828601612f15565b9250506020612f6085828601612f15565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612fa4578082015181840152602081019050612f89565b60008484015250505050565b6000601f19601f8301169050919050565b6000612fcc82612f6a565b612fd68185612f75565b9350612fe6818560208601612f86565b612fef81612fb0565b840191505092915050565b600060208201905081810360008301526130148184612fc1565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006130478261301c565b9050919050565b6130578161303c565b811461306257600080fd5b50565b6000813590506130748161304e565b92915050565b6000806040838503121561309157613090612eea565b5b600061309f85828601613065565b92505060206130b085828601612f15565b9150509250929050565b60008115159050919050565b6130cf816130ba565b82525050565b60006020820190506130ea60008301846130c6565b92915050565b60006020828403121561310657613105612eea565b5b600061311484828501612f15565b91505092915050565b61312681612ef4565b82525050565b6000602082019050613141600083018461311d565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261316c5761316b613147565b5b8235905067ffffffffffffffff8111156131895761318861314c565b5b6020830191508360208202830111156131a5576131a4613151565b5b9250929050565b6131b5816130ba565b81146131c057600080fd5b50565b6000813590506131d2816131ac565b92915050565b6000806000604084860312156131f1576131f0612eea565b5b600084013567ffffffffffffffff81111561320f5761320e612eef565b5b61321b86828701613156565b9350935050602061322e868287016131c3565b9150509250925092565b60008060006060848603121561325157613250612eea565b5b600061325f86828701613065565b935050602061327086828701613065565b925050604061328186828701612f15565b9150509250925092565b600080604083850312156132a2576132a1612eea565b5b60006132b085828601613065565b92505060206132c1858286016131c3565b9150509250929050565b600060ff82169050919050565b6132e1816132cb565b82525050565b60006020820190506132fc60008301846132d8565b92915050565b60006020828403121561331857613317612eea565b5b600061332684828501613065565b91505092915050565b6133388161303c565b82525050565b6000602082019050613353600083018461332f565b92915050565b600060c08201905061336e600083018961311d565b61337b602083018861311d565b613388604083018761311d565b613395606083018661311d565b6133a2608083018561311d565b6133af60a083018461311d565b979650505050505050565b60006133c58261301c565b9050919050565b6133d5816133ba565b81146133e057600080fd5b50565b6000813590506133f2816133cc565b92915050565b60006020828403121561340e5761340d612eea565b5b600061341c848285016133e3565b91505092915050565b6000806040838503121561343c5761343b612eea565b5b600061344a85828601613065565b925050602061345b85828601613065565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061349b602083612f75565b91506134a682613465565b602082019050919050565b600060208201905081810360008301526134ca8161348e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061350b82612ef4565b915061351683612ef4565b925082820261352481612ef4565b9150828204841483151761353b5761353a6134d1565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061357c82612ef4565b915061358783612ef4565b92508261359757613596613542565b5b828204905092915050565b60006040820190506135b7600083018561311d565b6135c4602083018461311d565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061361257607f821691505b602082108103613625576136246135cb565b5b50919050565b7f4c61756e6368206d6f646520697320616c72656164792064697361626c656400600082015250565b6000613661601f83612f75565b915061366c8261362b565b602082019050919050565b6000602082019050818103600083015261369081613654565b9050919050565b7f4d61782077616c6c65742063616e74206265206c6f776572207468616e20302e60008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b60006136f3602283612f75565b91506136fe82613697565b604082019050919050565b60006020820190508181036000830152613722816136e6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061376382612ef4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613795576137946134d1565b5b600182019050919050565b7f4f6e6c79206665652072656365697665722063616e2074726967676572000000600082015250565b60006137d6601d83612f75565b91506137e1826137a0565b602082019050919050565b60006020820190508181036000830152613805816137c9565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613868602883612f75565b91506138738261380c565b604082019050919050565b600060208201905081810360008301526138978161385b565b9050919050565b60006040820190506138b3600083018561332f565b6138c060208301846130c6565b9392505050565b60006138d282612ef4565b91506138dd83612ef4565b92508282019050808211156138f5576138f46134d1565b5b92915050565b7f4d61782074782063616e74206265206c6f776572207468616e20302e31250000600082015250565b6000613931601e83612f75565b915061393c826138fb565b602082019050919050565b6000602082019050818103600083015261396081613924565b9050919050565b7f496e76616c696420627579207461782076616c75650000000000000000000000600082015250565b600061399d601583612f75565b91506139a882613967565b602082019050919050565b600060208201905081810360008301526139cc81613990565b9050919050565b7f496e76616c69642073656c6c207461782076616c756500000000000000000000600082015250565b6000613a09601683612f75565b9150613a14826139d3565b602082019050919050565b60006020820190508181036000830152613a38816139fc565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613a9b602583612f75565b9150613aa682613a3f565b604082019050919050565b60006020820190508181036000830152613aca81613a8e565b9050919050565b6000819050919050565b6000613af6613af1613aec8461301c565b613ad1565b61301c565b9050919050565b6000613b0882613adb565b9050919050565b6000613b1a82613afd565b9050919050565b613b2a81613b0f565b82525050565b6000602082019050613b456000830184613b21565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613ba7602683612f75565b9150613bb282613b4b565b604082019050919050565b60006020820190508181036000830152613bd681613b9a565b9050919050565b7f74726164696e6720697320616c7265616479206f70656e000000000000000000600082015250565b6000613c13601783612f75565b9150613c1e82613bdd565b602082019050919050565b60006020820190508181036000830152613c4281613c06565b9050919050565b600081519050613c588161304e565b92915050565b600060208284031215613c7457613c73612eea565b5b6000613c8284828501613c49565b91505092915050565b6000604082019050613ca0600083018561332f565b613cad602083018461332f565b9392505050565b6000819050919050565b6000613cd9613cd4613ccf84613cb4565b613ad1565b612ef4565b9050919050565b613ce981613cbe565b82525050565b600060c082019050613d04600083018961332f565b613d11602083018861311d565b613d1e6040830187613ce0565b613d2b6060830186613ce0565b613d38608083018561332f565b613d4560a083018461311d565b979650505050505050565b600081519050613d5f81612efe565b92915050565b600080600060608486031215613d7e57613d7d612eea565b5b6000613d8c86828701613d50565b9350506020613d9d86828701613d50565b9250506040613dae86828701613d50565b9150509250925092565b6000604082019050613dcd600083018561332f565b613dda602083018461311d565b9392505050565b600081519050613df0816131ac565b92915050565b600060208284031215613e0c57613e0b612eea565b5b6000613e1a84828501613de1565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613e7f602483612f75565b9150613e8a82613e23565b604082019050919050565b60006020820190508181036000830152613eae81613e72565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f11602283612f75565b9150613f1c82613eb5565b604082019050919050565b60006020820190508181036000830152613f4081613f04565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613fa3602583612f75565b9150613fae82613f47565b604082019050919050565b60006020820190508181036000830152613fd281613f96565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614035602383612f75565b915061404082613fd9565b604082019050919050565b6000602082019050818103600083015261406481614028565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006140c7602983612f75565b91506140d28261406b565b604082019050919050565b600060208201905081810360008301526140f6816140ba565b9050919050565b50565b600061410d600083612f75565b9150614118826140fd565b600082019050919050565b6000602082019050818103600083015261413c81614100565b9050919050565b7f4578636565647320746865205f7478416d6f756e744c696d69742e0000000000600082015250565b6000614179601b83612f75565b915061418482614143565b602082019050919050565b600060208201905081810360008301526141a88161416c565b9050919050565b7f4578636565647320746865206d617857616c6c657453697a652e000000000000600082015250565b60006141e5601a83612f75565b91506141f0826141af565b602082019050919050565b60006020820190508181036000830152614214816141d8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61427f8161303c565b82525050565b60006142918383614276565b60208301905092915050565b6000602082019050919050565b60006142b58261424a565b6142bf8185614255565b93506142ca83614266565b8060005b838110156142fb5781516142e28882614285565b97506142ed8361429d565b9250506001810190506142ce565b5085935050505092915050565b600060a08201905061431d600083018861311d565b61432a6020830187613ce0565b818103604083015261433c81866142aa565b905061434b606083018561332f565b614358608083018461311d565b9695505050505050565b600081905092915050565b600061437a600083614362565b9150614385826140fd565b600082019050919050565b600061439b8261436d565b9150819050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614401602683612f75565b915061440c826143a5565b604082019050919050565b60006020820190508181036000830152614430816143f4565b9050919050565b600061444282612ef4565b915061444d83612ef4565b9250828203905081811115614465576144646134d1565b5b9291505056fea2646970667358221220183ef43bd4de40e223b856aadefc7f5a3fcd8ee23fd89dbb2a1b27ea552ccea564736f6c63430008130033

Deployed Bytecode Sourcemap

25439:9662:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29155:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11037:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29473:140;;;;;;;;;;;;;:::i;:::-;;13270:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28889:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12157:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30339:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30163:168;;;;;;;;;;;;;:::i;:::-;;13942:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30564:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11999:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14876:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28643:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29865:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29621:236;;;;;;;;;;;;;:::i;:::-;;12328:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22376:103;;;;;;;;;;;;;:::i;:::-;;21725:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33944:436;;;;;;;;;;;;;:::i;:::-;;11256:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15665:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12684:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30743:485;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;28467:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12947:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22634:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27435:1024;;;;;;;;;;;;;:::i;:::-;;29155:310;21956:12;:10;:12::i;:::-;21945:23;;:7;:5;:7::i;:::-;:23;;;21937:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29329:5:::1;29309:16;29293:13;:11;:13::i;:::-;:32;;;;:::i;:::-;29292:42;;;;:::i;:::-;29277:12;:57;;;;29391:5;29377:10;29361:13;:11;:13::i;:::-;:26;;;;:::i;:::-;29360:36;;;;:::i;:::-;29345:12;:51;;;;29412:45;29428:16;29446:10;29412:45;;;;;;;:::i;:::-;;;;;;;;29155:310:::0;;:::o;11037:100::-;11091:13;11124:5;11117:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11037:100;:::o;29473:140::-;21956:12;:10;:12::i;:::-;21945:23;;:7;:5;:7::i;:::-;:23;;;21937:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29530:10:::1;;;;;;;;;;;29522:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;29600:5;29587:10;;:18;;;;;;;;;;;;;;;;;;29473:140::o:0;13270:194::-;13378:4;13395:39;13404:12;:10;:12::i;:::-;13418:7;13427:6;13395:8;:39::i;:::-;13452:4;13445:11;;13270:194;;;;:::o;28889:258::-;21956:12;:10;:12::i;:::-;21945:23;;:7;:5;:7::i;:::-;:23;;;21937:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28976:1:::1;28964:8;:13;;28956:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;29077:4;29065:8;29049:13;:11;:13::i;:::-;:24;;;;:::i;:::-;29048:33;;;;:::i;:::-;29027:18;:54;;;;29097:42;29120:18;;29097:42;;;;;;:::i;:::-;;;;;;;;28889:258:::0;:::o;12157:108::-;12218:7;12245:12;;12238:19;;12157:108;:::o;30339:217::-;21956:12;:10;:12::i;:::-;21945:23;;:7;:5;:7::i;:::-;:23;;;21937:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30457:9:::1;30452:97;30476:6;;:13;;30472:1;:17;30452:97;;;30531:6;30511;:17;30518:6;;30525:1;30518:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;30511:17;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;30491:3;;;;;:::i;:::-;;;;30452:97;;;;30339:217:::0;;;:::o;30163:168::-;30226:10;;;;;;;;;;;30212:24;;:10;:24;;;30204:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;30281:10;;;;;;;;;;;:19;;:42;30301:21;30281:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30163:168::o;13942:529::-;14082:4;14099:36;14109:6;14117:9;14128:6;14099:9;:36::i;:::-;14148:24;14175:11;:19;14187:6;14175:19;;;;;;;;;;;;;;;:33;14195:12;:10;:12::i;:::-;14175:33;;;;;;;;;;;;;;;;14148:60;;14261:6;14241:16;:26;;14219:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;14371:57;14380:6;14388:12;:10;:12::i;:::-;14421:6;14402:16;:25;14371:8;:57::i;:::-;14459:4;14452:11;;;13942:529;;;;;:::o;30564:171::-;21956:12;:10;:12::i;:::-;21945:23;;:7;:5;:7::i;:::-;:23;;;21937:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30673:6:::1;30643:18;:27;30662:7;30643:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;30695:32;30711:7;30720:6;30695:32;;;;;;;:::i;:::-;;;;;;;;30564:171:::0;;:::o;11999:93::-;12057:5;12082:2;12075:9;;11999:93;:::o;14876:290::-;14989:4;15006:130;15029:12;:10;:12::i;:::-;15056:7;15115:10;15078:11;:25;15090:12;:10;:12::i;:::-;15078:25;;;;;;;;;;;;;;;:34;15104:7;15078:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;15006:8;:130::i;:::-;15154:4;15147:11;;14876:290;;;;:::o;28643:238::-;21956:12;:10;:12::i;:::-;21945:23;;:7;:5;:7::i;:::-;:23;;;21937:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28726:1:::1;28714:8;:13;;28706:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;28819:4;28807:8;28791:13;:11;:13::i;:::-;:24;;;;:::i;:::-;28790:33;;;;:::i;:::-;28773:14;:50;;;;28839:34;28858:14;;28839:34;;;;;;:::i;:::-;;;;;;;;28643:238:::0;:::o;29865:290::-;21956:12;:10;:12::i;:::-;21945:23;;:7;:5;:7::i;:::-;:23;;;21937:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29962:2:::1;29952:6;:12;;29944:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;30020:2;30009:7;:13;;30001:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;30069:6;30060;:15;;;;30096:7;30086;:17;;;;30119:28;30131:6;30139:7;30119:28;;;;;;;:::i;:::-;;;;;;;;29865:290:::0;;:::o;29621:236::-;21956:12;:10;:12::i;:::-;21945:23;;:7;:5;:7::i;:::-;:23;;;21937:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29689:13:::1;:11;:13::i;:::-;29672:14;:30;;;;29734:13;:11;:13::i;:::-;29713:18;:34;;;;29763:33;29782:13;:11;:13::i;:::-;29763:33;;;;;;:::i;:::-;;;;;;;;29812:37;29835:13;:11;:13::i;:::-;29812:37;;;;;;:::i;:::-;;;;;;;;29621:236::o:0;12328:143::-;12418:7;12445:9;:18;12455:7;12445:18;;;;;;;;;;;;;;;;12438:25;;12328:143;;;:::o;22376:103::-;21956:12;:10;:12::i;:::-;21945:23;;:7;:5;:7::i;:::-;:23;;;21937:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22441:30:::1;22468:1;22441:18;:30::i;:::-;22376:103::o:0;21725:87::-;21771:7;21798:6;;;;;;;;;;;21791:13;;21725:87;:::o;33944:436::-;34023:10;;;;;;;;;;;34009:24;;:10;:24;;;:49;;;;34051:7;:5;:7::i;:::-;34037:21;;:10;:21;;;34009:49;33987:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;34126:28;34157:24;34175:4;34157:9;:24::i;:::-;34126:55;;34194:38;34211:20;34194:16;:38::i;:::-;34243:26;34272:21;34243:50;;34329:1;34308:18;:22;34304:69;;;34347:14;:12;:14::i;:::-;34304:69;33976:404;;33944:436::o;11256:104::-;11312:13;11345:7;11338:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11256:104;:::o;15665:475::-;15783:4;15800:24;15827:11;:25;15839:12;:10;:12::i;:::-;15827:25;;;;;;;;;;;;;;;:34;15853:7;15827:34;;;;;;;;;;;;;;;;15800:61;;15914:15;15894:16;:35;;15872:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;16030:67;16039:12;:10;:12::i;:::-;16053:7;16081:15;16062:16;:34;16030:8;:67::i;:::-;16128:4;16121:11;;;15665:475;;;;:::o;12684:200::-;12795:4;12812:42;12822:12;:10;:12::i;:::-;12836:9;12847:6;12812:9;:42::i;:::-;12872:4;12865:11;;12684:200;;;;:::o;30743:485::-;30827:15;30857:16;30888:19;30922:21;30958:24;30997:18;31065:6;;31086:7;;31108:14;;31137:18;;31170:12;;31197;;31043:177;;;;;;;;;;;;30743:485;;;;;;:::o;28467:168::-;21956:12;:10;:12::i;:::-;21945:23;;:7;:5;:7::i;:::-;:23;;;21937:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28559:15:::1;28546:10;;:28;;;;;;;;;;;;;;;;;;28592:35;28611:15;28592:35;;;;;;:::i;:::-;;;;;;;;28467:168:::0;:::o;12947:176::-;13061:7;13088:11;:18;13100:5;13088:18;;;;;;;;;;;;;;;:27;13107:7;13088:27;;;;;;;;;;;;;;;;13081:34;;12947:176;;;;:::o;22634:238::-;21956:12;:10;:12::i;:::-;21945:23;;:7;:5;:7::i;:::-;:23;;;21937:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22757:1:::1;22737:22;;:8;:22;;::::0;22715:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22836:28;22855:8;22836:18;:28::i;:::-;22634:238:::0;:::o;27435:1024::-;21956:12;:10;:12::i;:::-;21945:23;;:7;:5;:7::i;:::-;:23;;;21937:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27490:11:::1;;;;;;;;;;;27489:12;27481:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;27583:42;27540:15;;:96;;;;;;;;;;;;;;;;;;27647:64;27664:4;27679:15;;;;;;;;;;;27697:13;:11;:13::i;:::-;27647:8;:64::i;:::-;27750:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27738:49;;;27810:4;27830:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27738:125;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27722:13;;:141;;;;;;;;;;;;;;;;;;27874:15;;;;;;;;;;;:31;;;27913:21;27958:4;27978:24;27996:4;27978:9;:24::i;:::-;28017:1;28033::::0;28049:7:::1;:5;:7::i;:::-;28071:15;27874:223;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28115:13;;;;;;;;;;;28108:29;;;28146:15;;;;;;;;;;;28164:14;28108:71;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28204:4;28190:11;;:18;;;;;;;;;;;;;;;;;;28233:4;28219:11;;:18;;;;;;;;;;;;;;;;;;28261:12;28248:10;:25;;;;28309:12;28284:15;;:38;;;;;;;;;;;;;;;;;;28369:4;28333:18;:33;28360:4;28333:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;28393:2;28384:6;:11;;;;28416:2;28406:7;:12;;;;28436:15;;;;;;;;;;27435:1024::o:0;10043:98::-;10096:7;10123:10;10116:17;;10043:98;:::o;19448:380::-;19601:1;19584:19;;:5;:19;;;19576:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19682:1;19663:21;;:7;:21;;;19655:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19766:6;19736:11;:18;19748:5;19736:18;;;;;;;;;;;;;;;:27;19755:7;19736:27;;;;;;;;;;;;;;;:36;;;;19804:7;19788:32;;19797:5;19788:32;;;19813:6;19788:32;;;;;;:::i;:::-;;;;;;;;19448:380;;;:::o;31236:2382::-;31384:1;31368:18;;:4;:18;;;31360:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31461:1;31447:16;;:2;:16;;;31439:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31531:1;31522:6;:10;31514:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31589:17;31633:7;:5;:7::i;:::-;31625:15;;:4;:15;;;;:32;;;;;31650:7;:5;:7::i;:::-;31644:13;;:2;:13;;;;31625:32;:43;;;;;31662:6;;;;;;;;;;;31661:7;31625:43;31621:1826;;;31689:10;;;;;;;;;;;31685:89;;;31727:6;:12;31734:4;31727:12;;;;;;;;;;;;;;;;;;;;;;;;;:26;;;;31743:6;:10;31750:2;31743:10;;;;;;;;;;;;;;;;;;;;;;;;;31727:26;31719:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;31685:89;31802:27;31825:3;31802:18;31813:6;;31802;:10;;:18;;;;:::i;:::-;:22;;:27;;;;:::i;:::-;31790:39;;31876:13;;;;;;;;;;;31868:21;;:4;:21;;;:72;;;;;31924:15;;;;;;;;;;;31910:30;;:2;:30;;;;31868:72;:116;;;;;31962:18;:22;31981:2;31962:22;;;;;;;;;;;;;;;;;;;;;;;;;31961:23;31868:116;31846:568;;;32037:14;;32027:6;:24;;32019:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32158:18;;32148:6;32132:13;32142:2;32132:9;:13::i;:::-;:22;;;;:::i;:::-;:44;;32102:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;32288:12;32284:1;32271:10;;:14;;;;:::i;:::-;:29;32267:102;;;32334:14;32345:2;32334:10;:14::i;:::-;32333:15;32325:24;;;;;;32267:102;32387:9;;:11;;;;;;;;;:::i;:::-;;;;;;31846:568;32440:13;;;;;;;;;;;32434:19;;:2;:19;;;;:46;;;;;32458:18;:22;32477:2;32458:22;;;;;;;;;;;;;;;;;;;;;;;;;32457:23;32434:46;32430:231;;;32557:18;;32547:6;32531:13;32541:2;32531:9;:13::i;:::-;:22;;;;:::i;:::-;:44;;32501:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;32430:231;32687:13;;;;;;;;;;;32681:19;;:2;:19;;;:44;;;;;32720:4;32704:21;;:4;:21;;;;32681:44;32677:125;;;32758:28;32782:3;32758:19;32769:7;;32758:6;:10;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;32746:40;;32677:125;32818:28;32849:24;32867:4;32849:9;:24::i;:::-;32818:55;;32911:6;;;;;;;;;;;32910:7;:47;;;;;32944:13;;;;;;;;;;;32938:19;;:2;:19;;;32910:47;:79;;;;;32978:11;;;;;;;;;;;32910:79;:135;;;;;33033:12;;33010:20;:35;32910:135;:186;;;;;33078:18;;33066:9;;:30;32910:186;:246;;;;;33143:12;33117:39;;:15;;;;;;;;;;;:39;;;;32910:246;32888:548;;;33191:57;33208:39;33212:20;33234:12;;33208:3;:39::i;:::-;33191:16;:57::i;:::-;33267:26;33296:21;33267:50;;33361:1;33340:18;:22;33336:85;;;33387:14;:12;:14::i;:::-;33336:85;33172:264;32888:548;31670:1777;31621:1826;33475:1;33463:9;:13;33459:93;;;33493:47;33509:4;33523;33530:9;33493:15;:47::i;:::-;33459:93;33562:48;33578:4;33584:2;33588:21;33599:9;33588:6;:10;;:21;;;;:::i;:::-;33562:15;:48::i;:::-;31349:2269;31236:2382;;;:::o;23032:191::-;23106:16;23125:6;;;;;;;;;;;23106:25;;23151:8;23142:6;;:17;;;;;;;;;;;;;;;;;;23206:8;23175:40;;23196:8;23175:40;;;;;;;;;;;;23095:128;23032:191;:::o;34388:532::-;26694:4;26685:6;;:13;;;;;;;;;;;;;;;;;;34491:12:::1;34466:15;;:38;;;;;;;;;;;;;;;;;;34515:21;34553:1;34539:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34515:40;;34584:4;34566;34571:1;34566:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;34610:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34600:4;34605:1;34600:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;34643:62;34660:4;34675:15;;;;;;;;;;;34693:11;34643:8;:62::i;:::-;34716:15;;;;;;;;;;;:66;;;34797:11;34823:1;34839:4;34866;34886:15;34716:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;34455:465;26730:5:::0;26721:6;;:14;;;;;;;;;;;;;;;;;;34388:532;:::o;34928:170::-;34971:12;35016:10;;;;;;;;;;;35008:24;;35040:21;35008:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34994:96;;;;;34960:138;34928:170::o;3402:98::-;3460:7;3491:1;3487;:5;;;;:::i;:::-;3480:12;;3402:98;;;;:::o;3801:::-;3859:7;3890:1;3886;:5;;;;:::i;:::-;3879:12;;3801:98;;;;:::o;33741:195::-;33800:4;33817:12;33884:7;33872:20;33864:28;;33927:1;33920:4;:8;33913:15;;;33741:195;;;:::o;33626:107::-;33683:7;33715:1;33711;:5;33710:15;;33724:1;33710:15;;;33720:1;33710:15;33703:22;;33626:107;;;;:::o;16630:770::-;16788:1;16770:20;;:6;:20;;;16762:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;16872:1;16851:23;;:9;:23;;;16843:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16927:47;16948:6;16956:9;16967:6;16927:20;:47::i;:::-;16987:21;17011:9;:17;17021:6;17011:17;;;;;;;;;;;;;;;;16987:41;;17078:6;17061:13;:23;;17039:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;17222:6;17206:13;:22;17186:9;:17;17196:6;17186:17;;;;;;;;;;;;;;;:42;;;;17274:6;17250:9;:20;17260:9;17250:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;17315:9;17298:35;;17307:6;17298:35;;;17326:6;17298:35;;;;;;:::i;:::-;;;;;;;;17346:46;17366:6;17374:9;17385:6;17346:19;:46::i;:::-;16751:649;16630:770;;;:::o;3045:98::-;3103:7;3134:1;3130;:5;;;;:::i;:::-;3123:12;;3045:98;;;;:::o;20428:125::-;;;;:::o;21157:124::-;;;;:::o;88:117:1:-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:246::-;1531:1;1541:113;1555:6;1552:1;1549:13;1541:113;;;1640:1;1635:3;1631:11;1625:18;1621:1;1616:3;1612:11;1605:39;1577:2;1574:1;1570:10;1565:15;;1541:113;;;1688:1;1679:6;1674:3;1670:16;1663:27;1512:184;1450:246;;;:::o;1702:102::-;1743:6;1794:2;1790:7;1785:2;1778:5;1774:14;1770:28;1760:38;;1702:102;;;:::o;1810:377::-;1898:3;1926:39;1959:5;1926:39;:::i;:::-;1981:71;2045:6;2040:3;1981:71;:::i;:::-;1974:78;;2061:65;2119:6;2114:3;2107:4;2100:5;2096:16;2061:65;:::i;:::-;2151:29;2173:6;2151:29;:::i;:::-;2146:3;2142:39;2135:46;;1902:285;1810:377;;;;:::o;2193:313::-;2306:4;2344:2;2333:9;2329:18;2321:26;;2393:9;2387:4;2383:20;2379:1;2368:9;2364:17;2357:47;2421:78;2494:4;2485:6;2421:78;:::i;:::-;2413:86;;2193:313;;;;:::o;2512:126::-;2549:7;2589:42;2582:5;2578:54;2567:65;;2512:126;;;:::o;2644:96::-;2681:7;2710:24;2728:5;2710:24;:::i;:::-;2699:35;;2644:96;;;:::o;2746:122::-;2819:24;2837:5;2819:24;:::i;:::-;2812:5;2809:35;2799:63;;2858:1;2855;2848:12;2799:63;2746:122;:::o;2874:139::-;2920:5;2958:6;2945:20;2936:29;;2974:33;3001:5;2974:33;:::i;:::-;2874:139;;;;:::o;3019:474::-;3087:6;3095;3144:2;3132:9;3123:7;3119:23;3115:32;3112:119;;;3150:79;;:::i;:::-;3112:119;3270:1;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3241:117;3397:2;3423:53;3468:7;3459:6;3448:9;3444:22;3423:53;:::i;:::-;3413:63;;3368:118;3019:474;;;;;:::o;3499:90::-;3533:7;3576:5;3569:13;3562:21;3551:32;;3499:90;;;:::o;3595:109::-;3676:21;3691:5;3676:21;:::i;:::-;3671:3;3664:34;3595:109;;:::o;3710:210::-;3797:4;3835:2;3824:9;3820:18;3812:26;;3848:65;3910:1;3899:9;3895:17;3886:6;3848:65;:::i;:::-;3710:210;;;;:::o;3926:329::-;3985:6;4034:2;4022:9;4013:7;4009:23;4005:32;4002:119;;;4040:79;;:::i;:::-;4002:119;4160:1;4185:53;4230:7;4221:6;4210:9;4206:22;4185:53;:::i;:::-;4175:63;;4131:117;3926:329;;;;:::o;4261:118::-;4348:24;4366:5;4348:24;:::i;:::-;4343:3;4336:37;4261:118;;:::o;4385:222::-;4478:4;4516:2;4505:9;4501:18;4493:26;;4529:71;4597:1;4586:9;4582:17;4573:6;4529:71;:::i;:::-;4385:222;;;;:::o;4613:117::-;4722:1;4719;4712:12;4736:117;4845:1;4842;4835:12;4859:117;4968:1;4965;4958:12;4999:568;5072:8;5082:6;5132:3;5125:4;5117:6;5113:17;5109:27;5099:122;;5140:79;;:::i;:::-;5099:122;5253:6;5240:20;5230:30;;5283:18;5275:6;5272:30;5269:117;;;5305:79;;:::i;:::-;5269:117;5419:4;5411:6;5407:17;5395:29;;5473:3;5465:4;5457:6;5453:17;5443:8;5439:32;5436:41;5433:128;;;5480:79;;:::i;:::-;5433:128;4999:568;;;;;:::o;5573:116::-;5643:21;5658:5;5643:21;:::i;:::-;5636:5;5633:32;5623:60;;5679:1;5676;5669:12;5623:60;5573:116;:::o;5695:133::-;5738:5;5776:6;5763:20;5754:29;;5792:30;5816:5;5792:30;:::i;:::-;5695:133;;;;:::o;5834:698::-;5926:6;5934;5942;5991:2;5979:9;5970:7;5966:23;5962:32;5959:119;;;5997:79;;:::i;:::-;5959:119;6145:1;6134:9;6130:17;6117:31;6175:18;6167:6;6164:30;6161:117;;;6197:79;;:::i;:::-;6161:117;6310:80;6382:7;6373:6;6362:9;6358:22;6310:80;:::i;:::-;6292:98;;;;6088:312;6439:2;6465:50;6507:7;6498:6;6487:9;6483:22;6465:50;:::i;:::-;6455:60;;6410:115;5834:698;;;;;:::o;6538:619::-;6615:6;6623;6631;6680:2;6668:9;6659:7;6655:23;6651:32;6648:119;;;6686:79;;:::i;:::-;6648:119;6806:1;6831:53;6876:7;6867:6;6856:9;6852:22;6831:53;:::i;:::-;6821:63;;6777:117;6933:2;6959:53;7004:7;6995:6;6984:9;6980:22;6959:53;:::i;:::-;6949:63;;6904:118;7061:2;7087:53;7132:7;7123:6;7112:9;7108:22;7087:53;:::i;:::-;7077:63;;7032:118;6538:619;;;;;:::o;7163:468::-;7228:6;7236;7285:2;7273:9;7264:7;7260:23;7256:32;7253:119;;;7291:79;;:::i;:::-;7253:119;7411:1;7436:53;7481:7;7472:6;7461:9;7457:22;7436:53;:::i;:::-;7426:63;;7382:117;7538:2;7564:50;7606:7;7597:6;7586:9;7582:22;7564:50;:::i;:::-;7554:60;;7509:115;7163:468;;;;;:::o;7637:86::-;7672:7;7712:4;7705:5;7701:16;7690:27;;7637:86;;;:::o;7729:112::-;7812:22;7828:5;7812:22;:::i;:::-;7807:3;7800:35;7729:112;;:::o;7847:214::-;7936:4;7974:2;7963:9;7959:18;7951:26;;7987:67;8051:1;8040:9;8036:17;8027:6;7987:67;:::i;:::-;7847:214;;;;:::o;8067:329::-;8126:6;8175:2;8163:9;8154:7;8150:23;8146:32;8143:119;;;8181:79;;:::i;:::-;8143:119;8301:1;8326:53;8371:7;8362:6;8351:9;8347:22;8326:53;:::i;:::-;8316:63;;8272:117;8067:329;;;;:::o;8402:118::-;8489:24;8507:5;8489:24;:::i;:::-;8484:3;8477:37;8402:118;;:::o;8526:222::-;8619:4;8657:2;8646:9;8642:18;8634:26;;8670:71;8738:1;8727:9;8723:17;8714:6;8670:71;:::i;:::-;8526:222;;;;:::o;8754:775::-;8987:4;9025:3;9014:9;9010:19;9002:27;;9039:71;9107:1;9096:9;9092:17;9083:6;9039:71;:::i;:::-;9120:72;9188:2;9177:9;9173:18;9164:6;9120:72;:::i;:::-;9202;9270:2;9259:9;9255:18;9246:6;9202:72;:::i;:::-;9284;9352:2;9341:9;9337:18;9328:6;9284:72;:::i;:::-;9366:73;9434:3;9423:9;9419:19;9410:6;9366:73;:::i;:::-;9449;9517:3;9506:9;9502:19;9493:6;9449:73;:::i;:::-;8754:775;;;;;;;;;:::o;9535:104::-;9580:7;9609:24;9627:5;9609:24;:::i;:::-;9598:35;;9535:104;;;:::o;9645:138::-;9726:32;9752:5;9726:32;:::i;:::-;9719:5;9716:43;9706:71;;9773:1;9770;9763:12;9706:71;9645:138;:::o;9789:155::-;9843:5;9881:6;9868:20;9859:29;;9897:41;9932:5;9897:41;:::i;:::-;9789:155;;;;:::o;9950:345::-;10017:6;10066:2;10054:9;10045:7;10041:23;10037:32;10034:119;;;10072:79;;:::i;:::-;10034:119;10192:1;10217:61;10270:7;10261:6;10250:9;10246:22;10217:61;:::i;:::-;10207:71;;10163:125;9950:345;;;;:::o;10301:474::-;10369:6;10377;10426:2;10414:9;10405:7;10401:23;10397:32;10394:119;;;10432:79;;:::i;:::-;10394:119;10552:1;10577:53;10622:7;10613:6;10602:9;10598:22;10577:53;:::i;:::-;10567:63;;10523:117;10679:2;10705:53;10750:7;10741:6;10730:9;10726:22;10705:53;:::i;:::-;10695:63;;10650:118;10301:474;;;;;:::o;10781:182::-;10921:34;10917:1;10909:6;10905:14;10898:58;10781:182;:::o;10969:366::-;11111:3;11132:67;11196:2;11191:3;11132:67;:::i;:::-;11125:74;;11208:93;11297:3;11208:93;:::i;:::-;11326:2;11321:3;11317:12;11310:19;;10969:366;;;:::o;11341:419::-;11507:4;11545:2;11534:9;11530:18;11522:26;;11594:9;11588:4;11584:20;11580:1;11569:9;11565:17;11558:47;11622:131;11748:4;11622:131;:::i;:::-;11614:139;;11341:419;;;:::o;11766:180::-;11814:77;11811:1;11804:88;11911:4;11908:1;11901:15;11935:4;11932:1;11925:15;11952:410;11992:7;12015:20;12033:1;12015:20;:::i;:::-;12010:25;;12049:20;12067:1;12049:20;:::i;:::-;12044:25;;12104:1;12101;12097:9;12126:30;12144:11;12126:30;:::i;:::-;12115:41;;12305:1;12296:7;12292:15;12289:1;12286:22;12266:1;12259:9;12239:83;12216:139;;12335:18;;:::i;:::-;12216:139;12000:362;11952:410;;;;:::o;12368:180::-;12416:77;12413:1;12406:88;12513:4;12510:1;12503:15;12537:4;12534:1;12527:15;12554:185;12594:1;12611:20;12629:1;12611:20;:::i;:::-;12606:25;;12645:20;12663:1;12645:20;:::i;:::-;12640:25;;12684:1;12674:35;;12689:18;;:::i;:::-;12674:35;12731:1;12728;12724:9;12719:14;;12554:185;;;;:::o;12745:332::-;12866:4;12904:2;12893:9;12889:18;12881:26;;12917:71;12985:1;12974:9;12970:17;12961:6;12917:71;:::i;:::-;12998:72;13066:2;13055:9;13051:18;13042:6;12998:72;:::i;:::-;12745:332;;;;;:::o;13083:180::-;13131:77;13128:1;13121:88;13228:4;13225:1;13218:15;13252:4;13249:1;13242:15;13269:320;13313:6;13350:1;13344:4;13340:12;13330:22;;13397:1;13391:4;13387:12;13418:18;13408:81;;13474:4;13466:6;13462:17;13452:27;;13408:81;13536:2;13528:6;13525:14;13505:18;13502:38;13499:84;;13555:18;;:::i;:::-;13499:84;13320:269;13269:320;;;:::o;13595:181::-;13735:33;13731:1;13723:6;13719:14;13712:57;13595:181;:::o;13782:366::-;13924:3;13945:67;14009:2;14004:3;13945:67;:::i;:::-;13938:74;;14021:93;14110:3;14021:93;:::i;:::-;14139:2;14134:3;14130:12;14123:19;;13782:366;;;:::o;14154:419::-;14320:4;14358:2;14347:9;14343:18;14335:26;;14407:9;14401:4;14397:20;14393:1;14382:9;14378:17;14371:47;14435:131;14561:4;14435:131;:::i;:::-;14427:139;;14154:419;;;:::o;14579:221::-;14719:34;14715:1;14707:6;14703:14;14696:58;14788:4;14783:2;14775:6;14771:15;14764:29;14579:221;:::o;14806:366::-;14948:3;14969:67;15033:2;15028:3;14969:67;:::i;:::-;14962:74;;15045:93;15134:3;15045:93;:::i;:::-;15163:2;15158:3;15154:12;15147:19;;14806:366;;;:::o;15178:419::-;15344:4;15382:2;15371:9;15367:18;15359:26;;15431:9;15425:4;15421:20;15417:1;15406:9;15402:17;15395:47;15459:131;15585:4;15459:131;:::i;:::-;15451:139;;15178:419;;;:::o;15603:180::-;15651:77;15648:1;15641:88;15748:4;15745:1;15738:15;15772:4;15769:1;15762:15;15789:233;15828:3;15851:24;15869:5;15851:24;:::i;:::-;15842:33;;15897:66;15890:5;15887:77;15884:103;;15967:18;;:::i;:::-;15884:103;16014:1;16007:5;16003:13;15996:20;;15789:233;;;:::o;16028:179::-;16168:31;16164:1;16156:6;16152:14;16145:55;16028:179;:::o;16213:366::-;16355:3;16376:67;16440:2;16435:3;16376:67;:::i;:::-;16369:74;;16452:93;16541:3;16452:93;:::i;:::-;16570:2;16565:3;16561:12;16554:19;;16213:366;;;:::o;16585:419::-;16751:4;16789:2;16778:9;16774:18;16766:26;;16838:9;16832:4;16828:20;16824:1;16813:9;16809:17;16802:47;16866:131;16992:4;16866:131;:::i;:::-;16858:139;;16585:419;;;:::o;17010:227::-;17150:34;17146:1;17138:6;17134:14;17127:58;17219:10;17214:2;17206:6;17202:15;17195:35;17010:227;:::o;17243:366::-;17385:3;17406:67;17470:2;17465:3;17406:67;:::i;:::-;17399:74;;17482:93;17571:3;17482:93;:::i;:::-;17600:2;17595:3;17591:12;17584:19;;17243:366;;;:::o;17615:419::-;17781:4;17819:2;17808:9;17804:18;17796:26;;17868:9;17862:4;17858:20;17854:1;17843:9;17839:17;17832:47;17896:131;18022:4;17896:131;:::i;:::-;17888:139;;17615:419;;;:::o;18040:320::-;18155:4;18193:2;18182:9;18178:18;18170:26;;18206:71;18274:1;18263:9;18259:17;18250:6;18206:71;:::i;:::-;18287:66;18349:2;18338:9;18334:18;18325:6;18287:66;:::i;:::-;18040:320;;;;;:::o;18366:191::-;18406:3;18425:20;18443:1;18425:20;:::i;:::-;18420:25;;18459:20;18477:1;18459:20;:::i;:::-;18454:25;;18502:1;18499;18495:9;18488:16;;18523:3;18520:1;18517:10;18514:36;;;18530:18;;:::i;:::-;18514:36;18366:191;;;;:::o;18563:180::-;18703:32;18699:1;18691:6;18687:14;18680:56;18563:180;:::o;18749:366::-;18891:3;18912:67;18976:2;18971:3;18912:67;:::i;:::-;18905:74;;18988:93;19077:3;18988:93;:::i;:::-;19106:2;19101:3;19097:12;19090:19;;18749:366;;;:::o;19121:419::-;19287:4;19325:2;19314:9;19310:18;19302:26;;19374:9;19368:4;19364:20;19360:1;19349:9;19345:17;19338:47;19402:131;19528:4;19402:131;:::i;:::-;19394:139;;19121:419;;;:::o;19546:171::-;19686:23;19682:1;19674:6;19670:14;19663:47;19546:171;:::o;19723:366::-;19865:3;19886:67;19950:2;19945:3;19886:67;:::i;:::-;19879:74;;19962:93;20051:3;19962:93;:::i;:::-;20080:2;20075:3;20071:12;20064:19;;19723:366;;;:::o;20095:419::-;20261:4;20299:2;20288:9;20284:18;20276:26;;20348:9;20342:4;20338:20;20334:1;20323:9;20319:17;20312:47;20376:131;20502:4;20376:131;:::i;:::-;20368:139;;20095:419;;;:::o;20520:172::-;20660:24;20656:1;20648:6;20644:14;20637:48;20520:172;:::o;20698:366::-;20840:3;20861:67;20925:2;20920:3;20861:67;:::i;:::-;20854:74;;20937:93;21026:3;20937:93;:::i;:::-;21055:2;21050:3;21046:12;21039:19;;20698:366;;;:::o;21070:419::-;21236:4;21274:2;21263:9;21259:18;21251:26;;21323:9;21317:4;21313:20;21309:1;21298:9;21294:17;21287:47;21351:131;21477:4;21351:131;:::i;:::-;21343:139;;21070:419;;;:::o;21495:224::-;21635:34;21631:1;21623:6;21619:14;21612:58;21704:7;21699:2;21691:6;21687:15;21680:32;21495:224;:::o;21725:366::-;21867:3;21888:67;21952:2;21947:3;21888:67;:::i;:::-;21881:74;;21964:93;22053:3;21964:93;:::i;:::-;22082:2;22077:3;22073:12;22066:19;;21725:366;;;:::o;22097:419::-;22263:4;22301:2;22290:9;22286:18;22278:26;;22350:9;22344:4;22340:20;22336:1;22325:9;22321:17;22314:47;22378:131;22504:4;22378:131;:::i;:::-;22370:139;;22097:419;;;:::o;22522:60::-;22550:3;22571:5;22564:12;;22522:60;;;:::o;22588:142::-;22638:9;22671:53;22689:34;22698:24;22716:5;22698:24;:::i;:::-;22689:34;:::i;:::-;22671:53;:::i;:::-;22658:66;;22588:142;;;:::o;22736:126::-;22786:9;22819:37;22850:5;22819:37;:::i;:::-;22806:50;;22736:126;;;:::o;22868:134::-;22926:9;22959:37;22990:5;22959:37;:::i;:::-;22946:50;;22868:134;;;:::o;23008:147::-;23103:45;23142:5;23103:45;:::i;:::-;23098:3;23091:58;23008:147;;:::o;23161:238::-;23262:4;23300:2;23289:9;23285:18;23277:26;;23313:79;23389:1;23378:9;23374:17;23365:6;23313:79;:::i;:::-;23161:238;;;;:::o;23405:225::-;23545:34;23541:1;23533:6;23529:14;23522:58;23614:8;23609:2;23601:6;23597:15;23590:33;23405:225;:::o;23636:366::-;23778:3;23799:67;23863:2;23858:3;23799:67;:::i;:::-;23792:74;;23875:93;23964:3;23875:93;:::i;:::-;23993:2;23988:3;23984:12;23977:19;;23636:366;;;:::o;24008:419::-;24174:4;24212:2;24201:9;24197:18;24189:26;;24261:9;24255:4;24251:20;24247:1;24236:9;24232:17;24225:47;24289:131;24415:4;24289:131;:::i;:::-;24281:139;;24008:419;;;:::o;24433:173::-;24573:25;24569:1;24561:6;24557:14;24550:49;24433:173;:::o;24612:366::-;24754:3;24775:67;24839:2;24834:3;24775:67;:::i;:::-;24768:74;;24851:93;24940:3;24851:93;:::i;:::-;24969:2;24964:3;24960:12;24953:19;;24612:366;;;:::o;24984:419::-;25150:4;25188:2;25177:9;25173:18;25165:26;;25237:9;25231:4;25227:20;25223:1;25212:9;25208:17;25201:47;25265:131;25391:4;25265:131;:::i;:::-;25257:139;;24984:419;;;:::o;25409:143::-;25466:5;25497:6;25491:13;25482:22;;25513:33;25540:5;25513:33;:::i;:::-;25409:143;;;;:::o;25558:351::-;25628:6;25677:2;25665:9;25656:7;25652:23;25648:32;25645:119;;;25683:79;;:::i;:::-;25645:119;25803:1;25828:64;25884:7;25875:6;25864:9;25860:22;25828:64;:::i;:::-;25818:74;;25774:128;25558:351;;;;:::o;25915:332::-;26036:4;26074:2;26063:9;26059:18;26051:26;;26087:71;26155:1;26144:9;26140:17;26131:6;26087:71;:::i;:::-;26168:72;26236:2;26225:9;26221:18;26212:6;26168:72;:::i;:::-;25915:332;;;;;:::o;26253:85::-;26298:7;26327:5;26316:16;;26253:85;;;:::o;26344:158::-;26402:9;26435:61;26453:42;26462:32;26488:5;26462:32;:::i;:::-;26453:42;:::i;:::-;26435:61;:::i;:::-;26422:74;;26344:158;;;:::o;26508:147::-;26603:45;26642:5;26603:45;:::i;:::-;26598:3;26591:58;26508:147;;:::o;26661:807::-;26910:4;26948:3;26937:9;26933:19;26925:27;;26962:71;27030:1;27019:9;27015:17;27006:6;26962:71;:::i;:::-;27043:72;27111:2;27100:9;27096:18;27087:6;27043:72;:::i;:::-;27125:80;27201:2;27190:9;27186:18;27177:6;27125:80;:::i;:::-;27215;27291:2;27280:9;27276:18;27267:6;27215:80;:::i;:::-;27305:73;27373:3;27362:9;27358:19;27349:6;27305:73;:::i;:::-;27388;27456:3;27445:9;27441:19;27432:6;27388:73;:::i;:::-;26661:807;;;;;;;;;:::o;27474:143::-;27531:5;27562:6;27556:13;27547:22;;27578:33;27605:5;27578:33;:::i;:::-;27474:143;;;;:::o;27623:663::-;27711:6;27719;27727;27776:2;27764:9;27755:7;27751:23;27747:32;27744:119;;;27782:79;;:::i;:::-;27744:119;27902:1;27927:64;27983:7;27974:6;27963:9;27959:22;27927:64;:::i;:::-;27917:74;;27873:128;28040:2;28066:64;28122:7;28113:6;28102:9;28098:22;28066:64;:::i;:::-;28056:74;;28011:129;28179:2;28205:64;28261:7;28252:6;28241:9;28237:22;28205:64;:::i;:::-;28195:74;;28150:129;27623:663;;;;;:::o;28292:332::-;28413:4;28451:2;28440:9;28436:18;28428:26;;28464:71;28532:1;28521:9;28517:17;28508:6;28464:71;:::i;:::-;28545:72;28613:2;28602:9;28598:18;28589:6;28545:72;:::i;:::-;28292:332;;;;;:::o;28630:137::-;28684:5;28715:6;28709:13;28700:22;;28731:30;28755:5;28731:30;:::i;:::-;28630:137;;;;:::o;28773:345::-;28840:6;28889:2;28877:9;28868:7;28864:23;28860:32;28857:119;;;28895:79;;:::i;:::-;28857:119;29015:1;29040:61;29093:7;29084:6;29073:9;29069:22;29040:61;:::i;:::-;29030:71;;28986:125;28773:345;;;;:::o;29124:223::-;29264:34;29260:1;29252:6;29248:14;29241:58;29333:6;29328:2;29320:6;29316:15;29309:31;29124:223;:::o;29353:366::-;29495:3;29516:67;29580:2;29575:3;29516:67;:::i;:::-;29509:74;;29592:93;29681:3;29592:93;:::i;:::-;29710:2;29705:3;29701:12;29694:19;;29353:366;;;:::o;29725:419::-;29891:4;29929:2;29918:9;29914:18;29906:26;;29978:9;29972:4;29968:20;29964:1;29953:9;29949:17;29942:47;30006:131;30132:4;30006:131;:::i;:::-;29998:139;;29725:419;;;:::o;30150:221::-;30290:34;30286:1;30278:6;30274:14;30267:58;30359:4;30354:2;30346:6;30342:15;30335:29;30150:221;:::o;30377:366::-;30519:3;30540:67;30604:2;30599:3;30540:67;:::i;:::-;30533:74;;30616:93;30705:3;30616:93;:::i;:::-;30734:2;30729:3;30725:12;30718:19;;30377:366;;;:::o;30749:419::-;30915:4;30953:2;30942:9;30938:18;30930:26;;31002:9;30996:4;30992:20;30988:1;30977:9;30973:17;30966:47;31030:131;31156:4;31030:131;:::i;:::-;31022:139;;30749:419;;;:::o;31174:224::-;31314:34;31310:1;31302:6;31298:14;31291:58;31383:7;31378:2;31370:6;31366:15;31359:32;31174:224;:::o;31404:366::-;31546:3;31567:67;31631:2;31626:3;31567:67;:::i;:::-;31560:74;;31643:93;31732:3;31643:93;:::i;:::-;31761:2;31756:3;31752:12;31745:19;;31404:366;;;:::o;31776:419::-;31942:4;31980:2;31969:9;31965:18;31957:26;;32029:9;32023:4;32019:20;32015:1;32004:9;32000:17;31993:47;32057:131;32183:4;32057:131;:::i;:::-;32049:139;;31776:419;;;:::o;32201:222::-;32341:34;32337:1;32329:6;32325:14;32318:58;32410:5;32405:2;32397:6;32393:15;32386:30;32201:222;:::o;32429:366::-;32571:3;32592:67;32656:2;32651:3;32592:67;:::i;:::-;32585:74;;32668:93;32757:3;32668:93;:::i;:::-;32786:2;32781:3;32777:12;32770:19;;32429:366;;;:::o;32801:419::-;32967:4;33005:2;32994:9;32990:18;32982:26;;33054:9;33048:4;33044:20;33040:1;33029:9;33025:17;33018:47;33082:131;33208:4;33082:131;:::i;:::-;33074:139;;32801:419;;;:::o;33226:228::-;33366:34;33362:1;33354:6;33350:14;33343:58;33435:11;33430:2;33422:6;33418:15;33411:36;33226:228;:::o;33460:366::-;33602:3;33623:67;33687:2;33682:3;33623:67;:::i;:::-;33616:74;;33699:93;33788:3;33699:93;:::i;:::-;33817:2;33812:3;33808:12;33801:19;;33460:366;;;:::o;33832:419::-;33998:4;34036:2;34025:9;34021:18;34013:26;;34085:9;34079:4;34075:20;34071:1;34060:9;34056:17;34049:47;34113:131;34239:4;34113:131;:::i;:::-;34105:139;;33832:419;;;:::o;34257:114::-;;:::o;34377:364::-;34519:3;34540:66;34604:1;34599:3;34540:66;:::i;:::-;34533:73;;34615:93;34704:3;34615:93;:::i;:::-;34733:1;34728:3;34724:11;34717:18;;34377:364;;;:::o;34747:419::-;34913:4;34951:2;34940:9;34936:18;34928:26;;35000:9;34994:4;34990:20;34986:1;34975:9;34971:17;34964:47;35028:131;35154:4;35028:131;:::i;:::-;35020:139;;34747:419;;;:::o;35172:177::-;35312:29;35308:1;35300:6;35296:14;35289:53;35172:177;:::o;35355:366::-;35497:3;35518:67;35582:2;35577:3;35518:67;:::i;:::-;35511:74;;35594:93;35683:3;35594:93;:::i;:::-;35712:2;35707:3;35703:12;35696:19;;35355:366;;;:::o;35727:419::-;35893:4;35931:2;35920:9;35916:18;35908:26;;35980:9;35974:4;35970:20;35966:1;35955:9;35951:17;35944:47;36008:131;36134:4;36008:131;:::i;:::-;36000:139;;35727:419;;;:::o;36152:176::-;36292:28;36288:1;36280:6;36276:14;36269:52;36152:176;:::o;36334:366::-;36476:3;36497:67;36561:2;36556:3;36497:67;:::i;:::-;36490:74;;36573:93;36662:3;36573:93;:::i;:::-;36691:2;36686:3;36682:12;36675:19;;36334:366;;;:::o;36706:419::-;36872:4;36910:2;36899:9;36895:18;36887:26;;36959:9;36953:4;36949:20;36945:1;36934:9;36930:17;36923:47;36987:131;37113:4;36987:131;:::i;:::-;36979:139;;36706:419;;;:::o;37131:180::-;37179:77;37176:1;37169:88;37276:4;37273:1;37266:15;37300:4;37297:1;37290:15;37317:114;37384:6;37418:5;37412:12;37402:22;;37317:114;;;:::o;37437:184::-;37536:11;37570:6;37565:3;37558:19;37610:4;37605:3;37601:14;37586:29;;37437:184;;;;:::o;37627:132::-;37694:4;37717:3;37709:11;;37747:4;37742:3;37738:14;37730:22;;37627:132;;;:::o;37765:108::-;37842:24;37860:5;37842:24;:::i;:::-;37837:3;37830:37;37765:108;;:::o;37879:179::-;37948:10;37969:46;38011:3;38003:6;37969:46;:::i;:::-;38047:4;38042:3;38038:14;38024:28;;37879:179;;;;:::o;38064:113::-;38134:4;38166;38161:3;38157:14;38149:22;;38064:113;;;:::o;38213:732::-;38332:3;38361:54;38409:5;38361:54;:::i;:::-;38431:86;38510:6;38505:3;38431:86;:::i;:::-;38424:93;;38541:56;38591:5;38541:56;:::i;:::-;38620:7;38651:1;38636:284;38661:6;38658:1;38655:13;38636:284;;;38737:6;38731:13;38764:63;38823:3;38808:13;38764:63;:::i;:::-;38757:70;;38850:60;38903:6;38850:60;:::i;:::-;38840:70;;38696:224;38683:1;38680;38676:9;38671:14;;38636:284;;;38640:14;38936:3;38929:10;;38337:608;;;38213:732;;;;:::o;38951:831::-;39214:4;39252:3;39241:9;39237:19;39229:27;;39266:71;39334:1;39323:9;39319:17;39310:6;39266:71;:::i;:::-;39347:80;39423:2;39412:9;39408:18;39399:6;39347:80;:::i;:::-;39474:9;39468:4;39464:20;39459:2;39448:9;39444:18;39437:48;39502:108;39605:4;39596:6;39502:108;:::i;:::-;39494:116;;39620:72;39688:2;39677:9;39673:18;39664:6;39620:72;:::i;:::-;39702:73;39770:3;39759:9;39755:19;39746:6;39702:73;:::i;:::-;38951:831;;;;;;;;:::o;39788:147::-;39889:11;39926:3;39911:18;;39788:147;;;;:::o;39941:398::-;40100:3;40121:83;40202:1;40197:3;40121:83;:::i;:::-;40114:90;;40213:93;40302:3;40213:93;:::i;:::-;40331:1;40326:3;40322:11;40315:18;;39941:398;;;:::o;40345:379::-;40529:3;40551:147;40694:3;40551:147;:::i;:::-;40544:154;;40715:3;40708:10;;40345:379;;;:::o;40730:225::-;40870:34;40866:1;40858:6;40854:14;40847:58;40939:8;40934:2;40926:6;40922:15;40915:33;40730:225;:::o;40961:366::-;41103:3;41124:67;41188:2;41183:3;41124:67;:::i;:::-;41117:74;;41200:93;41289:3;41200:93;:::i;:::-;41318:2;41313:3;41309:12;41302:19;;40961:366;;;:::o;41333:419::-;41499:4;41537:2;41526:9;41522:18;41514:26;;41586:9;41580:4;41576:20;41572:1;41561:9;41557:17;41550:47;41614:131;41740:4;41614:131;:::i;:::-;41606:139;;41333:419;;;:::o;41758:194::-;41798:4;41818:20;41836:1;41818:20;:::i;:::-;41813:25;;41852:20;41870:1;41852:20;:::i;:::-;41847:25;;41896:1;41893;41889:9;41881:17;;41920:1;41914:4;41911:11;41908:37;;;41925:18;;:::i;:::-;41908:37;41758:194;;;;:::o

Swarm Source

ipfs://183ef43bd4de40e223b856aadefc7f5a3fcd8ee23fd89dbb2a1b27ea552ccea5
[ 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.