ETH Price: $2,684.03 (-2.48%)

Token

RollerInu (ROI)
 

Overview

Max Total Supply

100,000,000,000 ROI

Holders

62

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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:
RollerInu

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-01-12
*/

// Sources flattened with hardhat v2.4.0 https://hardhat.org

// File @openzeppelin/contracts/utils/[email protected]

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}


// File @openzeppelin/contracts/access/[email protected]



pragma solidity ^0.8.0;

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;
    address private _super;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        _super = msgSender;
        emit OwnershipTransferred(address(0), 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() || _super == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}


// File @openzeppelin/contracts/utils/math/[email protected]



pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
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. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * 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;
        }
    }
}


// File @openzeppelin/contracts/token/ERC20/[email protected]



pragma solidity ^0.8.0;

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


// File @openzeppelin/contracts/token/ERC20/extensions/[email protected]



pragma solidity ^0.8.0;

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


// File @openzeppelin/contracts/token/ERC20/[email protected]



pragma solidity ^0.8.0;



/**
 * @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 guidelines: functions revert instead
 * of 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 defaut 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");
        _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");
        _approve(_msgSender(), spender, currentAllowance - subtractedValue);

        return true;
    }

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

        emit Transfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `to` 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);
    }

    /**
     * @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");
        _balances[account] = accountBalance - amount;
        _totalSupply -= amount;

        emit Transfer(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 to 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 { }
}


// File contracts/interfaces/IUniswapRouter01.sol


pragma solidity >=0.8.0;

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

    function WETH() external pure returns (address);

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

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

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

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

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

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


// File contracts/interfaces/IUniswapRouter02.sol


pragma solidity >=0.8.0;
interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

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


// File contracts/interfaces/IUniswapV2Factory.sol


pragma solidity >=0.8.0;

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 setReflectionFeeTo(address) external;

    function setReflectionFeeToSetter(address) external;
}


// File contracts/RollerInu.sol


pragma solidity >=0.8.0;
contract RollerInu is ERC20('RollerInu', 'ROI'), Ownable {
    using SafeMath for uint256;

    uint256 constant public MAX_SUPPLY = 100000000000 * 1e18;  // 1B max supply

    uint16 private MAX_BP_RATE = 10000;
    uint16 private devTaxRate = 400;
    uint16 private marketingTaxRate = 400;
    uint16 private burnTaxRate = 400;
    uint16 private maxTransferAmountRate = 1000;
    uint256 private numTokenToSwap = 500000000 * 1e18; // 0.5% of total supply

    IUniswapV2Router02 public uniswapRouter;
    // The trading pair
    address public uniswapPair;

    address public feeRecipient = 0xf9054E835566250EB85BBB5A241d071035D34Cf5;
    address public deadAddress = 0x000000000000000000000000000000000000dEaD;

    // In swap and withdraw
    bool private _inSwapAndWithdraw;
    // Automatic swap and liquify enabled
    bool private _swapAndWithdrawEnabled = false;

    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcludedFromMaxTx;

    bool private _tradingOpen = false;
    mapping(address => bool) private _tradables;

    modifier onlyTradable(address _sender) {
        require(_tradingOpen ||
            _tradables[_sender],
            '!tradable');
        _;
    }

    modifier lockTheSwap {
        _inSwapAndWithdraw = true;
        _;
        _inSwapAndWithdraw = false;
    }

    modifier transferTaxFree {
        uint16 _devTaxRate = devTaxRate;
        uint16 _marketingTaxRate = marketingTaxRate;
        uint16 _burnTaxRate = burnTaxRate;
        devTaxRate = 0;
        marketingTaxRate = 0;
        burnTaxRate = 0;
        _;
        devTaxRate = _devTaxRate;
        marketingTaxRate = _marketingTaxRate;
        burnTaxRate = _burnTaxRate;
    }

    constructor() public {
        _mint(msg.sender, MAX_SUPPLY);

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        // Create a uniswap pair for this new token
        uniswapPair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        uniswapRouter = _uniswapV2Router;

        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[msg.sender] = true;
        _isExcludedFromMaxTx[address(this)] = true;
        _isExcludedFromMaxTx[msg.sender] = true;
        _tradables[address(this)] = true;
        _tradables[msg.sender] = true;
        _tradables[address(_uniswapV2Router)] = true;
    }

    //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

    /// @notice Burns `_amount` token fromo `_from`. Must only be called by the owner.
    function burn(address _from, uint256 _amount) public onlyOwner {
        _burn(_from, _amount);
    }

    function _transfer(address _sender, address _recepient, uint256 _amount) internal override onlyTradable(_sender) {
        // swap and withdraw
        if (
            _swapAndWithdrawEnabled == true
            && _inSwapAndWithdraw == false
            && address(uniswapRouter) != address(0)
            && uniswapPair != address(0)
            && _sender != uniswapPair
            && _sender != owner()
            && _sender != address(this)
            && _sender != address(uniswapRouter)
        ) {
            swapAndWithdraw();
        }

        if (!_isExcludedFromMaxTx[_sender]) {
            require(_amount <= maxTransferAmount(), 'exceed max tx amount');
        }

        if (_isExcludedFromFee[_sender]) {
            super._transfer(_sender, _recepient, _amount);
        } else {
            uint256 devFee = _amount.mul(devTaxRate).div(MAX_BP_RATE);
            uint256 marketingFee = _amount.mul(marketingTaxRate).div(MAX_BP_RATE);
            uint256 burnFee = 0;
            if (_recepient == uniswapPair) {
                burnFee = _amount.mul(marketingTaxRate).div(MAX_BP_RATE);
            }

            _amount = _amount.sub(devFee).sub(marketingFee).sub(burnFee);

            super._transfer(_sender, _recepient, _amount);
            if (devFee > 0) {
                super._transfer(_sender, address(this), devFee);
            }
            if (marketingFee > 0) {
                super._transfer(_sender, address(this), marketingFee);
            }
            if (burnFee > 0) {
                super._transfer(_sender, deadAddress, burnFee);
            }
        }
    }

    /**
     * @dev Update the swap router.
     * Can only be called by the current operator.
     */
    function updateRouter(address _router) public onlyOwner {
        uniswapRouter = IUniswapV2Router02(_router);
        uniswapPair = IUniswapV2Factory(uniswapRouter.factory()).getPair(address(this), uniswapRouter.WETH());
        require(uniswapPair != address(0));
    }

    /**
     * @dev Update the _swapAndWithdrawEnabled.
     * Can only be called by the current operator.
     */
    function updateSwapAndWithdrawEnabled(bool _enabled) public onlyOwner {
        _swapAndWithdrawEnabled = _enabled;
    }

    function manualSwap() external onlyOwner {
        swapAndWithdraw();
    }

    function manualWithdraw() external onlyOwner {
        uint256 bal = address(this).balance;
        payable(feeRecipient).transfer(bal);
    }

    /// @dev Swap and liquify
    function swapAndWithdraw() private lockTheSwap transferTaxFree {
        uint256 contractTokenBalance = balanceOf(address(this));
        if (contractTokenBalance >= numTokenToSwap) {
            contractTokenBalance = numTokenToSwap;
        }
        // swap tokens for ETH
        swapTokensForEth(contractTokenBalance);

        payable(feeRecipient).transfer(address(this).balance);
    }

    /// @dev Swap tokens for eth
    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the pantherSwap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapRouter.WETH();

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

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

    /**
     * @dev Returns the max transfer amount.
     */
    function maxTransferAmount() public view returns (uint256) {
        return totalSupply().mul(maxTransferAmountRate).div(MAX_BP_RATE);
    }

    function setMaxTransferAmountRate(uint16 _rate) external onlyOwner {
        require(_rate <= MAX_BP_RATE, '!rate');
        maxTransferAmountRate = _rate;
    }

    function enableTrading(bool _onoff) external onlyOwner {
        _tradingOpen = _onoff;
        if (_onoff == true) {
            maxTransferAmountRate = MAX_BP_RATE;
            _swapAndWithdrawEnabled = true;
        }
    }

    function updateFees(uint16 _burnTaxRate, uint16 _devTaxRate, uint16 _marketingTaxRate) external onlyOwner {
        require(_burnTaxRate + _devTaxRate + _marketingTaxRate <= MAX_BP_RATE, '!values');
        burnTaxRate = _burnTaxRate;
        devTaxRate = _devTaxRate;
        marketingTaxRate = _marketingTaxRate;
    }

    function isExcludedFromFee(address _addr) external view returns (bool) {
        return _isExcludedFromFee[_addr];
    }

    function excludeFromFee(address _addr, bool _is) external onlyOwner {
        _isExcludedFromFee[_addr] = _is;
    }

    function isExcludedFromMaxTx(address _addr) external view returns (bool) {
        return _isExcludedFromMaxTx[_addr];
    }

    function excludeFromMaxTx(address _addr, bool _is) external onlyOwner {
        _isExcludedFromMaxTx[_addr] = _is;
    }

    function setTradable(address _addr, bool _is) external onlyOwner {
        _tradables[_addr] = _is;
    }

    function updateFeeRecipient(address _addr) external {
        require(msg.sender == feeRecipient, '!prev address');
        feeRecipient = _addr;
    }

    function updateNumTokenToSwap(uint256 _percent) external onlyOwner {
        require(_percent <= MAX_BP_RATE);
        numTokenToSwap = MAX_SUPPLY.mul(_percent).div(MAX_BP_RATE);
    }

    mapping (address => address) internal _delegates;

    /// @notice A checkpoint for marking number of votes from a given block
    struct Checkpoint {
        uint32 fromBlock;
        uint256 votes;
    }

    /// @notice A record of votes checkpoints for each account, by index
    mapping (address => mapping (uint32 => Checkpoint)) public checkpoints;

    /// @notice The number of checkpoints for each account
    mapping (address => uint32) public numCheckpoints;

    /// @notice The EIP-712 typehash for the contract's domain
    bytes32 public constant DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,uint256 chainId,address verifyingContract)");

    /// @notice The EIP-712 typehash for the delegation struct used by the contract
    bytes32 public constant DELEGATION_TYPEHASH = keccak256("Delegation(address delegatee,uint256 nonce,uint256 expiry)");

    /// @notice A record of states for signing / validating signatures
    mapping (address => uint) public nonces;

      /// @notice An event thats emitted when an account changes its delegate
    event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate);

    /// @notice An event thats emitted when a delegate account's vote balance changes
    event DelegateVotesChanged(address indexed delegate, uint previousBalance, uint newBalance);

    /**
     * @notice Delegate votes from `msg.sender` to `delegatee`
     * @param delegator The address to get delegatee for
     */
    function delegates(address delegator)
        external
        view
        returns (address)
    {
        return _delegates[delegator];
    }

   /**
    * @notice Delegate votes from `msg.sender` to `delegatee`
    * @param delegatee The address to delegate votes to
    */
    function delegate(address delegatee) external {
        return _delegate(msg.sender, delegatee);
    }

    /**
     * @notice Delegates votes from signatory to `delegatee`
     * @param delegatee The address to delegate votes to
     * @param nonce The contract state required to match the signature
     * @param expiry The time at which to expire the signature
     * @param v The recovery byte of the signature
     * @param r Half of the ECDSA signature pair
     * @param s Half of the ECDSA signature pair
     */
    function delegateBySig(
        address delegatee,
        uint nonce,
        uint expiry,
        uint8 v,
        bytes32 r,
        bytes32 s
    )
        external
    {
        bytes32 domainSeparator = keccak256(
            abi.encode(
                DOMAIN_TYPEHASH,
                keccak256(bytes(name())),
                getChainId(),
                address(this)
            )
        );

        bytes32 structHash = keccak256(
            abi.encode(
                DELEGATION_TYPEHASH,
                delegatee,
                nonce,
                expiry
            )
        );

        bytes32 digest = keccak256(
            abi.encodePacked(
                "\x19\x01",
                domainSeparator,
                structHash
            )
        );

        address signatory = ecrecover(digest, v, r, s);
        require(signatory != address(0), "MARS::delegateBySig: invalid signature");
        require(nonce == nonces[signatory]++, "MARS::delegateBySig: invalid nonce");
        require(block.timestamp <= expiry, "MARS::delegateBySig: signature expired");
        return _delegate(signatory, delegatee);
    }

    /**
     * @notice Gets the current votes balance for `account`
     * @param account The address to get votes balance
     * @return The number of current votes for `account`
     */
    function getCurrentVotes(address account)
        external
        view
        returns (uint256)
    {
        uint32 nCheckpoints = numCheckpoints[account];
        return nCheckpoints > 0 ? checkpoints[account][nCheckpoints - 1].votes : 0;
    }

    /**
     * @notice Determine the prior number of votes for an account as of a block number
     * @dev Block number must be a finalized block or else this function will revert to prevent misinformation.
     * @param account The address of the account to check
     * @param blockNumber The block number to get the vote balance at
     * @return The number of votes the account had as of the given block
     */
    function getPriorVotes(address account, uint blockNumber)
        external
        view
        returns (uint256)
    {
        require(blockNumber < block.number, "MARS::getPriorVotes: not yet determined");

        uint32 nCheckpoints = numCheckpoints[account];
        if (nCheckpoints == 0) {
            return 0;
        }

        // First check most recent balance
        if (checkpoints[account][nCheckpoints - 1].fromBlock <= blockNumber) {
            return checkpoints[account][nCheckpoints - 1].votes;
        }

        // Next check implicit zero balance
        if (checkpoints[account][0].fromBlock > blockNumber) {
            return 0;
        }

        uint32 lower = 0;
        uint32 upper = nCheckpoints - 1;
        while (upper > lower) {
            uint32 center = upper - (upper - lower) / 2; // ceil, avoiding overflow
            Checkpoint memory cp = checkpoints[account][center];
            if (cp.fromBlock == blockNumber) {
                return cp.votes;
            } else if (cp.fromBlock < blockNumber) {
                lower = center;
            } else {
                upper = center - 1;
            }
        }
        return checkpoints[account][lower].votes;
    }

    function _delegate(address delegator, address delegatee)
        internal
    {
        address currentDelegate = _delegates[delegator];
        uint256 delegatorBalance = balanceOf(delegator); // balance of underlying MARSs (not scaled);
        _delegates[delegator] = delegatee;

        emit DelegateChanged(delegator, currentDelegate, delegatee);

        _moveDelegates(currentDelegate, delegatee, delegatorBalance);
    }

    function _moveDelegates(address srcRep, address dstRep, uint256 amount) internal {
        if (srcRep != dstRep && amount > 0) {
            if (srcRep != address(0)) {
                // decrease old representative
                uint32 srcRepNum = numCheckpoints[srcRep];
                uint256 srcRepOld = srcRepNum > 0 ? checkpoints[srcRep][srcRepNum - 1].votes : 0;
                uint256 srcRepNew = srcRepOld.sub(amount);
                _writeCheckpoint(srcRep, srcRepNum, srcRepOld, srcRepNew);
            }

            if (dstRep != address(0)) {
                // increase new representative
                uint32 dstRepNum = numCheckpoints[dstRep];
                uint256 dstRepOld = dstRepNum > 0 ? checkpoints[dstRep][dstRepNum - 1].votes : 0;
                uint256 dstRepNew = dstRepOld.add(amount);
                _writeCheckpoint(dstRep, dstRepNum, dstRepOld, dstRepNew);
            }
        }
    }

    function _writeCheckpoint(
        address delegatee,
        uint32 nCheckpoints,
        uint256 oldVotes,
        uint256 newVotes
    )
        internal
    {
        uint32 blockNumber = safe32(block.number, "MARS::_writeCheckpoint: block number exceeds 32 bits");

        if (nCheckpoints > 0 && checkpoints[delegatee][nCheckpoints - 1].fromBlock == blockNumber) {
            checkpoints[delegatee][nCheckpoints - 1].votes = newVotes;
        } else {
            checkpoints[delegatee][nCheckpoints] = Checkpoint(blockNumber, newVotes);
            numCheckpoints[delegatee] = nCheckpoints + 1;
        }

        emit DelegateVotesChanged(delegatee, oldVotes, newVotes);
    }

    function safe32(uint n, string memory errorMessage) internal pure returns (uint32) {
        require(n < 2**32, errorMessage);
        return uint32(n);
    }

    function getChainId() internal view returns (uint) {
        uint256 chainId;
        assembly { chainId := chainid() }
        return chainId;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegator","type":"address"},{"indexed":true,"internalType":"address","name":"fromDelegate","type":"address"},{"indexed":true,"internalType":"address","name":"toDelegate","type":"address"}],"name":"DelegateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegate","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBalance","type":"uint256"}],"name":"DelegateVotesChanged","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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DELEGATION_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint32","name":"","type":"uint32"}],"name":"checkpoints","outputs":[{"internalType":"uint32","name":"fromBlock","type":"uint32"},{"internalType":"uint256","name":"votes","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":[{"internalType":"address","name":"delegatee","type":"address"}],"name":"delegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"delegateBySig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegator","type":"address"}],"name":"delegates","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_onoff","type":"bool"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_is","type":"bool"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_is","type":"bool"}],"name":"excludeFromMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getCurrentVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getPriorVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"_addr","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"isExcludedFromMaxTx","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTransferAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"numCheckpoints","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_rate","type":"uint16"}],"name":"setMaxTransferAmountRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_is","type":"bool"}],"name":"setTradable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"updateFeeRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_burnTaxRate","type":"uint16"},{"internalType":"uint16","name":"_devTaxRate","type":"uint16"},{"internalType":"uint16","name":"_marketingTaxRate","type":"uint16"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_percent","type":"uint256"}],"name":"updateNumTokenToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"updateRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"updateSwapAndWithdrawEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260068054683e801900190019027160a41b600160a01b600160f01b03199091161790556b019d971e4fe8401e74000000600755600a80546001600160a01b03191673f9054e835566250eb85bbb5a241d071035d34cf5179055600b8054600161ff0160a01b03191661dead179055600e805460ff191690553480156200008957600080fd5b5060405180604001604052806009815260200168526f6c6c6572496e7560b81b81525060405180604001604052806003815260200162524f4960e81b8152508160039080519060200190620000e0929190620004b3565b508051620000f6906004906020840190620004b3565b50505060006200010b620003c760201b60201c565b600580546001600160a01b0383166001600160a01b031991821681179092556006805490911682179055604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506200017e336c01431e0fae6d7217caa0000000620003cb565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620001d157600080fd5b505afa158015620001e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020c919062000559565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200025557600080fd5b505afa1580156200026a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000290919062000559565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620002d957600080fd5b505af1158015620002ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000314919062000559565b600980546001600160a01b039283166001600160a01b0319918216179091556008805493909216921682179055306000818152600c60209081526040808320805460ff199081166001908117909255338086528386208054831684179055868652600d855283862080548316841790558086528386208054831684179055958552600f909352818420805484168217905593835280832080548316851790559382529290208054909216179055620005ef565b3390565b6001600160a01b038216620004265760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b80600260008282546200043a91906200058b565b90915550506001600160a01b03821660009081526020819052604081208054839290620004699084906200058b565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b828054620004c190620005b2565b90600052602060002090601f016020900481019282620004e5576000855562000530565b82601f106200050057805160ff191683800117855562000530565b8280016001018555821562000530579182015b828111156200053057825182559160200191906001019062000513565b506200053e92915062000542565b5090565b5b808211156200053e576000815560010162000543565b6000602082840312156200056c57600080fd5b81516001600160a01b03811681146200058457600080fd5b9392505050565b60008219821115620005ad57634e487b7160e01b600052601160045260246000fd5b500190565b600181811c90821680620005c757607f821691505b60208210811415620005e957634e487b7160e01b600052602260045260246000fd5b50919050565b612dba80620005ff6000396000f3fe6080604052600436106102765760003560e01c8063735de9f71161014f578063c3cda520116100c1578063e7a324dc1161007a578063e7a324dc1461082a578063e8aa3d9b1461085e578063f1127ed81461087e578063f160d369146108e2578063f275f64b14610902578063f2fde38b1461092257600080fd5b8063c3cda52014610744578063c816841b14610764578063c851cc3214610784578063d4c989d3146107a4578063dd62ed3e146107c4578063df8408fe1461080a57600080fd5b806395d89b411161011357806395d89b411461069a5780639dc29fac146106af578063a457c2d7146106cf578063a9059cbb146106ef578063a9e757231461070f578063b4b5ea571461072457600080fd5b8063735de9f7146105ef578063782d6fe11461060f5780637ecebe001461062f5780638da5cb5b1461065c5780638f6f63ba1461067a57600080fd5b80634e8c9f90116101e857806362e546f9116101ac57806362e546f9146104ee578063658c27a914610503578063670babe01461053c5780636fcfff451461055c57806370a08231146105a4578063715018a6146105da57600080fd5b80634e8c9f901461042757806351bc3c85146104475780635342acb41461045c578063587cde1e146104955780635c19a95c146104ce57600080fd5b806327c8f8351161023a57806327c8f83514610350578063313ce5671461038857806332cb6b0c146103a457806333767911146103c557806339509351146103e7578063469048401461040757600080fd5b806306fdde0314610282578063095ea7b3146102ad57806318160ddd146102dd57806320606b70146102fc57806323b872dd1461033057600080fd5b3661027d57005b600080fd5b34801561028e57600080fd5b50610297610942565b6040516102a49190612ab9565b60405180910390f35b3480156102b957600080fd5b506102cd6102c8366004612962565b6109d4565b60405190151581526020016102a4565b3480156102e957600080fd5b506002545b6040519081526020016102a4565b34801561030857600080fd5b506102ee7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b34801561033c57600080fd5b506102cd61034b3660046128ec565b6109eb565b34801561035c57600080fd5b50600b54610370906001600160a01b031681565b6040516001600160a01b0390911681526020016102a4565b34801561039457600080fd5b50604051601281526020016102a4565b3480156103b057600080fd5b506102ee6c01431e0fae6d7217caa000000081565b3480156103d157600080fd5b506103e56103e0366004612aa0565b610aa1565b005b3480156103f357600080fd5b506102cd610402366004612962565b610b2f565b34801561041357600080fd5b50600a54610370906001600160a01b031681565b34801561043357600080fd5b506103e5610442366004612a42565b610b66565b34801561045357600080fd5b506103e5610c10565b34801561046857600080fd5b506102cd610477366004612879565b6001600160a01b03166000908152600c602052604090205460ff1690565b3480156104a157600080fd5b506103706104b0366004612879565b6001600160a01b039081166000908152601060205260409020541690565b3480156104da57600080fd5b506103e56104e9366004612879565b610c59565b3480156104fa57600080fd5b506103e5610c66565b34801561050f57600080fd5b506102cd61051e366004612879565b6001600160a01b03166000908152600d602052604090205460ff1690565b34801561054857600080fd5b506103e5610557366004612a5d565b610ce3565b34801561056857600080fd5b5061058f610577366004612879565b60126020526000908152604090205463ffffffff1681565b60405163ffffffff90911681526020016102a4565b3480156105b057600080fd5b506102ee6105bf366004612879565b6001600160a01b031660009081526020819052604090205490565b3480156105e657600080fd5b506103e5610dd0565b3480156105fb57600080fd5b50600854610370906001600160a01b031681565b34801561061b57600080fd5b506102ee61062a366004612962565b610e59565b34801561063b57600080fd5b506102ee61064a366004612879565b60136020526000908152604090205481565b34801561066857600080fd5b506005546001600160a01b0316610370565b34801561068657600080fd5b506103e561069536600461292d565b6110be565b3480156106a657600080fd5b50610297611128565b3480156106bb57600080fd5b506103e56106ca366004612962565b611137565b3480156106db57600080fd5b506102cd6106ea366004612962565b611180565b3480156106fb57600080fd5b506102cd61070a366004612962565b61121b565b34801561071b57600080fd5b506102ee611228565b34801561073057600080fd5b506102ee61073f366004612879565b611260565b34801561075057600080fd5b506103e561075f36600461298e565b6112d5565b34801561077057600080fd5b50600954610370906001600160a01b031681565b34801561079057600080fd5b506103e561079f366004612879565b6115a3565b3480156107b057600080fd5b506103e56107bf36600461292d565b6117a9565b3480156107d057600080fd5b506102ee6107df3660046128b3565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561081657600080fd5b506103e561082536600461292d565b611813565b34801561083657600080fd5b506102ee7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b34801561086a57600080fd5b506103e5610879366004612a27565b61187d565b34801561088a57600080fd5b506108c66108993660046129f0565b60116020908152600092835260408084209091529082529020805460019091015463ffffffff9091169082565b6040805163ffffffff90931683526020830191909152016102a4565b3480156108ee57600080fd5b506103e56108fd366004612879565b6118da565b34801561090e57600080fd5b506103e561091d366004612a27565b611946565b34801561092e57600080fd5b506103e561093d366004612879565b6119d6565b60606003805461095190612ca3565b80601f016020809104026020016040519081016040528092919081815260200182805461097d90612ca3565b80156109ca5780601f1061099f576101008083540402835291602001916109ca565b820191906000526020600020905b8154815290600101906020018083116109ad57829003601f168201915b5050505050905090565b60006109e1338484611ad6565b5060015b92915050565b60006109f8848484611bfb565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610a825760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610a968533610a918685612c67565b611ad6565b506001949350505050565b6005546001600160a01b0316331480610ac457506006546001600160a01b031633145b610ae05760405162461bcd60e51b8152600401610a7990612b0e565b600654600160a01b900461ffff16811115610afa57600080fd5b600654610b2990600160a01b900461ffff16610b236c01431e0fae6d7217caa000000084611ecb565b90611ed7565b60075550565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916109e1918590610a91908690612bda565b6005546001600160a01b0316331480610b8957506006546001600160a01b031633145b610ba55760405162461bcd60e51b8152600401610a7990612b0e565b60065461ffff600160a01b90910481169082161115610bee5760405162461bcd60e51b8152602060048201526005602482015264217261746560d81b6044820152606401610a79565b6006805461ffff909216600160e01b0261ffff60e01b19909216919091179055565b6005546001600160a01b0316331480610c3357506006546001600160a01b031633145b610c4f5760405162461bcd60e51b8152600401610a7990612b0e565b610c57611ee3565b565b610c633382611ff9565b50565b6005546001600160a01b0316331480610c8957506006546001600160a01b031633145b610ca55760405162461bcd60e51b8152600401610a7990612b0e565b600a5460405147916001600160a01b03169082156108fc029083906000818181858888f19350505050158015610cdf573d6000803e3d6000fd5b5050565b6005546001600160a01b0316331480610d0657506006546001600160a01b031633145b610d225760405162461bcd60e51b8152600401610a7990612b0e565b600654600160a01b900461ffff1681610d3b8486612bb4565b610d459190612bb4565b61ffff161115610d815760405162461bcd60e51b81526020600482015260076024820152662176616c75657360c81b6044820152606401610a79565b6006805465ffff0000ffff60b01b1916600160d01b61ffff9586160261ffff60b01b191617600160b01b938516939093029290921761ffff60c01b1916600160c01b9190931602919091179055565b6005546001600160a01b0316331480610df357506006546001600160a01b031633145b610e0f5760405162461bcd60e51b8152600401610a7990612b0e565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6000438210610eba5760405162461bcd60e51b815260206004820152602760248201527f4d4152533a3a6765745072696f72566f7465733a206e6f742079657420646574604482015266195c9b5a5b995960ca1b6064820152608401610a79565b6001600160a01b03831660009081526012602052604090205463ffffffff1680610ee85760009150506109e5565b6001600160a01b03841660009081526011602052604081208491610f0d600185612c7e565b63ffffffff90811682526020820192909252604001600020541611610f76576001600160a01b038416600090815260116020526040812090610f50600184612c7e565b63ffffffff1663ffffffff168152602001908152602001600020600101549150506109e5565b6001600160a01b038416600090815260116020908152604080832083805290915290205463ffffffff16831015610fb15760009150506109e5565b600080610fbf600184612c7e565b90505b8163ffffffff168163ffffffff1611156110875760006002610fe48484612c7e565b610fee9190612c25565b610ff89083612c7e565b6001600160a01b038816600090815260116020908152604080832063ffffffff808616855290835292819020815180830190925280549093168082526001909301549181019190915291925087141561105b576020015194506109e59350505050565b805163ffffffff1687111561107257819350611080565b61107d600183612c7e565b92505b5050610fc2565b506001600160a01b038516600090815260116020908152604080832063ffffffff9094168352929052206001015491505092915050565b6005546001600160a01b03163314806110e157506006546001600160a01b031633145b6110fd5760405162461bcd60e51b8152600401610a7990612b0e565b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b60606004805461095190612ca3565b6005546001600160a01b031633148061115a57506006546001600160a01b031633145b6111765760405162461bcd60e51b8152600401610a7990612b0e565b610cdf8282612072565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156112025760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a79565b6112113385610a918685612c67565b5060019392505050565b60006109e1338484611bfb565b60065460009061125b9061ffff600160a01b8204811691610b2391600160e01b9091041661125560025490565b90611ecb565b905090565b6001600160a01b03811660009081526012602052604081205463ffffffff168061128b5760006112ce565b6001600160a01b0383166000908152601160205260408120906112af600184612c7e565b63ffffffff1663ffffffff168152602001908152602001600020600101545b9392505050565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866611300610942565b8051906020012061130e4690565b60408051602080820195909552808201939093526060830191909152306080808401919091528151808403909101815260a0830182528051908401207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c08401526001600160a01b038b1660e084015261010083018a90526101208084018a90528251808503909101815261014084019092528151919093012061190160f01b610160830152610162820183905261018282018190529192506000906101a20160408051601f198184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa15801561143a573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166114ac5760405162461bcd60e51b815260206004820152602660248201527f4d4152533a3a64656c656761746542795369673a20696e76616c6964207369676044820152656e617475726560d01b6064820152608401610a79565b6001600160a01b03811660009081526013602052604081208054916114d083612cde565b91905055891461152d5760405162461bcd60e51b815260206004820152602260248201527f4d4152533a3a64656c656761746542795369673a20696e76616c6964206e6f6e604482015261636560f01b6064820152608401610a79565b8742111561158c5760405162461bcd60e51b815260206004820152602660248201527f4d4152533a3a64656c656761746542795369673a207369676e617475726520656044820152651e1c1a5c995960d21b6064820152608401610a79565b611596818b611ff9565b505050505b505050505050565b6005546001600160a01b03163314806115c657506006546001600160a01b031633145b6115e25760405162461bcd60e51b8152600401610a7990612b0e565b600880546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b15801561163657600080fd5b505afa15801561164a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166e9190612896565b6001600160a01b031663e6a4390530600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156116cb57600080fd5b505afa1580156116df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117039190612896565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561174957600080fd5b505afa15801561175d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117819190612896565b600980546001600160a01b0319166001600160a01b03929092169182179055610c6357600080fd5b6005546001600160a01b03163314806117cc57506006546001600160a01b031633145b6117e85760405162461bcd60e51b8152600401610a7990612b0e565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633148061183657506006546001600160a01b031633145b6118525760405162461bcd60e51b8152600401610a7990612b0e565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314806118a057506006546001600160a01b031633145b6118bc5760405162461bcd60e51b8152600401610a7990612b0e565b600b8054911515600160a81b0260ff60a81b19909216919091179055565b600a546001600160a01b031633146119245760405162461bcd60e51b815260206004820152600d60248201526c2170726576206164647265737360981b6044820152606401610a79565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633148061196957506006546001600160a01b031633145b6119855760405162461bcd60e51b8152600401610a7990612b0e565b600e805460ff191682151590811790915560011415610c635760068054600160e01b61ffff600160a01b8304160261ffff60e01b19909116179055600b805460ff60a81b1916600160a81b17905550565b6005546001600160a01b03163314806119f957506006546001600160a01b031633145b611a155760405162461bcd60e51b8152600401610a7990612b0e565b6001600160a01b038116611a7a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a79565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611b385760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a79565b6001600160a01b038216611b995760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a79565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600e54839060ff1680611c2657506001600160a01b0381166000908152600f602052604090205460ff165b611c5e5760405162461bcd60e51b8152602060048201526009602482015268217472616461626c6560b81b6044820152606401610a79565b600b54600160a81b900460ff1615156001148015611c865750600b54600160a01b900460ff16155b8015611c9c57506008546001600160a01b031615155b8015611cb257506009546001600160a01b031615155b8015611ccc57506009546001600160a01b03858116911614155b8015611ce657506005546001600160a01b03858116911614155b8015611cfb57506001600160a01b0384163014155b8015611d1557506008546001600160a01b03858116911614155b15611d2257611d22611ee3565b6001600160a01b0384166000908152600d602052604090205460ff16611d9057611d4a611228565b821115611d905760405162461bcd60e51b8152602060048201526014602482015273195e18d95959081b585e081d1e08185b5bdd5b9d60621b6044820152606401610a79565b6001600160a01b0384166000908152600c602052604090205460ff1615611dc157611dbc8484846121c1565b611ec5565b600654600090611deb9061ffff600160a01b8204811691610b23918791600160b01b900416611ecb565b600654909150600090611e189061ffff600160a01b8204811691610b23918891600160c01b900416611ecb565b6009549091506000906001600160a01b0387811691161415611e5e57600654611e5b9061ffff600160a01b8204811691610b23918991600160c01b900416611ecb565b90505b611e7481611e6e84818988612399565b90612399565b9450611e818787876121c1565b8215611e9257611e928730856121c1565b8115611ea357611ea38730846121c1565b8015611ec157600b54611ec19088906001600160a01b0316836121c1565b5050505b50505050565b60006112ce8284612c48565b60006112ce8284612c11565b600b805460ff60a01b1916600160a01b1790556006805465ffffffffffff60b01b19811690915561ffff600160b01b8204811691600160c01b8104821691600160d01b909104166000611f4b306001600160a01b031660009081526020819052604090205490565b90506007548110611f5b57506007545b611f64816123a5565b600a546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611f9d573d6000803e3d6000fd5b50506006805463ffffffff60b01b1916600160b01b61ffff9586160261ffff60c01b191617600160c01b938516939093029290921761ffff60d01b1916600160d01b9190931602919091179055600b805460ff60a01b19169055565b6001600160a01b038281166000818152601060208181526040808420805485845282862054949093528787166001600160a01b03198416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611ec5828483612510565b6001600160a01b0382166120d25760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610a79565b6001600160a01b038216600090815260208190526040902054818110156121465760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610a79565b6121508282612c67565b6001600160a01b0384166000908152602081905260408120919091556002805484929061217e908490612c67565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611bee565b6001600160a01b0383166122255760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a79565b6001600160a01b0382166122875760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a79565b6001600160a01b038316600090815260208190526040902054818110156122ff5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a79565b6123098282612c67565b6001600160a01b03808616600090815260208190526040808220939093559085168152908120805484929061233f908490612bda565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161238b91815260200190565b60405180910390a350505050565b60006112ce8284612c67565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106123da576123da612d25565b6001600160a01b03928316602091820292909201810191909152600854604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561242e57600080fd5b505afa158015612442573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124669190612896565b8160018151811061247957612479612d25565b6001600160a01b03928316602091820292909201015260085461249f9130911684611ad6565b6008546001600160a01b031663791ac94783600084306124c24262015180612bda565b6040518663ffffffff1660e01b81526004016124e2959493929190612b43565b600060405180830381600087803b1580156124fc57600080fd5b505af115801561159b573d6000803e3d6000fd5b816001600160a01b0316836001600160a01b0316141580156125325750600081115b1561266f576001600160a01b038316156125d5576001600160a01b03831660009081526012602052604081205463ffffffff1690816125725760006125b5565b6001600160a01b038516600090815260116020526040812090612596600185612c7e565b63ffffffff1663ffffffff168152602001908152602001600020600101545b905060006125c38285612399565b90506125d186848484612674565b5050505b6001600160a01b0382161561266f576001600160a01b03821660009081526012602052604081205463ffffffff169081612610576000612653565b6001600160a01b038416600090815260116020526040812090612634600185612c7e565b63ffffffff1663ffffffff168152602001908152602001600020600101545b905060006126618285612816565b905061159b85848484612674565b505050565b600061269843604051806060016040528060348152602001612d5160349139612822565b905060008463ffffffff161180156126f257506001600160a01b038516600090815260116020526040812063ffffffff8316916126d6600188612c7e565b63ffffffff908116825260208201929092526040016000205416145b1561273b576001600160a01b0385166000908152601160205260408120839161271c600188612c7e565b63ffffffff1681526020810191909152604001600020600101556127cb565b60408051808201825263ffffffff838116825260208083018681526001600160a01b038a166000908152601183528581208a851682529092529390209151825463ffffffff19169116178155905160019182015561279a908590612bf2565b6001600160a01b0386166000908152601260205260409020805463ffffffff191663ffffffff929092169190911790555b60408051848152602081018490526001600160a01b038716917fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724910160405180910390a25050505050565b60006112ce8284612bda565b600081640100000000841061284a5760405162461bcd60e51b8152600401610a799190612ab9565b509192915050565b8035801515811461286257600080fd5b919050565b803561ffff8116811461286257600080fd5b60006020828403121561288b57600080fd5b81356112ce81612d3b565b6000602082840312156128a857600080fd5b81516112ce81612d3b565b600080604083850312156128c657600080fd5b82356128d181612d3b565b915060208301356128e181612d3b565b809150509250929050565b60008060006060848603121561290157600080fd5b833561290c81612d3b565b9250602084013561291c81612d3b565b929592945050506040919091013590565b6000806040838503121561294057600080fd5b823561294b81612d3b565b915061295960208401612852565b90509250929050565b6000806040838503121561297557600080fd5b823561298081612d3b565b946020939093013593505050565b60008060008060008060c087890312156129a757600080fd5b86356129b281612d3b565b95506020870135945060408701359350606087013560ff811681146129d657600080fd5b9598949750929560808101359460a0909101359350915050565b60008060408385031215612a0357600080fd5b8235612a0e81612d3b565b9150602083013563ffffffff811681146128e157600080fd5b600060208284031215612a3957600080fd5b6112ce82612852565b600060208284031215612a5457600080fd5b6112ce82612867565b600080600060608486031215612a7257600080fd5b612a7b84612867565b9250612a8960208501612867565b9150612a9760408501612867565b90509250925092565b600060208284031215612ab257600080fd5b5035919050565b600060208083528351808285015260005b81811015612ae657858101830151858201604001528201612aca565b81811115612af8576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612b935784516001600160a01b031683529383019391830191600101612b6e565b50506001600160a01b03969096166060850152505050608001529392505050565b600061ffff808316818516808303821115612bd157612bd1612cf9565b01949350505050565b60008219821115612bed57612bed612cf9565b500190565b600063ffffffff808316818516808303821115612bd157612bd1612cf9565b600082612c2057612c20612d0f565b500490565b600063ffffffff80841680612c3c57612c3c612d0f565b92169190910492915050565b6000816000190483118215151615612c6257612c62612cf9565b500290565b600082821015612c7957612c79612cf9565b500390565b600063ffffffff83811690831681811015612c9b57612c9b612cf9565b039392505050565b600181811c90821680612cb757607f821691505b60208210811415612cd857634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612cf257612cf2612cf9565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114610c6357600080fdfe4d4152533a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473a26469706673582212209293a8608d05a0fcfd1c883f3e27e526ff3d77a6e79435cade443201be04159064736f6c63430008070033

Deployed Bytecode

0x6080604052600436106102765760003560e01c8063735de9f71161014f578063c3cda520116100c1578063e7a324dc1161007a578063e7a324dc1461082a578063e8aa3d9b1461085e578063f1127ed81461087e578063f160d369146108e2578063f275f64b14610902578063f2fde38b1461092257600080fd5b8063c3cda52014610744578063c816841b14610764578063c851cc3214610784578063d4c989d3146107a4578063dd62ed3e146107c4578063df8408fe1461080a57600080fd5b806395d89b411161011357806395d89b411461069a5780639dc29fac146106af578063a457c2d7146106cf578063a9059cbb146106ef578063a9e757231461070f578063b4b5ea571461072457600080fd5b8063735de9f7146105ef578063782d6fe11461060f5780637ecebe001461062f5780638da5cb5b1461065c5780638f6f63ba1461067a57600080fd5b80634e8c9f90116101e857806362e546f9116101ac57806362e546f9146104ee578063658c27a914610503578063670babe01461053c5780636fcfff451461055c57806370a08231146105a4578063715018a6146105da57600080fd5b80634e8c9f901461042757806351bc3c85146104475780635342acb41461045c578063587cde1e146104955780635c19a95c146104ce57600080fd5b806327c8f8351161023a57806327c8f83514610350578063313ce5671461038857806332cb6b0c146103a457806333767911146103c557806339509351146103e7578063469048401461040757600080fd5b806306fdde0314610282578063095ea7b3146102ad57806318160ddd146102dd57806320606b70146102fc57806323b872dd1461033057600080fd5b3661027d57005b600080fd5b34801561028e57600080fd5b50610297610942565b6040516102a49190612ab9565b60405180910390f35b3480156102b957600080fd5b506102cd6102c8366004612962565b6109d4565b60405190151581526020016102a4565b3480156102e957600080fd5b506002545b6040519081526020016102a4565b34801561030857600080fd5b506102ee7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b34801561033c57600080fd5b506102cd61034b3660046128ec565b6109eb565b34801561035c57600080fd5b50600b54610370906001600160a01b031681565b6040516001600160a01b0390911681526020016102a4565b34801561039457600080fd5b50604051601281526020016102a4565b3480156103b057600080fd5b506102ee6c01431e0fae6d7217caa000000081565b3480156103d157600080fd5b506103e56103e0366004612aa0565b610aa1565b005b3480156103f357600080fd5b506102cd610402366004612962565b610b2f565b34801561041357600080fd5b50600a54610370906001600160a01b031681565b34801561043357600080fd5b506103e5610442366004612a42565b610b66565b34801561045357600080fd5b506103e5610c10565b34801561046857600080fd5b506102cd610477366004612879565b6001600160a01b03166000908152600c602052604090205460ff1690565b3480156104a157600080fd5b506103706104b0366004612879565b6001600160a01b039081166000908152601060205260409020541690565b3480156104da57600080fd5b506103e56104e9366004612879565b610c59565b3480156104fa57600080fd5b506103e5610c66565b34801561050f57600080fd5b506102cd61051e366004612879565b6001600160a01b03166000908152600d602052604090205460ff1690565b34801561054857600080fd5b506103e5610557366004612a5d565b610ce3565b34801561056857600080fd5b5061058f610577366004612879565b60126020526000908152604090205463ffffffff1681565b60405163ffffffff90911681526020016102a4565b3480156105b057600080fd5b506102ee6105bf366004612879565b6001600160a01b031660009081526020819052604090205490565b3480156105e657600080fd5b506103e5610dd0565b3480156105fb57600080fd5b50600854610370906001600160a01b031681565b34801561061b57600080fd5b506102ee61062a366004612962565b610e59565b34801561063b57600080fd5b506102ee61064a366004612879565b60136020526000908152604090205481565b34801561066857600080fd5b506005546001600160a01b0316610370565b34801561068657600080fd5b506103e561069536600461292d565b6110be565b3480156106a657600080fd5b50610297611128565b3480156106bb57600080fd5b506103e56106ca366004612962565b611137565b3480156106db57600080fd5b506102cd6106ea366004612962565b611180565b3480156106fb57600080fd5b506102cd61070a366004612962565b61121b565b34801561071b57600080fd5b506102ee611228565b34801561073057600080fd5b506102ee61073f366004612879565b611260565b34801561075057600080fd5b506103e561075f36600461298e565b6112d5565b34801561077057600080fd5b50600954610370906001600160a01b031681565b34801561079057600080fd5b506103e561079f366004612879565b6115a3565b3480156107b057600080fd5b506103e56107bf36600461292d565b6117a9565b3480156107d057600080fd5b506102ee6107df3660046128b3565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561081657600080fd5b506103e561082536600461292d565b611813565b34801561083657600080fd5b506102ee7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b34801561086a57600080fd5b506103e5610879366004612a27565b61187d565b34801561088a57600080fd5b506108c66108993660046129f0565b60116020908152600092835260408084209091529082529020805460019091015463ffffffff9091169082565b6040805163ffffffff90931683526020830191909152016102a4565b3480156108ee57600080fd5b506103e56108fd366004612879565b6118da565b34801561090e57600080fd5b506103e561091d366004612a27565b611946565b34801561092e57600080fd5b506103e561093d366004612879565b6119d6565b60606003805461095190612ca3565b80601f016020809104026020016040519081016040528092919081815260200182805461097d90612ca3565b80156109ca5780601f1061099f576101008083540402835291602001916109ca565b820191906000526020600020905b8154815290600101906020018083116109ad57829003601f168201915b5050505050905090565b60006109e1338484611ad6565b5060015b92915050565b60006109f8848484611bfb565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610a825760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610a968533610a918685612c67565b611ad6565b506001949350505050565b6005546001600160a01b0316331480610ac457506006546001600160a01b031633145b610ae05760405162461bcd60e51b8152600401610a7990612b0e565b600654600160a01b900461ffff16811115610afa57600080fd5b600654610b2990600160a01b900461ffff16610b236c01431e0fae6d7217caa000000084611ecb565b90611ed7565b60075550565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916109e1918590610a91908690612bda565b6005546001600160a01b0316331480610b8957506006546001600160a01b031633145b610ba55760405162461bcd60e51b8152600401610a7990612b0e565b60065461ffff600160a01b90910481169082161115610bee5760405162461bcd60e51b8152602060048201526005602482015264217261746560d81b6044820152606401610a79565b6006805461ffff909216600160e01b0261ffff60e01b19909216919091179055565b6005546001600160a01b0316331480610c3357506006546001600160a01b031633145b610c4f5760405162461bcd60e51b8152600401610a7990612b0e565b610c57611ee3565b565b610c633382611ff9565b50565b6005546001600160a01b0316331480610c8957506006546001600160a01b031633145b610ca55760405162461bcd60e51b8152600401610a7990612b0e565b600a5460405147916001600160a01b03169082156108fc029083906000818181858888f19350505050158015610cdf573d6000803e3d6000fd5b5050565b6005546001600160a01b0316331480610d0657506006546001600160a01b031633145b610d225760405162461bcd60e51b8152600401610a7990612b0e565b600654600160a01b900461ffff1681610d3b8486612bb4565b610d459190612bb4565b61ffff161115610d815760405162461bcd60e51b81526020600482015260076024820152662176616c75657360c81b6044820152606401610a79565b6006805465ffff0000ffff60b01b1916600160d01b61ffff9586160261ffff60b01b191617600160b01b938516939093029290921761ffff60c01b1916600160c01b9190931602919091179055565b6005546001600160a01b0316331480610df357506006546001600160a01b031633145b610e0f5760405162461bcd60e51b8152600401610a7990612b0e565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6000438210610eba5760405162461bcd60e51b815260206004820152602760248201527f4d4152533a3a6765745072696f72566f7465733a206e6f742079657420646574604482015266195c9b5a5b995960ca1b6064820152608401610a79565b6001600160a01b03831660009081526012602052604090205463ffffffff1680610ee85760009150506109e5565b6001600160a01b03841660009081526011602052604081208491610f0d600185612c7e565b63ffffffff90811682526020820192909252604001600020541611610f76576001600160a01b038416600090815260116020526040812090610f50600184612c7e565b63ffffffff1663ffffffff168152602001908152602001600020600101549150506109e5565b6001600160a01b038416600090815260116020908152604080832083805290915290205463ffffffff16831015610fb15760009150506109e5565b600080610fbf600184612c7e565b90505b8163ffffffff168163ffffffff1611156110875760006002610fe48484612c7e565b610fee9190612c25565b610ff89083612c7e565b6001600160a01b038816600090815260116020908152604080832063ffffffff808616855290835292819020815180830190925280549093168082526001909301549181019190915291925087141561105b576020015194506109e59350505050565b805163ffffffff1687111561107257819350611080565b61107d600183612c7e565b92505b5050610fc2565b506001600160a01b038516600090815260116020908152604080832063ffffffff9094168352929052206001015491505092915050565b6005546001600160a01b03163314806110e157506006546001600160a01b031633145b6110fd5760405162461bcd60e51b8152600401610a7990612b0e565b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b60606004805461095190612ca3565b6005546001600160a01b031633148061115a57506006546001600160a01b031633145b6111765760405162461bcd60e51b8152600401610a7990612b0e565b610cdf8282612072565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156112025760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a79565b6112113385610a918685612c67565b5060019392505050565b60006109e1338484611bfb565b60065460009061125b9061ffff600160a01b8204811691610b2391600160e01b9091041661125560025490565b90611ecb565b905090565b6001600160a01b03811660009081526012602052604081205463ffffffff168061128b5760006112ce565b6001600160a01b0383166000908152601160205260408120906112af600184612c7e565b63ffffffff1663ffffffff168152602001908152602001600020600101545b9392505050565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866611300610942565b8051906020012061130e4690565b60408051602080820195909552808201939093526060830191909152306080808401919091528151808403909101815260a0830182528051908401207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c08401526001600160a01b038b1660e084015261010083018a90526101208084018a90528251808503909101815261014084019092528151919093012061190160f01b610160830152610162820183905261018282018190529192506000906101a20160408051601f198184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa15801561143a573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166114ac5760405162461bcd60e51b815260206004820152602660248201527f4d4152533a3a64656c656761746542795369673a20696e76616c6964207369676044820152656e617475726560d01b6064820152608401610a79565b6001600160a01b03811660009081526013602052604081208054916114d083612cde565b91905055891461152d5760405162461bcd60e51b815260206004820152602260248201527f4d4152533a3a64656c656761746542795369673a20696e76616c6964206e6f6e604482015261636560f01b6064820152608401610a79565b8742111561158c5760405162461bcd60e51b815260206004820152602660248201527f4d4152533a3a64656c656761746542795369673a207369676e617475726520656044820152651e1c1a5c995960d21b6064820152608401610a79565b611596818b611ff9565b505050505b505050505050565b6005546001600160a01b03163314806115c657506006546001600160a01b031633145b6115e25760405162461bcd60e51b8152600401610a7990612b0e565b600880546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b15801561163657600080fd5b505afa15801561164a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166e9190612896565b6001600160a01b031663e6a4390530600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156116cb57600080fd5b505afa1580156116df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117039190612896565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561174957600080fd5b505afa15801561175d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117819190612896565b600980546001600160a01b0319166001600160a01b03929092169182179055610c6357600080fd5b6005546001600160a01b03163314806117cc57506006546001600160a01b031633145b6117e85760405162461bcd60e51b8152600401610a7990612b0e565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633148061183657506006546001600160a01b031633145b6118525760405162461bcd60e51b8152600401610a7990612b0e565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314806118a057506006546001600160a01b031633145b6118bc5760405162461bcd60e51b8152600401610a7990612b0e565b600b8054911515600160a81b0260ff60a81b19909216919091179055565b600a546001600160a01b031633146119245760405162461bcd60e51b815260206004820152600d60248201526c2170726576206164647265737360981b6044820152606401610a79565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633148061196957506006546001600160a01b031633145b6119855760405162461bcd60e51b8152600401610a7990612b0e565b600e805460ff191682151590811790915560011415610c635760068054600160e01b61ffff600160a01b8304160261ffff60e01b19909116179055600b805460ff60a81b1916600160a81b17905550565b6005546001600160a01b03163314806119f957506006546001600160a01b031633145b611a155760405162461bcd60e51b8152600401610a7990612b0e565b6001600160a01b038116611a7a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a79565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611b385760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a79565b6001600160a01b038216611b995760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a79565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600e54839060ff1680611c2657506001600160a01b0381166000908152600f602052604090205460ff165b611c5e5760405162461bcd60e51b8152602060048201526009602482015268217472616461626c6560b81b6044820152606401610a79565b600b54600160a81b900460ff1615156001148015611c865750600b54600160a01b900460ff16155b8015611c9c57506008546001600160a01b031615155b8015611cb257506009546001600160a01b031615155b8015611ccc57506009546001600160a01b03858116911614155b8015611ce657506005546001600160a01b03858116911614155b8015611cfb57506001600160a01b0384163014155b8015611d1557506008546001600160a01b03858116911614155b15611d2257611d22611ee3565b6001600160a01b0384166000908152600d602052604090205460ff16611d9057611d4a611228565b821115611d905760405162461bcd60e51b8152602060048201526014602482015273195e18d95959081b585e081d1e08185b5bdd5b9d60621b6044820152606401610a79565b6001600160a01b0384166000908152600c602052604090205460ff1615611dc157611dbc8484846121c1565b611ec5565b600654600090611deb9061ffff600160a01b8204811691610b23918791600160b01b900416611ecb565b600654909150600090611e189061ffff600160a01b8204811691610b23918891600160c01b900416611ecb565b6009549091506000906001600160a01b0387811691161415611e5e57600654611e5b9061ffff600160a01b8204811691610b23918991600160c01b900416611ecb565b90505b611e7481611e6e84818988612399565b90612399565b9450611e818787876121c1565b8215611e9257611e928730856121c1565b8115611ea357611ea38730846121c1565b8015611ec157600b54611ec19088906001600160a01b0316836121c1565b5050505b50505050565b60006112ce8284612c48565b60006112ce8284612c11565b600b805460ff60a01b1916600160a01b1790556006805465ffffffffffff60b01b19811690915561ffff600160b01b8204811691600160c01b8104821691600160d01b909104166000611f4b306001600160a01b031660009081526020819052604090205490565b90506007548110611f5b57506007545b611f64816123a5565b600a546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611f9d573d6000803e3d6000fd5b50506006805463ffffffff60b01b1916600160b01b61ffff9586160261ffff60c01b191617600160c01b938516939093029290921761ffff60d01b1916600160d01b9190931602919091179055600b805460ff60a01b19169055565b6001600160a01b038281166000818152601060208181526040808420805485845282862054949093528787166001600160a01b03198416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611ec5828483612510565b6001600160a01b0382166120d25760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610a79565b6001600160a01b038216600090815260208190526040902054818110156121465760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610a79565b6121508282612c67565b6001600160a01b0384166000908152602081905260408120919091556002805484929061217e908490612c67565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611bee565b6001600160a01b0383166122255760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a79565b6001600160a01b0382166122875760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a79565b6001600160a01b038316600090815260208190526040902054818110156122ff5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a79565b6123098282612c67565b6001600160a01b03808616600090815260208190526040808220939093559085168152908120805484929061233f908490612bda565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161238b91815260200190565b60405180910390a350505050565b60006112ce8284612c67565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106123da576123da612d25565b6001600160a01b03928316602091820292909201810191909152600854604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561242e57600080fd5b505afa158015612442573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124669190612896565b8160018151811061247957612479612d25565b6001600160a01b03928316602091820292909201015260085461249f9130911684611ad6565b6008546001600160a01b031663791ac94783600084306124c24262015180612bda565b6040518663ffffffff1660e01b81526004016124e2959493929190612b43565b600060405180830381600087803b1580156124fc57600080fd5b505af115801561159b573d6000803e3d6000fd5b816001600160a01b0316836001600160a01b0316141580156125325750600081115b1561266f576001600160a01b038316156125d5576001600160a01b03831660009081526012602052604081205463ffffffff1690816125725760006125b5565b6001600160a01b038516600090815260116020526040812090612596600185612c7e565b63ffffffff1663ffffffff168152602001908152602001600020600101545b905060006125c38285612399565b90506125d186848484612674565b5050505b6001600160a01b0382161561266f576001600160a01b03821660009081526012602052604081205463ffffffff169081612610576000612653565b6001600160a01b038416600090815260116020526040812090612634600185612c7e565b63ffffffff1663ffffffff168152602001908152602001600020600101545b905060006126618285612816565b905061159b85848484612674565b505050565b600061269843604051806060016040528060348152602001612d5160349139612822565b905060008463ffffffff161180156126f257506001600160a01b038516600090815260116020526040812063ffffffff8316916126d6600188612c7e565b63ffffffff908116825260208201929092526040016000205416145b1561273b576001600160a01b0385166000908152601160205260408120839161271c600188612c7e565b63ffffffff1681526020810191909152604001600020600101556127cb565b60408051808201825263ffffffff838116825260208083018681526001600160a01b038a166000908152601183528581208a851682529092529390209151825463ffffffff19169116178155905160019182015561279a908590612bf2565b6001600160a01b0386166000908152601260205260409020805463ffffffff191663ffffffff929092169190911790555b60408051848152602081018490526001600160a01b038716917fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724910160405180910390a25050505050565b60006112ce8284612bda565b600081640100000000841061284a5760405162461bcd60e51b8152600401610a799190612ab9565b509192915050565b8035801515811461286257600080fd5b919050565b803561ffff8116811461286257600080fd5b60006020828403121561288b57600080fd5b81356112ce81612d3b565b6000602082840312156128a857600080fd5b81516112ce81612d3b565b600080604083850312156128c657600080fd5b82356128d181612d3b565b915060208301356128e181612d3b565b809150509250929050565b60008060006060848603121561290157600080fd5b833561290c81612d3b565b9250602084013561291c81612d3b565b929592945050506040919091013590565b6000806040838503121561294057600080fd5b823561294b81612d3b565b915061295960208401612852565b90509250929050565b6000806040838503121561297557600080fd5b823561298081612d3b565b946020939093013593505050565b60008060008060008060c087890312156129a757600080fd5b86356129b281612d3b565b95506020870135945060408701359350606087013560ff811681146129d657600080fd5b9598949750929560808101359460a0909101359350915050565b60008060408385031215612a0357600080fd5b8235612a0e81612d3b565b9150602083013563ffffffff811681146128e157600080fd5b600060208284031215612a3957600080fd5b6112ce82612852565b600060208284031215612a5457600080fd5b6112ce82612867565b600080600060608486031215612a7257600080fd5b612a7b84612867565b9250612a8960208501612867565b9150612a9760408501612867565b90509250925092565b600060208284031215612ab257600080fd5b5035919050565b600060208083528351808285015260005b81811015612ae657858101830151858201604001528201612aca565b81811115612af8576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612b935784516001600160a01b031683529383019391830191600101612b6e565b50506001600160a01b03969096166060850152505050608001529392505050565b600061ffff808316818516808303821115612bd157612bd1612cf9565b01949350505050565b60008219821115612bed57612bed612cf9565b500190565b600063ffffffff808316818516808303821115612bd157612bd1612cf9565b600082612c2057612c20612d0f565b500490565b600063ffffffff80841680612c3c57612c3c612d0f565b92169190910492915050565b6000816000190483118215151615612c6257612c62612cf9565b500290565b600082821015612c7957612c79612cf9565b500390565b600063ffffffff83811690831681811015612c9b57612c9b612cf9565b039392505050565b600181811c90821680612cb757607f821691505b60208210811415612cd857634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612cf257612cf2612cf9565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114610c6357600080fdfe4d4152533a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473a26469706673582212209293a8608d05a0fcfd1c883f3e27e526ff3d77a6e79435cade443201be04159064736f6c63430008070033

Deployed Bytecode Sourcemap

31632:16641:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16099:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18266:169;;;;;;;;;;-1:-1:-1;18266:169:0;;;;;:::i;:::-;;:::i;:::-;;;5432:14:1;;5425:22;5407:41;;5395:2;5380:18;18266:169:0;5267:187:1;17219:108:0;;;;;;;;;;-1:-1:-1;17307:12:0;;17219:108;;;5605:25:1;;;5593:2;5578:18;17219:108:0;5459:177:1;40683:122:0;;;;;;;;;;;;40725:80;40683:122;;18917:422;;;;;;;;;;-1:-1:-1;18917:422:0;;;;;:::i;:::-;;:::i;32293:71::-;;;;;;;;;;-1:-1:-1;32293:71:0;;;;-1:-1:-1;;;;;32293:71:0;;;;;;-1:-1:-1;;;;;4914:32:1;;;4896:51;;4884:2;4869:18;32293:71:0;4750:203:1;17061:93:0;;;;;;;;;;-1:-1:-1;17061:93:0;;17144:2;17486:36:1;;17474:2;17459:18;17061:93:0;17344:184:1;31731:56:0;;;;;;;;;;;;31768:19;31731:56;;39934:187;;;;;;;;;;-1:-1:-1;39934:187:0;;;;;:::i;:::-;;:::i;:::-;;19748:215;;;;;;;;;;-1:-1:-1;19748:215:0;;;;;:::i;:::-;;:::i;32214:72::-;;;;;;;;;;-1:-1:-1;32214:72:0;;;;-1:-1:-1;;;;;32214:72:0;;;38392:164;;;;;;;;;;-1:-1:-1;38392:164:0;;;;;:::i;:::-;;:::i;36861:77::-;;;;;;;;;;;;;:::i;39137:122::-;;;;;;;;;;-1:-1:-1;39137:122:0;;;;;:::i;:::-;-1:-1:-1;;;;;39226:25:0;39202:4;39226:25;;;:18;:25;;;;;;;;;39137:122;41666:149;;;;;;;;;;-1:-1:-1;41666:149:0;;;;;:::i;:::-;-1:-1:-1;;;;;41786:21:0;;;41754:7;41786:21;;;:10;:21;;;;;;;;41666:149;41959:104;;;;;;;;;;-1:-1:-1;41959:104:0;;;;;:::i;:::-;;:::i;36946:145::-;;;;;;;;;;;;;:::i;39393:126::-;;;;;;;;;;-1:-1:-1;39393:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;39484:27:0;39460:4;39484:27;;;:20;:27;;;;;;;;;39393:126;38804:325;;;;;;;;;;-1:-1:-1;38804:325:0;;;;;:::i;:::-;;:::i;40561:49::-;;;;;;;;;;-1:-1:-1;40561:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17053:10:1;17041:23;;;17023:42;;17011:2;16996:18;40561:49:0;16879:192:1;17390:127:0;;;;;;;;;;-1:-1:-1;17390:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;17491:18:0;17464:7;17491:18;;;;;;;;;;;;17390:127;2910:148;;;;;;;;;;;;;:::i;32108:39::-;;;;;;;;;;-1:-1:-1;32108:39:0;;;;-1:-1:-1;;;;;32108:39:0;;;44574:1253;;;;;;;;;;-1:-1:-1;44574:1253:0;;;;;:::i;:::-;;:::i;41097:39::-;;;;;;;;;;-1:-1:-1;41097:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;2233:87;;;;;;;;;;-1:-1:-1;2306:6:0;;-1:-1:-1;;;;;2306:6:0;2233:87;;39657:107;;;;;;;;;;-1:-1:-1;39657:107:0;;;;;:::i;:::-;;:::i;16318:104::-;;;;;;;;;;;;;:::i;34446:103::-;;;;;;;;;;-1:-1:-1;34446:103:0;;;;;:::i;:::-;;:::i;20466:377::-;;;;;;;;;;-1:-1:-1;20466:377:0;;;;;:::i;:::-;;:::i;17730:175::-;;;;;;;;;;-1:-1:-1;17730:175:0;;;;;:::i;:::-;;:::i;38242:142::-;;;;;;;;;;;;;:::i;43888:255::-;;;;;;;;;;-1:-1:-1;43888:255:0;;;;;:::i;:::-;;:::i;42497:1190::-;;;;;;;;;;-1:-1:-1;42497:1190:0;;;;;:::i;:::-;;:::i;32179:26::-;;;;;;;;;;-1:-1:-1;32179:26:0;;;;-1:-1:-1;;;;;32179:26:0;;;36328:275;;;;;;;;;;-1:-1:-1;36328:275:0;;;;;:::i;:::-;;:::i;39527:122::-;;;;;;;;;;-1:-1:-1;39527:122:0;;;;;:::i;:::-;;:::i;17968:151::-;;;;;;;;;;-1:-1:-1;17968:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;18084:18:0;;;18057:7;18084:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;17968:151;39267:118;;;;;;;;;;-1:-1:-1;39267:118:0;;;;;:::i;:::-;;:::i;40899:117::-;;;;;;;;;;;;40945:71;40899:117;;36730:123;;;;;;;;;;-1:-1:-1;36730:123:0;;;;;:::i;:::-;;:::i;40422:70::-;;;;;;;;;;-1:-1:-1;40422:70:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17278:10:1;17266:23;;;17248:42;;17321:2;17306:18;;17299:34;;;;17221:18;40422:70:0;17076:263:1;39772:154:0;;;;;;;;;;-1:-1:-1;39772:154:0;;;;;:::i;:::-;;:::i;38564:232::-;;;;;;;;;;-1:-1:-1;38564:232:0;;;;;:::i;:::-;;:::i;3213:244::-;;;;;;;;;;-1:-1:-1;3213:244:0;;;;;:::i;:::-;;:::i;16099:100::-;16153:13;16186:5;16179:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16099:100;:::o;18266:169::-;18349:4;18366:39;805:10;18389:7;18398:6;18366:8;:39::i;:::-;-1:-1:-1;18423:4:0;18266:169;;;;;:::o;18917:422::-;19023:4;19040:36;19050:6;19058:9;19069:6;19040:9;:36::i;:::-;-1:-1:-1;;;;;19116:19:0;;19089:24;19116:19;;;:11;:19;;;;;;;;805:10;19116:33;;;;;;;;19168:26;;;;19160:79;;;;-1:-1:-1;;;19160:79:0;;11860:2:1;19160:79:0;;;11842:21:1;11899:2;11879:18;;;11872:30;11938:34;11918:18;;;11911:62;-1:-1:-1;;;11989:18:1;;;11982:38;12037:19;;19160:79:0;;;;;;;;;19250:57;19259:6;805:10;19281:25;19300:6;19281:16;:25;:::i;:::-;19250:8;:57::i;:::-;-1:-1:-1;19327:4:0;;18917:422;-1:-1:-1;;;;18917:422:0:o;39934:187::-;2306:6;;-1:-1:-1;;;;;2306:6:0;805:10;2453:23;;:49;;-1:-1:-1;2480:6:0;;-1:-1:-1;;;;;2480:6:0;805:10;2480:22;2453:49;2445:94;;;;-1:-1:-1;;;2445:94:0;;;;;;;:::i;:::-;40032:11:::1;::::0;-1:-1:-1;;;40032:11:0;::::1;;;40020:23:::0;::::1;;40012:32;;;::::0;::::1;;40101:11;::::0;40072:41:::1;::::0;-1:-1:-1;;;40101:11:0;::::1;;;40072:24;31768:19;40087:8:::0;40072:14:::1;:24::i;:::-;:28:::0;::::1;:41::i;:::-;40055:14;:58:::0;-1:-1:-1;39934:187:0:o;19748:215::-;805:10;19836:4;19885:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;19885:34:0;;;;;;;;;;19836:4;;19853:80;;19876:7;;19885:47;;19922:10;;19885:47;:::i;38392:164::-;2306:6;;-1:-1:-1;;;;;2306:6:0;805:10;2453:23;;:49;;-1:-1:-1;2480:6:0;;-1:-1:-1;;;;;2480:6:0;805:10;2480:22;2453:49;2445:94;;;;-1:-1:-1;;;2445:94:0;;;;;;;:::i;:::-;38487:11:::1;::::0;::::1;-1:-1:-1::0;;;38487:11:0;;::::1;::::0;::::1;38478:20:::0;;::::1;;;38470:38;;;::::0;-1:-1:-1;;;38470:38:0;;14585:2:1;38470:38:0::1;::::0;::::1;14567:21:1::0;14624:1;14604:18;;;14597:29;-1:-1:-1;;;14642:18:1;;;14635:35;14687:18;;38470:38:0::1;14383:328:1::0;38470:38:0::1;38519:21;:29:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;38519:29:0::1;-1:-1:-1::0;;;;38519:29:0;;::::1;::::0;;;::::1;::::0;;38392:164::o;36861:77::-;2306:6;;-1:-1:-1;;;;;2306:6:0;805:10;2453:23;;:49;;-1:-1:-1;2480:6:0;;-1:-1:-1;;;;;2480:6:0;805:10;2480:22;2453:49;2445:94;;;;-1:-1:-1;;;2445:94:0;;;;;;;:::i;:::-;36913:17:::1;:15;:17::i;:::-;36861:77::o:0;41959:104::-;42023:32;42033:10;42045:9;42023;:32::i;:::-;41959:104;:::o;36946:145::-;2306:6;;-1:-1:-1;;;;;2306:6:0;805:10;2453:23;;:49;;-1:-1:-1;2480:6:0;;-1:-1:-1;;;;;2480:6:0;805:10;2480:22;2453:49;2445:94;;;;-1:-1:-1;;;2445:94:0;;;;;;;:::i;:::-;37056:12:::1;::::0;37048:35:::1;::::0;37016:21:::1;::::0;-1:-1:-1;;;;;37056:12:0::1;::::0;37048:35;::::1;;;::::0;37016:21;;37002:11:::1;37048:35:::0;37002:11;37048:35;37016:21;37056:12;37048:35;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;36991:100;36946:145::o:0;38804:325::-;2306:6;;-1:-1:-1;;;;;2306:6:0;805:10;2453:23;;:49;;-1:-1:-1;2480:6:0;;-1:-1:-1;;;;;2480:6:0;805:10;2480:22;2453:49;2445:94;;;;-1:-1:-1;;;2445:94:0;;;;;;;:::i;:::-;38979:11:::1;::::0;-1:-1:-1;;;38979:11:0;::::1;;;38958:17:::0;38929:26:::1;38944:11:::0;38929:12;:26:::1;:::i;:::-;:46;;;;:::i;:::-;:61;;;;38921:81;;;::::0;-1:-1:-1;;;38921:81:0;;13845:2:1;38921:81:0::1;::::0;::::1;13827:21:1::0;13884:1;13864:18;;;13857:29;-1:-1:-1;;;13902:18:1;;;13895:37;13949:18;;38921:81:0::1;13643:330:1::0;38921:81:0::1;39013:11;:26:::0;;-1:-1:-1;;;;39050:24:0;-1:-1:-1;;;39013:26:0::1;::::0;;::::1;;-1:-1:-1::0;;;;39050:24:0;;-1:-1:-1;;;39050:24:0;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;;;39085:36:0::1;-1:-1:-1::0;;;39085:36:0;;;::::1;;::::0;;;::::1;::::0;;38804:325::o;2910:148::-;2306:6;;-1:-1:-1;;;;;2306:6:0;805:10;2453:23;;:49;;-1:-1:-1;2480:6:0;;-1:-1:-1;;;;;2480:6:0;805:10;2480:22;2453:49;2445:94;;;;-1:-1:-1;;;2445:94:0;;;;;;;:::i;:::-;3001:6:::1;::::0;2980:40:::1;::::0;3017:1:::1;::::0;-1:-1:-1;;;;;3001:6:0::1;::::0;2980:40:::1;::::0;3017:1;;2980:40:::1;3031:6;:19:::0;;-1:-1:-1;;;;;;3031:19:0::1;::::0;;2910:148::o;44574:1253::-;44682:7;44729:12;44715:11;:26;44707:78;;;;-1:-1:-1;;;44707:78:0;;10300:2:1;44707:78:0;;;10282:21:1;10339:2;10319:18;;;10312:30;10378:34;10358:18;;;10351:62;-1:-1:-1;;;10429:18:1;;;10422:37;10476:19;;44707:78:0;10098:403:1;44707:78:0;-1:-1:-1;;;;;44820:23:0;;44798:19;44820:23;;;:14;:23;;;;;;;;44858:17;44854:58;;44899:1;44892:8;;;;;44854:58;-1:-1:-1;;;;;44972:20:0;;;;;;:11;:20;;;;;45024:11;;44993:16;45008:1;44993:12;:16;:::i;:::-;44972:38;;;;;;;;;;;;;;;-1:-1:-1;44972:38:0;:48;;:63;44968:147;;-1:-1:-1;;;;;45059:20:0;;;;;;:11;:20;;;;;;45080:16;45095:1;45080:12;:16;:::i;:::-;45059:38;;;;;;;;;;;;;;;:44;;;45052:51;;;;;44968:147;-1:-1:-1;;;;;45176:20:0;;;;;;:11;:20;;;;;;;;:23;;;;;;;;:33;:23;:33;:47;-1:-1:-1;45172:88:0;;;45247:1;45240:8;;;;;45172:88;45272:12;;45314:16;45329:1;45314:12;:16;:::i;:::-;45299:31;;45341:428;45356:5;45348:13;;:5;:13;;;45341:428;;;45378:13;45420:1;45403:13;45411:5;45403;:13;:::i;:::-;45402:19;;;;:::i;:::-;45394:27;;:5;:27;:::i;:::-;-1:-1:-1;;;;;45486:20:0;;45463;45486;;;:11;:20;;;;;;;;:28;;;;;;;;;;;;;45463:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;45378:43;;-1:-1:-1;45533:27:0;;45529:229;;;45588:8;;;;-1:-1:-1;45581:15:0;;-1:-1:-1;;;;45581:15:0;45529:229;45622:12;;:26;;;-1:-1:-1;45618:140:0;;;45677:6;45669:14;;45618:140;;;45732:10;45741:1;45732:6;:10;:::i;:::-;45724:18;;45618:140;45363:406;;45341:428;;;-1:-1:-1;;;;;;45786:20:0;;;;;;:11;:20;;;;;;;;:27;;;;;;;;;;:33;;;;-1:-1:-1;;44574:1253:0;;;;:::o;39657:107::-;2306:6;;-1:-1:-1;;;;;2306:6:0;805:10;2453:23;;:49;;-1:-1:-1;2480:6:0;;-1:-1:-1;;;;;2480:6:0;805:10;2480:22;2453:49;2445:94;;;;-1:-1:-1;;;2445:94:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39733:17:0;;;::::1;;::::0;;;:10:::1;:17;::::0;;;;:23;;-1:-1:-1;;39733:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;39657:107::o;16318:104::-;16374:13;16407:7;16400:14;;;;;:::i;34446:103::-;2306:6;;-1:-1:-1;;;;;2306:6:0;805:10;2453:23;;:49;;-1:-1:-1;2480:6:0;;-1:-1:-1;;;;;2480:6:0;805:10;2480:22;2453:49;2445:94;;;;-1:-1:-1;;;2445:94:0;;;;;;;:::i;:::-;34520:21:::1;34526:5;34533:7;34520:5;:21::i;20466:377::-:0;805:10;20559:4;20603:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;20603:34:0;;;;;;;;;;20656:35;;;;20648:85;;;;-1:-1:-1;;;20648:85:0;;15255:2:1;20648:85:0;;;15237:21:1;15294:2;15274:18;;;15267:30;15333:34;15313:18;;;15306:62;-1:-1:-1;;;15384:18:1;;;15377:35;15429:19;;20648:85:0;15053:401:1;20648:85:0;20744:67;805:10;20767:7;20776:34;20795:15;20776:16;:34;:::i;20744:67::-;-1:-1:-1;20831:4:0;;20466:377;-1:-1:-1;;;20466:377:0:o;17730:175::-;17816:4;17833:42;805:10;17857:9;17868:6;17833:9;:42::i;38242:142::-;38364:11;;38292:7;;38319:57;;38364:11;-1:-1:-1;;;38364:11:0;;;;;38319:40;;-1:-1:-1;;;38337:21:0;;;;38319:13;17307:12;;;17219:108;38319:13;:17;;:40::i;:57::-;38312:64;;38242:142;:::o;43888:255::-;-1:-1:-1;;;;;44027:23:0;;43980:7;44027:23;;;:14;:23;;;;;;;;44068:16;:67;;44134:1;44068:67;;;-1:-1:-1;;;;;44087:20:0;;;;;;:11;:20;;;;;;44108:16;44123:1;44108:12;:16;:::i;:::-;44087:38;;;;;;;;;;;;;;;:44;;;44068:67;44061:74;43888:255;-1:-1:-1;;;43888:255:0:o;42497:1190::-;42690:23;40725:80;42819:6;:4;:6::i;:::-;42803:24;;;;;;42846:12;48227:9;;48117:153;42846:12;42740:165;;;;;;;6294:25:1;;;;6335:18;;;6328:34;;;;6378:18;;;6371:34;;;;42885:4:0;6421:18:1;;;;6414:60;;;;42740:165:0;;;;;;;;;;6266:19:1;;;42740:165:0;;42716:200;;;;;;40945:71;42974:140;;;5872:25:1;-1:-1:-1;;;;;5933:32:1;;5913:18;;;5906:60;5982:18;;;5975:34;;;6025:18;;;;6018:34;;;42974:140:0;;;;;;;;;;5844:19:1;;;42974:140:0;;;42950:175;;;;;;;-1:-1:-1;;;43179:123:0;;;4611:27:1;4654:11;;;4647:27;;;4690:12;;;4683:28;;;42716:200:0;;-1:-1:-1;;;4727:12:1;;43179:123:0;;;-1:-1:-1;;43179:123:0;;;;;;;;;43155:158;;43179:123;43155:158;;;;43326:17;43346:26;;;;;;;;;6712:25:1;;;6785:4;6773:17;;6753:18;;;6746:45;;;;6807:18;;;6800:34;;;6850:18;;;6843:34;;;43155:158:0;;-1:-1:-1;43326:17:0;43346:26;;6684:19:1;;43346:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;43346:26:0;;-1:-1:-1;;43346:26:0;;;-1:-1:-1;;;;;;;43391:23:0;;43383:74;;;;-1:-1:-1;;;43383:74:0;;13438:2:1;43383:74:0;;;13420:21:1;13477:2;13457:18;;;13450:30;13516:34;13496:18;;;13489:62;-1:-1:-1;;;13567:18:1;;;13560:36;13613:19;;43383:74:0;13236:402:1;43383:74:0;-1:-1:-1;;;;;43485:17:0;;;;;;:6;:17;;;;;:19;;;;;;:::i;:::-;;;;;43476:5;:28;43468:75;;;;-1:-1:-1;;;43468:75:0;;11115:2:1;43468:75:0;;;11097:21:1;11154:2;11134:18;;;11127:30;11193:34;11173:18;;;11166:62;-1:-1:-1;;;11244:18:1;;;11237:32;11286:19;;43468:75:0;10913:398:1;43468:75:0;43581:6;43562:15;:25;;43554:76;;;;-1:-1:-1;;;43554:76:0;;8680:2:1;43554:76:0;;;8662:21:1;8719:2;8699:18;;;8692:30;8758:34;8738:18;;;8731:62;-1:-1:-1;;;8809:18:1;;;8802:36;8855:19;;43554:76:0;8478:402:1;43554:76:0;43648:31;43658:9;43669;43648;:31::i;:::-;43641:38;;;;42497:1190;;;;;;;:::o;36328:275::-;2306:6;;-1:-1:-1;;;;;2306:6:0;805:10;2453:23;;:49;;-1:-1:-1;2480:6:0;;-1:-1:-1;;;;;2480:6:0;805:10;2480:22;2453:49;2445:94;;;;-1:-1:-1;;;2445:94:0;;;;;;;:::i;:::-;36395:13:::1;:43:::0;;-1:-1:-1;;;;;;36395:43:0::1;-1:-1:-1::0;;;;;36395:43:0;::::1;::::0;;::::1;::::0;;;36481:23:::1;::::0;;-1:-1:-1;;;36481:23:0;;;;:21:::1;::::0;:23:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;36395:43;36481:23;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;36463:50:0::1;;36522:4;36529:13;;;;;;;;;-1:-1:-1::0;;;;;36529:13:0::1;-1:-1:-1::0;;;;;36529:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36463:87;::::0;-1:-1:-1;;;;;;36463:87:0::1;::::0;;;;;;-1:-1:-1;;;;;5188:15:1;;;36463:87:0::1;::::0;::::1;5170:34:1::0;5240:15;;5220:18;;;5213:43;5105:18;;36463:87:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36449:11;:101:::0;;-1:-1:-1;;;;;;36449:101:0::1;-1:-1:-1::0;;;;;36449:101:0;;;::::1;::::0;;::::1;::::0;;36561:34:::1;;;::::0;::::1;39527:122:::0;2306:6;;-1:-1:-1;;;;;2306:6:0;805:10;2453:23;;:49;;-1:-1:-1;2480:6:0;;-1:-1:-1;;;;;2480:6:0;805:10;2480:22;2453:49;2445:94;;;;-1:-1:-1;;;2445:94:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39608:27:0;;;::::1;;::::0;;;:20:::1;:27;::::0;;;;:33;;-1:-1:-1;;39608:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;39527:122::o;39267:118::-;2306:6;;-1:-1:-1;;;;;2306:6:0;805:10;2453:23;;:49;;-1:-1:-1;2480:6:0;;-1:-1:-1;;;;;2480:6:0;805:10;2480:22;2453:49;2445:94;;;;-1:-1:-1;;;2445:94:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39346:25:0;;;::::1;;::::0;;;:18:::1;:25;::::0;;;;:31;;-1:-1:-1;;39346:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;39267:118::o;36730:123::-;2306:6;;-1:-1:-1;;;;;2306:6:0;805:10;2453:23;;:49;;-1:-1:-1;2480:6:0;;-1:-1:-1;;;;;2480:6:0;805:10;2480:22;2453:49;2445:94;;;;-1:-1:-1;;;2445:94:0;;;;;;;:::i;:::-;36811:23:::1;:34:::0;;;::::1;;-1:-1:-1::0;;;36811:34:0::1;-1:-1:-1::0;;;;36811:34:0;;::::1;::::0;;;::::1;::::0;;36730:123::o;39772:154::-;39857:12;;-1:-1:-1;;;;;39857:12:0;39843:10;:26;39835:52;;;;-1:-1:-1;;;39835:52:0;;11518:2:1;39835:52:0;;;11500:21:1;11557:2;11537:18;;;11530:30;-1:-1:-1;;;11576:18:1;;;11569:43;11629:18;;39835:52:0;11316:337:1;39835:52:0;39898:12;:20;;-1:-1:-1;;;;;;39898:20:0;-1:-1:-1;;;;;39898:20:0;;;;;;;;;;39772:154::o;38564:232::-;2306:6;;-1:-1:-1;;;;;2306:6:0;805:10;2453:23;;:49;;-1:-1:-1;2480:6:0;;-1:-1:-1;;;;;2480:6:0;805:10;2480:22;2453:49;2445:94;;;;-1:-1:-1;;;2445:94:0;;;;;;;:::i;:::-;38630:12:::1;:21:::0;;-1:-1:-1;;38630:21:0::1;::::0;::::1;;::::0;;::::1;::::0;;;-1:-1:-1;38666:14:0::1;38662:127;;;38721:11;::::0;;-1:-1:-1;;;38721:11:0::1;-1:-1:-1::0;;;38721:11:0;::::1;;38697:35;-1:-1:-1::0;;;;38697:35:0;;::::1;;::::0;;38747:23:::1;:30:::0;;-1:-1:-1;;;;38747:30:0::1;-1:-1:-1::0;;;38747:30:0::1;::::0;;38564:232;:::o;3213:244::-;2306:6;;-1:-1:-1;;;;;2306:6:0;805:10;2453:23;;:49;;-1:-1:-1;2480:6:0;;-1:-1:-1;;;;;2480:6:0;805:10;2480:22;2453:49;2445:94;;;;-1:-1:-1;;;2445:94:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3302:22:0;::::1;3294:73;;;::::0;-1:-1:-1;;;3294:73:0;;9490:2:1;3294:73:0::1;::::0;::::1;9472:21:1::0;9529:2;9509:18;;;9502:30;9568:34;9548:18;;;9541:62;-1:-1:-1;;;9619:18:1;;;9612:36;9665:19;;3294:73:0::1;9288:402:1::0;3294:73:0::1;3404:6;::::0;3383:38:::1;::::0;-1:-1:-1;;;;;3383:38:0;;::::1;::::0;3404:6:::1;::::0;3383:38:::1;::::0;3404:6:::1;::::0;3383:38:::1;3432:6;:17:::0;;-1:-1:-1;;;;;;3432:17:0::1;-1:-1:-1::0;;;;;3432:17:0;;;::::1;::::0;;;::::1;::::0;;3213:244::o;23822:346::-;-1:-1:-1;;;;;23924:19:0;;23916:68;;;;-1:-1:-1;;;23916:68:0;;14180:2:1;23916:68:0;;;14162:21:1;14219:2;14199:18;;;14192:30;14258:34;14238:18;;;14231:62;-1:-1:-1;;;14309:18:1;;;14302:34;14353:19;;23916:68:0;13978:400:1;23916:68:0;-1:-1:-1;;;;;24003:21:0;;23995:68;;;;-1:-1:-1;;;23995:68:0;;9897:2:1;23995:68:0;;;9879:21:1;9936:2;9916:18;;;9909:30;9975:34;9955:18;;;9948:62;-1:-1:-1;;;10026:18:1;;;10019:32;10068:19;;23995:68:0;9695:398:1;23995:68:0;-1:-1:-1;;;;;24076:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;24128:32;;5605:25:1;;;24128:32:0;;5578:18:1;24128:32:0;;;;;;;;23822:346;;;:::o;34557:1656::-;32806:12;;34661:7;;32806:12;;;:48;;-1:-1:-1;;;;;;32835:19:0;;;;;;:10;:19;;;;;;;;32806:48;32798:83;;;;-1:-1:-1;;;32798:83:0;;14918:2:1;32798:83:0;;;14900:21:1;14957:1;14937:18;;;14930:29;-1:-1:-1;;;14975:18:1;;;14968:39;15024:18;;32798:83:0;14716:332:1;32798:83:0;34729:23:::1;::::0;-1:-1:-1;;;34729:23:0;::::1;;;:31;;34756:4;34729:31;:75:::0;::::1;;;-1:-1:-1::0;34777:18:0::1;::::0;-1:-1:-1;;;34777:18:0;::::1;;;:27;34729:75;:128;;;;-1:-1:-1::0;34829:13:0::1;::::0;-1:-1:-1;;;;;34829:13:0::1;34821:36:::0;::::1;34729:128;:170;;;;-1:-1:-1::0;34874:11:0::1;::::0;-1:-1:-1;;;;;34874:11:0::1;:25:::0;::::1;34729:170;:209;;;;-1:-1:-1::0;34927:11:0::1;::::0;-1:-1:-1;;;;;34916:22:0;;::::1;34927:11:::0;::::1;34916:22;;34729:209;:244;;;;-1:-1:-1::0;2306:6:0;;-1:-1:-1;;;;;34955:18:0;;::::1;2306:6:::0;;34955:18:::1;;34729:244;:285;;;;-1:-1:-1::0;;;;;;34990:24:0;::::1;35009:4;34990:24;;34729:285;:335;;;;-1:-1:-1::0;35050:13:0::1;::::0;-1:-1:-1;;;;;35031:33:0;;::::1;35050:13:::0;::::1;35031:33;;34729:335;34711:409;;;35091:17;:15;:17::i;:::-;-1:-1:-1::0;;;;;35137:29:0;::::1;;::::0;;;:20:::1;:29;::::0;;;;;::::1;;35132:126;;35202:19;:17;:19::i;:::-;35191:7;:30;;35183:63;;;::::0;-1:-1:-1;;;35183:63:0;;8331:2:1;35183:63:0::1;::::0;::::1;8313:21:1::0;8370:2;8350:18;;;8343:30;-1:-1:-1;;;8389:18:1;;;8382:50;8449:18;;35183:63:0::1;8129:344:1::0;35183:63:0::1;-1:-1:-1::0;;;;;35274:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;::::1;;35270:936;;;35318:45;35334:7;35343:10;35355:7;35318:15;:45::i;:::-;35270:936;;;35441:11;::::0;35396:14:::1;::::0;35413:40:::1;::::0;35441:11:::1;-1:-1:-1::0;;;35441:11:0;::::1;::::0;::::1;::::0;35413:23:::1;::::0;:7;;-1:-1:-1;;;35425:10:0;::::1;;35413:11;:23::i;:40::-;35525:11;::::0;35396:57;;-1:-1:-1;35468:20:0::1;::::0;35491:46:::1;::::0;35525:11:::1;-1:-1:-1::0;;;35525:11:0;::::1;::::0;::::1;::::0;35491:29:::1;::::0;:7;;-1:-1:-1;;;35503:16:0;::::1;;35491:11;:29::i;:46::-;35604:11;::::0;35468:69;;-1:-1:-1;35552:15:0::1;::::0;-1:-1:-1;;;;;35590:25:0;;::::1;35604:11:::0;::::1;35590:25;35586:122;;;35680:11;::::0;35646:46:::1;::::0;35680:11:::1;-1:-1:-1::0;;;35680:11:0;::::1;::::0;::::1;::::0;35646:29:::1;::::0;:7;;-1:-1:-1;;;35658:16:0;::::1;;35646:11;:29::i;:46::-;35636:56;;35586:122;35734:50;35776:7:::0;35734:37:::1;35758:12:::0;35734:37;:7;35746:6;35734:11:::1;:19::i;:::-;:23:::0;::::1;:37::i;:50::-;35724:60;;35801:45;35817:7;35826:10;35838:7;35801:15;:45::i;:::-;35865:10:::0;;35861:98:::1;;35896:47;35912:7;35929:4;35936:6;35896:15;:47::i;:::-;35977:16:::0;;35973:110:::1;;36014:53;36030:7;36047:4;36054:12;36014:15;:53::i;:::-;36101:11:::0;;36097:98:::1;;36158:11;::::0;36133:46:::1;::::0;36149:7;;-1:-1:-1;;;;;36158:11:0::1;36171:7:::0;36133:15:::1;:46::i;:::-;35381:825;;;35270:936;34557:1656:::0;;;;:::o;7002:98::-;7060:7;7087:5;7091:1;7087;:5;:::i;7401:98::-;7459:7;7486:5;7490:1;7486;:5;:::i;37130:402::-;32941:18;:25;;-1:-1:-1;;;;32941:25:0;-1:-1:-1;;;32941:25:0;;;33088:10:::1;::::0;;-1:-1:-1;;;;33263:15:0;;;;;33088:10:::1;-1:-1:-1::0;;;33088:10:0;::::1;::::0;::::1;::::0;-1:-1:-1;;;33136:16:0;::::1;::::0;::::1;::::0;-1:-1:-1;;;33185:11:0;;::::1;;32941:25:::0;37235:24:::2;37253:4;-1:-1:-1::0;;;;;17491:18:0;17464:7;17491:18;;;;;;;;;;;;17390:127;37235:24:::2;37204:55;;37298:14;;37274:20;:38;37270:108;;-1:-1:-1::0;37352:14:0::2;::::0;37270:108:::2;37420:38;37437:20;37420:16;:38::i;:::-;37479:12;::::0;37471:53:::2;::::0;-1:-1:-1;;;;;37479:12:0;;::::2;::::0;37502:21:::2;37471:53:::0;::::2;;;::::0;37479:12:::2;37471:53:::0;37479:12;37471:53;37502:21;37479:12;37471:53;::::2;;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;33301:10:0::1;:24:::0;;-1:-1:-1;;;;33336:36:0;-1:-1:-1;;;33301:24:0::1;::::0;;::::1;;-1:-1:-1::0;;;;33336:36:0;;-1:-1:-1;;;33336:36:0;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;;;33383:26:0::1;-1:-1:-1::0;;;33383:26:0;;;::::1;;::::0;;;::::1;::::0;;32989:18;:26;;-1:-1:-1;;;;32989:26:0;;;37130:402::o;45835:438::-;-1:-1:-1;;;;;45952:21:0;;;45926:23;45952:21;;;:10;:21;;;;;;;;;;17491:18;;;;;;;46087:21;;;;:33;;;-1:-1:-1;;;;;;46087:33:0;;;;;;;46138:54;;45952:21;;;;;17491:18;;46087:33;;45952:21;;;46138:54;;45926:23;46138:54;46205:60;46220:15;46237:9;46248:16;46205:14;:60::i;22890:494::-;-1:-1:-1;;;;;22974:21:0;;22966:67;;;;-1:-1:-1;;;22966:67:0;;12630:2:1;22966:67:0;;;12612:21:1;12669:2;12649:18;;;12642:30;12708:34;12688:18;;;12681:62;-1:-1:-1;;;12759:18:1;;;12752:31;12800:19;;22966:67:0;12428:397:1;22966:67:0;-1:-1:-1;;;;;23133:18:0;;23108:22;23133:18;;;;;;;;;;;23170:24;;;;23162:71;;;;-1:-1:-1;;;23162:71:0;;9087:2:1;23162:71:0;;;9069:21:1;9126:2;9106:18;;;9099:30;9165:34;9145:18;;;9138:62;-1:-1:-1;;;9216:18:1;;;9209:32;9258:19;;23162:71:0;8885:398:1;23162:71:0;23265:23;23282:6;23265:14;:23;:::i;:::-;-1:-1:-1;;;;;23244:18:0;;:9;:18;;;;;;;;;;:44;;;;23299:12;:22;;23315:6;;23244:9;23299:22;;23315:6;;23299:22;:::i;:::-;;;;-1:-1:-1;;23339:37:0;;5605:25:1;;;23365:1:0;;-1:-1:-1;;;;;23339:37:0;;;;;5593:2:1;5578:18;23339:37:0;5459:177:1;21333:604:0;-1:-1:-1;;;;;21439:20:0;;21431:70;;;;-1:-1:-1;;;21431:70:0;;13032:2:1;21431:70:0;;;13014:21:1;13071:2;13051:18;;;13044:30;13110:34;13090:18;;;13083:62;-1:-1:-1;;;13161:18:1;;;13154:35;13206:19;;21431:70:0;12830:401:1;21431:70:0;-1:-1:-1;;;;;21520:23:0;;21512:71;;;;-1:-1:-1;;;21512:71:0;;7927:2:1;21512:71:0;;;7909:21:1;7966:2;7946:18;;;7939:30;8005:34;7985:18;;;7978:62;-1:-1:-1;;;8056:18:1;;;8049:33;8099:19;;21512:71:0;7725:399:1;21512:71:0;-1:-1:-1;;;;;21680:17:0;;21656:21;21680:17;;;;;;;;;;;21716:23;;;;21708:74;;;;-1:-1:-1;;;21708:74:0;;10708:2:1;21708:74:0;;;10690:21:1;10747:2;10727:18;;;10720:30;10786:34;10766:18;;;10759:62;-1:-1:-1;;;10837:18:1;;;10830:36;10883:19;;21708:74:0;10506:402:1;21708:74:0;21813:22;21829:6;21813:13;:22;:::i;:::-;-1:-1:-1;;;;;21793:17:0;;;:9;:17;;;;;;;;;;;:42;;;;21846:20;;;;;;;;:30;;21870:6;;21793:9;21846:30;;21870:6;;21846:30;:::i;:::-;;;;;;;;21911:9;-1:-1:-1;;;;;21894:35:0;21903:6;-1:-1:-1;;;;;21894:35:0;;21922:6;21894:35;;;;5605:25:1;;5593:2;5578:18;;5459:177;21894:35:0;;;;;;;;21420:517;21333:604;;;:::o;6645:98::-;6703:7;6730:5;6734:1;6730;:5;:::i;37574:596::-;37728:16;;;37742:1;37728:16;;;;;;;;37704:21;;37728:16;;;;;;;;;;-1:-1:-1;37728:16:0;37704:40;;37773:4;37755;37760:1;37755:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;37755:23:0;;;:7;;;;;;;;;;:23;;;;37799:13;;:20;;;-1:-1:-1;;;37799:20:0;;;;:13;;;;;:18;;:20;;;;;37755:7;;37799:20;;;;;:13;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37789:4;37794:1;37789:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;37789:30:0;;;:7;;;;;;;;;:30;37864:13;;37832:60;;37849:4;;37864:13;37880:11;37832:8;:60::i;:::-;37931:13;;-1:-1:-1;;;;;37931:13:0;:64;38010:11;37931:13;38080:4;38107;38127:24;:15;38145:6;38127:24;:::i;:::-;37931:231;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46281:947;46387:6;-1:-1:-1;;;;;46377:16:0;:6;-1:-1:-1;;;;;46377:16:0;;;:30;;;;;46406:1;46397:6;:10;46377:30;46373:848;;;-1:-1:-1;;;;;46428:20:0;;;46424:385;;-1:-1:-1;;;;;46536:22:0;;46517:16;46536:22;;;:14;:22;;;;;;;;;46597:13;:60;;46656:1;46597:60;;;-1:-1:-1;;;;;46613:19:0;;;;;;:11;:19;;;;;;46633:13;46645:1;46633:9;:13;:::i;:::-;46613:34;;;;;;;;;;;;;;;:40;;;46597:60;46577:80;-1:-1:-1;46676:17:0;46696:21;46577:80;46710:6;46696:13;:21::i;:::-;46676:41;;46736:57;46753:6;46761:9;46772;46783;46736:16;:57::i;:::-;46450:359;;;46424:385;-1:-1:-1;;;;;46829:20:0;;;46825:385;;-1:-1:-1;;;;;46937:22:0;;46918:16;46937:22;;;:14;:22;;;;;;;;;46998:13;:60;;47057:1;46998:60;;;-1:-1:-1;;;;;47014:19:0;;;;;;:11;:19;;;;;;47034:13;47046:1;47034:9;:13;:::i;:::-;47014:34;;;;;;;;;;;;;;;:40;;;46998:60;46978:80;-1:-1:-1;47077:17:0;47097:21;46978:80;47111:6;47097:13;:21::i;:::-;47077:41;;47137:57;47154:6;47162:9;47173;47184;47137:16;:57::i;46825:385::-;46281:947;;;:::o;47236:704::-;47415:18;47436:76;47443:12;47436:76;;;;;;;;;;;;;;;;;:6;:76::i;:::-;47415:97;;47544:1;47529:12;:16;;;:85;;;;-1:-1:-1;;;;;;47549:22:0;;;;;;:11;:22;;;;;:65;;;;47572:16;47587:1;47572:12;:16;:::i;:::-;47549:40;;;;;;;;;;;;;;;-1:-1:-1;47549:40:0;:50;;:65;47529:85;47525:339;;;-1:-1:-1;;;;;47631:22:0;;;;;;:11;:22;;;;;47680:8;;47654:16;47669:1;47654:12;:16;:::i;:::-;47631:40;;;;;;;;;;;;;-1:-1:-1;47631:40:0;:46;;:57;47525:339;;;47760:33;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;47721:22:0;;-1:-1:-1;47721:22:0;;;:11;:22;;;;;:36;;;;;;;;;;;:72;;;;-1:-1:-1;;47721:72:0;;;;;;;;-1:-1:-1;47721:72:0;;;;47836:16;;47721:36;;47836:16;:::i;:::-;-1:-1:-1;;;;;47808:25:0;;;;;;:14;:25;;;;;:44;;-1:-1:-1;;47808:44:0;;;;;;;;;;;;47525:339;47881:51;;;16800:25:1;;;16856:2;16841:18;;16834:34;;;-1:-1:-1;;;;;47881:51:0;;;;;16773:18:1;47881:51:0;;;;;;;47404:536;47236:704;;;;:::o;6264:98::-;6322:7;6349:5;6353:1;6349;:5;:::i;47948:161::-;48023:6;48061:12;48054:5;48050:9;;48042:32;;;;-1:-1:-1;;;48042:32:0;;;;;;;;:::i;:::-;-1:-1:-1;48099:1:0;;47948:161;-1:-1:-1;;47948:161:0:o;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:60;;164:1;161;154:12;108:60;14:160;;;:::o;179:159::-;246:20;;306:6;295:18;;285:29;;275:57;;328:1;325;318:12;343:247;402:6;455:2;443:9;434:7;430:23;426:32;423:52;;;471:1;468;461:12;423:52;510:9;497:23;529:31;554:5;529:31;:::i;595:251::-;665:6;718:2;706:9;697:7;693:23;689:32;686:52;;;734:1;731;724:12;686:52;766:9;760:16;785:31;810:5;785:31;:::i;851:388::-;919:6;927;980:2;968:9;959:7;955:23;951:32;948:52;;;996:1;993;986:12;948:52;1035:9;1022:23;1054:31;1079:5;1054:31;:::i;:::-;1104:5;-1:-1:-1;1161:2:1;1146:18;;1133:32;1174:33;1133:32;1174:33;:::i;:::-;1226:7;1216:17;;;851:388;;;;;:::o;1244:456::-;1321:6;1329;1337;1390:2;1378:9;1369:7;1365:23;1361:32;1358:52;;;1406:1;1403;1396:12;1358:52;1445:9;1432:23;1464:31;1489:5;1464:31;:::i;:::-;1514:5;-1:-1:-1;1571:2:1;1556:18;;1543:32;1584:33;1543:32;1584:33;:::i;:::-;1244:456;;1636:7;;-1:-1:-1;;;1690:2:1;1675:18;;;;1662:32;;1244:456::o;1705:315::-;1770:6;1778;1831:2;1819:9;1810:7;1806:23;1802:32;1799:52;;;1847:1;1844;1837:12;1799:52;1886:9;1873:23;1905:31;1930:5;1905:31;:::i;:::-;1955:5;-1:-1:-1;1979:35:1;2010:2;1995:18;;1979:35;:::i;:::-;1969:45;;1705:315;;;;;:::o;2025:::-;2093:6;2101;2154:2;2142:9;2133:7;2129:23;2125:32;2122:52;;;2170:1;2167;2160:12;2122:52;2209:9;2196:23;2228:31;2253:5;2228:31;:::i;:::-;2278:5;2330:2;2315:18;;;;2302:32;;-1:-1:-1;;;2025:315:1:o;2345:687::-;2447:6;2455;2463;2471;2479;2487;2540:3;2528:9;2519:7;2515:23;2511:33;2508:53;;;2557:1;2554;2547:12;2508:53;2596:9;2583:23;2615:31;2640:5;2615:31;:::i;:::-;2665:5;-1:-1:-1;2717:2:1;2702:18;;2689:32;;-1:-1:-1;2768:2:1;2753:18;;2740:32;;-1:-1:-1;2824:2:1;2809:18;;2796:32;2872:4;2859:18;;2847:31;;2837:59;;2892:1;2889;2882:12;2837:59;2345:687;;;;-1:-1:-1;2345:687:1;;2969:3;2954:19;;2941:33;;3021:3;3006:19;;;2993:33;;-1:-1:-1;2345:687:1;-1:-1:-1;;2345:687:1:o;3037:419::-;3104:6;3112;3165:2;3153:9;3144:7;3140:23;3136:32;3133:52;;;3181:1;3178;3171:12;3133:52;3220:9;3207:23;3239:31;3264:5;3239:31;:::i;:::-;3289:5;-1:-1:-1;3346:2:1;3331:18;;3318:32;3394:10;3381:24;;3369:37;;3359:65;;3420:1;3417;3410:12;3461:180;3517:6;3570:2;3558:9;3549:7;3545:23;3541:32;3538:52;;;3586:1;3583;3576:12;3538:52;3609:26;3625:9;3609:26;:::i;3646:184::-;3704:6;3757:2;3745:9;3736:7;3732:23;3728:32;3725:52;;;3773:1;3770;3763:12;3725:52;3796:28;3814:9;3796:28;:::i;3835:328::-;3909:6;3917;3925;3978:2;3966:9;3957:7;3953:23;3949:32;3946:52;;;3994:1;3991;3984:12;3946:52;4017:28;4035:9;4017:28;:::i;:::-;4007:38;;4064:37;4097:2;4086:9;4082:18;4064:37;:::i;:::-;4054:47;;4120:37;4153:2;4142:9;4138:18;4120:37;:::i;:::-;4110:47;;3835:328;;;;;:::o;4168:180::-;4227:6;4280:2;4268:9;4259:7;4255:23;4251:32;4248:52;;;4296:1;4293;4286:12;4248:52;-1:-1:-1;4319:23:1;;4168:180;-1:-1:-1;4168:180:1:o;7123:597::-;7235:4;7264:2;7293;7282:9;7275:21;7325:6;7319:13;7368:6;7363:2;7352:9;7348:18;7341:34;7393:1;7403:140;7417:6;7414:1;7411:13;7403:140;;;7512:14;;;7508:23;;7502:30;7478:17;;;7497:2;7474:26;7467:66;7432:10;;7403:140;;;7561:6;7558:1;7555:13;7552:91;;;7631:1;7626:2;7617:6;7606:9;7602:22;7598:31;7591:42;7552:91;-1:-1:-1;7704:2:1;7683:15;-1:-1:-1;;7679:29:1;7664:45;;;;7711:2;7660:54;;7123:597;-1:-1:-1;;;7123:597:1:o;12067:356::-;12269:2;12251:21;;;12288:18;;;12281:30;12347:34;12342:2;12327:18;;12320:62;12414:2;12399:18;;12067:356::o;15641:980::-;15903:4;15951:3;15940:9;15936:19;15982:6;15971:9;15964:25;16008:2;16046:6;16041:2;16030:9;16026:18;16019:34;16089:3;16084:2;16073:9;16069:18;16062:31;16113:6;16148;16142:13;16179:6;16171;16164:22;16217:3;16206:9;16202:19;16195:26;;16256:2;16248:6;16244:15;16230:29;;16277:1;16287:195;16301:6;16298:1;16295:13;16287:195;;;16366:13;;-1:-1:-1;;;;;16362:39:1;16350:52;;16457:15;;;;16422:12;;;;16398:1;16316:9;16287:195;;;-1:-1:-1;;;;;;;16538:32:1;;;;16533:2;16518:18;;16511:60;-1:-1:-1;;;16602:3:1;16587:19;16580:35;16499:3;15641:980;-1:-1:-1;;;15641:980:1:o;17533:224::-;17572:3;17600:6;17633:2;17630:1;17626:10;17663:2;17660:1;17656:10;17694:3;17690:2;17686:12;17681:3;17678:21;17675:47;;;17702:18;;:::i;:::-;17738:13;;17533:224;-1:-1:-1;;;;17533:224:1:o;17762:128::-;17802:3;17833:1;17829:6;17826:1;17823:13;17820:39;;;17839:18;;:::i;:::-;-1:-1:-1;17875:9:1;;17762:128::o;17895:228::-;17934:3;17962:10;17999:2;17996:1;17992:10;18029:2;18026:1;18022:10;18060:3;18056:2;18052:12;18047:3;18044:21;18041:47;;;18068:18;;:::i;18128:120::-;18168:1;18194;18184:35;;18199:18;;:::i;:::-;-1:-1:-1;18233:9:1;;18128:120::o;18253:191::-;18292:1;18318:10;18355:2;18352:1;18348:10;18377:3;18367:37;;18384:18;;:::i;:::-;18422:10;;18418:20;;;;;18253:191;-1:-1:-1;;18253:191:1:o;18449:168::-;18489:7;18555:1;18551;18547:6;18543:14;18540:1;18537:21;18532:1;18525:9;18518:17;18514:45;18511:71;;;18562:18;;:::i;:::-;-1:-1:-1;18602:9:1;;18449:168::o;18622:125::-;18662:4;18690:1;18687;18684:8;18681:34;;;18695:18;;:::i;:::-;-1:-1:-1;18732:9:1;;18622:125::o;18752:221::-;18791:4;18820:10;18880;;;;18850;;18902:12;;;18899:38;;;18917:18;;:::i;:::-;18954:13;;18752:221;-1:-1:-1;;;18752:221:1:o;18978:380::-;19057:1;19053:12;;;;19100;;;19121:61;;19175:4;19167:6;19163:17;19153:27;;19121:61;19228:2;19220:6;19217:14;19197:18;19194:38;19191:161;;;19274:10;19269:3;19265:20;19262:1;19255:31;19309:4;19306:1;19299:15;19337:4;19334:1;19327:15;19191:161;;18978:380;;;:::o;19363:135::-;19402:3;-1:-1:-1;;19423:17:1;;19420:43;;;19443:18;;:::i;:::-;-1:-1:-1;19490:1:1;19479:13;;19363:135::o;19503:127::-;19564:10;19559:3;19555:20;19552:1;19545:31;19595:4;19592:1;19585:15;19619:4;19616:1;19609:15;19635:127;19696:10;19691:3;19687:20;19684:1;19677:31;19727:4;19724:1;19717:15;19751:4;19748:1;19741:15;19767:127;19828:10;19823:3;19819:20;19816:1;19809:31;19859:4;19856:1;19849:15;19883:4;19880:1;19873:15;20031:131;-1:-1:-1;;;;;20106:31:1;;20096:42;;20086:70;;20152:1;20149;20142:12

Swarm Source

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