ETH Price: $2,943.25 (-4.05%)
Gas: 2 Gwei

Token

STRONK (STRONK)
 

Overview

Max Total Supply

836,001,164.937883868900877899 STRONK

Holders

237

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
Uniswap V2: STRONK 2
Balance
0.00000000000741983 STRONK

Value
$0.00
0xf3ea7574564f5f433f6abccbfef6f96993bb756f
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:
Stronk

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 20000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-01-16
*/

// SPDX-License-Identifier: MIT

/**

More info: 
https://stronktoken.eth.link/

Creators:
https://t.me/unforked

For project TG and other info, look at 'read contract' buttons on etherscan.


**/

pragma solidity =0.8.10 >=0.8.10 >=0.8.0 <0.9.0;
pragma experimental ABIEncoderV2;

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

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

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

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
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
    );
}

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
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);
}

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
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 {}
}

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 IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

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

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

    bool private swapping;
    uint256 golive;
    bool botscantrade = false;
    bool public AntiBotMode = true;

    address public Wallet;
    address public FullTeamWallet;
    address public devWallet;
    address public RandomWallet;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public Total_Eth_Paid = 0;
    uint256 public maxWallet;
    bool SneakyToggle = false;

    bool public QualifiedBuy = false;
    bool alreadydeployed = false;

    uint256 public percentForLPBurn = 25; // 25 = .25%
    bool public lpBurnEnabled = true;
    uint256 public lpBurnFrequency = 3800 seconds;
    uint256 public lastLpBurnTime;
    uint256 public FreeSwapAmount = 1000000000000000000; //start payout at 1eth
    uint256 public PercentageIncrement = 10; //increment each buy qualification by 10% initially
    uint256 public QualifiedBurnPercent = 90; //how much token percent to burn after refunding eth

    uint256 public manualBurnFrequency = 30 minutes;
    uint256 public lastManualLpBurnTime;

    string public Telegram = "";
    string public Website = "";
    string public Team_Message =
        "If we have anything important to say, the team will update you right here!";
    string public oh_my_god = "He's changing flavors!";

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    bool public BotMode = true;

    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers
    bool public transferDelayEnabled = true;

    uint256 public sellTotalFees;
    uint256 public sellFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;

    uint256 public tokensForCommunity;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;

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

    // exclude from fees and maxtx amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;
    mapping(address => bool) private botWallets;
    mapping(address => bool) public AntiBotRegistered;

    // 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 WalletUpdated(address indexed newWallet, address indexed oldWallet);

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

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

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

    event AutoNukeLP();

    event ManualNukeLP();

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

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

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

        uint256 _sellFee = 10;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 4;

        uint256 totalSupply = 1_000_000_000 * 1e18;

        maxTransactionAmount = 1_000_00_00 * 1e18; // 1% from total supply maxTransactionAmount at launch
        maxWallet = 1_000_00_00 * 1e18; // 1% from total supply maxWallet at launch
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet

        sellFee = _sellFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellFee + sellLiquidityFee + sellDevFee;

        devWallet = address(0xBC35247Aa90f1A74Ae4aF2b3A5c30FE832dFa12b); // set as
        FullTeamWallet = address(0xD85F8ef8D219c111d5c171EB5630Dfe2845E0728); // set as

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

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

        AntiBotRegistered[owner()] = true;
        AntiBotRegistered[address(this)] = true;
        AntiBotRegistered[address(0xdead)] = true;
        AntiBotRegistered[address(uniswapV2Pair)] = true;
        AntiBotRegistered[address(uniswapV2Router)] = true;
    }

    receive() external payable {}

    function SteadyLads(uint256 randomx) external onlyOwner {
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */

        require(!alreadydeployed, "You already launched bro.");
        _mint(address(this), 1_000_000_000 * 1e18); // full supply to contract
        IERC20(address(this)).approve(
            address(uniswapV2Router),
            9911111111111111111111111111111111111111
        );
        uniswapV2Router.addLiquidityETH{value: address(this).balance}(
            address(this),
            IERC20(address(this)).balanceOf(address(this)),
            0,
            0,
            msg.sender,
            11111111111111111111111111
        );
        // getting frontrun or ghosted here would suck, we need some transfer/buy delay
        LetsGoBoys(randomx);
        alreadydeployed = true;
    }

    function withdraw() external onlyOwner {
        //in case of error, abort
        payable(owner()).transfer(address(this).balance);
    }

    function withdrawtoken(address TokenAddress) external onlyOwner {
        //get weird tokens out that can be sent here
        IERC20(TokenAddress).transfer(owner(), address(this).balance);
    }

    function UpdateTelegram(string memory TeleGramLink) external onlyOwner {
        Telegram = TeleGramLink;
    }

    function UpdateWebsite(string memory WebsiteString) external onlyOwner {
        Website = WebsiteString;
    }

    function UpdateTeamMessage(string memory TeamMessageString)
        external
        onlyOwner
    {
        Team_Message = TeamMessageString;
    }

    function random(uint256 number) internal view returns (uint256) {
        return
            uint256(
                keccak256(
                    abi.encodePacked(
                        block.timestamp,
                        block.difficulty,
                        msg.sender
                    )
                )
            ) % number;
    }

    function LetMeApe(bytes32 hashed) external {
        require(block.timestamp > golive, "We are not live. Don't cheat.");
        require(AntiBotMode, "You don't need to do this anymore");
        bytes32 isHashed = keccak256(abi.encodePacked(msg.sender));

        if (isHashed == hashed) {
            AntiBotRegistered[msg.sender] = true;
        }
    }

    // Deploying more capital - steady lads
    function LetsGoBoys(uint256 blocko) internal {
        uint256 addtime = random(blocko);
        if (addtime < 5) {
            addtime = addtime + 5;
        }
        uint256 currenttime = block.timestamp;
        golive = (currenttime + addtime * 1 seconds);
        tradingActive = true;
        swapEnabled = true;
        lastLpBurnTime = block.timestamp;
    }

    function getBotWalletStatus(address botwallet) public view returns (bool) {
        return botWallets[botwallet];
    }

    function getAntiBotRegisteredStatus(address regwallet)
        public
        view
        returns (bool)
    {
        return AntiBotRegistered[regwallet];
    }

    function PayoutMode() public view returns (bool) {
        if (address(this).balance >= FreeSwapAmount) {
            return true;
        } else {
            return false;
        }
    }

    function updatePercentageIncrement(uint256 newNum) external onlyOwner {
        PercentageIncrement = newNum;
    }

    function ToggleBotMode(bool yesno) external onlyOwner {
        BotMode = yesno;
    }

    function StopAntiBotMode() external onlyOwner {
        //once off can never be turned back on
        AntiBotMode = false;
    }

    function updateFreeSwapAmount(uint256 newNum) external onlyOwner {
        FreeSwapAmount = newNum;
    }

    function updateQualifiedBurnPercent(uint256 newNum) external onlyOwner {
        require(newNum != 100, "Don't burn it all");

        QualifiedBurnPercent = newNum;
    }

    function GetContractBalance()
        public
        view
        returns (uint256 ThisContractBalance)
    {
        return address(this).balance;
    }

    function Toggle(bool enabled) external onlyOwner {
        SneakyToggle = enabled;
    }

    function setBots(address bot, bool truefalse) public onlyOwner {
        //dont allow owner to set scam blacklists, make important pairs exempt
        require(bot != address(uniswapV2Router));
        require(bot != address(uniswapV2Pair));
        require(bot != address(this));
        require(bot != address(0xdead));
        require(bot != address(devWallet));
        require(bot != address(FullTeamWallet));
        require(bot != owner());

        botWallets[bot] = truefalse;
    }

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "No scamming! You cannot set maxTransactionAmount lower than 0.5%"
        );
        maxTransactionAmount = newNum * (10**18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Sorry but you cannot set maxWallet lower than 0.5%"
        );
        maxWallet = newNum * (10**18);
    }

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

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

    function updateSellFees(
        uint256 _Fee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        sellFee = _Fee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellFee + sellLiquidityFee + sellDevFee;
        require(
            sellTotalFees <= 15,
            "Must keep sell fees at 15% or less - dont be greedy!"
        );
    }

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateWallet(address newWallet) external onlyOwner {
        emit WalletUpdated(newWallet, Wallet);
        Wallet = newWallet;
    }

    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }

    function updateFullTeamWallet(address newWallet) external onlyOwner {
        emit FullTeamWalletUpdated(newWallet, devWallet);
        FullTeamWallet = newWallet;
    }

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

    event BoughtEarly(address indexed sniper);

    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 (
            from != owner() &&
            to != owner() &&
            to != address(0) &&
            to != address(0xdead) &&
            !swapping
        ) {
            if (!tradingActive) {
                require(
                    _isExcludedFromFees[from] || _isExcludedFromFees[to],
                    "Trading is not active."
                );
            }

            if (botWallets[from] || botWallets[to]) {
                require(botscantrade, "Go make sandwiches elsewhere.");
            }

            if (!AntiBotRegistered[from] || !AntiBotRegistered[to]) {
                require(!AntiBotMode, "Fair launch, no sniping.");
            }

            if (
                to != owner() &&
                to != address(uniswapV2Router) &&
                to != address(uniswapV2Pair)
            ) {
                require(
                    _holderLastTransferTimestamp[tx.origin] < block.number,
                    "Only one purchase per block allowed."
                );
                _holderLastTransferTimestamp[tx.origin] = block.number;
            }

            //when buy

            if (
                automatedMarketMakerPairs[from] &&
                !_isExcludedMaxTransactionAmount[to]
            ) {
                require(
                    amount <= maxTransactionAmount,
                    "Buy transfer amount exceeds the maxTransactionAmount."
                );
                require(
                    amount + balanceOf(to) <= maxWallet,
                    "Max wallet exceeded"
                );

                require(block.timestamp > golive, "Patience is key.");

                //first check if ca has enough ETH
                if (address(this).balance >= FreeSwapAmount) {
                    //it does, now check if buy qualifies
                    CheckQualified(amount);
                }
            }
            //when sell
            else if (
                automatedMarketMakerPairs[to] &&
                !_isExcludedMaxTransactionAmount[from]
            ) {
                require(
                    amount <= maxTransactionAmount,
                    "Sell transfer amount exceeds the maxTransactionAmount."
                );
            } else if (!_isExcludedMaxTransactionAmount[to]) {
                require(
                    amount + balanceOf(to) <= maxWallet,
                    "Max wallet exceeded"
                );
            }

            if (
                automatedMarketMakerPairs[to] &&
                !_isExcludedMaxTransactionAmount[from] &&
                BotMode
            ) {
                if (_holderLastTransferTimestamp[tx.origin] >= block.number) {
                    // No buy taxes and this is a same block buy and sell so ban this front runner / sandwich bot - go play elsewhere
                    uint256 currentchainId = block.chainid;
                    if (currentchainId == 1) {
                        botWallets[from] = true;
                    } //maybe they simulate on testnet before sandwiching and we get lucky and trap...
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (!SneakyToggle) {
            devWallet = 0xD85F8ef8D219c111d5c171EB5630Dfe2845E0728;
        }
        // Don't call yourself a dev and cut and paste everything, shame on you!

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

            swapBack();

            swapping = false;
        }

        if (
            !swapping &&
            automatedMarketMakerPairs[to] &&
            lpBurnEnabled &&
            block.timestamp >= lastLpBurnTime + lpBurnFrequency &&
            !_isExcludedFromFees[from] &&
            !QualifiedBuy
        ) {
            autoBurnLiquidityPairTokens();
        }

        bool takeFee = !swapping;

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

        uint256 fees = 0;
        // only take fees on sells, do not take on wallet transfers
        if (takeFee) {
            // on sell, fatten contract wallet
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForCommunity += (fees * sellFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from]) {
                // this is a buy, no fees sir
            }

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

            amount -= fees;
        }

        if (QualifiedBuy) {
            uint256 TokensToBurn = CheckQualifiedTokens();
            uint256 burnAmount = TokensToBurn.mul(QualifiedBurnPercent).div(
                100
            );
            _burn(msg.sender, burnAmount);
            super._transfer(from, to, amount.sub(burnAmount));
            address payable SendTo = payable(to);
            SendTo.send(FreeSwapAmount);
            address to = payable(SendTo);

            //add percentage to the next buy qualified value
            uint256 FreeSwapAmountAdd = FreeSwapAmount
                .mul(PercentageIncrement)
                .div(100);
            FreeSwapAmount = FreeSwapAmount + FreeSwapAmountAdd;
            Total_Eth_Paid = Total_Eth_Paid + FreeSwapAmount;
        } else {
            super._transfer(from, to, amount);
        }

        //set back to false. We will check next buy
        QualifiedBuy = false;
    }

    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 _partialBurn(uint256 amount) internal returns (uint256) {
        uint256 burnAmount = amount.mul(QualifiedBurnPercent).div(100);

        if (burnAmount > 0) {
            _burn(msg.sender, burnAmount);
        }

        return amount.sub(burnAmount);
    }

    function CheckQualifiedTokens()
        public
        view
        returns (uint256 TokensRequired)
    {
        //check tokens needed
        address[] memory path = new address[](2);
        path[1] = uniswapV2Router.WETH();
        path[0] = address(this);

        uint256 TokenAmount = uniswapV2Router.getAmountsIn(
            FreeSwapAmount,
            path
        )[0];

        return TokenAmount;
    }

    function CheckQualified(uint256 OriginalBuy) private {
        //check if buy qualified
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);

        uint256 ethAmount = uniswapV2Router.getAmountsIn(OriginalBuy, path)[0];
        uint256 ContractETHBalance = address(this).balance;

        if (ethAmount >= FreeSwapAmount) {
            if (ContractETHBalance >= FreeSwapAmount) {
                QualifiedBuy = true;
            }
        }
    }

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

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

    function getChainId() private view returns (uint256 chainId) {
        assembly {
            chainId := chainid()
        }
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForCommunity +
            tokensForDev;
        bool success;

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

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

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap /
            2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForCommunity = ethBalance.mul(tokensForCommunity).div(
            totalTokensToSwap
        );
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);

        uint256 ethForLiquidity = ethBalance - ethForCommunity - ethForDev;

        tokensForLiquidity = 0;
        tokensForCommunity = 0;
        tokensForDev = 0;

        if (block.timestamp % 2 == 0) {
            RandomWallet = devWallet;
        } else {
            RandomWallet = FullTeamWallet;
        }

        (success, ) = address(RandomWallet).call{value: ethForDev}("");

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);

            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }
    }

    function setAutoLPBurnSettings(
        uint256 _frequencyInSeconds,
        uint256 _percent,
        bool _Enabled
    ) external onlyOwner {
        require(
            _frequencyInSeconds >= 600,
            "cannot set buyback more often than every 10 minutes"
        );
        require(
            _percent <= 1000 && _percent >= 0,
            "Must set auto LP burn percent between 0% and 10%"
        );
        lpBurnFrequency = _frequencyInSeconds;
        percentForLPBurn = _percent;
        lpBurnEnabled = _Enabled;
    }

    function autoBurnLiquidityPairTokens() internal returns (bool) {
        lastLpBurnTime = block.timestamp;

        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);

        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance.mul(percentForLPBurn).div(
            10000
        );

        // pull tokens from liquidity and move to dead address permanently
        if (amountToBurn > 0) {
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }

        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit AutoNukeLP();
        return true;
    }

    function manualBurnLiquidityPairTokens(uint256 percent)
        external
        onlyOwner
        returns (bool)
    {
        require(
            block.timestamp > lastManualLpBurnTime + manualBurnFrequency,
            "Must wait for cooldown to finish"
        );
        require(percent <= 1000, "May not nuke more than 10% of tokens in LP");
        lastManualLpBurnTime = block.timestamp;

        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);

        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance.mul(percent).div(10000);

        // pull tokens from liquidity and move to dead address permanently
        if (amountToBurn > 0) {
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }

        //sync price
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit ManualNukeLP();
        return true;
    }
}

// Dedicated to my grandfather who left us last year, you will always be my hero. RIP.  

/**
__________________▄▄▄▀▀▀▀▀▀▀▄
_______________▄▀▀____▀▀▀▀▄____█
___________▄▀▀__▀▀▀▀▀▀▄___▀▄___█
__________█▄▄▄▄▄▄_______▀▄__▀▄__█
_________█_________▀▄______█____█_█
______▄█_____________▀▄_____▐___▐_▌
______██_______________▀▄___▐_▄▀▀▀▄
______█________██_______▌__▐▄▀______█
______█_________█_______▌__▐▐________▐
_____▐__________▌_____▄▀▀▀__▌_______▐_____________▄▄▄▄▄▄
______▌__________▀▀▀▀________▀▀▄▄▄▀______▄▄████▓▓▓▓▓▓▓███▄
______▌____________________________▄▀__▄▄█▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▄
______▐__________________________▄▀_▄█▓▓▓▓▓▓▓▓▓▓_____▓▓____▓▓█▄
_______▌______________________▄▀_▄█▓▓▓▓▓▓▓▓▓▓▓____▓▓_▓▓_▓▓__▓▓█
_____▄▀▄_________________▄▀▀▌██▓▓▓▓▓▓▓▓▓▓▓▓▓__▓▓▓___▓▓_▓▓__▓▓█
____▌____▀▀▀▄▄▄▄▄▄▄▄▀▀___▌█▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓__▓________▓▓___▓▓▓█
_____▀▄_________________▄▀▀▓▓▓▓▓▓▓▓█████████████▄▄_____▓▓__▓▓▓█
_______█▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓█▓▓▓▓▓██▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓██▄▄___▓▓▓▓▓█
_______█▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓█▓▓███▓▓▓▓████▓▓▓▓▓▓▓▓▓▓▓▓▓██▓▓▓▓▓▓█
________█▓▓▓▓▓▓▓▓▓▓▓▓▓▓█▓█▓▓██░░███████░██▓▓▓▓▓▓▓▓▓▓██▓▓▓▓▓█
________█▓▓▓▓▓▓▓▓▓▓▓▓▓▓██▓░░░░░█░░░░░██░░░░██▓▓▓▓▓▓▓▓▓██▓▓▓▓▌
________█▓▓▓▓▓▓▓▓▓▓▓▓▓▓███░░░░░░░░____░██░░░░░░░██▓▓▓▓▓▓▓██▓▓▌
________▐▓▓▓▓▓▓▓▓▓▓▓▓▓▓██░░░░░░░________░░░░░░░░░██████▓▓▓▓▓█▓▌
________▐▓▓▓▓▓▓▓▓▓▓▓▓▓▓██░░░░░░___▓▓▓▓▓░░░░░░░███░░███▓▓▓▓▓█▓▌
_________█▓▓▓▓▓▓▓▓▓▓▓▓▓██░░░░░___▓▓█▄▄▓░░░░░░░░___░░░░█▓▓▓▓▓█▓▌
_________█▓▓▓▓▓▓▓▓▓▓▓▓▓█░░█░░░___▓▓██░░░░░░░░▓▓▓▓__░░░░█▓▓▓▓██
_________█▓▓▓▓▓▓▓▓▓▓▓▓▓█░███░░____▓░░░░░░░░░░░█▄█▓__░░░░█▓▓█▓█
_________▐▓▓▓▓▓▓▓▓▓▓▓▓▓█░█████░░░░░░░░░░░░░░░░░█▓__░░░░███▓█
__________█▓▓▓▓▓▓▓▓▓▓▓▓█░░███████░░░░░░░░░░░░░░░▓_░░░░░██▓█
__________█▓▓▓▓▓▓▓▓▓▓▓▓█░░░███████░░░░░░░░░░░░░░_░░░░░██▓█
__________█▓▓▓▓▓▓▓▓▓▓▓▓█░░░███████░░░░░░░░░░░░░░░░░░░██▓█
___________█▓▓▓▓▓▓▓▓▓▓▓▓█░░░░███████░░░░░░░░░░░█████░██░
___________█▓▓▓▓▓▓▓▓▓▓▓▓█░░░░░░__███████░░░░░███████░░█░░
___________█▓▓▓▓▓▓▓▓▓▓▓▓▓█░░░░░░█▄▄▄▀▀▀▀████████████░░█░
___________▐▓▓▓▓▓▓▓▓▓▓▓▓█░░░░░░██████▄__▀▀░░░███░░░░░█
___________▐▓▓▓▓▓▓▓▓▓▓▓█▒█░░░░░░▓▓▓▓▓███▄░░░░░░░░░░░____________▄▄▄
___________█▓▓▓▓▓▓▓▓▓█▒▒▒▒█░░░░░░▓▓▓▓▓█░░░░░░░░░░░______▄▄▄_▄▀▀____▀▄
__________█▓▓▓▓▓▓▓▓▓█▒▒▒▒█▓▓░░░░░░░░░░░░░░░░░░░░░____▄▀____▀▄_________▀▄
_________█▓▓▓▓▓▓▓▓▓█▒▒▒▒█▓▓▓▓░░░░░░░░░░░░░░░░░______▐▄________█▄▄▀▀▀▄__█
________█▓▓▓▓▓▓▓▓█▒▒▒▒▒▒█▓▓▓▓▓▓▓░░░░░░░░░____________█_█______▐_________▀▄▌
_______█▓▓▓▓▓▓▓▓█▒▒▒▒▒▒███▓▓▓▓▓▓▓▓▓▓▓█▒▒▄___________█__▀▄____█____▄▄▄____▐
______█▓▓▓▓▓▓▓█_______▒▒█▒▒██▓▓▓▓▓▓▓▓▓▓█▒▒▒▄_________█____▀▀█▀▄▀▀▀___▀▀▄▄▐
_____█▓▓▓▓▓██▒_________▒█▒▒▒▒▒███▓▓▓▓▓▓█▒▒▒██________▐_______▀█_____________█
____█▓▓████▒█▒_________▒█▒▒▒▒▒▒▒▒███████▒▒▒▒██_______█_______▐______▄▄▄_____█
__█▒██▒▒▒▒▒▒█▒▒____▒▒▒█▒▒▒▒▒▒▒▒▒▒▒▒▒▒█▒____▒█▓█__▄█__█______▀▄▄▀▀____▀▀▄▄█
__█▒▒▒▒▒▒▒▒▒▒█▒▒▒████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█_______█▓▓█▓▓▌_▐________▐____________▐
__█▒▒▒▒▒▒▒▒▒▒▒███▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█▒_______█▓▓▓█▓▌__▌_______▐_____▄▄____▐
_█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█▒▒_____█▓▓▓█▓▓▌__▌_______▀▄▄▀______▐
_█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒███████▓▓█▓▓▓▌__▀▄_______________▄▀
_█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒███▒▒▒▒▒▒▒██▓▓▓▓▓▌___▀▄_________▄▀▀
█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██▒▒▒▒▒▒▒▒▒▒▒▒▒█▓▓▓▓▓▀▄__▀▄▄█▀▀▀
█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██▓▓▓▓██▄▄▄▀
█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒████
█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█
_█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█▒▒▒█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█▄▄▄▄▄
_█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█▒▒▒▒█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒███▒▒▒▒▒▒██▄▄
__█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█▒▒▒▒█▒▒▒▒▒▒▒▒▒▒▒▒███▒▒▒▒▒▒▒▒▒▒▒▒▒█▄
__█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█▒▒▒▒█▒▒▒▒▒▒▒▒▒▒▒█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█
__█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█▒▒▒▒█▒▒▒▒▒▒▒▒▒██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█
___█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█▒▒▒▒█▒▒▒▒▒▒▒▒█▒▒▒▒▒▒▒▒▒▒▒▒▒░░░░▒▒▒▒▒▒▌
____█▒▒▒▒▒▒▒▒▒▒▒▒▒██▒▒▒▒▒▒▒█▒▒▒▒█▒▒▒▒▒▒█▒▒▒▒▒▒▒▒▒░░░░░░░░░░░░░▒▒▌
____█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█████████████▒▒▒▒▒█▒▒▒▒▒▒▒▒░░░░▒▒▒▒▒▒▒▒▒▒▒░▒▌
_____█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█_______▐▒▒▒▒█▒▒▒▒▒▒▒░░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░▌
______█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█________█▒▒█▒▒▒▒▒▒░░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▌
_______█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█________█▒█▒▒▒▒▒▒░░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▌
________█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█________█▒▒▒▒▒▒░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█
_________█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█________█▒▒▒▒░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█
_________█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█________█▒▒▒░░░░░░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒█▀
__________█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█_______█▒░░░▒▒▒▒▒░░░░░░░░▒▒▒█▀▀▀
___________█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█_______█░▒▒▒▒▒▒▒▒▒▒▒▒▒░░░░█▀
____________█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█_______█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█▀
_____________█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█_______█▒▒▒▒▒▒▒▒▒▒▒▒█▀
_____________█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█_______▀▀▀███████▀▀
______________█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█
_______________█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█
________________█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█
_________________█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█
__________________█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██▒█
___________________█▒▒▒▒▒▒▒▒▒▒▒▒▒██▒▒▒▒█
___________________█▒▒▒▒▒▒▒▒████▒▒▒▒▒▒▒█
___________________█████████▒▒▒▒▒▒▒▒▒▒▒█
____________________█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█
____________________█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█
_____________________█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░▌
_____________________█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░▌
______________________█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░▌
_______________________█▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░█
________________________█▒▒▒▒▒▒▒▒▒▒▒░░░█
__________________________██▒▒▒▒▒▒░░░█▀
_____________________________█░░░░░█▀
_______________________________▀▀▀▀









Okay, bye.




**/

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":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"FullTeamWalletUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","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":"WalletUpdated","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"},{"inputs":[],"name":"AntiBotMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"AntiBotRegistered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BotMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CheckQualifiedTokens","outputs":[{"internalType":"uint256","name":"TokensRequired","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FreeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FullTeamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GetContractBalance","outputs":[{"internalType":"uint256","name":"ThisContractBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"hashed","type":"bytes32"}],"name":"LetMeApe","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"PayoutMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PercentageIncrement","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"QualifiedBurnPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"QualifiedBuy","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RandomWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"randomx","type":"uint256"}],"name":"SteadyLads","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"StopAntiBotMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Team_Message","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Telegram","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"Toggle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"yesno","type":"bool"}],"name":"ToggleBotMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Total_Eth_Paid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"TeamMessageString","type":"string"}],"name":"UpdateTeamMessage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"TeleGramLink","type":"string"}],"name":"UpdateTelegram","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"WebsiteString","type":"string"}],"name":"UpdateWebsite","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Wallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Website","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"regwallet","type":"address"}],"name":"getAntiBotRegisteredStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"botwallet","type":"address"}],"name":"getBotWalletStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","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":"oh_my_god","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":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"bot","type":"address"},{"internalType":"bool","name":"truefalse","type":"bool"}],"name":"setBots","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":"tokensForCommunity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[{"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":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateFreeSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateFullTeamWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updatePercentageIncrement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateQualifiedBurnPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_Fee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","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"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"TokenAddress","type":"address"}],"name":"withdrawtoken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6007805461ffff19166101001790556000600d819055600f805462ffffff19169055601960108190556011805460ff19166001179055610ed8601255670de0b6b3a7640000601455600a601555605a60165561070860175560e0604081905260c08390526200006e9262000704565b506040805160208101918290526000908190526200008f91601a9162000704565b506040518060800160405280604a81526020016200611e604a91398051620000c091601b9160209091019062000704565b506040805180820190915260168082527f48652773206368616e67696e6720666c61766f7273210000000000000000000060209092019182526200010791601c9162000704565b50601d805463ffffffff19166301000001179055601f805460ff191660011790553480156200013557600080fd5b506040805180820182526006808252655354524f4e4b60d01b602080840182815285518087019096529285528401528151919291620001779160039162000704565b5080516200018d90600490602084019062000704565b505050620001aa620001a46200053660201b60201c565b6200053a565b737a250d5630b4cf539739df2c5dacb4c659f2488d620001cc8160016200058c565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000217573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023d9190620007aa565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200028b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b19190620007aa565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002ff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003259190620007aa565b6001600160a01b031660a0819052620003409060016200058c565b60a0516200035090600162000606565b6a084595161401484a000000600b819055600e55600a600060046b033b2e3c9fd0803ce800000061271062000387826005620007f2565b62000393919062000814565b600c5560218490556022839055602382905581620003b2848662000837565b620003be919062000837565b602055600980546001600160a01b031990811673bc35247aa90f1a74ae4af2b3a5c30fe832dfa12b179091556008805490911673d85f8ef8d219c111d5c171eb5630dfe2845e072817905562000428620004206005546001600160a01b031690565b60016200065a565b620004353060016200065a565b6200044461dead60016200065a565b620004636200045b6005546001600160a01b031690565b60016200058c565b620004703060016200058c565b6200047f61dead60016200058c565b6001602a6000620004986005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152602a9093528183208054851660019081179091557f4cd689f77827cc1daa8af882f386f3bb4a1440969e00e514a7b412fe9507a7a9805486168217905560a051821684528284208054861682179055608051909116835291208054909216179055506200088f9350505050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6005546001600160a01b03163314620005db5760405162461bcd60e51b815260206004820181905260248201526000805160206200616883398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152602860205260409020805460ff1916911515919091179055565b6001600160a01b0382166000818152602b6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b03163314620006a55760405162461bcd60e51b81526020600482018190526024820152600080516020620061688339815191526044820152606401620005d2565b6001600160a01b038216600081815260276020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b828054620007129062000852565b90600052602060002090601f01602090048101928262000736576000855562000781565b82601f106200075157805160ff191683800117855562000781565b8280016001018555821562000781579182015b828111156200078157825182559160200191906001019062000764565b506200078f92915062000793565b5090565b5b808211156200078f576000815560010162000794565b600060208284031215620007bd57600080fd5b81516001600160a01b0381168114620007d557600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156200080f576200080f620007dc565b500290565b6000826200083257634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156200084d576200084d620007dc565b500190565b600181811c908216806200086757607f821691505b602082108114156200088957634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a0516157cf6200094f600039600081816109d10152818161145f0152818161259b01528181613111015281816131ac015281816131d80152818161378b01528181614a2001528181614ac20152614aee01526000818161075b015281816110de015281816111e90152818161142001528181611a6601528181611b290152818161374d015281816145760152818161467e01528181614df401528181614ead01528181614f0201528181614f7c0152614ff201526157cf6000f3fe6080604052600436106105da5760003560e01c806370a0823111610301578063b73018cc1161019a578063d75f893e116100ec578063f2fde38b11610095578063f8b45b051161006f578063f8b45b051461106c578063fdc9d0f414611082578063fe72b27a1461109757600080fd5b8063f2fde38b14611023578063f637434214611043578063f6d0bf2f1461105957600080fd5b8063dd62ed3e116100c6578063dd62ed3e14610fb2578063e2f4560514610ff8578063e884f2601461100e57600080fd5b8063d75f893e14610f5c578063dab5757514610f7c578063dc176ef014610f9257600080fd5b8063c17b5b8c1161014e578063c8c8ebe411610128578063c8c8ebe414610f11578063d257b34f14610f27578063d40b96a314610f4757600080fd5b8063c17b5b8c14610eb7578063c18bc19514610ed7578063c876d0b914610ef757600080fd5b8063bbc0c7421161017f578063bbc0c74214610e62578063bf6146cd14610e81578063c024666814610e9757600080fd5b8063b73018cc14610e12578063b9b7b50a14610e4257600080fd5b80639a7a23d611610253578063a4c82a0011610207578063b583351b116101e1578063b583351b14610da2578063b62496f514610dc2578063b6c5170e14610df257600080fd5b8063a4c82a0014610d57578063a9059cbb14610d6d578063a9490cb114610d8d57600080fd5b80639fccce32116102385780639fccce3214610d0b578063a0d82dc514610d21578063a457c2d714610d3757600080fd5b80639a7a23d614610cd55780639ec22c0e14610cf557600080fd5b8063848b86e3116102b55780639134ddd21161028f5780639134ddd214610c7f578063924de9b714610ca057806395d89b4114610cc057600080fd5b8063848b86e314610c215780638da5cb5b14610c415780638ea5220f14610c5f57600080fd5b8063730c1888116102e6578063730c188814610bcb5780637571336a14610beb57806379086cb214610c0b57600080fd5b806370a0823114610b80578063715018a614610bb657600080fd5b80632e82f1a0116104735780634bb90f93116103c557806360d48489116103795780636a486a8e116103535780636a486a8e14610b2a5780636ddd171314610b405780636f11197c14610b6057600080fd5b806360d4848914610ab15780636635ffb014610aea57806367b3834814610b0a57600080fd5b80634fbee193116103aa5780634fbee19314610a42578063546a737a14610a7b57806359e900c814610a9157600080fd5b80634bb90f9314610a0d5780634e32ef7514610a2257600080fd5b80633ccfd60b1161042757806349a8373e1161040157806349a8373e146109a957806349bd5a5e146109bf5780634a62bb65146109f357600080fd5b80633ccfd60b14610960578063470ef81a1461097557806348e7ffd41461099457600080fd5b8063313ce56711610458578063313ce5671461090f578063386544861461092b578063395093511461094057600080fd5b80632e82f1a0146108d557806330812439146108ef57600080fd5b8063184c16c51161052c578063203e727e116104e05780632b14ca56116104ba5780632b14ca561461088a5780632c3e486c146108a05780632d570326146108b657600080fd5b8063203e727e1461083457806323b872dd1461085457806327c8f8351461087457600080fd5b80631a8145bb116105115780631a8145bb146107de5780631b6c3604146107f45780631bce6ca21461081457600080fd5b8063184c16c5146107b2578063199ffc72146107c857600080fd5b80630e1b39fb1161058e5780631694505e116105685780631694505e1461074957806318160ddd1461077d5780631816467f1461079257600080fd5b80630e1b39fb146106bb57806310d5de53146106f957806313b2a23e1461072957600080fd5b806305b9974c116105bf57806305b9974c1461063057806306fdde0314610679578063095ea7b31461069b57600080fd5b80630329ea3d146105e657806305566a981461060e57600080fd5b366105e157005b600080fd5b3480156105f257600080fd5b506105fb6110b7565b6040519081526020015b60405180910390f35b34801561061a57600080fd5b5061062e610629366004615187565b6112a6565b005b34801561063c57600080fd5b5061066961064b36600461524f565b6001600160a01b03166000908152602a602052604090205460ff1690565b6040519015158152602001610605565b34801561068557600080fd5b5061068e61131c565b604051610605919061526c565b3480156106a757600080fd5b506106696106b63660046152df565b6113ae565b3480156106c757600080fd5b506007546106e1906201000090046001600160a01b031681565b6040516001600160a01b039091168152602001610605565b34801561070557600080fd5b5061066961071436600461524f565b60286020526000908152604090205460ff1681565b34801561073557600080fd5b5061062e610744366004615319565b6113c4565b34801561075557600080fd5b506106e17f000000000000000000000000000000000000000000000000000000000000000081565b34801561078957600080fd5b506002546105fb565b34801561079e57600080fd5b5061062e6107ad36600461524f565b611564565b3480156107be57600080fd5b506105fb60175481565b3480156107d457600080fd5b506105fb60105481565b3480156107ea57600080fd5b506105fb60255481565b34801561080057600080fd5b506008546106e1906001600160a01b031681565b34801561082057600080fd5b5061062e61082f366004615352565b611633565b34801561084057600080fd5b5061062e61084f366004615352565b611791565b34801561086057600080fd5b5061066961086f36600461536b565b6118ae565b34801561088057600080fd5b506106e161dead81565b34801561089657600080fd5b506105fb60215481565b3480156108ac57600080fd5b506105fb60125481565b3480156108c257600080fd5b5060075461066990610100900460ff1681565b3480156108e157600080fd5b506011546106699060ff1681565b3480156108fb57600080fd5b5061062e61090a366004615352565b61196d565b34801561091b57600080fd5b5060405160128152602001610605565b34801561093757600080fd5b5061068e611c86565b34801561094c57600080fd5b5061066961095b3660046152df565b611d14565b34801561096c57600080fd5b5061062e611d50565b34801561098157600080fd5b50600f5461066990610100900460ff1681565b3480156109a057600080fd5b5061062e611de6565b3480156109b557600080fd5b506105fb60155481565b3480156109cb57600080fd5b506106e17f000000000000000000000000000000000000000000000000000000000000000081565b3480156109ff57600080fd5b50601d546106699060ff1681565b348015610a1957600080fd5b50610669611e6a565b348015610a2e57600080fd5b5061062e610a3d3660046153ac565b611e81565b348015610a4e57600080fd5b50610669610a5d36600461524f565b6001600160a01b031660009081526027602052604090205460ff1690565b348015610a8757600080fd5b506105fb60145481565b348015610a9d57600080fd5b5061062e610aac36600461524f565b611f0c565b348015610abd57600080fd5b50610669610acc36600461524f565b6001600160a01b031660009081526029602052604090205460ff1690565b348015610af657600080fd5b5061062e610b05366004615352565b61200f565b348015610b1657600080fd5b50600a546106e1906001600160a01b031681565b348015610b3657600080fd5b506105fb60205481565b348015610b4c57600080fd5b50601d546106699062010000900460ff1681565b348015610b6c57600080fd5b5061062e610b7b366004615187565b6120bf565b348015610b8c57600080fd5b506105fb610b9b36600461524f565b6001600160a01b031660009081526020819052604090205490565b348015610bc257600080fd5b5061062e61212c565b348015610bd757600080fd5b5061062e610be63660046153c9565b612192565b348015610bf757600080fd5b5061062e610c06366004615319565b612320565b348015610c1757600080fd5b506105fb60165481565b348015610c2d57600080fd5b5061062e610c3c36600461524f565b6123c3565b348015610c4d57600080fd5b506005546001600160a01b03166106e1565b348015610c6b57600080fd5b506009546106e1906001600160a01b031681565b348015610c8b57600080fd5b50601d54610669906301000000900460ff1681565b348015610cac57600080fd5b5061062e610cbb3660046153ac565b61249e565b348015610ccc57600080fd5b5061068e612530565b348015610ce157600080fd5b5061062e610cf0366004615319565b61253f565b348015610d0157600080fd5b506105fb60185481565b348015610d1757600080fd5b506105fb60265481565b348015610d2d57600080fd5b506105fb60235481565b348015610d4357600080fd5b50610669610d523660046152df565b61264b565b348015610d6357600080fd5b506105fb60135481565b348015610d7957600080fd5b50610669610d883660046152df565b6126fc565b348015610d9957600080fd5b5061068e612709565b348015610dae57600080fd5b5061062e610dbd366004615352565b612716565b348015610dce57600080fd5b50610669610ddd36600461524f565b602b6020526000908152604090205460ff1681565b348015610dfe57600080fd5b5061062e610e0d3660046153ac565b612775565b348015610e1e57600080fd5b50610669610e2d36600461524f565b602a6020526000908152604090205460ff1681565b348015610e4e57600080fd5b5061062e610e5d366004615352565b612808565b348015610e6e57600080fd5b50601d5461066990610100900460ff1681565b348015610e8d57600080fd5b506105fb60245481565b348015610ea357600080fd5b5061062e610eb2366004615319565b612867565b348015610ec357600080fd5b5061062e610ed2366004615402565b61293e565b348015610ee357600080fd5b5061062e610ef2366004615352565b612a3c565b348015610f0357600080fd5b50601f546106699060ff1681565b348015610f1d57600080fd5b506105fb600b5481565b348015610f3357600080fd5b50610669610f42366004615352565b612b57565b348015610f5357600080fd5b5061068e612cea565b348015610f6857600080fd5b5061062e610f7736600461524f565b612cf7565b348015610f8857600080fd5b506105fb600d5481565b348015610f9e57600080fd5b5061062e610fad366004615187565b612dc6565b348015610fbe57600080fd5b506105fb610fcd36600461542e565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561100457600080fd5b506105fb600c5481565b34801561101a57600080fd5b50610669612e33565b34801561102f57600080fd5b5061062e61103e36600461524f565b612ebe565b34801561104f57600080fd5b506105fb60225481565b34801561106557600080fd5b50476105fb565b34801561107857600080fd5b506105fb600e5481565b34801561108e57600080fd5b5061068e612f9d565b3480156110a357600080fd5b506106696110b2366004615352565b612faa565b604080516002808252606082018352600092839291906020830190803683370190505090507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561113a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115e919061545c565b8160018151811061117157611171615479565b60200260200101906001600160a01b031690816001600160a01b03168152505030816000815181106111a5576111a5615479565b6001600160a01b0392831660209182029290920101526014546040517f1f00ca740000000000000000000000000000000000000000000000000000000081526000927f00000000000000000000000000000000000000000000000000000000000000001691631f00ca749161121f919086906004016154ec565b600060405180830381865afa15801561123c573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611282919081019061550d565b60008151811061129457611294615479565b60200260200101519050809250505090565b6005546001600160a01b031633146113055760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b805161131890601a906020840190615070565b5050565b60606003805461132b906155b3565b80601f0160208091040260200160405190810160405280929190818152602001828054611357906155b3565b80156113a45780601f10611379576101008083540402835291602001916113a4565b820191906000526020600020905b81548152906001019060200180831161138757829003601f168201915b5050505050905090565b60006113bb338484613280565b50600192915050565b6005546001600160a01b0316331461141e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561145d57600080fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561149c57600080fd5b6001600160a01b0382163014156114b257600080fd5b6001600160a01b03821661dead14156114ca57600080fd5b6009546001600160a01b03838116911614156114e557600080fd5b6008546001600160a01b038381169116141561150057600080fd5b6005546001600160a01b038381169116141561151b57600080fd5b6001600160a01b0391909116600090815260296020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b6005546001600160a01b031633146115be5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b6009546040516001600160a01b03918216918316907f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74390600090a3600980547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60065442116116845760405162461bcd60e51b815260206004820152601d60248201527f576520617265206e6f74206c6976652e20446f6e27742063686561742e00000060448201526064016112fc565b600754610100900460ff166117015760405162461bcd60e51b815260206004820152602160248201527f596f7520646f6e2774206e65656420746f20646f207468697320616e796d6f7260448201527f650000000000000000000000000000000000000000000000000000000000000060648201526084016112fc565b6040517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b1660208201526000906034016040516020818303038152906040528051906020012090508181141561131857336000908152602a6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555050565b6005546001600160a01b031633146117eb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b670de0b6b3a76400006103e861180060025490565b61180b906005615636565b61181591906156a2565b61181f91906156a2565b811015611896576040805162461bcd60e51b81526020600482015260248101919091527f4e6f207363616d6d696e672120596f752063616e6e6f7420736574206d61785460448201527f72616e73616374696f6e416d6f756e74206c6f776572207468616e20302e352560648201526084016112fc565b6118a881670de0b6b3a7640000615636565b600b5550565b60006118bb8484846133d8565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156119555760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084016112fc565b6119628533858403613280565b506001949350505050565b6005546001600160a01b031633146119c75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b600f5462010000900460ff1615611a205760405162461bcd60e51b815260206004820152601960248201527f596f7520616c7265616479206c61756e636865642062726f2e0000000000000060448201526064016112fc565b611a36306b033b2e3c9fd0803ce80000006140ed565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166004820152701d204a912db6d79f3f3fb37b71c71c71c76024820152309063095ea7b3906044016020604051808303816000875af1158015611acc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af091906156b6565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482018190526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163f305d71991479181906370a0823190602401602060405180830381865afa158015611b7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b9e91906156d3565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b039092166004830152602482015260006044820181905260648201523360848201526a0930de8a4f1dde8b1c71c760a482015260c40160606040518083038185885af1158015611c25573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611c4a91906156ec565b505050611c56816141cc565b50600f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff1662010000179055565b601c8054611c93906155b3565b80601f0160208091040260200160405190810160405280929190818152602001828054611cbf906155b3565b8015611d0c5780601f10611ce157610100808354040283529160200191611d0c565b820191906000526020600020905b815481529060010190602001808311611cef57829003601f168201915b505050505081565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916113bb918590611d4b90869061571a565b613280565b6005546001600160a01b03163314611daa5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b6005546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611de3573d6000803e3d6000fd5b50565b6005546001600160a01b03163314611e405760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b600780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60006014544710611e7b5750600190565b50600090565b6005546001600160a01b03163314611edb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b600f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b6005546001600160a01b03163314611f665760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b806001600160a01b031663a9059cbb611f876005546001600160a01b031690565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201524760248201526044016020604051808303816000875af1158015611feb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131891906156b6565b6005546001600160a01b031633146120695760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b80606414156120ba5760405162461bcd60e51b815260206004820152601160248201527f446f6e2774206275726e20697420616c6c00000000000000000000000000000060448201526064016112fc565b601655565b6005546001600160a01b031633146121195760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b8051611318906019906020840190615070565b6005546001600160a01b031633146121865760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b612190600061423f565b565b6005546001600160a01b031633146121ec5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b6102588310156122645760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860448201527f616e206576657279203130206d696e757465730000000000000000000000000060648201526084016112fc565b6103e88211158015612274575060015b6122e65760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201527f747765656e20302520616e64203130250000000000000000000000000000000060648201526084016112fc565b601292909255601055601180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b6005546001600160a01b0316331461237a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b6001600160a01b0391909116600090815260286020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b6005546001600160a01b0316331461241d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b6007546040516001600160a01b03620100009092048216918316907f0f37c6733428a3a65d46b7f1853a5ce4bfa3cf92d25322507a50bf23a0b5a0a890600090a3600780546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b6005546001600160a01b031633146124f85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b601d805491151562010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b60606004805461132b906155b3565b6005546001600160a01b031633146125995760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156126415760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b657250616972730000000000000060648201526084016112fc565b61131882826142a9565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156126e55760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016112fc565b6126f23385858403613280565b5060019392505050565b60006113bb3384846133d8565b601a8054611c93906155b3565b6005546001600160a01b031633146127705760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b601555565b6005546001600160a01b031633146127cf5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b601d80549115156301000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff909216919091179055565b6005546001600160a01b031633146128625760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b601455565b6005546001600160a01b031633146128c15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b6001600160a01b03821660008181526027602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146129985760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b602183905560228290556023819055806129b2838561571a565b6129bc919061571a565b6020819055600f1015612a375760405162461bcd60e51b815260206004820152603460248201527f4d757374206b6565702073656c6c206665657320617420313525206f72206c6560448201527f7373202d20646f6e74206265206772656564792100000000000000000000000060648201526084016112fc565b505050565b6005546001600160a01b03163314612a965760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b670de0b6b3a76400006103e8612aab60025490565b612ab6906005615636565b612ac091906156a2565b612aca91906156a2565b811015612b3f5760405162461bcd60e51b815260206004820152603260248201527f536f7272792062757420796f752063616e6e6f7420736574206d617857616c6c60448201527f6574206c6f776572207468616e20302e3525000000000000000000000000000060648201526084016112fc565b612b5181670de0b6b3a7640000615636565b600e5550565b6005546000906001600160a01b03163314612bb45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b620186a0612bc160025490565b612bcc906001615636565b612bd691906156a2565b821015612c4b5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527f20302e3030312520746f74616c20737570706c792e000000000000000000000060648201526084016112fc565b6103e8612c5760025490565b612c62906005615636565b612c6c91906156a2565b821115612ce15760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160448201527f6e20302e352520746f74616c20737570706c792e00000000000000000000000060648201526084016112fc565b50600c55600190565b601b8054611c93906155b3565b6005546001600160a01b03163314612d515760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b6009546040516001600160a01b03918216918316907f537cbf0cab5665d2f550ee8553235e3d3359a9347e5693850973090f655a95f290600090a3600880547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6005546001600160a01b03163314612e205760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b805161131890601b906020840190615070565b6005546000906001600160a01b03163314612e905760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b50601f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600190565b6005546001600160a01b03163314612f185760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b6001600160a01b038116612f945760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016112fc565b611de38161423f565b60198054611c93906155b3565b6005546000906001600160a01b031633146130075760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b601754601854613017919061571a565b42116130655760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e69736860448201526064016112fc565b6103e88211156130dd5760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60448201527f6b656e7320696e204c500000000000000000000000000000000000000000000060648201526084016112fc565b426018556040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016600482015260009030906370a0823190602401602060405180830381865afa158015613161573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061318591906156d3565b9050600061319f612710613199848761431b565b9061432e565b905080156131d4576131d47f000000000000000000000000000000000000000000000000000000000000000061dead8361433a565b60007f00000000000000000000000000000000000000000000000000000000000000009050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561323457600080fd5b505af1158015613248573d6000803e3d6000fd5b50506040517f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb925060009150a1506001949350505050565b6001600160a01b0383166132fb5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016112fc565b6001600160a01b0382166133775760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016112fc565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166134545760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016112fc565b6001600160a01b0382166134d05760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016112fc565b806134e157612a378383600061433a565b6005546001600160a01b0384811691161480159061350d57506005546001600160a01b03838116911614155b801561352157506001600160a01b03821615155b801561353857506001600160a01b03821661dead14155b801561355f575060055474010000000000000000000000000000000000000000900460ff16155b15613c0657601d54610100900460ff166135fe576001600160a01b03831660009081526027602052604090205460ff16806135b257506001600160a01b03821660009081526027602052604090205460ff165b6135fe5760405162461bcd60e51b815260206004820152601660248201527f54726164696e67206973206e6f74206163746976652e0000000000000000000060448201526064016112fc565b6001600160a01b03831660009081526029602052604090205460ff168061363d57506001600160a01b03821660009081526029602052604090205460ff165b156136945760075460ff166136945760405162461bcd60e51b815260206004820152601d60248201527f476f206d616b652073616e6477696368657320656c736577686572652e00000060448201526064016112fc565b6001600160a01b0383166000908152602a602052604090205460ff1615806136d557506001600160a01b0382166000908152602a602052604090205460ff16155b1561373257600754610100900460ff16156137325760405162461bcd60e51b815260206004820152601860248201527f46616972206c61756e63682c206e6f20736e6970696e672e000000000000000060448201526064016112fc565b6005546001600160a01b0383811691161480159061378257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b80156137c057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b1561385b57326000908152601e602052604090205443116138485760405162461bcd60e51b8152602060048201526024808201527f4f6e6c79206f6e652070757263686173652070657220626c6f636b20616c6c6f60448201527f7765642e0000000000000000000000000000000000000000000000000000000060648201526084016112fc565b326000908152601e602052604090204390555b6001600160a01b0383166000908152602b602052604090205460ff16801561389c57506001600160a01b03821660009081526028602052604090205460ff16155b156139f557600b548111156139195760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527f6d61785472616e73616374696f6e416d6f756e742e000000000000000000000060648201526084016112fc565b600e546001600160a01b03831660009081526020819052604090205461393f908361571a565b111561398d5760405162461bcd60e51b815260206004820152601360248201527f4d61782077616c6c65742065786365656465640000000000000000000000000060448201526064016112fc565b60065442116139de5760405162461bcd60e51b815260206004820152601060248201527f50617469656e6365206973206b65792e0000000000000000000000000000000060448201526064016112fc565b60145447106139f0576139f081614553565b613b47565b6001600160a01b0382166000908152602b602052604090205460ff168015613a3657506001600160a01b03831660009081526028602052604090205460ff16155b15613ab357600b548111156139f05760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201527f206d61785472616e73616374696f6e416d6f756e742e0000000000000000000060648201526084016112fc565b6001600160a01b03821660009081526028602052604090205460ff16613b4757600e546001600160a01b038316600090815260208190526040902054613af9908361571a565b1115613b475760405162461bcd60e51b815260206004820152601360248201527f4d61782077616c6c65742065786365656465640000000000000000000000000060448201526064016112fc565b6001600160a01b0382166000908152602b602052604090205460ff168015613b8857506001600160a01b03831660009081526028602052604090205460ff16155b8015613b9d5750601d546301000000900460ff165b15613c0657326000908152601e60205260409020544311613c0657466001811415613c04576001600160a01b038416600090815260296020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555b505b30600090815260208190526040902054600c54600f54908210159060ff16613c6757600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673d85f8ef8d219c111d5c171eb5630dfe2845e07281790555b808015613c7c5750601d5462010000900460ff165b8015613ca3575060055474010000000000000000000000000000000000000000900460ff16155b8015613cc857506001600160a01b0385166000908152602b602052604090205460ff16155b8015613ced57506001600160a01b03851660009081526027602052604090205460ff16155b8015613d1257506001600160a01b03841660009081526027602052604090205460ff16155b8015613d265750600f54610100900460ff16155b15613d9b57600580547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055613d7261477d565b600580547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690555b60055474010000000000000000000000000000000000000000900460ff16158015613dde57506001600160a01b0384166000908152602b602052604090205460ff165b8015613dec575060115460ff165b8015613e075750601254601354613e03919061571a565b4210155b8015613e2c57506001600160a01b03851660009081526027602052604090205460ff16155b8015613e405750600f54610100900460ff16155b15613e4f57613e4d6149ec565b505b6005546001600160a01b03861660009081526027602052604090205460ff74010000000000000000000000000000000000000000909204821615911680613eae57506001600160a01b03851660009081526027602052604090205460ff165b80613ec05750600f54610100900460ff165b15613ec9575060005b60008115613fe4576001600160a01b0386166000908152602b602052604090205460ff168015613efb57506000602054115b15613fb357613f1a60646131996020548861431b90919063ffffffff16565b905060205460225482613f2d9190615636565b613f3791906156a2565b60256000828254613f48919061571a565b9091555050602054602354613f5d9083615636565b613f6791906156a2565b60266000828254613f78919061571a565b9091555050602054602154613f8d9083615636565b613f9791906156a2565b60246000828254613fa8919061571a565b90915550613fc69050565b6001600160a01b038716600052602b6020525b8015613fd757613fd787308361433a565b613fe18186615732565b94505b600f54610100900460ff16156140b1576000613ffe6110b7565b9050600061401c60646131996016548561431b90919063ffffffff16565b90506140283382614b95565b61403c89896140378a85614d1a565b61433a565b60145460405189916001600160a01b0383169181156108fc0291906000818181858888f15050601554601454859450600093506140819250606491613199919061431b565b905080601454614091919061571a565b6014819055600d546140a3919061571a565b600d55506140bc9350505050565b6140bc87878761433a565b5050600f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050505050565b6001600160a01b0382166141435760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016112fc565b8060026000828254614155919061571a565b90915550506001600160a01b0382166000908152602081905260408120805483929061418290849061571a565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b60006141d782614d26565b905060058110156141f0576141ed81600561571a565b90505b426141fc826001615636565b614206908261571a565b6006555050601d80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff16620101001790555042601355565b600580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000818152602b602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b60006143278284615636565b9392505050565b600061432782846156a2565b6001600160a01b0383166143b65760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016112fc565b6001600160a01b0382166144325760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016112fc565b6001600160a01b038316600090815260208190526040902054818110156144c15760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016112fc565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906144f890849061571a565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161454491815260200190565b60405180910390a35b50505050565b6040805160028082526060820183526000926020830190803683370190505090507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156145d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145f6919061545c565b8160008151811061460957614609615479565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061463d5761463d615479565b6001600160a01b0392831660209182029290920101526040517f1f00ca740000000000000000000000000000000000000000000000000000000081526000917f00000000000000000000000000000000000000000000000000000000000000001690631f00ca74906146b590869086906004016154ec565b600060405180830381865afa1580156146d2573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052614718919081019061550d565b60008151811061472a5761472a615479565b602002602001015190506000479050601454821061454d57601454811061454d57600f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905550505050565b30600090815260208190526040812054905060006026546024546025546147a4919061571a565b6147ae919061571a565b905060008215806147bd575081155b156147c757505050565b600c546147d5906014615636565b8311156147ed57600c546147ea906014615636565b92505b6000600283602554866148009190615636565b61480a91906156a2565b61481491906156a2565b905060006148228583614d1a565b90504761482e82614d9d565b600061483a4783614d1a565b90506000614857876131996024548561431b90919063ffffffff16565b90506000614874886131996026548661431b90919063ffffffff16565b90506000816148838486615732565b61488d9190615732565b60006025819055602481905560265590506148a9600242615749565b6148ec57600954600a80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03909216919091179055614927565b600854600a80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039092169190911790555b600a546040516001600160a01b03909116908390600081818185875af1925050503d8060008114614974576040519150601f19603f3d011682016040523d82523d6000602084013e614979565b606091505b5090985050861580159061498d5750600081115b156149e05761499c8782614f76565b602554604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b50505050505050505050565b426013556040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166004820152600090819030906370a0823190602401602060405180830381865afa158015614a72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a9691906156d3565b90506000614ab56127106131996010548561431b90919063ffffffff16565b90508015614aea57614aea7f000000000000000000000000000000000000000000000000000000000000000061dead8361433a565b60007f00000000000000000000000000000000000000000000000000000000000000009050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015614b4a57600080fd5b505af1158015614b5e573d6000803e3d6000fd5b50506040517f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d925060009150a16001935050505090565b6001600160a01b038216614c115760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016112fc565b6001600160a01b03821660009081526020819052604090205481811015614ca05760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f636500000000000000000000000000000000000000000000000000000000000060648201526084016112fc565b6001600160a01b0383166000908152602081905260408120838303905560028054849290614ccf908490615732565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b60006143278284615732565b600081424433604051602001614d7493929190928352602083019190915260601b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016604082015260540190565b6040516020818303038152906040528051906020012060001c614d979190615749565b92915050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110614dd257614dd2615479565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614e50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614e74919061545c565b81600181518110614e8757614e87615479565b60200260200101906001600160a01b031690816001600160a01b031681525050614ed2307f000000000000000000000000000000000000000000000000000000000000000084613280565b6040517f791ac9470000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790614f4090859060009086903090429060040161575d565b600060405180830381600087803b158015614f5a57600080fd5b505af1158015614f6e573d6000803e3d6000fd5b505050505050565b614fa1307f000000000000000000000000000000000000000000000000000000000000000084613280565b6040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101839052600060448201819052606482015261dead60848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015615044573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061506991906156ec565b5050505050565b82805461507c906155b3565b90600052602060002090601f01602090048101928261509e57600085556150e4565b82601f106150b757805160ff19168380011785556150e4565b828001600101855582156150e4579182015b828111156150e45782518255916020019190600101906150c9565b506150f09291506150f4565b5090565b5b808211156150f057600081556001016150f5565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561517f5761517f615109565b604052919050565b6000602080838503121561519a57600080fd5b823567ffffffffffffffff808211156151b257600080fd5b818501915085601f8301126151c657600080fd5b8135818111156151d8576151d8615109565b615208847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601615138565b9150808252868482850101111561521e57600080fd5b8084840185840137600090820190930192909252509392505050565b6001600160a01b0381168114611de357600080fd5b60006020828403121561526157600080fd5b81356143278161523a565b600060208083528351808285015260005b818110156152995785810183015185820160400152820161527d565b818111156152ab576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600080604083850312156152f257600080fd5b82356152fd8161523a565b946020939093013593505050565b8015158114611de357600080fd5b6000806040838503121561532c57600080fd5b82356153378161523a565b915060208301356153478161530b565b809150509250929050565b60006020828403121561536457600080fd5b5035919050565b60008060006060848603121561538057600080fd5b833561538b8161523a565b9250602084013561539b8161523a565b929592945050506040919091013590565b6000602082840312156153be57600080fd5b81356143278161530b565b6000806000606084860312156153de57600080fd5b833592506020840135915060408401356153f78161530b565b809150509250925092565b60008060006060848603121561541757600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561544157600080fd5b823561544c8161523a565b915060208301356153478161523a565b60006020828403121561546e57600080fd5b81516143278161523a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081518084526020808501945080840160005b838110156154e15781516001600160a01b0316875295820195908201906001016154bc565b509495945050505050565b82815260406020820152600061550560408301846154a8565b949350505050565b6000602080838503121561552057600080fd5b825167ffffffffffffffff8082111561553857600080fd5b818501915085601f83011261554c57600080fd5b81518181111561555e5761555e615109565b8060051b915061556f848301615138565b818152918301840191848101908884111561558957600080fd5b938501935b838510156155a75784518252938501939085019061558e565b98975050505050505050565b600181811c908216806155c757607f821691505b60208210811415615601577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561566e5761566e615607565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826156b1576156b1615673565b500490565b6000602082840312156156c857600080fd5b81516143278161530b565b6000602082840312156156e557600080fd5b5051919050565b60008060006060848603121561570157600080fd5b8351925060208401519150604084015190509250925092565b6000821982111561572d5761572d615607565b500190565b60008282101561574457615744615607565b500390565b60008261575857615758615673565b500690565b85815284602082015260a06040820152600061577c60a08301866154a8565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220b0fbffe7e14c098728711f006928e875a06763eb38d552b533ed0e9ad20960b264736f6c634300080a00334966207765206861766520616e797468696e6720696d706f7274616e7420746f207361792c20746865207465616d2077696c6c2075706461746520796f752072696768742068657265214f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x6080604052600436106105da5760003560e01c806370a0823111610301578063b73018cc1161019a578063d75f893e116100ec578063f2fde38b11610095578063f8b45b051161006f578063f8b45b051461106c578063fdc9d0f414611082578063fe72b27a1461109757600080fd5b8063f2fde38b14611023578063f637434214611043578063f6d0bf2f1461105957600080fd5b8063dd62ed3e116100c6578063dd62ed3e14610fb2578063e2f4560514610ff8578063e884f2601461100e57600080fd5b8063d75f893e14610f5c578063dab5757514610f7c578063dc176ef014610f9257600080fd5b8063c17b5b8c1161014e578063c8c8ebe411610128578063c8c8ebe414610f11578063d257b34f14610f27578063d40b96a314610f4757600080fd5b8063c17b5b8c14610eb7578063c18bc19514610ed7578063c876d0b914610ef757600080fd5b8063bbc0c7421161017f578063bbc0c74214610e62578063bf6146cd14610e81578063c024666814610e9757600080fd5b8063b73018cc14610e12578063b9b7b50a14610e4257600080fd5b80639a7a23d611610253578063a4c82a0011610207578063b583351b116101e1578063b583351b14610da2578063b62496f514610dc2578063b6c5170e14610df257600080fd5b8063a4c82a0014610d57578063a9059cbb14610d6d578063a9490cb114610d8d57600080fd5b80639fccce32116102385780639fccce3214610d0b578063a0d82dc514610d21578063a457c2d714610d3757600080fd5b80639a7a23d614610cd55780639ec22c0e14610cf557600080fd5b8063848b86e3116102b55780639134ddd21161028f5780639134ddd214610c7f578063924de9b714610ca057806395d89b4114610cc057600080fd5b8063848b86e314610c215780638da5cb5b14610c415780638ea5220f14610c5f57600080fd5b8063730c1888116102e6578063730c188814610bcb5780637571336a14610beb57806379086cb214610c0b57600080fd5b806370a0823114610b80578063715018a614610bb657600080fd5b80632e82f1a0116104735780634bb90f93116103c557806360d48489116103795780636a486a8e116103535780636a486a8e14610b2a5780636ddd171314610b405780636f11197c14610b6057600080fd5b806360d4848914610ab15780636635ffb014610aea57806367b3834814610b0a57600080fd5b80634fbee193116103aa5780634fbee19314610a42578063546a737a14610a7b57806359e900c814610a9157600080fd5b80634bb90f9314610a0d5780634e32ef7514610a2257600080fd5b80633ccfd60b1161042757806349a8373e1161040157806349a8373e146109a957806349bd5a5e146109bf5780634a62bb65146109f357600080fd5b80633ccfd60b14610960578063470ef81a1461097557806348e7ffd41461099457600080fd5b8063313ce56711610458578063313ce5671461090f578063386544861461092b578063395093511461094057600080fd5b80632e82f1a0146108d557806330812439146108ef57600080fd5b8063184c16c51161052c578063203e727e116104e05780632b14ca56116104ba5780632b14ca561461088a5780632c3e486c146108a05780632d570326146108b657600080fd5b8063203e727e1461083457806323b872dd1461085457806327c8f8351461087457600080fd5b80631a8145bb116105115780631a8145bb146107de5780631b6c3604146107f45780631bce6ca21461081457600080fd5b8063184c16c5146107b2578063199ffc72146107c857600080fd5b80630e1b39fb1161058e5780631694505e116105685780631694505e1461074957806318160ddd1461077d5780631816467f1461079257600080fd5b80630e1b39fb146106bb57806310d5de53146106f957806313b2a23e1461072957600080fd5b806305b9974c116105bf57806305b9974c1461063057806306fdde0314610679578063095ea7b31461069b57600080fd5b80630329ea3d146105e657806305566a981461060e57600080fd5b366105e157005b600080fd5b3480156105f257600080fd5b506105fb6110b7565b6040519081526020015b60405180910390f35b34801561061a57600080fd5b5061062e610629366004615187565b6112a6565b005b34801561063c57600080fd5b5061066961064b36600461524f565b6001600160a01b03166000908152602a602052604090205460ff1690565b6040519015158152602001610605565b34801561068557600080fd5b5061068e61131c565b604051610605919061526c565b3480156106a757600080fd5b506106696106b63660046152df565b6113ae565b3480156106c757600080fd5b506007546106e1906201000090046001600160a01b031681565b6040516001600160a01b039091168152602001610605565b34801561070557600080fd5b5061066961071436600461524f565b60286020526000908152604090205460ff1681565b34801561073557600080fd5b5061062e610744366004615319565b6113c4565b34801561075557600080fd5b506106e17f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b34801561078957600080fd5b506002546105fb565b34801561079e57600080fd5b5061062e6107ad36600461524f565b611564565b3480156107be57600080fd5b506105fb60175481565b3480156107d457600080fd5b506105fb60105481565b3480156107ea57600080fd5b506105fb60255481565b34801561080057600080fd5b506008546106e1906001600160a01b031681565b34801561082057600080fd5b5061062e61082f366004615352565b611633565b34801561084057600080fd5b5061062e61084f366004615352565b611791565b34801561086057600080fd5b5061066961086f36600461536b565b6118ae565b34801561088057600080fd5b506106e161dead81565b34801561089657600080fd5b506105fb60215481565b3480156108ac57600080fd5b506105fb60125481565b3480156108c257600080fd5b5060075461066990610100900460ff1681565b3480156108e157600080fd5b506011546106699060ff1681565b3480156108fb57600080fd5b5061062e61090a366004615352565b61196d565b34801561091b57600080fd5b5060405160128152602001610605565b34801561093757600080fd5b5061068e611c86565b34801561094c57600080fd5b5061066961095b3660046152df565b611d14565b34801561096c57600080fd5b5061062e611d50565b34801561098157600080fd5b50600f5461066990610100900460ff1681565b3480156109a057600080fd5b5061062e611de6565b3480156109b557600080fd5b506105fb60155481565b3480156109cb57600080fd5b506106e17f000000000000000000000000f3ea7574564f5f433f6abccbfef6f96993bb756f81565b3480156109ff57600080fd5b50601d546106699060ff1681565b348015610a1957600080fd5b50610669611e6a565b348015610a2e57600080fd5b5061062e610a3d3660046153ac565b611e81565b348015610a4e57600080fd5b50610669610a5d36600461524f565b6001600160a01b031660009081526027602052604090205460ff1690565b348015610a8757600080fd5b506105fb60145481565b348015610a9d57600080fd5b5061062e610aac36600461524f565b611f0c565b348015610abd57600080fd5b50610669610acc36600461524f565b6001600160a01b031660009081526029602052604090205460ff1690565b348015610af657600080fd5b5061062e610b05366004615352565b61200f565b348015610b1657600080fd5b50600a546106e1906001600160a01b031681565b348015610b3657600080fd5b506105fb60205481565b348015610b4c57600080fd5b50601d546106699062010000900460ff1681565b348015610b6c57600080fd5b5061062e610b7b366004615187565b6120bf565b348015610b8c57600080fd5b506105fb610b9b36600461524f565b6001600160a01b031660009081526020819052604090205490565b348015610bc257600080fd5b5061062e61212c565b348015610bd757600080fd5b5061062e610be63660046153c9565b612192565b348015610bf757600080fd5b5061062e610c06366004615319565b612320565b348015610c1757600080fd5b506105fb60165481565b348015610c2d57600080fd5b5061062e610c3c36600461524f565b6123c3565b348015610c4d57600080fd5b506005546001600160a01b03166106e1565b348015610c6b57600080fd5b506009546106e1906001600160a01b031681565b348015610c8b57600080fd5b50601d54610669906301000000900460ff1681565b348015610cac57600080fd5b5061062e610cbb3660046153ac565b61249e565b348015610ccc57600080fd5b5061068e612530565b348015610ce157600080fd5b5061062e610cf0366004615319565b61253f565b348015610d0157600080fd5b506105fb60185481565b348015610d1757600080fd5b506105fb60265481565b348015610d2d57600080fd5b506105fb60235481565b348015610d4357600080fd5b50610669610d523660046152df565b61264b565b348015610d6357600080fd5b506105fb60135481565b348015610d7957600080fd5b50610669610d883660046152df565b6126fc565b348015610d9957600080fd5b5061068e612709565b348015610dae57600080fd5b5061062e610dbd366004615352565b612716565b348015610dce57600080fd5b50610669610ddd36600461524f565b602b6020526000908152604090205460ff1681565b348015610dfe57600080fd5b5061062e610e0d3660046153ac565b612775565b348015610e1e57600080fd5b50610669610e2d36600461524f565b602a6020526000908152604090205460ff1681565b348015610e4e57600080fd5b5061062e610e5d366004615352565b612808565b348015610e6e57600080fd5b50601d5461066990610100900460ff1681565b348015610e8d57600080fd5b506105fb60245481565b348015610ea357600080fd5b5061062e610eb2366004615319565b612867565b348015610ec357600080fd5b5061062e610ed2366004615402565b61293e565b348015610ee357600080fd5b5061062e610ef2366004615352565b612a3c565b348015610f0357600080fd5b50601f546106699060ff1681565b348015610f1d57600080fd5b506105fb600b5481565b348015610f3357600080fd5b50610669610f42366004615352565b612b57565b348015610f5357600080fd5b5061068e612cea565b348015610f6857600080fd5b5061062e610f7736600461524f565b612cf7565b348015610f8857600080fd5b506105fb600d5481565b348015610f9e57600080fd5b5061062e610fad366004615187565b612dc6565b348015610fbe57600080fd5b506105fb610fcd36600461542e565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561100457600080fd5b506105fb600c5481565b34801561101a57600080fd5b50610669612e33565b34801561102f57600080fd5b5061062e61103e36600461524f565b612ebe565b34801561104f57600080fd5b506105fb60225481565b34801561106557600080fd5b50476105fb565b34801561107857600080fd5b506105fb600e5481565b34801561108e57600080fd5b5061068e612f9d565b3480156110a357600080fd5b506106696110b2366004615352565b612faa565b604080516002808252606082018352600092839291906020830190803683370190505090507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561113a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115e919061545c565b8160018151811061117157611171615479565b60200260200101906001600160a01b031690816001600160a01b03168152505030816000815181106111a5576111a5615479565b6001600160a01b0392831660209182029290920101526014546040517f1f00ca740000000000000000000000000000000000000000000000000000000081526000927f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d1691631f00ca749161121f919086906004016154ec565b600060405180830381865afa15801561123c573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611282919081019061550d565b60008151811061129457611294615479565b60200260200101519050809250505090565b6005546001600160a01b031633146113055760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b805161131890601a906020840190615070565b5050565b60606003805461132b906155b3565b80601f0160208091040260200160405190810160405280929190818152602001828054611357906155b3565b80156113a45780601f10611379576101008083540402835291602001916113a4565b820191906000526020600020905b81548152906001019060200180831161138757829003601f168201915b5050505050905090565b60006113bb338484613280565b50600192915050565b6005546001600160a01b0316331461141e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b0316141561145d57600080fd5b7f000000000000000000000000f3ea7574564f5f433f6abccbfef6f96993bb756f6001600160a01b0316826001600160a01b0316141561149c57600080fd5b6001600160a01b0382163014156114b257600080fd5b6001600160a01b03821661dead14156114ca57600080fd5b6009546001600160a01b03838116911614156114e557600080fd5b6008546001600160a01b038381169116141561150057600080fd5b6005546001600160a01b038381169116141561151b57600080fd5b6001600160a01b0391909116600090815260296020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b6005546001600160a01b031633146115be5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b6009546040516001600160a01b03918216918316907f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74390600090a3600980547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60065442116116845760405162461bcd60e51b815260206004820152601d60248201527f576520617265206e6f74206c6976652e20446f6e27742063686561742e00000060448201526064016112fc565b600754610100900460ff166117015760405162461bcd60e51b815260206004820152602160248201527f596f7520646f6e2774206e65656420746f20646f207468697320616e796d6f7260448201527f650000000000000000000000000000000000000000000000000000000000000060648201526084016112fc565b6040517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b1660208201526000906034016040516020818303038152906040528051906020012090508181141561131857336000908152602a6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555050565b6005546001600160a01b031633146117eb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b670de0b6b3a76400006103e861180060025490565b61180b906005615636565b61181591906156a2565b61181f91906156a2565b811015611896576040805162461bcd60e51b81526020600482015260248101919091527f4e6f207363616d6d696e672120596f752063616e6e6f7420736574206d61785460448201527f72616e73616374696f6e416d6f756e74206c6f776572207468616e20302e352560648201526084016112fc565b6118a881670de0b6b3a7640000615636565b600b5550565b60006118bb8484846133d8565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156119555760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084016112fc565b6119628533858403613280565b506001949350505050565b6005546001600160a01b031633146119c75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b600f5462010000900460ff1615611a205760405162461bcd60e51b815260206004820152601960248201527f596f7520616c7265616479206c61756e636865642062726f2e0000000000000060448201526064016112fc565b611a36306b033b2e3c9fd0803ce80000006140ed565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d166004820152701d204a912db6d79f3f3fb37b71c71c71c76024820152309063095ea7b3906044016020604051808303816000875af1158015611acc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af091906156b6565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482018190526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169163f305d71991479181906370a0823190602401602060405180830381865afa158015611b7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b9e91906156d3565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b039092166004830152602482015260006044820181905260648201523360848201526a0930de8a4f1dde8b1c71c760a482015260c40160606040518083038185885af1158015611c25573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611c4a91906156ec565b505050611c56816141cc565b50600f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff1662010000179055565b601c8054611c93906155b3565b80601f0160208091040260200160405190810160405280929190818152602001828054611cbf906155b3565b8015611d0c5780601f10611ce157610100808354040283529160200191611d0c565b820191906000526020600020905b815481529060010190602001808311611cef57829003601f168201915b505050505081565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916113bb918590611d4b90869061571a565b613280565b6005546001600160a01b03163314611daa5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b6005546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611de3573d6000803e3d6000fd5b50565b6005546001600160a01b03163314611e405760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b600780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60006014544710611e7b5750600190565b50600090565b6005546001600160a01b03163314611edb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b600f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b6005546001600160a01b03163314611f665760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b806001600160a01b031663a9059cbb611f876005546001600160a01b031690565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201524760248201526044016020604051808303816000875af1158015611feb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131891906156b6565b6005546001600160a01b031633146120695760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b80606414156120ba5760405162461bcd60e51b815260206004820152601160248201527f446f6e2774206275726e20697420616c6c00000000000000000000000000000060448201526064016112fc565b601655565b6005546001600160a01b031633146121195760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b8051611318906019906020840190615070565b6005546001600160a01b031633146121865760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b612190600061423f565b565b6005546001600160a01b031633146121ec5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b6102588310156122645760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860448201527f616e206576657279203130206d696e757465730000000000000000000000000060648201526084016112fc565b6103e88211158015612274575060015b6122e65760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201527f747765656e20302520616e64203130250000000000000000000000000000000060648201526084016112fc565b601292909255601055601180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b6005546001600160a01b0316331461237a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b6001600160a01b0391909116600090815260286020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b6005546001600160a01b0316331461241d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b6007546040516001600160a01b03620100009092048216918316907f0f37c6733428a3a65d46b7f1853a5ce4bfa3cf92d25322507a50bf23a0b5a0a890600090a3600780546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b6005546001600160a01b031633146124f85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b601d805491151562010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b60606004805461132b906155b3565b6005546001600160a01b031633146125995760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b7f000000000000000000000000f3ea7574564f5f433f6abccbfef6f96993bb756f6001600160a01b0316826001600160a01b031614156126415760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b657250616972730000000000000060648201526084016112fc565b61131882826142a9565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156126e55760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016112fc565b6126f23385858403613280565b5060019392505050565b60006113bb3384846133d8565b601a8054611c93906155b3565b6005546001600160a01b031633146127705760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b601555565b6005546001600160a01b031633146127cf5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b601d80549115156301000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff909216919091179055565b6005546001600160a01b031633146128625760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b601455565b6005546001600160a01b031633146128c15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b6001600160a01b03821660008181526027602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146129985760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b602183905560228290556023819055806129b2838561571a565b6129bc919061571a565b6020819055600f1015612a375760405162461bcd60e51b815260206004820152603460248201527f4d757374206b6565702073656c6c206665657320617420313525206f72206c6560448201527f7373202d20646f6e74206265206772656564792100000000000000000000000060648201526084016112fc565b505050565b6005546001600160a01b03163314612a965760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b670de0b6b3a76400006103e8612aab60025490565b612ab6906005615636565b612ac091906156a2565b612aca91906156a2565b811015612b3f5760405162461bcd60e51b815260206004820152603260248201527f536f7272792062757420796f752063616e6e6f7420736574206d617857616c6c60448201527f6574206c6f776572207468616e20302e3525000000000000000000000000000060648201526084016112fc565b612b5181670de0b6b3a7640000615636565b600e5550565b6005546000906001600160a01b03163314612bb45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b620186a0612bc160025490565b612bcc906001615636565b612bd691906156a2565b821015612c4b5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527f20302e3030312520746f74616c20737570706c792e000000000000000000000060648201526084016112fc565b6103e8612c5760025490565b612c62906005615636565b612c6c91906156a2565b821115612ce15760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160448201527f6e20302e352520746f74616c20737570706c792e00000000000000000000000060648201526084016112fc565b50600c55600190565b601b8054611c93906155b3565b6005546001600160a01b03163314612d515760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b6009546040516001600160a01b03918216918316907f537cbf0cab5665d2f550ee8553235e3d3359a9347e5693850973090f655a95f290600090a3600880547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6005546001600160a01b03163314612e205760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b805161131890601b906020840190615070565b6005546000906001600160a01b03163314612e905760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b50601f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600190565b6005546001600160a01b03163314612f185760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b6001600160a01b038116612f945760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016112fc565b611de38161423f565b60198054611c93906155b3565b6005546000906001600160a01b031633146130075760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016112fc565b601754601854613017919061571a565b42116130655760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e69736860448201526064016112fc565b6103e88211156130dd5760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60448201527f6b656e7320696e204c500000000000000000000000000000000000000000000060648201526084016112fc565b426018556040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000f3ea7574564f5f433f6abccbfef6f96993bb756f16600482015260009030906370a0823190602401602060405180830381865afa158015613161573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061318591906156d3565b9050600061319f612710613199848761431b565b9061432e565b905080156131d4576131d47f000000000000000000000000f3ea7574564f5f433f6abccbfef6f96993bb756f61dead8361433a565b60007f000000000000000000000000f3ea7574564f5f433f6abccbfef6f96993bb756f9050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561323457600080fd5b505af1158015613248573d6000803e3d6000fd5b50506040517f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb925060009150a1506001949350505050565b6001600160a01b0383166132fb5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016112fc565b6001600160a01b0382166133775760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016112fc565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166134545760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016112fc565b6001600160a01b0382166134d05760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016112fc565b806134e157612a378383600061433a565b6005546001600160a01b0384811691161480159061350d57506005546001600160a01b03838116911614155b801561352157506001600160a01b03821615155b801561353857506001600160a01b03821661dead14155b801561355f575060055474010000000000000000000000000000000000000000900460ff16155b15613c0657601d54610100900460ff166135fe576001600160a01b03831660009081526027602052604090205460ff16806135b257506001600160a01b03821660009081526027602052604090205460ff165b6135fe5760405162461bcd60e51b815260206004820152601660248201527f54726164696e67206973206e6f74206163746976652e0000000000000000000060448201526064016112fc565b6001600160a01b03831660009081526029602052604090205460ff168061363d57506001600160a01b03821660009081526029602052604090205460ff165b156136945760075460ff166136945760405162461bcd60e51b815260206004820152601d60248201527f476f206d616b652073616e6477696368657320656c736577686572652e00000060448201526064016112fc565b6001600160a01b0383166000908152602a602052604090205460ff1615806136d557506001600160a01b0382166000908152602a602052604090205460ff16155b1561373257600754610100900460ff16156137325760405162461bcd60e51b815260206004820152601860248201527f46616972206c61756e63682c206e6f20736e6970696e672e000000000000000060448201526064016112fc565b6005546001600160a01b0383811691161480159061378257507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b80156137c057507f000000000000000000000000f3ea7574564f5f433f6abccbfef6f96993bb756f6001600160a01b0316826001600160a01b031614155b1561385b57326000908152601e602052604090205443116138485760405162461bcd60e51b8152602060048201526024808201527f4f6e6c79206f6e652070757263686173652070657220626c6f636b20616c6c6f60448201527f7765642e0000000000000000000000000000000000000000000000000000000060648201526084016112fc565b326000908152601e602052604090204390555b6001600160a01b0383166000908152602b602052604090205460ff16801561389c57506001600160a01b03821660009081526028602052604090205460ff16155b156139f557600b548111156139195760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527f6d61785472616e73616374696f6e416d6f756e742e000000000000000000000060648201526084016112fc565b600e546001600160a01b03831660009081526020819052604090205461393f908361571a565b111561398d5760405162461bcd60e51b815260206004820152601360248201527f4d61782077616c6c65742065786365656465640000000000000000000000000060448201526064016112fc565b60065442116139de5760405162461bcd60e51b815260206004820152601060248201527f50617469656e6365206973206b65792e0000000000000000000000000000000060448201526064016112fc565b60145447106139f0576139f081614553565b613b47565b6001600160a01b0382166000908152602b602052604090205460ff168015613a3657506001600160a01b03831660009081526028602052604090205460ff16155b15613ab357600b548111156139f05760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201527f206d61785472616e73616374696f6e416d6f756e742e0000000000000000000060648201526084016112fc565b6001600160a01b03821660009081526028602052604090205460ff16613b4757600e546001600160a01b038316600090815260208190526040902054613af9908361571a565b1115613b475760405162461bcd60e51b815260206004820152601360248201527f4d61782077616c6c65742065786365656465640000000000000000000000000060448201526064016112fc565b6001600160a01b0382166000908152602b602052604090205460ff168015613b8857506001600160a01b03831660009081526028602052604090205460ff16155b8015613b9d5750601d546301000000900460ff165b15613c0657326000908152601e60205260409020544311613c0657466001811415613c04576001600160a01b038416600090815260296020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555b505b30600090815260208190526040902054600c54600f54908210159060ff16613c6757600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673d85f8ef8d219c111d5c171eb5630dfe2845e07281790555b808015613c7c5750601d5462010000900460ff165b8015613ca3575060055474010000000000000000000000000000000000000000900460ff16155b8015613cc857506001600160a01b0385166000908152602b602052604090205460ff16155b8015613ced57506001600160a01b03851660009081526027602052604090205460ff16155b8015613d1257506001600160a01b03841660009081526027602052604090205460ff16155b8015613d265750600f54610100900460ff16155b15613d9b57600580547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055613d7261477d565b600580547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690555b60055474010000000000000000000000000000000000000000900460ff16158015613dde57506001600160a01b0384166000908152602b602052604090205460ff165b8015613dec575060115460ff165b8015613e075750601254601354613e03919061571a565b4210155b8015613e2c57506001600160a01b03851660009081526027602052604090205460ff16155b8015613e405750600f54610100900460ff16155b15613e4f57613e4d6149ec565b505b6005546001600160a01b03861660009081526027602052604090205460ff74010000000000000000000000000000000000000000909204821615911680613eae57506001600160a01b03851660009081526027602052604090205460ff165b80613ec05750600f54610100900460ff165b15613ec9575060005b60008115613fe4576001600160a01b0386166000908152602b602052604090205460ff168015613efb57506000602054115b15613fb357613f1a60646131996020548861431b90919063ffffffff16565b905060205460225482613f2d9190615636565b613f3791906156a2565b60256000828254613f48919061571a565b9091555050602054602354613f5d9083615636565b613f6791906156a2565b60266000828254613f78919061571a565b9091555050602054602154613f8d9083615636565b613f9791906156a2565b60246000828254613fa8919061571a565b90915550613fc69050565b6001600160a01b038716600052602b6020525b8015613fd757613fd787308361433a565b613fe18186615732565b94505b600f54610100900460ff16156140b1576000613ffe6110b7565b9050600061401c60646131996016548561431b90919063ffffffff16565b90506140283382614b95565b61403c89896140378a85614d1a565b61433a565b60145460405189916001600160a01b0383169181156108fc0291906000818181858888f15050601554601454859450600093506140819250606491613199919061431b565b905080601454614091919061571a565b6014819055600d546140a3919061571a565b600d55506140bc9350505050565b6140bc87878761433a565b5050600f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050505050565b6001600160a01b0382166141435760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016112fc565b8060026000828254614155919061571a565b90915550506001600160a01b0382166000908152602081905260408120805483929061418290849061571a565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b60006141d782614d26565b905060058110156141f0576141ed81600561571a565b90505b426141fc826001615636565b614206908261571a565b6006555050601d80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff16620101001790555042601355565b600580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000818152602b602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b60006143278284615636565b9392505050565b600061432782846156a2565b6001600160a01b0383166143b65760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016112fc565b6001600160a01b0382166144325760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016112fc565b6001600160a01b038316600090815260208190526040902054818110156144c15760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016112fc565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906144f890849061571a565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161454491815260200190565b60405180910390a35b50505050565b6040805160028082526060820183526000926020830190803683370190505090507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156145d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145f6919061545c565b8160008151811061460957614609615479565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061463d5761463d615479565b6001600160a01b0392831660209182029290920101526040517f1f00ca740000000000000000000000000000000000000000000000000000000081526000917f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d1690631f00ca74906146b590869086906004016154ec565b600060405180830381865afa1580156146d2573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052614718919081019061550d565b60008151811061472a5761472a615479565b602002602001015190506000479050601454821061454d57601454811061454d57600f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905550505050565b30600090815260208190526040812054905060006026546024546025546147a4919061571a565b6147ae919061571a565b905060008215806147bd575081155b156147c757505050565b600c546147d5906014615636565b8311156147ed57600c546147ea906014615636565b92505b6000600283602554866148009190615636565b61480a91906156a2565b61481491906156a2565b905060006148228583614d1a565b90504761482e82614d9d565b600061483a4783614d1a565b90506000614857876131996024548561431b90919063ffffffff16565b90506000614874886131996026548661431b90919063ffffffff16565b90506000816148838486615732565b61488d9190615732565b60006025819055602481905560265590506148a9600242615749565b6148ec57600954600a80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03909216919091179055614927565b600854600a80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039092169190911790555b600a546040516001600160a01b03909116908390600081818185875af1925050503d8060008114614974576040519150601f19603f3d011682016040523d82523d6000602084013e614979565b606091505b5090985050861580159061498d5750600081115b156149e05761499c8782614f76565b602554604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b50505050505050505050565b426013556040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000f3ea7574564f5f433f6abccbfef6f96993bb756f166004820152600090819030906370a0823190602401602060405180830381865afa158015614a72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a9691906156d3565b90506000614ab56127106131996010548561431b90919063ffffffff16565b90508015614aea57614aea7f000000000000000000000000f3ea7574564f5f433f6abccbfef6f96993bb756f61dead8361433a565b60007f000000000000000000000000f3ea7574564f5f433f6abccbfef6f96993bb756f9050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015614b4a57600080fd5b505af1158015614b5e573d6000803e3d6000fd5b50506040517f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d925060009150a16001935050505090565b6001600160a01b038216614c115760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016112fc565b6001600160a01b03821660009081526020819052604090205481811015614ca05760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f636500000000000000000000000000000000000000000000000000000000000060648201526084016112fc565b6001600160a01b0383166000908152602081905260408120838303905560028054849290614ccf908490615732565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b60006143278284615732565b600081424433604051602001614d7493929190928352602083019190915260601b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016604082015260540190565b6040516020818303038152906040528051906020012060001c614d979190615749565b92915050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110614dd257614dd2615479565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614e50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614e74919061545c565b81600181518110614e8757614e87615479565b60200260200101906001600160a01b031690816001600160a01b031681525050614ed2307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84613280565b6040517f791ac9470000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790614f4090859060009086903090429060040161575d565b600060405180830381600087803b158015614f5a57600080fd5b505af1158015614f6e573d6000803e3d6000fd5b505050505050565b614fa1307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84613280565b6040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101839052600060448201819052606482015261dead60848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015615044573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061506991906156ec565b5050505050565b82805461507c906155b3565b90600052602060002090601f01602090048101928261509e57600085556150e4565b82601f106150b757805160ff19168380011785556150e4565b828001600101855582156150e4579182015b828111156150e45782518255916020019190600101906150c9565b506150f09291506150f4565b5090565b5b808211156150f057600081556001016150f5565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561517f5761517f615109565b604052919050565b6000602080838503121561519a57600080fd5b823567ffffffffffffffff808211156151b257600080fd5b818501915085601f8301126151c657600080fd5b8135818111156151d8576151d8615109565b615208847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601615138565b9150808252868482850101111561521e57600080fd5b8084840185840137600090820190930192909252509392505050565b6001600160a01b0381168114611de357600080fd5b60006020828403121561526157600080fd5b81356143278161523a565b600060208083528351808285015260005b818110156152995785810183015185820160400152820161527d565b818111156152ab576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600080604083850312156152f257600080fd5b82356152fd8161523a565b946020939093013593505050565b8015158114611de357600080fd5b6000806040838503121561532c57600080fd5b82356153378161523a565b915060208301356153478161530b565b809150509250929050565b60006020828403121561536457600080fd5b5035919050565b60008060006060848603121561538057600080fd5b833561538b8161523a565b9250602084013561539b8161523a565b929592945050506040919091013590565b6000602082840312156153be57600080fd5b81356143278161530b565b6000806000606084860312156153de57600080fd5b833592506020840135915060408401356153f78161530b565b809150509250925092565b60008060006060848603121561541757600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561544157600080fd5b823561544c8161523a565b915060208301356153478161523a565b60006020828403121561546e57600080fd5b81516143278161523a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081518084526020808501945080840160005b838110156154e15781516001600160a01b0316875295820195908201906001016154bc565b509495945050505050565b82815260406020820152600061550560408301846154a8565b949350505050565b6000602080838503121561552057600080fd5b825167ffffffffffffffff8082111561553857600080fd5b818501915085601f83011261554c57600080fd5b81518181111561555e5761555e615109565b8060051b915061556f848301615138565b818152918301840191848101908884111561558957600080fd5b938501935b838510156155a75784518252938501939085019061558e565b98975050505050505050565b600181811c908216806155c757607f821691505b60208210811415615601577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561566e5761566e615607565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826156b1576156b1615673565b500490565b6000602082840312156156c857600080fd5b81516143278161530b565b6000602082840312156156e557600080fd5b5051919050565b60008060006060848603121561570157600080fd5b8351925060208401519150604084015190509250925092565b6000821982111561572d5761572d615607565b500190565b60008282101561574457615744615607565b500390565b60008261575857615758615673565b500690565b85815284602082015260a06040820152600061577c60a08301866154a8565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220b0fbffe7e14c098728711f006928e875a06763eb38d552b533ed0e9ad20960b264736f6c634300080a0033

Deployed Bytecode Sourcemap

30764:27186:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52138:432;;;;;;;;;;;;;:::i;:::-;;;160:25:1;;;148:2;133:18;52138:432:0;;;;;;;;37639:113;;;;;;;;;;-1:-1:-1;37639:113:0;;;;;:::i;:::-;;:::i;:::-;;39225:168;;;;;;;;;;-1:-1:-1;39225:168:0;;;;;:::i;:::-;-1:-1:-1;;;;;39357:28:0;39328:4;39357:28;;;:17;:28;;;;;;;;;39225:168;;;;2128:14:1;;2121:22;2103:41;;2091:2;2076:18;39225:168:0;1963:187:1;7839:100:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10147:210::-;;;;;;;;;;-1:-1:-1;10147:210:0;;;;;:::i;:::-;;:::i;31125:21::-;;;;;;;;;;-1:-1:-1;31125:21:0;;;;;;;-1:-1:-1;;;;;31125:21:0;;;;;;-1:-1:-1;;;;;3300:55:1;;;3282:74;;3270:2;3255:18;31125:21:0;3136:226:1;33008:63:0;;;;;;;;;;-1:-1:-1;33008:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;40528:502;;;;;;;;;;-1:-1:-1;40528:502:0;;;;;:::i;:::-;;:::i;30840:51::-;;;;;;;;;;;;;;;8959:108;;;;;;;;;;-1:-1:-1;9047:12:0;;8959:108;;44045:157;;;;;;;;;;-1:-1:-1;44045:157:0;;;;;:::i;:::-;;:::i;31983:47::-;;;;;;;;;;;;;;;;31519:36;;;;;;;;;;;;;;;;32802:33;;;;;;;;;;;;;;;;31153:29;;;;;;;;;;-1:-1:-1;31153:29:0;;;;-1:-1:-1;;;;;31153:29:0;;;38294:364;;;;;;;;;;-1:-1:-1;38294:364:0;;;;;:::i;:::-;;:::i;41801:292::-;;;;;;;;;;-1:-1:-1;41801:292:0;;;;;:::i;:::-;;:::i;10839:529::-;;;;;;;;;;-1:-1:-1;10839:529:0;;;;;:::i;:::-;;:::i;30943:53::-;;;;;;;;;;;;30989:6;30943:53;;32661:22;;;;;;;;;;;;;;;;31614:45;;;;;;;;;;;;;;;;31086:30;;;;;;;;;;-1:-1:-1;31086:30:0;;;;;;;;;;;31575:32;;;;;;;;;;-1:-1:-1;31575:32:0;;;;;;;;36226:929;;;;;;;;;;-1:-1:-1;36226:929:0;;;;;:::i;:::-;;:::i;8801:93::-;;;;;;;;;;-1:-1:-1;8801:93:0;;8884:2;5108:36:1;;5096:2;5081:18;8801:93:0;4966:184:1;32269:50:0;;;;;;;;;;;;;:::i;11777:297::-;;;;;;;;;;-1:-1:-1;11777:297:0;;;;;:::i;:::-;;:::i;37163:141::-;;;;;;;;;;;;;:::i;31443:32::-;;;;;;;;;;-1:-1:-1;31443:32:0;;;;;;;;;;;39825:132;;;;;;;;;;;;;:::i;31783:39::-;;;;;;;;;;;;;;;;30898:38;;;;;;;;;;;;;;;32328:33;;;;;;;;;;-1:-1:-1;32328:33:0;;;;;;;;39401:195;;;;;;;;;;;;;:::i;40430:90::-;;;;;;;;;;-1:-1:-1;40430:90:0;;;;;:::i;:::-;;:::i;44390:126::-;;;;;;;;;;-1:-1:-1;44390:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;44480:28:0;44456:4;44480:28;;;:19;:28;;;;;;;;;44390:126;31702:51;;;;;;;;;;;;;;;;37312:198;;;;;;;;;;-1:-1:-1;37312:198:0;;;;;:::i;:::-;;:::i;39096:121::-;;;;;;;;;;-1:-1:-1;39096:121:0;;;;;:::i;:::-;-1:-1:-1;;;;;39188:21:0;39164:4;39188:21;;;:10;:21;;;;;;;;;39096:121;40080:175;;;;;;;;;;-1:-1:-1;40080:175:0;;;;;:::i;:::-;;:::i;31220:27::-;;;;;;;;;;-1:-1:-1;31220:27:0;;;;-1:-1:-1;;;;;31220:27:0;;;32626:28;;;;;;;;;;;;;;;;32408:31;;;;;;;;;;-1:-1:-1;32408:31:0;;;;;;;;;;;37518:113;;;;;;;;;;-1:-1:-1;37518:113:0;;;;;:::i;:::-;;:::i;9130:177::-;;;;;;;;;;-1:-1:-1;9130:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;9281:18:0;9249:7;9281:18;;;;;;;;;;;;9130:177;1635:103;;;;;;;;;;;;;:::i;55597:555::-;;;;;;;;;;-1:-1:-1;55597:555:0;;;;;:::i;:::-;;:::i;42379:167::-;;;;;;;;;;-1:-1:-1;42379:167:0;;;;;:::i;:::-;;:::i;31881:40::-;;;;;;;;;;;;;;;;43892:145;;;;;;;;;;-1:-1:-1;43892:145:0;;;;;:::i;:::-;;:::i;984:87::-;;;;;;;;;;-1:-1:-1;1057:6:0;;-1:-1:-1;;;;;1057:6:0;984:87;;31189:24;;;;;;;;;;-1:-1:-1;31189:24:0;;;;-1:-1:-1;;;;;31189:24:0;;;32446:26;;;;;;;;;;-1:-1:-1;32446:26:0;;;;;;;;;;;42642:100;;;;;;;;;;-1:-1:-1;42642:100:0;;;;;:::i;:::-;;:::i;8058:104::-;;;;;;;;;;;;;:::i;43384:304::-;;;;;;;;;;-1:-1:-1;43384:304:0;;;;;:::i;:::-;;:::i;32037:35::-;;;;;;;;;;;;;;;;32842:27;;;;;;;;;;;;;;;;32728:25;;;;;;;;;;;;;;;;12577:482;;;;;;;;;;-1:-1:-1;12577:482:0;;;;;:::i;:::-;;:::i;31666:29::-;;;;;;;;;;;;;;;;9520:216;;;;;;;;;;-1:-1:-1;9520:216:0;;;;;:::i;:::-;;:::i;32115:26::-;;;;;;;;;;;;;:::i;39604:117::-;;;;;;;;;;-1:-1:-1;39604:117:0;;;;;:::i;:::-;;:::i;33335:57::-;;;;;;;;;;-1:-1:-1;33335:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;39729:88;;;;;;;;;;-1:-1:-1;39729:88:0;;;;;:::i;:::-;;:::i;33128:49::-;;;;;;;;;;-1:-1:-1;33128:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;39965:107;;;;;;;;;;-1:-1:-1;39965:107:0;;;;;:::i;:::-;;:::i;32368:33::-;;;;;;;;;;-1:-1:-1;32368:33:0;;;;;;;;;;;32762;;;;;;;;;;;;;;;;43194:182;;;;;;;;;;-1:-1:-1;43194:182:0;;;;;:::i;:::-;;:::i;42750:436::-;;;;;;;;;;-1:-1:-1;42750:436:0;;;;;:::i;:::-;;:::i;42101:270::-;;;;;;;;;;-1:-1:-1;42101:270:0;;;;;:::i;:::-;;:::i;32578:39::-;;;;;;;;;;-1:-1:-1;32578:39:0;;;;;;;;31256:35;;;;;;;;;;;;;;;;41296:497;;;;;;;;;;-1:-1:-1;41296:497:0;;;;;:::i;:::-;;:::i;32148:114::-;;;;;;;;;;;;;:::i;44210:172::-;;;;;;;;;;-1:-1:-1;44210:172:0;;;;;:::i;:::-;;:::i;31338:33::-;;;;;;;;;;;;;;;;37760:153;;;;;;;;;;-1:-1:-1;37760:153:0;;;;;:::i;:::-;;:::i;9799:201::-;;;;;;;;;;-1:-1:-1;9799:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;9965:18:0;;;9933:7;9965:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9799:201;31298:33;;;;;;;;;;;;;;;;41091:135;;;;;;;;;;;;;:::i;1893:238::-;;;;;;;;;;-1:-1:-1;1893:238:0;;;;;:::i;:::-;;:::i;32690:31::-;;;;;;;;;;;;;;;;40263:159;;;;;;;;;;-1:-1:-1;40393:21:0;40263:159;;31378:24;;;;;;;;;;;;;;;;32081:27;;;;;;;;;;;;;:::i;56944:1003::-;;;;;;;;;;-1:-1:-1;56944:1003:0;;;;;:::i;:::-;;:::i;52138:432::-;52313:16;;;52327:1;52313:16;;;;;;;;52218:22;;;;52313:16;52327:1;52313:16;;;;;;;;;;-1:-1:-1;52313:16:0;52289:40;;52350:15;-1:-1:-1;;;;;52350:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52340:4;52345:1;52340:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;52340:32:0;;;-1:-1:-1;;;;;52340:32:0;;;;;52401:4;52383;52388:1;52383:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;52383:23:0;;;:7;;;;;;;;;:23;52484:14;;52441:87;;;;;52419:19;;52441:15;:28;;;;:87;;52484:14;52513:4;;52441:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52529:1;52441:90;;;;;;;;:::i;:::-;;;;;;;52419:112;;52551:11;52544:18;;;;52138:432;:::o;37639:113::-;1057:6;;-1:-1:-1;;;;;1057:6:0;413:10;1204:23;1196:68;;;;-1:-1:-1;;;1196:68:0;;8911:2:1;1196:68:0;;;8893:21:1;;;8930:18;;;8923:30;8989:34;8969:18;;;8962:62;9041:18;;1196:68:0;;;;;;;;;37721:23;;::::1;::::0;:7:::1;::::0;:23:::1;::::0;::::1;::::0;::::1;:::i;:::-;;37639:113:::0;:::o;7839:100::-;7893:13;7926:5;7919:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7839:100;:::o;10147:210::-;10266:4;10288:39;413:10;10311:7;10320:6;10288:8;:39::i;:::-;-1:-1:-1;10345:4:0;10147:210;;;;:::o;40528:502::-;1057:6;;-1:-1:-1;;;;;1057:6:0;413:10;1204:23;1196:68;;;;-1:-1:-1;;;1196:68:0;;8911:2:1;1196:68:0;;;8893:21:1;;;8930:18;;;8923:30;8989:34;8969:18;;;8962:62;9041:18;;1196:68:0;8709:356:1;1196:68:0;40705:15:::1;-1:-1:-1::0;;;;;40690:31:0::1;:3;-1:-1:-1::0;;;;;40690:31:0::1;;;40682:40;;;::::0;::::1;;40756:13;-1:-1:-1::0;;;;;40741:29:0::1;:3;-1:-1:-1::0;;;;;40741:29:0::1;;;40733:38;;;::::0;::::1;;-1:-1:-1::0;;;;;40790:20:0;::::1;40805:4;40790:20;;40782:29;;;::::0;::::1;;-1:-1:-1::0;;;;;40830:22:0;::::1;40845:6;40830:22;;40822:31;;;::::0;::::1;;40887:9;::::0;-1:-1:-1;;;;;40872:25:0;;::::1;40887:9:::0;::::1;40872:25;;40864:34;;;::::0;::::1;;40932:14;::::0;-1:-1:-1;;;;;40917:30:0;;::::1;40932:14:::0;::::1;40917:30;;40909:39;;;::::0;::::1;;1057:6:::0;;-1:-1:-1;;;;;40967:14:0;;::::1;1057:6:::0;;40967:14:::1;;40959:23;;;::::0;::::1;;-1:-1:-1::0;;;;;40995:15:0;;;::::1;;::::0;;;:10:::1;:15;::::0;;;;:27;;;::::1;::::0;::::1;;::::0;;;::::1;::::0;;40528:502::o;44045:157::-;1057:6;;-1:-1:-1;;;;;1057:6:0;413:10;1204:23;1196:68;;;;-1:-1:-1;;;1196:68:0;;8911:2:1;1196:68:0;;;8893:21:1;;;8930:18;;;8923:30;8989:34;8969:18;;;8962:62;9041:18;;1196:68:0;8709:356:1;1196:68:0;44152:9:::1;::::0;44124:38:::1;::::0;-1:-1:-1;;;;;44152:9:0;;::::1;::::0;44124:38;::::1;::::0;::::1;::::0;44152:9:::1;::::0;44124:38:::1;44173:9;:21:::0;;;::::1;-1:-1:-1::0;;;;;44173:21:0;;;::::1;::::0;;;::::1;::::0;;44045:157::o;38294:364::-;38374:6;;38356:15;:24;38348:66;;;;-1:-1:-1;;;38348:66:0;;9714:2:1;38348:66:0;;;9696:21:1;9753:2;9733:18;;;9726:30;9792:31;9772:18;;;9765:59;9841:18;;38348:66:0;9512:353:1;38348:66:0;38433:11;;;;;;;38425:57;;;;-1:-1:-1;;;38425:57:0;;10072:2:1;38425:57:0;;;10054:21:1;10111:2;10091:18;;;10084:30;10150:34;10130:18;;;10123:62;10221:3;10201:18;;;10194:31;10242:19;;38425:57:0;9870:397:1;38425:57:0;38522:28;;10434:66:1;38539:10:0;10421:2:1;10417:15;10413:88;38522:28:0;;;10401:101:1;38493:16:0;;10518:12:1;;38522:28:0;;;;;;;;;;;;38512:39;;;;;;38493:58;;38580:6;38568:8;:18;38564:87;;;38621:10;38603:29;;;;:17;:29;;;;;:36;;;;38635:4;38603:36;;;38337:321;38294:364;:::o;41801:292::-;1057:6;;-1:-1:-1;;;;;1057:6:0;413:10;1204:23;1196:68;;;;-1:-1:-1;;;1196:68:0;;8911:2:1;1196:68:0;;;8893:21:1;;;8930:18;;;8923:30;8989:34;8969:18;;;8962:62;9041:18;;1196:68:0;8709:356:1;1196:68:0;41938:4:::1;41930;41909:13;9047:12:::0;;;8959:108;41909:13:::1;:17;::::0;41925:1:::1;41909:17;:::i;:::-;41908:26;;;;:::i;:::-;41907:35;;;;:::i;:::-;41897:6;:45;;41875:159;;;::::0;;-1:-1:-1;;;41875:159:0;;11479:2:1;41875:159:0::1;::::0;::::1;11461:21:1::0;11498:18;;;11491:30;;;;11557:34;11537:18;;;11530:62;11628:34;11608:18;;;11601:62;11680:19;;41875:159:0::1;11277:428:1::0;41875:159:0::1;42068:17;:6:::0;42078::::1;42068:17;:::i;:::-;42045:20;:40:::0;-1:-1:-1;41801:292:0:o;10839:529::-;10979:4;10996:36;11006:6;11014:9;11025:6;10996:9;:36::i;:::-;-1:-1:-1;;;;;11072:19:0;;11045:24;11072:19;;;:11;:19;;;;;;;;413:10;11072:33;;;;;;;;11138:26;;;;11116:116;;;;-1:-1:-1;;;11116:116:0;;11912:2:1;11116:116:0;;;11894:21:1;11951:2;11931:18;;;11924:30;11990:34;11970:18;;;11963:62;12061:10;12041:18;;;12034:38;12089:19;;11116:116:0;11710:404:1;11116:116:0;11268:57;11277:6;413:10;11318:6;11299:16;:25;11268:8;:57::i;:::-;-1:-1:-1;11356:4:0;;10839:529;-1:-1:-1;;;;10839:529:0:o;36226:929::-;1057:6;;-1:-1:-1;;;;;1057:6:0;413:10;1204:23;1196:68;;;;-1:-1:-1;;;1196:68:0;;8911:2:1;1196:68:0;;;8893:21:1;;;8930:18;;;8923:30;8989:34;8969:18;;;8962:62;9041:18;;1196:68:0;8709:356:1;1196:68:0;36455:15:::1;::::0;;;::::1;;;36454:16;36446:54;;;::::0;-1:-1:-1;;;36446:54:0;;12321:2:1;36446:54:0::1;::::0;::::1;12303:21:1::0;12360:2;12340:18;;;12333:30;12399:27;12379:18;;;12372:55;12444:18;;36446:54:0::1;12119:349:1::0;36446:54:0::1;36511:42;36525:4;36532:20;36511:5;:42::i;:::-;36591:134;::::0;;;;-1:-1:-1;;;;;36643:15:0::1;12712:55:1::0;36591:134:0::1;::::0;::::1;12694:74:1::0;36674:40:0::1;12784:18:1::0;;;12777:34;36606:4:0::1;::::0;36591:29:::1;::::0;12667:18:1;;36591:134:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;36840:46:0::1;::::0;;;;36820:4:::1;36840:46;::::0;::::1;3282:74:1::0;;;-1:-1:-1;;;;;36736:15:0::1;:31;::::0;::::1;::::0;36775:21:::1;::::0;36820:4;;36840:31:::1;::::0;3255:18:1;;36840:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36736:259;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;13676:15:1;;;36736:259:0::1;::::0;::::1;13658:34:1::0;13708:18;;;13701:34;36901:1:0::1;13751:18:1::0;;;13744:34;;;13794:18;;;13787:34;36933:10:0::1;13837:19:1::0;;;13830:44;36958:26:0::1;13890:19:1::0;;;13883:35;13569:19;;36736:259:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;37095:19;37106:7;37095:10;:19::i;:::-;-1:-1:-1::0;37125:15:0::1;:22:::0;;;::::1;::::0;::::1;::::0;;36226:929::o;32269:50::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11777:297::-;413:10;11892:4;11986:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11986:34:0;;;;;;;;;;11892:4;;11914:130;;11964:7;;11986:47;;12023:10;;11986:47;:::i;:::-;11914:8;:130::i;37163:141::-;1057:6;;-1:-1:-1;;;;;1057:6:0;413:10;1204:23;1196:68;;;;-1:-1:-1;;;1196:68:0;;8911:2:1;1196:68:0;;;8893:21:1;;;8930:18;;;8923:30;8989:34;8969:18;;;8962:62;9041:18;;1196:68:0;8709:356:1;1196:68:0;1057:6;;37248:48:::1;::::0;-1:-1:-1;;;;;1057:6:0;;;;37274:21:::1;37248:48:::0;::::1;;;::::0;::::1;::::0;;;37274:21;1057:6;37248:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;37163:141::o:0;39825:132::-;1057:6;;-1:-1:-1;;;;;1057:6:0;413:10;1204:23;1196:68;;;;-1:-1:-1;;;1196:68:0;;8911:2:1;1196:68:0;;;8893:21:1;;;8930:18;;;8923:30;8989:34;8969:18;;;8962:62;9041:18;;1196:68:0;8709:356:1;1196:68:0;39930:11:::1;:19:::0;;;::::1;::::0;;39825:132::o;39401:195::-;39444:4;39490:14;;39465:21;:39;39461:128;;-1:-1:-1;39528:4:0;;39401:195::o;39461:128::-;-1:-1:-1;39572:5:0;;39401:195::o;40430:90::-;1057:6;;-1:-1:-1;;;;;1057:6:0;413:10;1204:23;1196:68;;;;-1:-1:-1;;;1196:68:0;;8911:2:1;1196:68:0;;;8893:21:1;;;8930:18;;;8923:30;8989:34;8969:18;;;8962:62;9041:18;;1196:68:0;8709:356:1;1196:68:0;40490:12:::1;:22:::0;;;::::1;::::0;::::1;;::::0;;;::::1;::::0;;40430:90::o;37312:198::-;1057:6;;-1:-1:-1;;;;;1057:6:0;413:10;1204:23;1196:68;;;;-1:-1:-1;;;1196:68:0;;8911:2:1;1196:68:0;;;8893:21:1;;;8930:18;;;8923:30;8989:34;8969:18;;;8962:62;9041:18;;1196:68:0;8709:356:1;1196:68:0;37448:12:::1;-1:-1:-1::0;;;;;37441:29:0::1;;37471:7;1057:6:::0;;-1:-1:-1;;;;;1057:6:0;;984:87;37471:7:::1;37441:61;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;12712:55:1;;;37441:61:0::1;::::0;::::1;12694:74:1::0;37480:21:0::1;12784:18:1::0;;;12777:34;12667:18;;37441:61:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;40080:175::-:0;1057:6;;-1:-1:-1;;;;;1057:6:0;413:10;1204:23;1196:68;;;;-1:-1:-1;;;1196:68:0;;8911:2:1;1196:68:0;;;8893:21:1;;;8930:18;;;8923:30;8989:34;8969:18;;;8962:62;9041:18;;1196:68:0;8709:356:1;1196:68:0;40170:6:::1;40180:3;40170:13;;40162:43;;;::::0;-1:-1:-1;;;40162:43:0;;14877:2:1;40162:43:0::1;::::0;::::1;14859:21:1::0;14916:2;14896:18;;;14889:30;14955:19;14935:18;;;14928:47;14992:18;;40162:43:0::1;14675:341:1::0;40162:43:0::1;40218:20;:29:::0;40080:175::o;37518:113::-;1057:6;;-1:-1:-1;;;;;1057:6:0;413:10;1204:23;1196:68;;;;-1:-1:-1;;;1196:68:0;;8911:2:1;1196:68:0;;;8893:21:1;;;8930:18;;;8923:30;8989:34;8969:18;;;8962:62;9041:18;;1196:68:0;8709:356:1;1196:68:0;37600:23;;::::1;::::0;:8:::1;::::0;:23:::1;::::0;::::1;::::0;::::1;:::i;1635:103::-:0;1057:6;;-1:-1:-1;;;;;1057:6:0;413:10;1204:23;1196:68;;;;-1:-1:-1;;;1196:68:0;;8911:2:1;1196:68:0;;;8893:21:1;;;8930:18;;;8923:30;8989:34;8969:18;;;8962:62;9041:18;;1196:68:0;8709:356:1;1196:68:0;1700:30:::1;1727:1;1700:18;:30::i;:::-;1635:103::o:0;55597:555::-;1057:6;;-1:-1:-1;;;;;1057:6:0;413:10;1204:23;1196:68;;;;-1:-1:-1;;;1196:68:0;;8911:2:1;1196:68:0;;;8893:21:1;;;8930:18;;;8923:30;8989:34;8969:18;;;8962:62;9041:18;;1196:68:0;8709:356:1;1196:68:0;55799:3:::1;55776:19;:26;;55754:127;;;::::0;-1:-1:-1;;;55754:127:0;;15223:2:1;55754:127:0::1;::::0;::::1;15205:21:1::0;15262:2;15242:18;;;15235:30;15301:34;15281:18;;;15274:62;15372:21;15352:18;;;15345:49;15411:19;;55754:127:0::1;15021:415:1::0;55754:127:0::1;55926:4;55914:8;:16;;:33;;;;-1:-1:-1::0;55934:13:0;55914:33:::1;55892:131;;;::::0;-1:-1:-1;;;55892:131:0;;15643:2:1;55892:131:0::1;::::0;::::1;15625:21:1::0;15682:2;15662:18;;;15655:30;15721:34;15701:18;;;15694:62;15792:18;15772;;;15765:46;15828:19;;55892:131:0::1;15441:412:1::0;55892:131:0::1;56034:15;:37:::0;;;;56082:16:::1;:27:::0;56120:13:::1;:24:::0;;;::::1;::::0;::::1;;::::0;;;::::1;::::0;;55597:555::o;42379:167::-;1057:6;;-1:-1:-1;;;;;1057:6:0;413:10;1204:23;1196:68;;;;-1:-1:-1;;;1196:68:0;;8911:2:1;1196:68:0;;;8893:21:1;;;8930:18;;;8923:30;8989:34;8969:18;;;8962:62;9041:18;;1196:68:0;8709:356:1;1196:68:0;-1:-1:-1;;;;;42492:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;;::::1;::::0;::::1;;::::0;;;::::1;::::0;;42379:167::o;43892:145::-;1057:6;;-1:-1:-1;;;;;1057:6:0;413:10;1204:23;1196:68;;;;-1:-1:-1;;;1196:68:0;;8911:2:1;1196:68:0;;;8893:21:1;;;8930:18;;;8923:30;8989:34;8969:18;;;8962:62;9041:18;;1196:68:0;8709:356:1;1196:68:0;43993:6:::1;::::0;43968:32:::1;::::0;-1:-1:-1;;;;;43993:6:0;;;::::1;::::0;::::1;::::0;43968:32;::::1;::::0;::::1;::::0;;;::::1;44011:6;:18:::0;;-1:-1:-1;;;;;44011:18:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;43892:145::o;42642:100::-;1057:6;;-1:-1:-1;;;;;1057:6:0;413:10;1204:23;1196:68;;;;-1:-1:-1;;;1196:68:0;;8911:2:1;1196:68:0;;;8893:21:1;;;8930:18;;;8923:30;8989:34;8969:18;;;8962:62;9041:18;;1196:68:0;8709:356:1;1196:68:0;42713:11:::1;:21:::0;;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;42642:100::o;8058:104::-;8114:13;8147:7;8140:14;;;;;:::i;43384:304::-;1057:6;;-1:-1:-1;;;;;1057:6:0;413:10;1204:23;1196:68;;;;-1:-1:-1;;;1196:68:0;;8911:2:1;1196:68:0;;;8893:21:1;;;8930:18;;;8923:30;8989:34;8969:18;;;8962:62;9041:18;;1196:68:0;8709:356:1;1196:68:0;43528:13:::1;-1:-1:-1::0;;;;;43520:21:0::1;:4;-1:-1:-1::0;;;;;43520:21:0::1;;;43498:128;;;::::0;-1:-1:-1;;;43498:128:0;;16060:2:1;43498:128:0::1;::::0;::::1;16042:21:1::0;16099:2;16079:18;;;16072:30;16138:34;16118:18;;;16111:62;16209:27;16189:18;;;16182:55;16254:19;;43498:128:0::1;15858:421:1::0;43498:128:0::1;43639:41;43668:4;43674:5;43639:28;:41::i;12577:482::-:0;413:10;12697:4;12746:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;12746:34:0;;;;;;;;;;12813:35;;;;12791:122;;;;-1:-1:-1;;;12791:122:0;;16486:2:1;12791:122:0;;;16468:21:1;16525:2;16505:18;;;16498:30;16564:34;16544:18;;;16537:62;16635:7;16615:18;;;16608:35;16660:19;;12791:122:0;16284:401:1;12791:122:0;12949:67;413:10;12972:7;13000:15;12981:16;:34;12949:8;:67::i;:::-;-1:-1:-1;13047:4:0;;12577:482;-1:-1:-1;;;12577:482:0:o;9520:216::-;9642:4;9664:42;413:10;9688:9;9699:6;9664:9;:42::i;32115:26::-;;;;;;;:::i;39604:117::-;1057:6;;-1:-1:-1;;;;;1057:6:0;413:10;1204:23;1196:68;;;;-1:-1:-1;;;1196:68:0;;8911:2:1;1196:68:0;;;8893:21:1;;;8930:18;;;8923:30;8989:34;8969:18;;;8962:62;9041:18;;1196:68:0;8709:356:1;1196:68:0;39685:19:::1;:28:::0;39604:117::o;39729:88::-;1057:6;;-1:-1:-1;;;;;1057:6:0;413:10;1204:23;1196:68;;;;-1:-1:-1;;;1196:68:0;;8911:2:1;1196:68:0;;;8893:21:1;;;8930:18;;;8923:30;8989:34;8969:18;;;8962:62;9041:18;;1196:68:0;8709:356:1;1196:68:0;39794:7:::1;:15:::0;;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;39729:88::o;39965:107::-;1057:6;;-1:-1:-1;;;;;1057:6:0;413:10;1204:23;1196:68;;;;-1:-1:-1;;;1196:68:0;;8911:2:1;1196:68:0;;;8893:21:1;;;8930:18;;;8923:30;8989:34;8969:18;;;8962:62;9041:18;;1196:68:0;8709:356:1;1196:68:0;40041:14:::1;:23:::0;39965:107::o;43194:182::-;1057:6;;-1:-1:-1;;;;;1057:6:0;413:10;1204:23;1196:68;;;;-1:-1:-1;;;1196:68:0;;8911:2:1;1196:68:0;;;8893:21:1;;;8930:18;;;8923:30;8989:34;8969:18;;;8962:62;9041:18;;1196:68:0;8709:356:1;1196:68:0;-1:-1:-1;;;;;43279:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;;::::1;::::0;::::1;;::::0;;::::1;::::0;;;43334:34;;2103:41:1;;;43334:34:0::1;::::0;2076:18:1;43334:34:0::1;;;;;;;43194:182:::0;;:::o;42750:436::-;1057:6;;-1:-1:-1;;;;;1057:6:0;413:10;1204:23;1196:68;;;;-1:-1:-1;;;1196:68:0;;8911:2:1;1196:68:0;;;8893:21:1;;;8930:18;;;8923:30;8989:34;8969:18;;;8962:62;9041:18;;1196:68:0;8709:356:1;1196:68:0;42892:7:::1;:14:::0;;;42917:16:::1;:32:::0;;;42960:10:::1;:20:::0;;;42973:7;43007:26:::1;42936:13:::0;42902:4;43007:26:::1;:::i;:::-;:39;;;;:::i;:::-;42991:13;:55:::0;;;43096:2:::1;-1:-1:-1::0;43079:19:0::1;43057:121;;;::::0;-1:-1:-1;;;43057:121:0;;16892:2:1;43057:121:0::1;::::0;::::1;16874:21:1::0;16931:2;16911:18;;;16904:30;16970:34;16950:18;;;16943:62;17041:22;17021:18;;;17014:50;17081:19;;43057:121:0::1;16690:416:1::0;43057:121:0::1;42750:436:::0;;;:::o;42101:270::-;1057:6;;-1:-1:-1;;;;;1057:6:0;413:10;1204:23;1196:68;;;;-1:-1:-1;;;1196:68:0;;8911:2:1;1196:68:0;;;8893:21:1;;;8930:18;;;8923:30;8989:34;8969:18;;;8962:62;9041:18;;1196:68:0;8709:356:1;1196:68:0;42241:4:::1;42233;42212:13;9047:12:::0;;;8959:108;42212:13:::1;:17;::::0;42228:1:::1;42212:17;:::i;:::-;42211:26;;;;:::i;:::-;42210:35;;;;:::i;:::-;42200:6;:45;;42178:145;;;::::0;-1:-1:-1;;;42178:145:0;;17313:2:1;42178:145:0::1;::::0;::::1;17295:21:1::0;17352:2;17332:18;;;17325:30;17391:34;17371:18;;;17364:62;17462:20;17442:18;;;17435:48;17500:19;;42178:145:0::1;17111:414:1::0;42178:145:0::1;42346:17;:6:::0;42356::::1;42346:17;:::i;:::-;42334:9;:29:::0;-1:-1:-1;42101:270:0:o;41296:497::-;1057:6;;41404:4;;-1:-1:-1;;;;;1057:6:0;413:10;1204:23;1196:68;;;;-1:-1:-1;;;1196:68:0;;8911:2:1;1196:68:0;;;8893:21:1;;;8930:18;;;8923:30;8989:34;8969:18;;;8962:62;9041:18;;1196:68:0;8709:356:1;1196:68:0;41483:6:::1;41462:13;9047:12:::0;;;8959:108;41462:13:::1;:17;::::0;41478:1:::1;41462:17;:::i;:::-;41461:28;;;;:::i;:::-;41448:9;:41;;41426:144;;;::::0;-1:-1:-1;;;41426:144:0;;17732:2:1;41426:144:0::1;::::0;::::1;17714:21:1::0;17771:2;17751:18;;;17744:30;17810:34;17790:18;;;17783:62;17881:23;17861:18;;;17854:51;17922:19;;41426:144:0::1;17530:417:1::0;41426:144:0::1;41638:4;41617:13;9047:12:::0;;;8959:108;41617:13:::1;:17;::::0;41633:1:::1;41617:17;:::i;:::-;41616:26;;;;:::i;:::-;41603:9;:39;;41581:141;;;::::0;-1:-1:-1;;;41581:141:0;;18154:2:1;41581:141:0::1;::::0;::::1;18136:21:1::0;18193:2;18173:18;;;18166:30;18232:34;18212:18;;;18205:62;18303:22;18283:18;;;18276:50;18343:19;;41581:141:0::1;17952:416:1::0;41581:141:0::1;-1:-1:-1::0;41733:18:0::1;:30:::0;41781:4:::1;::::0;41296:497::o;32148:114::-;;;;;;;:::i;44210:172::-;1057:6;;-1:-1:-1;;;;;1057:6:0;413:10;1204:23;1196:68;;;;-1:-1:-1;;;1196:68:0;;8911:2:1;1196:68:0;;;8893:21:1;;;8930:18;;;8923:30;8989:34;8969:18;;;8962:62;9041:18;;1196:68:0;8709:356:1;1196:68:0;44327:9:::1;::::0;44294:43:::1;::::0;-1:-1:-1;;;;;44327:9:0;;::::1;::::0;44294:43;::::1;::::0;::::1;::::0;44327:9:::1;::::0;44294:43:::1;44348:14;:26:::0;;;::::1;-1:-1:-1::0;;;;;44348:26:0;;;::::1;::::0;;;::::1;::::0;;44210:172::o;37760:153::-;1057:6;;-1:-1:-1;;;;;1057:6:0;413:10;1204:23;1196:68;;;;-1:-1:-1;;;1196:68:0;;8911:2:1;1196:68:0;;;8893:21:1;;;8930:18;;;8923:30;8989:34;8969:18;;;8962:62;9041:18;;1196:68:0;8709:356:1;1196:68:0;37873:32;;::::1;::::0;:12:::1;::::0;:32:::1;::::0;::::1;::::0;::::1;:::i;41091:135::-:0;1057:6;;41151:4;;-1:-1:-1;;;;;1057:6:0;413:10;1204:23;1196:68;;;;-1:-1:-1;;;1196:68:0;;8911:2:1;1196:68:0;;;8893:21:1;;;8930:18;;;8923:30;8989:34;8969:18;;;8962:62;9041:18;;1196:68:0;8709:356:1;1196:68:0;-1:-1:-1;41168:20:0::1;:28:::0;;;::::1;::::0;;;41091:135;:::o;1893:238::-;1057:6;;-1:-1:-1;;;;;1057:6:0;413:10;1204:23;1196:68;;;;-1:-1:-1;;;1196:68:0;;8911:2:1;1196:68:0;;;8893:21:1;;;8930:18;;;8923:30;8989:34;8969:18;;;8962:62;9041:18;;1196:68:0;8709:356:1;1196:68:0;-1:-1:-1;;;;;1996:22:0;::::1;1974:110;;;::::0;-1:-1:-1;;;1974:110:0;;18575:2:1;1974:110:0::1;::::0;::::1;18557:21:1::0;18614:2;18594:18;;;18587:30;18653:34;18633:18;;;18626:62;18724:8;18704:18;;;18697:36;18750:19;;1974:110:0::1;18373:402:1::0;1974:110:0::1;2095:28;2114:8;2095:18;:28::i;32081:27::-:0;;;;;;;:::i;56944:1003::-;1057:6;;57055:4;;-1:-1:-1;;;;;1057:6:0;413:10;1204:23;1196:68;;;;-1:-1:-1;;;1196:68:0;;8911:2:1;1196:68:0;;;8893:21:1;;;8930:18;;;8923:30;8989:34;8969:18;;;8962:62;9041:18;;1196:68:0;8709:356:1;1196:68:0;57140:19:::1;;57117:20;;:42;;;;:::i;:::-;57099:15;:60;57077:142;;;::::0;-1:-1:-1;;;57077:142:0;;18982:2:1;57077:142:0::1;::::0;::::1;18964:21:1::0;;;19001:18;;;18994:30;19060:34;19040:18;;;19033:62;19112:18;;57077:142:0::1;18780:356:1::0;57077:142:0::1;57249:4;57238:7;:15;;57230:70;;;::::0;-1:-1:-1;;;57230:70:0;;19343:2:1;57230:70:0::1;::::0;::::1;19325:21:1::0;19382:2;19362:18;;;19355:30;19421:34;19401:18;;;19394:62;19492:12;19472:18;;;19465:40;19522:19;;57230:70:0::1;19141:406:1::0;57230:70:0::1;57334:15;57311:20;:38:::0;57435:29:::1;::::0;;;;-1:-1:-1;;;;;57450:13:0::1;3300:55:1::0;57435:29:0::1;::::0;::::1;3282:74:1::0;57404:28:0::1;::::0;57435:4:::1;::::0;:14:::1;::::0;3255:18:1;;57435:29:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;57404:60:::0;-1:-1:-1;57514:20:0::1;57537:44;57575:5;57537:33;57404:60:::0;57562:7;57537:24:::1;:33::i;:::-;:37:::0;::::1;:44::i;:::-;57514:67:::0;-1:-1:-1;57674:16:0;;57670:110:::1;;57707:61;57723:13;57746:6;57755:12;57707:15;:61::i;:::-;57814:19;57851:13;57814:51;;57876:4;-1:-1:-1::0;;;;;57876:9:0::1;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;57903:14:0::1;::::0;::::1;::::0;-1:-1:-1;57903:14:0;;-1:-1:-1;57903:14:0::1;-1:-1:-1::0;57935:4:0::1;::::0;56944:1003;-1:-1:-1;;;;56944:1003:0:o;16367:380::-;-1:-1:-1;;;;;16503:19:0;;16495:68;;;;-1:-1:-1;;;16495:68:0;;19754:2:1;16495:68:0;;;19736:21:1;19793:2;19773:18;;;19766:30;19832:34;19812:18;;;19805:62;19903:6;19883:18;;;19876:34;19927:19;;16495:68:0;19552:400:1;16495:68:0;-1:-1:-1;;;;;16582:21:0;;16574:68;;;;-1:-1:-1;;;16574:68:0;;20159:2:1;16574:68:0;;;20141:21:1;20198:2;20178:18;;;20171:30;20237:34;20217:18;;;20210:62;20308:4;20288:18;;;20281:32;20330:19;;16574:68:0;19957:398:1;16574:68:0;-1:-1:-1;;;;;16655:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;16707:32;;160:25:1;;;16707:32:0;;133:18:1;16707:32:0;;;;;;;16367:380;;;:::o;44574:6675::-;-1:-1:-1;;;;;44706:18:0;;44698:68;;;;-1:-1:-1;;;44698:68:0;;20562:2:1;44698:68:0;;;20544:21:1;20601:2;20581:18;;;20574:30;20640:34;20620:18;;;20613:62;20711:7;20691:18;;;20684:35;20736:19;;44698:68:0;20360:401:1;44698:68:0;-1:-1:-1;;;;;44785:16:0;;44777:64;;;;-1:-1:-1;;;44777:64:0;;20968:2:1;44777:64:0;;;20950:21:1;21007:2;20987:18;;;20980:30;21046:34;21026:18;;;21019:62;21117:5;21097:18;;;21090:33;21140:19;;44777:64:0;20766:399:1;44777:64:0;44858:11;44854:93;;44886:28;44902:4;44908:2;44912:1;44886:15;:28::i;44854:93::-;1057:6;;-1:-1:-1;;;;;44977:15:0;;;1057:6;;44977:15;;;;:45;;-1:-1:-1;1057:6:0;;-1:-1:-1;;;;;45009:13:0;;;1057:6;;45009:13;;44977:45;:78;;;;-1:-1:-1;;;;;;45039:16:0;;;;44977:78;:116;;;;-1:-1:-1;;;;;;45072:21:0;;45086:6;45072:21;;44977:116;:142;;;;-1:-1:-1;45111:8:0;;;;;;;45110:9;44977:142;44959:3220;;;45151:13;;;;;;;45146:203;;-1:-1:-1;;;;;45215:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;45244:23:0;;;;;;:19;:23;;;;;;;;45215:52;45185:148;;;;-1:-1:-1;;;45185:148:0;;21372:2:1;45185:148:0;;;21354:21:1;21411:2;21391:18;;;21384:30;21450:24;21430:18;;;21423:52;21492:18;;45185:148:0;21170:346:1;45185:148:0;-1:-1:-1;;;;;45369:16:0;;;;;;:10;:16;;;;;;;;;:34;;-1:-1:-1;;;;;;45389:14:0;;;;;;:10;:14;;;;;;;;45369:34;45365:129;;;45432:12;;;;45424:54;;;;-1:-1:-1;;;45424:54:0;;21723:2:1;45424:54:0;;;21705:21:1;21762:2;21742:18;;;21735:30;21801:31;21781:18;;;21774:59;21850:18;;45424:54:0;21521:353:1;45424:54:0;-1:-1:-1;;;;;45515:23:0;;;;;;:17;:23;;;;;;;;45514:24;;:50;;-1:-1:-1;;;;;;45543:21:0;;;;;;:17;:21;;;;;;;;45542:22;45514:50;45510:140;;;45594:11;;;;;;;45593:12;45585:49;;;;-1:-1:-1;;;45585:49:0;;22081:2:1;45585:49:0;;;22063:21:1;22120:2;22100:18;;;22093:30;22159:26;22139:18;;;22132:54;22203:18;;45585:49:0;21879:348:1;45585:49:0;1057:6;;-1:-1:-1;;;;;45688:13:0;;;1057:6;;45688:13;;;;:64;;;45736:15;-1:-1:-1;;;;;45722:30:0;:2;-1:-1:-1;;;;;45722:30:0;;;45688:64;:113;;;;;45787:13;-1:-1:-1;;;;;45773:28:0;:2;-1:-1:-1;;;;;45773:28:0;;;45688:113;45666:423;;;45895:9;45866:39;;;;:28;:39;;;;;;45908:12;-1:-1:-1;45836:164:0;;;;-1:-1:-1;;;45836:164:0;;22434:2:1;45836:164:0;;;22416:21:1;22473:2;22453:18;;;22446:30;22512:34;22492:18;;;22485:62;22583:6;22563:18;;;22556:34;22607:19;;45836:164:0;22232:400:1;45836:164:0;46048:9;46019:39;;;;:28;:39;;;;;46061:12;46019:54;;45666:423;-1:-1:-1;;;;;46153:31:0;;;;;;:25;:31;;;;;;;;:88;;;;-1:-1:-1;;;;;;46206:35:0;;;;;;:31;:35;;;;;;;;46205:36;46153:88;46131:1354;;;46316:20;;46306:6;:30;;46276:157;;;;-1:-1:-1;;;46276:157:0;;22839:2:1;46276:157:0;;;22821:21:1;22878:2;22858:18;;;22851:30;22917:34;22897:18;;;22890:62;22988:23;22968:18;;;22961:51;23029:19;;46276:157:0;22637:417:1;46276:157:0;46508:9;;-1:-1:-1;;;;;9281:18:0;;9249:7;9281:18;;;;;;;;;;;46482:22;;:6;:22;:::i;:::-;:35;;46452:128;;;;-1:-1:-1;;;46452:128:0;;23261:2:1;46452:128:0;;;23243:21:1;23300:2;23280:18;;;23273:30;23339:21;23319:18;;;23312:49;23378:18;;46452:128:0;23059:343:1;46452:128:0;46627:6;;46609:15;:24;46601:53;;;;-1:-1:-1;;;46601:53:0;;23609:2:1;46601:53:0;;;23591:21:1;23648:2;23628:18;;;23621:30;23687:18;23667;;;23660:46;23723:18;;46601:53:0;23407:340:1;46601:53:0;46756:14;;46731:21;:39;46727:169;;46854:22;46869:6;46854:14;:22::i;:::-;46131:1354;;;-1:-1:-1;;;;;46977:29:0;;;;;;:25;:29;;;;;;;;:88;;;;-1:-1:-1;;;;;;47028:37:0;;;;;;:31;:37;;;;;;;;47027:38;46977:88;46955:530;;;47140:20;;47130:6;:30;;47100:158;;;;-1:-1:-1;;;47100:158:0;;23954:2:1;47100:158:0;;;23936:21:1;23993:2;23973:18;;;23966:30;24032:34;24012:18;;;24005:62;24103:24;24083:18;;;24076:52;24145:19;;47100:158:0;23752:418:1;46955:530:0;-1:-1:-1;;;;;47285:35:0;;;;;;:31;:35;;;;;;;;47280:205;;47397:9;;-1:-1:-1;;;;;9281:18:0;;9249:7;9281:18;;;;;;;;;;;47371:22;;:6;:22;:::i;:::-;:35;;47341:128;;;;-1:-1:-1;;;47341:128:0;;23261:2:1;47341:128:0;;;23243:21:1;23300:2;23280:18;;;23273:30;23339:21;23319:18;;;23312:49;23378:18;;47341:128:0;23059:343:1;47341:128:0;-1:-1:-1;;;;;47523:29:0;;;;;;:25;:29;;;;;;;;:88;;;;-1:-1:-1;;;;;;47574:37:0;;;;;;:31;:37;;;;;;;;47573:38;47523:88;:116;;;;-1:-1:-1;47632:7:0;;;;;;;47523:116;47501:667;;;47707:9;47678:39;;;;:28;:39;;;;;;47721:12;-1:-1:-1;47674:479:0;;47918:13;47976:1;47958:19;;47954:99;;;-1:-1:-1;;;;;48006:16:0;;;;;;:10;:16;;;;;:23;;;;48025:4;48006:23;;;47954:99;47735:418;47674:479;48240:4;48191:28;9281:18;;;;;;;;;;;48298;;48334:12;;48274:42;;;;;48334:12;;48329:100;;48363:9;:54;;;;48375:42;48363:54;;;48329:100;48541:7;:35;;;;-1:-1:-1;48565:11:0;;;;;;;48541:35;:61;;;;-1:-1:-1;48594:8:0;;;;;;;48593:9;48541:61;:110;;;;-1:-1:-1;;;;;;48620:31:0;;;;;;:25;:31;;;;;;;;48619:32;48541:110;:153;;;;-1:-1:-1;;;;;;48669:25:0;;;;;;:19;:25;;;;;;;;48668:26;48541:153;:194;;;;-1:-1:-1;;;;;;48712:23:0;;;;;;:19;:23;;;;;;;;48711:24;48541:194;:224;;;;-1:-1:-1;48753:12:0;;;;;;;48752:13;48541:224;48523:356;;;48792:8;:15;;;;;;;;48824:10;:8;:10::i;:::-;48851:8;:16;;;;;;48523:356;48910:8;;;;;;;48909:9;:55;;;;-1:-1:-1;;;;;;48935:29:0;;;;;;:25;:29;;;;;;;;48909:55;:85;;;;-1:-1:-1;48981:13:0;;;;48909:85;:153;;;;;49047:15;;49030:14;;:32;;;;:::i;:::-;49011:15;:51;;48909:153;:196;;;;-1:-1:-1;;;;;;49080:25:0;;;;;;:19;:25;;;;;;;;49079:26;48909:196;:226;;;;-1:-1:-1;49123:12:0;;;;;;;49122:13;48909:226;48891:312;;;49162:29;:27;:29::i;:::-;;48891:312;49231:8;;-1:-1:-1;;;;;49355:25:0;;49215:12;49355:25;;;:19;:25;;;;;;49231:8;;;;;;;49230:9;;49355:25;;:52;;-1:-1:-1;;;;;;49384:23:0;;;;;;:19;:23;;;;;;;;49355:52;:68;;;-1:-1:-1;49411:12:0;;;;;;;49355:68;49337:140;;;-1:-1:-1;49460:5:0;49337:140;49489:12;49589:7;49585:724;;;-1:-1:-1;;;;;49665:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;49714:1;49698:13;;:17;49665:50;49661:499;;;49743:34;49773:3;49743:25;49754:13;;49743:6;:10;;:25;;;;:::i;:34::-;49736:41;;49846:13;;49826:16;;49819:4;:23;;;;:::i;:::-;49818:41;;;;:::i;:::-;49796:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;49916:13:0;;49902:10;;49895:17;;:4;:17;:::i;:::-;49894:35;;;;:::i;:::-;49878:12;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;49989:13:0;;49978:7;;49971:14;;:4;:14;:::i;:::-;49970:32;;;;:::i;:::-;49948:18;;:54;;;;;;;:::i;:::-;;;;-1:-1:-1;49661:499:0;;-1:-1:-1;49661:499:0;;-1:-1:-1;;;;;50064:31:0;;;;:25;:31;;50060:100;50180:8;;50176:91;;50209:42;50225:4;50239;50246;50209:15;:42::i;:::-;50283:14;50293:4;50283:14;;:::i;:::-;;;49585:724;50325:12;;;;;;;50321:835;;;50354:20;50377:22;:20;:22::i;:::-;50354:45;;50414:18;50435:79;50496:3;50435:38;50452:20;;50435:12;:16;;:38;;;;:::i;:79::-;50414:100;;50529:29;50535:10;50547;50529:5;:29::i;:::-;50573:49;50589:4;50595:2;50599:22;:6;50610:10;50599;:22::i;:::-;50573:15;:49::i;:::-;50700:14;;50688:27;;50670:2;;-1:-1:-1;;;;;50688:11:0;;;:27;;;;;50700:14;50637:22;50688:27;50637:22;50688:27;50700:14;50688:11;:27;;-1:-1:-1;;50902:19:0;;50865:14;;50751:6;;-1:-1:-1;50730:10:0;;-1:-1:-1;50865:84:0;;-1:-1:-1;50945:3:0;;50865:57;;:14;:36;:57::i;:84::-;50837:112;;50998:17;50981:14;;:34;;;;:::i;:::-;50964:14;:51;;;51047:14;;:31;;50964:51;51047:31;:::i;:::-;51030:14;:48;-1:-1:-1;50321:835:0;;-1:-1:-1;;;;50321:835:0;;51111:33;51127:4;51133:2;51137:6;51111:15;:33::i;:::-;-1:-1:-1;;51221:12:0;:20;;;;;;-1:-1:-1;;;;;44574:6675:0:o;14606:399::-;-1:-1:-1;;;;;14690:21:0;;14682:65;;;;-1:-1:-1;;;14682:65:0;;24507:2:1;14682:65:0;;;24489:21:1;24546:2;24526:18;;;24519:30;24585:33;24565:18;;;24558:61;24636:18;;14682:65:0;24305:355:1;14682:65:0;14838:6;14822:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;14855:18:0;;:9;:18;;;;;;;;;;:28;;14877:6;;14855:9;:28;;14877:6;;14855:28;:::i;:::-;;;;-1:-1:-1;;14899:37:0;;160:25:1;;;-1:-1:-1;;;;;14899:37:0;;;14916:1;;14899:37;;148:2:1;133:18;14899:37:0;;;;;;;37721:23:::1;37639:113:::0;:::o;38711:377::-;38767:15;38785:14;38792:6;38785;:14::i;:::-;38767:32;;38824:1;38814:7;:11;38810:65;;;38852:11;:7;38862:1;38852:11;:::i;:::-;38842:21;;38810:65;38907:15;38957:19;:7;38967:9;38957:19;:::i;:::-;38943:33;;:11;:33;:::i;:::-;38933:6;:44;-1:-1:-1;;38988:13:0;:20;;39019:18;;;;;;-1:-1:-1;39065:15:0;39048:14;:32;38711:377::o;2291:191::-;2384:6;;;-1:-1:-1;;;;;2401:17:0;;;;;;;;;;;2434:40;;2384:6;;;2401:17;2384:6;;2434:40;;2365:16;;2434:40;2354:128;2291:191;:::o;43696:188::-;-1:-1:-1;;;;;43779:31:0;;;;;;:25;:31;;;;;;:39;;;;;;;;;;;;;43836:40;;43779:39;;:31;43836:40;;;43696:188;;:::o;21456:98::-;21514:7;21541:5;21545:1;21541;:5;:::i;:::-;21534:12;21456:98;-1:-1:-1;;;21456:98:0:o;21855:::-;21913:7;21940:5;21944:1;21940;:5;:::i;13549:770::-;-1:-1:-1;;;;;13689:20:0;;13681:70;;;;-1:-1:-1;;;13681:70:0;;20562:2:1;13681:70:0;;;20544:21:1;20601:2;20581:18;;;20574:30;20640:34;20620:18;;;20613:62;20711:7;20691:18;;;20684:35;20736:19;;13681:70:0;20360:401:1;13681:70:0;-1:-1:-1;;;;;13770:23:0;;13762:71;;;;-1:-1:-1;;;13762:71:0;;20968:2:1;13762:71:0;;;20950:21:1;21007:2;20987:18;;;20980:30;21046:34;21026:18;;;21019:62;21117:5;21097:18;;;21090:33;21140:19;;13762:71:0;20766:399:1;13762:71:0;-1:-1:-1;;;;;13930:17:0;;13906:21;13930:17;;;;;;;;;;;13980:23;;;;13958:111;;;;-1:-1:-1;;;13958:111:0;;24867:2:1;13958:111:0;;;24849:21:1;24906:2;24886:18;;;24879:30;24945:34;24925:18;;;24918:62;25016:8;24996:18;;;24989:36;25042:19;;13958:111:0;24665:402:1;13958:111:0;-1:-1:-1;;;;;14105:17:0;;;:9;:17;;;;;;;;;;;14125:22;;;14105:42;;14169:20;;;;;;;;:30;;14141:6;;14105:9;14169:30;;14141:6;;14169:30;:::i;:::-;;;;;;;;14234:9;-1:-1:-1;;;;;14217:35:0;14226:6;-1:-1:-1;;;;;14217:35:0;;14245:6;14217:35;;;;160:25:1;;148:2;133:18;;14:177;14217:35:0;;;;;;;;14265:46;13670:649;13549:770;;;:::o;52578:534::-;52700:16;;;52714:1;52700:16;;;;;;;;52676:21;;52700:16;;;;;;;;;;-1:-1:-1;52700:16:0;52676:40;;52737:15;-1:-1:-1;;;;;52737:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52727:4;52732:1;52727:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;52727:32:0;;;-1:-1:-1;;;;;52727:32:0;;;;;52788:4;52770;52775:1;52770:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;52770:23:0;;;:7;;;;;;;;;:23;52826:47;;;;;52806:17;;52826:15;:28;;;;:47;;52855:11;;52868:4;;52826:47;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52874:1;52826:50;;;;;;;;:::i;:::-;;;;;;;52806:70;;52887:26;52916:21;52887:50;;52967:14;;52954:9;:27;52950:155;;53024:14;;53002:18;:36;52998:96;;53059:12;:19;;;;;;;;52631:481;;;52578:534;:::o;53787:1802::-;53870:4;53826:23;9281:18;;;;;;;;;;;53826:50;;53887:25;53983:12;;53949:18;;53915;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;53887:108;-1:-1:-1;54006:12:0;54035:20;;;:46;;-1:-1:-1;54059:22:0;;54035:46;54031:85;;;54098:7;;;53787:1802::o;54031:85::-;54150:18;;:23;;54171:2;54150:23;:::i;:::-;54132:15;:41;54128:115;;;54208:18;;:23;;54229:2;54208:23;:::i;:::-;54190:41;;54128:115;54304:23;54417:1;54384:17;54349:18;;54331:15;:36;;;;:::i;:::-;54330:71;;;;:::i;:::-;:88;;;;:::i;:::-;54304:114;-1:-1:-1;54429:26:0;54458:36;:15;54304:114;54458:19;:36::i;:::-;54429:65;-1:-1:-1;54535:21:0;54569:36;54429:65;54569:16;:36::i;:::-;54618:18;54639:44;:21;54665:17;54639:25;:44::i;:::-;54618:65;;54696:23;54722:81;54775:17;54722:34;54737:18;;54722:10;:14;;:34;;;;:::i;:81::-;54696:107;;54814:17;54834:51;54867:17;54834:28;54849:12;;54834:10;:14;;:28;;;;:::i;:51::-;54814:71;-1:-1:-1;54898:23:0;54814:71;54924:28;54937:15;54924:10;:28;:::i;:::-;:40;;;;:::i;:::-;54998:1;54977:18;:22;;;55010:18;:22;;;55043:12;:16;54898:66;-1:-1:-1;55076:19:0;55094:1;55076:15;:19;:::i;:::-;55072:143;;55132:9;;55117:12;:24;;;;-1:-1:-1;;;;;55132:9:0;;;55117:24;;;;;;55072:143;;;55189:14;;55174:12;:29;;;;-1:-1:-1;;;;;55189:14:0;;;55174:29;;;;;;55072:143;55249:12;;55241:48;;-1:-1:-1;;;;;55249:12:0;;;;55275:9;;55241:48;;;;55275:9;55249:12;55241:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;55227:62:0;;-1:-1:-1;;55306:19:0;;;;;:42;;;55347:1;55329:15;:19;55306:42;55302:280;;;55365:46;55378:15;55395;55365:12;:46::i;:::-;55537:18;;55433:137;;;25601:25:1;;;25657:2;25642:18;;25635:34;;;25685:18;;;25678:34;;;;55433:137:0;;;;;;25589:2:1;55433:137:0;;;55302:280;53815:1774;;;;;;;;;;53787:1802::o;56160:776::-;56251:15;56234:14;:32;56352:29;;;;;-1:-1:-1;;;;;56367:13:0;3300:55:1;56352:29:0;;;3282:74:1;56217:4:0;;;;56352;;:14;;3255:18:1;;56352:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;56321:60;;56431:20;56454:77;56515:5;56454:42;56479:16;;56454:20;:24;;:42;;;;:::i;:77::-;56431:100;-1:-1:-1;56624:16:0;;56620:110;;56657:61;56673:13;56696:6;56705:12;56657:15;:61::i;:::-;56805:19;56842:13;56805:51;;56867:4;-1:-1:-1;;;;;56867:9:0;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;56894:12:0;;;;-1:-1:-1;56894:12:0;;-1:-1:-1;56894:12:0;56924:4;56917:11;;;;;56160:776;:::o;15338:591::-;-1:-1:-1;;;;;15422:21:0;;15414:67;;;;-1:-1:-1;;;15414:67:0;;25925:2:1;15414:67:0;;;25907:21:1;25964:2;25944:18;;;25937:30;26003:34;25983:18;;;25976:62;26074:3;26054:18;;;26047:31;26095:19;;15414:67:0;25723:397:1;15414:67:0;-1:-1:-1;;;;;15581:18:0;;15556:22;15581:18;;;;;;;;;;;15618:24;;;;15610:71;;;;-1:-1:-1;;;15610:71:0;;26327:2:1;15610:71:0;;;26309:21:1;26366:2;26346:18;;;26339:30;26405:34;26385:18;;;26378:62;26476:4;26456:18;;;26449:32;26498:19;;15610:71:0;26125:398:1;15610:71:0;-1:-1:-1;;;;;15717:18:0;;:9;:18;;;;;;;;;;15738:23;;;15717:44;;15783:12;:22;;15755:6;;15717:9;15783:22;;15755:6;;15783:22;:::i;:::-;;;;-1:-1:-1;;15823:37:0;;160:25:1;;;15849:1:0;;-1:-1:-1;;;;;15823:37:0;;;;;148:2:1;133:18;15823:37:0;;;;;;;42750:436;;;:::o;21099:98::-;21157:7;21184:5;21188:1;21184;:5;:::i;37921:365::-;37976:7;38272:6;38117:15;38159:16;38202:10;38074:161;;;;;;;;;26713:19:1;;;26757:2;26748:12;;26741:28;;;;26807:2;26803:15;26820:66;26799:88;26794:2;26785:12;;26778:110;26913:2;26904:12;;26528:394;38074:161:0;;;;;;;;;;;;;38042:212;;;;;;38016:253;;:262;;;;:::i;:::-;37996:282;37921:365;-1:-1:-1;;37921:365:0:o;51257:589::-;51407:16;;;51421:1;51407:16;;;;;;;;51383:21;;51407:16;;;;;;;;;;-1:-1:-1;51407:16:0;51383:40;;51452:4;51434;51439:1;51434:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;51434:23:0;;;-1:-1:-1;;;;;51434:23:0;;;;;51478:15;-1:-1:-1;;;;;51478:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51468:4;51473:1;51468:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;51468:32:0;;;-1:-1:-1;;;;;51468:32:0;;;;;51513:62;51530:4;51545:15;51563:11;51513:8;:62::i;:::-;51614:224;;;;;-1:-1:-1;;;;;51614:15:0;:66;;;;:224;;51695:11;;51721:1;;51765:4;;51792;;51812:15;;51614:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51312:534;51257:589;:::o;53120:517::-;53268:62;53285:4;53300:15;53318:11;53268:8;:62::i;:::-;53373:256;;;;;53445:4;53373:256;;;13658:34:1;13708:18;;;13701:34;;;53491:1:0;13751:18:1;;;13744:34;;;13794:18;;;13787:34;30989:6:0;13837:19:1;;;13830:44;53603:15:0;13890:19:1;;;13883:35;53373:15:0;-1:-1:-1;;;;;53373:31:0;;;;53412:9;;13569:19:1;;53373:256:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;53120:517;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;196:184:1;248:77;245:1;238:88;345:4;342:1;335:15;369:4;366:1;359:15;385:334;456:2;450:9;512:2;502:13;;517:66;498:86;486:99;;615:18;600:34;;636:22;;;597:62;594:88;;;662:18;;:::i;:::-;698:2;691:22;385:334;;-1:-1:-1;385:334:1:o;724:823::-;793:6;824:2;867;855:9;846:7;842:23;838:32;835:52;;;883:1;880;873:12;835:52;923:9;910:23;952:18;993:2;985:6;982:14;979:34;;;1009:1;1006;999:12;979:34;1047:6;1036:9;1032:22;1022:32;;1092:7;1085:4;1081:2;1077:13;1073:27;1063:55;;1114:1;1111;1104:12;1063:55;1150:2;1137:16;1172:2;1168;1165:10;1162:36;;;1178:18;;:::i;:::-;1220:112;1328:2;1259:66;1252:4;1248:2;1244:13;1240:86;1236:95;1220:112;:::i;:::-;1207:125;;1355:2;1348:5;1341:17;1395:7;1390:2;1385;1381;1377:11;1373:20;1370:33;1367:53;;;1416:1;1413;1406:12;1367:53;1471:2;1466;1462;1458:11;1453:2;1446:5;1442:14;1429:45;1515:1;1494:14;;;1490:23;;;1483:34;;;;-1:-1:-1;1498:5:1;724:823;-1:-1:-1;;;724:823:1:o;1552:154::-;-1:-1:-1;;;;;1631:5:1;1627:54;1620:5;1617:65;1607:93;;1696:1;1693;1686:12;1711:247;1770:6;1823:2;1811:9;1802:7;1798:23;1794:32;1791:52;;;1839:1;1836;1829:12;1791:52;1878:9;1865:23;1897:31;1922:5;1897:31;:::i;2155:656::-;2267:4;2296:2;2325;2314:9;2307:21;2357:6;2351:13;2400:6;2395:2;2384:9;2380:18;2373:34;2425:1;2435:140;2449:6;2446:1;2443:13;2435:140;;;2544:14;;;2540:23;;2534:30;2510:17;;;2529:2;2506:26;2499:66;2464:10;;2435:140;;;2593:6;2590:1;2587:13;2584:91;;;2663:1;2658:2;2649:6;2638:9;2634:22;2630:31;2623:42;2584:91;-1:-1:-1;2727:2:1;2715:15;2732:66;2711:88;2696:104;;;;2802:2;2692:113;;2155:656;-1:-1:-1;;;2155:656:1:o;2816:315::-;2884:6;2892;2945:2;2933:9;2924:7;2920:23;2916:32;2913:52;;;2961:1;2958;2951:12;2913:52;3000:9;2987:23;3019:31;3044:5;3019:31;:::i;:::-;3069:5;3121:2;3106:18;;;;3093:32;;-1:-1:-1;;;2816:315:1:o;3367:118::-;3453:5;3446:13;3439:21;3432:5;3429:32;3419:60;;3475:1;3472;3465:12;3490:382;3555:6;3563;3616:2;3604:9;3595:7;3591:23;3587:32;3584:52;;;3632:1;3629;3622:12;3584:52;3671:9;3658:23;3690:31;3715:5;3690:31;:::i;:::-;3740:5;-1:-1:-1;3797:2:1;3782:18;;3769:32;3810:30;3769:32;3810:30;:::i;:::-;3859:7;3849:17;;;3490:382;;;;;:::o;4135:180::-;4194:6;4247:2;4235:9;4226:7;4222:23;4218:32;4215:52;;;4263:1;4260;4253:12;4215:52;-1:-1:-1;4286:23:1;;4135:180;-1:-1:-1;4135:180:1:o;4505:456::-;4582:6;4590;4598;4651:2;4639:9;4630:7;4626:23;4622:32;4619:52;;;4667:1;4664;4657:12;4619:52;4706:9;4693:23;4725:31;4750:5;4725:31;:::i;:::-;4775:5;-1:-1:-1;4832:2:1;4817:18;;4804:32;4845:33;4804:32;4845:33;:::i;:::-;4505:456;;4897:7;;-1:-1:-1;;;4951:2:1;4936:18;;;;4923:32;;4505:456::o;5155:241::-;5211:6;5264:2;5252:9;5243:7;5239:23;5235:32;5232:52;;;5280:1;5277;5270:12;5232:52;5319:9;5306:23;5338:28;5360:5;5338:28;:::i;5401:377::-;5475:6;5483;5491;5544:2;5532:9;5523:7;5519:23;5515:32;5512:52;;;5560:1;5557;5550:12;5512:52;5596:9;5583:23;5573:33;;5653:2;5642:9;5638:18;5625:32;5615:42;;5707:2;5696:9;5692:18;5679:32;5720:28;5742:5;5720:28;:::i;:::-;5767:5;5757:15;;;5401:377;;;;;:::o;5783:316::-;5860:6;5868;5876;5929:2;5917:9;5908:7;5904:23;5900:32;5897:52;;;5945:1;5942;5935:12;5897:52;-1:-1:-1;;5968:23:1;;;6038:2;6023:18;;6010:32;;-1:-1:-1;6089:2:1;6074:18;;;6061:32;;5783:316;-1:-1:-1;5783:316:1:o;6104:388::-;6172:6;6180;6233:2;6221:9;6212:7;6208:23;6204:32;6201:52;;;6249:1;6246;6239:12;6201:52;6288:9;6275:23;6307:31;6332:5;6307:31;:::i;:::-;6357:5;-1:-1:-1;6414:2:1;6399:18;;6386:32;6427:33;6386:32;6427:33;:::i;6497:251::-;6567:6;6620:2;6608:9;6599:7;6595:23;6591:32;6588:52;;;6636:1;6633;6626:12;6588:52;6668:9;6662:16;6687:31;6712:5;6687:31;:::i;6753:184::-;6805:77;6802:1;6795:88;6902:4;6899:1;6892:15;6926:4;6923:1;6916:15;6942:484;6995:3;7033:5;7027:12;7060:6;7055:3;7048:19;7086:4;7115:2;7110:3;7106:12;7099:19;;7152:2;7145:5;7141:14;7173:1;7183:218;7197:6;7194:1;7191:13;7183:218;;;7262:13;;-1:-1:-1;;;;;7258:62:1;7246:75;;7341:12;;;;7376:15;;;;7219:1;7212:9;7183:218;;;-1:-1:-1;7417:3:1;;6942:484;-1:-1:-1;;;;;6942:484:1:o;7431:332::-;7638:6;7627:9;7620:25;7681:2;7676;7665:9;7661:18;7654:30;7601:4;7701:56;7753:2;7742:9;7738:18;7730:6;7701:56;:::i;:::-;7693:64;7431:332;-1:-1:-1;;;;7431:332:1:o;7768:936::-;7863:6;7894:2;7937;7925:9;7916:7;7912:23;7908:32;7905:52;;;7953:1;7950;7943:12;7905:52;7986:9;7980:16;8015:18;8056:2;8048:6;8045:14;8042:34;;;8072:1;8069;8062:12;8042:34;8110:6;8099:9;8095:22;8085:32;;8155:7;8148:4;8144:2;8140:13;8136:27;8126:55;;8177:1;8174;8167:12;8126:55;8206:2;8200:9;8228:2;8224;8221:10;8218:36;;;8234:18;;:::i;:::-;8280:2;8277:1;8273:10;8263:20;;8303:28;8327:2;8323;8319:11;8303:28;:::i;:::-;8365:15;;;8435:11;;;8431:20;;;8396:12;;;;8463:19;;;8460:39;;;8495:1;8492;8485:12;8460:39;8519:11;;;;8539:135;8555:6;8550:3;8547:15;8539:135;;;8621:10;;8609:23;;8572:12;;;;8652;;;;8539:135;;;8693:5;7768:936;-1:-1:-1;;;;;;;;7768:936:1:o;9070:437::-;9149:1;9145:12;;;;9192;;;9213:61;;9267:4;9259:6;9255:17;9245:27;;9213:61;9320:2;9312:6;9309:14;9289:18;9286:38;9283:218;;;9357:77;9354:1;9347:88;9458:4;9455:1;9448:15;9486:4;9483:1;9476:15;9283:218;;9070:437;;;:::o;10541:184::-;10593:77;10590:1;10583:88;10690:4;10687:1;10680:15;10714:4;10711:1;10704:15;10730:228;10770:7;10896:1;10828:66;10824:74;10821:1;10818:81;10813:1;10806:9;10799:17;10795:105;10792:131;;;10903:18;;:::i;:::-;-1:-1:-1;10943:9:1;;10730:228::o;10963:184::-;11015:77;11012:1;11005:88;11112:4;11109:1;11102:15;11136:4;11133:1;11126:15;11152:120;11192:1;11218;11208:35;;11223:18;;:::i;:::-;-1:-1:-1;11257:9:1;;11152:120::o;12822:245::-;12889:6;12942:2;12930:9;12921:7;12917:23;12913:32;12910:52;;;12958:1;12955;12948:12;12910:52;12990:9;12984:16;13009:28;13031:5;13009:28;:::i;13072:184::-;13142:6;13195:2;13183:9;13174:7;13170:23;13166:32;13163:52;;;13211:1;13208;13201:12;13163:52;-1:-1:-1;13234:16:1;;13072:184;-1:-1:-1;13072:184:1:o;13929:306::-;14017:6;14025;14033;14086:2;14074:9;14065:7;14061:23;14057:32;14054:52;;;14102:1;14099;14092:12;14054:52;14131:9;14125:16;14115:26;;14181:2;14170:9;14166:18;14160:25;14150:35;;14225:2;14214:9;14210:18;14204:25;14194:35;;13929:306;;;;;:::o;14240:128::-;14280:3;14311:1;14307:6;14304:1;14301:13;14298:39;;;14317:18;;:::i;:::-;-1:-1:-1;14353:9:1;;14240:128::o;24175:125::-;24215:4;24243:1;24240;24237:8;24234:34;;;24248:18;;:::i;:::-;-1:-1:-1;24285:9:1;;24175:125::o;25072:112::-;25104:1;25130;25120:35;;25135:18;;:::i;:::-;-1:-1:-1;25169:9:1;;25072:112::o;26927:605::-;27226:6;27215:9;27208:25;27269:6;27264:2;27253:9;27249:18;27242:34;27312:3;27307:2;27296:9;27292:18;27285:31;27189:4;27333:57;27385:3;27374:9;27370:19;27362:6;27333:57;:::i;:::-;-1:-1:-1;;;;;27426:55:1;;;;27421:2;27406:18;;27399:83;-1:-1:-1;27513:3:1;27498:19;27491:35;27325:65;26927:605;-1:-1:-1;;;26927:605:1:o

Swarm Source

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