ETH Price: $3,465.61 (+2.89%)

Token

NeoBot (NEOBOT)
 

Overview

Max Total Supply

10,000,000 NEOBOT

Holders

1,157

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
9.862655789800230703 NEOBOT

Value
$0.00
0x860154a63f5064da3e4ebad5baa2f37b848e057e
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:
NeoBot

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-18
*/

//   _   _   U _____ u U  ___ u   ____     U  ___ u _____   
//  | \ |"|  \| ___"|/  \/"_ \/U | __")u    \/"_ \/|_ " _|  
// <|  \| |>  |  _|"    | | | | \|  _ \/    | | | |  | |    
// U| |\  |u  | |___.-,_| |_| |  | |_) |.-,_| |_| | /| |\   
//  |_| \_|   |_____|\_)-\___/   |____/  \_)-\___/ u |_|U   
//  ||   \\,-.<<   >>     \\    _|| \\_       \\   _// \\_  
//  (_")  (_/(__) (__)   (__)  (__) (__)     (__) (__) (__) 

// TG: https://t.me/NeoBot_Portal
// Twitter:  https://twitter.com/neobot_erc

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

// 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 v4.4.1 (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 Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

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

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

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

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


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

// 
// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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


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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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


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


// File contracts/NeoBot.sol

pragma solidity ^0.8.18;


//   _   _   U _____ u U  ___ u   ____     U  ___ u _____   
//  | \ |"|  \| ___"|/  \/"_ \/U | __")u    \/"_ \/|_ " _|  
// <|  \| |>  |  _|"    | | | | \|  _ \/    | | | |  | |    
// U| |\  |u  | |___.-,_| |_| |  | |_) |.-,_| |_| | /| |\   
//  |_| \_|   |_____|\_)-\___/   |____/  \_)-\___/ u |_|U   
//  ||   \\,-.<<   >>     \\    _|| \\_       \\   _// \\_  
//  (_")  (_/(__) (__)   (__)  (__) (__)     (__) (__) (__) 

// TG:  neobot.live
// Twitter:  neobot.live
contract NeoBot is ERC20, Ownable {
    string private _name = "NeoBot";
    string private _symbol = "NEOBOT";
    bool public _isPublicLaunched = false;
    uint256 private _supply        = 10_000_000 ether;
    uint256 public maxTxAmount     = 200_000 ether;
    uint256 public maxWalletAmount = 200_000 ether;
    address public operationsWallet = 0x6833cF33C18c43DA13b5F561177Db2e1350B8eD5;
    address public DEAD = 0x000000000000000000000000000000000000dEaD;

    mapping(address => bool) public _hasFee;
    mapping(address => bool) public wladdress;

    mapping(address => bool) public step1wallets;

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

    bool progress_swap = false;

    uint256 public operationsTaxBuy = 10;
    uint256 public operationsTaxSell = 40;
    uint256 private step1tax = 40;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public uniswapV2Pair;

    uint256 public operationsFunds;

    
    modifier onlyOwnerOrOperations() {
        require(owner() == _msgSender() || operationsWallet == _msgSender(), "Caller is not the owner or the specific wallet");
        _;
    }

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

        currentphase = Phase.Phase1;
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
    
        wladdress[owner()] = true;
        wladdress[operationsWallet] = true;
        wladdress[address(this)] = true;
        wladdress[0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D] = true;
        _hasFee[address(uniswapV2Router)] = true;
        _hasFee[msg.sender] = true;
        _hasFee[operationsWallet] = true;
        _hasFee[address(this)] = 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 (!wladdress[from] && !wladdress[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 (!_hasFee[from] && !_hasFee[to]) {
            if ((from == uniswapV2Pair || to == uniswapV2Pair)) {
                require(amount <= maxTxAmount, "ERC20: transfer amount exceeds the max transaction amount");
 
                // Buy 
                if (
                    operationsTaxBuy > 0 && 
                    uniswapV2Pair == from &&
                    !wladdress[to] &&
                    from != address(this)
                ) {

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

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

                // Sell
                if (
                    uniswapV2Pair == to &&
                    !wladdress[from] &&
                    to != address(this) &&
                    !progress_swap
                ) {
                    
                    uint256 taxSell = operationsTaxSell;
                    if (step1wallets[from] == true) {
                        taxSell = step1tax;
                    }

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

                    uint256 feeTokens = (amount * taxSell) / 100;
                    super._transfer(from, address(this), feeTokens);
                    transferAmount = amount - feeTokens;
                }
            }
            else {
                // Transfer out for step1 wallets
                if (
                    step1wallets[from] == true &&
                    uniswapV2Pair != to
                ) {
                    uint256 feeTokens = (amount * step1tax) / 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;

            if (contractTokenBalance > 0) {
                beforeBalance = address(this).balance;
                _swapTokensForEth(contractTokenBalance, 0);
                receivedETH = address(this).balance - beforeBalance;
                operationsFunds += receivedETH;
            }
        }
    }
 
    function withdrawOperations() external onlyOwnerOrOperations returns (bool) {
        payable(operationsWallet).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 setPhaseTwo() external onlyOwner returns (bool) {
        currentphase = Phase.Phase2;
        operationsTaxBuy = 20;
        operationsTaxSell = 20;

        return true;
    }
      function setPhaseThree() external onlyOwner returns (bool) {
        currentphase = Phase.Phase3;
        operationsTaxBuy = 7;
        operationsTaxSell = 7;

        return true;
    }
      function setPhaseFour() external onlyOwner returns (bool) {
        currentphase = Phase.Phase4;
        operationsTaxBuy = 5;
        operationsTaxSell = 5;

        return true;
    }

    function _getETHAmountsOut(
        uint256 _tokenAmount
    ) internal view returns (uint256) {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        uint256[] memory amountOut = uniswapV2Router.getAmountsOut(
            _tokenAmount,
            path
        );

        return amountOut[1];
    }

    function updatePair(address _pair) external onlyOwnerOrOperations {
        require(_pair != DEAD, "LP Pair cannot be the Dead wallet!");
        require(_pair != address(0), "LP Pair cannot be 0!");
        uniswapV2Pair = _pair;
    }

    function updateoperationsWallet(
        address _newWallet
    ) public onlyOwnerOrOperations returns (bool) {
        require(
            _newWallet != DEAD,
            "Operations Wallet cannot be the Dead wallet!"
        );
        require(_newWallet != address(0), "Operations Wallet cannot be 0!");
        operationsWallet = _newWallet;
        wladdress[operationsWallet] = true;
        _hasFee[operationsWallet] = true;

        return true;
    }

    function updateTaxForOperations(
        uint256 _operationsTaxBuy,
        uint256 _operationsTaxSell
    ) public onlyOwner returns (bool) {
        require(
            _operationsTaxBuy <= 40,
            "Operations Tax cannot be more than 40%"
        );
        require(
            _operationsTaxSell <= 40,
            "Operations Tax cannot be more than 40%"
        );
        operationsTaxBuy = _operationsTaxBuy;
        operationsTaxSell = _operationsTaxSell;
        return true;
    }


    function maxTxAmountChange(
        uint256 _maxTxAmount
    ) public onlyOwner returns (bool) {
        uint256 maxValue = (_supply * 10) / 100;
        uint256 minValue = (_supply * 1) / 200;
        require(
            _maxTxAmount <= maxValue,
            "Cannot set maxTxAmountChange to more than 10% of the supply"
        );
        require(
            _maxTxAmount >= minValue,
            "Cannot set maxTxAmountChange to less than .5% of the supply"
        );
        maxTxAmount = _maxTxAmount;

        return true;
    }

    function maxWalletChange(
        uint256 _maxWalletAmount
    ) public onlyOwner returns (bool) {
        uint256 maxValue = (_supply * 10) / 100;
        uint256 minValue = (_supply * 1) / 200;

        require(
            _maxWalletAmount <= maxValue,
            "Cannot set maxWalletChange to more than 10% of the supply"
        );
        require(
            _maxWalletAmount >= minValue,
            "Cannot set maxWalletChange to less than .5% of the supply"
        );
        maxWalletAmount = _maxWalletAmount;

        return true;
    }

    function withdrawETH() external onlyOwnerOrOperations {
        (bool success,) = address(operationsWallet).call{value : address(this).balance}("");
        require(success);
        operationsFunds = 0;
    }

    function withdrawTokens(address token) external onlyOwnerOrOperations {
        IERC20(token).transfer(
            operationsWallet,
            IERC20(token).balanceOf(address(this))
        );
    }

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

    receive() external payable {}
}

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":"_hasFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_isPublicLaunched","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":"currentphase","outputs":[{"internalType":"enum NeoBot.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":[{"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":[{"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"maxTxAmountChange","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWalletAmount","type":"uint256"}],"name":"maxWalletChange","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsFunds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsTaxBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsTaxSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setPhaseFour","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setPhaseThree","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setPhaseTwo","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"step1wallets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"}],"name":"updatePair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsTaxBuy","type":"uint256"},{"internalType":"uint256","name":"_operationsTaxSell","type":"uint256"}],"name":"updateTaxForOperations","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newWallet","type":"address"}],"name":"updateoperationsWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawOperations","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"wladdress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526040518060400160405280600681526020017f4e656f426f740000000000000000000000000000000000000000000000000000815250600690816200004a919062000d6c565b506040518060400160405280600681526020017f4e454f424f5400000000000000000000000000000000000000000000000000008152506007908162000091919062000d6c565b506000600860006101000a81548160ff0219169083151502179055506a084595161401484a000000600955692a5a058fc295ed000000600a55692a5a058fc295ed000000600b55736833cf33c18c43da13b5f561177db2e1350b8ed5600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601160016101000a81548160ff021916908315150217905550600a60125560286013556028601455348015620001a757600080fd5b5060068054620001b79062000b5b565b80601f0160208091040260200160405190810160405280929190818152602001828054620001e59062000b5b565b8015620002365780601f106200020a5761010080835404028352916020019162000236565b820191906000526020600020905b8154815290600101906020018083116200021857829003601f168201915b5050505050600780546200024a9062000b5b565b80601f0160208091040260200160405190810160405280929190818152602001828054620002789062000b5b565b8015620002c95780601f106200029d57610100808354040283529160200191620002c9565b820191906000526020600020905b815481529060010190602001808311620002ab57829003601f168201915b50505050508160039081620002df919062000d6c565b508060049081620002f1919062000d6c565b50505062000314620003086200087860201b60201c565b6200088060201b60201c565b62000328336009546200094660201b60201c565b6000601160006101000a81548160ff0219169083600381111562000351576200035062000e53565b5b02179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003ef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000415919062000eec565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200047d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004a3919062000eec565b6040518363ffffffff1660e01b8152600401620004c292919062000f2f565b6020604051808303816000875af1158015620004e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000508919062000eec565b601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600f60006200055e62000abe60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f6000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e600060805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505062001077565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009b8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009af9062000fbd565b60405180910390fd5b620009cc6000838362000ae860201b60201c565b8060026000828254620009e091906200100e565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000a3791906200100e565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a9e91906200105a565b60405180910390a362000aba6000838362000aed60201b60201c565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000b7457607f821691505b60208210810362000b8a5762000b8962000b2c565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000bf47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000bb5565b62000c00868362000bb5565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000c4d62000c4762000c418462000c18565b62000c22565b62000c18565b9050919050565b6000819050919050565b62000c698362000c2c565b62000c8162000c788262000c54565b84845462000bc2565b825550505050565b600090565b62000c9862000c89565b62000ca581848462000c5e565b505050565b5b8181101562000ccd5762000cc160008262000c8e565b60018101905062000cab565b5050565b601f82111562000d1c5762000ce68162000b90565b62000cf18462000ba5565b8101602085101562000d01578190505b62000d1962000d108562000ba5565b83018262000caa565b50505b505050565b600082821c905092915050565b600062000d416000198460080262000d21565b1980831691505092915050565b600062000d5c838362000d2e565b9150826002028217905092915050565b62000d778262000af2565b67ffffffffffffffff81111562000d935762000d9262000afd565b5b62000d9f825462000b5b565b62000dac82828562000cd1565b600060209050601f83116001811462000de4576000841562000dcf578287015190505b62000ddb858262000d4e565b86555062000e4b565b601f19841662000df48662000b90565b60005b8281101562000e1e5784890151825560018201915060208501945060208101905062000df7565b8683101562000e3e578489015162000e3a601f89168262000d2e565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000eb48262000e87565b9050919050565b62000ec68162000ea7565b811462000ed257600080fd5b50565b60008151905062000ee68162000ebb565b92915050565b60006020828403121562000f055762000f0462000e82565b5b600062000f158482850162000ed5565b91505092915050565b62000f298162000ea7565b82525050565b600060408201905062000f46600083018562000f1e565b62000f55602083018462000f1e565b9392505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000fa5601f8362000f5c565b915062000fb28262000f6d565b602082019050919050565b6000602082019050818103600083015262000fd88162000f96565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200101b8262000c18565b9150620010288362000c18565b925082820190508082111562001043576200104262000fdf565b5b92915050565b620010548162000c18565b82525050565b600060208201905062001071600083018462001049565b92915050565b60805161495a620010a860003960008181610cbb015281816131a30152818161329c015261333f015261495a6000f3fe60806040526004361061023f5760003560e01c80637b1b90dc1161012e578063ca3d7ad8116100ab578063ef83e6091161006f578063ef83e609146108e8578063f2fde38b14610913578063fca675a81461093c578063fd72e22a14610967578063fe29f6ec1461099257610246565b8063ca3d7ad814610803578063cea69f021461082e578063dd62ed3e1461086b578063e086e5ec146108a8578063ef437ff5146108bf57610246565b8063a9059cbb116100f2578063a9059cbb146106f6578063aa4bde2814610733578063aa6fcbf21461075e578063b40724871461079b578063b61b64fa146107d857610246565b80637b1b90dc1461060d5780638c0b5e22146106385780638da5cb5b1461066357806395d89b411461068e578063a457c2d7146106b957610246565b8063313ce567116101bc5780635e27922e116101805780635e27922e146105265780636aebf6271461055157806370a082311461058e578063715018a6146105cb57806375ca0b46146105e257610246565b8063313ce5671461043f578063395093511461046a57806341d4a5dd146104a757806349bd5a5e146104d257806349df728c146104fd57610246565b80631694505e116102035780631694505e1461034657806318160ddd146103715780631b56bbf91461039c5780631f6dcb0b146103c557806323b872dd1461040257610246565b806303fd2a451461024b57806306fdde0314610276578063095ea7b3146102a15780630ab68e47146102de5780631169b9d81461031b57610246565b3661024657005b600080fd5b34801561025757600080fd5b506102606109cf565b60405161026d9190613416565b60405180910390f35b34801561028257600080fd5b5061028b6109f5565b60405161029891906134c1565b60405180910390f35b3480156102ad57600080fd5b506102c860048036038101906102c3919061354a565b610a87565b6040516102d591906135a5565b60405180910390f35b3480156102ea57600080fd5b50610305600480360381019061030091906135c0565b610aa5565b60405161031291906135a5565b60405180910390f35b34801561032757600080fd5b50610330610bf9565b60405161033d91906135a5565b60405180910390f35b34801561035257600080fd5b5061035b610cb9565b604051610368919061364c565b60405180910390f35b34801561037d57600080fd5b50610386610cdd565b6040516103939190613676565b60405180910390f35b3480156103a857600080fd5b506103c360048036038101906103be9190613691565b610ce7565b005b3480156103d157600080fd5b506103ec60048036038101906103e791906135c0565b610f05565b6040516103f991906135a5565b60405180910390f35b34801561040e57600080fd5b50610429600480360381019061042491906136be565b611059565b60405161043691906135a5565b60405180910390f35b34801561044b57600080fd5b50610454611151565b604051610461919061372d565b60405180910390f35b34801561047657600080fd5b50610491600480360381019061048c919061354a565b61115a565b60405161049e91906135a5565b60405180910390f35b3480156104b357600080fd5b506104bc611206565b6040516104c991906135a5565b60405180910390f35b3480156104de57600080fd5b506104e761135d565b6040516104f49190613416565b60405180910390f35b34801561050957600080fd5b50610524600480360381019061051f9190613691565b611383565b005b34801561053257600080fd5b5061053b61157b565b6040516105489190613676565b60405180910390f35b34801561055d57600080fd5b5061057860048036038101906105739190613691565b611581565b60405161058591906135a5565b60405180910390f35b34801561059a57600080fd5b506105b560048036038101906105b09190613691565b61189b565b6040516105c29190613676565b60405180910390f35b3480156105d757600080fd5b506105e06118e3565b005b3480156105ee57600080fd5b506105f761196b565b6040516106049190613676565b60405180910390f35b34801561061957600080fd5b50610622611971565b60405161062f91906135a5565b60405180910390f35b34801561064457600080fd5b5061064d611984565b60405161065a9190613676565b60405180910390f35b34801561066f57600080fd5b5061067861198a565b6040516106859190613416565b60405180910390f35b34801561069a57600080fd5b506106a36119b4565b6040516106b091906134c1565b60405180910390f35b3480156106c557600080fd5b506106e060048036038101906106db919061354a565b611a46565b6040516106ed91906135a5565b60405180910390f35b34801561070257600080fd5b5061071d6004803603810190610718919061354a565b611b31565b60405161072a91906135a5565b60405180910390f35b34801561073f57600080fd5b50610748611b4f565b6040516107559190613676565b60405180910390f35b34801561076a57600080fd5b5061078560048036038101906107809190613691565b611b55565b60405161079291906135a5565b60405180910390f35b3480156107a757600080fd5b506107c260048036038101906107bd9190613748565b611b75565b6040516107cf91906135a5565b60405180910390f35b3480156107e457600080fd5b506107ed611c93565b6040516107fa9190613676565b60405180910390f35b34801561080f57600080fd5b50610818611c99565b60405161082591906135a5565b60405180910390f35b34801561083a57600080fd5b5061085560048036038101906108509190613691565b611d59565b60405161086291906135a5565b60405180910390f35b34801561087757600080fd5b50610892600480360381019061088d9190613788565b611d79565b60405161089f9190613676565b60405180910390f35b3480156108b457600080fd5b506108bd611e00565b005b3480156108cb57600080fd5b506108e660048036038101906108e191906137f4565b611f7e565b005b3480156108f457600080fd5b506108fd6120b4565b60405161090a91906135a5565b60405180910390f35b34801561091f57600080fd5b5061093a60048036038101906109359190613691565b612174565b005b34801561094857600080fd5b5061095161226b565b60405161095e91906138ab565b60405180910390f35b34801561097357600080fd5b5061097c61227e565b6040516109899190613416565b60405180910390f35b34801561099e57600080fd5b506109b960048036038101906109b49190613691565b6122a4565b6040516109c691906135a5565b60405180910390f35b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060038054610a04906138f5565b80601f0160208091040260200160405190810160405280929190818152602001828054610a30906138f5565b8015610a7d5780601f10610a5257610100808354040283529160200191610a7d565b820191906000526020600020905b815481529060010190602001808311610a6057829003601f168201915b5050505050905090565b6000610a9b610a946122c4565b84846122cc565b6001905092915050565b6000610aaf6122c4565b73ffffffffffffffffffffffffffffffffffffffff16610acd61198a565b73ffffffffffffffffffffffffffffffffffffffff1614610b23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1a90613972565b60405180910390fd5b60006064600a600954610b3691906139c1565b610b409190613a32565b9050600060c86001600954610b5591906139c1565b610b5f9190613a32565b905081841115610ba4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9b90613ad5565b60405180910390fd5b80841015610be7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bde90613b67565b60405180910390fd5b83600a81905550600192505050919050565b6000610c036122c4565b73ffffffffffffffffffffffffffffffffffffffff16610c2161198a565b73ffffffffffffffffffffffffffffffffffffffff1614610c77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6e90613972565b60405180910390fd5b6001601160006101000a81548160ff02191690836003811115610c9d57610c9c613834565b5b0217905550601460128190555060146013819055506001905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610cef6122c4565b73ffffffffffffffffffffffffffffffffffffffff16610d0d61198a565b73ffffffffffffffffffffffffffffffffffffffff161480610d835750610d326122c4565b73ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610dc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db990613bf9565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4990613c8b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ec1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb890613cf7565b60405180910390fd5b80601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610f0f6122c4565b73ffffffffffffffffffffffffffffffffffffffff16610f2d61198a565b73ffffffffffffffffffffffffffffffffffffffff1614610f83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7a90613972565b60405180910390fd5b60006064600a600954610f9691906139c1565b610fa09190613a32565b9050600060c86001600954610fb591906139c1565b610fbf9190613a32565b905081841115611004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffb90613d89565b60405180910390fd5b80841015611047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103e90613e1b565b60405180910390fd5b83600b81905550600192505050919050565b6000611066848484612495565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110b16122c4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611131576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112890613ead565b60405180910390fd5b6111458561113d6122c4565b8584036122cc565b60019150509392505050565b60006012905090565b60006111fc6111676122c4565b8484600160006111756122c4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111f79190613ecd565b6122cc565b6001905092915050565b60006112106122c4565b73ffffffffffffffffffffffffffffffffffffffff1661122e61198a565b73ffffffffffffffffffffffffffffffffffffffff1614806112a457506112536122c4565b73ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6112e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112da90613bf9565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6016549081150290604051600060405180830381858888f1935050505015801561134d573d6000803e3d6000fd5b5060006016819055506001905090565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61138b6122c4565b73ffffffffffffffffffffffffffffffffffffffff166113a961198a565b73ffffffffffffffffffffffffffffffffffffffff16148061141f57506113ce6122c4565b73ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61145e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145590613bf9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016114d69190613416565b602060405180830381865afa1580156114f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115179190613f16565b6040518363ffffffff1660e01b8152600401611534929190613f43565b6020604051808303816000875af1158015611553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115779190613f81565b5050565b60125481565b600061158b6122c4565b73ffffffffffffffffffffffffffffffffffffffff166115a961198a565b73ffffffffffffffffffffffffffffffffffffffff16148061161f57506115ce6122c4565b73ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61165e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165590613bf9565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590614020565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361175d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117549061408c565b60405180910390fd5b81600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600f6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6118eb6122c4565b73ffffffffffffffffffffffffffffffffffffffff1661190961198a565b73ffffffffffffffffffffffffffffffffffffffff161461195f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195690613972565b60405180910390fd5b6119696000612d4c565b565b60135481565b600860009054906101000a900460ff1681565b600a5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546119c3906138f5565b80601f01602080910402602001604051908101604052809291908181526020018280546119ef906138f5565b8015611a3c5780601f10611a1157610100808354040283529160200191611a3c565b820191906000526020600020905b815481529060010190602001808311611a1f57829003601f168201915b5050505050905090565b60008060016000611a556122c4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b099061411e565b60405180910390fd5b611b26611b1d6122c4565b858584036122cc565b600191505092915050565b6000611b45611b3e6122c4565b8484612495565b6001905092915050565b600b5481565b600f6020528060005260406000206000915054906101000a900460ff1681565b6000611b7f6122c4565b73ffffffffffffffffffffffffffffffffffffffff16611b9d61198a565b73ffffffffffffffffffffffffffffffffffffffff1614611bf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bea90613972565b60405180910390fd5b6028831115611c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2e906141b0565b60405180910390fd5b6028821115611c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c72906141b0565b60405180910390fd5b82601281905550816013819055506001905092915050565b60165481565b6000611ca36122c4565b73ffffffffffffffffffffffffffffffffffffffff16611cc161198a565b73ffffffffffffffffffffffffffffffffffffffff1614611d17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0e90613972565b60405180910390fd5b6003601160006101000a81548160ff02191690836003811115611d3d57611d3c613834565b5b0217905550600560128190555060056013819055506001905090565b600e6020528060005260406000206000915054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611e086122c4565b73ffffffffffffffffffffffffffffffffffffffff16611e2661198a565b73ffffffffffffffffffffffffffffffffffffffff161480611e9c5750611e4b6122c4565b73ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611edb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed290613bf9565b60405180910390fd5b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051611f2390614201565b60006040518083038185875af1925050503d8060008114611f60576040519150601f19603f3d011682016040523d82523d6000602084013e611f65565b606091505b5050905080611f7357600080fd5b600060168190555050565b611f866122c4565b73ffffffffffffffffffffffffffffffffffffffff16611fa461198a565b73ffffffffffffffffffffffffffffffffffffffff16148061201a5750611fc96122c4565b73ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b612059576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205090613bf9565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006120be6122c4565b73ffffffffffffffffffffffffffffffffffffffff166120dc61198a565b73ffffffffffffffffffffffffffffffffffffffff1614612132576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212990613972565b60405180910390fd5b6002601160006101000a81548160ff0219169083600381111561215857612157613834565b5b0217905550600760128190555060076013819055506001905090565b61217c6122c4565b73ffffffffffffffffffffffffffffffffffffffff1661219a61198a565b73ffffffffffffffffffffffffffffffffffffffff16146121f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e790613972565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361225f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225690614288565b60405180910390fd5b61226881612d4c565b50565b601160009054906101000a900460ff1681565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60106020528060005260406000206000915054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361233b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123329061431a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a1906143ac565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124889190613676565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fb9061443e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256a906144d0565b60405180910390fd5b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156126175750600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561271057601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461270f57600a548111156126b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ad90614562565b60405180910390fd5b600b546126c28361189b565b826126cd9190613ecd565b111561270e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612705906145f4565b60405180910390fd5b5b5b6000819050600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156127b95750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d3b57601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806128675750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15612c4d57600a548211156128b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a890614686565b60405180910390fd5b600060125411801561291057508373ffffffffffffffffffffffffffffffffffffffff16601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80156129665750600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561299e57503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15612a7057600060038111156129b7576129b6613834565b5b601160009054906101000a900460ff1660038111156129d9576129d8613834565b5b03612a37576001601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b6000606460125484612a4991906139c1565b612a539190613a32565b9050612a60853083612e12565b8083612a6c91906146a6565b9150505b8273ffffffffffffffffffffffffffffffffffffffff16601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148015612b175750600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612b4f57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612b685750601160019054906101000a900460ff16155b15612c48576000601354905060011515601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503612bd25760145490505b6001601160016101000a81548160ff021916908315150217905550612bf5613091565b6000601160016101000a81548160ff021916908315150217905550600060648285612c2091906139c1565b612c2a9190613a32565b9050612c37863083612e12565b8084612c4391906146a6565b925050505b612d3a565b60011515601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515148015612cfb57508273ffffffffffffffffffffffffffffffffffffffff16601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15612d39576000606460145484612d1291906139c1565b612d1c9190613a32565b9050612d29853083612e12565b8083612d3591906146a6565b9150505b5b5b612d46848483612e12565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e789061443e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ef0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee7906144d0565b60405180910390fd5b612efb8383836130fa565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612f81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f789061474c565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130149190613ecd565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516130789190613676565b60405180910390a361308b8484846130ff565b50505050565b600061309c3061189b565b03156130f8576000806130ae3061189b565b9050600047905060008211156130f4574790506130cc826000613104565b80476130d891906146a6565b925082601660008282546130ec9190613ecd565b925050819055505b5050505b565b505050565b505050565b6000600267ffffffffffffffff8111156131215761312061476c565b5b60405190808252806020026020018201604052801561314f5781602001602082028036833780820191505090505b50905030816000815181106131675761316661479b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561320c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061323091906147df565b816001815181106132445761324361479b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503073ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016132f9929190613f43565b6020604051808303816000875af1158015613318573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061333c9190613f81565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac94784848430426040518663ffffffff1660e01b815260040161339e9594939291906148ca565b600060405180830381600087803b1580156133b857600080fd5b505af11580156133cc573d6000803e3d6000fd5b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613400826133d5565b9050919050565b613410816133f5565b82525050565b600060208201905061342b6000830184613407565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561346b578082015181840152602081019050613450565b60008484015250505050565b6000601f19601f8301169050919050565b600061349382613431565b61349d818561343c565b93506134ad81856020860161344d565b6134b681613477565b840191505092915050565b600060208201905081810360008301526134db8184613488565b905092915050565b600080fd5b6134f1816133f5565b81146134fc57600080fd5b50565b60008135905061350e816134e8565b92915050565b6000819050919050565b61352781613514565b811461353257600080fd5b50565b6000813590506135448161351e565b92915050565b60008060408385031215613561576135606134e3565b5b600061356f858286016134ff565b925050602061358085828601613535565b9150509250929050565b60008115159050919050565b61359f8161358a565b82525050565b60006020820190506135ba6000830184613596565b92915050565b6000602082840312156135d6576135d56134e3565b5b60006135e484828501613535565b91505092915050565b6000819050919050565b600061361261360d613608846133d5565b6135ed565b6133d5565b9050919050565b6000613624826135f7565b9050919050565b600061363682613619565b9050919050565b6136468161362b565b82525050565b6000602082019050613661600083018461363d565b92915050565b61367081613514565b82525050565b600060208201905061368b6000830184613667565b92915050565b6000602082840312156136a7576136a66134e3565b5b60006136b5848285016134ff565b91505092915050565b6000806000606084860312156136d7576136d66134e3565b5b60006136e5868287016134ff565b93505060206136f6868287016134ff565b925050604061370786828701613535565b9150509250925092565b600060ff82169050919050565b61372781613711565b82525050565b6000602082019050613742600083018461371e565b92915050565b6000806040838503121561375f5761375e6134e3565b5b600061376d85828601613535565b925050602061377e85828601613535565b9150509250929050565b6000806040838503121561379f5761379e6134e3565b5b60006137ad858286016134ff565b92505060206137be858286016134ff565b9150509250929050565b6137d18161358a565b81146137dc57600080fd5b50565b6000813590506137ee816137c8565b92915050565b6000806040838503121561380b5761380a6134e3565b5b6000613819858286016134ff565b925050602061382a858286016137df565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6004811061387457613873613834565b5b50565b600081905061388582613863565b919050565b600061389582613877565b9050919050565b6138a58161388a565b82525050565b60006020820190506138c0600083018461389c565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061390d57607f821691505b6020821081036139205761391f6138c6565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061395c60208361343c565b915061396782613926565b602082019050919050565b6000602082019050818103600083015261398b8161394f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006139cc82613514565b91506139d783613514565b92508282026139e581613514565b915082820484148315176139fc576139fb613992565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613a3d82613514565b9150613a4883613514565b925082613a5857613a57613a03565b5b828204905092915050565b7f43616e6e6f7420736574206d61785478416d6f756e744368616e676520746f2060008201527f6d6f7265207468616e20313025206f662074686520737570706c790000000000602082015250565b6000613abf603b8361343c565b9150613aca82613a63565b604082019050919050565b60006020820190508181036000830152613aee81613ab2565b9050919050565b7f43616e6e6f7420736574206d61785478416d6f756e744368616e676520746f2060008201527f6c657373207468616e202e3525206f662074686520737570706c790000000000602082015250565b6000613b51603b8361343c565b9150613b5c82613af5565b604082019050919050565b60006020820190508181036000830152613b8081613b44565b9050919050565b7f43616c6c6572206973206e6f7420746865206f776e6572206f7220746865207360008201527f706563696669632077616c6c6574000000000000000000000000000000000000602082015250565b6000613be3602e8361343c565b9150613bee82613b87565b604082019050919050565b60006020820190508181036000830152613c1281613bd6565b9050919050565b7f4c5020506169722063616e6e6f742062652074686520446561642077616c6c6560008201527f7421000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c7560228361343c565b9150613c8082613c19565b604082019050919050565b60006020820190508181036000830152613ca481613c68565b9050919050565b7f4c5020506169722063616e6e6f74206265203021000000000000000000000000600082015250565b6000613ce160148361343c565b9150613cec82613cab565b602082019050919050565b60006020820190508181036000830152613d1081613cd4565b9050919050565b7f43616e6e6f7420736574206d617857616c6c65744368616e676520746f206d6f60008201527f7265207468616e20313025206f662074686520737570706c7900000000000000602082015250565b6000613d7360398361343c565b9150613d7e82613d17565b604082019050919050565b60006020820190508181036000830152613da281613d66565b9050919050565b7f43616e6e6f7420736574206d617857616c6c65744368616e676520746f206c6560008201527f7373207468616e202e3525206f662074686520737570706c7900000000000000602082015250565b6000613e0560398361343c565b9150613e1082613da9565b604082019050919050565b60006020820190508181036000830152613e3481613df8565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613e9760288361343c565b9150613ea282613e3b565b604082019050919050565b60006020820190508181036000830152613ec681613e8a565b9050919050565b6000613ed882613514565b9150613ee383613514565b9250828201905080821115613efb57613efa613992565b5b92915050565b600081519050613f108161351e565b92915050565b600060208284031215613f2c57613f2b6134e3565b5b6000613f3a84828501613f01565b91505092915050565b6000604082019050613f586000830185613407565b613f656020830184613667565b9392505050565b600081519050613f7b816137c8565b92915050565b600060208284031215613f9757613f966134e3565b5b6000613fa584828501613f6c565b91505092915050565b7f4f7065726174696f6e732057616c6c65742063616e6e6f74206265207468652060008201527f446561642077616c6c6574210000000000000000000000000000000000000000602082015250565b600061400a602c8361343c565b915061401582613fae565b604082019050919050565b6000602082019050818103600083015261403981613ffd565b9050919050565b7f4f7065726174696f6e732057616c6c65742063616e6e6f742062652030210000600082015250565b6000614076601e8361343c565b915061408182614040565b602082019050919050565b600060208201905081810360008301526140a581614069565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061410860258361343c565b9150614113826140ac565b604082019050919050565b60006020820190508181036000830152614137816140fb565b9050919050565b7f4f7065726174696f6e73205461782063616e6e6f74206265206d6f726520746860008201527f616e203430250000000000000000000000000000000000000000000000000000602082015250565b600061419a60268361343c565b91506141a58261413e565b604082019050919050565b600060208201905081810360008301526141c98161418d565b9050919050565b600081905092915050565b50565b60006141eb6000836141d0565b91506141f6826141db565b600082019050919050565b600061420c826141de565b9150819050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061427260268361343c565b915061427d82614216565b604082019050919050565b600060208201905081810360008301526142a181614265565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061430460248361343c565b915061430f826142a8565b604082019050919050565b60006020820190508181036000830152614333816142f7565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061439660228361343c565b91506143a18261433a565b604082019050919050565b600060208201905081810360008301526143c581614389565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061442860258361343c565b9150614433826143cc565b604082019050919050565b600060208201905081810360008301526144578161441b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006144ba60238361343c565b91506144c58261445e565b604082019050919050565b600060208201905081810360008301526144e9816144ad565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473207460008201527f6865206d6178207472616e73616374696f6e20616d6f756e7420626566000000602082015250565b600061454c603d8361343c565b9150614557826144f0565b604082019050919050565b6000602082019050818103600083015261457b8161453f565b9050919050565b7f45524332303a2062616c616e636520616d6f756e74206578636565646564206d60008201527f61782077616c6c657420616d6f756e74206c696d697400000000000000000000602082015250565b60006145de60368361343c565b91506145e982614582565b604082019050919050565b6000602082019050818103600083015261460d816145d1565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473207460008201527f6865206d6178207472616e73616374696f6e20616d6f756e7400000000000000602082015250565b600061467060398361343c565b915061467b82614614565b604082019050919050565b6000602082019050818103600083015261469f81614663565b9050919050565b60006146b182613514565b91506146bc83613514565b92508282039050818111156146d4576146d3613992565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061473660268361343c565b9150614741826146da565b604082019050919050565b6000602082019050818103600083015261476581614729565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506147d9816134e8565b92915050565b6000602082840312156147f5576147f46134e3565b5b6000614803848285016147ca565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614841816133f5565b82525050565b60006148538383614838565b60208301905092915050565b6000602082019050919050565b60006148778261480c565b6148818185614817565b935061488c83614828565b8060005b838110156148bd5781516148a48882614847565b97506148af8361485f565b925050600181019050614890565b5085935050505092915050565b600060a0820190506148df6000830188613667565b6148ec6020830187613667565b81810360408301526148fe818661486c565b905061490d6060830185613407565b61491a6080830184613667565b969550505050505056fea2646970667358221220d1f7e752489c330ff2fe98a050da982ffb7c6f92516577441920d361aff9d44764736f6c63430008120033

Deployed Bytecode

0x60806040526004361061023f5760003560e01c80637b1b90dc1161012e578063ca3d7ad8116100ab578063ef83e6091161006f578063ef83e609146108e8578063f2fde38b14610913578063fca675a81461093c578063fd72e22a14610967578063fe29f6ec1461099257610246565b8063ca3d7ad814610803578063cea69f021461082e578063dd62ed3e1461086b578063e086e5ec146108a8578063ef437ff5146108bf57610246565b8063a9059cbb116100f2578063a9059cbb146106f6578063aa4bde2814610733578063aa6fcbf21461075e578063b40724871461079b578063b61b64fa146107d857610246565b80637b1b90dc1461060d5780638c0b5e22146106385780638da5cb5b1461066357806395d89b411461068e578063a457c2d7146106b957610246565b8063313ce567116101bc5780635e27922e116101805780635e27922e146105265780636aebf6271461055157806370a082311461058e578063715018a6146105cb57806375ca0b46146105e257610246565b8063313ce5671461043f578063395093511461046a57806341d4a5dd146104a757806349bd5a5e146104d257806349df728c146104fd57610246565b80631694505e116102035780631694505e1461034657806318160ddd146103715780631b56bbf91461039c5780631f6dcb0b146103c557806323b872dd1461040257610246565b806303fd2a451461024b57806306fdde0314610276578063095ea7b3146102a15780630ab68e47146102de5780631169b9d81461031b57610246565b3661024657005b600080fd5b34801561025757600080fd5b506102606109cf565b60405161026d9190613416565b60405180910390f35b34801561028257600080fd5b5061028b6109f5565b60405161029891906134c1565b60405180910390f35b3480156102ad57600080fd5b506102c860048036038101906102c3919061354a565b610a87565b6040516102d591906135a5565b60405180910390f35b3480156102ea57600080fd5b50610305600480360381019061030091906135c0565b610aa5565b60405161031291906135a5565b60405180910390f35b34801561032757600080fd5b50610330610bf9565b60405161033d91906135a5565b60405180910390f35b34801561035257600080fd5b5061035b610cb9565b604051610368919061364c565b60405180910390f35b34801561037d57600080fd5b50610386610cdd565b6040516103939190613676565b60405180910390f35b3480156103a857600080fd5b506103c360048036038101906103be9190613691565b610ce7565b005b3480156103d157600080fd5b506103ec60048036038101906103e791906135c0565b610f05565b6040516103f991906135a5565b60405180910390f35b34801561040e57600080fd5b50610429600480360381019061042491906136be565b611059565b60405161043691906135a5565b60405180910390f35b34801561044b57600080fd5b50610454611151565b604051610461919061372d565b60405180910390f35b34801561047657600080fd5b50610491600480360381019061048c919061354a565b61115a565b60405161049e91906135a5565b60405180910390f35b3480156104b357600080fd5b506104bc611206565b6040516104c991906135a5565b60405180910390f35b3480156104de57600080fd5b506104e761135d565b6040516104f49190613416565b60405180910390f35b34801561050957600080fd5b50610524600480360381019061051f9190613691565b611383565b005b34801561053257600080fd5b5061053b61157b565b6040516105489190613676565b60405180910390f35b34801561055d57600080fd5b5061057860048036038101906105739190613691565b611581565b60405161058591906135a5565b60405180910390f35b34801561059a57600080fd5b506105b560048036038101906105b09190613691565b61189b565b6040516105c29190613676565b60405180910390f35b3480156105d757600080fd5b506105e06118e3565b005b3480156105ee57600080fd5b506105f761196b565b6040516106049190613676565b60405180910390f35b34801561061957600080fd5b50610622611971565b60405161062f91906135a5565b60405180910390f35b34801561064457600080fd5b5061064d611984565b60405161065a9190613676565b60405180910390f35b34801561066f57600080fd5b5061067861198a565b6040516106859190613416565b60405180910390f35b34801561069a57600080fd5b506106a36119b4565b6040516106b091906134c1565b60405180910390f35b3480156106c557600080fd5b506106e060048036038101906106db919061354a565b611a46565b6040516106ed91906135a5565b60405180910390f35b34801561070257600080fd5b5061071d6004803603810190610718919061354a565b611b31565b60405161072a91906135a5565b60405180910390f35b34801561073f57600080fd5b50610748611b4f565b6040516107559190613676565b60405180910390f35b34801561076a57600080fd5b5061078560048036038101906107809190613691565b611b55565b60405161079291906135a5565b60405180910390f35b3480156107a757600080fd5b506107c260048036038101906107bd9190613748565b611b75565b6040516107cf91906135a5565b60405180910390f35b3480156107e457600080fd5b506107ed611c93565b6040516107fa9190613676565b60405180910390f35b34801561080f57600080fd5b50610818611c99565b60405161082591906135a5565b60405180910390f35b34801561083a57600080fd5b5061085560048036038101906108509190613691565b611d59565b60405161086291906135a5565b60405180910390f35b34801561087757600080fd5b50610892600480360381019061088d9190613788565b611d79565b60405161089f9190613676565b60405180910390f35b3480156108b457600080fd5b506108bd611e00565b005b3480156108cb57600080fd5b506108e660048036038101906108e191906137f4565b611f7e565b005b3480156108f457600080fd5b506108fd6120b4565b60405161090a91906135a5565b60405180910390f35b34801561091f57600080fd5b5061093a60048036038101906109359190613691565b612174565b005b34801561094857600080fd5b5061095161226b565b60405161095e91906138ab565b60405180910390f35b34801561097357600080fd5b5061097c61227e565b6040516109899190613416565b60405180910390f35b34801561099e57600080fd5b506109b960048036038101906109b49190613691565b6122a4565b6040516109c691906135a5565b60405180910390f35b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060038054610a04906138f5565b80601f0160208091040260200160405190810160405280929190818152602001828054610a30906138f5565b8015610a7d5780601f10610a5257610100808354040283529160200191610a7d565b820191906000526020600020905b815481529060010190602001808311610a6057829003601f168201915b5050505050905090565b6000610a9b610a946122c4565b84846122cc565b6001905092915050565b6000610aaf6122c4565b73ffffffffffffffffffffffffffffffffffffffff16610acd61198a565b73ffffffffffffffffffffffffffffffffffffffff1614610b23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1a90613972565b60405180910390fd5b60006064600a600954610b3691906139c1565b610b409190613a32565b9050600060c86001600954610b5591906139c1565b610b5f9190613a32565b905081841115610ba4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9b90613ad5565b60405180910390fd5b80841015610be7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bde90613b67565b60405180910390fd5b83600a81905550600192505050919050565b6000610c036122c4565b73ffffffffffffffffffffffffffffffffffffffff16610c2161198a565b73ffffffffffffffffffffffffffffffffffffffff1614610c77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6e90613972565b60405180910390fd5b6001601160006101000a81548160ff02191690836003811115610c9d57610c9c613834565b5b0217905550601460128190555060146013819055506001905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610cef6122c4565b73ffffffffffffffffffffffffffffffffffffffff16610d0d61198a565b73ffffffffffffffffffffffffffffffffffffffff161480610d835750610d326122c4565b73ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610dc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db990613bf9565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4990613c8b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ec1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb890613cf7565b60405180910390fd5b80601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610f0f6122c4565b73ffffffffffffffffffffffffffffffffffffffff16610f2d61198a565b73ffffffffffffffffffffffffffffffffffffffff1614610f83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7a90613972565b60405180910390fd5b60006064600a600954610f9691906139c1565b610fa09190613a32565b9050600060c86001600954610fb591906139c1565b610fbf9190613a32565b905081841115611004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffb90613d89565b60405180910390fd5b80841015611047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103e90613e1b565b60405180910390fd5b83600b81905550600192505050919050565b6000611066848484612495565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110b16122c4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611131576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112890613ead565b60405180910390fd5b6111458561113d6122c4565b8584036122cc565b60019150509392505050565b60006012905090565b60006111fc6111676122c4565b8484600160006111756122c4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111f79190613ecd565b6122cc565b6001905092915050565b60006112106122c4565b73ffffffffffffffffffffffffffffffffffffffff1661122e61198a565b73ffffffffffffffffffffffffffffffffffffffff1614806112a457506112536122c4565b73ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6112e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112da90613bf9565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6016549081150290604051600060405180830381858888f1935050505015801561134d573d6000803e3d6000fd5b5060006016819055506001905090565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61138b6122c4565b73ffffffffffffffffffffffffffffffffffffffff166113a961198a565b73ffffffffffffffffffffffffffffffffffffffff16148061141f57506113ce6122c4565b73ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61145e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145590613bf9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016114d69190613416565b602060405180830381865afa1580156114f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115179190613f16565b6040518363ffffffff1660e01b8152600401611534929190613f43565b6020604051808303816000875af1158015611553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115779190613f81565b5050565b60125481565b600061158b6122c4565b73ffffffffffffffffffffffffffffffffffffffff166115a961198a565b73ffffffffffffffffffffffffffffffffffffffff16148061161f57506115ce6122c4565b73ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61165e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165590613bf9565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590614020565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361175d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117549061408c565b60405180910390fd5b81600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600f6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6118eb6122c4565b73ffffffffffffffffffffffffffffffffffffffff1661190961198a565b73ffffffffffffffffffffffffffffffffffffffff161461195f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195690613972565b60405180910390fd5b6119696000612d4c565b565b60135481565b600860009054906101000a900460ff1681565b600a5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546119c3906138f5565b80601f01602080910402602001604051908101604052809291908181526020018280546119ef906138f5565b8015611a3c5780601f10611a1157610100808354040283529160200191611a3c565b820191906000526020600020905b815481529060010190602001808311611a1f57829003601f168201915b5050505050905090565b60008060016000611a556122c4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b099061411e565b60405180910390fd5b611b26611b1d6122c4565b858584036122cc565b600191505092915050565b6000611b45611b3e6122c4565b8484612495565b6001905092915050565b600b5481565b600f6020528060005260406000206000915054906101000a900460ff1681565b6000611b7f6122c4565b73ffffffffffffffffffffffffffffffffffffffff16611b9d61198a565b73ffffffffffffffffffffffffffffffffffffffff1614611bf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bea90613972565b60405180910390fd5b6028831115611c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2e906141b0565b60405180910390fd5b6028821115611c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c72906141b0565b60405180910390fd5b82601281905550816013819055506001905092915050565b60165481565b6000611ca36122c4565b73ffffffffffffffffffffffffffffffffffffffff16611cc161198a565b73ffffffffffffffffffffffffffffffffffffffff1614611d17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0e90613972565b60405180910390fd5b6003601160006101000a81548160ff02191690836003811115611d3d57611d3c613834565b5b0217905550600560128190555060056013819055506001905090565b600e6020528060005260406000206000915054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611e086122c4565b73ffffffffffffffffffffffffffffffffffffffff16611e2661198a565b73ffffffffffffffffffffffffffffffffffffffff161480611e9c5750611e4b6122c4565b73ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611edb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed290613bf9565b60405180910390fd5b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051611f2390614201565b60006040518083038185875af1925050503d8060008114611f60576040519150601f19603f3d011682016040523d82523d6000602084013e611f65565b606091505b5050905080611f7357600080fd5b600060168190555050565b611f866122c4565b73ffffffffffffffffffffffffffffffffffffffff16611fa461198a565b73ffffffffffffffffffffffffffffffffffffffff16148061201a5750611fc96122c4565b73ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b612059576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205090613bf9565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006120be6122c4565b73ffffffffffffffffffffffffffffffffffffffff166120dc61198a565b73ffffffffffffffffffffffffffffffffffffffff1614612132576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212990613972565b60405180910390fd5b6002601160006101000a81548160ff0219169083600381111561215857612157613834565b5b0217905550600760128190555060076013819055506001905090565b61217c6122c4565b73ffffffffffffffffffffffffffffffffffffffff1661219a61198a565b73ffffffffffffffffffffffffffffffffffffffff16146121f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e790613972565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361225f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225690614288565b60405180910390fd5b61226881612d4c565b50565b601160009054906101000a900460ff1681565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60106020528060005260406000206000915054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361233b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123329061431a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a1906143ac565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124889190613676565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fb9061443e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256a906144d0565b60405180910390fd5b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156126175750600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561271057601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461270f57600a548111156126b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ad90614562565b60405180910390fd5b600b546126c28361189b565b826126cd9190613ecd565b111561270e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612705906145f4565b60405180910390fd5b5b5b6000819050600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156127b95750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d3b57601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806128675750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15612c4d57600a548211156128b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a890614686565b60405180910390fd5b600060125411801561291057508373ffffffffffffffffffffffffffffffffffffffff16601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80156129665750600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561299e57503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15612a7057600060038111156129b7576129b6613834565b5b601160009054906101000a900460ff1660038111156129d9576129d8613834565b5b03612a37576001601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b6000606460125484612a4991906139c1565b612a539190613a32565b9050612a60853083612e12565b8083612a6c91906146a6565b9150505b8273ffffffffffffffffffffffffffffffffffffffff16601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148015612b175750600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612b4f57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612b685750601160019054906101000a900460ff16155b15612c48576000601354905060011515601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503612bd25760145490505b6001601160016101000a81548160ff021916908315150217905550612bf5613091565b6000601160016101000a81548160ff021916908315150217905550600060648285612c2091906139c1565b612c2a9190613a32565b9050612c37863083612e12565b8084612c4391906146a6565b925050505b612d3a565b60011515601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515148015612cfb57508273ffffffffffffffffffffffffffffffffffffffff16601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15612d39576000606460145484612d1291906139c1565b612d1c9190613a32565b9050612d29853083612e12565b8083612d3591906146a6565b9150505b5b5b612d46848483612e12565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e789061443e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ef0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee7906144d0565b60405180910390fd5b612efb8383836130fa565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612f81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f789061474c565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130149190613ecd565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516130789190613676565b60405180910390a361308b8484846130ff565b50505050565b600061309c3061189b565b03156130f8576000806130ae3061189b565b9050600047905060008211156130f4574790506130cc826000613104565b80476130d891906146a6565b925082601660008282546130ec9190613ecd565b925050819055505b5050505b565b505050565b505050565b6000600267ffffffffffffffff8111156131215761312061476c565b5b60405190808252806020026020018201604052801561314f5781602001602082028036833780820191505090505b50905030816000815181106131675761316661479b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561320c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061323091906147df565b816001815181106132445761324361479b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503073ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016132f9929190613f43565b6020604051808303816000875af1158015613318573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061333c9190613f81565b507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac94784848430426040518663ffffffff1660e01b815260040161339e9594939291906148ca565b600060405180830381600087803b1580156133b857600080fd5b505af11580156133cc573d6000803e3d6000fd5b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613400826133d5565b9050919050565b613410816133f5565b82525050565b600060208201905061342b6000830184613407565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561346b578082015181840152602081019050613450565b60008484015250505050565b6000601f19601f8301169050919050565b600061349382613431565b61349d818561343c565b93506134ad81856020860161344d565b6134b681613477565b840191505092915050565b600060208201905081810360008301526134db8184613488565b905092915050565b600080fd5b6134f1816133f5565b81146134fc57600080fd5b50565b60008135905061350e816134e8565b92915050565b6000819050919050565b61352781613514565b811461353257600080fd5b50565b6000813590506135448161351e565b92915050565b60008060408385031215613561576135606134e3565b5b600061356f858286016134ff565b925050602061358085828601613535565b9150509250929050565b60008115159050919050565b61359f8161358a565b82525050565b60006020820190506135ba6000830184613596565b92915050565b6000602082840312156135d6576135d56134e3565b5b60006135e484828501613535565b91505092915050565b6000819050919050565b600061361261360d613608846133d5565b6135ed565b6133d5565b9050919050565b6000613624826135f7565b9050919050565b600061363682613619565b9050919050565b6136468161362b565b82525050565b6000602082019050613661600083018461363d565b92915050565b61367081613514565b82525050565b600060208201905061368b6000830184613667565b92915050565b6000602082840312156136a7576136a66134e3565b5b60006136b5848285016134ff565b91505092915050565b6000806000606084860312156136d7576136d66134e3565b5b60006136e5868287016134ff565b93505060206136f6868287016134ff565b925050604061370786828701613535565b9150509250925092565b600060ff82169050919050565b61372781613711565b82525050565b6000602082019050613742600083018461371e565b92915050565b6000806040838503121561375f5761375e6134e3565b5b600061376d85828601613535565b925050602061377e85828601613535565b9150509250929050565b6000806040838503121561379f5761379e6134e3565b5b60006137ad858286016134ff565b92505060206137be858286016134ff565b9150509250929050565b6137d18161358a565b81146137dc57600080fd5b50565b6000813590506137ee816137c8565b92915050565b6000806040838503121561380b5761380a6134e3565b5b6000613819858286016134ff565b925050602061382a858286016137df565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6004811061387457613873613834565b5b50565b600081905061388582613863565b919050565b600061389582613877565b9050919050565b6138a58161388a565b82525050565b60006020820190506138c0600083018461389c565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061390d57607f821691505b6020821081036139205761391f6138c6565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061395c60208361343c565b915061396782613926565b602082019050919050565b6000602082019050818103600083015261398b8161394f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006139cc82613514565b91506139d783613514565b92508282026139e581613514565b915082820484148315176139fc576139fb613992565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613a3d82613514565b9150613a4883613514565b925082613a5857613a57613a03565b5b828204905092915050565b7f43616e6e6f7420736574206d61785478416d6f756e744368616e676520746f2060008201527f6d6f7265207468616e20313025206f662074686520737570706c790000000000602082015250565b6000613abf603b8361343c565b9150613aca82613a63565b604082019050919050565b60006020820190508181036000830152613aee81613ab2565b9050919050565b7f43616e6e6f7420736574206d61785478416d6f756e744368616e676520746f2060008201527f6c657373207468616e202e3525206f662074686520737570706c790000000000602082015250565b6000613b51603b8361343c565b9150613b5c82613af5565b604082019050919050565b60006020820190508181036000830152613b8081613b44565b9050919050565b7f43616c6c6572206973206e6f7420746865206f776e6572206f7220746865207360008201527f706563696669632077616c6c6574000000000000000000000000000000000000602082015250565b6000613be3602e8361343c565b9150613bee82613b87565b604082019050919050565b60006020820190508181036000830152613c1281613bd6565b9050919050565b7f4c5020506169722063616e6e6f742062652074686520446561642077616c6c6560008201527f7421000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c7560228361343c565b9150613c8082613c19565b604082019050919050565b60006020820190508181036000830152613ca481613c68565b9050919050565b7f4c5020506169722063616e6e6f74206265203021000000000000000000000000600082015250565b6000613ce160148361343c565b9150613cec82613cab565b602082019050919050565b60006020820190508181036000830152613d1081613cd4565b9050919050565b7f43616e6e6f7420736574206d617857616c6c65744368616e676520746f206d6f60008201527f7265207468616e20313025206f662074686520737570706c7900000000000000602082015250565b6000613d7360398361343c565b9150613d7e82613d17565b604082019050919050565b60006020820190508181036000830152613da281613d66565b9050919050565b7f43616e6e6f7420736574206d617857616c6c65744368616e676520746f206c6560008201527f7373207468616e202e3525206f662074686520737570706c7900000000000000602082015250565b6000613e0560398361343c565b9150613e1082613da9565b604082019050919050565b60006020820190508181036000830152613e3481613df8565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613e9760288361343c565b9150613ea282613e3b565b604082019050919050565b60006020820190508181036000830152613ec681613e8a565b9050919050565b6000613ed882613514565b9150613ee383613514565b9250828201905080821115613efb57613efa613992565b5b92915050565b600081519050613f108161351e565b92915050565b600060208284031215613f2c57613f2b6134e3565b5b6000613f3a84828501613f01565b91505092915050565b6000604082019050613f586000830185613407565b613f656020830184613667565b9392505050565b600081519050613f7b816137c8565b92915050565b600060208284031215613f9757613f966134e3565b5b6000613fa584828501613f6c565b91505092915050565b7f4f7065726174696f6e732057616c6c65742063616e6e6f74206265207468652060008201527f446561642077616c6c6574210000000000000000000000000000000000000000602082015250565b600061400a602c8361343c565b915061401582613fae565b604082019050919050565b6000602082019050818103600083015261403981613ffd565b9050919050565b7f4f7065726174696f6e732057616c6c65742063616e6e6f742062652030210000600082015250565b6000614076601e8361343c565b915061408182614040565b602082019050919050565b600060208201905081810360008301526140a581614069565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061410860258361343c565b9150614113826140ac565b604082019050919050565b60006020820190508181036000830152614137816140fb565b9050919050565b7f4f7065726174696f6e73205461782063616e6e6f74206265206d6f726520746860008201527f616e203430250000000000000000000000000000000000000000000000000000602082015250565b600061419a60268361343c565b91506141a58261413e565b604082019050919050565b600060208201905081810360008301526141c98161418d565b9050919050565b600081905092915050565b50565b60006141eb6000836141d0565b91506141f6826141db565b600082019050919050565b600061420c826141de565b9150819050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061427260268361343c565b915061427d82614216565b604082019050919050565b600060208201905081810360008301526142a181614265565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061430460248361343c565b915061430f826142a8565b604082019050919050565b60006020820190508181036000830152614333816142f7565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061439660228361343c565b91506143a18261433a565b604082019050919050565b600060208201905081810360008301526143c581614389565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061442860258361343c565b9150614433826143cc565b604082019050919050565b600060208201905081810360008301526144578161441b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006144ba60238361343c565b91506144c58261445e565b604082019050919050565b600060208201905081810360008301526144e9816144ad565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473207460008201527f6865206d6178207472616e73616374696f6e20616d6f756e7420626566000000602082015250565b600061454c603d8361343c565b9150614557826144f0565b604082019050919050565b6000602082019050818103600083015261457b8161453f565b9050919050565b7f45524332303a2062616c616e636520616d6f756e74206578636565646564206d60008201527f61782077616c6c657420616d6f756e74206c696d697400000000000000000000602082015250565b60006145de60368361343c565b91506145e982614582565b604082019050919050565b6000602082019050818103600083015261460d816145d1565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473207460008201527f6865206d6178207472616e73616374696f6e20616d6f756e7400000000000000602082015250565b600061467060398361343c565b915061467b82614614565b604082019050919050565b6000602082019050818103600083015261469f81614663565b9050919050565b60006146b182613514565b91506146bc83613514565b92508282039050818111156146d4576146d3613992565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061473660268361343c565b9150614741826146da565b604082019050919050565b6000602082019050818103600083015261476581614729565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506147d9816134e8565b92915050565b6000602082840312156147f5576147f46134e3565b5b6000614803848285016147ca565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614841816133f5565b82525050565b60006148538383614838565b60208301905092915050565b6000602082019050919050565b60006148778261480c565b6148818185614817565b935061488c83614828565b8060005b838110156148bd5781516148a48882614847565b97506148af8361485f565b925050600181019050614890565b5085935050505092915050565b600060a0820190506148df6000830188613667565b6148ec6020830187613667565b81810360408301526148fe818661486c565b905061490d6060830185613407565b61491a6080830184613667565b969550505050505056fea2646970667358221220d1f7e752489c330ff2fe98a050da982ffb7c6f92516577441920d361aff9d44764736f6c63430008120033

Deployed Bytecode Sourcemap

26149:10453:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26557:64;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9778:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11945:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34856:553;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32602:192;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27022:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10898:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33602:240;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35417:569;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12596:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10740:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13497:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31618:198;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27080:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36215:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26897:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33850:473;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11069:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3170:103;;;;;;;;;;;;;:::i;:::-;;26940:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26268;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26368:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2519:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9997:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14215:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11409:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26421:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26676:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34331:515;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27117:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33002:191;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26630:39;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11647:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35994:213;;;;;;;;;;;;;:::i;:::-;;36429:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32802:192;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3428:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26828:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26474:76;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26726:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26557:64;;;;;;;;;;;;;:::o;9778:100::-;9832:13;9865:5;9858:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9778:100;:::o;11945:169::-;12028:4;12045:39;12054:12;:10;:12::i;:::-;12068:7;12077:6;12045:8;:39::i;:::-;12102:4;12095:11;;11945:169;;;;:::o;34856:553::-;34947:4;2750:12;:10;:12::i;:::-;2739:23;;:7;:5;:7::i;:::-;:23;;;2731:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34964:16:::1;35000:3;34994:2;34984:7;;:12;;;;:::i;:::-;34983:20;;;;:::i;:::-;34964:39;;35014:16;35049:3;35044:1;35034:7;;:11;;;;:::i;:::-;35033:19;;;;:::i;:::-;35014:38;;35101:8;35085:12;:24;;35063:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;35245:8;35229:12;:24;;35207:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;35365:12;35351:11;:26;;;;35397:4;35390:11;;;;34856:553:::0;;;:::o;32602:192::-;32653:4;2750:12;:10;:12::i;:::-;2739:23;;:7;:5;:7::i;:::-;:23;;;2731:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32685:12:::1;32670;;:27;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;32727:2;32708:16;:21;;;;32760:2;32740:17;:22;;;;32782:4;32775:11;;32602:192:::0;:::o;27022:51::-;;;:::o;10898:108::-;10959:7;10986:12;;10979:19;;10898:108;:::o;33602:240::-;27225:12;:10;:12::i;:::-;27214:23;;:7;:5;:7::i;:::-;:23;;;:59;;;;27261:12;:10;:12::i;:::-;27241:32;;:16;;;;;;;;;;;:32;;;27214:59;27206:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;33696:4:::1;;;;;;;;;;;33687:13;;:5;:13;;::::0;33679:60:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;33775:1;33758:19;;:5;:19;;::::0;33750:52:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;33829:5;33813:13;;:21;;;;;;;;;;;;;;;;;;33602:240:::0;:::o;35417:569::-;35510:4;2750:12;:10;:12::i;:::-;2739:23;;:7;:5;:7::i;:::-;:23;;;2731:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35527:16:::1;35563:3;35557:2;35547:7;;:12;;;;:::i;:::-;35546:20;;;;:::i;:::-;35527:39;;35577:16;35612:3;35607:1;35597:7;;:11;;;;:::i;:::-;35596:19;;;;:::i;:::-;35577:38;;35670:8;35650:16;:28;;35628:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;35816:8;35796:16;:28;;35774:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;35938:16;35920:15;:34;;;;35974:4;35967:11;;;;35417:569:::0;;;:::o;12596:492::-;12736:4;12753:36;12763:6;12771:9;12782:6;12753:9;:36::i;:::-;12802:24;12829:11;:19;12841:6;12829:19;;;;;;;;;;;;;;;:33;12849:12;:10;:12::i;:::-;12829:33;;;;;;;;;;;;;;;;12802:60;;12901:6;12881:16;:26;;12873:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;12988:57;12997:6;13005:12;:10;:12::i;:::-;13038:6;13019:16;:25;12988:8;:57::i;:::-;13076:4;13069:11;;;12596:492;;;;;:::o;10740:93::-;10798:5;10823:2;10816:9;;10740:93;:::o;13497:215::-;13585:4;13602:80;13611:12;:10;:12::i;:::-;13625:7;13671:10;13634:11;:25;13646:12;:10;:12::i;:::-;13634:25;;;;;;;;;;;;;;;:34;13660:7;13634:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;13602:8;:80::i;:::-;13700:4;13693:11;;13497:215;;;;:::o;31618:198::-;31688:4;27225:12;:10;:12::i;:::-;27214:23;;:7;:5;:7::i;:::-;:23;;;:59;;;;27261:12;:10;:12::i;:::-;27241:32;;:16;;;;;;;;;;;:32;;;27214:59;27206:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;31713:16:::1;;;;;;;;;;;31705:34;;:51;31740:15;;31705:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;31785:1;31767:15;:19;;;;31804:4;31797:11;;31618:198:::0;:::o;27080:28::-;;;;;;;;;;;;;:::o;36215:206::-;27225:12;:10;:12::i;:::-;27214:23;;:7;:5;:7::i;:::-;:23;;;:59;;;;27261:12;:10;:12::i;:::-;27241:32;;:16;;;;;;;;;;;:32;;;27214:59;27206:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;36303:5:::1;36296:22;;;36333:16;;;;;;;;;;;36371:5;36364:23;;;36396:4;36364:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36296:117;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36215:206:::0;:::o;26897:36::-;;;;:::o;33850:473::-;33956:4;27225:12;:10;:12::i;:::-;27214:23;;:7;:5;:7::i;:::-;:23;;;:59;;;;27261:12;:10;:12::i;:::-;27241:32;;:16;;;;;;;;;;;:32;;;27214:59;27206:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;34009:4:::1;;;;;;;;;;;33995:18;;:10;:18;;::::0;33973:112:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;34126:1;34104:24;;:10;:24;;::::0;34096:67:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;34193:10;34174:16;;:29;;;;;;;;;;;;;;;;;;34244:4;34214:9;:27;34224:16;;;;;;;;;;;34214:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;34287:4;34259:7;:25;34267:16;;;;;;;;;;;34259:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;34311:4;34304:11;;33850:473:::0;;;:::o;11069:127::-;11143:7;11170:9;:18;11180:7;11170:18;;;;;;;;;;;;;;;;11163:25;;11069:127;;;:::o;3170:103::-;2750:12;:10;:12::i;:::-;2739:23;;:7;:5;:7::i;:::-;:23;;;2731:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3235:30:::1;3262:1;3235:18;:30::i;:::-;3170:103::o:0;26940:37::-;;;;:::o;26268:::-;;;;;;;;;;;;;:::o;26368:46::-;;;;:::o;2519:87::-;2565:7;2592:6;;;;;;;;;;;2585:13;;2519:87;:::o;9997:104::-;10053:13;10086:7;10079:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9997:104;:::o;14215:413::-;14308:4;14325:24;14352:11;:25;14364:12;:10;:12::i;:::-;14352:25;;;;;;;;;;;;;;;:34;14378:7;14352:34;;;;;;;;;;;;;;;;14325:61;;14425:15;14405:16;:35;;14397:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;14518:67;14527:12;:10;:12::i;:::-;14541:7;14569:15;14550:16;:34;14518:8;:67::i;:::-;14616:4;14609:11;;;14215:413;;;;:::o;11409:175::-;11495:4;11512:42;11522:12;:10;:12::i;:::-;11536:9;11547:6;11512:9;:42::i;:::-;11572:4;11565:11;;11409:175;;;;:::o;26421:46::-;;;;:::o;26676:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;34331:515::-;34469:4;2750:12;:10;:12::i;:::-;2739:23;;:7;:5;:7::i;:::-;:23;;;2731:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34529:2:::1;34508:17;:23;;34486:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;34652:2;34630:18;:24;;34608:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;34750:17;34731:16;:36;;;;34798:18;34778:17;:38;;;;34834:4;34827:11;;34331:515:::0;;;;:::o;27117:30::-;;;;:::o;33002:191::-;33054:4;2750:12;:10;:12::i;:::-;2739:23;;:7;:5;:7::i;:::-;:23;;;2731:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33086:12:::1;33071;;:27;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;33128:1;33109:16;:20;;;;33160:1;33140:17;:21;;;;33181:4;33174:11;;33002:191:::0;:::o;26630:39::-;;;;;;;;;;;;;;;;;;;;;;:::o;11647:151::-;11736:7;11763:11;:18;11775:5;11763:18;;;;;;;;;;;;;;;:27;11782:7;11763:27;;;;;;;;;;;;;;;;11756:34;;11647:151;;;;:::o;35994:213::-;27225:12;:10;:12::i;:::-;27214:23;;:7;:5;:7::i;:::-;:23;;;:59;;;;27261:12;:10;:12::i;:::-;27241:32;;:16;;;;;;;;;;;:32;;;27214:59;27206:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;36060:12:::1;36085:16;;;;;;;;;;;36077:30;;36116:21;36077:65;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36059:83;;;36161:7;36153:16;;;::::0;::::1;;36198:1;36180:15;:19;;;;36048:159;35994:213::o:0;36429:133::-;27225:12;:10;:12::i;:::-;27214:23;;:7;:5;:7::i;:::-;:23;;;:59;;;;27261:12;:10;:12::i;:::-;27241:32;;:16;;;;;;;;;;;:32;;;27214:59;27206:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;36547:7:::1;36529:9;:15;36539:4;36529:15;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;36429:133:::0;;:::o;32802:192::-;32855:4;2750:12;:10;:12::i;:::-;2739:23;;:7;:5;:7::i;:::-;:23;;;2731:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32887:12:::1;32872;;:27;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;32929:1;32910:16;:20;;;;32961:1;32941:17;:21;;;;32982:4;32975:11;;32802:192:::0;:::o;3428:201::-;2750:12;:10;:12::i;:::-;2739:23;;:7;:5;:7::i;:::-;:23;;;2731:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3537:1:::1;3517:22;;:8;:22;;::::0;3509:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3593:28;3612:8;3593:18;:28::i;:::-;3428:201:::0;:::o;26828:25::-;;;;;;;;;;;;;:::o;26474:76::-;;;;;;;;;;;;;:::o;26726:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;1234:98::-;1287:7;1314:10;1307:17;;1234:98;:::o;17899:380::-;18052:1;18035:19;;:5;:19;;;18027:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18133:1;18114:21;;:7;:21;;;18106:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18217:6;18187:11;:18;18199:5;18187:18;;;;;;;;;;;;;;;:27;18206:7;18187:27;;;;;;;;;;;;;;;:36;;;;18255:7;18239:32;;18248:5;18239:32;;;18264:6;18239:32;;;;;;:::i;:::-;;;;;;;;17899:380;;;:::o;28133:2867::-;28283:1;28267:18;;:4;:18;;;28259:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28360:1;28346:16;;:2;:16;;;28338:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;28420:9;:15;28430:4;28420:15;;;;;;;;;;;;;;;;;;;;;;;;;28419:16;:34;;;;;28440:9;:13;28450:2;28440:13;;;;;;;;;;;;;;;;;;;;;;;;;28439:14;28419:34;28415:412;;;28481:13;;;;;;;;;;;28475:19;;:2;:19;;;28471:345;;28533:11;;28523:6;:21;;28515:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;28687:15;;28669:13;28679:2;28669:9;:13::i;:::-;28660:6;:22;;;;:::i;:::-;28659:43;;28629:171;;;;;;;;;;;;:::i;:::-;;;;;;;;;28471:345;28415:412;28839:22;28864:6;28839:31;;28886:7;:13;28894:4;28886:13;;;;;;;;;;;;;;;;;;;;;;;;;28885:14;:30;;;;;28904:7;:11;28912:2;28904:11;;;;;;;;;;;;;;;;;;;;;;;;;28903:12;28885:30;28881:2060;;;28945:13;;;;;;;;;;;28937:21;;:4;:21;;;:44;;;;28968:13;;;;;;;;;;;28962:19;;:2;:19;;;28937:44;28932:1998;;;29021:11;;29011:6;:21;;29003:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;29186:1;29167:16;;:20;:67;;;;;29230:4;29213:21;;:13;;;;;;;;;;;:21;;;29167:67;:106;;;;;29260:9;:13;29270:2;29260:13;;;;;;;;;;;;;;;;;;;;;;;;;29259:14;29167:106;:152;;;;;29314:4;29298:21;;:4;:21;;;;29167:152;29141:556;;;29384:12;29368:28;;;;;;;;:::i;:::-;;:12;;;;;;;;;;;:28;;;;;;;;:::i;:::-;;;29364:108;;29444:4;29425:12;:16;29438:2;29425:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;29364:108;29496:17;29546:3;29526:16;;29517:6;:25;;;;:::i;:::-;29516:33;;;;:::i;:::-;29496:53;;29572:47;29588:4;29602;29609:9;29572:15;:47::i;:::-;29668:9;29659:6;:18;;;;:::i;:::-;29642:35;;29339:358;29141:556;29785:2;29768:19;;:13;;;;;;;;;;;:19;;;:60;;;;;29813:9;:15;29823:4;29813:15;;;;;;;;;;;;;;;;;;;;;;;;;29812:16;29768:60;:104;;;;;29867:4;29853:19;;:2;:19;;;;29768:104;:143;;;;;29898:13;;;;;;;;;;;29897:14;29768:143;29742:737;;;29976:15;29994:17;;29976:35;;30060:4;30038:26;;:12;:18;30051:4;30038:18;;;;;;;;;;;;;;;;;;;;;;;;;:26;;;30034:101;;30103:8;;30093:18;;30034:101;30175:4;30159:13;;:20;;;;;;;;;;;;;;;;;;30202:16;:14;:16::i;:::-;30257:5;30241:13;;:21;;;;;;;;;;;;;;;;;;30287:17;30328:3;30317:7;30308:6;:16;;;;:::i;:::-;30307:24;;;;:::i;:::-;30287:44;;30354:47;30370:4;30384;30391:9;30354:15;:47::i;:::-;30450:9;30441:6;:18;;;;:::i;:::-;30424:35;;29931:548;;29742:737;28932:1998;;;30631:4;30609:26;;:12;:18;30622:4;30609:18;;;;;;;;;;;;;;;;;;;;;;;;;:26;;;:70;;;;;30677:2;30660:19;;:13;;;;;;;;;;;:19;;;;30609:70;30583:332;;;30722:17;30764:3;30752:8;;30743:6;:17;;;;:::i;:::-;30742:25;;;;:::i;:::-;30722:45;;30790:47;30806:4;30820;30827:9;30790:15;:47::i;:::-;30886:9;30877:6;:18;;;;:::i;:::-;30860:35;;30699:216;30583:332;28932:1998;28881:2060;30951:41;30967:4;30973:2;30977:14;30951:15;:41::i;:::-;28246:2754;28133:2867;;;:::o;3789:191::-;3863:16;3882:6;;;;;;;;;;;3863:25;;3908:8;3899:6;;:17;;;;;;;;;;;;;;;;;;3963:8;3932:40;;3953:8;3932:40;;;;;;;;;;;;3852:128;3789:191;:::o;15118:733::-;15276:1;15258:20;;:6;:20;;;15250:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;15360:1;15339:23;;:9;:23;;;15331:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;15415:47;15436:6;15444:9;15455:6;15415:20;:47::i;:::-;15475:21;15499:9;:17;15509:6;15499:17;;;;;;;;;;;;;;;;15475:41;;15552:6;15535:13;:23;;15527:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;15673:6;15657:13;:22;15637:9;:17;15647:6;15637:17;;;;;;;;;;;;;;;:42;;;;15725:6;15701:9;:20;15711:9;15701:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;15766:9;15749:35;;15758:6;15749:35;;;15777:6;15749:35;;;;;;:::i;:::-;;;;;;;;15797:46;15817:6;15825:9;15836:6;15797:19;:46::i;:::-;15239:612;15118:733;;;:::o;31008:601::-;31086:1;31058:24;31076:4;31058:9;:24::i;:::-;:29;31054:68;31104:7;31054:68;31132:19;31177:28;31208:24;31226:4;31208:9;:24::i;:::-;31177:55;;31247:21;31271;31247:45;;31336:1;31313:20;:24;31309:282;;;31374:21;31358:37;;31414:42;31432:20;31454:1;31414:17;:42::i;:::-;31513:13;31489:21;:37;;;;:::i;:::-;31475:51;;31564:11;31545:15;;:30;;;;;;;:::i;:::-;;;;;;;;31309:282;31162:440;;31043:566;31008:601;:::o;18879:125::-;;;;:::o;19608:124::-;;;;:::o;32005:588::-;32122:21;32160:1;32146:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32122:40;;32191:4;32173;32178:1;32173:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;32217:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32207:4;32212:1;32207:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;32267:4;32252:29;;;32304:15;32335:17;32252:111;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32376:15;:66;;;32457:11;32483:14;32512:4;32539;32559:15;32376:209;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32111:482;32005: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:99::-;645:6;679:5;673:12;663:22;;593:99;;;:::o;698:169::-;782:11;816:6;811:3;804:19;856:4;851:3;847:14;832:29;;698:169;;;;:::o;873:246::-;954:1;964:113;978:6;975:1;972:13;964:113;;;1063:1;1058:3;1054:11;1048:18;1044:1;1039:3;1035:11;1028:39;1000:2;997:1;993:10;988:15;;964:113;;;1111:1;1102:6;1097:3;1093:16;1086:27;935:184;873:246;;;:::o;1125:102::-;1166:6;1217:2;1213:7;1208:2;1201:5;1197:14;1193:28;1183:38;;1125:102;;;:::o;1233:377::-;1321:3;1349:39;1382:5;1349:39;:::i;:::-;1404:71;1468:6;1463:3;1404:71;:::i;:::-;1397:78;;1484:65;1542:6;1537:3;1530:4;1523:5;1519:16;1484:65;:::i;:::-;1574:29;1596:6;1574:29;:::i;:::-;1569:3;1565:39;1558:46;;1325:285;1233:377;;;;:::o;1616:313::-;1729:4;1767:2;1756:9;1752:18;1744:26;;1816:9;1810:4;1806:20;1802:1;1791:9;1787:17;1780:47;1844:78;1917:4;1908:6;1844:78;:::i;:::-;1836:86;;1616:313;;;;:::o;2016:117::-;2125:1;2122;2115:12;2262:122;2335:24;2353:5;2335:24;:::i;:::-;2328:5;2325:35;2315:63;;2374:1;2371;2364:12;2315:63;2262:122;:::o;2390:139::-;2436:5;2474:6;2461:20;2452:29;;2490:33;2517:5;2490:33;:::i;:::-;2390:139;;;;:::o;2535:77::-;2572:7;2601:5;2590:16;;2535:77;;;:::o;2618:122::-;2691:24;2709:5;2691:24;:::i;:::-;2684:5;2681:35;2671:63;;2730:1;2727;2720:12;2671:63;2618:122;:::o;2746:139::-;2792:5;2830:6;2817:20;2808:29;;2846:33;2873:5;2846:33;:::i;:::-;2746:139;;;;:::o;2891:474::-;2959:6;2967;3016:2;3004:9;2995:7;2991:23;2987:32;2984:119;;;3022:79;;:::i;:::-;2984:119;3142:1;3167:53;3212:7;3203:6;3192:9;3188:22;3167:53;:::i;:::-;3157:63;;3113:117;3269:2;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3240:118;2891:474;;;;;:::o;3371:90::-;3405:7;3448:5;3441:13;3434:21;3423:32;;3371:90;;;:::o;3467:109::-;3548:21;3563:5;3548:21;:::i;:::-;3543:3;3536:34;3467:109;;:::o;3582:210::-;3669:4;3707:2;3696:9;3692:18;3684:26;;3720:65;3782:1;3771:9;3767:17;3758:6;3720:65;:::i;:::-;3582:210;;;;:::o;3798:329::-;3857:6;3906:2;3894:9;3885:7;3881:23;3877:32;3874:119;;;3912:79;;:::i;:::-;3874:119;4032:1;4057:53;4102:7;4093:6;4082:9;4078:22;4057:53;:::i;:::-;4047:63;;4003:117;3798:329;;;;:::o;4133:60::-;4161:3;4182:5;4175:12;;4133:60;;;:::o;4199:142::-;4249:9;4282:53;4300:34;4309:24;4327:5;4309:24;:::i;:::-;4300:34;:::i;:::-;4282:53;:::i;:::-;4269:66;;4199:142;;;:::o;4347:126::-;4397:9;4430:37;4461:5;4430:37;:::i;:::-;4417:50;;4347:126;;;:::o;4479:153::-;4556:9;4589:37;4620:5;4589:37;:::i;:::-;4576:50;;4479:153;;;:::o;4638:185::-;4752:64;4810:5;4752:64;:::i;:::-;4747:3;4740:77;4638:185;;:::o;4829:276::-;4949:4;4987:2;4976:9;4972:18;4964:26;;5000:98;5095:1;5084:9;5080:17;5071:6;5000:98;:::i;:::-;4829:276;;;;:::o;5111:118::-;5198:24;5216:5;5198:24;:::i;:::-;5193:3;5186:37;5111:118;;:::o;5235:222::-;5328:4;5366:2;5355:9;5351:18;5343:26;;5379:71;5447:1;5436:9;5432:17;5423:6;5379:71;:::i;:::-;5235:222;;;;:::o;5463:329::-;5522:6;5571:2;5559:9;5550:7;5546:23;5542:32;5539:119;;;5577:79;;:::i;:::-;5539:119;5697:1;5722:53;5767:7;5758:6;5747:9;5743:22;5722:53;:::i;:::-;5712:63;;5668:117;5463:329;;;;:::o;5798:619::-;5875:6;5883;5891;5940:2;5928:9;5919:7;5915:23;5911:32;5908:119;;;5946:79;;:::i;:::-;5908:119;6066:1;6091:53;6136:7;6127:6;6116:9;6112:22;6091:53;:::i;:::-;6081:63;;6037:117;6193:2;6219:53;6264:7;6255:6;6244:9;6240:22;6219:53;:::i;:::-;6209:63;;6164:118;6321:2;6347:53;6392:7;6383:6;6372:9;6368:22;6347:53;:::i;:::-;6337:63;;6292:118;5798:619;;;;;:::o;6423:86::-;6458:7;6498:4;6491:5;6487:16;6476:27;;6423:86;;;:::o;6515:112::-;6598:22;6614:5;6598:22;:::i;:::-;6593:3;6586:35;6515:112;;:::o;6633:214::-;6722:4;6760:2;6749:9;6745:18;6737:26;;6773:67;6837:1;6826:9;6822:17;6813:6;6773:67;:::i;:::-;6633:214;;;;:::o;6853:474::-;6921:6;6929;6978:2;6966:9;6957:7;6953:23;6949:32;6946:119;;;6984:79;;:::i;:::-;6946:119;7104:1;7129:53;7174:7;7165:6;7154:9;7150:22;7129:53;:::i;:::-;7119:63;;7075:117;7231:2;7257:53;7302:7;7293:6;7282:9;7278:22;7257:53;:::i;:::-;7247:63;;7202:118;6853:474;;;;;:::o;7333:::-;7401:6;7409;7458:2;7446:9;7437:7;7433:23;7429:32;7426:119;;;7464:79;;:::i;:::-;7426:119;7584:1;7609:53;7654:7;7645:6;7634:9;7630:22;7609:53;:::i;:::-;7599:63;;7555:117;7711:2;7737:53;7782:7;7773:6;7762:9;7758:22;7737:53;:::i;:::-;7727:63;;7682:118;7333:474;;;;;:::o;7813:116::-;7883:21;7898:5;7883:21;:::i;:::-;7876:5;7873:32;7863:60;;7919:1;7916;7909:12;7863:60;7813:116;:::o;7935:133::-;7978:5;8016:6;8003:20;7994:29;;8032:30;8056:5;8032:30;:::i;:::-;7935:133;;;;:::o;8074:468::-;8139:6;8147;8196:2;8184:9;8175:7;8171:23;8167:32;8164:119;;;8202:79;;:::i;:::-;8164:119;8322:1;8347:53;8392:7;8383:6;8372:9;8368:22;8347:53;:::i;:::-;8337:63;;8293:117;8449:2;8475:50;8517:7;8508:6;8497:9;8493:22;8475:50;:::i;:::-;8465:60;;8420:115;8074:468;;;;;:::o;8548:180::-;8596:77;8593:1;8586:88;8693:4;8690:1;8683:15;8717:4;8714:1;8707:15;8734:115;8817:1;8810:5;8807:12;8797:46;;8823:18;;:::i;:::-;8797:46;8734:115;:::o;8855:131::-;8902:7;8931:5;8920:16;;8937:43;8974:5;8937:43;:::i;:::-;8855:131;;;:::o;8992:::-;9050:9;9083:34;9111:5;9083:34;:::i;:::-;9070:47;;8992:131;;;:::o;9129:147::-;9224:45;9263:5;9224:45;:::i;:::-;9219:3;9212:58;9129:147;;:::o;9282:238::-;9383:4;9421:2;9410:9;9406:18;9398:26;;9434:79;9510:1;9499:9;9495:17;9486:6;9434:79;:::i;:::-;9282:238;;;;:::o;9526:180::-;9574:77;9571:1;9564:88;9671:4;9668:1;9661:15;9695:4;9692:1;9685:15;9712:320;9756:6;9793:1;9787:4;9783:12;9773:22;;9840:1;9834:4;9830:12;9861:18;9851:81;;9917:4;9909:6;9905:17;9895:27;;9851:81;9979:2;9971:6;9968:14;9948:18;9945:38;9942:84;;9998:18;;:::i;:::-;9942:84;9763:269;9712:320;;;:::o;10038:182::-;10178:34;10174:1;10166:6;10162:14;10155:58;10038:182;:::o;10226:366::-;10368:3;10389:67;10453:2;10448:3;10389:67;:::i;:::-;10382:74;;10465:93;10554:3;10465:93;:::i;:::-;10583:2;10578:3;10574:12;10567:19;;10226:366;;;:::o;10598:419::-;10764:4;10802:2;10791:9;10787:18;10779:26;;10851:9;10845:4;10841:20;10837:1;10826:9;10822:17;10815:47;10879:131;11005:4;10879:131;:::i;:::-;10871:139;;10598:419;;;:::o;11023:180::-;11071:77;11068:1;11061:88;11168:4;11165:1;11158:15;11192:4;11189:1;11182:15;11209:410;11249:7;11272:20;11290:1;11272:20;:::i;:::-;11267:25;;11306:20;11324:1;11306:20;:::i;:::-;11301:25;;11361:1;11358;11354:9;11383:30;11401:11;11383:30;:::i;:::-;11372:41;;11562:1;11553:7;11549:15;11546:1;11543:22;11523:1;11516:9;11496:83;11473:139;;11592:18;;:::i;:::-;11473:139;11257:362;11209:410;;;;:::o;11625:180::-;11673:77;11670:1;11663:88;11770:4;11767:1;11760:15;11794:4;11791:1;11784:15;11811:185;11851:1;11868:20;11886:1;11868:20;:::i;:::-;11863:25;;11902:20;11920:1;11902:20;:::i;:::-;11897:25;;11941:1;11931:35;;11946:18;;:::i;:::-;11931:35;11988:1;11985;11981:9;11976:14;;11811:185;;;;:::o;12002:246::-;12142:34;12138:1;12130:6;12126:14;12119:58;12211:29;12206:2;12198:6;12194:15;12187:54;12002:246;:::o;12254:366::-;12396:3;12417:67;12481:2;12476:3;12417:67;:::i;:::-;12410:74;;12493:93;12582:3;12493:93;:::i;:::-;12611:2;12606:3;12602:12;12595:19;;12254:366;;;:::o;12626:419::-;12792:4;12830:2;12819:9;12815:18;12807:26;;12879:9;12873:4;12869:20;12865:1;12854:9;12850:17;12843:47;12907:131;13033:4;12907:131;:::i;:::-;12899:139;;12626:419;;;:::o;13051:246::-;13191:34;13187:1;13179:6;13175:14;13168:58;13260:29;13255:2;13247:6;13243:15;13236:54;13051:246;:::o;13303:366::-;13445:3;13466:67;13530:2;13525:3;13466:67;:::i;:::-;13459:74;;13542:93;13631:3;13542:93;:::i;:::-;13660:2;13655:3;13651:12;13644:19;;13303:366;;;:::o;13675:419::-;13841:4;13879:2;13868:9;13864:18;13856:26;;13928:9;13922:4;13918:20;13914:1;13903:9;13899:17;13892:47;13956:131;14082:4;13956:131;:::i;:::-;13948:139;;13675:419;;;:::o;14100:233::-;14240:34;14236:1;14228:6;14224:14;14217:58;14309:16;14304:2;14296:6;14292:15;14285:41;14100:233;:::o;14339:366::-;14481:3;14502:67;14566:2;14561:3;14502:67;:::i;:::-;14495:74;;14578:93;14667:3;14578:93;:::i;:::-;14696:2;14691:3;14687:12;14680:19;;14339:366;;;:::o;14711:419::-;14877:4;14915:2;14904:9;14900:18;14892:26;;14964:9;14958:4;14954:20;14950:1;14939:9;14935:17;14928:47;14992:131;15118:4;14992:131;:::i;:::-;14984:139;;14711:419;;;:::o;15136:221::-;15276:34;15272:1;15264:6;15260:14;15253:58;15345:4;15340:2;15332:6;15328:15;15321:29;15136:221;:::o;15363:366::-;15505:3;15526:67;15590:2;15585:3;15526:67;:::i;:::-;15519:74;;15602:93;15691:3;15602:93;:::i;:::-;15720:2;15715:3;15711:12;15704:19;;15363:366;;;:::o;15735:419::-;15901:4;15939:2;15928:9;15924:18;15916:26;;15988:9;15982:4;15978:20;15974:1;15963:9;15959:17;15952:47;16016:131;16142:4;16016:131;:::i;:::-;16008:139;;15735:419;;;:::o;16160:170::-;16300:22;16296:1;16288:6;16284:14;16277:46;16160:170;:::o;16336:366::-;16478:3;16499:67;16563:2;16558:3;16499:67;:::i;:::-;16492:74;;16575:93;16664:3;16575:93;:::i;:::-;16693:2;16688:3;16684:12;16677:19;;16336:366;;;:::o;16708:419::-;16874:4;16912:2;16901:9;16897:18;16889:26;;16961:9;16955:4;16951:20;16947:1;16936:9;16932:17;16925:47;16989:131;17115:4;16989:131;:::i;:::-;16981:139;;16708:419;;;:::o;17133:244::-;17273:34;17269:1;17261:6;17257:14;17250:58;17342:27;17337:2;17329:6;17325:15;17318:52;17133:244;:::o;17383:366::-;17525:3;17546:67;17610:2;17605:3;17546:67;:::i;:::-;17539:74;;17622:93;17711:3;17622:93;:::i;:::-;17740:2;17735:3;17731:12;17724:19;;17383:366;;;:::o;17755:419::-;17921:4;17959:2;17948:9;17944:18;17936:26;;18008:9;18002:4;17998:20;17994:1;17983:9;17979:17;17972:47;18036:131;18162:4;18036:131;:::i;:::-;18028:139;;17755:419;;;:::o;18180:244::-;18320:34;18316:1;18308:6;18304:14;18297:58;18389:27;18384:2;18376:6;18372:15;18365:52;18180:244;:::o;18430:366::-;18572:3;18593:67;18657:2;18652:3;18593:67;:::i;:::-;18586:74;;18669:93;18758:3;18669:93;:::i;:::-;18787:2;18782:3;18778:12;18771:19;;18430:366;;;:::o;18802:419::-;18968:4;19006:2;18995:9;18991:18;18983:26;;19055:9;19049:4;19045:20;19041:1;19030:9;19026:17;19019:47;19083:131;19209:4;19083:131;:::i;:::-;19075:139;;18802:419;;;:::o;19227:227::-;19367:34;19363:1;19355:6;19351:14;19344:58;19436:10;19431:2;19423:6;19419:15;19412:35;19227:227;:::o;19460:366::-;19602:3;19623:67;19687:2;19682:3;19623:67;:::i;:::-;19616:74;;19699:93;19788:3;19699:93;:::i;:::-;19817:2;19812:3;19808:12;19801:19;;19460:366;;;:::o;19832:419::-;19998:4;20036:2;20025:9;20021:18;20013:26;;20085:9;20079:4;20075:20;20071:1;20060:9;20056:17;20049:47;20113:131;20239:4;20113:131;:::i;:::-;20105:139;;19832:419;;;:::o;20257:191::-;20297:3;20316:20;20334:1;20316:20;:::i;:::-;20311:25;;20350:20;20368:1;20350:20;:::i;:::-;20345:25;;20393:1;20390;20386:9;20379:16;;20414:3;20411:1;20408:10;20405:36;;;20421:18;;:::i;:::-;20405:36;20257:191;;;;:::o;20454:143::-;20511:5;20542:6;20536:13;20527:22;;20558:33;20585:5;20558:33;:::i;:::-;20454:143;;;;:::o;20603:351::-;20673:6;20722:2;20710:9;20701:7;20697:23;20693:32;20690:119;;;20728:79;;:::i;:::-;20690:119;20848:1;20873:64;20929:7;20920:6;20909:9;20905:22;20873:64;:::i;:::-;20863:74;;20819:128;20603:351;;;;:::o;20960:332::-;21081:4;21119:2;21108:9;21104:18;21096:26;;21132:71;21200:1;21189:9;21185:17;21176:6;21132:71;:::i;:::-;21213:72;21281:2;21270:9;21266:18;21257:6;21213:72;:::i;:::-;20960:332;;;;;:::o;21298:137::-;21352:5;21383:6;21377:13;21368:22;;21399:30;21423:5;21399:30;:::i;:::-;21298:137;;;;:::o;21441:345::-;21508:6;21557:2;21545:9;21536:7;21532:23;21528:32;21525:119;;;21563:79;;:::i;:::-;21525:119;21683:1;21708:61;21761:7;21752:6;21741:9;21737:22;21708:61;:::i;:::-;21698:71;;21654:125;21441:345;;;;:::o;21792:231::-;21932:34;21928:1;21920:6;21916:14;21909:58;22001:14;21996:2;21988:6;21984:15;21977:39;21792:231;:::o;22029:366::-;22171:3;22192:67;22256:2;22251:3;22192:67;:::i;:::-;22185:74;;22268:93;22357:3;22268:93;:::i;:::-;22386:2;22381:3;22377:12;22370:19;;22029:366;;;:::o;22401:419::-;22567:4;22605:2;22594:9;22590:18;22582:26;;22654:9;22648:4;22644:20;22640:1;22629:9;22625:17;22618:47;22682:131;22808:4;22682:131;:::i;:::-;22674:139;;22401:419;;;:::o;22826:180::-;22966:32;22962:1;22954:6;22950:14;22943:56;22826:180;:::o;23012:366::-;23154:3;23175:67;23239:2;23234:3;23175:67;:::i;:::-;23168:74;;23251:93;23340:3;23251:93;:::i;:::-;23369:2;23364:3;23360:12;23353:19;;23012:366;;;:::o;23384:419::-;23550:4;23588:2;23577:9;23573:18;23565:26;;23637:9;23631:4;23627:20;23623:1;23612:9;23608:17;23601:47;23665:131;23791:4;23665:131;:::i;:::-;23657:139;;23384:419;;;:::o;23809:224::-;23949:34;23945:1;23937:6;23933:14;23926:58;24018:7;24013:2;24005:6;24001:15;23994:32;23809:224;:::o;24039:366::-;24181:3;24202:67;24266:2;24261:3;24202:67;:::i;:::-;24195:74;;24278:93;24367:3;24278:93;:::i;:::-;24396:2;24391:3;24387:12;24380:19;;24039:366;;;:::o;24411:419::-;24577:4;24615:2;24604:9;24600:18;24592:26;;24664:9;24658:4;24654:20;24650:1;24639:9;24635:17;24628:47;24692:131;24818:4;24692:131;:::i;:::-;24684:139;;24411:419;;;:::o;24836:225::-;24976:34;24972:1;24964:6;24960:14;24953:58;25045:8;25040:2;25032:6;25028:15;25021:33;24836:225;:::o;25067:366::-;25209:3;25230:67;25294:2;25289:3;25230:67;:::i;:::-;25223:74;;25306:93;25395:3;25306:93;:::i;:::-;25424:2;25419:3;25415:12;25408:19;;25067:366;;;:::o;25439:419::-;25605:4;25643:2;25632:9;25628:18;25620:26;;25692:9;25686:4;25682:20;25678:1;25667:9;25663:17;25656:47;25720:131;25846:4;25720:131;:::i;:::-;25712:139;;25439:419;;;:::o;25864:147::-;25965:11;26002:3;25987:18;;25864:147;;;;:::o;26017:114::-;;:::o;26137:398::-;26296:3;26317:83;26398:1;26393:3;26317:83;:::i;:::-;26310:90;;26409:93;26498:3;26409:93;:::i;:::-;26527:1;26522:3;26518:11;26511:18;;26137:398;;;:::o;26541:379::-;26725:3;26747:147;26890:3;26747:147;:::i;:::-;26740:154;;26911:3;26904:10;;26541:379;;;:::o;26926:225::-;27066:34;27062:1;27054:6;27050:14;27043:58;27135:8;27130:2;27122:6;27118:15;27111:33;26926:225;:::o;27157:366::-;27299:3;27320:67;27384:2;27379:3;27320:67;:::i;:::-;27313:74;;27396:93;27485:3;27396:93;:::i;:::-;27514:2;27509:3;27505:12;27498:19;;27157:366;;;:::o;27529:419::-;27695:4;27733:2;27722:9;27718:18;27710:26;;27782:9;27776:4;27772:20;27768:1;27757:9;27753:17;27746:47;27810:131;27936:4;27810:131;:::i;:::-;27802:139;;27529:419;;;:::o;27954:223::-;28094:34;28090:1;28082:6;28078:14;28071:58;28163:6;28158:2;28150:6;28146:15;28139:31;27954:223;:::o;28183:366::-;28325:3;28346:67;28410:2;28405:3;28346:67;:::i;:::-;28339:74;;28422:93;28511:3;28422:93;:::i;:::-;28540:2;28535:3;28531:12;28524:19;;28183:366;;;:::o;28555:419::-;28721:4;28759:2;28748:9;28744:18;28736:26;;28808:9;28802:4;28798:20;28794:1;28783:9;28779:17;28772:47;28836:131;28962:4;28836:131;:::i;:::-;28828:139;;28555:419;;;:::o;28980:221::-;29120:34;29116:1;29108:6;29104:14;29097:58;29189:4;29184:2;29176:6;29172:15;29165:29;28980:221;:::o;29207:366::-;29349:3;29370:67;29434:2;29429:3;29370:67;:::i;:::-;29363:74;;29446:93;29535:3;29446:93;:::i;:::-;29564:2;29559:3;29555:12;29548:19;;29207:366;;;:::o;29579:419::-;29745:4;29783:2;29772:9;29768:18;29760:26;;29832:9;29826:4;29822:20;29818:1;29807:9;29803:17;29796:47;29860:131;29986:4;29860:131;:::i;:::-;29852:139;;29579:419;;;:::o;30004:224::-;30144:34;30140:1;30132:6;30128:14;30121:58;30213:7;30208:2;30200:6;30196:15;30189:32;30004:224;:::o;30234:366::-;30376:3;30397:67;30461:2;30456:3;30397:67;:::i;:::-;30390:74;;30473:93;30562:3;30473:93;:::i;:::-;30591:2;30586:3;30582:12;30575:19;;30234:366;;;:::o;30606:419::-;30772:4;30810:2;30799:9;30795:18;30787:26;;30859:9;30853:4;30849:20;30845:1;30834:9;30830:17;30823:47;30887:131;31013:4;30887:131;:::i;:::-;30879:139;;30606:419;;;:::o;31031:222::-;31171:34;31167:1;31159:6;31155:14;31148:58;31240:5;31235:2;31227:6;31223:15;31216:30;31031:222;:::o;31259:366::-;31401:3;31422:67;31486:2;31481:3;31422:67;:::i;:::-;31415:74;;31498:93;31587:3;31498:93;:::i;:::-;31616:2;31611:3;31607:12;31600:19;;31259:366;;;:::o;31631:419::-;31797:4;31835:2;31824:9;31820:18;31812:26;;31884:9;31878:4;31874:20;31870:1;31859:9;31855:17;31848:47;31912:131;32038:4;31912:131;:::i;:::-;31904:139;;31631:419;;;:::o;32056:248::-;32196:34;32192:1;32184:6;32180:14;32173:58;32265:31;32260:2;32252:6;32248:15;32241:56;32056:248;:::o;32310:366::-;32452:3;32473:67;32537:2;32532:3;32473:67;:::i;:::-;32466:74;;32549:93;32638:3;32549:93;:::i;:::-;32667:2;32662:3;32658:12;32651:19;;32310:366;;;:::o;32682:419::-;32848:4;32886:2;32875:9;32871:18;32863:26;;32935:9;32929:4;32925:20;32921:1;32910:9;32906:17;32899:47;32963:131;33089:4;32963:131;:::i;:::-;32955:139;;32682:419;;;:::o;33107:241::-;33247:34;33243:1;33235:6;33231:14;33224:58;33316:24;33311:2;33303:6;33299:15;33292:49;33107:241;:::o;33354:366::-;33496:3;33517:67;33581:2;33576:3;33517:67;:::i;:::-;33510:74;;33593:93;33682:3;33593:93;:::i;:::-;33711:2;33706:3;33702:12;33695:19;;33354:366;;;:::o;33726:419::-;33892:4;33930:2;33919:9;33915:18;33907:26;;33979:9;33973:4;33969:20;33965:1;33954:9;33950:17;33943:47;34007:131;34133:4;34007:131;:::i;:::-;33999:139;;33726:419;;;:::o;34151:244::-;34291:34;34287:1;34279:6;34275:14;34268:58;34360:27;34355:2;34347:6;34343:15;34336:52;34151:244;:::o;34401:366::-;34543:3;34564:67;34628:2;34623:3;34564:67;:::i;:::-;34557:74;;34640:93;34729:3;34640:93;:::i;:::-;34758:2;34753:3;34749:12;34742:19;;34401:366;;;:::o;34773:419::-;34939:4;34977:2;34966:9;34962:18;34954:26;;35026:9;35020:4;35016:20;35012:1;35001:9;34997:17;34990:47;35054:131;35180:4;35054:131;:::i;:::-;35046:139;;34773:419;;;:::o;35198:194::-;35238:4;35258:20;35276:1;35258:20;:::i;:::-;35253:25;;35292:20;35310:1;35292:20;:::i;:::-;35287:25;;35336:1;35333;35329:9;35321:17;;35360:1;35354:4;35351:11;35348:37;;;35365:18;;:::i;:::-;35348:37;35198:194;;;;:::o;35398:225::-;35538:34;35534:1;35526:6;35522:14;35515:58;35607:8;35602:2;35594:6;35590:15;35583:33;35398:225;:::o;35629:366::-;35771:3;35792:67;35856:2;35851:3;35792:67;:::i;:::-;35785:74;;35868:93;35957:3;35868:93;:::i;:::-;35986:2;35981:3;35977:12;35970:19;;35629:366;;;:::o;36001:419::-;36167:4;36205:2;36194:9;36190:18;36182:26;;36254:9;36248:4;36244:20;36240:1;36229:9;36225:17;36218:47;36282:131;36408:4;36282:131;:::i;:::-;36274:139;;36001:419;;;:::o;36426:180::-;36474:77;36471:1;36464:88;36571:4;36568:1;36561:15;36595:4;36592:1;36585:15;36612:180;36660:77;36657:1;36650:88;36757:4;36754:1;36747:15;36781:4;36778:1;36771:15;36798:143;36855:5;36886:6;36880:13;36871:22;;36902:33;36929:5;36902:33;:::i;:::-;36798:143;;;;:::o;36947:351::-;37017:6;37066:2;37054:9;37045:7;37041:23;37037:32;37034:119;;;37072:79;;:::i;:::-;37034:119;37192:1;37217:64;37273:7;37264:6;37253:9;37249:22;37217:64;:::i;:::-;37207:74;;37163:128;36947:351;;;;:::o;37304:114::-;37371:6;37405:5;37399:12;37389:22;;37304:114;;;:::o;37424:184::-;37523:11;37557:6;37552:3;37545:19;37597:4;37592:3;37588:14;37573:29;;37424:184;;;;:::o;37614:132::-;37681:4;37704:3;37696:11;;37734:4;37729:3;37725:14;37717:22;;37614:132;;;:::o;37752:108::-;37829:24;37847:5;37829:24;:::i;:::-;37824:3;37817:37;37752:108;;:::o;37866:179::-;37935:10;37956:46;37998:3;37990:6;37956:46;:::i;:::-;38034:4;38029:3;38025:14;38011:28;;37866:179;;;;:::o;38051:113::-;38121:4;38153;38148:3;38144:14;38136:22;;38051:113;;;:::o;38200:732::-;38319:3;38348:54;38396:5;38348:54;:::i;:::-;38418:86;38497:6;38492:3;38418:86;:::i;:::-;38411:93;;38528:56;38578:5;38528:56;:::i;:::-;38607:7;38638:1;38623:284;38648:6;38645:1;38642:13;38623:284;;;38724:6;38718:13;38751:63;38810:3;38795:13;38751:63;:::i;:::-;38744:70;;38837:60;38890:6;38837:60;:::i;:::-;38827:70;;38683:224;38670:1;38667;38663:9;38658:14;;38623:284;;;38627:14;38923:3;38916:10;;38324:608;;;38200:732;;;;:::o;38938:815::-;39193:4;39231:3;39220:9;39216:19;39208:27;;39245:71;39313:1;39302:9;39298:17;39289:6;39245:71;:::i;:::-;39326:72;39394:2;39383:9;39379:18;39370:6;39326:72;:::i;:::-;39445:9;39439:4;39435:20;39430:2;39419:9;39415:18;39408:48;39473:108;39576:4;39567:6;39473:108;:::i;:::-;39465:116;;39591:72;39659:2;39648:9;39644:18;39635:6;39591:72;:::i;:::-;39673:73;39741:3;39730:9;39726:19;39717:6;39673:73;:::i;:::-;38938:815;;;;;;;;:::o

Swarm Source

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