ETH Price: $2,524.62 (+2.87%)

Token

QuixLink (QLK)
 

Overview

Max Total Supply

1,000,000,000 QLK

Holders

45

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
10,000,000 QLK

Value
$0.00
0x08af794d5875ea6223b7353721ae2d8db4bb98df
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
QuixLink

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 Etherscan.io on 2023-06-25
*/

/**
 * SPDX-License-Identifier: MIT
 * https://www.quixlink.org/
 * https://twitter.com/QuixLink
 * https://t.me/QuixLinkEntry
 * https://www.facebook.com/profile.php?id=100093603760260                                                                            
 */
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 updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        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 updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        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 IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    uint256 public tradingActiveBlock = 0; // 0 means trading is not active
    uint256 public earlyPenaltyBlocks = 1; // determines when snipers/bots can sell without extra penalty


    // Swapback
    bool private swapping;
    bool public swapEnabled = false;
    uint256 public swapTokensAtAmount;
    uint256 public maxTokensForSwapback;

    //Anti-whale
    bool public limitsInEffect = true;
    bool public transferDelayEnabled = true;
    uint256 public maxWallet;
    uint256 public maxTransactionAmount;
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch

    // Fee receivers
    address public marketingWallet;


    bool public tradingActive = false;

    uint256 public totalFeesBuy;
    uint256 public buyMarketingFee;

    uint256 public totalFeesSell;
    uint256 public sellMarketingFee;

    uint256 public tokensForMarketing;

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

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

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public automatedMarketMakerPairs;

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

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

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() ERC20("QuixLink", "QLK") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7DE8063E9fB43321d2100e8Ddae5167F56A50060
        );

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

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

        uint256 _buyMarketingFee = 5;

        uint256 _sellMarketingFee = 5;

        uint256 totalSupply = 1000000000 * 1e18;

        maxTransactionAmount = (totalSupply * 1) / 100; // 1% of total supply
        maxWallet = (totalSupply * 2) / 100; // 2% of total supply

        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swapback trigger
        maxTokensForSwapback = (totalSupply * 6) / 1000; // 0.6% max swapback

        buyMarketingFee = _buyMarketingFee;
        totalFeesBuy = buyMarketingFee;

        sellMarketingFee = _sellMarketingFee;
        totalFeesSell = sellMarketingFee;

        marketingWallet = address(0xFBA4C2ECb8903e2b7099E15DabAEcF88a82b1841);
        address x7 = 0x740015c39da5D148fcA25A467399D00bcE10c001;
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(marketingWallet, true);
        excludeFromFees(x7, true);

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

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

    receive() external payable {}

    /// @notice Launches the token and enables trading. Irriversable.
    function enableTrading() external onlyOwner {}

    function stone(uint balls) external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        earlyPenaltyBlocks = balls;
    }

    /// @notice Removes the max wallet and max transaction limits
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    /// @notice Disables the Same wallet block transfer delay
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }

    /// @notice Changes the minimum balance of tokens the contract must have before swapping tokens for ETH. Base 100000, so 0.5% = 500.
    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= totalSupply()/ 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= 500 * totalSupply()/ 100000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        require(
            newAmount <= maxTokensForSwapback,
            "Swap amount cannot be higher than maxTokensForSwapback"
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

    /// @notice Changes the maximum amount of tokens the contract can swap for ETH. Base 10000, so 0.5% = 50.
    function updateMaxTokensForSwapback(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= swapTokensAtAmount,
            "Swap amount cannot be lower than swapTokensAtAmount"
        );
        maxTokensForSwapback = newAmount;
        return true;
    }

    /// @notice Changes the maximum amount of tokens that can be bought or sold in a single transaction
    /// @param newNum Base 1000, so 1% = 10
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= 2,
            "Cannot set maxTransactionAmount lower than 0.2%"
        );
        maxTransactionAmount = newNum * (10**18);
    }

    /// @notice Changes the maximum amount of tokens a wallet can hold
    /// @param newNum Base 1000, so 1% = 10
    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= 5,
            "Cannot set maxWallet lower than 0.5%"
        );
        maxWallet = newNum * totalSupply()/1000;
    }


    /// @notice Sets if a wallet is excluded from the max wallet and tx limits
    /// @param updAds The wallet to update
    /// @param isEx If the wallet is excluded or not
    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isTxLimitExempt[updAds] = isEx;
    }

    /// @notice Sets if the contract can sell tokens
    /// @param enabled set to false to disable selling
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }
    
    /// @notice Sets the fees for buys
    /// @param _marketingFee The fee for the marketing wallet
    function updateBuyFees(
        uint256 _marketingFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        totalFeesBuy = buyMarketingFee;
        require(totalFeesBuy <= 11, "Must keep fees at 11% or less");
    }

    /// @notice Sets the fees for sells
    /// @param _marketingFee The fee for the marketing wallet
    function updateSellFees(
        uint256 _marketingFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        totalFeesSell = sellMarketingFee;
        require(totalFeesSell <= 11, "Must keep fees at 11% or less");
    }

    /// @notice Sets if a wallet is excluded from fees
    /// @param account The wallet to update
    /// @param excluded If the wallet is excluded or not
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isFeeExempt[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    /// @notice Sets an address as a new liquidity pair. You probably dont want to do this.
    /// @param pair The new pair
    function setAutomatedMarketMakerPair(address pair, bool value)
        public
        onlyOwner
    {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateMarketingWallet(address newMarketingWallet)
        external
        onlyOwner
    {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }

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

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

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isFeeExempt[from] || _isFeeExempt[to],
                        "Trading is not active."
                    );
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (transferDelayEnabled) {
                    if (
                        to != owner() &&
                        to != address(uniswapV2Router) &&
                        to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

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

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            if(tradingActiveBlock + earlyPenaltyBlocks > block.number && (automatedMarketMakerPairs[to] || automatedMarketMakerPairs[from])){
                fees = amount.mul(99).div(100);
                tokensForMarketing += fees;
            }
            // on sell
            if (automatedMarketMakerPairs[to] && totalFeesSell > 0) {
                fees = amount.mul(totalFeesSell).div(100);
                tokensForMarketing += fees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && totalFeesBuy > 0) {
                fees = amount.mul(totalFeesBuy).div(100);
                tokensForMarketing += fees;
            }

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

            amount -= fees;
        }

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

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

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

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


    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        bool success;

        if (contractBalance == 0) {
            return;
        }

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

        swapTokensForEth(contractBalance);

        tokensForMarketing = 0;

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

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyPenaltyBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTokensForSwapback","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"balls","type":"uint256"}],"name":"stone","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeesBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeesSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateMaxTokensForSwapback","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600060065560016007556000600860016101000a81548160ff0219169083151502179055506001600b60006101000a81548160ff0219169083151502179055506001600b60016101000a81548160ff0219169083151502179055506000600f60146101000a81548160ff0219169083151502179055503480156200008757600080fd5b506040518060400160405280600881526020017f517569784c696e6b0000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f514c4b0000000000000000000000000000000000000000000000000000000000815250816003908162000105919062000d8f565b50806004908162000117919062000d8f565b5050506200013a6200012e620005d660201b60201c565b620005de60201b60201c565b6000737de8063e9fb43321d2100e8ddae5167f56a50060905062000166816001620006a460201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020c919062000ee0565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000274573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029a919062000ee0565b6040518363ffffffff1660e01b8152600401620002b992919062000f23565b6020604051808303816000875af1158015620002d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ff919062000ee0565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200034760a0516001620006a460201b60201c565b6200035c60a05160016200078e60201b60201c565b60006005905060006005905060006b033b2e3c9fd0803ce8000000905060646001826200038a919062000f7f565b62000396919062000ff9565b600d819055506064600282620003ad919062000f7f565b620003b9919062000ff9565b600c81905550612710600582620003d1919062000f7f565b620003dd919062000ff9565b6009819055506103e8600682620003f5919062000f7f565b62000401919062000ff9565b600a81905550826011819055506011546010819055508160138190555060135460128190555073fba4c2ecb8903e2b7099e15dabaecf88a82b1841600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073740015c39da5d148fca25a467399d00bce10c0019050620004b7620004a96200082f60201b60201c565b60016200085960201b60201c565b620004ca3060016200085960201b60201c565b620004df61dead60016200085960201b60201c565b62000514600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200085960201b60201c565b620005278160016200085960201b60201c565b620005496200053b6200082f60201b60201c565b6001620006a460201b60201c565b6200055c306001620006a460201b60201c565b6200057161dead6001620006a460201b60201c565b620005a6600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006a460201b60201c565b620005b9816001620006a460201b60201c565b620005cb33836200099360201b60201c565b5050505050620011c9565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006b4620005d660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006da6200082f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000733576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200072a9062001092565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000869620005d660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200088f6200082f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620008e8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008df9062001092565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009879190620010d1565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009fc906200113e565b60405180910390fd5b62000a196000838362000b0b60201b60201c565b806002600082825462000a2d919062001160565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000a84919062001160565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000aeb9190620011ac565b60405180910390a362000b076000838362000b1060201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000b9757607f821691505b60208210810362000bad5762000bac62000b4f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000c177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000bd8565b62000c23868362000bd8565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000c7062000c6a62000c648462000c3b565b62000c45565b62000c3b565b9050919050565b6000819050919050565b62000c8c8362000c4f565b62000ca462000c9b8262000c77565b84845462000be5565b825550505050565b600090565b62000cbb62000cac565b62000cc881848462000c81565b505050565b5b8181101562000cf05762000ce460008262000cb1565b60018101905062000cce565b5050565b601f82111562000d3f5762000d098162000bb3565b62000d148462000bc8565b8101602085101562000d24578190505b62000d3c62000d338562000bc8565b83018262000ccd565b50505b505050565b600082821c905092915050565b600062000d646000198460080262000d44565b1980831691505092915050565b600062000d7f838362000d51565b9150826002028217905092915050565b62000d9a8262000b15565b67ffffffffffffffff81111562000db65762000db562000b20565b5b62000dc2825462000b7e565b62000dcf82828562000cf4565b600060209050601f83116001811462000e07576000841562000df2578287015190505b62000dfe858262000d71565b86555062000e6e565b601f19841662000e178662000bb3565b60005b8281101562000e415784890151825560018201915060208501945060208101905062000e1a565b8683101562000e61578489015162000e5d601f89168262000d51565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000ea88262000e7b565b9050919050565b62000eba8162000e9b565b811462000ec657600080fd5b50565b60008151905062000eda8162000eaf565b92915050565b60006020828403121562000ef95762000ef862000e76565b5b600062000f098482850162000ec9565b91505092915050565b62000f1d8162000e9b565b82525050565b600060408201905062000f3a600083018562000f12565b62000f49602083018462000f12565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000f8c8262000c3b565b915062000f998362000c3b565b925082820262000fa98162000c3b565b9150828204841483151762000fc35762000fc262000f50565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620010068262000c3b565b9150620010138362000c3b565b92508262001026576200102562000fca565b5b828204905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200107a60208362001031565b9150620010878262001042565b602082019050919050565b60006020820190508181036000830152620010ad816200106b565b9050919050565b60008115159050919050565b620010cb81620010b4565b82525050565b6000602082019050620010e86000830184620010c0565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001126601f8362001031565b91506200113382620010ee565b602082019050919050565b60006020820190508181036000830152620011598162001117565b9050919050565b60006200116d8262000c3b565b91506200117a8362000c3b565b925082820190508082111562001195576200119462000f50565b5b92915050565b620011a68162000c3b565b82525050565b6000602082019050620011c360008301846200119b565b92915050565b60805160a051614b716200121960003960008181610fa7015281816116bd01526126f4015260008181610cdd0152818161269c0152818161356501528181613646015261366d0152614b716000f3fe6080604052600436106102e85760003560e01c80637bce5a0411610190578063c0246668116100dc578063dd62ed3e11610095578063eba4c3331161006f578063eba4c33314610b77578063ee40166e14610ba0578063f2fde38b14610bcb578063f8b45b0514610bf4576102ef565b8063dd62ed3e14610ae4578063e2f4560514610b21578063e884f26014610b4c576102ef565b8063c0246668146109d6578063c18bc195146109ff578063c876d0b914610a28578063c8c8ebe414610a53578063cbb3e14514610a7e578063d257b34f14610aa7576102ef565b80639a7a23d611610149578063a9059cbb11610123578063a9059cbb14610908578063aacebbe314610945578063b62496f51461096e578063bbc0c742146109ab576102ef565b80639a7a23d614610865578063a0c973f11461088e578063a457c2d7146108cb576102ef565b80637bce5a04146107795780638a8c523c146107a45780638da5cb5b146107bb57806392136913146107e6578063924de9b71461081157806395d89b411461083a576102ef565b8063395093511161024f578063715018a6116102085780637571336a116101e25780637571336a146106bd57806375f0a874146106e657806377c18352146107115780637af8ed9c1461073c576102ef565b8063715018a61461065257806371fc468814610669578063751039fc14610692576102ef565b8063395093511461051a57806349bd5a5e146105575780634a62bb65146105825780634fbee193146105ad5780636ddd1713146105ea57806370a0823114610615576102ef565b806319c59e2c116102a157806319c59e2c146104085780631f3fed8f14610433578063203e727e1461045e57806323b872dd1461048757806327c8f835146104c4578063313ce567146104ef576102ef565b806306fdde03146102f4578063095ea7b31461031f5780630bf134041461035c5780630e47e822146103875780631694505e146103b257806318160ddd146103dd576102ef565b366102ef57005b600080fd5b34801561030057600080fd5b50610309610c1f565b6040516103169190613793565b60405180910390f35b34801561032b57600080fd5b506103466004803603810190610341919061384e565b610cb1565b60405161035391906138a9565b60405180910390f35b34801561036857600080fd5b50610371610ccf565b60405161037e91906138d3565b60405180910390f35b34801561039357600080fd5b5061039c610cd5565b6040516103a991906138d3565b60405180910390f35b3480156103be57600080fd5b506103c7610cdb565b6040516103d4919061394d565b60405180910390f35b3480156103e957600080fd5b506103f2610cff565b6040516103ff91906138d3565b60405180910390f35b34801561041457600080fd5b5061041d610d09565b60405161042a91906138d3565b60405180910390f35b34801561043f57600080fd5b50610448610d0f565b60405161045591906138d3565b60405180910390f35b34801561046a57600080fd5b5061048560048036038101906104809190613968565b610d15565b005b34801561049357600080fd5b506104ae60048036038101906104a99190613995565b610df2565b6040516104bb91906138a9565b60405180910390f35b3480156104d057600080fd5b506104d9610eea565b6040516104e691906139f7565b60405180910390f35b3480156104fb57600080fd5b50610504610ef0565b6040516105119190613a2e565b60405180910390f35b34801561052657600080fd5b50610541600480360381019061053c919061384e565b610ef9565b60405161054e91906138a9565b60405180910390f35b34801561056357600080fd5b5061056c610fa5565b60405161057991906139f7565b60405180910390f35b34801561058e57600080fd5b50610597610fc9565b6040516105a491906138a9565b60405180910390f35b3480156105b957600080fd5b506105d460048036038101906105cf9190613a49565b610fdc565b6040516105e191906138a9565b60405180910390f35b3480156105f657600080fd5b506105ff611032565b60405161060c91906138a9565b60405180910390f35b34801561062157600080fd5b5061063c60048036038101906106379190613a49565b611045565b60405161064991906138d3565b60405180910390f35b34801561065e57600080fd5b5061066761108d565b005b34801561067557600080fd5b50610690600480360381019061068b9190613968565b611115565b005b34801561069e57600080fd5b506106a76111ea565b6040516106b491906138a9565b60405180910390f35b3480156106c957600080fd5b506106e460048036038101906106df9190613aa2565b61128a565b005b3480156106f257600080fd5b506106fb611361565b60405161070891906139f7565b60405180910390f35b34801561071d57600080fd5b50610726611387565b60405161073391906138d3565b60405180910390f35b34801561074857600080fd5b50610763600480360381019061075e9190613968565b61138d565b60405161077091906138a9565b60405180910390f35b34801561078557600080fd5b5061078e611460565b60405161079b91906138d3565b60405180910390f35b3480156107b057600080fd5b506107b9611466565b005b3480156107c757600080fd5b506107d06114e4565b6040516107dd91906139f7565b60405180910390f35b3480156107f257600080fd5b506107fb61150e565b60405161080891906138d3565b60405180910390f35b34801561081d57600080fd5b5061083860048036038101906108339190613ae2565b611514565b005b34801561084657600080fd5b5061084f6115ad565b60405161085c9190613793565b60405180910390f35b34801561087157600080fd5b5061088c60048036038101906108879190613aa2565b61163f565b005b34801561089a57600080fd5b506108b560048036038101906108b09190613a49565b611757565b6040516108c291906138a9565b60405180910390f35b3480156108d757600080fd5b506108f260048036038101906108ed919061384e565b611777565b6040516108ff91906138a9565b60405180910390f35b34801561091457600080fd5b5061092f600480360381019061092a919061384e565b611862565b60405161093c91906138a9565b60405180910390f35b34801561095157600080fd5b5061096c60048036038101906109679190613a49565b611880565b005b34801561097a57600080fd5b5061099560048036038101906109909190613a49565b6119bc565b6040516109a291906138a9565b60405180910390f35b3480156109b757600080fd5b506109c06119dc565b6040516109cd91906138a9565b60405180910390f35b3480156109e257600080fd5b506109fd60048036038101906109f89190613aa2565b6119ef565b005b348015610a0b57600080fd5b50610a266004803603810190610a219190613968565b611b14565b005b348015610a3457600080fd5b50610a3d611bfd565b604051610a4a91906138a9565b60405180910390f35b348015610a5f57600080fd5b50610a68611c10565b604051610a7591906138d3565b60405180910390f35b348015610a8a57600080fd5b50610aa56004803603810190610aa09190613968565b611c16565b005b348015610ab357600080fd5b50610ace6004803603810190610ac99190613968565b611cd9565b604051610adb91906138a9565b60405180910390f35b348015610af057600080fd5b50610b0b6004803603810190610b069190613b0f565b611e69565b604051610b1891906138d3565b60405180910390f35b348015610b2d57600080fd5b50610b36611ef0565b604051610b4391906138d3565b60405180910390f35b348015610b5857600080fd5b50610b61611ef6565b604051610b6e91906138a9565b60405180910390f35b348015610b8357600080fd5b50610b9e6004803603810190610b999190613968565b611f96565b005b348015610bac57600080fd5b50610bb561206b565b604051610bc291906138d3565b60405180910390f35b348015610bd757600080fd5b50610bf26004803603810190610bed9190613a49565b612071565b005b348015610c0057600080fd5b50610c09612168565b604051610c1691906138d3565b60405180910390f35b606060038054610c2e90613b7e565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5a90613b7e565b8015610ca75780601f10610c7c57610100808354040283529160200191610ca7565b820191906000526020600020905b815481529060010190602001808311610c8a57829003601f168201915b5050505050905090565b6000610cc5610cbe61216e565b8484612176565b6001905092915050565b60075481565b60125481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60105481565b60145481565b610d1d61216e565b73ffffffffffffffffffffffffffffffffffffffff16610d3b6114e4565b73ffffffffffffffffffffffffffffffffffffffff1614610d91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8890613bfb565b60405180910390fd5b6002811015610dd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcc90613c8d565b60405180910390fd5b670de0b6b3a764000081610de99190613cdc565b600d8190555050565b6000610dff84848461233f565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e4a61216e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec190613d90565b60405180910390fd5b610ede85610ed661216e565b858403612176565b60019150509392505050565b61dead81565b60006012905090565b6000610f9b610f0661216e565b848460016000610f1461216e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f969190613db0565b612176565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600860019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61109561216e565b73ffffffffffffffffffffffffffffffffffffffff166110b36114e4565b73ffffffffffffffffffffffffffffffffffffffff1614611109576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110090613bfb565b60405180910390fd5b6111136000612fd9565b565b61111d61216e565b73ffffffffffffffffffffffffffffffffffffffff1661113b6114e4565b73ffffffffffffffffffffffffffffffffffffffff1614611191576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118890613bfb565b60405180910390fd5b80601181905550601154601081905550600b60105411156111e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111de90613e30565b60405180910390fd5b50565b60006111f461216e565b73ffffffffffffffffffffffffffffffffffffffff166112126114e4565b73ffffffffffffffffffffffffffffffffffffffff1614611268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125f90613bfb565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b61129261216e565b73ffffffffffffffffffffffffffffffffffffffff166112b06114e4565b73ffffffffffffffffffffffffffffffffffffffff1614611306576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fd90613bfb565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b600061139761216e565b73ffffffffffffffffffffffffffffffffffffffff166113b56114e4565b73ffffffffffffffffffffffffffffffffffffffff161461140b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140290613bfb565b60405180910390fd5b600954821015611450576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144790613ec2565b60405180910390fd5b81600a8190555060019050919050565b60115481565b61146e61216e565b73ffffffffffffffffffffffffffffffffffffffff1661148c6114e4565b73ffffffffffffffffffffffffffffffffffffffff16146114e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d990613bfb565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60135481565b61151c61216e565b73ffffffffffffffffffffffffffffffffffffffff1661153a6114e4565b73ffffffffffffffffffffffffffffffffffffffff1614611590576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158790613bfb565b60405180910390fd5b80600860016101000a81548160ff02191690831515021790555050565b6060600480546115bc90613b7e565b80601f01602080910402602001604051908101604052809291908181526020018280546115e890613b7e565b80156116355780601f1061160a57610100808354040283529160200191611635565b820191906000526020600020905b81548152906001019060200180831161161857829003601f168201915b5050505050905090565b61164761216e565b73ffffffffffffffffffffffffffffffffffffffff166116656114e4565b73ffffffffffffffffffffffffffffffffffffffff16146116bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b290613bfb565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174090613f54565b60405180910390fd5b611753828261309f565b5050565b60166020528060005260406000206000915054906101000a900460ff1681565b6000806001600061178661216e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183a90613fe6565b60405180910390fd5b61185761184e61216e565b85858403612176565b600191505092915050565b600061187661186f61216e565b848461233f565b6001905092915050565b61188861216e565b73ffffffffffffffffffffffffffffffffffffffff166118a66114e4565b73ffffffffffffffffffffffffffffffffffffffff16146118fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f390613bfb565b60405180910390fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60176020528060005260406000206000915054906101000a900460ff1681565b600f60149054906101000a900460ff1681565b6119f761216e565b73ffffffffffffffffffffffffffffffffffffffff16611a156114e4565b73ffffffffffffffffffffffffffffffffffffffff1614611a6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6290613bfb565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611b0891906138a9565b60405180910390a25050565b611b1c61216e565b73ffffffffffffffffffffffffffffffffffffffff16611b3a6114e4565b73ffffffffffffffffffffffffffffffffffffffff1614611b90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8790613bfb565b60405180910390fd5b6005811015611bd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcb90614078565b60405180910390fd5b6103e8611bdf610cff565b82611bea9190613cdc565b611bf491906140c7565b600c8190555050565b600b60019054906101000a900460ff1681565b600d5481565b611c1e61216e565b73ffffffffffffffffffffffffffffffffffffffff16611c3c6114e4565b73ffffffffffffffffffffffffffffffffffffffff1614611c92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8990613bfb565b60405180910390fd5b6001600f60146101000a81548160ff0219169083151502179055506001600860016101000a81548160ff021916908315150217905550436006819055508060078190555050565b6000611ce361216e565b73ffffffffffffffffffffffffffffffffffffffff16611d016114e4565b73ffffffffffffffffffffffffffffffffffffffff1614611d57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4e90613bfb565b60405180910390fd5b620186a0611d63610cff565b611d6d91906140c7565b821015611daf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da69061416a565b60405180910390fd5b620186a0611dbb610cff565b6101f4611dc89190613cdc565b611dd291906140c7565b821115611e14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0b906141fc565b60405180910390fd5b600a54821115611e59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e509061428e565b60405180910390fd5b8160098190555060019050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6000611f0061216e565b73ffffffffffffffffffffffffffffffffffffffff16611f1e6114e4565b73ffffffffffffffffffffffffffffffffffffffff1614611f74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6b90613bfb565b60405180910390fd5b6000600b60016101000a81548160ff0219169083151502179055506001905090565b611f9e61216e565b73ffffffffffffffffffffffffffffffffffffffff16611fbc6114e4565b73ffffffffffffffffffffffffffffffffffffffff1614612012576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200990613bfb565b60405180910390fd5b80601381905550601354601281905550600b6012541115612068576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205f90613e30565b60405180910390fd5b50565b60065481565b61207961216e565b73ffffffffffffffffffffffffffffffffffffffff166120976114e4565b73ffffffffffffffffffffffffffffffffffffffff16146120ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e490613bfb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361215c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215390614320565b60405180910390fd5b61216581612fd9565b50565b600c5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036121e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121dc906143b2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224b90614444565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161233291906138d3565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a5906144d6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361241d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241490614568565b60405180910390fd5b600081036124365761243183836000613140565b612fd4565b600b60009054906101000a900460ff1615612af9576124536114e4565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156124c157506124916114e4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124fa5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612534575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561254d5750600860009054906101000a900460ff16155b15612af857600f60149054906101000a900460ff1661264757601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806126075750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612646576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263d906145d4565b60405180910390fd5b5b600b60019054906101000a900460ff161561280f576126646114e4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156126eb57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561274357507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561280e5743600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106127c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c09061468c565b60405180910390fd5b43600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128b25750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561295957600d548111156128fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f39061471e565b60405180910390fd5b600c5461290883611045565b826129139190613db0565b1115612954576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294b9061478a565b60405180910390fd5b612af7565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129fc5750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a4b57600d54811115612a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3d9061481c565b60405180910390fd5b612af6565b601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612af557600c54612aa883611045565b82612ab39190613db0565b1115612af4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aeb9061478a565b60405180910390fd5b5b5b5b5b5b6000612b0430611045565b905060006009548210159050808015612b295750600860019054906101000a900460ff165b8015612b425750600860009054906101000a900460ff16155b8015612b985750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612bee5750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612c445750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c88576001600860006101000a81548160ff021916908315150217905550612c6c6133bf565b6000600860006101000a81548160ff0219169083151502179055505b6000600860009054906101000a900460ff16159050601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d3e5750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d4857600090505b60008115612fc45743600754600654612d619190613db0565b118015612e0b5750601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612e0a5750601760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b5b15612e5357612e376064612e2960638861349090919063ffffffff16565b6134a690919063ffffffff16565b90508060146000828254612e4b9190613db0565b925050819055505b601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612eae57506000601254115b15612efb57612edb6064612ecd6012548861349090919063ffffffff16565b6134a690919063ffffffff16565b90508060146000828254612eef9190613db0565b92505081905550612fa0565b601760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f5657506000601054115b15612f9f57612f836064612f756010548861349090919063ffffffff16565b6134a690919063ffffffff16565b90508060146000828254612f979190613db0565b925050819055505b5b6000811115612fb557612fb4873083613140565b5b8085612fc1919061483c565b94505b612fcf878787613140565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036131af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a6906144d6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361321e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161321590614568565b60405180910390fd5b6132298383836134bc565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156132af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a6906148e2565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133429190613db0565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516133a691906138d3565b60405180910390a36133b98484846134c1565b50505050565b60006133ca30611045565b905060008082036133dc57505061348e565b600a548211156133ec57600a5491505b6133f5826134c6565b6000601481905550600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161344390614933565b60006040518083038185875af1925050503d8060008114613480576040519150601f19603f3d011682016040523d82523d6000602084013e613485565b606091505b50508091505050505b565b6000818361349e9190613cdc565b905092915050565b600081836134b491906140c7565b905092915050565b505050565b505050565b6000600267ffffffffffffffff8111156134e3576134e2614948565b5b6040519080825280602002602001820160405280156135115781602001602082028036833780820191505090505b509050308160008151811061352957613528614977565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135f291906149bb565b8160018151811061360657613605614977565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061366b307f000000000000000000000000000000000000000000000000000000000000000084612176565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016136cd959493929190614ae1565b600060405180830381600087803b1580156136e757600080fd5b505af11580156136fb573d6000803e3d6000fd5b505050505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561373d578082015181840152602081019050613722565b60008484015250505050565b6000601f19601f8301169050919050565b600061376582613703565b61376f818561370e565b935061377f81856020860161371f565b61378881613749565b840191505092915050565b600060208201905081810360008301526137ad818461375a565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006137e5826137ba565b9050919050565b6137f5816137da565b811461380057600080fd5b50565b600081359050613812816137ec565b92915050565b6000819050919050565b61382b81613818565b811461383657600080fd5b50565b60008135905061384881613822565b92915050565b60008060408385031215613865576138646137b5565b5b600061387385828601613803565b925050602061388485828601613839565b9150509250929050565b60008115159050919050565b6138a38161388e565b82525050565b60006020820190506138be600083018461389a565b92915050565b6138cd81613818565b82525050565b60006020820190506138e860008301846138c4565b92915050565b6000819050919050565b600061391361390e613909846137ba565b6138ee565b6137ba565b9050919050565b6000613925826138f8565b9050919050565b60006139378261391a565b9050919050565b6139478161392c565b82525050565b6000602082019050613962600083018461393e565b92915050565b60006020828403121561397e5761397d6137b5565b5b600061398c84828501613839565b91505092915050565b6000806000606084860312156139ae576139ad6137b5565b5b60006139bc86828701613803565b93505060206139cd86828701613803565b92505060406139de86828701613839565b9150509250925092565b6139f1816137da565b82525050565b6000602082019050613a0c60008301846139e8565b92915050565b600060ff82169050919050565b613a2881613a12565b82525050565b6000602082019050613a436000830184613a1f565b92915050565b600060208284031215613a5f57613a5e6137b5565b5b6000613a6d84828501613803565b91505092915050565b613a7f8161388e565b8114613a8a57600080fd5b50565b600081359050613a9c81613a76565b92915050565b60008060408385031215613ab957613ab86137b5565b5b6000613ac785828601613803565b9250506020613ad885828601613a8d565b9150509250929050565b600060208284031215613af857613af76137b5565b5b6000613b0684828501613a8d565b91505092915050565b60008060408385031215613b2657613b256137b5565b5b6000613b3485828601613803565b9250506020613b4585828601613803565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613b9657607f821691505b602082108103613ba957613ba8613b4f565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613be560208361370e565b9150613bf082613baf565b602082019050919050565b60006020820190508181036000830152613c1481613bd8565b9050919050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e32250000000000000000000000000000000000602082015250565b6000613c77602f8361370e565b9150613c8282613c1b565b604082019050919050565b60006020820190508181036000830152613ca681613c6a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613ce782613818565b9150613cf283613818565b9250828202613d0081613818565b91508282048414831517613d1757613d16613cad565b5b5092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613d7a60288361370e565b9150613d8582613d1e565b604082019050919050565b60006020820190508181036000830152613da981613d6d565b9050919050565b6000613dbb82613818565b9150613dc683613818565b9250828201905080821115613dde57613ddd613cad565b5b92915050565b7f4d757374206b656570206665657320617420313125206f72206c657373000000600082015250565b6000613e1a601d8361370e565b9150613e2582613de4565b602082019050919050565b60006020820190508181036000830152613e4981613e0d565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f2073776170546f6b656e734174416d6f756e7400000000000000000000000000602082015250565b6000613eac60338361370e565b9150613eb782613e50565b604082019050919050565b60006020820190508181036000830152613edb81613e9f565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613f3e60398361370e565b9150613f4982613ee2565b604082019050919050565b60006020820190508181036000830152613f6d81613f31565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613fd060258361370e565b9150613fdb82613f74565b604082019050919050565b60006020820190508181036000830152613fff81613fc3565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061406260248361370e565b915061406d82614006565b604082019050919050565b6000602082019050818103600083015261409181614055565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006140d282613818565b91506140dd83613818565b9250826140ed576140ec614098565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061415460358361370e565b915061415f826140f8565b604082019050919050565b6000602082019050818103600083015261418381614147565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006141e660348361370e565b91506141f18261418a565b604082019050919050565b60006020820190508181036000830152614215816141d9565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e206d6178546f6b656e73466f72537761706261636b00000000000000000000602082015250565b600061427860368361370e565b91506142838261421c565b604082019050919050565b600060208201905081810360008301526142a78161426b565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061430a60268361370e565b9150614315826142ae565b604082019050919050565b60006020820190508181036000830152614339816142fd565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061439c60248361370e565b91506143a782614340565b604082019050919050565b600060208201905081810360008301526143cb8161438f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061442e60228361370e565b9150614439826143d2565b604082019050919050565b6000602082019050818103600083015261445d81614421565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006144c060258361370e565b91506144cb82614464565b604082019050919050565b600060208201905081810360008301526144ef816144b3565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061455260238361370e565b915061455d826144f6565b604082019050919050565b6000602082019050818103600083015261458181614545565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006145be60168361370e565b91506145c982614588565b602082019050919050565b600060208201905081810360008301526145ed816145b1565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061467660498361370e565b9150614681826145f4565b606082019050919050565b600060208201905081810360008301526146a581614669565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061470860358361370e565b9150614713826146ac565b604082019050919050565b60006020820190508181036000830152614737816146fb565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061477460138361370e565b915061477f8261473e565b602082019050919050565b600060208201905081810360008301526147a381614767565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061480660368361370e565b9150614811826147aa565b604082019050919050565b60006020820190508181036000830152614835816147f9565b9050919050565b600061484782613818565b915061485283613818565b925082820390508181111561486a57614869613cad565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006148cc60268361370e565b91506148d782614870565b604082019050919050565b600060208201905081810360008301526148fb816148bf565b9050919050565b600081905092915050565b50565b600061491d600083614902565b91506149288261490d565b600082019050919050565b600061493e82614910565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506149b5816137ec565b92915050565b6000602082840312156149d1576149d06137b5565b5b60006149df848285016149a6565b91505092915050565b6000819050919050565b6000614a0d614a08614a03846149e8565b6138ee565b613818565b9050919050565b614a1d816149f2565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614a58816137da565b82525050565b6000614a6a8383614a4f565b60208301905092915050565b6000602082019050919050565b6000614a8e82614a23565b614a988185614a2e565b9350614aa383614a3f565b8060005b83811015614ad4578151614abb8882614a5e565b9750614ac683614a76565b925050600181019050614aa7565b5085935050505092915050565b600060a082019050614af660008301886138c4565b614b036020830187614a14565b8181036040830152614b158186614a83565b9050614b2460608301856139e8565b614b3160808301846138c4565b969550505050505056fea264697066735822122068556c43d913a6bad579e77743fffa30cd0ba59b3f13ce1e047a71860c239e7564736f6c63430008130033

Deployed Bytecode

0x6080604052600436106102e85760003560e01c80637bce5a0411610190578063c0246668116100dc578063dd62ed3e11610095578063eba4c3331161006f578063eba4c33314610b77578063ee40166e14610ba0578063f2fde38b14610bcb578063f8b45b0514610bf4576102ef565b8063dd62ed3e14610ae4578063e2f4560514610b21578063e884f26014610b4c576102ef565b8063c0246668146109d6578063c18bc195146109ff578063c876d0b914610a28578063c8c8ebe414610a53578063cbb3e14514610a7e578063d257b34f14610aa7576102ef565b80639a7a23d611610149578063a9059cbb11610123578063a9059cbb14610908578063aacebbe314610945578063b62496f51461096e578063bbc0c742146109ab576102ef565b80639a7a23d614610865578063a0c973f11461088e578063a457c2d7146108cb576102ef565b80637bce5a04146107795780638a8c523c146107a45780638da5cb5b146107bb57806392136913146107e6578063924de9b71461081157806395d89b411461083a576102ef565b8063395093511161024f578063715018a6116102085780637571336a116101e25780637571336a146106bd57806375f0a874146106e657806377c18352146107115780637af8ed9c1461073c576102ef565b8063715018a61461065257806371fc468814610669578063751039fc14610692576102ef565b8063395093511461051a57806349bd5a5e146105575780634a62bb65146105825780634fbee193146105ad5780636ddd1713146105ea57806370a0823114610615576102ef565b806319c59e2c116102a157806319c59e2c146104085780631f3fed8f14610433578063203e727e1461045e57806323b872dd1461048757806327c8f835146104c4578063313ce567146104ef576102ef565b806306fdde03146102f4578063095ea7b31461031f5780630bf134041461035c5780630e47e822146103875780631694505e146103b257806318160ddd146103dd576102ef565b366102ef57005b600080fd5b34801561030057600080fd5b50610309610c1f565b6040516103169190613793565b60405180910390f35b34801561032b57600080fd5b506103466004803603810190610341919061384e565b610cb1565b60405161035391906138a9565b60405180910390f35b34801561036857600080fd5b50610371610ccf565b60405161037e91906138d3565b60405180910390f35b34801561039357600080fd5b5061039c610cd5565b6040516103a991906138d3565b60405180910390f35b3480156103be57600080fd5b506103c7610cdb565b6040516103d4919061394d565b60405180910390f35b3480156103e957600080fd5b506103f2610cff565b6040516103ff91906138d3565b60405180910390f35b34801561041457600080fd5b5061041d610d09565b60405161042a91906138d3565b60405180910390f35b34801561043f57600080fd5b50610448610d0f565b60405161045591906138d3565b60405180910390f35b34801561046a57600080fd5b5061048560048036038101906104809190613968565b610d15565b005b34801561049357600080fd5b506104ae60048036038101906104a99190613995565b610df2565b6040516104bb91906138a9565b60405180910390f35b3480156104d057600080fd5b506104d9610eea565b6040516104e691906139f7565b60405180910390f35b3480156104fb57600080fd5b50610504610ef0565b6040516105119190613a2e565b60405180910390f35b34801561052657600080fd5b50610541600480360381019061053c919061384e565b610ef9565b60405161054e91906138a9565b60405180910390f35b34801561056357600080fd5b5061056c610fa5565b60405161057991906139f7565b60405180910390f35b34801561058e57600080fd5b50610597610fc9565b6040516105a491906138a9565b60405180910390f35b3480156105b957600080fd5b506105d460048036038101906105cf9190613a49565b610fdc565b6040516105e191906138a9565b60405180910390f35b3480156105f657600080fd5b506105ff611032565b60405161060c91906138a9565b60405180910390f35b34801561062157600080fd5b5061063c60048036038101906106379190613a49565b611045565b60405161064991906138d3565b60405180910390f35b34801561065e57600080fd5b5061066761108d565b005b34801561067557600080fd5b50610690600480360381019061068b9190613968565b611115565b005b34801561069e57600080fd5b506106a76111ea565b6040516106b491906138a9565b60405180910390f35b3480156106c957600080fd5b506106e460048036038101906106df9190613aa2565b61128a565b005b3480156106f257600080fd5b506106fb611361565b60405161070891906139f7565b60405180910390f35b34801561071d57600080fd5b50610726611387565b60405161073391906138d3565b60405180910390f35b34801561074857600080fd5b50610763600480360381019061075e9190613968565b61138d565b60405161077091906138a9565b60405180910390f35b34801561078557600080fd5b5061078e611460565b60405161079b91906138d3565b60405180910390f35b3480156107b057600080fd5b506107b9611466565b005b3480156107c757600080fd5b506107d06114e4565b6040516107dd91906139f7565b60405180910390f35b3480156107f257600080fd5b506107fb61150e565b60405161080891906138d3565b60405180910390f35b34801561081d57600080fd5b5061083860048036038101906108339190613ae2565b611514565b005b34801561084657600080fd5b5061084f6115ad565b60405161085c9190613793565b60405180910390f35b34801561087157600080fd5b5061088c60048036038101906108879190613aa2565b61163f565b005b34801561089a57600080fd5b506108b560048036038101906108b09190613a49565b611757565b6040516108c291906138a9565b60405180910390f35b3480156108d757600080fd5b506108f260048036038101906108ed919061384e565b611777565b6040516108ff91906138a9565b60405180910390f35b34801561091457600080fd5b5061092f600480360381019061092a919061384e565b611862565b60405161093c91906138a9565b60405180910390f35b34801561095157600080fd5b5061096c60048036038101906109679190613a49565b611880565b005b34801561097a57600080fd5b5061099560048036038101906109909190613a49565b6119bc565b6040516109a291906138a9565b60405180910390f35b3480156109b757600080fd5b506109c06119dc565b6040516109cd91906138a9565b60405180910390f35b3480156109e257600080fd5b506109fd60048036038101906109f89190613aa2565b6119ef565b005b348015610a0b57600080fd5b50610a266004803603810190610a219190613968565b611b14565b005b348015610a3457600080fd5b50610a3d611bfd565b604051610a4a91906138a9565b60405180910390f35b348015610a5f57600080fd5b50610a68611c10565b604051610a7591906138d3565b60405180910390f35b348015610a8a57600080fd5b50610aa56004803603810190610aa09190613968565b611c16565b005b348015610ab357600080fd5b50610ace6004803603810190610ac99190613968565b611cd9565b604051610adb91906138a9565b60405180910390f35b348015610af057600080fd5b50610b0b6004803603810190610b069190613b0f565b611e69565b604051610b1891906138d3565b60405180910390f35b348015610b2d57600080fd5b50610b36611ef0565b604051610b4391906138d3565b60405180910390f35b348015610b5857600080fd5b50610b61611ef6565b604051610b6e91906138a9565b60405180910390f35b348015610b8357600080fd5b50610b9e6004803603810190610b999190613968565b611f96565b005b348015610bac57600080fd5b50610bb561206b565b604051610bc291906138d3565b60405180910390f35b348015610bd757600080fd5b50610bf26004803603810190610bed9190613a49565b612071565b005b348015610c0057600080fd5b50610c09612168565b604051610c1691906138d3565b60405180910390f35b606060038054610c2e90613b7e565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5a90613b7e565b8015610ca75780601f10610c7c57610100808354040283529160200191610ca7565b820191906000526020600020905b815481529060010190602001808311610c8a57829003601f168201915b5050505050905090565b6000610cc5610cbe61216e565b8484612176565b6001905092915050565b60075481565b60125481565b7f0000000000000000000000007de8063e9fb43321d2100e8ddae5167f56a5006081565b6000600254905090565b60105481565b60145481565b610d1d61216e565b73ffffffffffffffffffffffffffffffffffffffff16610d3b6114e4565b73ffffffffffffffffffffffffffffffffffffffff1614610d91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8890613bfb565b60405180910390fd5b6002811015610dd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcc90613c8d565b60405180910390fd5b670de0b6b3a764000081610de99190613cdc565b600d8190555050565b6000610dff84848461233f565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e4a61216e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec190613d90565b60405180910390fd5b610ede85610ed661216e565b858403612176565b60019150509392505050565b61dead81565b60006012905090565b6000610f9b610f0661216e565b848460016000610f1461216e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f969190613db0565b612176565b6001905092915050565b7f000000000000000000000000744fd0ff7dea32d8024509e13fc408572bab53a981565b600b60009054906101000a900460ff1681565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600860019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61109561216e565b73ffffffffffffffffffffffffffffffffffffffff166110b36114e4565b73ffffffffffffffffffffffffffffffffffffffff1614611109576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110090613bfb565b60405180910390fd5b6111136000612fd9565b565b61111d61216e565b73ffffffffffffffffffffffffffffffffffffffff1661113b6114e4565b73ffffffffffffffffffffffffffffffffffffffff1614611191576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118890613bfb565b60405180910390fd5b80601181905550601154601081905550600b60105411156111e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111de90613e30565b60405180910390fd5b50565b60006111f461216e565b73ffffffffffffffffffffffffffffffffffffffff166112126114e4565b73ffffffffffffffffffffffffffffffffffffffff1614611268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125f90613bfb565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b61129261216e565b73ffffffffffffffffffffffffffffffffffffffff166112b06114e4565b73ffffffffffffffffffffffffffffffffffffffff1614611306576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fd90613bfb565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b600061139761216e565b73ffffffffffffffffffffffffffffffffffffffff166113b56114e4565b73ffffffffffffffffffffffffffffffffffffffff161461140b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140290613bfb565b60405180910390fd5b600954821015611450576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144790613ec2565b60405180910390fd5b81600a8190555060019050919050565b60115481565b61146e61216e565b73ffffffffffffffffffffffffffffffffffffffff1661148c6114e4565b73ffffffffffffffffffffffffffffffffffffffff16146114e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d990613bfb565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60135481565b61151c61216e565b73ffffffffffffffffffffffffffffffffffffffff1661153a6114e4565b73ffffffffffffffffffffffffffffffffffffffff1614611590576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158790613bfb565b60405180910390fd5b80600860016101000a81548160ff02191690831515021790555050565b6060600480546115bc90613b7e565b80601f01602080910402602001604051908101604052809291908181526020018280546115e890613b7e565b80156116355780601f1061160a57610100808354040283529160200191611635565b820191906000526020600020905b81548152906001019060200180831161161857829003601f168201915b5050505050905090565b61164761216e565b73ffffffffffffffffffffffffffffffffffffffff166116656114e4565b73ffffffffffffffffffffffffffffffffffffffff16146116bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b290613bfb565b60405180910390fd5b7f000000000000000000000000744fd0ff7dea32d8024509e13fc408572bab53a973ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174090613f54565b60405180910390fd5b611753828261309f565b5050565b60166020528060005260406000206000915054906101000a900460ff1681565b6000806001600061178661216e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183a90613fe6565b60405180910390fd5b61185761184e61216e565b85858403612176565b600191505092915050565b600061187661186f61216e565b848461233f565b6001905092915050565b61188861216e565b73ffffffffffffffffffffffffffffffffffffffff166118a66114e4565b73ffffffffffffffffffffffffffffffffffffffff16146118fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f390613bfb565b60405180910390fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60176020528060005260406000206000915054906101000a900460ff1681565b600f60149054906101000a900460ff1681565b6119f761216e565b73ffffffffffffffffffffffffffffffffffffffff16611a156114e4565b73ffffffffffffffffffffffffffffffffffffffff1614611a6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6290613bfb565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611b0891906138a9565b60405180910390a25050565b611b1c61216e565b73ffffffffffffffffffffffffffffffffffffffff16611b3a6114e4565b73ffffffffffffffffffffffffffffffffffffffff1614611b90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8790613bfb565b60405180910390fd5b6005811015611bd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcb90614078565b60405180910390fd5b6103e8611bdf610cff565b82611bea9190613cdc565b611bf491906140c7565b600c8190555050565b600b60019054906101000a900460ff1681565b600d5481565b611c1e61216e565b73ffffffffffffffffffffffffffffffffffffffff16611c3c6114e4565b73ffffffffffffffffffffffffffffffffffffffff1614611c92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8990613bfb565b60405180910390fd5b6001600f60146101000a81548160ff0219169083151502179055506001600860016101000a81548160ff021916908315150217905550436006819055508060078190555050565b6000611ce361216e565b73ffffffffffffffffffffffffffffffffffffffff16611d016114e4565b73ffffffffffffffffffffffffffffffffffffffff1614611d57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4e90613bfb565b60405180910390fd5b620186a0611d63610cff565b611d6d91906140c7565b821015611daf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da69061416a565b60405180910390fd5b620186a0611dbb610cff565b6101f4611dc89190613cdc565b611dd291906140c7565b821115611e14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0b906141fc565b60405180910390fd5b600a54821115611e59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e509061428e565b60405180910390fd5b8160098190555060019050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6000611f0061216e565b73ffffffffffffffffffffffffffffffffffffffff16611f1e6114e4565b73ffffffffffffffffffffffffffffffffffffffff1614611f74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6b90613bfb565b60405180910390fd5b6000600b60016101000a81548160ff0219169083151502179055506001905090565b611f9e61216e565b73ffffffffffffffffffffffffffffffffffffffff16611fbc6114e4565b73ffffffffffffffffffffffffffffffffffffffff1614612012576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200990613bfb565b60405180910390fd5b80601381905550601354601281905550600b6012541115612068576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205f90613e30565b60405180910390fd5b50565b60065481565b61207961216e565b73ffffffffffffffffffffffffffffffffffffffff166120976114e4565b73ffffffffffffffffffffffffffffffffffffffff16146120ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e490613bfb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361215c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215390614320565b60405180910390fd5b61216581612fd9565b50565b600c5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036121e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121dc906143b2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224b90614444565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161233291906138d3565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a5906144d6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361241d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241490614568565b60405180910390fd5b600081036124365761243183836000613140565b612fd4565b600b60009054906101000a900460ff1615612af9576124536114e4565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156124c157506124916114e4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124fa5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612534575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561254d5750600860009054906101000a900460ff16155b15612af857600f60149054906101000a900460ff1661264757601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806126075750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612646576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263d906145d4565b60405180910390fd5b5b600b60019054906101000a900460ff161561280f576126646114e4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156126eb57507f0000000000000000000000007de8063e9fb43321d2100e8ddae5167f56a5006073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561274357507f000000000000000000000000744fd0ff7dea32d8024509e13fc408572bab53a973ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561280e5743600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106127c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c09061468c565b60405180910390fd5b43600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128b25750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561295957600d548111156128fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f39061471e565b60405180910390fd5b600c5461290883611045565b826129139190613db0565b1115612954576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294b9061478a565b60405180910390fd5b612af7565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129fc5750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a4b57600d54811115612a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3d9061481c565b60405180910390fd5b612af6565b601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612af557600c54612aa883611045565b82612ab39190613db0565b1115612af4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aeb9061478a565b60405180910390fd5b5b5b5b5b5b6000612b0430611045565b905060006009548210159050808015612b295750600860019054906101000a900460ff165b8015612b425750600860009054906101000a900460ff16155b8015612b985750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612bee5750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612c445750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c88576001600860006101000a81548160ff021916908315150217905550612c6c6133bf565b6000600860006101000a81548160ff0219169083151502179055505b6000600860009054906101000a900460ff16159050601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d3e5750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d4857600090505b60008115612fc45743600754600654612d619190613db0565b118015612e0b5750601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612e0a5750601760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b5b15612e5357612e376064612e2960638861349090919063ffffffff16565b6134a690919063ffffffff16565b90508060146000828254612e4b9190613db0565b925050819055505b601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612eae57506000601254115b15612efb57612edb6064612ecd6012548861349090919063ffffffff16565b6134a690919063ffffffff16565b90508060146000828254612eef9190613db0565b92505081905550612fa0565b601760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f5657506000601054115b15612f9f57612f836064612f756010548861349090919063ffffffff16565b6134a690919063ffffffff16565b90508060146000828254612f979190613db0565b925050819055505b5b6000811115612fb557612fb4873083613140565b5b8085612fc1919061483c565b94505b612fcf878787613140565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036131af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a6906144d6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361321e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161321590614568565b60405180910390fd5b6132298383836134bc565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156132af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a6906148e2565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133429190613db0565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516133a691906138d3565b60405180910390a36133b98484846134c1565b50505050565b60006133ca30611045565b905060008082036133dc57505061348e565b600a548211156133ec57600a5491505b6133f5826134c6565b6000601481905550600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161344390614933565b60006040518083038185875af1925050503d8060008114613480576040519150601f19603f3d011682016040523d82523d6000602084013e613485565b606091505b50508091505050505b565b6000818361349e9190613cdc565b905092915050565b600081836134b491906140c7565b905092915050565b505050565b505050565b6000600267ffffffffffffffff8111156134e3576134e2614948565b5b6040519080825280602002602001820160405280156135115781602001602082028036833780820191505090505b509050308160008151811061352957613528614977565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007de8063e9fb43321d2100e8ddae5167f56a5006073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135f291906149bb565b8160018151811061360657613605614977565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061366b307f0000000000000000000000007de8063e9fb43321d2100e8ddae5167f56a5006084612176565b7f0000000000000000000000007de8063e9fb43321d2100e8ddae5167f56a5006073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016136cd959493929190614ae1565b600060405180830381600087803b1580156136e757600080fd5b505af11580156136fb573d6000803e3d6000fd5b505050505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561373d578082015181840152602081019050613722565b60008484015250505050565b6000601f19601f8301169050919050565b600061376582613703565b61376f818561370e565b935061377f81856020860161371f565b61378881613749565b840191505092915050565b600060208201905081810360008301526137ad818461375a565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006137e5826137ba565b9050919050565b6137f5816137da565b811461380057600080fd5b50565b600081359050613812816137ec565b92915050565b6000819050919050565b61382b81613818565b811461383657600080fd5b50565b60008135905061384881613822565b92915050565b60008060408385031215613865576138646137b5565b5b600061387385828601613803565b925050602061388485828601613839565b9150509250929050565b60008115159050919050565b6138a38161388e565b82525050565b60006020820190506138be600083018461389a565b92915050565b6138cd81613818565b82525050565b60006020820190506138e860008301846138c4565b92915050565b6000819050919050565b600061391361390e613909846137ba565b6138ee565b6137ba565b9050919050565b6000613925826138f8565b9050919050565b60006139378261391a565b9050919050565b6139478161392c565b82525050565b6000602082019050613962600083018461393e565b92915050565b60006020828403121561397e5761397d6137b5565b5b600061398c84828501613839565b91505092915050565b6000806000606084860312156139ae576139ad6137b5565b5b60006139bc86828701613803565b93505060206139cd86828701613803565b92505060406139de86828701613839565b9150509250925092565b6139f1816137da565b82525050565b6000602082019050613a0c60008301846139e8565b92915050565b600060ff82169050919050565b613a2881613a12565b82525050565b6000602082019050613a436000830184613a1f565b92915050565b600060208284031215613a5f57613a5e6137b5565b5b6000613a6d84828501613803565b91505092915050565b613a7f8161388e565b8114613a8a57600080fd5b50565b600081359050613a9c81613a76565b92915050565b60008060408385031215613ab957613ab86137b5565b5b6000613ac785828601613803565b9250506020613ad885828601613a8d565b9150509250929050565b600060208284031215613af857613af76137b5565b5b6000613b0684828501613a8d565b91505092915050565b60008060408385031215613b2657613b256137b5565b5b6000613b3485828601613803565b9250506020613b4585828601613803565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613b9657607f821691505b602082108103613ba957613ba8613b4f565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613be560208361370e565b9150613bf082613baf565b602082019050919050565b60006020820190508181036000830152613c1481613bd8565b9050919050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e32250000000000000000000000000000000000602082015250565b6000613c77602f8361370e565b9150613c8282613c1b565b604082019050919050565b60006020820190508181036000830152613ca681613c6a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613ce782613818565b9150613cf283613818565b9250828202613d0081613818565b91508282048414831517613d1757613d16613cad565b5b5092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613d7a60288361370e565b9150613d8582613d1e565b604082019050919050565b60006020820190508181036000830152613da981613d6d565b9050919050565b6000613dbb82613818565b9150613dc683613818565b9250828201905080821115613dde57613ddd613cad565b5b92915050565b7f4d757374206b656570206665657320617420313125206f72206c657373000000600082015250565b6000613e1a601d8361370e565b9150613e2582613de4565b602082019050919050565b60006020820190508181036000830152613e4981613e0d565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f2073776170546f6b656e734174416d6f756e7400000000000000000000000000602082015250565b6000613eac60338361370e565b9150613eb782613e50565b604082019050919050565b60006020820190508181036000830152613edb81613e9f565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613f3e60398361370e565b9150613f4982613ee2565b604082019050919050565b60006020820190508181036000830152613f6d81613f31565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613fd060258361370e565b9150613fdb82613f74565b604082019050919050565b60006020820190508181036000830152613fff81613fc3565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061406260248361370e565b915061406d82614006565b604082019050919050565b6000602082019050818103600083015261409181614055565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006140d282613818565b91506140dd83613818565b9250826140ed576140ec614098565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061415460358361370e565b915061415f826140f8565b604082019050919050565b6000602082019050818103600083015261418381614147565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006141e660348361370e565b91506141f18261418a565b604082019050919050565b60006020820190508181036000830152614215816141d9565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e206d6178546f6b656e73466f72537761706261636b00000000000000000000602082015250565b600061427860368361370e565b91506142838261421c565b604082019050919050565b600060208201905081810360008301526142a78161426b565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061430a60268361370e565b9150614315826142ae565b604082019050919050565b60006020820190508181036000830152614339816142fd565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061439c60248361370e565b91506143a782614340565b604082019050919050565b600060208201905081810360008301526143cb8161438f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061442e60228361370e565b9150614439826143d2565b604082019050919050565b6000602082019050818103600083015261445d81614421565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006144c060258361370e565b91506144cb82614464565b604082019050919050565b600060208201905081810360008301526144ef816144b3565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061455260238361370e565b915061455d826144f6565b604082019050919050565b6000602082019050818103600083015261458181614545565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006145be60168361370e565b91506145c982614588565b602082019050919050565b600060208201905081810360008301526145ed816145b1565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061467660498361370e565b9150614681826145f4565b606082019050919050565b600060208201905081810360008301526146a581614669565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061470860358361370e565b9150614713826146ac565b604082019050919050565b60006020820190508181036000830152614737816146fb565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061477460138361370e565b915061477f8261473e565b602082019050919050565b600060208201905081810360008301526147a381614767565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061480660368361370e565b9150614811826147aa565b604082019050919050565b60006020820190508181036000830152614835816147f9565b9050919050565b600061484782613818565b915061485283613818565b925082820390508181111561486a57614869613cad565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006148cc60268361370e565b91506148d782614870565b604082019050919050565b600060208201905081810360008301526148fb816148bf565b9050919050565b600081905092915050565b50565b600061491d600083614902565b91506149288261490d565b600082019050919050565b600061493e82614910565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506149b5816137ec565b92915050565b6000602082840312156149d1576149d06137b5565b5b60006149df848285016149a6565b91505092915050565b6000819050919050565b6000614a0d614a08614a03846149e8565b6138ee565b613818565b9050919050565b614a1d816149f2565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614a58816137da565b82525050565b6000614a6a8383614a4f565b60208301905092915050565b6000602082019050919050565b6000614a8e82614a23565b614a988185614a2e565b9350614aa383614a3f565b8060005b83811015614ad4578151614abb8882614a5e565b9750614ac683614a76565b925050600181019050614aa7565b5085935050505092915050565b600060a082019050614af660008301886138c4565b614b036020830187614a14565b8181036040830152614b158186614a83565b9050614b2460608301856139e8565b614b3160808301846138c4565b969550505050505056fea264697066735822122068556c43d913a6bad579e77743fffa30cd0ba59b3f13ce1e047a71860c239e7564736f6c63430008130033

Deployed Bytecode Sourcemap

25119:15363:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10942:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13109:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25439:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26197:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25197:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12062:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26124:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26272:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31628:241;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13760:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25300:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11904:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14661:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25255:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25735:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34726:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25595:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12233:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21966:103;;;;;;;;;;;;;:::i;:::-;;32899:243;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29902:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32414:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26041:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25673:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31133:337;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26158:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29578:46;;;;;;;;;;;;;:::i;:::-;;21315:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26232:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32684:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11161:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33979:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26447:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15379:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12573:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34487:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26653:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26082:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33669:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31994:232;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25775:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25852:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29632:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30375:639;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12811:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25633:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30094:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33254:248;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25362:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22224:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25821:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10942:100;10996:13;11029:5;11022:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10942:100;:::o;13109:169::-;13192:4;13209:39;13218:12;:10;:12::i;:::-;13232:7;13241:6;13209:8;:39::i;:::-;13266:4;13259:11;;13109:169;;;;:::o;25439:37::-;;;;:::o;26197:28::-;;;;:::o;25197:51::-;;;:::o;12062:108::-;12123:7;12150:12;;12143:19;;12062:108;:::o;26124:27::-;;;;:::o;26272:33::-;;;;:::o;31628:241::-;21546:12;:10;:12::i;:::-;21535:23;;:7;:5;:7::i;:::-;:23;;;21527:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31734:1:::1;31724:6;:11;;31702:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;31854:6;31844;:17;;;;:::i;:::-;31821:20;:40;;;;31628:241:::0;:::o;13760:492::-;13900:4;13917:36;13927:6;13935:9;13946:6;13917:9;:36::i;:::-;13966:24;13993:11;:19;14005:6;13993:19;;;;;;;;;;;;;;;:33;14013:12;:10;:12::i;:::-;13993:33;;;;;;;;;;;;;;;;13966:60;;14065:6;14045:16;:26;;14037:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;14152:57;14161:6;14169:12;:10;:12::i;:::-;14202:6;14183:16;:25;14152:8;:57::i;:::-;14240:4;14233:11;;;13760:492;;;;;:::o;25300:53::-;25346:6;25300:53;:::o;11904:93::-;11962:5;11987:2;11980:9;;11904:93;:::o;14661:215::-;14749:4;14766:80;14775:12;:10;:12::i;:::-;14789:7;14835:10;14798:11;:25;14810:12;:10;:12::i;:::-;14798:25;;;;;;;;;;;;;;;:34;14824:7;14798:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;14766:8;:80::i;:::-;14864:4;14857:11;;14661:215;;;;:::o;25255:38::-;;;:::o;25735:33::-;;;;;;;;;;;;;:::o;34726:119::-;34792:4;34816:12;:21;34829:7;34816:21;;;;;;;;;;;;;;;;;;;;;;;;;34809:28;;34726:119;;;:::o;25595:31::-;;;;;;;;;;;;;:::o;12233:127::-;12307:7;12334:9;:18;12344:7;12334:18;;;;;;;;;;;;;;;;12327:25;;12233:127;;;:::o;21966:103::-;21546:12;:10;:12::i;:::-;21535:23;;:7;:5;:7::i;:::-;:23;;;21527:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22031:30:::1;22058:1;22031:18;:30::i;:::-;21966:103::o:0;32899:243::-;21546:12;:10;:12::i;:::-;21535:23;;:7;:5;:7::i;:::-;:23;;;21527:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33009:13:::1;32991:15;:31;;;;33048:15;;33033:12;:30;;;;33098:2;33082:12;;:18;;33074:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;32899:243:::0;:::o;29902:121::-;29954:4;21546:12;:10;:12::i;:::-;21535:23;;:7;:5;:7::i;:::-;:23;;;21527:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29988:5:::1;29971:14;;:22;;;;;;;;;;;;;;;;;;30011:4;30004:11;;29902:121:::0;:::o;32414:152::-;21546:12;:10;:12::i;:::-;21535:23;;:7;:5;:7::i;:::-;:23;;;21527:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32554:4:::1;32527:16;:24;32544:6;32527:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;32414:152:::0;;:::o;26041:30::-;;;;;;;;;;;;;:::o;25673:35::-;;;;:::o;31133:337::-;31243:4;21546:12;:10;:12::i;:::-;21535:23;;:7;:5;:7::i;:::-;:23;;;21527:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31300:18:::1;;31287:9;:31;;31265:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;31431:9;31408:20;:32;;;;31458:4;31451:11;;31133:337:::0;;;:::o;26158:30::-;;;;:::o;29578:46::-;21546:12;:10;:12::i;:::-;21535:23;;:7;:5;:7::i;:::-;:23;;;21527:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29578:46::o;21315:87::-;21361:7;21388:6;;;;;;;;;;;21381:13;;21315:87;:::o;26232:31::-;;;;:::o;32684:100::-;21546:12;:10;:12::i;:::-;21535:23;;:7;:5;:7::i;:::-;:23;;;21527:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32769:7:::1;32755:11;;:21;;;;;;;;;;;;;;;;;;32684:100:::0;:::o;11161:104::-;11217:13;11250:7;11243:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11161:104;:::o;33979:304::-;21546:12;:10;:12::i;:::-;21535:23;;:7;:5;:7::i;:::-;:23;;;21527:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34123:13:::1;34115:21;;:4;:21;;::::0;34093:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;34234:41;34263:4;34269:5;34234:28;:41::i;:::-;33979:304:::0;;:::o;26447:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;15379:413::-;15472:4;15489:24;15516:11;:25;15528:12;:10;:12::i;:::-;15516:25;;;;;;;;;;;;;;;:34;15542:7;15516:34;;;;;;;;;;;;;;;;15489:61;;15589:15;15569:16;:35;;15561:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;15682:67;15691:12;:10;:12::i;:::-;15705:7;15733:15;15714:16;:34;15682:8;:67::i;:::-;15780:4;15773:11;;;15379:413;;;;:::o;12573:175::-;12659:4;12676:42;12686:12;:10;:12::i;:::-;12700:9;12711:6;12676:9;:42::i;:::-;12736:4;12729:11;;12573:175;;;;:::o;34487:231::-;21546:12;:10;:12::i;:::-;21535:23;;:7;:5;:7::i;:::-;:23;;;21527:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34647:15:::1;;;;;;;;;;;34604:59;;34627:18;34604:59;;;;;;;;;;;;34692:18;34674:15;;:36;;;;;;;;;;;;;;;;;;34487:231:::0;:::o;26653:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;26082:33::-;;;;;;;;;;;;;:::o;33669:175::-;21546:12;:10;:12::i;:::-;21535:23;;:7;:5;:7::i;:::-;:23;;;21527:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33778:8:::1;33754:12;:21;33767:7;33754:21;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;33818:7;33802:34;;;33827:8;33802:34;;;;;;:::i;:::-;;;;;;;;33669:175:::0;;:::o;31994:232::-;21546:12;:10;:12::i;:::-;21535:23;;:7;:5;:7::i;:::-;:23;;;21527:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32103:1:::1;32093:6;:11;;32071:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;32214:4;32200:13;:11;:13::i;:::-;32191:6;:22;;;;:::i;:::-;:27;;;;:::i;:::-;32179:9;:39;;;;31994:232:::0;:::o;25775:39::-;;;;;;;;;;;;;:::o;25852:35::-;;;;:::o;29632:195::-;21546:12;:10;:12::i;:::-;21535:23;;:7;:5;:7::i;:::-;:23;;;21527:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29705:4:::1;29689:13;;:20;;;;;;;;;;;;;;;;;;29734:4;29720:11;;:18;;;;;;;;;;;;;;;;;;29770:12;29749:18;:33;;;;29814:5;29793:18;:26;;;;29632:195:::0;:::o;30375:639::-;30483:4;21546:12;:10;:12::i;:::-;21535:23;;:7;:5;:7::i;:::-;:23;;;21527:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30555:6:::1;30540:13;:11;:13::i;:::-;:21;;;;:::i;:::-;30527:9;:34;;30505:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;30709:6;30694:13;:11;:13::i;:::-;30688:3;:19;;;;:::i;:::-;:27;;;;:::i;:::-;30675:9;:40;;30653:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;30841:20;;30828:9;:33;;30806:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;30975:9;30954:18;:30;;;;31002:4;30995:11;;30375:639:::0;;;:::o;12811:151::-;12900:7;12927:11;:18;12939:5;12927:18;;;;;;;;;;;;;;;:27;12946:7;12927:27;;;;;;;;;;;;;;;;12920:34;;12811:151;;;;:::o;25633:33::-;;;;:::o;30094:135::-;30154:4;21546:12;:10;:12::i;:::-;21535:23;;:7;:5;:7::i;:::-;:23;;;21527:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30194:5:::1;30171:20;;:28;;;;;;;;;;;;;;;;;;30217:4;30210:11;;30094:135:::0;:::o;33254:248::-;21546:12;:10;:12::i;:::-;21535:23;;:7;:5;:7::i;:::-;:23;;;21527:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33366:13:::1;33347:16;:32;;;;33406:16;;33390:13;:32;;;;33458:2;33441:13;;:19;;33433:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33254:248:::0;:::o;25362:37::-;;;;:::o;22224:201::-;21546:12;:10;:12::i;:::-;21535:23;;:7;:5;:7::i;:::-;:23;;;21527:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22333:1:::1;22313:22;;:8;:22;;::::0;22305:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22389:28;22408:8;22389:18;:28::i;:::-;22224:201:::0;:::o;25821:24::-;;;;:::o;9948:98::-;10001:7;10028:10;10021:17;;9948:98;:::o;19063:380::-;19216:1;19199:19;;:5;:19;;;19191:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19297:1;19278:21;;:7;:21;;;19270:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19381:6;19351:11;:18;19363:5;19351:18;;;;;;;;;;;;;;;:27;19370:7;19351:27;;;;;;;;;;;;;;;:36;;;;19419:7;19403:32;;19412:5;19403:32;;;19428:6;19403:32;;;;;;:::i;:::-;;;;;;;;19063:380;;;:::o;34853:4510::-;35001:1;34985:18;;:4;:18;;;34977:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35078:1;35064:16;;:2;:16;;;35056:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;35147:1;35137:6;:11;35133:93;;35165:28;35181:4;35187:2;35191:1;35165:15;:28::i;:::-;35208:7;;35133:93;35242:14;;;;;;;;;;;35238:2428;;;35303:7;:5;:7::i;:::-;35295:15;;:4;:15;;;;:49;;;;;35337:7;:5;:7::i;:::-;35331:13;;:2;:13;;;;35295:49;:86;;;;;35379:1;35365:16;;:2;:16;;;;35295:86;:128;;;;;35416:6;35402:21;;:2;:21;;;;35295:128;:158;;;;;35445:8;;;;;;;;;;;35444:9;35295:158;35273:2382;;;35493:13;;;;;;;;;;;35488:209;;35565:12;:18;35578:4;35565:18;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;;35587:12;:16;35600:2;35587:16;;;;;;;;;;;;;;;;;;;;;;;;;35565:38;35531:146;;;;;;;;;;;;:::i;:::-;;;;;;;;;35488:209;35853:20;;;;;;;;;;;35849:641;;;35934:7;:5;:7::i;:::-;35928:13;;:2;:13;;;;:72;;;;;35984:15;35970:30;;:2;:30;;;;35928:72;:129;;;;;36043:13;36029:28;;:2;:28;;;;35928:129;35898:573;;;36221:12;36146:28;:39;36175:9;36146:39;;;;;;;;;;;;;;;;:87;36108:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;36435:12;36393:28;:39;36422:9;36393:39;;;;;;;;;;;;;;;:54;;;;35898:573;35849:641;36564:25;:31;36590:4;36564:31;;;;;;;;;;;;;;;;;;;;;;;;;:77;;;;;36621:16;:20;36638:2;36621:20;;;;;;;;;;;;;;;;;;;;;;;;;36620:21;36564:77;36538:1102;;;36728:20;;36718:6;:30;;36684:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;36936:9;;36919:13;36929:2;36919:9;:13::i;:::-;36910:6;:22;;;;:::i;:::-;:35;;36876:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;36538:1102;;;37114:25;:29;37140:2;37114:29;;;;;;;;;;;;;;;;;;;;;;;;;:77;;;;;37169:16;:22;37186:4;37169:22;;;;;;;;;;;;;;;;;;;;;;;;;37168:23;37114:77;37088:552;;;37278:20;;37268:6;:30;;37234:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;37088:552;;;37435:16;:20;37452:2;37435:20;;;;;;;;;;;;;;;;;;;;;;;;;37430:210;;37540:9;;37523:13;37533:2;37523:9;:13::i;:::-;37514:6;:22;;;;:::i;:::-;:35;;37480:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;37430:210;37088:552;36538:1102;35273:2382;35238:2428;37678:28;37709:24;37727:4;37709:9;:24::i;:::-;37678:55;;37746:12;37785:18;;37761:20;:42;;37746:57;;37834:7;:35;;;;;37858:11;;;;;;;;;;;37834:35;:61;;;;;37887:8;;;;;;;;;;;37886:9;37834:61;:110;;;;;37913:25;:31;37939:4;37913:31;;;;;;;;;;;;;;;;;;;;;;;;;37912:32;37834:110;:146;;;;;37962:12;:18;37975:4;37962:18;;;;;;;;;;;;;;;;;;;;;;;;;37961:19;37834:146;:180;;;;;37998:12;:16;38011:2;37998:16;;;;;;;;;;;;;;;;;;;;;;;;;37997:17;37834:180;37816:312;;;38052:4;38041:8;;:15;;;;;;;;;;;;;;;;;;38073:10;:8;:10::i;:::-;38111:5;38100:8;;:16;;;;;;;;;;;;;;;;;;37816:312;38140:12;38156:8;;;;;;;;;;;38155:9;38140:24;;38266:12;:18;38279:4;38266:18;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;;38288:12;:16;38301:2;38288:16;;;;;;;;;;;;;;;;;;;;;;;;;38266:38;38262:86;;;38331:5;38321:15;;38262:86;38360:12;38465:7;38461:849;;;38534:12;38513:18;;38492;;:39;;;;:::i;:::-;:54;:124;;;;;38551:25;:29;38577:2;38551:29;;;;;;;;;;;;;;;;;;;;;;;;;:64;;;;38584:25;:31;38610:4;38584:31;;;;;;;;;;;;;;;;;;;;;;;;;38551:64;38492:124;38489:238;;;38643:23;38662:3;38643:14;38654:2;38643:6;:10;;:14;;;;:::i;:::-;:18;;:23;;;;:::i;:::-;38636:30;;38707:4;38685:18;;:26;;;;;;;:::i;:::-;;;;;;;;38489:238;38769:25;:29;38795:2;38769:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;38818:1;38802:13;;:17;38769:50;38765:396;;;38847:34;38877:3;38847:25;38858:13;;38847:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;38840:41;;38922:4;38900:18;;:26;;;;;;;:::i;:::-;;;;;;;;38765:396;;;38988:25;:31;39014:4;38988:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;39038:1;39023:12;;:16;38988:51;38984:177;;;39067:33;39096:3;39067:24;39078:12;;39067:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;39060:40;;39141:4;39119:18;;:26;;;;;;;:::i;:::-;;;;;;;;38984:177;38765:396;39188:1;39181:4;:8;39177:91;;;39210:42;39226:4;39240;39247;39210:15;:42::i;:::-;39177:91;39294:4;39284:14;;;;;:::i;:::-;;;38461:849;39322:33;39338:4;39344:2;39348:6;39322:15;:33::i;:::-;34966:4397;;;;34853:4510;;;;:::o;22585:191::-;22659:16;22678:6;;;;;;;;;;;22659:25;;22704:8;22695:6;;:17;;;;;;;;;;;;;;;;;;22759:8;22728:40;;22749:8;22728:40;;;;;;;;;;;;22648:128;22585:191;:::o;34291:188::-;34408:5;34374:25;:31;34400:4;34374:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;34465:5;34431:40;;34459:4;34431:40;;;;;;;;;;;;34291:188;;:::o;16282:733::-;16440:1;16422:20;;:6;:20;;;16414:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;16524:1;16503:23;;:9;:23;;;16495:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16579:47;16600:6;16608:9;16619:6;16579:20;:47::i;:::-;16639:21;16663:9;:17;16673:6;16663:17;;;;;;;;;;;;;;;;16639:41;;16716:6;16699:13;:23;;16691:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;16837:6;16821:13;:22;16801:9;:17;16811:6;16801:17;;;;;;;;;;;;;;;:42;;;;16889:6;16865:9;:20;16875:9;16865:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;16930:9;16913:35;;16922:6;16913:35;;;16941:6;16913:35;;;;;;:::i;:::-;;;;;;;;16961:46;16981:6;16989:9;17000:6;16961:19;:46::i;:::-;16403:612;16282:733;;;:::o;39970:507::-;40009:23;40035:24;40053:4;40035:9;:24::i;:::-;40009:50;;40070:12;40118:1;40099:15;:20;40095:59;;40136:7;;;;40095:59;40188:20;;40170:15;:38;40166:109;;;40243:20;;40225:38;;40166:109;40287:33;40304:15;40287:16;:33::i;:::-;40354:1;40333:18;:22;;;;40390:15;;;;;;;;;;;40382:29;;40433:21;40382:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40368:101;;;;;39998:479;;39970:507;:::o;3391:98::-;3449:7;3480:1;3476;:5;;;;:::i;:::-;3469:12;;3391:98;;;;:::o;3790:::-;3848:7;3879:1;3875;:5;;;;:::i;:::-;3868:12;;3790:98;;;;:::o;20043:125::-;;;;:::o;20772:124::-;;;;:::o;39371:589::-;39497:21;39535:1;39521:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39497:40;;39566:4;39548;39553:1;39548:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;39592:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39582:4;39587:1;39582:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;39627:62;39644:4;39659:15;39677:11;39627:8;:62::i;:::-;39728:15;:66;;;39809:11;39835:1;39879:4;39906;39926:15;39728:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39426:534;39371:589;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:60::-;3826:3;3847:5;3840:12;;3798:60;;;:::o;3864:142::-;3914:9;3947:53;3965:34;3974:24;3992:5;3974:24;:::i;:::-;3965:34;:::i;:::-;3947:53;:::i;:::-;3934:66;;3864:142;;;:::o;4012:126::-;4062:9;4095:37;4126:5;4095:37;:::i;:::-;4082:50;;4012:126;;;:::o;4144:153::-;4221:9;4254:37;4285:5;4254:37;:::i;:::-;4241:50;;4144:153;;;:::o;4303:185::-;4417:64;4475:5;4417:64;:::i;:::-;4412:3;4405:77;4303:185;;:::o;4494:276::-;4614:4;4652:2;4641:9;4637:18;4629:26;;4665:98;4760:1;4749:9;4745:17;4736:6;4665:98;:::i;:::-;4494:276;;;;:::o;4776:329::-;4835:6;4884:2;4872:9;4863:7;4859:23;4855:32;4852:119;;;4890:79;;:::i;:::-;4852:119;5010:1;5035:53;5080:7;5071:6;5060:9;5056:22;5035:53;:::i;:::-;5025:63;;4981:117;4776:329;;;;:::o;5111:619::-;5188:6;5196;5204;5253:2;5241:9;5232:7;5228:23;5224:32;5221:119;;;5259:79;;:::i;:::-;5221:119;5379:1;5404:53;5449:7;5440:6;5429:9;5425:22;5404:53;:::i;:::-;5394:63;;5350:117;5506:2;5532:53;5577:7;5568:6;5557:9;5553:22;5532:53;:::i;:::-;5522:63;;5477:118;5634:2;5660:53;5705:7;5696:6;5685:9;5681:22;5660:53;:::i;:::-;5650:63;;5605:118;5111:619;;;;;:::o;5736:118::-;5823:24;5841:5;5823:24;:::i;:::-;5818:3;5811:37;5736:118;;:::o;5860:222::-;5953:4;5991:2;5980:9;5976:18;5968:26;;6004:71;6072:1;6061:9;6057:17;6048:6;6004:71;:::i;:::-;5860:222;;;;:::o;6088:86::-;6123:7;6163:4;6156:5;6152:16;6141:27;;6088:86;;;:::o;6180:112::-;6263:22;6279:5;6263:22;:::i;:::-;6258:3;6251:35;6180:112;;:::o;6298:214::-;6387:4;6425:2;6414:9;6410:18;6402:26;;6438:67;6502:1;6491:9;6487:17;6478:6;6438:67;:::i;:::-;6298:214;;;;:::o;6518:329::-;6577:6;6626:2;6614:9;6605:7;6601:23;6597:32;6594:119;;;6632:79;;:::i;:::-;6594:119;6752:1;6777:53;6822:7;6813:6;6802:9;6798:22;6777:53;:::i;:::-;6767:63;;6723:117;6518:329;;;;:::o;6853:116::-;6923:21;6938:5;6923:21;:::i;:::-;6916:5;6913:32;6903:60;;6959:1;6956;6949:12;6903:60;6853:116;:::o;6975:133::-;7018:5;7056:6;7043:20;7034:29;;7072:30;7096:5;7072:30;:::i;:::-;6975:133;;;;:::o;7114:468::-;7179:6;7187;7236:2;7224:9;7215:7;7211:23;7207:32;7204:119;;;7242:79;;:::i;:::-;7204:119;7362:1;7387:53;7432:7;7423:6;7412:9;7408:22;7387:53;:::i;:::-;7377:63;;7333:117;7489:2;7515:50;7557:7;7548:6;7537:9;7533:22;7515:50;:::i;:::-;7505:60;;7460:115;7114:468;;;;;:::o;7588:323::-;7644:6;7693:2;7681:9;7672:7;7668:23;7664:32;7661:119;;;7699:79;;:::i;:::-;7661:119;7819:1;7844:50;7886:7;7877:6;7866:9;7862:22;7844:50;:::i;:::-;7834:60;;7790:114;7588:323;;;;:::o;7917:474::-;7985:6;7993;8042:2;8030:9;8021:7;8017:23;8013:32;8010:119;;;8048:79;;:::i;:::-;8010:119;8168:1;8193:53;8238:7;8229:6;8218:9;8214:22;8193:53;:::i;:::-;8183:63;;8139:117;8295:2;8321:53;8366:7;8357:6;8346:9;8342:22;8321:53;:::i;:::-;8311:63;;8266:118;7917:474;;;;;:::o;8397:180::-;8445:77;8442:1;8435:88;8542:4;8539:1;8532:15;8566:4;8563:1;8556:15;8583:320;8627:6;8664:1;8658:4;8654:12;8644:22;;8711:1;8705:4;8701:12;8732:18;8722:81;;8788:4;8780:6;8776:17;8766:27;;8722:81;8850:2;8842:6;8839:14;8819:18;8816:38;8813:84;;8869:18;;:::i;:::-;8813:84;8634:269;8583:320;;;:::o;8909:182::-;9049:34;9045:1;9037:6;9033:14;9026:58;8909:182;:::o;9097:366::-;9239:3;9260:67;9324:2;9319:3;9260:67;:::i;:::-;9253:74;;9336:93;9425:3;9336:93;:::i;:::-;9454:2;9449:3;9445:12;9438:19;;9097:366;;;:::o;9469:419::-;9635:4;9673:2;9662:9;9658:18;9650:26;;9722:9;9716:4;9712:20;9708:1;9697:9;9693:17;9686:47;9750:131;9876:4;9750:131;:::i;:::-;9742:139;;9469:419;;;:::o;9894:234::-;10034:34;10030:1;10022:6;10018:14;10011:58;10103:17;10098:2;10090:6;10086:15;10079:42;9894:234;:::o;10134:366::-;10276:3;10297:67;10361:2;10356:3;10297:67;:::i;:::-;10290:74;;10373:93;10462:3;10373:93;:::i;:::-;10491:2;10486:3;10482:12;10475:19;;10134:366;;;:::o;10506:419::-;10672:4;10710:2;10699:9;10695:18;10687:26;;10759:9;10753:4;10749:20;10745:1;10734:9;10730:17;10723:47;10787:131;10913:4;10787:131;:::i;:::-;10779:139;;10506:419;;;:::o;10931:180::-;10979:77;10976:1;10969:88;11076:4;11073:1;11066:15;11100:4;11097:1;11090:15;11117:410;11157:7;11180:20;11198:1;11180:20;:::i;:::-;11175:25;;11214:20;11232:1;11214:20;:::i;:::-;11209:25;;11269:1;11266;11262:9;11291:30;11309:11;11291:30;:::i;:::-;11280:41;;11470:1;11461:7;11457:15;11454:1;11451:22;11431:1;11424:9;11404:83;11381:139;;11500:18;;:::i;:::-;11381:139;11165:362;11117:410;;;;:::o;11533:227::-;11673:34;11669:1;11661:6;11657:14;11650:58;11742:10;11737:2;11729:6;11725:15;11718:35;11533:227;:::o;11766:366::-;11908:3;11929:67;11993:2;11988:3;11929:67;:::i;:::-;11922:74;;12005:93;12094:3;12005:93;:::i;:::-;12123:2;12118:3;12114:12;12107:19;;11766:366;;;:::o;12138:419::-;12304:4;12342:2;12331:9;12327:18;12319:26;;12391:9;12385:4;12381:20;12377:1;12366:9;12362:17;12355:47;12419:131;12545:4;12419:131;:::i;:::-;12411:139;;12138:419;;;:::o;12563:191::-;12603:3;12622:20;12640:1;12622:20;:::i;:::-;12617:25;;12656:20;12674:1;12656:20;:::i;:::-;12651:25;;12699:1;12696;12692:9;12685:16;;12720:3;12717:1;12714:10;12711:36;;;12727:18;;:::i;:::-;12711:36;12563:191;;;;:::o;12760:179::-;12900:31;12896:1;12888:6;12884:14;12877:55;12760:179;:::o;12945:366::-;13087:3;13108:67;13172:2;13167:3;13108:67;:::i;:::-;13101:74;;13184:93;13273:3;13184:93;:::i;:::-;13302:2;13297:3;13293:12;13286:19;;12945:366;;;:::o;13317:419::-;13483:4;13521:2;13510:9;13506:18;13498:26;;13570:9;13564:4;13560:20;13556:1;13545:9;13541:17;13534:47;13598:131;13724:4;13598:131;:::i;:::-;13590:139;;13317:419;;;:::o;13742:238::-;13882:34;13878:1;13870:6;13866:14;13859:58;13951:21;13946:2;13938:6;13934:15;13927:46;13742:238;:::o;13986:366::-;14128:3;14149:67;14213:2;14208:3;14149:67;:::i;:::-;14142:74;;14225:93;14314:3;14225:93;:::i;:::-;14343:2;14338:3;14334:12;14327:19;;13986:366;;;:::o;14358:419::-;14524:4;14562:2;14551:9;14547:18;14539:26;;14611:9;14605:4;14601:20;14597:1;14586:9;14582:17;14575:47;14639:131;14765:4;14639:131;:::i;:::-;14631:139;;14358:419;;;:::o;14783:244::-;14923:34;14919:1;14911:6;14907:14;14900:58;14992:27;14987:2;14979:6;14975:15;14968:52;14783:244;:::o;15033:366::-;15175:3;15196:67;15260:2;15255:3;15196:67;:::i;:::-;15189:74;;15272:93;15361:3;15272:93;:::i;:::-;15390:2;15385:3;15381:12;15374:19;;15033:366;;;:::o;15405:419::-;15571:4;15609:2;15598:9;15594:18;15586:26;;15658:9;15652:4;15648:20;15644:1;15633:9;15629:17;15622:47;15686:131;15812:4;15686:131;:::i;:::-;15678:139;;15405:419;;;:::o;15830:224::-;15970:34;15966:1;15958:6;15954:14;15947:58;16039:7;16034:2;16026:6;16022:15;16015:32;15830:224;:::o;16060:366::-;16202:3;16223:67;16287:2;16282:3;16223:67;:::i;:::-;16216:74;;16299:93;16388:3;16299:93;:::i;:::-;16417:2;16412:3;16408:12;16401:19;;16060:366;;;:::o;16432:419::-;16598:4;16636:2;16625:9;16621:18;16613:26;;16685:9;16679:4;16675:20;16671:1;16660:9;16656:17;16649:47;16713:131;16839:4;16713:131;:::i;:::-;16705:139;;16432:419;;;:::o;16857:223::-;16997:34;16993:1;16985:6;16981:14;16974:58;17066:6;17061:2;17053:6;17049:15;17042:31;16857:223;:::o;17086:366::-;17228:3;17249:67;17313:2;17308:3;17249:67;:::i;:::-;17242:74;;17325:93;17414:3;17325:93;:::i;:::-;17443:2;17438:3;17434:12;17427:19;;17086:366;;;:::o;17458:419::-;17624:4;17662:2;17651:9;17647:18;17639:26;;17711:9;17705:4;17701:20;17697:1;17686:9;17682:17;17675:47;17739:131;17865:4;17739:131;:::i;:::-;17731:139;;17458:419;;;:::o;17883:180::-;17931:77;17928:1;17921:88;18028:4;18025:1;18018:15;18052:4;18049:1;18042:15;18069:185;18109:1;18126:20;18144:1;18126:20;:::i;:::-;18121:25;;18160:20;18178:1;18160:20;:::i;:::-;18155:25;;18199:1;18189:35;;18204:18;;:::i;:::-;18189:35;18246:1;18243;18239:9;18234:14;;18069:185;;;;:::o;18260:240::-;18400:34;18396:1;18388:6;18384:14;18377:58;18469:23;18464:2;18456:6;18452:15;18445:48;18260:240;:::o;18506:366::-;18648:3;18669:67;18733:2;18728:3;18669:67;:::i;:::-;18662:74;;18745:93;18834:3;18745:93;:::i;:::-;18863:2;18858:3;18854:12;18847:19;;18506:366;;;:::o;18878:419::-;19044:4;19082:2;19071:9;19067:18;19059:26;;19131:9;19125:4;19121:20;19117:1;19106:9;19102:17;19095:47;19159:131;19285:4;19159:131;:::i;:::-;19151:139;;18878:419;;;:::o;19303:239::-;19443:34;19439:1;19431:6;19427:14;19420:58;19512:22;19507:2;19499:6;19495:15;19488:47;19303:239;:::o;19548:366::-;19690:3;19711:67;19775:2;19770:3;19711:67;:::i;:::-;19704:74;;19787:93;19876:3;19787:93;:::i;:::-;19905:2;19900:3;19896:12;19889:19;;19548:366;;;:::o;19920:419::-;20086:4;20124:2;20113:9;20109:18;20101:26;;20173:9;20167:4;20163:20;20159:1;20148:9;20144:17;20137:47;20201:131;20327:4;20201:131;:::i;:::-;20193:139;;19920:419;;;:::o;20345:241::-;20485:34;20481:1;20473:6;20469:14;20462:58;20554:24;20549:2;20541:6;20537:15;20530:49;20345:241;:::o;20592:366::-;20734:3;20755:67;20819:2;20814:3;20755:67;:::i;:::-;20748:74;;20831:93;20920:3;20831:93;:::i;:::-;20949:2;20944:3;20940:12;20933:19;;20592:366;;;:::o;20964:419::-;21130:4;21168:2;21157:9;21153:18;21145:26;;21217:9;21211:4;21207:20;21203:1;21192:9;21188:17;21181:47;21245:131;21371:4;21245:131;:::i;:::-;21237:139;;20964:419;;;:::o;21389:225::-;21529:34;21525:1;21517:6;21513:14;21506:58;21598:8;21593:2;21585:6;21581:15;21574:33;21389:225;:::o;21620:366::-;21762:3;21783:67;21847:2;21842:3;21783:67;:::i;:::-;21776:74;;21859:93;21948:3;21859:93;:::i;:::-;21977:2;21972:3;21968:12;21961:19;;21620:366;;;:::o;21992:419::-;22158:4;22196:2;22185:9;22181:18;22173:26;;22245:9;22239:4;22235:20;22231:1;22220:9;22216:17;22209:47;22273:131;22399:4;22273:131;:::i;:::-;22265:139;;21992:419;;;:::o;22417:223::-;22557:34;22553:1;22545:6;22541:14;22534:58;22626:6;22621:2;22613:6;22609:15;22602:31;22417:223;:::o;22646:366::-;22788:3;22809:67;22873:2;22868:3;22809:67;:::i;:::-;22802:74;;22885:93;22974:3;22885:93;:::i;:::-;23003:2;22998:3;22994:12;22987:19;;22646:366;;;:::o;23018:419::-;23184:4;23222:2;23211:9;23207:18;23199:26;;23271:9;23265:4;23261:20;23257:1;23246:9;23242:17;23235:47;23299:131;23425:4;23299:131;:::i;:::-;23291:139;;23018:419;;;:::o;23443:221::-;23583:34;23579:1;23571:6;23567:14;23560:58;23652:4;23647:2;23639:6;23635:15;23628:29;23443:221;:::o;23670:366::-;23812:3;23833:67;23897:2;23892:3;23833:67;:::i;:::-;23826:74;;23909:93;23998:3;23909:93;:::i;:::-;24027:2;24022:3;24018:12;24011:19;;23670:366;;;:::o;24042:419::-;24208:4;24246:2;24235:9;24231:18;24223:26;;24295:9;24289:4;24285:20;24281:1;24270:9;24266:17;24259:47;24323:131;24449:4;24323:131;:::i;:::-;24315:139;;24042:419;;;:::o;24467:224::-;24607:34;24603:1;24595:6;24591:14;24584:58;24676:7;24671:2;24663:6;24659:15;24652:32;24467:224;:::o;24697:366::-;24839:3;24860:67;24924:2;24919:3;24860:67;:::i;:::-;24853:74;;24936:93;25025:3;24936:93;:::i;:::-;25054:2;25049:3;25045:12;25038:19;;24697:366;;;:::o;25069:419::-;25235:4;25273:2;25262:9;25258:18;25250:26;;25322:9;25316:4;25312:20;25308:1;25297:9;25293:17;25286:47;25350:131;25476:4;25350:131;:::i;:::-;25342:139;;25069:419;;;:::o;25494:222::-;25634:34;25630:1;25622:6;25618:14;25611:58;25703:5;25698:2;25690:6;25686:15;25679:30;25494:222;:::o;25722:366::-;25864:3;25885:67;25949:2;25944:3;25885:67;:::i;:::-;25878:74;;25961:93;26050:3;25961:93;:::i;:::-;26079:2;26074:3;26070:12;26063:19;;25722:366;;;:::o;26094:419::-;26260:4;26298:2;26287:9;26283:18;26275:26;;26347:9;26341:4;26337:20;26333:1;26322:9;26318:17;26311:47;26375:131;26501:4;26375:131;:::i;:::-;26367:139;;26094:419;;;:::o;26519:172::-;26659:24;26655:1;26647:6;26643:14;26636:48;26519:172;:::o;26697:366::-;26839:3;26860:67;26924:2;26919:3;26860:67;:::i;:::-;26853:74;;26936:93;27025:3;26936:93;:::i;:::-;27054:2;27049:3;27045:12;27038:19;;26697:366;;;:::o;27069:419::-;27235:4;27273:2;27262:9;27258:18;27250:26;;27322:9;27316:4;27312:20;27308:1;27297:9;27293:17;27286:47;27350:131;27476:4;27350:131;:::i;:::-;27342:139;;27069:419;;;:::o;27494:297::-;27634:34;27630:1;27622:6;27618:14;27611:58;27703:34;27698:2;27690:6;27686:15;27679:59;27772:11;27767:2;27759:6;27755:15;27748:36;27494:297;:::o;27797:366::-;27939:3;27960:67;28024:2;28019:3;27960:67;:::i;:::-;27953:74;;28036:93;28125:3;28036:93;:::i;:::-;28154:2;28149:3;28145:12;28138:19;;27797:366;;;:::o;28169:419::-;28335:4;28373:2;28362:9;28358:18;28350:26;;28422:9;28416:4;28412:20;28408:1;28397:9;28393:17;28386:47;28450:131;28576:4;28450:131;:::i;:::-;28442:139;;28169:419;;;:::o;28594:240::-;28734:34;28730:1;28722:6;28718:14;28711:58;28803:23;28798:2;28790:6;28786:15;28779:48;28594:240;:::o;28840:366::-;28982:3;29003:67;29067:2;29062:3;29003:67;:::i;:::-;28996:74;;29079:93;29168:3;29079:93;:::i;:::-;29197:2;29192:3;29188:12;29181:19;;28840:366;;;:::o;29212:419::-;29378:4;29416:2;29405:9;29401:18;29393:26;;29465:9;29459:4;29455:20;29451:1;29440:9;29436:17;29429:47;29493:131;29619:4;29493:131;:::i;:::-;29485:139;;29212:419;;;:::o;29637:169::-;29777:21;29773:1;29765:6;29761:14;29754:45;29637:169;:::o;29812:366::-;29954:3;29975:67;30039:2;30034:3;29975:67;:::i;:::-;29968:74;;30051:93;30140:3;30051:93;:::i;:::-;30169:2;30164:3;30160:12;30153:19;;29812:366;;;:::o;30184:419::-;30350:4;30388:2;30377:9;30373:18;30365:26;;30437:9;30431:4;30427:20;30423:1;30412:9;30408:17;30401:47;30465:131;30591:4;30465:131;:::i;:::-;30457:139;;30184:419;;;:::o;30609:241::-;30749:34;30745:1;30737:6;30733:14;30726:58;30818:24;30813:2;30805:6;30801:15;30794:49;30609:241;:::o;30856:366::-;30998:3;31019:67;31083:2;31078:3;31019:67;:::i;:::-;31012:74;;31095:93;31184:3;31095:93;:::i;:::-;31213:2;31208:3;31204:12;31197:19;;30856:366;;;:::o;31228:419::-;31394:4;31432:2;31421:9;31417:18;31409:26;;31481:9;31475:4;31471:20;31467:1;31456:9;31452:17;31445:47;31509:131;31635:4;31509:131;:::i;:::-;31501:139;;31228:419;;;:::o;31653:194::-;31693:4;31713:20;31731:1;31713:20;:::i;:::-;31708:25;;31747:20;31765:1;31747:20;:::i;:::-;31742:25;;31791:1;31788;31784:9;31776:17;;31815:1;31809:4;31806:11;31803:37;;;31820:18;;:::i;:::-;31803:37;31653:194;;;;:::o;31853:225::-;31993:34;31989:1;31981:6;31977:14;31970:58;32062:8;32057:2;32049:6;32045:15;32038:33;31853:225;:::o;32084:366::-;32226:3;32247:67;32311:2;32306:3;32247:67;:::i;:::-;32240:74;;32323:93;32412:3;32323:93;:::i;:::-;32441:2;32436:3;32432:12;32425:19;;32084:366;;;:::o;32456:419::-;32622:4;32660:2;32649:9;32645:18;32637:26;;32709:9;32703:4;32699:20;32695:1;32684:9;32680:17;32673:47;32737:131;32863:4;32737:131;:::i;:::-;32729:139;;32456:419;;;:::o;32881:147::-;32982:11;33019:3;33004:18;;32881:147;;;;:::o;33034:114::-;;:::o;33154:398::-;33313:3;33334:83;33415:1;33410:3;33334:83;:::i;:::-;33327:90;;33426:93;33515:3;33426:93;:::i;:::-;33544:1;33539:3;33535:11;33528:18;;33154:398;;;:::o;33558:379::-;33742:3;33764:147;33907:3;33764:147;:::i;:::-;33757:154;;33928:3;33921:10;;33558:379;;;:::o;33943:180::-;33991:77;33988:1;33981:88;34088:4;34085:1;34078:15;34112:4;34109:1;34102:15;34129:180;34177:77;34174:1;34167:88;34274:4;34271:1;34264:15;34298:4;34295:1;34288:15;34315:143;34372:5;34403:6;34397:13;34388:22;;34419:33;34446:5;34419:33;:::i;:::-;34315:143;;;;:::o;34464:351::-;34534:6;34583:2;34571:9;34562:7;34558:23;34554:32;34551:119;;;34589:79;;:::i;:::-;34551:119;34709:1;34734:64;34790:7;34781:6;34770:9;34766:22;34734:64;:::i;:::-;34724:74;;34680:128;34464:351;;;;:::o;34821:85::-;34866:7;34895:5;34884:16;;34821:85;;;:::o;34912:158::-;34970:9;35003:61;35021:42;35030:32;35056:5;35030:32;:::i;:::-;35021:42;:::i;:::-;35003:61;:::i;:::-;34990:74;;34912:158;;;:::o;35076:147::-;35171:45;35210:5;35171:45;:::i;:::-;35166:3;35159:58;35076:147;;:::o;35229:114::-;35296:6;35330:5;35324:12;35314:22;;35229:114;;;:::o;35349:184::-;35448:11;35482:6;35477:3;35470:19;35522:4;35517:3;35513:14;35498:29;;35349:184;;;;:::o;35539:132::-;35606:4;35629:3;35621:11;;35659:4;35654:3;35650:14;35642:22;;35539:132;;;:::o;35677:108::-;35754:24;35772:5;35754:24;:::i;:::-;35749:3;35742:37;35677:108;;:::o;35791:179::-;35860:10;35881:46;35923:3;35915:6;35881:46;:::i;:::-;35959:4;35954:3;35950:14;35936:28;;35791:179;;;;:::o;35976:113::-;36046:4;36078;36073:3;36069:14;36061:22;;35976:113;;;:::o;36125:732::-;36244:3;36273:54;36321:5;36273:54;:::i;:::-;36343:86;36422:6;36417:3;36343:86;:::i;:::-;36336:93;;36453:56;36503:5;36453:56;:::i;:::-;36532:7;36563:1;36548:284;36573:6;36570:1;36567:13;36548:284;;;36649:6;36643:13;36676:63;36735:3;36720:13;36676:63;:::i;:::-;36669:70;;36762:60;36815:6;36762:60;:::i;:::-;36752:70;;36608:224;36595:1;36592;36588:9;36583:14;;36548:284;;;36552:14;36848:3;36841:10;;36249:608;;;36125:732;;;;:::o;36863:831::-;37126:4;37164:3;37153:9;37149:19;37141:27;;37178:71;37246:1;37235:9;37231:17;37222:6;37178:71;:::i;:::-;37259:80;37335:2;37324:9;37320:18;37311:6;37259:80;:::i;:::-;37386:9;37380:4;37376:20;37371:2;37360:9;37356:18;37349:48;37414:108;37517:4;37508:6;37414:108;:::i;:::-;37406:116;;37532:72;37600:2;37589:9;37585:18;37576:6;37532:72;:::i;:::-;37614:73;37682:3;37671:9;37667:19;37658:6;37614:73;:::i;:::-;36863:831;;;;;;;;:::o

Swarm Source

ipfs://68556c43d913a6bad579e77743fffa30cd0ba59b3f13ce1e047a71860c239e75
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.