ETH Price: $2,622.40 (+0.98%)

Token

HER (HER)
 

Overview

Max Total Supply

10,000,000 HER

Holders

61

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
98,116.55893312533485691 HER

Value
$0.00
0x38837c9f93aea05fb82937954766706fa7455556
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:
HER

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-03-28
*/

/**

AI-Powered Virtual Soulmates: Crafting Unique, Customizable Girlfriend Experiences with Cutting-Edge Technology.

Chat - https://t.me/her_project
Twitter - https://twitter.com/her_token
Website - https://www.her-ai.me

*/

// 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 WETH() external pure returns (address);

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

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

    IUniswapV2Router02 public immutable uniswapV2Router;

    address public immutable uniswapV2Pair;
    address public devWallet;

    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("HER", "HER") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());

        uint256 totalSupply = 10000000e18;

        maxWallet = totalSupply * 5 / 100;
        swapTokensAtAmount = (totalSupply * 5) / 10000;

        buyDevFee = 1;
        buyLiquidityFee = 1;
        buyTotalFees = buyDevFee + buyLiquidityFee;
        sellDevFee = 1;
        sellLiquidityFee = 1;
        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 swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        if (contractBalance == 0) {
            return;
        }
        swapTokensForETH(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 updateBuyFee(uint256 _devFee, uint256 _liquidityFee) external onlyOwner {
        buyDevFee = _devFee;
        buyLiquidityFee = _liquidityFee;
        buyTotalFees = buyDevFee + buyLiquidityFee;
        require(buyTotalFees <= 15, "fee > 15%");
    }

    function updateSellFees(uint256 _devFee, uint256 _liquidityFee) external onlyOwner {
        sellDevFee = _devFee;
        sellLiquidityFee = _liquidityFee;
        sellTotalFees = sellDevFee + sellLiquidityFee;
        require(sellTotalFees <= 15, "fee > 15%");
    }

    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool) {
        require(newAmount >= (totalSupply() * 1) / 100000, "< 0.001% 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 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":[{"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":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFee","outputs":[],"stateMutability":"nonpayable","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":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellFees","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"}]

60c06040526001601160006101000a81548160ff0219169083151502179055506001601160016101000a81548160ff0219169083151502179055503480156200004757600080fd5b506040518060400160405280600381526020017f48455200000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f48455200000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000cc9291906200090b565b508060049080519060200190620000e59291906200090b565b50505062000108620000fc620004bc60201b60201c565b620004c460201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c7919062000a25565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060805173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000231573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000257919062000a25565b6040518363ffffffff1660e01b81526004016200027692919062000a68565b6020604051808303816000875af115801562000296573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bc919062000a25565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505060006a084595161401484a0000009050606460058262000310919062000ace565b6200031c919062000b5e565b60108190555061271060058262000334919062000ace565b62000340919062000b5e565b6009819055506001600a819055506001600b81905550600b54600a5462000368919062000b96565b600c819055506001600d819055506001600e81905550600e54600d5462000390919062000b96565b600f81905550620003a66200058a60201b60201c565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000408620003fa6200058a60201b60201c565b6001620005b460201b60201c565b6200041b306001620005b460201b60201c565b6200043061dead6001620005b460201b60201c565b6200044460006001620005b460201b60201c565b62000466620004586200058a60201b60201c565b60016200069e60201b60201c565b620004793060016200069e60201b60201c565b6200048e61dead60016200069e60201b60201c565b620004a2600060016200069e60201b60201c565b620004b433826200078860201b60201c565b505062000d7b565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620005c4620004bc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620005ea6200058a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000643576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200063a9062000c54565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b620006ae620004bc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006d46200058a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200072d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007249062000c54565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620007fb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007f29062000cc6565b60405180910390fd5b6200080f600083836200090160201b60201c565b806002600082825462000823919062000b96565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200087a919062000b96565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620008e1919062000cf9565b60405180910390a3620008fd600083836200090660201b60201c565b5050565b505050565b505050565b828054620009199062000d45565b90600052602060002090601f0160209004810192826200093d576000855562000989565b82601f106200095857805160ff191683800117855562000989565b8280016001018555821562000989579182015b82811115620009885782518255916020019190600101906200096b565b5b5090506200099891906200099c565b5090565b5b80821115620009b75760008160009055506001016200099d565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620009ed82620009c0565b9050919050565b620009ff81620009e0565b811462000a0b57600080fd5b50565b60008151905062000a1f81620009f4565b92915050565b60006020828403121562000a3e5762000a3d620009bb565b5b600062000a4e8482850162000a0e565b91505092915050565b62000a6281620009e0565b82525050565b600060408201905062000a7f600083018562000a57565b62000a8e602083018462000a57565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000adb8262000a95565b915062000ae88362000a95565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000b245762000b2362000a9f565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000b6b8262000a95565b915062000b788362000a95565b92508262000b8b5762000b8a62000b2f565b5b828204905092915050565b600062000ba38262000a95565b915062000bb08362000a95565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000be85762000be762000a9f565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000c3c60208362000bf3565b915062000c498262000c04565b602082019050919050565b6000602082019050818103600083015262000c6f8162000c2d565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000cae601f8362000bf3565b915062000cbb8262000c76565b602082019050919050565b6000602082019050818103600083015262000ce18162000c9f565b9050919050565b62000cf38162000a95565b82525050565b600060208201905062000d10600083018462000ce8565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000d5e57607f821691505b6020821081141562000d755762000d7462000d16565b5b50919050565b60805160a051613c2662000de060003960008181610ef601528181611e2101528181611e7401528181612167015281816123700152818161241e01526124eb015260008181610b4c0152818161297d01528181612a5e0152612a850152613c266000f3fe60806040526004361061024a5760003560e01c80638a8c523c11610139578063c0246668116100b6578063e2f456051161007a578063e2f45605146108b3578063f11a24d3146108de578063f2fde38b14610909578063f637434214610932578063f8b45b051461095d578063f931d9d21461098857610251565b8063c0246668146107bc578063d257b34f146107e5578063d2fcc00114610822578063d85ba0631461084b578063dd62ed3e1461087657610251565b8063a0d82dc5116100fd578063a0d82dc5146106c3578063a457c2d7146106ee578063a5cdee051461072b578063a9059cbb14610754578063bbc0c7421461079157610251565b80638a8c523c146106005780638da5cb5b146106175780638ea5220f1461064257806395d89b411461066d5780639c3b4fdc1461069857610251565b806349bd5a5e116101c75780636a486a8e1161018b5780636a486a8e1461051b5780636dd3d39f1461054657806370a0823114610583578063715018a6146105c0578063839006f2146105d757610251565b806349bd5a5e146104345780634a62bb651461045f5780634fbee1931461048a578063610e34b9146104c757806364c0a2f8146104f057610251565b80631816467f1161020e5780631816467f1461033d5780631c499ab01461036657806323b872dd1461038f578063313ce567146103cc57806339509351146103f757610251565b806302dbd8f81461025657806306fdde031461027f578063095ea7b3146102aa5780631694505e146102e757806318160ddd1461031257610251565b3661025157005b600080fd5b34801561026257600080fd5b5061027d60048036038101906102789190612b78565b6109b1565b005b34801561028b57600080fd5b50610294610a9a565b6040516102a19190612c51565b60405180910390f35b3480156102b657600080fd5b506102d160048036038101906102cc9190612cd1565b610b2c565b6040516102de9190612d2c565b60405180910390f35b3480156102f357600080fd5b506102fc610b4a565b6040516103099190612da6565b60405180910390f35b34801561031e57600080fd5b50610327610b6e565b6040516103349190612dd0565b60405180910390f35b34801561034957600080fd5b50610364600480360381019061035f9190612deb565b610b78565b005b34801561037257600080fd5b5061038d60048036038101906103889190612e18565b610c38565b005b34801561039b57600080fd5b506103b660048036038101906103b19190612e45565b610d47565b6040516103c39190612d2c565b60405180910390f35b3480156103d857600080fd5b506103e1610e3f565b6040516103ee9190612eb4565b60405180910390f35b34801561040357600080fd5b5061041e60048036038101906104199190612cd1565b610e48565b60405161042b9190612d2c565b60405180910390f35b34801561044057600080fd5b50610449610ef4565b6040516104569190612ede565b60405180910390f35b34801561046b57600080fd5b50610474610f18565b6040516104819190612d2c565b60405180910390f35b34801561049657600080fd5b506104b160048036038101906104ac9190612deb565b610f2b565b6040516104be9190612d2c565b60405180910390f35b3480156104d357600080fd5b506104ee60048036038101906104e99190612b78565b610f81565b005b3480156104fc57600080fd5b5061050561106b565b6040516105129190612d2c565b60405180910390f35b34801561052757600080fd5b5061053061107e565b60405161053d9190612dd0565b60405180910390f35b34801561055257600080fd5b5061056d60048036038101906105689190612deb565b611084565b60405161057a9190612d2c565b60405180910390f35b34801561058f57600080fd5b506105aa60048036038101906105a59190612deb565b6110da565b6040516105b79190612dd0565b60405180910390f35b3480156105cc57600080fd5b506105d5611122565b005b3480156105e357600080fd5b506105fe60048036038101906105f99190612deb565b6111aa565b005b34801561060c57600080fd5b5061061561133e565b005b34801561062357600080fd5b5061062c6113d7565b6040516106399190612ede565b60405180910390f35b34801561064e57600080fd5b50610657611401565b6040516106649190612ede565b60405180910390f35b34801561067957600080fd5b50610682611427565b60405161068f9190612c51565b60405180910390f35b3480156106a457600080fd5b506106ad6114b9565b6040516106ba9190612dd0565b60405180910390f35b3480156106cf57600080fd5b506106d86114bf565b6040516106e59190612dd0565b60405180910390f35b3480156106fa57600080fd5b5061071560048036038101906107109190612cd1565b6114c5565b6040516107229190612d2c565b60405180910390f35b34801561073757600080fd5b50610752600480360381019061074d9190612f25565b6115b0565b005b34801561076057600080fd5b5061077b60048036038101906107769190612cd1565b611649565b6040516107889190612d2c565b60405180910390f35b34801561079d57600080fd5b506107a6611667565b6040516107b39190612d2c565b60405180910390f35b3480156107c857600080fd5b506107e360048036038101906107de9190612f52565b61167a565b005b3480156107f157600080fd5b5061080c60048036038101906108079190612e18565b611751565b6040516108199190612d2c565b60405180910390f35b34801561082e57600080fd5b5061084960048036038101906108449190612f52565b611843565b005b34801561085757600080fd5b5061086061191a565b60405161086d9190612dd0565b60405180910390f35b34801561088257600080fd5b5061089d60048036038101906108989190612f92565b611920565b6040516108aa9190612dd0565b60405180910390f35b3480156108bf57600080fd5b506108c86119a7565b6040516108d59190612dd0565b60405180910390f35b3480156108ea57600080fd5b506108f36119ad565b6040516109009190612dd0565b60405180910390f35b34801561091557600080fd5b50610930600480360381019061092b9190612deb565b6119b3565b005b34801561093e57600080fd5b50610947611aab565b6040516109549190612dd0565b60405180910390f35b34801561096957600080fd5b50610972611ab1565b60405161097f9190612dd0565b60405180910390f35b34801561099457600080fd5b506109af60048036038101906109aa9190612f25565b611ab7565b005b6109b9611b50565b73ffffffffffffffffffffffffffffffffffffffff166109d76113d7565b73ffffffffffffffffffffffffffffffffffffffff1614610a2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a249061301e565b60405180910390fd5b81600d8190555080600e81905550600e54600d54610a4b919061306d565b600f81905550600f80541115610a96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8d9061310f565b60405180910390fd5b5050565b606060038054610aa99061315e565b80601f0160208091040260200160405190810160405280929190818152602001828054610ad59061315e565b8015610b225780601f10610af757610100808354040283529160200191610b22565b820191906000526020600020905b815481529060010190602001808311610b0557829003601f168201915b5050505050905090565b6000610b40610b39611b50565b8484611b58565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610b80611b50565b73ffffffffffffffffffffffffffffffffffffffff16610b9e6113d7565b73ffffffffffffffffffffffffffffffffffffffff1614610bf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610beb9061301e565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610c40611b50565b73ffffffffffffffffffffffffffffffffffffffff16610c5e6113d7565b73ffffffffffffffffffffffffffffffffffffffff1614610cb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cab9061301e565b60405180910390fd5b670de0b6b3a76400006103e86005610cca610b6e565b610cd49190613190565b610cde9190613219565b610ce89190613219565b811015610d2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d21906132bc565b60405180910390fd5b670de0b6b3a764000081610d3e9190613190565b60108190555050565b6000610d54848484611d23565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d9f611b50565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e169061334e565b60405180910390fd5b610e3385610e2b611b50565b858403611b58565b60019150509392505050565b60006012905090565b6000610eea610e55611b50565b848460016000610e63611b50565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ee5919061306d565b611b58565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601160019054906101000a900460ff1681565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610f89611b50565b73ffffffffffffffffffffffffffffffffffffffff16610fa76113d7565b73ffffffffffffffffffffffffffffffffffffffff1614610ffd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff49061301e565b60405180910390fd5b81600a8190555080600b81905550600b54600a5461101b919061306d565b600c81905550600f600c541115611067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105e9061310f565b60405180910390fd5b5050565b601160009054906101000a900460ff1681565b600f5481565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61112a611b50565b73ffffffffffffffffffffffffffffffffffffffff166111486113d7565b73ffffffffffffffffffffffffffffffffffffffff161461119e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111959061301e565b60405180910390fd5b6111a86000612538565b565b6111b2611b50565b73ffffffffffffffffffffffffffffffffffffffff166111d06113d7565b73ffffffffffffffffffffffffffffffffffffffff1614611226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121d9061301e565b60405180910390fd5b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016112669190612ede565b602060405180830381865afa158015611283573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a79190613383565b90506000811115611339578173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6112d6611b50565b836040518363ffffffff1660e01b81526004016112f49291906133b0565b6020604051808303816000875af1158015611313573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061133791906133ee565b505b505050565b611346611b50565b73ffffffffffffffffffffffffffffffffffffffff166113646113d7565b73ffffffffffffffffffffffffffffffffffffffff16146113ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b19061301e565b60405180910390fd5b6001601160026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600480546114369061315e565b80601f01602080910402602001604051908101604052809291908181526020018280546114629061315e565b80156114af5780601f10611484576101008083540402835291602001916114af565b820191906000526020600020905b81548152906001019060200180831161149257829003601f168201915b5050505050905090565b600a5481565b600d5481565b600080600160006114d4611b50565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611591576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115889061348d565b60405180910390fd5b6115a561159c611b50565b85858403611b58565b600191505092915050565b6115b8611b50565b73ffffffffffffffffffffffffffffffffffffffff166115d66113d7565b73ffffffffffffffffffffffffffffffffffffffff161461162c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116239061301e565b60405180910390fd5b80601160016101000a81548160ff02191690831515021790555050565b600061165d611656611b50565b8484611d23565b6001905092915050565b601160029054906101000a900460ff1681565b611682611b50565b73ffffffffffffffffffffffffffffffffffffffff166116a06113d7565b73ffffffffffffffffffffffffffffffffffffffff16146116f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ed9061301e565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600061175b611b50565b73ffffffffffffffffffffffffffffffffffffffff166117796113d7565b73ffffffffffffffffffffffffffffffffffffffff16146117cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c69061301e565b60405180910390fd5b620186a060016117dd610b6e565b6117e79190613190565b6117f19190613219565b821015611833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182a906134f9565b60405180910390fd5b8160098190555060019050919050565b61184b611b50565b73ffffffffffffffffffffffffffffffffffffffff166118696113d7565b73ffffffffffffffffffffffffffffffffffffffff16146118bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b69061301e565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600b5481565b6119bb611b50565b73ffffffffffffffffffffffffffffffffffffffff166119d96113d7565b73ffffffffffffffffffffffffffffffffffffffff1614611a2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a269061301e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a969061358b565b60405180910390fd5b611aa881612538565b50565b600e5481565b60105481565b611abf611b50565b73ffffffffffffffffffffffffffffffffffffffff16611add6113d7565b73ffffffffffffffffffffffffffffffffffffffff1614611b33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2a9061301e565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbf9061361d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2f906136af565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611d169190612dd0565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8a90613741565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfa906137d3565b60405180910390fd5b6000811415611e1d57611e18838360006125fe565b612533565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16149050601160029054906101000a900460ff16158015611f2a5750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611f805750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611fc7576000611fc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbd9061383f565b60405180910390fd5b5b601160019054906101000a900460ff16801561202d5750600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156120465750601160039054906101000a900460ff16155b156121155781156120aa5760105461205d856110da565b84612068919061306d565b11156120a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a0906138ab565b60405180910390fd5b5b811580156120b6575080155b15612114576010546120c7856110da565b846120d2919061306d565b1115612113576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210a90613917565b60405180910390fd5b5b5b6000612120306110da565b9050600060095482101590508080156121455750601160009054906101000a900460ff165b801561215e5750601160039054906101000a900460ff16155b80156121b557507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b801561220b5750600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122615750600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156122a5576001601160036101000a81548160ff02191690831515021790555061228961287f565b6000601160036101000a81548160ff0219169083151502179055505b6000601160039054906101000a900460ff16159050600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061235b5750600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561236557600090505b6000808215612520577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff161480156123cb57506000600f54115b1561241c576123f860646123ea600f548b6128a890919063ffffffff16565b6128be90919063ffffffff16565b9150600f54600e548361240b9190613190565b6124159190613219565b90506124c7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1614801561247957506000600c54115b156124c6576124a66064612498600c548b6128a890919063ffffffff16565b6128be90919063ffffffff16565b9150600c54600b54836124b99190613190565b6124c39190613219565b90505b5b60008211156124dc576124db8a30846125fe565b5b600081111561251157612510307f0000000000000000000000000000000000000000000000000000000000000000836125fe565b5b818861251d9190613937565b97505b61252b8a8a8a6125fe565b505050505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561266e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266590613741565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d5906137d3565b60405180910390fd5b6126e98383836128d4565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561276f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612766906139dd565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612802919061306d565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516128669190612dd0565b60405180910390a36128798484846128d9565b50505050565b600061288a306110da565b9050600081141561289b57506128a6565b6128a4816128de565b505b565b600081836128b69190613190565b905092915050565b600081836128cc9190613219565b905092915050565b505050565b505050565b6000600267ffffffffffffffff8111156128fb576128fa6139fd565b5b6040519080825280602002602001820160405280156129295781602001602082028036833780820191505090505b509050308160008151811061294157612940613a2c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129e6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a0a9190613a70565b81600181518110612a1e57612a1d613a2c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612a83307f000000000000000000000000000000000000000000000000000000000000000084611b58565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac94783600084600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612b07959493929190613b96565b600060405180830381600087803b158015612b2157600080fd5b505af1158015612b35573d6000803e3d6000fd5b505050505050565b600080fd5b6000819050919050565b612b5581612b42565b8114612b6057600080fd5b50565b600081359050612b7281612b4c565b92915050565b60008060408385031215612b8f57612b8e612b3d565b5b6000612b9d85828601612b63565b9250506020612bae85828601612b63565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612bf2578082015181840152602081019050612bd7565b83811115612c01576000848401525b50505050565b6000601f19601f8301169050919050565b6000612c2382612bb8565b612c2d8185612bc3565b9350612c3d818560208601612bd4565b612c4681612c07565b840191505092915050565b60006020820190508181036000830152612c6b8184612c18565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612c9e82612c73565b9050919050565b612cae81612c93565b8114612cb957600080fd5b50565b600081359050612ccb81612ca5565b92915050565b60008060408385031215612ce857612ce7612b3d565b5b6000612cf685828601612cbc565b9250506020612d0785828601612b63565b9150509250929050565b60008115159050919050565b612d2681612d11565b82525050565b6000602082019050612d416000830184612d1d565b92915050565b6000819050919050565b6000612d6c612d67612d6284612c73565b612d47565b612c73565b9050919050565b6000612d7e82612d51565b9050919050565b6000612d9082612d73565b9050919050565b612da081612d85565b82525050565b6000602082019050612dbb6000830184612d97565b92915050565b612dca81612b42565b82525050565b6000602082019050612de56000830184612dc1565b92915050565b600060208284031215612e0157612e00612b3d565b5b6000612e0f84828501612cbc565b91505092915050565b600060208284031215612e2e57612e2d612b3d565b5b6000612e3c84828501612b63565b91505092915050565b600080600060608486031215612e5e57612e5d612b3d565b5b6000612e6c86828701612cbc565b9350506020612e7d86828701612cbc565b9250506040612e8e86828701612b63565b9150509250925092565b600060ff82169050919050565b612eae81612e98565b82525050565b6000602082019050612ec96000830184612ea5565b92915050565b612ed881612c93565b82525050565b6000602082019050612ef36000830184612ecf565b92915050565b612f0281612d11565b8114612f0d57600080fd5b50565b600081359050612f1f81612ef9565b92915050565b600060208284031215612f3b57612f3a612b3d565b5b6000612f4984828501612f10565b91505092915050565b60008060408385031215612f6957612f68612b3d565b5b6000612f7785828601612cbc565b9250506020612f8885828601612f10565b9150509250929050565b60008060408385031215612fa957612fa8612b3d565b5b6000612fb785828601612cbc565b9250506020612fc885828601612cbc565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613008602083612bc3565b915061301382612fd2565b602082019050919050565b6000602082019050818103600083015261303781612ffb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061307882612b42565b915061308383612b42565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156130b8576130b761303e565b5b828201905092915050565b7f666565203e203135250000000000000000000000000000000000000000000000600082015250565b60006130f9600983612bc3565b9150613104826130c3565b602082019050919050565b60006020820190508181036000830152613128816130ec565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061317657607f821691505b6020821081141561318a5761318961312f565b5b50919050565b600061319b82612b42565b91506131a683612b42565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156131df576131de61303e565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061322482612b42565b915061322f83612b42565b92508261323f5761323e6131ea565b5b828204905092915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006132a6602483612bc3565b91506132b18261324a565b604082019050919050565b600060208201905081810360008301526132d581613299565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613338602883612bc3565b9150613343826132dc565b604082019050919050565b600060208201905081810360008301526133678161332b565b9050919050565b60008151905061337d81612b4c565b92915050565b60006020828403121561339957613398612b3d565b5b60006133a78482850161336e565b91505092915050565b60006040820190506133c56000830185612ecf565b6133d26020830184612dc1565b9392505050565b6000815190506133e881612ef9565b92915050565b60006020828403121561340457613403612b3d565b5b6000613412848285016133d9565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613477602583612bc3565b91506134828261341b565b604082019050919050565b600060208201905081810360008301526134a68161346a565b9050919050565b7f3c20302e3030312520746f74616c20737570706c792e00000000000000000000600082015250565b60006134e3601683612bc3565b91506134ee826134ad565b602082019050919050565b60006020820190508181036000830152613512816134d6565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613575602683612bc3565b915061358082613519565b604082019050919050565b600060208201905081810360008301526135a481613568565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613607602483612bc3565b9150613612826135ab565b604082019050919050565b60006020820190508181036000830152613636816135fa565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613699602283612bc3565b91506136a48261363d565b604082019050919050565b600060208201905081810360008301526136c88161368c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061372b602583612bc3565b9150613736826136cf565b604082019050919050565b6000602082019050818103600083015261375a8161371e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006137bd602383612bc3565b91506137c882613761565b604082019050919050565b600060208201905081810360008301526137ec816137b0565b9050919050565b7f54726164696e6720686173206e6f742073746172746564207965740000000000600082015250565b6000613829601b83612bc3565b9150613834826137f3565b602082019050919050565b600060208201905081810360008301526138588161381c565b9050919050565b7f4d61782077616c6c657420657863656564656420286275792900000000000000600082015250565b6000613895601983612bc3565b91506138a08261385f565b602082019050919050565b600060208201905081810360008301526138c481613888565b9050919050565b7f4d61782077616c6c657420657863656564656420287472616e73666572290000600082015250565b6000613901601e83612bc3565b915061390c826138cb565b602082019050919050565b60006020820190508181036000830152613930816138f4565b9050919050565b600061394282612b42565b915061394d83612b42565b9250828210156139605761395f61303e565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006139c7602683612bc3565b91506139d28261396b565b604082019050919050565b600060208201905081810360008301526139f6816139ba565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050613a6a81612ca5565b92915050565b600060208284031215613a8657613a85612b3d565b5b6000613a9484828501613a5b565b91505092915050565b6000819050919050565b6000613ac2613abd613ab884613a9d565b612d47565b612b42565b9050919050565b613ad281613aa7565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613b0d81612c93565b82525050565b6000613b1f8383613b04565b60208301905092915050565b6000602082019050919050565b6000613b4382613ad8565b613b4d8185613ae3565b9350613b5883613af4565b8060005b83811015613b89578151613b708882613b13565b9750613b7b83613b2b565b925050600181019050613b5c565b5085935050505092915050565b600060a082019050613bab6000830188612dc1565b613bb86020830187613ac9565b8181036040830152613bca8186613b38565b9050613bd96060830185612ecf565b613be66080830184612dc1565b969550505050505056fea26469706673582212201366ab08f325eecef4eb62be28f91df0e2f16aebfcae4c89cb322de8b9a548f264736f6c634300080a0033

Deployed Bytecode

0x60806040526004361061024a5760003560e01c80638a8c523c11610139578063c0246668116100b6578063e2f456051161007a578063e2f45605146108b3578063f11a24d3146108de578063f2fde38b14610909578063f637434214610932578063f8b45b051461095d578063f931d9d21461098857610251565b8063c0246668146107bc578063d257b34f146107e5578063d2fcc00114610822578063d85ba0631461084b578063dd62ed3e1461087657610251565b8063a0d82dc5116100fd578063a0d82dc5146106c3578063a457c2d7146106ee578063a5cdee051461072b578063a9059cbb14610754578063bbc0c7421461079157610251565b80638a8c523c146106005780638da5cb5b146106175780638ea5220f1461064257806395d89b411461066d5780639c3b4fdc1461069857610251565b806349bd5a5e116101c75780636a486a8e1161018b5780636a486a8e1461051b5780636dd3d39f1461054657806370a0823114610583578063715018a6146105c0578063839006f2146105d757610251565b806349bd5a5e146104345780634a62bb651461045f5780634fbee1931461048a578063610e34b9146104c757806364c0a2f8146104f057610251565b80631816467f1161020e5780631816467f1461033d5780631c499ab01461036657806323b872dd1461038f578063313ce567146103cc57806339509351146103f757610251565b806302dbd8f81461025657806306fdde031461027f578063095ea7b3146102aa5780631694505e146102e757806318160ddd1461031257610251565b3661025157005b600080fd5b34801561026257600080fd5b5061027d60048036038101906102789190612b78565b6109b1565b005b34801561028b57600080fd5b50610294610a9a565b6040516102a19190612c51565b60405180910390f35b3480156102b657600080fd5b506102d160048036038101906102cc9190612cd1565b610b2c565b6040516102de9190612d2c565b60405180910390f35b3480156102f357600080fd5b506102fc610b4a565b6040516103099190612da6565b60405180910390f35b34801561031e57600080fd5b50610327610b6e565b6040516103349190612dd0565b60405180910390f35b34801561034957600080fd5b50610364600480360381019061035f9190612deb565b610b78565b005b34801561037257600080fd5b5061038d60048036038101906103889190612e18565b610c38565b005b34801561039b57600080fd5b506103b660048036038101906103b19190612e45565b610d47565b6040516103c39190612d2c565b60405180910390f35b3480156103d857600080fd5b506103e1610e3f565b6040516103ee9190612eb4565b60405180910390f35b34801561040357600080fd5b5061041e60048036038101906104199190612cd1565b610e48565b60405161042b9190612d2c565b60405180910390f35b34801561044057600080fd5b50610449610ef4565b6040516104569190612ede565b60405180910390f35b34801561046b57600080fd5b50610474610f18565b6040516104819190612d2c565b60405180910390f35b34801561049657600080fd5b506104b160048036038101906104ac9190612deb565b610f2b565b6040516104be9190612d2c565b60405180910390f35b3480156104d357600080fd5b506104ee60048036038101906104e99190612b78565b610f81565b005b3480156104fc57600080fd5b5061050561106b565b6040516105129190612d2c565b60405180910390f35b34801561052757600080fd5b5061053061107e565b60405161053d9190612dd0565b60405180910390f35b34801561055257600080fd5b5061056d60048036038101906105689190612deb565b611084565b60405161057a9190612d2c565b60405180910390f35b34801561058f57600080fd5b506105aa60048036038101906105a59190612deb565b6110da565b6040516105b79190612dd0565b60405180910390f35b3480156105cc57600080fd5b506105d5611122565b005b3480156105e357600080fd5b506105fe60048036038101906105f99190612deb565b6111aa565b005b34801561060c57600080fd5b5061061561133e565b005b34801561062357600080fd5b5061062c6113d7565b6040516106399190612ede565b60405180910390f35b34801561064e57600080fd5b50610657611401565b6040516106649190612ede565b60405180910390f35b34801561067957600080fd5b50610682611427565b60405161068f9190612c51565b60405180910390f35b3480156106a457600080fd5b506106ad6114b9565b6040516106ba9190612dd0565b60405180910390f35b3480156106cf57600080fd5b506106d86114bf565b6040516106e59190612dd0565b60405180910390f35b3480156106fa57600080fd5b5061071560048036038101906107109190612cd1565b6114c5565b6040516107229190612d2c565b60405180910390f35b34801561073757600080fd5b50610752600480360381019061074d9190612f25565b6115b0565b005b34801561076057600080fd5b5061077b60048036038101906107769190612cd1565b611649565b6040516107889190612d2c565b60405180910390f35b34801561079d57600080fd5b506107a6611667565b6040516107b39190612d2c565b60405180910390f35b3480156107c857600080fd5b506107e360048036038101906107de9190612f52565b61167a565b005b3480156107f157600080fd5b5061080c60048036038101906108079190612e18565b611751565b6040516108199190612d2c565b60405180910390f35b34801561082e57600080fd5b5061084960048036038101906108449190612f52565b611843565b005b34801561085757600080fd5b5061086061191a565b60405161086d9190612dd0565b60405180910390f35b34801561088257600080fd5b5061089d60048036038101906108989190612f92565b611920565b6040516108aa9190612dd0565b60405180910390f35b3480156108bf57600080fd5b506108c86119a7565b6040516108d59190612dd0565b60405180910390f35b3480156108ea57600080fd5b506108f36119ad565b6040516109009190612dd0565b60405180910390f35b34801561091557600080fd5b50610930600480360381019061092b9190612deb565b6119b3565b005b34801561093e57600080fd5b50610947611aab565b6040516109549190612dd0565b60405180910390f35b34801561096957600080fd5b50610972611ab1565b60405161097f9190612dd0565b60405180910390f35b34801561099457600080fd5b506109af60048036038101906109aa9190612f25565b611ab7565b005b6109b9611b50565b73ffffffffffffffffffffffffffffffffffffffff166109d76113d7565b73ffffffffffffffffffffffffffffffffffffffff1614610a2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a249061301e565b60405180910390fd5b81600d8190555080600e81905550600e54600d54610a4b919061306d565b600f81905550600f80541115610a96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8d9061310f565b60405180910390fd5b5050565b606060038054610aa99061315e565b80601f0160208091040260200160405190810160405280929190818152602001828054610ad59061315e565b8015610b225780601f10610af757610100808354040283529160200191610b22565b820191906000526020600020905b815481529060010190602001808311610b0557829003601f168201915b5050505050905090565b6000610b40610b39611b50565b8484611b58565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610b80611b50565b73ffffffffffffffffffffffffffffffffffffffff16610b9e6113d7565b73ffffffffffffffffffffffffffffffffffffffff1614610bf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610beb9061301e565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610c40611b50565b73ffffffffffffffffffffffffffffffffffffffff16610c5e6113d7565b73ffffffffffffffffffffffffffffffffffffffff1614610cb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cab9061301e565b60405180910390fd5b670de0b6b3a76400006103e86005610cca610b6e565b610cd49190613190565b610cde9190613219565b610ce89190613219565b811015610d2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d21906132bc565b60405180910390fd5b670de0b6b3a764000081610d3e9190613190565b60108190555050565b6000610d54848484611d23565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d9f611b50565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e169061334e565b60405180910390fd5b610e3385610e2b611b50565b858403611b58565b60019150509392505050565b60006012905090565b6000610eea610e55611b50565b848460016000610e63611b50565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ee5919061306d565b611b58565b6001905092915050565b7f0000000000000000000000009127156570499f9fbbaf532a275131e87394182881565b601160019054906101000a900460ff1681565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610f89611b50565b73ffffffffffffffffffffffffffffffffffffffff16610fa76113d7565b73ffffffffffffffffffffffffffffffffffffffff1614610ffd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff49061301e565b60405180910390fd5b81600a8190555080600b81905550600b54600a5461101b919061306d565b600c81905550600f600c541115611067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105e9061310f565b60405180910390fd5b5050565b601160009054906101000a900460ff1681565b600f5481565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61112a611b50565b73ffffffffffffffffffffffffffffffffffffffff166111486113d7565b73ffffffffffffffffffffffffffffffffffffffff161461119e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111959061301e565b60405180910390fd5b6111a86000612538565b565b6111b2611b50565b73ffffffffffffffffffffffffffffffffffffffff166111d06113d7565b73ffffffffffffffffffffffffffffffffffffffff1614611226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121d9061301e565b60405180910390fd5b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016112669190612ede565b602060405180830381865afa158015611283573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a79190613383565b90506000811115611339578173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6112d6611b50565b836040518363ffffffff1660e01b81526004016112f49291906133b0565b6020604051808303816000875af1158015611313573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061133791906133ee565b505b505050565b611346611b50565b73ffffffffffffffffffffffffffffffffffffffff166113646113d7565b73ffffffffffffffffffffffffffffffffffffffff16146113ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b19061301e565b60405180910390fd5b6001601160026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600480546114369061315e565b80601f01602080910402602001604051908101604052809291908181526020018280546114629061315e565b80156114af5780601f10611484576101008083540402835291602001916114af565b820191906000526020600020905b81548152906001019060200180831161149257829003601f168201915b5050505050905090565b600a5481565b600d5481565b600080600160006114d4611b50565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611591576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115889061348d565b60405180910390fd5b6115a561159c611b50565b85858403611b58565b600191505092915050565b6115b8611b50565b73ffffffffffffffffffffffffffffffffffffffff166115d66113d7565b73ffffffffffffffffffffffffffffffffffffffff161461162c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116239061301e565b60405180910390fd5b80601160016101000a81548160ff02191690831515021790555050565b600061165d611656611b50565b8484611d23565b6001905092915050565b601160029054906101000a900460ff1681565b611682611b50565b73ffffffffffffffffffffffffffffffffffffffff166116a06113d7565b73ffffffffffffffffffffffffffffffffffffffff16146116f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ed9061301e565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600061175b611b50565b73ffffffffffffffffffffffffffffffffffffffff166117796113d7565b73ffffffffffffffffffffffffffffffffffffffff16146117cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c69061301e565b60405180910390fd5b620186a060016117dd610b6e565b6117e79190613190565b6117f19190613219565b821015611833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182a906134f9565b60405180910390fd5b8160098190555060019050919050565b61184b611b50565b73ffffffffffffffffffffffffffffffffffffffff166118696113d7565b73ffffffffffffffffffffffffffffffffffffffff16146118bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b69061301e565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600b5481565b6119bb611b50565b73ffffffffffffffffffffffffffffffffffffffff166119d96113d7565b73ffffffffffffffffffffffffffffffffffffffff1614611a2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a269061301e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a969061358b565b60405180910390fd5b611aa881612538565b50565b600e5481565b60105481565b611abf611b50565b73ffffffffffffffffffffffffffffffffffffffff16611add6113d7565b73ffffffffffffffffffffffffffffffffffffffff1614611b33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2a9061301e565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbf9061361d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2f906136af565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611d169190612dd0565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8a90613741565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfa906137d3565b60405180910390fd5b6000811415611e1d57611e18838360006125fe565b612533565b60007f0000000000000000000000009127156570499f9fbbaf532a275131e87394182873ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614905060007f0000000000000000000000009127156570499f9fbbaf532a275131e87394182873ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16149050601160029054906101000a900460ff16158015611f2a5750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611f805750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611fc7576000611fc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbd9061383f565b60405180910390fd5b5b601160019054906101000a900460ff16801561202d5750600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156120465750601160039054906101000a900460ff16155b156121155781156120aa5760105461205d856110da565b84612068919061306d565b11156120a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a0906138ab565b60405180910390fd5b5b811580156120b6575080155b15612114576010546120c7856110da565b846120d2919061306d565b1115612113576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210a90613917565b60405180910390fd5b5b5b6000612120306110da565b9050600060095482101590508080156121455750601160009054906101000a900460ff165b801561215e5750601160039054906101000a900460ff16155b80156121b557507f0000000000000000000000009127156570499f9fbbaf532a275131e87394182873ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b801561220b5750600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122615750600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156122a5576001601160036101000a81548160ff02191690831515021790555061228961287f565b6000601160036101000a81548160ff0219169083151502179055505b6000601160039054906101000a900460ff16159050600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061235b5750600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561236557600090505b6000808215612520577f0000000000000000000000009127156570499f9fbbaf532a275131e87394182873ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff161480156123cb57506000600f54115b1561241c576123f860646123ea600f548b6128a890919063ffffffff16565b6128be90919063ffffffff16565b9150600f54600e548361240b9190613190565b6124159190613219565b90506124c7565b7f0000000000000000000000009127156570499f9fbbaf532a275131e87394182873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1614801561247957506000600c54115b156124c6576124a66064612498600c548b6128a890919063ffffffff16565b6128be90919063ffffffff16565b9150600c54600b54836124b99190613190565b6124c39190613219565b90505b5b60008211156124dc576124db8a30846125fe565b5b600081111561251157612510307f0000000000000000000000009127156570499f9fbbaf532a275131e873941828836125fe565b5b818861251d9190613937565b97505b61252b8a8a8a6125fe565b505050505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561266e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266590613741565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d5906137d3565b60405180910390fd5b6126e98383836128d4565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561276f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612766906139dd565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612802919061306d565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516128669190612dd0565b60405180910390a36128798484846128d9565b50505050565b600061288a306110da565b9050600081141561289b57506128a6565b6128a4816128de565b505b565b600081836128b69190613190565b905092915050565b600081836128cc9190613219565b905092915050565b505050565b505050565b6000600267ffffffffffffffff8111156128fb576128fa6139fd565b5b6040519080825280602002602001820160405280156129295781602001602082028036833780820191505090505b509050308160008151811061294157612940613a2c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129e6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a0a9190613a70565b81600181518110612a1e57612a1d613a2c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612a83307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611b58565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac94783600084600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612b07959493929190613b96565b600060405180830381600087803b158015612b2157600080fd5b505af1158015612b35573d6000803e3d6000fd5b505050505050565b600080fd5b6000819050919050565b612b5581612b42565b8114612b6057600080fd5b50565b600081359050612b7281612b4c565b92915050565b60008060408385031215612b8f57612b8e612b3d565b5b6000612b9d85828601612b63565b9250506020612bae85828601612b63565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612bf2578082015181840152602081019050612bd7565b83811115612c01576000848401525b50505050565b6000601f19601f8301169050919050565b6000612c2382612bb8565b612c2d8185612bc3565b9350612c3d818560208601612bd4565b612c4681612c07565b840191505092915050565b60006020820190508181036000830152612c6b8184612c18565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612c9e82612c73565b9050919050565b612cae81612c93565b8114612cb957600080fd5b50565b600081359050612ccb81612ca5565b92915050565b60008060408385031215612ce857612ce7612b3d565b5b6000612cf685828601612cbc565b9250506020612d0785828601612b63565b9150509250929050565b60008115159050919050565b612d2681612d11565b82525050565b6000602082019050612d416000830184612d1d565b92915050565b6000819050919050565b6000612d6c612d67612d6284612c73565b612d47565b612c73565b9050919050565b6000612d7e82612d51565b9050919050565b6000612d9082612d73565b9050919050565b612da081612d85565b82525050565b6000602082019050612dbb6000830184612d97565b92915050565b612dca81612b42565b82525050565b6000602082019050612de56000830184612dc1565b92915050565b600060208284031215612e0157612e00612b3d565b5b6000612e0f84828501612cbc565b91505092915050565b600060208284031215612e2e57612e2d612b3d565b5b6000612e3c84828501612b63565b91505092915050565b600080600060608486031215612e5e57612e5d612b3d565b5b6000612e6c86828701612cbc565b9350506020612e7d86828701612cbc565b9250506040612e8e86828701612b63565b9150509250925092565b600060ff82169050919050565b612eae81612e98565b82525050565b6000602082019050612ec96000830184612ea5565b92915050565b612ed881612c93565b82525050565b6000602082019050612ef36000830184612ecf565b92915050565b612f0281612d11565b8114612f0d57600080fd5b50565b600081359050612f1f81612ef9565b92915050565b600060208284031215612f3b57612f3a612b3d565b5b6000612f4984828501612f10565b91505092915050565b60008060408385031215612f6957612f68612b3d565b5b6000612f7785828601612cbc565b9250506020612f8885828601612f10565b9150509250929050565b60008060408385031215612fa957612fa8612b3d565b5b6000612fb785828601612cbc565b9250506020612fc885828601612cbc565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613008602083612bc3565b915061301382612fd2565b602082019050919050565b6000602082019050818103600083015261303781612ffb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061307882612b42565b915061308383612b42565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156130b8576130b761303e565b5b828201905092915050565b7f666565203e203135250000000000000000000000000000000000000000000000600082015250565b60006130f9600983612bc3565b9150613104826130c3565b602082019050919050565b60006020820190508181036000830152613128816130ec565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061317657607f821691505b6020821081141561318a5761318961312f565b5b50919050565b600061319b82612b42565b91506131a683612b42565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156131df576131de61303e565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061322482612b42565b915061322f83612b42565b92508261323f5761323e6131ea565b5b828204905092915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006132a6602483612bc3565b91506132b18261324a565b604082019050919050565b600060208201905081810360008301526132d581613299565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613338602883612bc3565b9150613343826132dc565b604082019050919050565b600060208201905081810360008301526133678161332b565b9050919050565b60008151905061337d81612b4c565b92915050565b60006020828403121561339957613398612b3d565b5b60006133a78482850161336e565b91505092915050565b60006040820190506133c56000830185612ecf565b6133d26020830184612dc1565b9392505050565b6000815190506133e881612ef9565b92915050565b60006020828403121561340457613403612b3d565b5b6000613412848285016133d9565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613477602583612bc3565b91506134828261341b565b604082019050919050565b600060208201905081810360008301526134a68161346a565b9050919050565b7f3c20302e3030312520746f74616c20737570706c792e00000000000000000000600082015250565b60006134e3601683612bc3565b91506134ee826134ad565b602082019050919050565b60006020820190508181036000830152613512816134d6565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613575602683612bc3565b915061358082613519565b604082019050919050565b600060208201905081810360008301526135a481613568565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613607602483612bc3565b9150613612826135ab565b604082019050919050565b60006020820190508181036000830152613636816135fa565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613699602283612bc3565b91506136a48261363d565b604082019050919050565b600060208201905081810360008301526136c88161368c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061372b602583612bc3565b9150613736826136cf565b604082019050919050565b6000602082019050818103600083015261375a8161371e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006137bd602383612bc3565b91506137c882613761565b604082019050919050565b600060208201905081810360008301526137ec816137b0565b9050919050565b7f54726164696e6720686173206e6f742073746172746564207965740000000000600082015250565b6000613829601b83612bc3565b9150613834826137f3565b602082019050919050565b600060208201905081810360008301526138588161381c565b9050919050565b7f4d61782077616c6c657420657863656564656420286275792900000000000000600082015250565b6000613895601983612bc3565b91506138a08261385f565b602082019050919050565b600060208201905081810360008301526138c481613888565b9050919050565b7f4d61782077616c6c657420657863656564656420287472616e73666572290000600082015250565b6000613901601e83612bc3565b915061390c826138cb565b602082019050919050565b60006020820190508181036000830152613930816138f4565b9050919050565b600061394282612b42565b915061394d83612b42565b9250828210156139605761395f61303e565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006139c7602683612bc3565b91506139d28261396b565b604082019050919050565b600060208201905081810360008301526139f6816139ba565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050613a6a81612ca5565b92915050565b600060208284031215613a8657613a85612b3d565b5b6000613a9484828501613a5b565b91505092915050565b6000819050919050565b6000613ac2613abd613ab884613a9d565b612d47565b612b42565b9050919050565b613ad281613aa7565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613b0d81612c93565b82525050565b6000613b1f8383613b04565b60208301905092915050565b6000602082019050919050565b6000613b4382613ad8565b613b4d8185613ae3565b9350613b5883613af4565b8060005b83811015613b89578151613b708882613b13565b9750613b7b83613b2b565b925050600181019050613b5c565b5085935050505092915050565b600060a082019050613bab6000830188612dc1565b613bb86020830187613ac9565b8181036040830152613bca8186613b38565b9050613bd96060830185612ecf565b613be66080830184612dc1565b969550505050505056fea26469706673582212201366ab08f325eecef4eb62be28f91df0e2f16aebfcae4c89cb322de8b9a548f264736f6c634300080a0033

Deployed Bytecode Sourcemap

26184:7292:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31946:273;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8818:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10985:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26257:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9938:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31446:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32480:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11636:480;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9780:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12525:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26317:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26841:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33347:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31673:265;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26800:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26732:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33203:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10109:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2649:103;;;;;;;;;;;;;:::i;:::-;;31221:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32704:81;;;;;;;;;;;;;:::i;:::-;;1998:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26362:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9037:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26560:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26662:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13243:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32793:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10449:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26881:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32913:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32227:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33053:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26628:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10687:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26520:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26591:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2907:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26694:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26767:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31557:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31946:273;2229:12;:10;:12::i;:::-;2218:23;;:7;:5;:7::i;:::-;:23;;;2210:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32053:7:::1;32040:10;:20;;;;32090:13;32071:16;:32;;;;32143:16;;32130:10;;:29;;;;:::i;:::-;32114:13;:45;;;;32195:2;32178:13:::0;::::1;:19;;32170:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;31946:273:::0;;:::o;8818:100::-;8872:13;8905:5;8898:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8818:100;:::o;10985:169::-;11068:4;11085:39;11094:12;:10;:12::i;:::-;11108:7;11117:6;11085:8;:39::i;:::-;11142:4;11135:11;;10985:169;;;;:::o;26257:51::-;;;:::o;9938:108::-;9999:7;10026:12;;10019:19;;9938:108;:::o;31446:103::-;2229:12;:10;:12::i;:::-;2218:23;;:7;:5;:7::i;:::-;:23;;;2210:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31532:9:::1;31520;;:21;;;;;;;;;;;;;;;;;;31446:103:::0;:::o;32480:216::-;2229:12;:10;:12::i;:::-;2218:23;;:7;:5;:7::i;:::-;:23;;;2210:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32604:4:::1;32596;32592:1;32576:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;32575:33;;;;:::i;:::-;32562:9;:46;;32554:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;32684:4;32672:9;:16;;;;:::i;:::-;32660:9;:28;;;;32480:216:::0;:::o;11636:480::-;11776:4;11793:36;11803:6;11811:9;11822:6;11793:9;:36::i;:::-;11842:24;11869:11;:19;11881:6;11869:19;;;;;;;;;;;;;;;:33;11889:12;:10;:12::i;:::-;11869:33;;;;;;;;;;;;;;;;11842:60;;11941:6;11921:16;:26;;11913:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;12020:57;12029:6;12037:12;:10;:12::i;:::-;12070:6;12051:16;:25;12020:8;:57::i;:::-;12104:4;12097:11;;;11636:480;;;;;:::o;9780:93::-;9838:5;9863:2;9856:9;;9780:93;:::o;12525:215::-;12613:4;12630:80;12639:12;:10;:12::i;:::-;12653:7;12699:10;12662:11;:25;12674:12;:10;:12::i;:::-;12662:25;;;;;;;;;;;;;;;:34;12688:7;12662:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;12630:8;:80::i;:::-;12728:4;12721:11;;12525:215;;;;:::o;26317:38::-;;;:::o;26841:33::-;;;;;;;;;;;;;:::o;33347:126::-;33413:4;33437:19;:28;33457:7;33437:28;;;;;;;;;;;;;;;;;;;;;;;;;33430:35;;33347:126;;;:::o;31673:265::-;2229:12;:10;:12::i;:::-;2218:23;;:7;:5;:7::i;:::-;:23;;;2210:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31777:7:::1;31765:9;:19;;;;31813:13;31795:15;:31;;;;31864:15;;31852:9;;:27;;;;:::i;:::-;31837:12;:42;;;;31914:2;31898:12;;:18;;31890:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;31673:265:::0;;:::o;26800:34::-;;;;;;;;;;;;;:::o;26732:28::-;;;;:::o;33203:136::-;33274:4;33298:24;:33;33323:7;33298:33;;;;;;;;;;;;;;;;;;;;;;;;;33291:40;;33203:136;;;:::o;10109:127::-;10183:7;10210:9;:18;10220:7;10210:18;;;;;;;;;;;;;;;;10203:25;;10109:127;;;:::o;2649:103::-;2229:12;:10;:12::i;:::-;2218:23;;:7;:5;:7::i;:::-;:23;;;2210:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2714:30:::1;2741:1;2714:18;:30::i;:::-;2649:103::o:0;31221:217::-;2229:12;:10;:12::i;:::-;2218:23;;:7;:5;:7::i;:::-;:23;;;2210:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31280:11:::1;31300:5;31280:26;;31317:15;31335:5;:15;;;31359:4;31335:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31317:48;;31390:1;31380:7;:11;31376:54;;;31393:5;:14;;;31408:12;:10;:12::i;:::-;31422:7;31393:37;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31376:54;31269:169;;31221:217:::0;:::o;32704:81::-;2229:12;:10;:12::i;:::-;2218:23;;:7;:5;:7::i;:::-;:23;;;2210:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32773:4:::1;32757:13;;:20;;;;;;;;;;;;;;;;;;32704:81::o:0;1998:87::-;2044:7;2071:6;;;;;;;;;;;2064:13;;1998:87;:::o;26362:24::-;;;;;;;;;;;;;:::o;9037:104::-;9093:13;9126:7;9119:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9037:104;:::o;26560:24::-;;;;:::o;26662:25::-;;;;:::o;13243:401::-;13336:4;13353:24;13380:11;:25;13392:12;:10;:12::i;:::-;13380:25;;;;;;;;;;;;;;;:34;13406:7;13380:34;;;;;;;;;;;;;;;;13353:61;;13453:15;13433:16;:35;;13425:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;13538:67;13547:12;:10;:12::i;:::-;13561:7;13589:15;13570:16;:34;13538:8;:67::i;:::-;13632:4;13625:11;;;13243:401;;;;:::o;32793:112::-;2229:12;:10;:12::i;:::-;2218:23;;:7;:5;:7::i;:::-;:23;;;2210:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32882:15:::1;32865:14;;:32;;;;;;;;;;;;;;;;;;32793:112:::0;:::o;10449:175::-;10535:4;10552:42;10562:12;:10;:12::i;:::-;10576:9;10587:6;10552:9;:42::i;:::-;10612:4;10605:11;;10449:175;;;;:::o;26881:25::-;;;;;;;;;;;;;:::o;32913:132::-;2229:12;:10;:12::i;:::-;2218:23;;:7;:5;:7::i;:::-;:23;;;2210:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33029:8:::1;32998:19;:28;33018:7;32998:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;32913:132:::0;;:::o;32227:245::-;32308:4;2229:12;:10;:12::i;:::-;2218:23;;:7;:5;:7::i;:::-;:23;;;2210:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32368:6:::1;32363:1;32347:13;:11;:13::i;:::-;:17;;;;:::i;:::-;32346:28;;;;:::i;:::-;32333:9;:41;;32325:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;32433:9;32412:18;:30;;;;32460:4;32453:11;;32227:245:::0;;;:::o;33053:142::-;2229:12;:10;:12::i;:::-;2218:23;;:7;:5;:7::i;:::-;:23;;;2210:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33179:8:::1;33143:24;:33;33168:7;33143:33;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;33053:142:::0;;:::o;26628:27::-;;;;:::o;10687:151::-;10776:7;10803:11;:18;10815:5;10803:18;;;;;;;;;;;;;;;:27;10822:7;10803:27;;;;;;;;;;;;;;;;10796:34;;10687:151;;;;:::o;26520:33::-;;;;:::o;26591:30::-;;;;:::o;2907:201::-;2229:12;:10;:12::i;:::-;2218:23;;:7;:5;:7::i;:::-;:23;;;2210:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3016:1:::1;2996:22;;:8;:22;;;;2988:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3072:28;3091:8;3072:18;:28::i;:::-;2907:201:::0;:::o;26694:31::-;;;;:::o;26767:24::-;;;;:::o;31557:108::-;2229:12;:10;:12::i;:::-;2218:23;;:7;:5;:7::i;:::-;:23;;;2210:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31650:7:::1;31632:15;;:25;;;;;;;;;;;;;;;;;;31557:108:::0;:::o;838:98::-;891:7;918:10;911:17;;838:98;:::o;16891:380::-;17044:1;17027:19;;:5;:19;;;;17019:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17125:1;17106:21;;:7;:21;;;;17098:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17209:6;17179:11;:18;17191:5;17179:18;;;;;;;;;;;;;;;:27;17198:7;17179:27;;;;;;;;;;;;;;;:36;;;;17247:7;17231:32;;17240:5;17231:32;;;17256:6;17231:32;;;;;;:::i;:::-;;;;;;;;16891:380;;;:::o;28112:2367::-;28260:1;28244:18;;:4;:18;;;;28236:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28337:1;28323:16;;:2;:16;;;;28315:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;28406:1;28396:6;:11;28392:93;;;28424:28;28440:4;28446:2;28450:1;28424:15;:28::i;:::-;28467:7;;28392:93;28497:10;28518:13;28510:21;;:4;:21;;;28497:34;;28542:11;28562:13;28556:19;;:2;:19;;;28542:33;;28593:13;;;;;;;;;;;28592:14;:44;;;;;28611:19;:25;28631:4;28611:25;;;;;;;;;;;;;;;;;;;;;;;;;28610:26;28592:44;:72;;;;;28641:19;:23;28661:2;28641:23;;;;;;;;;;;;;;;;;;;;;;;;;28640:24;28592:72;28588:123;;;28674:5;28666:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;28588:123;28728:14;;;;;;;;;;;:47;;;;;28747:24;:28;28772:2;28747:28;;;;;;;;;;;;;;;;;;;;;;;;;28746:29;28728:47;:60;;;;;28780:8;;;;;;;;;;;28779:9;28728:60;28724:361;;;28809:5;28805:119;;;28869:9;;28852:13;28862:2;28852:9;:13::i;:::-;28843:6;:22;;;;:::i;:::-;:35;;28835:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28805:119;28943:5;28942:6;:17;;;;;28953:6;28952:7;28942:17;28938:136;;;29014:9;;28997:13;29007:2;28997:9;:13::i;:::-;28988:6;:22;;;;:::i;:::-;:35;;28980:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;28938:136;28724:361;29097:28;29128:24;29146:4;29128:9;:24::i;:::-;29097:55;;29163:12;29202:18;;29178:20;:42;;29163:57;;29235:7;:26;;;;;29246:15;;;;;;;;;;;29235:26;:39;;;;;29266:8;;;;;;;;;;;29265:9;29235:39;:62;;;;;29284:13;29278:19;;:2;:19;;;29235:62;:92;;;;;29302:19;:25;29322:4;29302:25;;;;;;;;;;;;;;;;;;;;;;;;;29301:26;29235:92;:120;;;;;29332:19;:23;29352:2;29332:23;;;;;;;;;;;;;;;;;;;;;;;;;29331:24;29235:120;29231:224;;;29383:4;29372:8;;:15;;;;;;;;;;;;;;;;;;29402:10;:8;:10::i;:::-;29438:5;29427:8;;:16;;;;;;;;;;;;;;;;;;29231:224;29467:12;29483:8;;;;;;;;;;;29482:9;29467:24;;29506:19;:25;29526:4;29506:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;29535:19;:23;29555:2;29535:23;;;;;;;;;;;;;;;;;;;;;;;;;29506:52;29502:100;;;29585:5;29575:15;;29502:100;29614:12;29641:26;29688:7;29684:742;;;29722:13;29716:19;;:2;:19;;;:40;;;;;29755:1;29739:13;;:17;29716:40;29712:423;;;29784:34;29814:3;29784:25;29795:13;;29784:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;29777:41;;29886:13;;29866:16;;29859:4;:23;;;;:::i;:::-;29858:41;;;;:::i;:::-;29837:62;;29712:423;;;29946:13;29938:21;;:4;:21;;;:41;;;;;29978:1;29963:12;;:16;29938:41;29934:201;;;30007:33;30036:3;30007:24;30018:12;;30007:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;30000:40;;30107:12;;30088:15;;30081:4;:22;;;;:::i;:::-;30080:39;;;;:::i;:::-;30059:60;;29934:201;29712:423;30162:1;30155:4;:8;30151:91;;;30184:42;30200:4;30214;30221;30184:15;:42::i;:::-;30151:91;30281:1;30260:18;:22;30256:128;;;30303:65;30327:4;30334:13;30349:18;30303:15;:65::i;:::-;30256:128;30410:4;30400:14;;;;;:::i;:::-;;;29684:742;30438:33;30454:4;30460:2;30464:6;30438:15;:33::i;:::-;28225:2254;;;;;;;28112:2367;;;;:::o;3268:191::-;3342:16;3361:6;;;;;;;;;;;3342:25;;3387:8;3378:6;;:17;;;;;;;;;;;;;;;;;;3442:8;3411:40;;3432:8;3411:40;;;;;;;;;;;;3331:128;3268:191;:::o;14134:721::-;14292:1;14274:20;;:6;:20;;;;14266:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;14376:1;14355:23;;:9;:23;;;;14347:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;14431:47;14452:6;14460:9;14471:6;14431:20;:47::i;:::-;14491:21;14515:9;:17;14525:6;14515:17;;;;;;;;;;;;;;;;14491:41;;14568:6;14551:13;:23;;14543:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;14681:6;14665:13;:22;14645:9;:17;14655:6;14645:17;;;;;;;;;;;;;;;:42;;;;14729:6;14705:9;:20;14715:9;14705:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;14770:9;14753:35;;14762:6;14753:35;;;14781:6;14753:35;;;;;;:::i;:::-;;;;;;;;14801:46;14821:6;14829:9;14840:6;14801:19;:46::i;:::-;14255:600;14134:721;;;:::o;30966:210::-;31005:23;31031:24;31049:4;31031:9;:24::i;:::-;31005:50;;31089:1;31070:15;:20;31066:59;;;31107:7;;;31066:59;31135:33;31152:15;31135:16;:33::i;:::-;30994:182;30966:210;:::o;22103:98::-;22161:7;22192:1;22188;:5;;;;:::i;:::-;22181:12;;22103:98;;;;:::o;22502:::-;22560:7;22591:1;22587;:5;;;;:::i;:::-;22580:12;;22502:98;;;;:::o;17871:125::-;;;;:::o;18600:124::-;;;;:::o;30487:471::-;30553:21;30591:1;30577:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30553:40;;30622:4;30604;30609:1;30604:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;30648:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30638:4;30643:1;30638:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;30683:62;30700:4;30715:15;30733:11;30683:8;:62::i;:::-;30758:15;:66;;;30839:11;30865:1;30881:4;30900:9;;;;;;;;;;;30924:15;30758:192;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30542:416;30487:471;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:307::-;1518:1;1528:113;1542:6;1539:1;1536:13;1528:113;;;1627:1;1622:3;1618:11;1612:18;1608:1;1603:3;1599:11;1592:39;1564:2;1561:1;1557:10;1552:15;;1528:113;;;1659:6;1656:1;1653:13;1650:101;;;1739:1;1730:6;1725:3;1721:16;1714:27;1650:101;1499:258;1450:307;;;:::o;1763:102::-;1804:6;1855:2;1851:7;1846:2;1839:5;1835:14;1831:28;1821:38;;1763:102;;;:::o;1871:364::-;1959:3;1987:39;2020:5;1987:39;:::i;:::-;2042:71;2106:6;2101:3;2042:71;:::i;:::-;2035:78;;2122:52;2167:6;2162:3;2155:4;2148:5;2144:16;2122:52;:::i;:::-;2199:29;2221:6;2199:29;:::i;:::-;2194:3;2190:39;2183:46;;1963:272;1871:364;;;;:::o;2241:313::-;2354:4;2392:2;2381:9;2377:18;2369:26;;2441:9;2435:4;2431:20;2427:1;2416:9;2412:17;2405:47;2469:78;2542:4;2533:6;2469:78;:::i;:::-;2461:86;;2241:313;;;;:::o;2560:126::-;2597:7;2637:42;2630:5;2626:54;2615:65;;2560:126;;;:::o;2692:96::-;2729:7;2758:24;2776:5;2758:24;:::i;:::-;2747:35;;2692:96;;;:::o;2794:122::-;2867:24;2885:5;2867:24;:::i;:::-;2860:5;2857:35;2847:63;;2906:1;2903;2896:12;2847:63;2794:122;:::o;2922:139::-;2968:5;3006:6;2993:20;2984:29;;3022:33;3049:5;3022:33;:::i;:::-;2922:139;;;;:::o;3067:474::-;3135:6;3143;3192:2;3180:9;3171:7;3167:23;3163:32;3160:119;;;3198:79;;:::i;:::-;3160:119;3318:1;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3289:117;3445:2;3471:53;3516:7;3507:6;3496:9;3492:22;3471:53;:::i;:::-;3461:63;;3416:118;3067:474;;;;;:::o;3547:90::-;3581:7;3624:5;3617:13;3610:21;3599:32;;3547:90;;;:::o;3643:109::-;3724:21;3739:5;3724:21;:::i;:::-;3719:3;3712:34;3643:109;;:::o;3758:210::-;3845:4;3883:2;3872:9;3868:18;3860:26;;3896:65;3958:1;3947:9;3943:17;3934:6;3896:65;:::i;:::-;3758:210;;;;:::o;3974:60::-;4002:3;4023:5;4016:12;;3974:60;;;:::o;4040:142::-;4090:9;4123:53;4141:34;4150:24;4168:5;4150:24;:::i;:::-;4141:34;:::i;:::-;4123:53;:::i;:::-;4110:66;;4040:142;;;:::o;4188:126::-;4238:9;4271:37;4302:5;4271:37;:::i;:::-;4258:50;;4188:126;;;:::o;4320:153::-;4397:9;4430:37;4461:5;4430:37;:::i;:::-;4417:50;;4320:153;;;:::o;4479:185::-;4593:64;4651:5;4593:64;:::i;:::-;4588:3;4581:77;4479:185;;:::o;4670:276::-;4790:4;4828:2;4817:9;4813:18;4805:26;;4841:98;4936:1;4925:9;4921:17;4912:6;4841:98;:::i;:::-;4670:276;;;;:::o;4952:118::-;5039:24;5057:5;5039:24;:::i;:::-;5034:3;5027:37;4952:118;;:::o;5076:222::-;5169:4;5207:2;5196:9;5192:18;5184:26;;5220:71;5288:1;5277:9;5273:17;5264:6;5220:71;:::i;:::-;5076:222;;;;:::o;5304:329::-;5363:6;5412:2;5400:9;5391:7;5387:23;5383:32;5380:119;;;5418:79;;:::i;:::-;5380:119;5538:1;5563:53;5608:7;5599:6;5588:9;5584:22;5563:53;:::i;:::-;5553:63;;5509:117;5304:329;;;;:::o;5639:::-;5698:6;5747:2;5735:9;5726:7;5722:23;5718:32;5715:119;;;5753:79;;:::i;:::-;5715:119;5873:1;5898:53;5943:7;5934:6;5923:9;5919:22;5898:53;:::i;:::-;5888:63;;5844:117;5639:329;;;;:::o;5974:619::-;6051:6;6059;6067;6116:2;6104:9;6095:7;6091:23;6087:32;6084:119;;;6122:79;;:::i;:::-;6084:119;6242:1;6267:53;6312:7;6303:6;6292:9;6288:22;6267:53;:::i;:::-;6257:63;;6213:117;6369:2;6395:53;6440:7;6431:6;6420:9;6416:22;6395:53;:::i;:::-;6385:63;;6340:118;6497:2;6523:53;6568:7;6559:6;6548:9;6544:22;6523:53;:::i;:::-;6513:63;;6468:118;5974:619;;;;;:::o;6599:86::-;6634:7;6674:4;6667:5;6663:16;6652:27;;6599:86;;;:::o;6691:112::-;6774:22;6790:5;6774:22;:::i;:::-;6769:3;6762:35;6691:112;;:::o;6809:214::-;6898:4;6936:2;6925:9;6921:18;6913:26;;6949:67;7013:1;7002:9;6998:17;6989:6;6949:67;:::i;:::-;6809:214;;;;:::o;7029:118::-;7116:24;7134:5;7116:24;:::i;:::-;7111:3;7104:37;7029:118;;:::o;7153:222::-;7246:4;7284:2;7273:9;7269:18;7261:26;;7297:71;7365:1;7354:9;7350:17;7341:6;7297:71;:::i;:::-;7153:222;;;;:::o;7381:116::-;7451:21;7466:5;7451:21;:::i;:::-;7444:5;7441:32;7431:60;;7487:1;7484;7477:12;7431:60;7381:116;:::o;7503:133::-;7546:5;7584:6;7571:20;7562:29;;7600:30;7624:5;7600:30;:::i;:::-;7503:133;;;;:::o;7642:323::-;7698:6;7747:2;7735:9;7726:7;7722:23;7718:32;7715:119;;;7753:79;;:::i;:::-;7715:119;7873:1;7898:50;7940:7;7931:6;7920:9;7916:22;7898:50;:::i;:::-;7888:60;;7844:114;7642:323;;;;:::o;7971:468::-;8036:6;8044;8093:2;8081:9;8072:7;8068:23;8064:32;8061:119;;;8099:79;;:::i;:::-;8061:119;8219:1;8244:53;8289:7;8280:6;8269:9;8265:22;8244:53;:::i;:::-;8234:63;;8190:117;8346:2;8372:50;8414:7;8405:6;8394:9;8390:22;8372:50;:::i;:::-;8362:60;;8317:115;7971:468;;;;;:::o;8445:474::-;8513:6;8521;8570:2;8558:9;8549:7;8545:23;8541:32;8538:119;;;8576:79;;:::i;:::-;8538:119;8696:1;8721:53;8766:7;8757:6;8746:9;8742:22;8721:53;:::i;:::-;8711:63;;8667:117;8823:2;8849:53;8894:7;8885:6;8874:9;8870:22;8849:53;:::i;:::-;8839:63;;8794:118;8445:474;;;;;:::o;8925:182::-;9065:34;9061:1;9053:6;9049:14;9042:58;8925:182;:::o;9113:366::-;9255:3;9276:67;9340:2;9335:3;9276:67;:::i;:::-;9269:74;;9352:93;9441:3;9352:93;:::i;:::-;9470:2;9465:3;9461:12;9454:19;;9113:366;;;:::o;9485:419::-;9651:4;9689:2;9678:9;9674:18;9666:26;;9738:9;9732:4;9728:20;9724:1;9713:9;9709:17;9702:47;9766:131;9892:4;9766:131;:::i;:::-;9758:139;;9485:419;;;:::o;9910:180::-;9958:77;9955:1;9948:88;10055:4;10052:1;10045:15;10079:4;10076:1;10069:15;10096:305;10136:3;10155:20;10173:1;10155:20;:::i;:::-;10150:25;;10189:20;10207:1;10189:20;:::i;:::-;10184:25;;10343:1;10275:66;10271:74;10268:1;10265:81;10262:107;;;10349:18;;:::i;:::-;10262:107;10393:1;10390;10386:9;10379:16;;10096:305;;;;:::o;10407:159::-;10547:11;10543:1;10535:6;10531:14;10524:35;10407:159;:::o;10572:365::-;10714:3;10735:66;10799:1;10794:3;10735:66;:::i;:::-;10728:73;;10810:93;10899:3;10810:93;:::i;:::-;10928:2;10923:3;10919:12;10912:19;;10572:365;;;:::o;10943:419::-;11109:4;11147:2;11136:9;11132:18;11124:26;;11196:9;11190:4;11186:20;11182:1;11171:9;11167:17;11160:47;11224:131;11350:4;11224:131;:::i;:::-;11216:139;;10943:419;;;:::o;11368:180::-;11416:77;11413:1;11406:88;11513:4;11510:1;11503:15;11537:4;11534:1;11527:15;11554:320;11598:6;11635:1;11629:4;11625:12;11615:22;;11682:1;11676:4;11672:12;11703:18;11693:81;;11759:4;11751:6;11747:17;11737:27;;11693:81;11821:2;11813:6;11810:14;11790:18;11787:38;11784:84;;;11840:18;;:::i;:::-;11784:84;11605:269;11554:320;;;:::o;11880:348::-;11920:7;11943:20;11961:1;11943:20;:::i;:::-;11938:25;;11977:20;11995:1;11977:20;:::i;:::-;11972:25;;12165:1;12097:66;12093:74;12090:1;12087:81;12082:1;12075:9;12068:17;12064:105;12061:131;;;12172:18;;:::i;:::-;12061:131;12220:1;12217;12213:9;12202:20;;11880:348;;;;:::o;12234:180::-;12282:77;12279:1;12272:88;12379:4;12376:1;12369:15;12403:4;12400:1;12393:15;12420:185;12460:1;12477:20;12495:1;12477:20;:::i;:::-;12472:25;;12511:20;12529:1;12511:20;:::i;:::-;12506:25;;12550:1;12540:35;;12555:18;;:::i;:::-;12540:35;12597:1;12594;12590:9;12585:14;;12420:185;;;;:::o;12611:223::-;12751:34;12747:1;12739:6;12735:14;12728:58;12820:6;12815:2;12807:6;12803:15;12796:31;12611:223;:::o;12840:366::-;12982:3;13003:67;13067:2;13062:3;13003:67;:::i;:::-;12996:74;;13079:93;13168:3;13079:93;:::i;:::-;13197:2;13192:3;13188:12;13181:19;;12840:366;;;:::o;13212:419::-;13378:4;13416:2;13405:9;13401:18;13393:26;;13465:9;13459:4;13455:20;13451:1;13440:9;13436:17;13429:47;13493:131;13619:4;13493:131;:::i;:::-;13485:139;;13212:419;;;:::o;13637:227::-;13777:34;13773:1;13765:6;13761:14;13754:58;13846:10;13841:2;13833:6;13829:15;13822:35;13637:227;:::o;13870:366::-;14012:3;14033:67;14097:2;14092:3;14033:67;:::i;:::-;14026:74;;14109:93;14198:3;14109:93;:::i;:::-;14227:2;14222:3;14218:12;14211:19;;13870:366;;;:::o;14242:419::-;14408:4;14446:2;14435:9;14431:18;14423:26;;14495:9;14489:4;14485:20;14481:1;14470:9;14466:17;14459:47;14523:131;14649:4;14523:131;:::i;:::-;14515:139;;14242:419;;;:::o;14667:143::-;14724:5;14755:6;14749:13;14740:22;;14771:33;14798:5;14771:33;:::i;:::-;14667:143;;;;:::o;14816:351::-;14886:6;14935:2;14923:9;14914:7;14910:23;14906:32;14903:119;;;14941:79;;:::i;:::-;14903:119;15061:1;15086:64;15142:7;15133:6;15122:9;15118:22;15086:64;:::i;:::-;15076:74;;15032:128;14816:351;;;;:::o;15173:332::-;15294:4;15332:2;15321:9;15317:18;15309:26;;15345:71;15413:1;15402:9;15398:17;15389:6;15345:71;:::i;:::-;15426:72;15494:2;15483:9;15479:18;15470:6;15426:72;:::i;:::-;15173:332;;;;;:::o;15511:137::-;15565:5;15596:6;15590:13;15581:22;;15612:30;15636:5;15612:30;:::i;:::-;15511:137;;;;:::o;15654:345::-;15721:6;15770:2;15758:9;15749:7;15745:23;15741:32;15738:119;;;15776:79;;:::i;:::-;15738:119;15896:1;15921:61;15974:7;15965:6;15954:9;15950:22;15921:61;:::i;:::-;15911:71;;15867:125;15654:345;;;;:::o;16005:224::-;16145:34;16141:1;16133:6;16129:14;16122:58;16214:7;16209:2;16201:6;16197:15;16190:32;16005:224;:::o;16235:366::-;16377:3;16398:67;16462:2;16457:3;16398:67;:::i;:::-;16391:74;;16474:93;16563:3;16474:93;:::i;:::-;16592:2;16587:3;16583:12;16576:19;;16235:366;;;:::o;16607:419::-;16773:4;16811:2;16800:9;16796:18;16788:26;;16860:9;16854:4;16850:20;16846:1;16835:9;16831:17;16824:47;16888:131;17014:4;16888:131;:::i;:::-;16880:139;;16607:419;;;:::o;17032:172::-;17172:24;17168:1;17160:6;17156:14;17149:48;17032:172;:::o;17210:366::-;17352:3;17373:67;17437:2;17432:3;17373:67;:::i;:::-;17366:74;;17449:93;17538:3;17449:93;:::i;:::-;17567:2;17562:3;17558:12;17551:19;;17210:366;;;:::o;17582:419::-;17748:4;17786:2;17775:9;17771:18;17763:26;;17835:9;17829:4;17825:20;17821:1;17810:9;17806:17;17799:47;17863:131;17989:4;17863:131;:::i;:::-;17855:139;;17582:419;;;:::o;18007:225::-;18147:34;18143:1;18135:6;18131:14;18124:58;18216:8;18211:2;18203:6;18199:15;18192:33;18007:225;:::o;18238:366::-;18380:3;18401:67;18465:2;18460:3;18401:67;:::i;:::-;18394:74;;18477:93;18566:3;18477:93;:::i;:::-;18595:2;18590:3;18586:12;18579:19;;18238:366;;;:::o;18610:419::-;18776:4;18814:2;18803:9;18799:18;18791:26;;18863:9;18857:4;18853:20;18849:1;18838:9;18834:17;18827:47;18891:131;19017:4;18891:131;:::i;:::-;18883:139;;18610:419;;;:::o;19035:223::-;19175:34;19171:1;19163:6;19159:14;19152:58;19244:6;19239:2;19231:6;19227:15;19220:31;19035:223;:::o;19264:366::-;19406:3;19427:67;19491:2;19486:3;19427:67;:::i;:::-;19420:74;;19503:93;19592:3;19503:93;:::i;:::-;19621:2;19616:3;19612:12;19605:19;;19264:366;;;:::o;19636:419::-;19802:4;19840:2;19829:9;19825:18;19817:26;;19889:9;19883:4;19879:20;19875:1;19864:9;19860:17;19853:47;19917:131;20043:4;19917:131;:::i;:::-;19909:139;;19636:419;;;:::o;20061:221::-;20201:34;20197:1;20189:6;20185:14;20178:58;20270:4;20265:2;20257:6;20253:15;20246:29;20061:221;:::o;20288:366::-;20430:3;20451:67;20515:2;20510:3;20451:67;:::i;:::-;20444:74;;20527:93;20616:3;20527:93;:::i;:::-;20645:2;20640:3;20636:12;20629:19;;20288:366;;;:::o;20660:419::-;20826:4;20864:2;20853:9;20849:18;20841:26;;20913:9;20907:4;20903:20;20899:1;20888:9;20884:17;20877:47;20941:131;21067:4;20941:131;:::i;:::-;20933:139;;20660:419;;;:::o;21085:224::-;21225:34;21221:1;21213:6;21209:14;21202:58;21294:7;21289:2;21281:6;21277:15;21270:32;21085:224;:::o;21315:366::-;21457:3;21478:67;21542:2;21537:3;21478:67;:::i;:::-;21471:74;;21554:93;21643:3;21554:93;:::i;:::-;21672:2;21667:3;21663:12;21656:19;;21315:366;;;:::o;21687:419::-;21853:4;21891:2;21880:9;21876:18;21868:26;;21940:9;21934:4;21930:20;21926:1;21915:9;21911:17;21904:47;21968:131;22094:4;21968:131;:::i;:::-;21960:139;;21687:419;;;:::o;22112:222::-;22252:34;22248:1;22240:6;22236:14;22229:58;22321:5;22316:2;22308:6;22304:15;22297:30;22112:222;:::o;22340:366::-;22482:3;22503:67;22567:2;22562:3;22503:67;:::i;:::-;22496:74;;22579:93;22668:3;22579:93;:::i;:::-;22697:2;22692:3;22688:12;22681:19;;22340:366;;;:::o;22712:419::-;22878:4;22916:2;22905:9;22901:18;22893:26;;22965:9;22959:4;22955:20;22951:1;22940:9;22936:17;22929:47;22993:131;23119:4;22993:131;:::i;:::-;22985:139;;22712:419;;;:::o;23137:177::-;23277:29;23273:1;23265:6;23261:14;23254:53;23137:177;:::o;23320:366::-;23462:3;23483:67;23547:2;23542:3;23483:67;:::i;:::-;23476:74;;23559:93;23648:3;23559:93;:::i;:::-;23677:2;23672:3;23668:12;23661:19;;23320:366;;;:::o;23692:419::-;23858:4;23896:2;23885:9;23881:18;23873:26;;23945:9;23939:4;23935:20;23931:1;23920:9;23916:17;23909:47;23973:131;24099:4;23973:131;:::i;:::-;23965:139;;23692:419;;;:::o;24117:175::-;24257:27;24253:1;24245:6;24241:14;24234:51;24117:175;:::o;24298:366::-;24440:3;24461:67;24525:2;24520:3;24461:67;:::i;:::-;24454:74;;24537:93;24626:3;24537:93;:::i;:::-;24655:2;24650:3;24646:12;24639:19;;24298:366;;;:::o;24670:419::-;24836:4;24874:2;24863:9;24859:18;24851:26;;24923:9;24917:4;24913:20;24909:1;24898:9;24894:17;24887:47;24951:131;25077:4;24951:131;:::i;:::-;24943:139;;24670:419;;;:::o;25095:180::-;25235:32;25231:1;25223:6;25219:14;25212:56;25095:180;:::o;25281:366::-;25423:3;25444:67;25508:2;25503:3;25444:67;:::i;:::-;25437:74;;25520:93;25609:3;25520:93;:::i;:::-;25638:2;25633:3;25629:12;25622:19;;25281:366;;;:::o;25653:419::-;25819:4;25857:2;25846:9;25842:18;25834:26;;25906:9;25900:4;25896:20;25892:1;25881:9;25877:17;25870:47;25934:131;26060:4;25934:131;:::i;:::-;25926:139;;25653:419;;;:::o;26078:191::-;26118:4;26138:20;26156:1;26138:20;:::i;:::-;26133:25;;26172:20;26190:1;26172:20;:::i;:::-;26167:25;;26211:1;26208;26205:8;26202:34;;;26216:18;;:::i;:::-;26202:34;26261:1;26258;26254:9;26246:17;;26078:191;;;;:::o;26275:225::-;26415:34;26411:1;26403:6;26399:14;26392:58;26484:8;26479:2;26471:6;26467:15;26460:33;26275:225;:::o;26506:366::-;26648:3;26669:67;26733:2;26728:3;26669:67;:::i;:::-;26662:74;;26745:93;26834:3;26745:93;:::i;:::-;26863:2;26858:3;26854:12;26847:19;;26506:366;;;:::o;26878:419::-;27044:4;27082:2;27071:9;27067:18;27059:26;;27131:9;27125:4;27121:20;27117:1;27106:9;27102:17;27095:47;27159:131;27285:4;27159:131;:::i;:::-;27151:139;;26878:419;;;:::o;27303:180::-;27351:77;27348:1;27341:88;27448:4;27445:1;27438:15;27472:4;27469:1;27462:15;27489:180;27537:77;27534:1;27527:88;27634:4;27631:1;27624:15;27658:4;27655:1;27648:15;27675:143;27732:5;27763:6;27757:13;27748:22;;27779:33;27806:5;27779:33;:::i;:::-;27675:143;;;;:::o;27824:351::-;27894:6;27943:2;27931:9;27922:7;27918:23;27914:32;27911:119;;;27949:79;;:::i;:::-;27911:119;28069:1;28094:64;28150:7;28141:6;28130:9;28126:22;28094:64;:::i;:::-;28084:74;;28040:128;27824:351;;;;:::o;28181:85::-;28226:7;28255:5;28244:16;;28181:85;;;:::o;28272:158::-;28330:9;28363:61;28381:42;28390:32;28416:5;28390:32;:::i;:::-;28381:42;:::i;:::-;28363:61;:::i;:::-;28350:74;;28272:158;;;:::o;28436:147::-;28531:45;28570:5;28531:45;:::i;:::-;28526:3;28519:58;28436:147;;:::o;28589:114::-;28656:6;28690:5;28684:12;28674:22;;28589:114;;;:::o;28709:184::-;28808:11;28842:6;28837:3;28830:19;28882:4;28877:3;28873:14;28858:29;;28709:184;;;;:::o;28899:132::-;28966:4;28989:3;28981:11;;29019:4;29014:3;29010:14;29002:22;;28899:132;;;:::o;29037:108::-;29114:24;29132:5;29114:24;:::i;:::-;29109:3;29102:37;29037:108;;:::o;29151:179::-;29220:10;29241:46;29283:3;29275:6;29241:46;:::i;:::-;29319:4;29314:3;29310:14;29296:28;;29151:179;;;;:::o;29336:113::-;29406:4;29438;29433:3;29429:14;29421:22;;29336:113;;;:::o;29485:732::-;29604:3;29633:54;29681:5;29633:54;:::i;:::-;29703:86;29782:6;29777:3;29703:86;:::i;:::-;29696:93;;29813:56;29863:5;29813:56;:::i;:::-;29892:7;29923:1;29908:284;29933:6;29930:1;29927:13;29908:284;;;30009:6;30003:13;30036:63;30095:3;30080:13;30036:63;:::i;:::-;30029:70;;30122:60;30175:6;30122:60;:::i;:::-;30112:70;;29968:224;29955:1;29952;29948:9;29943:14;;29908:284;;;29912:14;30208:3;30201:10;;29609:608;;;29485:732;;;;:::o;30223:831::-;30486:4;30524:3;30513:9;30509:19;30501:27;;30538:71;30606:1;30595:9;30591:17;30582:6;30538:71;:::i;:::-;30619:80;30695:2;30684:9;30680:18;30671:6;30619:80;:::i;:::-;30746:9;30740:4;30736:20;30731:2;30720:9;30716:18;30709:48;30774:108;30877:4;30868:6;30774:108;:::i;:::-;30766:116;;30892:72;30960:2;30949:9;30945:18;30936:6;30892:72;:::i;:::-;30974:73;31042:3;31031:9;31027:19;31018:6;30974:73;:::i;:::-;30223:831;;;;;;;;:::o

Swarm Source

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