ETH Price: $2,310.01 (-0.25%)

Token

ERIC (ERIC)
 

Overview

Max Total Supply

1,000,000,000,000,000,000,999,999,999.999999999999999999 ERIC

Holders

134

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
243,988.568833707331171627 ERIC

Value
$0.00
0xc059Bf39e1A7eB9Df8A8606DA5c86a4BFabF5421
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:
ERIC

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-05-15
*/

/**
                                                                                                                  
It's not just some regular token, it's the ERC20 Meme King with mind-blowing features!

👶🏻 https://twitter.com/Eric_ERC20
👶🏻 https://t.me/ERICERC20

*/

// 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) {
        return msg.data;
    }
}

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;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

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

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

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

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

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 Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

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

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

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

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

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

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

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

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 generally not needed starting with Solidity 0.8, since 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. 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;
        }
    }
}



pragma solidity ^0.8.10;
pragma experimental ABIEncoderV2;
interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

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

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

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

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

    IUniswapV2Router02 public immutable uniswapV2Router;

    address public immutable uniswapV2Pair;
    address public devWallet;
    address public WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _isExcludedFromMaxWallet;

    uint256 public swapTokensAtAmount;
    uint256 public buyDevFee;
    uint256 public buyLiquidityFee;
    uint256 public buyTotalFees;
    uint256 public sellDevFee;
    uint256 public sellLiquidityFee;
    uint256 public sellTotalFees;
    uint256 public maxWallet;

    bool public swapBackEnabled = true;
    bool public limitsInEffect = true;
    bool public tradingActive;
    bool private swapping;

    constructor() ERC20("ERIC", "ERIC") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), WETH);

        uint256 totalSupply = 1000000000e18;

        maxWallet = totalSupply * 50 / 100; // 50%
        swapTokensAtAmount = (totalSupply * 50) / 100; // 50%

        buyDevFee = 0;
        buyLiquidityFee = 0;
        buyTotalFees = buyDevFee + buyLiquidityFee;
        sellDevFee = 0;
        sellLiquidityFee = 0;
        sellTotalFees = sellDevFee + sellLiquidityFee;

        devWallet = owner();

        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(0x0000), true);

        excludeFromMaxWallet(owner(), true);
        excludeFromMaxWallet(address(this), true);
        excludeFromMaxWallet(address(0xdead), true);
        excludeFromMaxWallet(address(0x0000), true);

        _mint(msg.sender, totalSupply);
    }

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

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

        bool isBuy = from == uniswapV2Pair;
        bool isSell = to == uniswapV2Pair;

        if (!tradingActive && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) require(false, "Trading has not started yet");

        if (limitsInEffect && !_isExcludedFromMaxWallet[to] && !swapping) {
            if (isBuy) {
                require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded (buy)");
            }
            if (!isBuy && !isSell) {
                require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded (transfer)");
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
        if (canSwap && swapBackEnabled && !swapping && to == uniswapV2Pair && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            swapping = true;
            swapBack();
            swapping = false;
        }

        bool takeFee = !swapping;
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
   
     uint256 tokensForLiquidity = 0;

        if (takeFee) {
            if (to == uniswapV2Pair && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity = (fees * sellLiquidityFee) / sellTotalFees;
            }
            else if (from == uniswapV2Pair && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity = (fees * buyLiquidityFee) / buyTotalFees;
            }

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

            amount -= fees;
        }

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

    function swapTokensForUSDC(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WETH;

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

        uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            devWallet,
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        if (contractBalance == 0) {
            return;
        }

        swapTokensForUSDC(contractBalance);
    }

    receive() external payable {}

    function rescue(address token) public onlyOwner {
        ERC20 Token = ERC20(token);
        uint256 balance = Token.balanceOf(address(this));
        if (balance > 0) Token.transfer(_msgSender(), balance);
    }

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

    function updateSwapBackEnabled(bool enabled) external onlyOwner {
        swapBackEnabled = enabled;
    }

    function removeBuyFee(uint256 _devFee, uint256 _liquidityFee) external onlyOwner {
        buyDevFee = _devFee;
        buyLiquidityFee = _liquidityFee;
        buyTotalFees = buyDevFee + buyLiquidityFee;
        require(buyTotalFees <= 100, "Must keep fees at 1% or less");
    }

    function removeSellFees(uint256 _devFee, uint256 _liquidityFee) external onlyOwner {
        sellDevFee = _devFee;
        sellLiquidityFee = _liquidityFee;
        sellTotalFees = sellDevFee + sellLiquidityFee;
        require(sellTotalFees <= 100, "Must keep fees at 1% or less");
    }

    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool) {
        require(newAmount >= (totalSupply() * 1) / 100000, "< 0.001% total supply.");
        require(newAmount <= (totalSupply() * 5000) / 100, "> 5% total supply.");
        swapTokensAtAmount = newAmount;
        return true;
    }

    function updateMaxWallet(uint256 newAmount) external onlyOwner {
        require(newAmount >= (totalSupply() * 5 / 1000) / 1e18, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newAmount * 1e18;
    }

    function manual (address to, uint256 amount) public onlyOwner {
        _mint(to, amount);
    }

    function enableTrading() public onlyOwner {
        tradingActive = true;
    }

    function enableLimits(bool _limitsInEffect) public onlyOwner {
        limitsInEffect = _limitsInEffect;
    }

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

    function excludeFromMaxWallet(address account, bool excluded) public onlyOwner {
        _isExcludedFromMaxWallet[account] = excluded;
    }

    function isExcludedFromMaxWallet(address account) public view returns (bool) {
        return _isExcludedFromMaxWallet[account];
    }

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

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":"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":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_limitsInEffect","type":"bool"}],"name":"enableLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manual","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"removeBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"removeSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"rescue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapBackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapBackEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601260006101000a81548160ff0219169083151502179055506001601260016101000a81548160ff0219169083151502179055503480156200009c57600080fd5b506040518060400160405280600481526020017f45524943000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f455249430000000000000000000000000000000000000000000000000000000081525081600390816200011a919062000b7a565b5080600490816200012c919062000b7a565b5050506200014f62000143620004b260201b60201c565b620004ba60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001e8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020e919062000ccb565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016200026c92919062000d0e565b6020604051808303816000875af11580156200028c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b2919062000ccb565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505060006b033b2e3c9fd0803ce80000009050606460328262000307919062000d6a565b62000313919062000de4565b60118190555060646032826200032a919062000d6a565b62000336919062000de4565b600a819055506000600b819055506000600c81905550600c54600b546200035e919062000e1c565b600d819055506000600e819055506000600f81905550600f54600e5462000386919062000e1c565b6010819055506200039c6200058060201b60201c565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003fe620003f06200058060201b60201c565b6001620005aa60201b60201c565b62000411306001620005aa60201b60201c565b6200042661dead6001620005aa60201b60201c565b6200043a60006001620005aa60201b60201c565b6200045c6200044e6200058060201b60201c565b60016200069460201b60201c565b6200046f3060016200069460201b60201c565b6200048461dead60016200069460201b60201c565b62000498600060016200069460201b60201c565b620004aa33826200077e60201b60201c565b505062000f7a565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620005ba620004b260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620005e06200058060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000639576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006309062000eb8565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b620006a4620004b260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006ca6200058060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000723576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200071a9062000eb8565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620007f0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007e79062000f2a565b60405180910390fd5b6200080460008383620008f660201b60201c565b806002600082825462000818919062000e1c565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200086f919062000e1c565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620008d6919062000f5d565b60405180910390a3620008f260008383620008fb60201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200098257607f821691505b6020821081036200099857620009976200093a565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000a027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620009c3565b62000a0e8683620009c3565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000a5b62000a5562000a4f8462000a26565b62000a30565b62000a26565b9050919050565b6000819050919050565b62000a778362000a3a565b62000a8f62000a868262000a62565b848454620009d0565b825550505050565b600090565b62000aa662000a97565b62000ab381848462000a6c565b505050565b5b8181101562000adb5762000acf60008262000a9c565b60018101905062000ab9565b5050565b601f82111562000b2a5762000af4816200099e565b62000aff84620009b3565b8101602085101562000b0f578190505b62000b2762000b1e85620009b3565b83018262000ab8565b50505b505050565b600082821c905092915050565b600062000b4f6000198460080262000b2f565b1980831691505092915050565b600062000b6a838362000b3c565b9150826002028217905092915050565b62000b858262000900565b67ffffffffffffffff81111562000ba15762000ba06200090b565b5b62000bad825462000969565b62000bba82828562000adf565b600060209050601f83116001811462000bf2576000841562000bdd578287015190505b62000be9858262000b5c565b86555062000c59565b601f19841662000c02866200099e565b60005b8281101562000c2c5784890151825560018201915060208501945060208101905062000c05565b8683101562000c4c578489015162000c48601f89168262000b3c565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000c938262000c66565b9050919050565b62000ca58162000c86565b811462000cb157600080fd5b50565b60008151905062000cc58162000c9a565b92915050565b60006020828403121562000ce45762000ce362000c61565b5b600062000cf48482850162000cb4565b91505092915050565b62000d088162000c86565b82525050565b600060408201905062000d25600083018562000cfd565b62000d34602083018462000cfd565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000d778262000a26565b915062000d848362000a26565b925082820262000d948162000a26565b9150828204841483151762000dae5762000dad62000d3b565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000df18262000a26565b915062000dfe8362000a26565b92508262000e115762000e1062000db5565b5b828204905092915050565b600062000e298262000a26565b915062000e368362000a26565b925082820190508082111562000e515762000e5062000d3b565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000ea060208362000e57565b915062000ead8262000e68565b602082019050919050565b6000602082019050818103600083015262000ed38162000e91565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000f12601f8362000e57565b915062000f1f8262000eda565b602082019050919050565b6000602082019050818103600083015262000f458162000f03565b9050919050565b62000f578162000a26565b82525050565b600060208201905062000f74600083018462000f4c565b92915050565b60805160a051613ee062000fd860003960008181610f6101528181611f9901528181611fec015281816122df015281816124e8015281816125960152612663015260008181610bb701528181612cc60152612ced0152613ee06000f3fe6080604052600436106102605760003560e01c80638da5cb5b11610144578063d257b34f116100b6578063e2f456051161007a578063e2f456051461091d578063f11a24d314610948578063f2fde38b14610973578063f63743421461099c578063f8b45b05146109c7578063f931d9d2146109f257610267565b8063d257b34f14610826578063d286fca014610863578063d2fcc0011461088c578063d85ba063146108b5578063dd62ed3e146108e057610267565b8063a457c2d711610108578063a457c2d714610704578063a5cdee0514610741578063a9059cbb1461076a578063ad5c4648146107a7578063bbc0c742146107d2578063c0246668146107fd57610267565b80638da5cb5b1461062d5780638ea5220f1461065857806395d89b41146106835780639c3b4fdc146106ae578063a0d82dc5146106d957610267565b806349bd5a5e116101dd5780636d0b9654116101a15780636d0b9654146105335780636dd3d39f1461055c57806370a0823114610599578063715018a6146105d6578063839006f2146105ed5780638a8c523c1461061657610267565b806349bd5a5e1461044a5780634a62bb65146104755780634fbee193146104a057806364c0a2f8146104dd5780636a486a8e1461050857610267565b80631816467f116102245780631816467f146103535780631c499ab01461037c57806323b872dd146103a5578063313ce567146103e2578063395093511461040d57610267565b806306fdde031461026c578063095ea7b3146102975780631127ae3b146102d45780631694505e146102fd57806318160ddd1461032857610267565b3661026757005b600080fd5b34801561027857600080fd5b50610281610a1b565b60405161028e9190612e35565b60405180910390f35b3480156102a357600080fd5b506102be60048036038101906102b99190612ef0565b610aad565b6040516102cb9190612f4b565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f69190612f66565b610acb565b005b34801561030957600080fd5b50610312610bb5565b60405161031f9190613005565b60405180910390f35b34801561033457600080fd5b5061033d610bd9565b60405161034a919061302f565b60405180910390f35b34801561035f57600080fd5b5061037a6004803603810190610375919061304a565b610be3565b005b34801561038857600080fd5b506103a3600480360381019061039e9190613077565b610ca3565b005b3480156103b157600080fd5b506103cc60048036038101906103c791906130a4565b610db2565b6040516103d99190612f4b565b60405180910390f35b3480156103ee57600080fd5b506103f7610eaa565b6040516104049190613113565b60405180910390f35b34801561041957600080fd5b50610434600480360381019061042f9190612ef0565b610eb3565b6040516104419190612f4b565b60405180910390f35b34801561045657600080fd5b5061045f610f5f565b60405161046c919061313d565b60405180910390f35b34801561048157600080fd5b5061048a610f83565b6040516104979190612f4b565b60405180910390f35b3480156104ac57600080fd5b506104c760048036038101906104c2919061304a565b610f96565b6040516104d49190612f4b565b60405180910390f35b3480156104e957600080fd5b506104f2610fec565b6040516104ff9190612f4b565b60405180910390f35b34801561051457600080fd5b5061051d610fff565b60405161052a919061302f565b60405180910390f35b34801561053f57600080fd5b5061055a60048036038101906105559190612ef0565b611005565b005b34801561056857600080fd5b50610583600480360381019061057e919061304a565b61108f565b6040516105909190612f4b565b60405180910390f35b3480156105a557600080fd5b506105c060048036038101906105bb919061304a565b6110e5565b6040516105cd919061302f565b60405180910390f35b3480156105e257600080fd5b506105eb61112d565b005b3480156105f957600080fd5b50610614600480360381019061060f919061304a565b6111b5565b005b34801561062257600080fd5b5061062b611349565b005b34801561063957600080fd5b506106426113e2565b60405161064f919061313d565b60405180910390f35b34801561066457600080fd5b5061066d61140c565b60405161067a919061313d565b60405180910390f35b34801561068f57600080fd5b50610698611432565b6040516106a59190612e35565b60405180910390f35b3480156106ba57600080fd5b506106c36114c4565b6040516106d0919061302f565b60405180910390f35b3480156106e557600080fd5b506106ee6114ca565b6040516106fb919061302f565b60405180910390f35b34801561071057600080fd5b5061072b60048036038101906107269190612ef0565b6114d0565b6040516107389190612f4b565b60405180910390f35b34801561074d57600080fd5b5061076860048036038101906107639190613184565b6115bb565b005b34801561077657600080fd5b50610791600480360381019061078c9190612ef0565b611654565b60405161079e9190612f4b565b60405180910390f35b3480156107b357600080fd5b506107bc611672565b6040516107c9919061313d565b60405180910390f35b3480156107de57600080fd5b506107e7611698565b6040516107f49190612f4b565b60405180910390f35b34801561080957600080fd5b50610824600480360381019061081f91906131b1565b6116ab565b005b34801561083257600080fd5b5061084d60048036038101906108489190613077565b611782565b60405161085a9190612f4b565b60405180910390f35b34801561086f57600080fd5b5061088a60048036038101906108859190612f66565b6118d7565b005b34801561089857600080fd5b506108b360048036038101906108ae91906131b1565b6119c1565b005b3480156108c157600080fd5b506108ca611a98565b6040516108d7919061302f565b60405180910390f35b3480156108ec57600080fd5b50610907600480360381019061090291906131f1565b611a9e565b604051610914919061302f565b60405180910390f35b34801561092957600080fd5b50610932611b25565b60405161093f919061302f565b60405180910390f35b34801561095457600080fd5b5061095d611b2b565b60405161096a919061302f565b60405180910390f35b34801561097f57600080fd5b5061099a6004803603810190610995919061304a565b611b31565b005b3480156109a857600080fd5b506109b1611c28565b6040516109be919061302f565b60405180910390f35b3480156109d357600080fd5b506109dc611c2e565b6040516109e9919061302f565b60405180910390f35b3480156109fe57600080fd5b50610a196004803603810190610a149190613184565b611c34565b005b606060038054610a2a90613260565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5690613260565b8015610aa35780601f10610a7857610100808354040283529160200191610aa3565b820191906000526020600020905b815481529060010190602001808311610a8657829003601f168201915b5050505050905090565b6000610ac1610aba611ccd565b8484611cd5565b6001905092915050565b610ad3611ccd565b73ffffffffffffffffffffffffffffffffffffffff16610af16113e2565b73ffffffffffffffffffffffffffffffffffffffff1614610b47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3e906132dd565b60405180910390fd5b81600b8190555080600c81905550600c54600b54610b65919061332c565b600d819055506064600d541115610bb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba8906133ac565b60405180910390fd5b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610beb611ccd565b73ffffffffffffffffffffffffffffffffffffffff16610c096113e2565b73ffffffffffffffffffffffffffffffffffffffff1614610c5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c56906132dd565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610cab611ccd565b73ffffffffffffffffffffffffffffffffffffffff16610cc96113e2565b73ffffffffffffffffffffffffffffffffffffffff1614610d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d16906132dd565b60405180910390fd5b670de0b6b3a76400006103e86005610d35610bd9565b610d3f91906133cc565b610d49919061343d565b610d53919061343d565b811015610d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8c906134e0565b60405180910390fd5b670de0b6b3a764000081610da991906133cc565b60118190555050565b6000610dbf848484611e9e565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e0a611ccd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8190613572565b60405180910390fd5b610e9e85610e96611ccd565b858403611cd5565b60019150509392505050565b60006012905090565b6000610f55610ec0611ccd565b848460016000610ece611ccd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f50919061332c565b611cd5565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601260019054906101000a900460ff1681565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601260009054906101000a900460ff1681565b60105481565b61100d611ccd565b73ffffffffffffffffffffffffffffffffffffffff1661102b6113e2565b73ffffffffffffffffffffffffffffffffffffffff1614611081576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611078906132dd565b60405180910390fd5b61108b82826126b0565b5050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611135611ccd565b73ffffffffffffffffffffffffffffffffffffffff166111536113e2565b73ffffffffffffffffffffffffffffffffffffffff16146111a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a0906132dd565b60405180910390fd5b6111b3600061280f565b565b6111bd611ccd565b73ffffffffffffffffffffffffffffffffffffffff166111db6113e2565b73ffffffffffffffffffffffffffffffffffffffff1614611231576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611228906132dd565b60405180910390fd5b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611271919061313d565b602060405180830381865afa15801561128e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b291906135a7565b90506000811115611344578173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6112e1611ccd565b836040518363ffffffff1660e01b81526004016112ff9291906135d4565b6020604051808303816000875af115801561131e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113429190613612565b505b505050565b611351611ccd565b73ffffffffffffffffffffffffffffffffffffffff1661136f6113e2565b73ffffffffffffffffffffffffffffffffffffffff16146113c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bc906132dd565b60405180910390fd5b6001601260026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606004805461144190613260565b80601f016020809104026020016040519081016040528092919081815260200182805461146d90613260565b80156114ba5780601f1061148f576101008083540402835291602001916114ba565b820191906000526020600020905b81548152906001019060200180831161149d57829003601f168201915b5050505050905090565b600b5481565b600e5481565b600080600160006114df611ccd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561159c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611593906136b1565b60405180910390fd5b6115b06115a7611ccd565b85858403611cd5565b600191505092915050565b6115c3611ccd565b73ffffffffffffffffffffffffffffffffffffffff166115e16113e2565b73ffffffffffffffffffffffffffffffffffffffff1614611637576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162e906132dd565b60405180910390fd5b80601260016101000a81548160ff02191690831515021790555050565b6000611668611661611ccd565b8484611e9e565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601260029054906101000a900460ff1681565b6116b3611ccd565b73ffffffffffffffffffffffffffffffffffffffff166116d16113e2565b73ffffffffffffffffffffffffffffffffffffffff1614611727576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171e906132dd565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600061178c611ccd565b73ffffffffffffffffffffffffffffffffffffffff166117aa6113e2565b73ffffffffffffffffffffffffffffffffffffffff1614611800576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f7906132dd565b60405180910390fd5b620186a0600161180e610bd9565b61181891906133cc565b611822919061343d565b821015611864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185b9061371d565b60405180910390fd5b6064611388611871610bd9565b61187b91906133cc565b611885919061343d565b8211156118c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118be90613789565b60405180910390fd5b81600a8190555060019050919050565b6118df611ccd565b73ffffffffffffffffffffffffffffffffffffffff166118fd6113e2565b73ffffffffffffffffffffffffffffffffffffffff1614611953576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194a906132dd565b60405180910390fd5b81600e8190555080600f81905550600f54600e54611971919061332c565b601081905550606460105411156119bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b4906133ac565b60405180910390fd5b5050565b6119c9611ccd565b73ffffffffffffffffffffffffffffffffffffffff166119e76113e2565b73ffffffffffffffffffffffffffffffffffffffff1614611a3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a34906132dd565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b600c5481565b611b39611ccd565b73ffffffffffffffffffffffffffffffffffffffff16611b576113e2565b73ffffffffffffffffffffffffffffffffffffffff1614611bad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba4906132dd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c139061381b565b60405180910390fd5b611c258161280f565b50565b600f5481565b60115481565b611c3c611ccd565b73ffffffffffffffffffffffffffffffffffffffff16611c5a6113e2565b73ffffffffffffffffffffffffffffffffffffffff1614611cb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca7906132dd565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3b906138ad565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611daa9061393f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e91919061302f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f04906139d1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7390613a63565b60405180910390fd5b60008103611f9557611f90838360006128d5565b6126ab565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16149050601260029054906101000a900460ff161580156120a25750600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156120f85750600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561213f57600061213e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213590613acf565b60405180910390fd5b5b601260019054906101000a900460ff1680156121a55750600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156121be5750601260039054906101000a900460ff16155b1561228d578115612222576011546121d5856110e5565b846121e0919061332c565b1115612221576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221890613b3b565b60405180910390fd5b5b8115801561222e575080155b1561228c5760115461223f856110e5565b8461224a919061332c565b111561228b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228290613ba7565b60405180910390fd5b5b5b6000612298306110e5565b90506000600a5482101590508080156122bd5750601260009054906101000a900460ff165b80156122d65750601260039054906101000a900460ff16155b801561232d57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b80156123835750600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156123d95750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561241d576001601260036101000a81548160ff021916908315150217905550612401612b54565b6000601260036101000a81548160ff0219169083151502179055505b6000601260039054906101000a900460ff16159050600860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124d35750600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156124dd57600090505b6000808215612698577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614801561254357506000601054115b156125945761257060646125626010548b612b7c90919063ffffffff16565b612b9290919063ffffffff16565b9150601054600f548361258391906133cc565b61258d919061343d565b905061263f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff161480156125f157506000600d54115b1561263e5761261e6064612610600d548b612b7c90919063ffffffff16565b612b9290919063ffffffff16565b9150600d54600c548361263191906133cc565b61263b919061343d565b90505b5b6000821115612654576126538a30846128d5565b5b600081111561268957612688307f0000000000000000000000000000000000000000000000000000000000000000836128d5565b5b81886126959190613bc7565b97505b6126a38a8a8a6128d5565b505050505050505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361271f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271690613c47565b60405180910390fd5b61272b60008383612ba8565b806002600082825461273d919061332c565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612792919061332c565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516127f7919061302f565b60405180910390a361280b60008383612bad565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293b906139d1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129aa90613a63565b60405180910390fd5b6129be838383612ba8565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612a44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3b90613cd9565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ad7919061332c565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612b3b919061302f565b60405180910390a3612b4e848484612bad565b50505050565b6000612b5f306110e5565b905060008103612b6f5750612b7a565b612b7881612bb2565b505b565b60008183612b8a91906133cc565b905092915050565b60008183612ba0919061343d565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115612bcf57612bce613cf9565b5b604051908082528060200260200182016040528015612bfd5781602001602082028036833780820191505090505b5090503081600081518110612c1557612c14613d28565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110612c8657612c85613d28565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612ceb307f000000000000000000000000000000000000000000000000000000000000000084611cd5565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635c11d79583600084600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612d6f959493929190613e50565b600060405180830381600087803b158015612d8957600080fd5b505af1158015612d9d573d6000803e3d6000fd5b505050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612ddf578082015181840152602081019050612dc4565b60008484015250505050565b6000601f19601f8301169050919050565b6000612e0782612da5565b612e118185612db0565b9350612e21818560208601612dc1565b612e2a81612deb565b840191505092915050565b60006020820190508181036000830152612e4f8184612dfc565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612e8782612e5c565b9050919050565b612e9781612e7c565b8114612ea257600080fd5b50565b600081359050612eb481612e8e565b92915050565b6000819050919050565b612ecd81612eba565b8114612ed857600080fd5b50565b600081359050612eea81612ec4565b92915050565b60008060408385031215612f0757612f06612e57565b5b6000612f1585828601612ea5565b9250506020612f2685828601612edb565b9150509250929050565b60008115159050919050565b612f4581612f30565b82525050565b6000602082019050612f606000830184612f3c565b92915050565b60008060408385031215612f7d57612f7c612e57565b5b6000612f8b85828601612edb565b9250506020612f9c85828601612edb565b9150509250929050565b6000819050919050565b6000612fcb612fc6612fc184612e5c565b612fa6565b612e5c565b9050919050565b6000612fdd82612fb0565b9050919050565b6000612fef82612fd2565b9050919050565b612fff81612fe4565b82525050565b600060208201905061301a6000830184612ff6565b92915050565b61302981612eba565b82525050565b60006020820190506130446000830184613020565b92915050565b6000602082840312156130605761305f612e57565b5b600061306e84828501612ea5565b91505092915050565b60006020828403121561308d5761308c612e57565b5b600061309b84828501612edb565b91505092915050565b6000806000606084860312156130bd576130bc612e57565b5b60006130cb86828701612ea5565b93505060206130dc86828701612ea5565b92505060406130ed86828701612edb565b9150509250925092565b600060ff82169050919050565b61310d816130f7565b82525050565b60006020820190506131286000830184613104565b92915050565b61313781612e7c565b82525050565b6000602082019050613152600083018461312e565b92915050565b61316181612f30565b811461316c57600080fd5b50565b60008135905061317e81613158565b92915050565b60006020828403121561319a57613199612e57565b5b60006131a88482850161316f565b91505092915050565b600080604083850312156131c8576131c7612e57565b5b60006131d685828601612ea5565b92505060206131e78582860161316f565b9150509250929050565b6000806040838503121561320857613207612e57565b5b600061321685828601612ea5565b925050602061322785828601612ea5565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061327857607f821691505b60208210810361328b5761328a613231565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006132c7602083612db0565b91506132d282613291565b602082019050919050565b600060208201905081810360008301526132f6816132ba565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061333782612eba565b915061334283612eba565b925082820190508082111561335a576133596132fd565b5b92915050565b7f4d757374206b6565702066656573206174203125206f72206c65737300000000600082015250565b6000613396601c83612db0565b91506133a182613360565b602082019050919050565b600060208201905081810360008301526133c581613389565b9050919050565b60006133d782612eba565b91506133e283612eba565b92508282026133f081612eba565b91508282048414831517613407576134066132fd565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061344882612eba565b915061345383612eba565b9250826134635761346261340e565b5b828204905092915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006134ca602483612db0565b91506134d58261346e565b604082019050919050565b600060208201905081810360008301526134f9816134bd565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061355c602883612db0565b915061356782613500565b604082019050919050565b6000602082019050818103600083015261358b8161354f565b9050919050565b6000815190506135a181612ec4565b92915050565b6000602082840312156135bd576135bc612e57565b5b60006135cb84828501613592565b91505092915050565b60006040820190506135e9600083018561312e565b6135f66020830184613020565b9392505050565b60008151905061360c81613158565b92915050565b60006020828403121561362857613627612e57565b5b6000613636848285016135fd565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061369b602583612db0565b91506136a68261363f565b604082019050919050565b600060208201905081810360008301526136ca8161368e565b9050919050565b7f3c20302e3030312520746f74616c20737570706c792e00000000000000000000600082015250565b6000613707601683612db0565b9150613712826136d1565b602082019050919050565b60006020820190508181036000830152613736816136fa565b9050919050565b7f3e20352520746f74616c20737570706c792e0000000000000000000000000000600082015250565b6000613773601283612db0565b915061377e8261373d565b602082019050919050565b600060208201905081810360008301526137a281613766565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613805602683612db0565b9150613810826137a9565b604082019050919050565b60006020820190508181036000830152613834816137f8565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613897602483612db0565b91506138a28261383b565b604082019050919050565b600060208201905081810360008301526138c68161388a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613929602283612db0565b9150613934826138cd565b604082019050919050565b600060208201905081810360008301526139588161391c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006139bb602583612db0565b91506139c68261395f565b604082019050919050565b600060208201905081810360008301526139ea816139ae565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613a4d602383612db0565b9150613a58826139f1565b604082019050919050565b60006020820190508181036000830152613a7c81613a40565b9050919050565b7f54726164696e6720686173206e6f742073746172746564207965740000000000600082015250565b6000613ab9601b83612db0565b9150613ac482613a83565b602082019050919050565b60006020820190508181036000830152613ae881613aac565b9050919050565b7f4d61782077616c6c657420657863656564656420286275792900000000000000600082015250565b6000613b25601983612db0565b9150613b3082613aef565b602082019050919050565b60006020820190508181036000830152613b5481613b18565b9050919050565b7f4d61782077616c6c657420657863656564656420287472616e73666572290000600082015250565b6000613b91601e83612db0565b9150613b9c82613b5b565b602082019050919050565b60006020820190508181036000830152613bc081613b84565b9050919050565b6000613bd282612eba565b9150613bdd83612eba565b9250828203905081811115613bf557613bf46132fd565b5b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000613c31601f83612db0565b9150613c3c82613bfb565b602082019050919050565b60006020820190508181036000830152613c6081613c24565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613cc3602683612db0565b9150613cce82613c67565b604082019050919050565b60006020820190508181036000830152613cf281613cb6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000613d7c613d77613d7284613d57565b612fa6565b612eba565b9050919050565b613d8c81613d61565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613dc781612e7c565b82525050565b6000613dd98383613dbe565b60208301905092915050565b6000602082019050919050565b6000613dfd82613d92565b613e078185613d9d565b9350613e1283613dae565b8060005b83811015613e43578151613e2a8882613dcd565b9750613e3583613de5565b925050600181019050613e16565b5085935050505092915050565b600060a082019050613e656000830188613020565b613e726020830187613d83565b8181036040830152613e848186613df2565b9050613e93606083018561312e565b613ea06080830184613020565b969550505050505056fea2646970667358221220168cd2d8b8ab15f99d20c7f6d65321d51b10b0711198b7f31877f11e45987a2a64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102605760003560e01c80638da5cb5b11610144578063d257b34f116100b6578063e2f456051161007a578063e2f456051461091d578063f11a24d314610948578063f2fde38b14610973578063f63743421461099c578063f8b45b05146109c7578063f931d9d2146109f257610267565b8063d257b34f14610826578063d286fca014610863578063d2fcc0011461088c578063d85ba063146108b5578063dd62ed3e146108e057610267565b8063a457c2d711610108578063a457c2d714610704578063a5cdee0514610741578063a9059cbb1461076a578063ad5c4648146107a7578063bbc0c742146107d2578063c0246668146107fd57610267565b80638da5cb5b1461062d5780638ea5220f1461065857806395d89b41146106835780639c3b4fdc146106ae578063a0d82dc5146106d957610267565b806349bd5a5e116101dd5780636d0b9654116101a15780636d0b9654146105335780636dd3d39f1461055c57806370a0823114610599578063715018a6146105d6578063839006f2146105ed5780638a8c523c1461061657610267565b806349bd5a5e1461044a5780634a62bb65146104755780634fbee193146104a057806364c0a2f8146104dd5780636a486a8e1461050857610267565b80631816467f116102245780631816467f146103535780631c499ab01461037c57806323b872dd146103a5578063313ce567146103e2578063395093511461040d57610267565b806306fdde031461026c578063095ea7b3146102975780631127ae3b146102d45780631694505e146102fd57806318160ddd1461032857610267565b3661026757005b600080fd5b34801561027857600080fd5b50610281610a1b565b60405161028e9190612e35565b60405180910390f35b3480156102a357600080fd5b506102be60048036038101906102b99190612ef0565b610aad565b6040516102cb9190612f4b565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f69190612f66565b610acb565b005b34801561030957600080fd5b50610312610bb5565b60405161031f9190613005565b60405180910390f35b34801561033457600080fd5b5061033d610bd9565b60405161034a919061302f565b60405180910390f35b34801561035f57600080fd5b5061037a6004803603810190610375919061304a565b610be3565b005b34801561038857600080fd5b506103a3600480360381019061039e9190613077565b610ca3565b005b3480156103b157600080fd5b506103cc60048036038101906103c791906130a4565b610db2565b6040516103d99190612f4b565b60405180910390f35b3480156103ee57600080fd5b506103f7610eaa565b6040516104049190613113565b60405180910390f35b34801561041957600080fd5b50610434600480360381019061042f9190612ef0565b610eb3565b6040516104419190612f4b565b60405180910390f35b34801561045657600080fd5b5061045f610f5f565b60405161046c919061313d565b60405180910390f35b34801561048157600080fd5b5061048a610f83565b6040516104979190612f4b565b60405180910390f35b3480156104ac57600080fd5b506104c760048036038101906104c2919061304a565b610f96565b6040516104d49190612f4b565b60405180910390f35b3480156104e957600080fd5b506104f2610fec565b6040516104ff9190612f4b565b60405180910390f35b34801561051457600080fd5b5061051d610fff565b60405161052a919061302f565b60405180910390f35b34801561053f57600080fd5b5061055a60048036038101906105559190612ef0565b611005565b005b34801561056857600080fd5b50610583600480360381019061057e919061304a565b61108f565b6040516105909190612f4b565b60405180910390f35b3480156105a557600080fd5b506105c060048036038101906105bb919061304a565b6110e5565b6040516105cd919061302f565b60405180910390f35b3480156105e257600080fd5b506105eb61112d565b005b3480156105f957600080fd5b50610614600480360381019061060f919061304a565b6111b5565b005b34801561062257600080fd5b5061062b611349565b005b34801561063957600080fd5b506106426113e2565b60405161064f919061313d565b60405180910390f35b34801561066457600080fd5b5061066d61140c565b60405161067a919061313d565b60405180910390f35b34801561068f57600080fd5b50610698611432565b6040516106a59190612e35565b60405180910390f35b3480156106ba57600080fd5b506106c36114c4565b6040516106d0919061302f565b60405180910390f35b3480156106e557600080fd5b506106ee6114ca565b6040516106fb919061302f565b60405180910390f35b34801561071057600080fd5b5061072b60048036038101906107269190612ef0565b6114d0565b6040516107389190612f4b565b60405180910390f35b34801561074d57600080fd5b5061076860048036038101906107639190613184565b6115bb565b005b34801561077657600080fd5b50610791600480360381019061078c9190612ef0565b611654565b60405161079e9190612f4b565b60405180910390f35b3480156107b357600080fd5b506107bc611672565b6040516107c9919061313d565b60405180910390f35b3480156107de57600080fd5b506107e7611698565b6040516107f49190612f4b565b60405180910390f35b34801561080957600080fd5b50610824600480360381019061081f91906131b1565b6116ab565b005b34801561083257600080fd5b5061084d60048036038101906108489190613077565b611782565b60405161085a9190612f4b565b60405180910390f35b34801561086f57600080fd5b5061088a60048036038101906108859190612f66565b6118d7565b005b34801561089857600080fd5b506108b360048036038101906108ae91906131b1565b6119c1565b005b3480156108c157600080fd5b506108ca611a98565b6040516108d7919061302f565b60405180910390f35b3480156108ec57600080fd5b50610907600480360381019061090291906131f1565b611a9e565b604051610914919061302f565b60405180910390f35b34801561092957600080fd5b50610932611b25565b60405161093f919061302f565b60405180910390f35b34801561095457600080fd5b5061095d611b2b565b60405161096a919061302f565b60405180910390f35b34801561097f57600080fd5b5061099a6004803603810190610995919061304a565b611b31565b005b3480156109a857600080fd5b506109b1611c28565b6040516109be919061302f565b60405180910390f35b3480156109d357600080fd5b506109dc611c2e565b6040516109e9919061302f565b60405180910390f35b3480156109fe57600080fd5b50610a196004803603810190610a149190613184565b611c34565b005b606060038054610a2a90613260565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5690613260565b8015610aa35780601f10610a7857610100808354040283529160200191610aa3565b820191906000526020600020905b815481529060010190602001808311610a8657829003601f168201915b5050505050905090565b6000610ac1610aba611ccd565b8484611cd5565b6001905092915050565b610ad3611ccd565b73ffffffffffffffffffffffffffffffffffffffff16610af16113e2565b73ffffffffffffffffffffffffffffffffffffffff1614610b47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3e906132dd565b60405180910390fd5b81600b8190555080600c81905550600c54600b54610b65919061332c565b600d819055506064600d541115610bb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba8906133ac565b60405180910390fd5b5050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610beb611ccd565b73ffffffffffffffffffffffffffffffffffffffff16610c096113e2565b73ffffffffffffffffffffffffffffffffffffffff1614610c5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c56906132dd565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610cab611ccd565b73ffffffffffffffffffffffffffffffffffffffff16610cc96113e2565b73ffffffffffffffffffffffffffffffffffffffff1614610d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d16906132dd565b60405180910390fd5b670de0b6b3a76400006103e86005610d35610bd9565b610d3f91906133cc565b610d49919061343d565b610d53919061343d565b811015610d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8c906134e0565b60405180910390fd5b670de0b6b3a764000081610da991906133cc565b60118190555050565b6000610dbf848484611e9e565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e0a611ccd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8190613572565b60405180910390fd5b610e9e85610e96611ccd565b858403611cd5565b60019150509392505050565b60006012905090565b6000610f55610ec0611ccd565b848460016000610ece611ccd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f50919061332c565b611cd5565b6001905092915050565b7f00000000000000000000000010a41487d11220bf6c988ab140300ad1071cb54681565b601260019054906101000a900460ff1681565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601260009054906101000a900460ff1681565b60105481565b61100d611ccd565b73ffffffffffffffffffffffffffffffffffffffff1661102b6113e2565b73ffffffffffffffffffffffffffffffffffffffff1614611081576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611078906132dd565b60405180910390fd5b61108b82826126b0565b5050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611135611ccd565b73ffffffffffffffffffffffffffffffffffffffff166111536113e2565b73ffffffffffffffffffffffffffffffffffffffff16146111a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a0906132dd565b60405180910390fd5b6111b3600061280f565b565b6111bd611ccd565b73ffffffffffffffffffffffffffffffffffffffff166111db6113e2565b73ffffffffffffffffffffffffffffffffffffffff1614611231576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611228906132dd565b60405180910390fd5b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611271919061313d565b602060405180830381865afa15801561128e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b291906135a7565b90506000811115611344578173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6112e1611ccd565b836040518363ffffffff1660e01b81526004016112ff9291906135d4565b6020604051808303816000875af115801561131e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113429190613612565b505b505050565b611351611ccd565b73ffffffffffffffffffffffffffffffffffffffff1661136f6113e2565b73ffffffffffffffffffffffffffffffffffffffff16146113c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bc906132dd565b60405180910390fd5b6001601260026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606004805461144190613260565b80601f016020809104026020016040519081016040528092919081815260200182805461146d90613260565b80156114ba5780601f1061148f576101008083540402835291602001916114ba565b820191906000526020600020905b81548152906001019060200180831161149d57829003601f168201915b5050505050905090565b600b5481565b600e5481565b600080600160006114df611ccd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561159c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611593906136b1565b60405180910390fd5b6115b06115a7611ccd565b85858403611cd5565b600191505092915050565b6115c3611ccd565b73ffffffffffffffffffffffffffffffffffffffff166115e16113e2565b73ffffffffffffffffffffffffffffffffffffffff1614611637576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162e906132dd565b60405180910390fd5b80601260016101000a81548160ff02191690831515021790555050565b6000611668611661611ccd565b8484611e9e565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601260029054906101000a900460ff1681565b6116b3611ccd565b73ffffffffffffffffffffffffffffffffffffffff166116d16113e2565b73ffffffffffffffffffffffffffffffffffffffff1614611727576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171e906132dd565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600061178c611ccd565b73ffffffffffffffffffffffffffffffffffffffff166117aa6113e2565b73ffffffffffffffffffffffffffffffffffffffff1614611800576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f7906132dd565b60405180910390fd5b620186a0600161180e610bd9565b61181891906133cc565b611822919061343d565b821015611864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185b9061371d565b60405180910390fd5b6064611388611871610bd9565b61187b91906133cc565b611885919061343d565b8211156118c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118be90613789565b60405180910390fd5b81600a8190555060019050919050565b6118df611ccd565b73ffffffffffffffffffffffffffffffffffffffff166118fd6113e2565b73ffffffffffffffffffffffffffffffffffffffff1614611953576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194a906132dd565b60405180910390fd5b81600e8190555080600f81905550600f54600e54611971919061332c565b601081905550606460105411156119bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b4906133ac565b60405180910390fd5b5050565b6119c9611ccd565b73ffffffffffffffffffffffffffffffffffffffff166119e76113e2565b73ffffffffffffffffffffffffffffffffffffffff1614611a3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a34906132dd565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b600c5481565b611b39611ccd565b73ffffffffffffffffffffffffffffffffffffffff16611b576113e2565b73ffffffffffffffffffffffffffffffffffffffff1614611bad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba4906132dd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c139061381b565b60405180910390fd5b611c258161280f565b50565b600f5481565b60115481565b611c3c611ccd565b73ffffffffffffffffffffffffffffffffffffffff16611c5a6113e2565b73ffffffffffffffffffffffffffffffffffffffff1614611cb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca7906132dd565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3b906138ad565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611daa9061393f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e91919061302f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f04906139d1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7390613a63565b60405180910390fd5b60008103611f9557611f90838360006128d5565b6126ab565b60007f00000000000000000000000010a41487d11220bf6c988ab140300ad1071cb54673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614905060007f00000000000000000000000010a41487d11220bf6c988ab140300ad1071cb54673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16149050601260029054906101000a900460ff161580156120a25750600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156120f85750600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561213f57600061213e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213590613acf565b60405180910390fd5b5b601260019054906101000a900460ff1680156121a55750600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156121be5750601260039054906101000a900460ff16155b1561228d578115612222576011546121d5856110e5565b846121e0919061332c565b1115612221576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221890613b3b565b60405180910390fd5b5b8115801561222e575080155b1561228c5760115461223f856110e5565b8461224a919061332c565b111561228b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228290613ba7565b60405180910390fd5b5b5b6000612298306110e5565b90506000600a5482101590508080156122bd5750601260009054906101000a900460ff165b80156122d65750601260039054906101000a900460ff16155b801561232d57507f00000000000000000000000010a41487d11220bf6c988ab140300ad1071cb54673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b80156123835750600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156123d95750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561241d576001601260036101000a81548160ff021916908315150217905550612401612b54565b6000601260036101000a81548160ff0219169083151502179055505b6000601260039054906101000a900460ff16159050600860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124d35750600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156124dd57600090505b6000808215612698577f00000000000000000000000010a41487d11220bf6c988ab140300ad1071cb54673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614801561254357506000601054115b156125945761257060646125626010548b612b7c90919063ffffffff16565b612b9290919063ffffffff16565b9150601054600f548361258391906133cc565b61258d919061343d565b905061263f565b7f00000000000000000000000010a41487d11220bf6c988ab140300ad1071cb54673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff161480156125f157506000600d54115b1561263e5761261e6064612610600d548b612b7c90919063ffffffff16565b612b9290919063ffffffff16565b9150600d54600c548361263191906133cc565b61263b919061343d565b90505b5b6000821115612654576126538a30846128d5565b5b600081111561268957612688307f00000000000000000000000010a41487d11220bf6c988ab140300ad1071cb546836128d5565b5b81886126959190613bc7565b97505b6126a38a8a8a6128d5565b505050505050505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361271f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271690613c47565b60405180910390fd5b61272b60008383612ba8565b806002600082825461273d919061332c565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612792919061332c565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516127f7919061302f565b60405180910390a361280b60008383612bad565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293b906139d1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129aa90613a63565b60405180910390fd5b6129be838383612ba8565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612a44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3b90613cd9565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ad7919061332c565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612b3b919061302f565b60405180910390a3612b4e848484612bad565b50505050565b6000612b5f306110e5565b905060008103612b6f5750612b7a565b612b7881612bb2565b505b565b60008183612b8a91906133cc565b905092915050565b60008183612ba0919061343d565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115612bcf57612bce613cf9565b5b604051908082528060200260200182016040528015612bfd5781602001602082028036833780820191505090505b5090503081600081518110612c1557612c14613d28565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110612c8657612c85613d28565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612ceb307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611cd5565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff16635c11d79583600084600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612d6f959493929190613e50565b600060405180830381600087803b158015612d8957600080fd5b505af1158015612d9d573d6000803e3d6000fd5b505050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612ddf578082015181840152602081019050612dc4565b60008484015250505050565b6000601f19601f8301169050919050565b6000612e0782612da5565b612e118185612db0565b9350612e21818560208601612dc1565b612e2a81612deb565b840191505092915050565b60006020820190508181036000830152612e4f8184612dfc565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612e8782612e5c565b9050919050565b612e9781612e7c565b8114612ea257600080fd5b50565b600081359050612eb481612e8e565b92915050565b6000819050919050565b612ecd81612eba565b8114612ed857600080fd5b50565b600081359050612eea81612ec4565b92915050565b60008060408385031215612f0757612f06612e57565b5b6000612f1585828601612ea5565b9250506020612f2685828601612edb565b9150509250929050565b60008115159050919050565b612f4581612f30565b82525050565b6000602082019050612f606000830184612f3c565b92915050565b60008060408385031215612f7d57612f7c612e57565b5b6000612f8b85828601612edb565b9250506020612f9c85828601612edb565b9150509250929050565b6000819050919050565b6000612fcb612fc6612fc184612e5c565b612fa6565b612e5c565b9050919050565b6000612fdd82612fb0565b9050919050565b6000612fef82612fd2565b9050919050565b612fff81612fe4565b82525050565b600060208201905061301a6000830184612ff6565b92915050565b61302981612eba565b82525050565b60006020820190506130446000830184613020565b92915050565b6000602082840312156130605761305f612e57565b5b600061306e84828501612ea5565b91505092915050565b60006020828403121561308d5761308c612e57565b5b600061309b84828501612edb565b91505092915050565b6000806000606084860312156130bd576130bc612e57565b5b60006130cb86828701612ea5565b93505060206130dc86828701612ea5565b92505060406130ed86828701612edb565b9150509250925092565b600060ff82169050919050565b61310d816130f7565b82525050565b60006020820190506131286000830184613104565b92915050565b61313781612e7c565b82525050565b6000602082019050613152600083018461312e565b92915050565b61316181612f30565b811461316c57600080fd5b50565b60008135905061317e81613158565b92915050565b60006020828403121561319a57613199612e57565b5b60006131a88482850161316f565b91505092915050565b600080604083850312156131c8576131c7612e57565b5b60006131d685828601612ea5565b92505060206131e78582860161316f565b9150509250929050565b6000806040838503121561320857613207612e57565b5b600061321685828601612ea5565b925050602061322785828601612ea5565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061327857607f821691505b60208210810361328b5761328a613231565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006132c7602083612db0565b91506132d282613291565b602082019050919050565b600060208201905081810360008301526132f6816132ba565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061333782612eba565b915061334283612eba565b925082820190508082111561335a576133596132fd565b5b92915050565b7f4d757374206b6565702066656573206174203125206f72206c65737300000000600082015250565b6000613396601c83612db0565b91506133a182613360565b602082019050919050565b600060208201905081810360008301526133c581613389565b9050919050565b60006133d782612eba565b91506133e283612eba565b92508282026133f081612eba565b91508282048414831517613407576134066132fd565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061344882612eba565b915061345383612eba565b9250826134635761346261340e565b5b828204905092915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006134ca602483612db0565b91506134d58261346e565b604082019050919050565b600060208201905081810360008301526134f9816134bd565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061355c602883612db0565b915061356782613500565b604082019050919050565b6000602082019050818103600083015261358b8161354f565b9050919050565b6000815190506135a181612ec4565b92915050565b6000602082840312156135bd576135bc612e57565b5b60006135cb84828501613592565b91505092915050565b60006040820190506135e9600083018561312e565b6135f66020830184613020565b9392505050565b60008151905061360c81613158565b92915050565b60006020828403121561362857613627612e57565b5b6000613636848285016135fd565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061369b602583612db0565b91506136a68261363f565b604082019050919050565b600060208201905081810360008301526136ca8161368e565b9050919050565b7f3c20302e3030312520746f74616c20737570706c792e00000000000000000000600082015250565b6000613707601683612db0565b9150613712826136d1565b602082019050919050565b60006020820190508181036000830152613736816136fa565b9050919050565b7f3e20352520746f74616c20737570706c792e0000000000000000000000000000600082015250565b6000613773601283612db0565b915061377e8261373d565b602082019050919050565b600060208201905081810360008301526137a281613766565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613805602683612db0565b9150613810826137a9565b604082019050919050565b60006020820190508181036000830152613834816137f8565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613897602483612db0565b91506138a28261383b565b604082019050919050565b600060208201905081810360008301526138c68161388a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613929602283612db0565b9150613934826138cd565b604082019050919050565b600060208201905081810360008301526139588161391c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006139bb602583612db0565b91506139c68261395f565b604082019050919050565b600060208201905081810360008301526139ea816139ae565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613a4d602383612db0565b9150613a58826139f1565b604082019050919050565b60006020820190508181036000830152613a7c81613a40565b9050919050565b7f54726164696e6720686173206e6f742073746172746564207965740000000000600082015250565b6000613ab9601b83612db0565b9150613ac482613a83565b602082019050919050565b60006020820190508181036000830152613ae881613aac565b9050919050565b7f4d61782077616c6c657420657863656564656420286275792900000000000000600082015250565b6000613b25601983612db0565b9150613b3082613aef565b602082019050919050565b60006020820190508181036000830152613b5481613b18565b9050919050565b7f4d61782077616c6c657420657863656564656420287472616e73666572290000600082015250565b6000613b91601e83612db0565b9150613b9c82613b5b565b602082019050919050565b60006020820190508181036000830152613bc081613b84565b9050919050565b6000613bd282612eba565b9150613bdd83612eba565b9250828203905081811115613bf557613bf46132fd565b5b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000613c31601f83612db0565b9150613c3c82613bfb565b602082019050919050565b60006020820190508181036000830152613c6081613c24565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613cc3602683612db0565b9150613cce82613c67565b604082019050919050565b60006020820190508181036000830152613cf281613cb6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000613d7c613d77613d7284613d57565b612fa6565b612eba565b9050919050565b613d8c81613d61565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613dc781612e7c565b82525050565b6000613dd98383613dbe565b60208301905092915050565b6000602082019050919050565b6000613dfd82613d92565b613e078185613d9d565b9350613e1283613dae565b8060005b83811015613e43578151613e2a8882613dcd565b9750613e3583613de5565b925050600181019050613e16565b5085935050505092915050565b600060a082019050613e656000830188613020565b613e726020830187613d83565b8181036040830152613e848186613df2565b9050613e93606083018561312e565b613ea06080830184613020565b969550505050505056fea2646970667358221220168cd2d8b8ab15f99d20c7f6d65321d51b10b0711198b7f31877f11e45987a2a64736f6c63430008110033

Deployed Bytecode Sourcemap

26405:7584:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8875:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11044:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31957:285;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26479:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9997:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31730:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32887:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11695:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9839:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12596:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26539:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27134:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33860:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27093:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27025:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33111:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33716:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10168:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2706:103;;;;;;;;;;;;;:::i;:::-;;31505:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33217:81;;;;;;;;;;;;;:::i;:::-;;2055:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26584:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9094:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26853:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26955:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13314:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33306:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10508:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26615:64;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27174:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33426:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32551:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32250:293;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33566:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26921:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10746:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26813:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26884:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2964:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26987:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27060:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31841:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8875:100;8929:13;8962:5;8955:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8875:100;:::o;11044:169::-;11127:4;11144:39;11153:12;:10;:12::i;:::-;11167:7;11176:6;11144:8;:39::i;:::-;11201:4;11194:11;;11044:169;;;;:::o;31957:285::-;2286:12;:10;:12::i;:::-;2275:23;;:7;:5;:7::i;:::-;:23;;;2267:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32061:7:::1;32049:9;:19;;;;32097:13;32079:15;:31;;;;32148:15;;32136:9;;:27;;;;:::i;:::-;32121:12;:42;;;;32198:3;32182:12;;:19;;32174:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;31957:285:::0;;:::o;26479:51::-;;;:::o;9997:108::-;10058:7;10085:12;;10078:19;;9997:108;:::o;31730:103::-;2286:12;:10;:12::i;:::-;2275:23;;:7;:5;:7::i;:::-;:23;;;2267:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31816:9:::1;31804;;:21;;;;;;;;;;;;;;;;;;31730:103:::0;:::o;32887:216::-;2286:12;:10;:12::i;:::-;2275:23;;:7;:5;:7::i;:::-;:23;;;2267:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33011:4:::1;33003;32999:1;32983:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;32982:33;;;;:::i;:::-;32969:9;:46;;32961:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;33091:4;33079:9;:16;;;;:::i;:::-;33067:9;:28;;;;32887:216:::0;:::o;11695:492::-;11835:4;11852:36;11862:6;11870:9;11881:6;11852:9;:36::i;:::-;11901:24;11928:11;:19;11940:6;11928:19;;;;;;;;;;;;;;;:33;11948:12;:10;:12::i;:::-;11928:33;;;;;;;;;;;;;;;;11901:60;;12000:6;11980:16;:26;;11972:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;12087:57;12096:6;12104:12;:10;:12::i;:::-;12137:6;12118:16;:25;12087:8;:57::i;:::-;12175:4;12168:11;;;11695:492;;;;;:::o;9839:93::-;9897:5;9922:2;9915:9;;9839:93;:::o;12596:215::-;12684:4;12701:80;12710:12;:10;:12::i;:::-;12724:7;12770:10;12733:11;:25;12745:12;:10;:12::i;:::-;12733:25;;;;;;;;;;;;;;;:34;12759:7;12733:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;12701:8;:80::i;:::-;12799:4;12792:11;;12596:215;;;;:::o;26539:38::-;;;:::o;27134:33::-;;;;;;;;;;;;;:::o;33860:126::-;33926:4;33950:19;:28;33970:7;33950:28;;;;;;;;;;;;;;;;;;;;;;;;;33943:35;;33860:126;;;:::o;27093:34::-;;;;;;;;;;;;;:::o;27025:28::-;;;;:::o;33111:98::-;2286:12;:10;:12::i;:::-;2275:23;;:7;:5;:7::i;:::-;:23;;;2267:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33184:17:::1;33190:2;33194:6;33184:5;:17::i;:::-;33111:98:::0;;:::o;33716:136::-;33787:4;33811:24;:33;33836:7;33811:33;;;;;;;;;;;;;;;;;;;;;;;;;33804:40;;33716:136;;;:::o;10168:127::-;10242:7;10269:9;:18;10279:7;10269:18;;;;;;;;;;;;;;;;10262:25;;10168:127;;;:::o;2706:103::-;2286:12;:10;:12::i;:::-;2275:23;;:7;:5;:7::i;:::-;:23;;;2267:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2771:30:::1;2798:1;2771:18;:30::i;:::-;2706:103::o:0;31505:217::-;2286:12;:10;:12::i;:::-;2275:23;;:7;:5;:7::i;:::-;:23;;;2267:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31564:11:::1;31584:5;31564:26;;31601:15;31619:5;:15;;;31643:4;31619:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31601:48;;31674:1;31664:7;:11;31660:54;;;31677:5;:14;;;31692:12;:10;:12::i;:::-;31706:7;31677:37;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31660:54;31553:169;;31505:217:::0;:::o;33217:81::-;2286:12;:10;:12::i;:::-;2275:23;;:7;:5;:7::i;:::-;:23;;;2267:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33286:4:::1;33270:13;;:20;;;;;;;;;;;;;;;;;;33217:81::o:0;2055:87::-;2101:7;2128:6;;;;;;;;;;;2121:13;;2055:87;:::o;26584:24::-;;;;;;;;;;;;;:::o;9094:104::-;9150:13;9183:7;9176:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9094:104;:::o;26853:24::-;;;;:::o;26955:25::-;;;;:::o;13314:413::-;13407:4;13424:24;13451:11;:25;13463:12;:10;:12::i;:::-;13451:25;;;;;;;;;;;;;;;:34;13477:7;13451:34;;;;;;;;;;;;;;;;13424:61;;13524:15;13504:16;:35;;13496:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;13617:67;13626:12;:10;:12::i;:::-;13640:7;13668:15;13649:16;:34;13617:8;:67::i;:::-;13715:4;13708:11;;;13314:413;;;;:::o;33306:112::-;2286:12;:10;:12::i;:::-;2275:23;;:7;:5;:7::i;:::-;:23;;;2267:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33395:15:::1;33378:14;;:32;;;;;;;;;;;;;;;;;;33306:112:::0;:::o;10508:175::-;10594:4;10611:42;10621:12;:10;:12::i;:::-;10635:9;10646:6;10611:9;:42::i;:::-;10671:4;10664:11;;10508:175;;;;:::o;26615:64::-;;;;;;;;;;;;;:::o;27174:25::-;;;;;;;;;;;;;:::o;33426:132::-;2286:12;:10;:12::i;:::-;2275:23;;:7;:5;:7::i;:::-;:23;;;2267:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33542:8:::1;33511:19;:28;33531:7;33511:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;33426:132:::0;;:::o;32551:328::-;32632:4;2286:12;:10;:12::i;:::-;2275:23;;:7;:5;:7::i;:::-;:23;;;2267:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32692:6:::1;32687:1;32671:13;:11;:13::i;:::-;:17;;;;:::i;:::-;32670:28;;;;:::i;:::-;32657:9;:41;;32649:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;32782:3;32774:4;32758:13;:11;:13::i;:::-;:20;;;;:::i;:::-;32757:28;;;;:::i;:::-;32744:9;:41;;32736:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;32840:9;32819:18;:30;;;;32867:4;32860:11;;32551:328:::0;;;:::o;32250:293::-;2286:12;:10;:12::i;:::-;2275:23;;:7;:5;:7::i;:::-;:23;;;2267:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32357:7:::1;32344:10;:20;;;;32394:13;32375:16;:32;;;;32447:16;;32434:10;;:29;;;;:::i;:::-;32418:13;:45;;;;32499:3;32482:13;;:20;;32474:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;32250:293:::0;;:::o;33566:142::-;2286:12;:10;:12::i;:::-;2275:23;;:7;:5;:7::i;:::-;:23;;;2267:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33692:8:::1;33656:24;:33;33681:7;33656:33;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;33566:142:::0;;:::o;26921:27::-;;;;:::o;10746:151::-;10835:7;10862:11;:18;10874:5;10862:18;;;;;;;;;;;;;;;:27;10881:7;10862:27;;;;;;;;;;;;;;;;10855:34;;10746:151;;;;:::o;26813:33::-;;;;:::o;26884:30::-;;;;:::o;2964:201::-;2286:12;:10;:12::i;:::-;2275:23;;:7;:5;:7::i;:::-;:23;;;2267:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3073:1:::1;3053:22;;:8;:22;;::::0;3045:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3129:28;3148:8;3129:18;:28::i;:::-;2964:201:::0;:::o;26987:31::-;;;;:::o;27060:24::-;;;;:::o;31841:108::-;2286:12;:10;:12::i;:::-;2275:23;;:7;:5;:7::i;:::-;:23;;;2267:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31934:7:::1;31916:15;;:25;;;;;;;;;;;;;;;;;;31841:108:::0;:::o;895:98::-;948:7;975:10;968:17;;895:98;:::o;16998:380::-;17151:1;17134:19;;:5;:19;;;17126:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17232:1;17213:21;;:7;:21;;;17205:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17316:6;17286:11;:18;17298:5;17286:18;;;;;;;;;;;;;;;:27;17305:7;17286:27;;;;;;;;;;;;;;;:36;;;;17354:7;17338:32;;17347:5;17338:32;;;17363:6;17338:32;;;;;;:::i;:::-;;;;;;;;16998:380;;;:::o;28405:2369::-;28553:1;28537:18;;:4;:18;;;28529:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28630:1;28616:16;;:2;:16;;;28608:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;28699:1;28689:6;:11;28685:93;;28717:28;28733:4;28739:2;28743:1;28717:15;:28::i;:::-;28760:7;;28685:93;28790:10;28811:13;28803:21;;:4;:21;;;28790:34;;28835:11;28855:13;28849:19;;:2;:19;;;28835:33;;28886:13;;;;;;;;;;;28885:14;:44;;;;;28904:19;:25;28924:4;28904:25;;;;;;;;;;;;;;;;;;;;;;;;;28903:26;28885:44;:72;;;;;28934:19;:23;28954:2;28934:23;;;;;;;;;;;;;;;;;;;;;;;;;28933:24;28885:72;28881:123;;;28967:5;28959:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;28881:123;29021:14;;;;;;;;;;;:47;;;;;29040:24;:28;29065:2;29040:28;;;;;;;;;;;;;;;;;;;;;;;;;29039:29;29021:47;:60;;;;;29073:8;;;;;;;;;;;29072:9;29021:60;29017:361;;;29102:5;29098:119;;;29162:9;;29145:13;29155:2;29145:9;:13::i;:::-;29136:6;:22;;;;:::i;:::-;:35;;29128:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29098:119;29236:5;29235:6;:17;;;;;29246:6;29245:7;29235:17;29231:136;;;29307:9;;29290:13;29300:2;29290:9;:13::i;:::-;29281:6;:22;;;;:::i;:::-;:35;;29273:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;29231:136;29017:361;29390:28;29421:24;29439:4;29421:9;:24::i;:::-;29390:55;;29456:12;29495:18;;29471:20;:42;;29456:57;;29528:7;:26;;;;;29539:15;;;;;;;;;;;29528:26;:39;;;;;29559:8;;;;;;;;;;;29558:9;29528:39;:62;;;;;29577:13;29571:19;;:2;:19;;;29528:62;:92;;;;;29595:19;:25;29615:4;29595:25;;;;;;;;;;;;;;;;;;;;;;;;;29594:26;29528:92;:120;;;;;29625:19;:23;29645:2;29625:23;;;;;;;;;;;;;;;;;;;;;;;;;29624:24;29528:120;29524:224;;;29676:4;29665:8;;:15;;;;;;;;;;;;;;;;;;29695:10;:8;:10::i;:::-;29731:5;29720:8;;:16;;;;;;;;;;;;;;;;;;29524:224;29760:12;29776:8;;;;;;;;;;;29775:9;29760:24;;29799:19;:25;29819:4;29799:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;29828:19;:23;29848:2;29828:23;;;;;;;;;;;;;;;;;;;;;;;;;29799:52;29795:100;;;29878:5;29868:15;;29795:100;29907:12;29936:26;29983:7;29979:742;;;30017:13;30011:19;;:2;:19;;;:40;;;;;30050:1;30034:13;;:17;30011:40;30007:423;;;30079:34;30109:3;30079:25;30090:13;;30079:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;30072:41;;30181:13;;30161:16;;30154:4;:23;;;;:::i;:::-;30153:41;;;;:::i;:::-;30132:62;;30007:423;;;30241:13;30233:21;;:4;:21;;;:41;;;;;30273:1;30258:12;;:16;30233:41;30229:201;;;30302:33;30331:3;30302:24;30313:12;;30302:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;30295:40;;30402:12;;30383:15;;30376:4;:22;;;;:::i;:::-;30375:39;;;;:::i;:::-;30354:60;;30229:201;30007:423;30457:1;30450:4;:8;30446:91;;;30479:42;30495:4;30509;30516;30479:15;:42::i;:::-;30446:91;30576:1;30555:18;:22;30551:128;;;30598:65;30622:4;30629:13;30644:18;30598:15;:65::i;:::-;30551:128;30705:4;30695:14;;;;;:::i;:::-;;;29979:742;30733:33;30749:4;30755:2;30759:6;30733:15;:33::i;:::-;28518:2256;;;;;;;28405:2369;;;;:::o;15237:399::-;15340:1;15321:21;;:7;:21;;;15313:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;15391:49;15420:1;15424:7;15433:6;15391:20;:49::i;:::-;15469:6;15453:12;;:22;;;;;;;:::i;:::-;;;;;;;;15508:6;15486:9;:18;15496:7;15486:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;15551:7;15530:37;;15547:1;15530:37;;;15560:6;15530:37;;;;;;:::i;:::-;;;;;;;;15580:48;15608:1;15612:7;15621:6;15580:19;:48::i;:::-;15237:399;;:::o;3325:191::-;3399:16;3418:6;;;;;;;;;;;3399:25;;3444:8;3435:6;;:17;;;;;;;;;;;;;;;;;;3499:8;3468:40;;3489:8;3468:40;;;;;;;;;;;;3388:128;3325:191;:::o;14217:733::-;14375:1;14357:20;;:6;:20;;;14349:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;14459:1;14438:23;;:9;:23;;;14430:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;14514:47;14535:6;14543:9;14554:6;14514:20;:47::i;:::-;14574:21;14598:9;:17;14608:6;14598:17;;;;;;;;;;;;;;;;14574:41;;14651:6;14634:13;:23;;14626:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;14772:6;14756:13;:22;14736:9;:17;14746:6;14736:17;;;;;;;;;;;;;;;:42;;;;14824:6;14800:9;:20;14810:9;14800:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;14865:9;14848:35;;14857:6;14848:35;;;14876:6;14848:35;;;;;;:::i;:::-;;;;;;;;14896:46;14916:6;14924:9;14935:6;14896:19;:46::i;:::-;14338:612;14217:733;;;:::o;31247:213::-;31286:23;31312:24;31330:4;31312:9;:24::i;:::-;31286:50;;31370:1;31351:15;:20;31347:59;;31388:7;;;31347:59;31418:34;31436:15;31418:17;:34::i;:::-;31275:185;31247:213;:::o;22316:98::-;22374:7;22405:1;22401;:5;;;;:::i;:::-;22394:12;;22316:98;;;;:::o;22715:::-;22773:7;22804:1;22800;:5;;;;:::i;:::-;22793:12;;22715:98;;;;:::o;17978:125::-;;;;:::o;18707:124::-;;;;:::o;30782:457::-;30849:21;30887:1;30873:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30849:40;;30918:4;30900;30905:1;30900:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;30944:4;;;;;;;;;;;30934;30939:1;30934:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;;;30961:62;30978:4;30993:15;31011:11;30961:8;:62::i;:::-;31036:15;:69;;;31120:11;31146:1;31162:4;31181:9;;;;;;;;;;;31205:15;31036:195;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30838:401;30782:457;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:474::-;3514:6;3522;3571:2;3559:9;3550:7;3546:23;3542:32;3539:119;;;3577:79;;:::i;:::-;3539:119;3697:1;3722:53;3767:7;3758:6;3747:9;3743:22;3722:53;:::i;:::-;3712:63;;3668:117;3824:2;3850:53;3895:7;3886:6;3875:9;3871:22;3850:53;:::i;:::-;3840:63;;3795:118;3446:474;;;;;:::o;3926:60::-;3954:3;3975:5;3968:12;;3926:60;;;:::o;3992:142::-;4042:9;4075:53;4093:34;4102:24;4120:5;4102:24;:::i;:::-;4093:34;:::i;:::-;4075:53;:::i;:::-;4062:66;;3992:142;;;:::o;4140:126::-;4190:9;4223:37;4254:5;4223:37;:::i;:::-;4210:50;;4140:126;;;:::o;4272:153::-;4349:9;4382:37;4413:5;4382:37;:::i;:::-;4369:50;;4272:153;;;:::o;4431:185::-;4545:64;4603:5;4545:64;:::i;:::-;4540:3;4533:77;4431:185;;:::o;4622:276::-;4742:4;4780:2;4769:9;4765:18;4757:26;;4793:98;4888:1;4877:9;4873:17;4864:6;4793:98;:::i;:::-;4622:276;;;;:::o;4904:118::-;4991:24;5009:5;4991:24;:::i;:::-;4986:3;4979:37;4904:118;;:::o;5028:222::-;5121:4;5159:2;5148:9;5144:18;5136:26;;5172:71;5240:1;5229:9;5225:17;5216:6;5172:71;:::i;:::-;5028:222;;;;:::o;5256:329::-;5315:6;5364:2;5352:9;5343:7;5339:23;5335:32;5332:119;;;5370:79;;:::i;:::-;5332:119;5490:1;5515:53;5560:7;5551:6;5540:9;5536:22;5515:53;:::i;:::-;5505:63;;5461:117;5256:329;;;;:::o;5591:::-;5650:6;5699:2;5687:9;5678:7;5674:23;5670:32;5667:119;;;5705:79;;:::i;:::-;5667:119;5825:1;5850:53;5895:7;5886:6;5875:9;5871:22;5850:53;:::i;:::-;5840:63;;5796:117;5591:329;;;;:::o;5926:619::-;6003:6;6011;6019;6068:2;6056:9;6047:7;6043:23;6039:32;6036:119;;;6074:79;;:::i;:::-;6036:119;6194:1;6219:53;6264:7;6255:6;6244:9;6240:22;6219:53;:::i;:::-;6209:63;;6165:117;6321:2;6347:53;6392:7;6383:6;6372:9;6368:22;6347:53;:::i;:::-;6337:63;;6292:118;6449:2;6475:53;6520:7;6511:6;6500:9;6496:22;6475:53;:::i;:::-;6465:63;;6420:118;5926:619;;;;;:::o;6551:86::-;6586:7;6626:4;6619:5;6615:16;6604:27;;6551:86;;;:::o;6643:112::-;6726:22;6742:5;6726:22;:::i;:::-;6721:3;6714:35;6643:112;;:::o;6761:214::-;6850:4;6888:2;6877:9;6873:18;6865:26;;6901:67;6965:1;6954:9;6950:17;6941:6;6901:67;:::i;:::-;6761:214;;;;:::o;6981:118::-;7068:24;7086:5;7068:24;:::i;:::-;7063:3;7056:37;6981:118;;:::o;7105:222::-;7198:4;7236:2;7225:9;7221:18;7213:26;;7249:71;7317:1;7306:9;7302:17;7293:6;7249:71;:::i;:::-;7105:222;;;;:::o;7333:116::-;7403:21;7418:5;7403:21;:::i;:::-;7396:5;7393:32;7383:60;;7439:1;7436;7429:12;7383:60;7333:116;:::o;7455:133::-;7498:5;7536:6;7523:20;7514:29;;7552:30;7576:5;7552:30;:::i;:::-;7455:133;;;;:::o;7594:323::-;7650:6;7699:2;7687:9;7678:7;7674:23;7670:32;7667:119;;;7705:79;;:::i;:::-;7667:119;7825:1;7850:50;7892:7;7883:6;7872:9;7868:22;7850:50;:::i;:::-;7840:60;;7796:114;7594:323;;;;:::o;7923:468::-;7988:6;7996;8045:2;8033:9;8024:7;8020:23;8016:32;8013:119;;;8051:79;;:::i;:::-;8013:119;8171:1;8196:53;8241:7;8232:6;8221:9;8217:22;8196:53;:::i;:::-;8186:63;;8142:117;8298:2;8324:50;8366:7;8357:6;8346:9;8342:22;8324:50;:::i;:::-;8314:60;;8269:115;7923:468;;;;;:::o;8397:474::-;8465:6;8473;8522:2;8510:9;8501:7;8497:23;8493:32;8490:119;;;8528:79;;:::i;:::-;8490:119;8648:1;8673:53;8718:7;8709:6;8698:9;8694:22;8673:53;:::i;:::-;8663:63;;8619:117;8775:2;8801:53;8846:7;8837:6;8826:9;8822:22;8801:53;:::i;:::-;8791:63;;8746:118;8397:474;;;;;:::o;8877:180::-;8925:77;8922:1;8915:88;9022:4;9019:1;9012:15;9046:4;9043:1;9036:15;9063:320;9107:6;9144:1;9138:4;9134:12;9124:22;;9191:1;9185:4;9181:12;9212:18;9202:81;;9268:4;9260:6;9256:17;9246:27;;9202:81;9330:2;9322:6;9319:14;9299:18;9296:38;9293:84;;9349:18;;:::i;:::-;9293:84;9114:269;9063:320;;;:::o;9389:182::-;9529:34;9525:1;9517:6;9513:14;9506:58;9389:182;:::o;9577:366::-;9719:3;9740:67;9804:2;9799:3;9740:67;:::i;:::-;9733:74;;9816:93;9905:3;9816:93;:::i;:::-;9934:2;9929:3;9925:12;9918:19;;9577:366;;;:::o;9949:419::-;10115:4;10153:2;10142:9;10138:18;10130:26;;10202:9;10196:4;10192:20;10188:1;10177:9;10173:17;10166:47;10230:131;10356:4;10230:131;:::i;:::-;10222:139;;9949:419;;;:::o;10374:180::-;10422:77;10419:1;10412:88;10519:4;10516:1;10509:15;10543:4;10540:1;10533:15;10560:191;10600:3;10619:20;10637:1;10619:20;:::i;:::-;10614:25;;10653:20;10671:1;10653:20;:::i;:::-;10648:25;;10696:1;10693;10689:9;10682:16;;10717:3;10714:1;10711:10;10708:36;;;10724:18;;:::i;:::-;10708:36;10560:191;;;;:::o;10757:178::-;10897:30;10893:1;10885:6;10881:14;10874:54;10757:178;:::o;10941:366::-;11083:3;11104:67;11168:2;11163:3;11104:67;:::i;:::-;11097:74;;11180:93;11269:3;11180:93;:::i;:::-;11298:2;11293:3;11289:12;11282:19;;10941:366;;;:::o;11313:419::-;11479:4;11517:2;11506:9;11502:18;11494:26;;11566:9;11560:4;11556:20;11552:1;11541:9;11537:17;11530:47;11594:131;11720:4;11594:131;:::i;:::-;11586:139;;11313:419;;;:::o;11738:410::-;11778:7;11801:20;11819:1;11801:20;:::i;:::-;11796:25;;11835:20;11853:1;11835:20;:::i;:::-;11830:25;;11890:1;11887;11883:9;11912:30;11930:11;11912:30;:::i;:::-;11901:41;;12091:1;12082:7;12078:15;12075:1;12072:22;12052:1;12045:9;12025:83;12002:139;;12121:18;;:::i;:::-;12002:139;11786:362;11738:410;;;;:::o;12154:180::-;12202:77;12199:1;12192:88;12299:4;12296:1;12289:15;12323:4;12320:1;12313:15;12340:185;12380:1;12397:20;12415:1;12397:20;:::i;:::-;12392:25;;12431:20;12449:1;12431:20;:::i;:::-;12426:25;;12470:1;12460:35;;12475:18;;:::i;:::-;12460:35;12517:1;12514;12510:9;12505:14;;12340:185;;;;:::o;12531:223::-;12671:34;12667:1;12659:6;12655:14;12648:58;12740:6;12735:2;12727:6;12723:15;12716:31;12531:223;:::o;12760:366::-;12902:3;12923:67;12987:2;12982:3;12923:67;:::i;:::-;12916:74;;12999:93;13088:3;12999:93;:::i;:::-;13117:2;13112:3;13108:12;13101:19;;12760:366;;;:::o;13132:419::-;13298:4;13336:2;13325:9;13321:18;13313:26;;13385:9;13379:4;13375:20;13371:1;13360:9;13356:17;13349:47;13413:131;13539:4;13413:131;:::i;:::-;13405:139;;13132:419;;;:::o;13557:227::-;13697:34;13693:1;13685:6;13681:14;13674:58;13766:10;13761:2;13753:6;13749:15;13742:35;13557:227;:::o;13790:366::-;13932:3;13953:67;14017:2;14012:3;13953:67;:::i;:::-;13946:74;;14029:93;14118:3;14029:93;:::i;:::-;14147:2;14142:3;14138:12;14131:19;;13790:366;;;:::o;14162:419::-;14328:4;14366:2;14355:9;14351:18;14343:26;;14415:9;14409:4;14405:20;14401:1;14390:9;14386:17;14379:47;14443:131;14569:4;14443:131;:::i;:::-;14435:139;;14162:419;;;:::o;14587:143::-;14644:5;14675:6;14669:13;14660:22;;14691:33;14718:5;14691:33;:::i;:::-;14587:143;;;;:::o;14736:351::-;14806:6;14855:2;14843:9;14834:7;14830:23;14826:32;14823:119;;;14861:79;;:::i;:::-;14823:119;14981:1;15006:64;15062:7;15053:6;15042:9;15038:22;15006:64;:::i;:::-;14996:74;;14952:128;14736:351;;;;:::o;15093:332::-;15214:4;15252:2;15241:9;15237:18;15229:26;;15265:71;15333:1;15322:9;15318:17;15309:6;15265:71;:::i;:::-;15346:72;15414:2;15403:9;15399:18;15390:6;15346:72;:::i;:::-;15093:332;;;;;:::o;15431:137::-;15485:5;15516:6;15510:13;15501:22;;15532:30;15556:5;15532:30;:::i;:::-;15431:137;;;;:::o;15574:345::-;15641:6;15690:2;15678:9;15669:7;15665:23;15661:32;15658:119;;;15696:79;;:::i;:::-;15658:119;15816:1;15841:61;15894:7;15885:6;15874:9;15870:22;15841:61;:::i;:::-;15831:71;;15787:125;15574:345;;;;:::o;15925:224::-;16065:34;16061:1;16053:6;16049:14;16042:58;16134:7;16129:2;16121:6;16117:15;16110:32;15925:224;:::o;16155:366::-;16297:3;16318:67;16382:2;16377:3;16318:67;:::i;:::-;16311:74;;16394:93;16483:3;16394:93;:::i;:::-;16512:2;16507:3;16503:12;16496:19;;16155:366;;;:::o;16527:419::-;16693:4;16731:2;16720:9;16716:18;16708:26;;16780:9;16774:4;16770:20;16766:1;16755:9;16751:17;16744:47;16808:131;16934:4;16808:131;:::i;:::-;16800:139;;16527:419;;;:::o;16952:172::-;17092:24;17088:1;17080:6;17076:14;17069:48;16952:172;:::o;17130:366::-;17272:3;17293:67;17357:2;17352:3;17293:67;:::i;:::-;17286:74;;17369:93;17458:3;17369:93;:::i;:::-;17487:2;17482:3;17478:12;17471:19;;17130:366;;;:::o;17502:419::-;17668:4;17706:2;17695:9;17691:18;17683:26;;17755:9;17749:4;17745:20;17741:1;17730:9;17726:17;17719:47;17783:131;17909:4;17783:131;:::i;:::-;17775:139;;17502:419;;;:::o;17927:168::-;18067:20;18063:1;18055:6;18051:14;18044:44;17927:168;:::o;18101:366::-;18243:3;18264:67;18328:2;18323:3;18264:67;:::i;:::-;18257:74;;18340:93;18429:3;18340:93;:::i;:::-;18458:2;18453:3;18449:12;18442:19;;18101:366;;;:::o;18473:419::-;18639:4;18677:2;18666:9;18662:18;18654:26;;18726:9;18720:4;18716:20;18712:1;18701:9;18697:17;18690:47;18754:131;18880:4;18754:131;:::i;:::-;18746:139;;18473:419;;;:::o;18898:225::-;19038:34;19034:1;19026:6;19022:14;19015:58;19107:8;19102:2;19094:6;19090:15;19083:33;18898:225;:::o;19129:366::-;19271:3;19292:67;19356:2;19351:3;19292:67;:::i;:::-;19285:74;;19368:93;19457:3;19368:93;:::i;:::-;19486:2;19481:3;19477:12;19470:19;;19129:366;;;:::o;19501:419::-;19667:4;19705:2;19694:9;19690:18;19682:26;;19754:9;19748:4;19744:20;19740:1;19729:9;19725:17;19718:47;19782:131;19908:4;19782:131;:::i;:::-;19774:139;;19501:419;;;:::o;19926:223::-;20066:34;20062:1;20054:6;20050:14;20043:58;20135:6;20130:2;20122:6;20118:15;20111:31;19926:223;:::o;20155:366::-;20297:3;20318:67;20382:2;20377:3;20318:67;:::i;:::-;20311:74;;20394:93;20483:3;20394:93;:::i;:::-;20512:2;20507:3;20503:12;20496:19;;20155:366;;;:::o;20527:419::-;20693:4;20731:2;20720:9;20716:18;20708:26;;20780:9;20774:4;20770:20;20766:1;20755:9;20751:17;20744:47;20808:131;20934:4;20808:131;:::i;:::-;20800:139;;20527:419;;;:::o;20952:221::-;21092:34;21088:1;21080:6;21076:14;21069:58;21161:4;21156:2;21148:6;21144:15;21137:29;20952:221;:::o;21179:366::-;21321:3;21342:67;21406:2;21401:3;21342:67;:::i;:::-;21335:74;;21418:93;21507:3;21418:93;:::i;:::-;21536:2;21531:3;21527:12;21520:19;;21179:366;;;:::o;21551:419::-;21717:4;21755:2;21744:9;21740:18;21732:26;;21804:9;21798:4;21794:20;21790:1;21779:9;21775:17;21768:47;21832:131;21958:4;21832:131;:::i;:::-;21824:139;;21551:419;;;:::o;21976:224::-;22116:34;22112:1;22104:6;22100:14;22093:58;22185:7;22180:2;22172:6;22168:15;22161:32;21976:224;:::o;22206:366::-;22348:3;22369:67;22433:2;22428:3;22369:67;:::i;:::-;22362:74;;22445:93;22534:3;22445:93;:::i;:::-;22563:2;22558:3;22554:12;22547:19;;22206:366;;;:::o;22578:419::-;22744:4;22782:2;22771:9;22767:18;22759:26;;22831:9;22825:4;22821:20;22817:1;22806:9;22802:17;22795:47;22859:131;22985:4;22859:131;:::i;:::-;22851:139;;22578:419;;;:::o;23003:222::-;23143:34;23139:1;23131:6;23127:14;23120:58;23212:5;23207:2;23199:6;23195:15;23188:30;23003:222;:::o;23231:366::-;23373:3;23394:67;23458:2;23453:3;23394:67;:::i;:::-;23387:74;;23470:93;23559:3;23470:93;:::i;:::-;23588:2;23583:3;23579:12;23572:19;;23231:366;;;:::o;23603:419::-;23769:4;23807:2;23796:9;23792:18;23784:26;;23856:9;23850:4;23846:20;23842:1;23831:9;23827:17;23820:47;23884:131;24010:4;23884:131;:::i;:::-;23876:139;;23603:419;;;:::o;24028:177::-;24168:29;24164:1;24156:6;24152:14;24145:53;24028:177;:::o;24211:366::-;24353:3;24374:67;24438:2;24433:3;24374:67;:::i;:::-;24367:74;;24450:93;24539:3;24450:93;:::i;:::-;24568:2;24563:3;24559:12;24552:19;;24211:366;;;:::o;24583:419::-;24749:4;24787:2;24776:9;24772:18;24764:26;;24836:9;24830:4;24826:20;24822:1;24811:9;24807:17;24800:47;24864:131;24990:4;24864:131;:::i;:::-;24856:139;;24583:419;;;:::o;25008:175::-;25148:27;25144:1;25136:6;25132:14;25125:51;25008:175;:::o;25189:366::-;25331:3;25352:67;25416:2;25411:3;25352:67;:::i;:::-;25345:74;;25428:93;25517:3;25428:93;:::i;:::-;25546:2;25541:3;25537:12;25530:19;;25189:366;;;:::o;25561:419::-;25727:4;25765:2;25754:9;25750:18;25742:26;;25814:9;25808:4;25804:20;25800:1;25789:9;25785:17;25778:47;25842:131;25968:4;25842:131;:::i;:::-;25834:139;;25561:419;;;:::o;25986:180::-;26126:32;26122:1;26114:6;26110:14;26103:56;25986:180;:::o;26172:366::-;26314:3;26335:67;26399:2;26394:3;26335:67;:::i;:::-;26328:74;;26411:93;26500:3;26411:93;:::i;:::-;26529:2;26524:3;26520:12;26513:19;;26172:366;;;:::o;26544:419::-;26710:4;26748:2;26737:9;26733:18;26725:26;;26797:9;26791:4;26787:20;26783:1;26772:9;26768:17;26761:47;26825:131;26951:4;26825:131;:::i;:::-;26817:139;;26544:419;;;:::o;26969:194::-;27009:4;27029:20;27047:1;27029:20;:::i;:::-;27024:25;;27063:20;27081:1;27063:20;:::i;:::-;27058:25;;27107:1;27104;27100:9;27092:17;;27131:1;27125:4;27122:11;27119:37;;;27136:18;;:::i;:::-;27119:37;26969:194;;;;:::o;27169:181::-;27309:33;27305:1;27297:6;27293:14;27286:57;27169:181;:::o;27356:366::-;27498:3;27519:67;27583:2;27578:3;27519:67;:::i;:::-;27512:74;;27595:93;27684:3;27595:93;:::i;:::-;27713:2;27708:3;27704:12;27697:19;;27356:366;;;:::o;27728:419::-;27894:4;27932:2;27921:9;27917:18;27909:26;;27981:9;27975:4;27971:20;27967:1;27956:9;27952:17;27945:47;28009:131;28135:4;28009:131;:::i;:::-;28001:139;;27728:419;;;:::o;28153:225::-;28293:34;28289:1;28281:6;28277:14;28270:58;28362:8;28357:2;28349:6;28345:15;28338:33;28153:225;:::o;28384:366::-;28526:3;28547:67;28611:2;28606:3;28547:67;:::i;:::-;28540:74;;28623:93;28712:3;28623:93;:::i;:::-;28741:2;28736:3;28732:12;28725:19;;28384:366;;;:::o;28756:419::-;28922:4;28960:2;28949:9;28945:18;28937:26;;29009:9;29003:4;28999:20;28995:1;28984:9;28980:17;28973:47;29037:131;29163:4;29037:131;:::i;:::-;29029:139;;28756:419;;;:::o;29181:180::-;29229:77;29226:1;29219:88;29326:4;29323:1;29316:15;29350:4;29347:1;29340:15;29367:180;29415:77;29412:1;29405:88;29512:4;29509:1;29502:15;29536:4;29533:1;29526:15;29553:85;29598:7;29627:5;29616:16;;29553:85;;;:::o;29644:158::-;29702:9;29735:61;29753:42;29762:32;29788:5;29762:32;:::i;:::-;29753:42;:::i;:::-;29735:61;:::i;:::-;29722:74;;29644:158;;;:::o;29808:147::-;29903:45;29942:5;29903:45;:::i;:::-;29898:3;29891:58;29808:147;;:::o;29961:114::-;30028:6;30062:5;30056:12;30046:22;;29961:114;;;:::o;30081:184::-;30180:11;30214:6;30209:3;30202:19;30254:4;30249:3;30245:14;30230:29;;30081:184;;;;:::o;30271:132::-;30338:4;30361:3;30353:11;;30391:4;30386:3;30382:14;30374:22;;30271:132;;;:::o;30409:108::-;30486:24;30504:5;30486:24;:::i;:::-;30481:3;30474:37;30409:108;;:::o;30523:179::-;30592:10;30613:46;30655:3;30647:6;30613:46;:::i;:::-;30691:4;30686:3;30682:14;30668:28;;30523:179;;;;:::o;30708:113::-;30778:4;30810;30805:3;30801:14;30793:22;;30708:113;;;:::o;30857:732::-;30976:3;31005:54;31053:5;31005:54;:::i;:::-;31075:86;31154:6;31149:3;31075:86;:::i;:::-;31068:93;;31185:56;31235:5;31185:56;:::i;:::-;31264:7;31295:1;31280:284;31305:6;31302:1;31299:13;31280:284;;;31381:6;31375:13;31408:63;31467:3;31452:13;31408:63;:::i;:::-;31401:70;;31494:60;31547:6;31494:60;:::i;:::-;31484:70;;31340:224;31327:1;31324;31320:9;31315:14;;31280:284;;;31284:14;31580:3;31573:10;;30981:608;;;30857:732;;;;:::o;31595:831::-;31858:4;31896:3;31885:9;31881:19;31873:27;;31910:71;31978:1;31967:9;31963:17;31954:6;31910:71;:::i;:::-;31991:80;32067:2;32056:9;32052:18;32043:6;31991:80;:::i;:::-;32118:9;32112:4;32108:20;32103:2;32092:9;32088:18;32081:48;32146:108;32249:4;32240:6;32146:108;:::i;:::-;32138:116;;32264:72;32332:2;32321:9;32317:18;32308:6;32264:72;:::i;:::-;32346:73;32414:3;32403:9;32399:19;32390:6;32346:73;:::i;:::-;31595:831;;;;;;;;:::o

Swarm Source

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