ETH Price: $3,210.70 (+1.64%)

Token

NitroShiba (NISHIB)

Overview

Max Total Supply

1,000,000,000 NISHIB

Holders

3,311 (0.00%)

Total Transfers

-

Market

Price

$0.00 @ 0.000000 ETH

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

NitroShiba is a community-owned, fair launch token on Arbitrum.

Contract Source Code Verified (Exact Match)

Contract Name:
NitroShiba

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 Arbiscan.io on 2023-12-22
*/

// File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol

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/IUniswapV2Router02.sol

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/IUniswapV2Factory.sol

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: @openzeppelin/[email protected]/utils/Context.sol


// OpenZeppelin Contracts (last updated v4.9.4) (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;
    }

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}

// File: @openzeppelin/[email protected]/access/Ownable.sol


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

pragma solidity ^0.8.0;


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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

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

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

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

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

// File: @openzeppelin/[email protected]/token/ERC20/IERC20.sol


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

pragma solidity ^0.8.0;

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

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

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

// File: @openzeppelin/[email protected]/token/ERC20/extensions/IERC20Metadata.sol


// 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/[email protected]/token/ERC20/ERC20.sol


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

pragma solidity ^0.8.0;




/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

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

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

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

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

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

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

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

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

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

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

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

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

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

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

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

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

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

// File: contracts/NitroShiba.sol



pragma solidity ^0.8.0;





contract NitroShiba is ERC20, Ownable {
    IUniswapV2Router02 public router;
    address public pairAddress;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    address public marketingWallet;
    address public devWallet;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyDevFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellDevFee;

    uint256 public tokensForMarketing;
    uint256 public tokensForDev;

    address public pairedTokenAddress;

    /******************/

    // exlcude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event marketingWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event devWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor(
        address _marketingAddress,
        address _devWallet,
        address _pairedTokenAddress
    ) ERC20("NitroShiba", "NISHIB") {
        uint256 _buyMarketingFee = 200;
        uint256 _buyDevFee = 200;
        uint256 _sellMarketingFee = 200;
        uint256 _sellDevFee = 200;
        uint256 totalSupply = 1_000_000_000 * 1e18;
        maxTransactionAmount = 10 * totalSupply / 1000; // 1% from total supply maxTransactionAmountTxn
        maxWallet = 10 * totalSupply / 1000; // 1% from total supply maxWallet
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet
        buyMarketingFee = _buyMarketingFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyDevFee;
        sellMarketingFee = _sellMarketingFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellDevFee;
        marketingWallet = _marketingAddress; // set as marketing wallet
        devWallet = _devWallet; // set as dev wallet
        pairedTokenAddress = _pairedTokenAddress;
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function setupPool(address _routerAddress) public onlyOwner {
        router = IUniswapV2Router02(_routerAddress);
        IUniswapV2Factory factory = IUniswapV2Factory(router.factory());
        pairAddress = factory.getPair(address(this), pairedTokenAddress);
        if (pairAddress == address(0)) {
            pairAddress = factory.createPair(
                address(this),
                pairedTokenAddress
            );
        }
        
        excludeFromMaxTransaction(address(router), true);
        excludeFromMaxTransaction(address(pairAddress), true);
        _setAutomatedMarketMakerPair(address(pairAddress), true);
    }

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(
        uint256 newAmount
    ) external onlyOwner returns (bool) {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTransactionAmount lower than 0.1%"
        );
        maxTransactionAmount = newNum * (10 ** 18);
    }

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

    function excludeFromMaxTransaction(
        address updAds,
        bool isEx
    ) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyDevFee;
        require(buyTotalFees <= 1000, "Must keep fees at 10% or less");
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellDevFee;
        require(sellTotalFees <= 1000, "Must keep fees at 10% or less");
    }

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

    function setAutomatedMarketMakerPair(
        address pair,
        bool value
    ) public onlyOwner {
        require(
            pair != pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateMarketingWallet(
        address newMarketingWallet
    ) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }

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

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Sell transfer amount exceeds the maxTransactionAmount."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = (amount * sellTotalFees) / 10000;
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = (amount * buyTotalFees) / 10000;
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
            }

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

            amount -= fees;
        }

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

    function swapTokensForPaired(uint256 tokenAmount, address to) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = pairedTokenAddress;

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

        // make the swap
        router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of token
            path,
            to,
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForMarketing + tokensForDev;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 20) {
            contractBalance = swapTokensAtAmount * 20;
        }

        uint256 pairedForMarketing = (contractBalance * tokensForMarketing) /
            totalTokensToSwap;
        uint256 pairedForDev = contractBalance - pairedForMarketing;

        swapTokensForPaired(pairedForMarketing, marketingWallet);
        swapTokensForPaired(pairedForDev, devWallet);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"},{"internalType":"address","name":"_devWallet","type":"address"},{"internalType":"address","name":"_pairedTokenAddress","type":"address"}],"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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","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":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pairAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pairedTokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_routerAddress","type":"address"}],"name":"setupPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526001600d60006101000a81548160ff0219169083151502179055506000600d60016101000a81548160ff0219169083151502179055506000600d60026101000a81548160ff0219169083151502179055503480156200006257600080fd5b5060405162004ff638038062004ff6833981810160405281019062000088919062000822565b6040518060400160405280600a81526020017f4e6974726f5368696261000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f4e49534849420000000000000000000000000000000000000000000000000000815250816003908162000105919062000af8565b50806004908162000117919062000af8565b5050506200013a6200012e6200039260201b60201c565b6200039a60201b60201c565b600060c89050600060c89050600060c89050600060c8905060006b033b2e3c9fd0803ce800000090506103e881600a62000175919062000c0e565b62000181919062000c88565b600a819055506103e881600a62000199919062000c0e565b620001a5919062000c88565b600c81905550612710600582620001bd919062000c0e565b620001c9919062000c88565b600b8190555084600f8190555083601081905550601054600f54620001ef919062000cc0565b600e81905550826012819055508160138190555060135460125462000215919062000cc0565b60118190555087600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000300620002f26200046060201b60201c565b60016200048a60201b60201c565b620003133060016200048a60201b60201c565b6200032861dead60016200048a60201b60201c565b6200034a6200033c6200046060201b60201c565b60016200054560201b60201c565b6200035d3060016200054560201b60201c565b6200037261dead60016200054560201b60201c565b620003843382620005b060201b60201c565b505050505050505062000e58565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200049a6200071d60201b60201c565b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000539919062000d18565b60405180910390a25050565b620005556200071d60201b60201c565b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000622576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006199062000d96565b60405180910390fd5b6200063660008383620007ae60201b60201c565b80600260008282546200064a919062000cc0565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620006fd919062000dc9565b60405180910390a36200071960008383620007b360201b60201c565b5050565b6200072d6200039260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620007536200046060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620007ac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007a39062000e36565b60405180910390fd5b565b505050565b505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620007ea82620007bd565b9050919050565b620007fc81620007dd565b81146200080857600080fd5b50565b6000815190506200081c81620007f1565b92915050565b6000806000606084860312156200083e576200083d620007b8565b5b60006200084e868287016200080b565b935050602062000861868287016200080b565b925050604062000874868287016200080b565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200090057607f821691505b602082108103620009165762000915620008b8565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620009807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000941565b6200098c868362000941565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620009d9620009d3620009cd84620009a4565b620009ae565b620009a4565b9050919050565b6000819050919050565b620009f583620009b8565b62000a0d62000a0482620009e0565b8484546200094e565b825550505050565b600090565b62000a2462000a15565b62000a31818484620009ea565b505050565b5b8181101562000a595762000a4d60008262000a1a565b60018101905062000a37565b5050565b601f82111562000aa85762000a72816200091c565b62000a7d8462000931565b8101602085101562000a8d578190505b62000aa562000a9c8562000931565b83018262000a36565b50505b505050565b600082821c905092915050565b600062000acd6000198460080262000aad565b1980831691505092915050565b600062000ae8838362000aba565b9150826002028217905092915050565b62000b03826200087e565b67ffffffffffffffff81111562000b1f5762000b1e62000889565b5b62000b2b8254620008e7565b62000b3882828562000a5d565b600060209050601f83116001811462000b70576000841562000b5b578287015190505b62000b67858262000ada565b86555062000bd7565b601f19841662000b80866200091c565b60005b8281101562000baa5784890151825560018201915060208501945060208101905062000b83565b8683101562000bca578489015162000bc6601f89168262000aba565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000c1b82620009a4565b915062000c2883620009a4565b925082820262000c3881620009a4565b9150828204841483151762000c525762000c5162000bdf565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000c9582620009a4565b915062000ca283620009a4565b92508262000cb55762000cb462000c59565b5b828204905092915050565b600062000ccd82620009a4565b915062000cda83620009a4565b925082820190508082111562000cf55762000cf462000bdf565b5b92915050565b60008115159050919050565b62000d128162000cfb565b82525050565b600060208201905062000d2f600083018462000d07565b92915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000d7e601f8362000d35565b915062000d8b8262000d46565b602082019050919050565b6000602082019050818103600083015262000db18162000d6f565b9050919050565b62000dc381620009a4565b82525050565b600060208201905062000de0600083018462000db8565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000e1e60208362000d35565b915062000e2b8262000de6565b602082019050919050565b6000602082019050818103600083015262000e518162000e0f565b9050919050565b61418e8062000e686000396000f3fe6080604052600436106102e85760003560e01c80638a8c523c11610190578063aacebbe3116100dc578063d257b34f11610095578063e2f456051161006f578063e2f4560514610b61578063f2fde38b14610b8c578063f887ea4014610bb5578063f8b45b0514610be0576102ef565b8063d257b34f14610abc578063d85ba06314610af9578063dd62ed3e14610b24576102ef565b8063aacebbe3146109ae578063b62496f5146109d7578063bbc0c74214610a14578063c024666814610a3f578063c18bc19514610a68578063c8c8ebe414610a91576102ef565b80639a7a23d611610149578063a0d82dc511610123578063a0d82dc5146108de578063a457c2d714610909578063a8b0898214610946578063a9059cbb14610971576102ef565b80639a7a23d61461085f5780639c3b4fdc146108885780639fccce32146108b3576102ef565b80638a8c523c146107735780638da5cb5b1461078a5780638ea5220f146107b557806392136913146107e0578063924de9b71461080b57806395d89b4114610834576102ef565b80634a62bb651161024f5780636ddd171311610208578063751039fc116101e2578063751039fc146106c95780637571336a146106f457806375f0a8741461071d5780637bce5a0414610748576102ef565b80636ddd17131461064a57806370a0823114610675578063715018a6146106b2576102ef565b80634a62bb651461053a5780634fbee19314610565578063531aeb66146105a257806366ca9b83146105cb5780636927810d146105f45780636a486a8e1461061f576102ef565b80631f3fed8f116102a15780631f3fed8f14610416578063203e727e1461044157806323b872dd1461046a57806327c8f835146104a7578063313ce567146104d257806339509351146104fd576102ef565b806302dbd8f8146102f457806306fdde031461031d578063095ea7b31461034857806310d5de531461038557806318160ddd146103c25780631816467f146103ed576102ef565b366102ef57005b600080fd5b34801561030057600080fd5b5061031b60048036038101906103169190612f3a565b610c0b565b005b34801561032957600080fd5b50610332610c82565b60405161033f919061300a565b60405180910390f35b34801561035457600080fd5b5061036f600480360381019061036a919061308a565b610d14565b60405161037c91906130e5565b60405180910390f35b34801561039157600080fd5b506103ac60048036038101906103a79190613100565b610d37565b6040516103b991906130e5565b60405180910390f35b3480156103ce57600080fd5b506103d7610d57565b6040516103e4919061313c565b60405180910390f35b3480156103f957600080fd5b50610414600480360381019061040f9190613100565b610d61565b005b34801561042257600080fd5b5061042b610e29565b604051610438919061313c565b60405180910390f35b34801561044d57600080fd5b5061046860048036038101906104639190613157565b610e2f565b005b34801561047657600080fd5b50610491600480360381019061048c9190613184565b610eca565b60405161049e91906130e5565b60405180910390f35b3480156104b357600080fd5b506104bc610ef9565b6040516104c991906131e6565b60405180910390f35b3480156104de57600080fd5b506104e7610eff565b6040516104f4919061321d565b60405180910390f35b34801561050957600080fd5b50610524600480360381019061051f919061308a565b610f08565b60405161053191906130e5565b60405180910390f35b34801561054657600080fd5b5061054f610f3f565b60405161055c91906130e5565b60405180910390f35b34801561057157600080fd5b5061058c60048036038101906105879190613100565b610f52565b60405161059991906130e5565b60405180910390f35b3480156105ae57600080fd5b506105c960048036038101906105c49190613100565b610fa8565b005b3480156105d757600080fd5b506105f260048036038101906105ed9190612f3a565b611326565b005b34801561060057600080fd5b5061060961139d565b60405161061691906131e6565b60405180910390f35b34801561062b57600080fd5b506106346113c3565b604051610641919061313c565b60405180910390f35b34801561065657600080fd5b5061065f6113c9565b60405161066c91906130e5565b60405180910390f35b34801561068157600080fd5b5061069c60048036038101906106979190613100565b6113dc565b6040516106a9919061313c565b60405180910390f35b3480156106be57600080fd5b506106c7611424565b005b3480156106d557600080fd5b506106de611438565b6040516106eb91906130e5565b60405180910390f35b34801561070057600080fd5b5061071b60048036038101906107169190613264565b611464565b005b34801561072957600080fd5b506107326114c7565b60405161073f91906131e6565b60405180910390f35b34801561075457600080fd5b5061075d6114ed565b60405161076a919061313c565b60405180910390f35b34801561077f57600080fd5b506107886114f3565b005b34801561079657600080fd5b5061079f611533565b6040516107ac91906131e6565b60405180910390f35b3480156107c157600080fd5b506107ca61155d565b6040516107d791906131e6565b60405180910390f35b3480156107ec57600080fd5b506107f5611583565b604051610802919061313c565b60405180910390f35b34801561081757600080fd5b50610832600480360381019061082d91906132a4565b611589565b005b34801561084057600080fd5b506108496115ae565b604051610856919061300a565b60405180910390f35b34801561086b57600080fd5b5061088660048036038101906108819190613264565b611640565b005b34801561089457600080fd5b5061089d6116c4565b6040516108aa919061313c565b60405180910390f35b3480156108bf57600080fd5b506108c86116ca565b6040516108d5919061313c565b60405180910390f35b3480156108ea57600080fd5b506108f36116d0565b604051610900919061313c565b60405180910390f35b34801561091557600080fd5b50610930600480360381019061092b919061308a565b6116d6565b60405161093d91906130e5565b60405180910390f35b34801561095257600080fd5b5061095b61174d565b60405161096891906131e6565b60405180910390f35b34801561097d57600080fd5b506109986004803603810190610993919061308a565b611773565b6040516109a591906130e5565b60405180910390f35b3480156109ba57600080fd5b506109d560048036038101906109d09190613100565b611796565b005b3480156109e357600080fd5b506109fe60048036038101906109f99190613100565b61185e565b604051610a0b91906130e5565b60405180910390f35b348015610a2057600080fd5b50610a2961187e565b604051610a3691906130e5565b60405180910390f35b348015610a4b57600080fd5b50610a666004803603810190610a619190613264565b611891565b005b348015610a7457600080fd5b50610a8f6004803603810190610a8a9190613157565b611942565b005b348015610a9d57600080fd5b50610aa66119dd565b604051610ab3919061313c565b60405180910390f35b348015610ac857600080fd5b50610ae36004803603810190610ade9190613157565b6119e3565b604051610af091906130e5565b60405180910390f35b348015610b0557600080fd5b50610b0e611ac4565b604051610b1b919061313c565b60405180910390f35b348015610b3057600080fd5b50610b4b6004803603810190610b4691906132d1565b611aca565b604051610b58919061313c565b60405180910390f35b348015610b6d57600080fd5b50610b76611b51565b604051610b83919061313c565b60405180910390f35b348015610b9857600080fd5b50610bb36004803603810190610bae9190613100565b611b57565b005b348015610bc157600080fd5b50610bca611bda565b604051610bd79190613370565b60405180910390f35b348015610bec57600080fd5b50610bf5611c00565b604051610c02919061313c565b60405180910390f35b610c13611c06565b8160128190555080601381905550601354601254610c3191906133ba565b6011819055506103e86011541115610c7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c759061343a565b60405180910390fd5b5050565b606060038054610c9190613489565b80601f0160208091040260200160405190810160405280929190818152602001828054610cbd90613489565b8015610d0a5780601f10610cdf57610100808354040283529160200191610d0a565b820191906000526020600020905b815481529060010190602001808311610ced57829003601f168201915b5050505050905090565b600080610d1f611c84565b9050610d2c818585611c8c565b600191505092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b6000600254905090565b610d69611c06565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60145481565b610e37611c06565b670de0b6b3a76400006103e86001610e4d610d57565b610e5791906134ba565b610e61919061352b565b610e6b919061352b565b811015610ead576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea4906135ce565b60405180910390fd5b670de0b6b3a764000081610ec191906134ba565b600a8190555050565b600080610ed5611c84565b9050610ee2858285611e55565b610eed858585611ee1565b60019150509392505050565b61dead81565b60006012905090565b600080610f13611c84565b9050610f34818585610f258589611aca565b610f2f91906133ba565b611c8c565b600191505092915050565b600d60009054906101000a900460ff1681565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610fb0611c06565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611060573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110849190613603565b90508073ffffffffffffffffffffffffffffffffffffffff1663e6a4390530601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016110e3929190613630565b602060405180830381865afa158015611100573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111249190613603565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361129b578073ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401611217929190613630565b6020604051808303816000875af1158015611236573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125a9190613603565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b6112c8600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611464565b6112f5600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611464565b611322600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001612852565b5050565b61132e611c06565b81600f8190555080601081905550601054600f5461134c91906133ba565b600e819055506103e8600e541115611399576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113909061343a565b60405180910390fd5b5050565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b600d60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61142c611c06565b61143660006128f3565b565b6000611442611c06565b6000600d60006101000a81548160ff0219169083151502179055506001905090565b61146c611c06565b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b6114fb611c06565b6001600d60016101000a81548160ff0219169083151502179055506001600d60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60125481565b611591611c06565b80600d60026101000a81548160ff02191690831515021790555050565b6060600480546115bd90613489565b80601f01602080910402602001604051908101604052809291908181526020018280546115e990613489565b80156116365780601f1061160b57610100808354040283529160200191611636565b820191906000526020600020905b81548152906001019060200180831161161957829003601f168201915b5050505050905090565b611648611c06565b8173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ad906136cb565b60405180910390fd5b6116c08282612852565b5050565b60105481565b60155481565b60135481565b6000806116e1611c84565b905060006116ef8286611aca565b905083811015611734576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172b9061375d565b60405180910390fd5b6117418286868403611c8c565b60019250505092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008061177e611c84565b905061178b818585611ee1565b600191505092915050565b61179e611c06565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60196020528060005260406000206000915054906101000a900460ff1681565b600d60019054906101000a900460ff1681565b611899611c06565b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161193691906130e5565b60405180910390a25050565b61194a611c06565b670de0b6b3a76400006103e86005611960610d57565b61196a91906134ba565b611974919061352b565b61197e919061352b565b8110156119c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b7906137ef565b60405180910390fd5b670de0b6b3a7640000816119d491906134ba565b600c8190555050565b600a5481565b60006119ed611c06565b620186a060016119fb610d57565b611a0591906134ba565b611a0f919061352b565b821015611a51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4890613881565b60405180910390fd5b6103e86005611a5e610d57565b611a6891906134ba565b611a72919061352b565b821115611ab4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aab90613913565b60405180910390fd5b81600b8190555060019050919050565b600e5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b611b5f611c06565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611bce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc5906139a5565b60405180910390fd5b611bd7816128f3565b50565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b611c0e611c84565b73ffffffffffffffffffffffffffffffffffffffff16611c2c611533565b73ffffffffffffffffffffffffffffffffffffffff1614611c82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7990613a11565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611cfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf290613aa3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6190613b35565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e48919061313c565b60405180910390a3505050565b6000611e618484611aca565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611edb5781811015611ecd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec490613ba1565b60405180910390fd5b611eda8484848403611c8c565b5b50505050565b60008103611efa57611ef5838360006129b9565b61284d565b600d60009054906101000a900460ff16156123f557611f17611533565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611f855750611f55611533565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611fbe5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611ff8575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120115750600760149054906101000a900460ff16155b156123f457600d60019054906101000a900460ff1661210b57601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806120cb5750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61210a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210190613c0d565b60405180910390fd5b5b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156121ae5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561225557600a548111156121f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ef90613c9f565b60405180910390fd5b600c54612204836113dc565b8261220f91906133ba565b1115612250576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224790613d0b565b60405180910390fd5b6123f3565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156122f85750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561234757600a54811115612342576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233990613d9d565b60405180910390fd5b6123f2565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166123f157600c546123a4836113dc565b826123af91906133ba565b11156123f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e790613d0b565b60405180910390fd5b5b5b5b5b5b6000612400306113dc565b90506000600b5482101590508080156124255750600d60029054906101000a900460ff165b801561243e5750600760149054906101000a900460ff16155b80156124945750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156124ea5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156125405750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612584576001600760146101000a81548160ff021916908315150217905550612568612c2f565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061263a5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561264457600090505b6000811561283d57601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126a757506000601154115b1561273457612710601154866126bd91906134ba565b6126c7919061352b565b9050601154601354826126da91906134ba565b6126e4919061352b565b601560008282546126f591906133ba565b925050819055506011546012548261270d91906134ba565b612717919061352b565b6014600082825461272891906133ba565b92505081905550612819565b601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561278f57506000600e54115b1561281857612710600e54866127a591906134ba565b6127af919061352b565b9050600e54601054826127c291906134ba565b6127cc919061352b565b601560008282546127dd91906133ba565b92505081905550600e54600f54826127f591906134ba565b6127ff919061352b565b6014600082825461281091906133ba565b925050819055505b5b600081111561282e5761282d8730836129b9565b5b808561283a9190613dbd565b94505b6128488787876129b9565b505050505b505050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1f90613e63565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8e90613ef5565b60405180910390fd5b612aa2838383612d1f565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612b28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1f90613f87565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612c16919061313c565b60405180910390a3612c29848484612d24565b50505050565b6000612c3a306113dc565b90506000601554601454612c4e91906133ba565b90506000821480612c5f5750600081145b15612c6b575050612d1d565b6014600b54612c7a91906134ba565b821115612c93576014600b54612c9091906134ba565b91505b60008160145484612ca491906134ba565b612cae919061352b565b905060008184612cbe9190613dbd565b9050612cec82600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612d29565b612d1881600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612d29565b505050505b565b505050565b505050565b6000600267ffffffffffffffff811115612d4657612d45613fa7565b5b604051908082528060200260200182016040528015612d745781602001602082028036833780820191505090505b5090503081600081518110612d8c57612d8b613fd6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110612dfd57612dfc613fd6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612e6430600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685611c8c565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d7958460008486426040518663ffffffff1660e01b8152600401612ec89594939291906140fe565b600060405180830381600087803b158015612ee257600080fd5b505af1158015612ef6573d6000803e3d6000fd5b50505050505050565b600080fd5b6000819050919050565b612f1781612f04565b8114612f2257600080fd5b50565b600081359050612f3481612f0e565b92915050565b60008060408385031215612f5157612f50612eff565b5b6000612f5f85828601612f25565b9250506020612f7085828601612f25565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612fb4578082015181840152602081019050612f99565b60008484015250505050565b6000601f19601f8301169050919050565b6000612fdc82612f7a565b612fe68185612f85565b9350612ff6818560208601612f96565b612fff81612fc0565b840191505092915050565b600060208201905081810360008301526130248184612fd1565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006130578261302c565b9050919050565b6130678161304c565b811461307257600080fd5b50565b6000813590506130848161305e565b92915050565b600080604083850312156130a1576130a0612eff565b5b60006130af85828601613075565b92505060206130c085828601612f25565b9150509250929050565b60008115159050919050565b6130df816130ca565b82525050565b60006020820190506130fa60008301846130d6565b92915050565b60006020828403121561311657613115612eff565b5b600061312484828501613075565b91505092915050565b61313681612f04565b82525050565b6000602082019050613151600083018461312d565b92915050565b60006020828403121561316d5761316c612eff565b5b600061317b84828501612f25565b91505092915050565b60008060006060848603121561319d5761319c612eff565b5b60006131ab86828701613075565b93505060206131bc86828701613075565b92505060406131cd86828701612f25565b9150509250925092565b6131e08161304c565b82525050565b60006020820190506131fb60008301846131d7565b92915050565b600060ff82169050919050565b61321781613201565b82525050565b6000602082019050613232600083018461320e565b92915050565b613241816130ca565b811461324c57600080fd5b50565b60008135905061325e81613238565b92915050565b6000806040838503121561327b5761327a612eff565b5b600061328985828601613075565b925050602061329a8582860161324f565b9150509250929050565b6000602082840312156132ba576132b9612eff565b5b60006132c88482850161324f565b91505092915050565b600080604083850312156132e8576132e7612eff565b5b60006132f685828601613075565b925050602061330785828601613075565b9150509250929050565b6000819050919050565b600061333661333161332c8461302c565b613311565b61302c565b9050919050565b60006133488261331b565b9050919050565b600061335a8261333d565b9050919050565b61336a8161334f565b82525050565b60006020820190506133856000830184613361565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006133c582612f04565b91506133d083612f04565b92508282019050808211156133e8576133e761338b565b5b92915050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b6000613424601d83612f85565b915061342f826133ee565b602082019050919050565b6000602082019050818103600083015261345381613417565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806134a157607f821691505b6020821081036134b4576134b361345a565b5b50919050565b60006134c582612f04565b91506134d083612f04565b92508282026134de81612f04565b915082820484148315176134f5576134f461338b565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061353682612f04565b915061354183612f04565b925082613551576135506134fc565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006135b8602f83612f85565b91506135c38261355c565b604082019050919050565b600060208201905081810360008301526135e7816135ab565b9050919050565b6000815190506135fd8161305e565b92915050565b60006020828403121561361957613618612eff565b5b6000613627848285016135ee565b91505092915050565b600060408201905061364560008301856131d7565b61365260208301846131d7565b9392505050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006136b5603983612f85565b91506136c082613659565b604082019050919050565b600060208201905081810360008301526136e4816136a8565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613747602583612f85565b9150613752826136eb565b604082019050919050565b600060208201905081810360008301526137768161373a565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006137d9602483612f85565b91506137e48261377d565b604082019050919050565b60006020820190508181036000830152613808816137cc565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061386b603583612f85565b91506138768261380f565b604082019050919050565b6000602082019050818103600083015261389a8161385e565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006138fd603483612f85565b9150613908826138a1565b604082019050919050565b6000602082019050818103600083015261392c816138f0565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061398f602683612f85565b915061399a82613933565b604082019050919050565b600060208201905081810360008301526139be81613982565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006139fb602083612f85565b9150613a06826139c5565b602082019050919050565b60006020820190508181036000830152613a2a816139ee565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613a8d602483612f85565b9150613a9882613a31565b604082019050919050565b60006020820190508181036000830152613abc81613a80565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613b1f602283612f85565b9150613b2a82613ac3565b604082019050919050565b60006020820190508181036000830152613b4e81613b12565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613b8b601d83612f85565b9150613b9682613b55565b602082019050919050565b60006020820190508181036000830152613bba81613b7e565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613bf7601683612f85565b9150613c0282613bc1565b602082019050919050565b60006020820190508181036000830152613c2681613bea565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000613c89603583612f85565b9150613c9482613c2d565b604082019050919050565b60006020820190508181036000830152613cb881613c7c565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000613cf5601383612f85565b9150613d0082613cbf565b602082019050919050565b60006020820190508181036000830152613d2481613ce8565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000613d87603683612f85565b9150613d9282613d2b565b604082019050919050565b60006020820190508181036000830152613db681613d7a565b9050919050565b6000613dc882612f04565b9150613dd383612f04565b9250828203905081811115613deb57613dea61338b565b5b92915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613e4d602583612f85565b9150613e5882613df1565b604082019050919050565b60006020820190508181036000830152613e7c81613e40565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613edf602383612f85565b9150613eea82613e83565b604082019050919050565b60006020820190508181036000830152613f0e81613ed2565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613f71602683612f85565b9150613f7c82613f15565b604082019050919050565b60006020820190508181036000830152613fa081613f64565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b600061402a61402561402084614005565b613311565b612f04565b9050919050565b61403a8161400f565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6140758161304c565b82525050565b6000614087838361406c565b60208301905092915050565b6000602082019050919050565b60006140ab82614040565b6140b5818561404b565b93506140c08361405c565b8060005b838110156140f15781516140d8888261407b565b97506140e383614093565b9250506001810190506140c4565b5085935050505092915050565b600060a082019050614113600083018861312d565b6141206020830187614031565b818103604083015261413281866140a0565b905061414160608301856131d7565b61414e608083018461312d565b969550505050505056fea264697066735822122060185ef5fbc05498f6adfb1fa9a2bb7d0ccafd6b1a5be4f312e3a3e89d80e8a464736f6c634300081200330000000000000000000000007251338ccaf681226e90c3100975cf41f6f8c9030000000000000000000000007b6fa491b2b9a734766a23648b8f02add266559e000000000000000000000000af88d065e77c8cc2239327c5edb3a432268e5831

Deployed Bytecode

0x6080604052600436106102e85760003560e01c80638a8c523c11610190578063aacebbe3116100dc578063d257b34f11610095578063e2f456051161006f578063e2f4560514610b61578063f2fde38b14610b8c578063f887ea4014610bb5578063f8b45b0514610be0576102ef565b8063d257b34f14610abc578063d85ba06314610af9578063dd62ed3e14610b24576102ef565b8063aacebbe3146109ae578063b62496f5146109d7578063bbc0c74214610a14578063c024666814610a3f578063c18bc19514610a68578063c8c8ebe414610a91576102ef565b80639a7a23d611610149578063a0d82dc511610123578063a0d82dc5146108de578063a457c2d714610909578063a8b0898214610946578063a9059cbb14610971576102ef565b80639a7a23d61461085f5780639c3b4fdc146108885780639fccce32146108b3576102ef565b80638a8c523c146107735780638da5cb5b1461078a5780638ea5220f146107b557806392136913146107e0578063924de9b71461080b57806395d89b4114610834576102ef565b80634a62bb651161024f5780636ddd171311610208578063751039fc116101e2578063751039fc146106c95780637571336a146106f457806375f0a8741461071d5780637bce5a0414610748576102ef565b80636ddd17131461064a57806370a0823114610675578063715018a6146106b2576102ef565b80634a62bb651461053a5780634fbee19314610565578063531aeb66146105a257806366ca9b83146105cb5780636927810d146105f45780636a486a8e1461061f576102ef565b80631f3fed8f116102a15780631f3fed8f14610416578063203e727e1461044157806323b872dd1461046a57806327c8f835146104a7578063313ce567146104d257806339509351146104fd576102ef565b806302dbd8f8146102f457806306fdde031461031d578063095ea7b31461034857806310d5de531461038557806318160ddd146103c25780631816467f146103ed576102ef565b366102ef57005b600080fd5b34801561030057600080fd5b5061031b60048036038101906103169190612f3a565b610c0b565b005b34801561032957600080fd5b50610332610c82565b60405161033f919061300a565b60405180910390f35b34801561035457600080fd5b5061036f600480360381019061036a919061308a565b610d14565b60405161037c91906130e5565b60405180910390f35b34801561039157600080fd5b506103ac60048036038101906103a79190613100565b610d37565b6040516103b991906130e5565b60405180910390f35b3480156103ce57600080fd5b506103d7610d57565b6040516103e4919061313c565b60405180910390f35b3480156103f957600080fd5b50610414600480360381019061040f9190613100565b610d61565b005b34801561042257600080fd5b5061042b610e29565b604051610438919061313c565b60405180910390f35b34801561044d57600080fd5b5061046860048036038101906104639190613157565b610e2f565b005b34801561047657600080fd5b50610491600480360381019061048c9190613184565b610eca565b60405161049e91906130e5565b60405180910390f35b3480156104b357600080fd5b506104bc610ef9565b6040516104c991906131e6565b60405180910390f35b3480156104de57600080fd5b506104e7610eff565b6040516104f4919061321d565b60405180910390f35b34801561050957600080fd5b50610524600480360381019061051f919061308a565b610f08565b60405161053191906130e5565b60405180910390f35b34801561054657600080fd5b5061054f610f3f565b60405161055c91906130e5565b60405180910390f35b34801561057157600080fd5b5061058c60048036038101906105879190613100565b610f52565b60405161059991906130e5565b60405180910390f35b3480156105ae57600080fd5b506105c960048036038101906105c49190613100565b610fa8565b005b3480156105d757600080fd5b506105f260048036038101906105ed9190612f3a565b611326565b005b34801561060057600080fd5b5061060961139d565b60405161061691906131e6565b60405180910390f35b34801561062b57600080fd5b506106346113c3565b604051610641919061313c565b60405180910390f35b34801561065657600080fd5b5061065f6113c9565b60405161066c91906130e5565b60405180910390f35b34801561068157600080fd5b5061069c60048036038101906106979190613100565b6113dc565b6040516106a9919061313c565b60405180910390f35b3480156106be57600080fd5b506106c7611424565b005b3480156106d557600080fd5b506106de611438565b6040516106eb91906130e5565b60405180910390f35b34801561070057600080fd5b5061071b60048036038101906107169190613264565b611464565b005b34801561072957600080fd5b506107326114c7565b60405161073f91906131e6565b60405180910390f35b34801561075457600080fd5b5061075d6114ed565b60405161076a919061313c565b60405180910390f35b34801561077f57600080fd5b506107886114f3565b005b34801561079657600080fd5b5061079f611533565b6040516107ac91906131e6565b60405180910390f35b3480156107c157600080fd5b506107ca61155d565b6040516107d791906131e6565b60405180910390f35b3480156107ec57600080fd5b506107f5611583565b604051610802919061313c565b60405180910390f35b34801561081757600080fd5b50610832600480360381019061082d91906132a4565b611589565b005b34801561084057600080fd5b506108496115ae565b604051610856919061300a565b60405180910390f35b34801561086b57600080fd5b5061088660048036038101906108819190613264565b611640565b005b34801561089457600080fd5b5061089d6116c4565b6040516108aa919061313c565b60405180910390f35b3480156108bf57600080fd5b506108c86116ca565b6040516108d5919061313c565b60405180910390f35b3480156108ea57600080fd5b506108f36116d0565b604051610900919061313c565b60405180910390f35b34801561091557600080fd5b50610930600480360381019061092b919061308a565b6116d6565b60405161093d91906130e5565b60405180910390f35b34801561095257600080fd5b5061095b61174d565b60405161096891906131e6565b60405180910390f35b34801561097d57600080fd5b506109986004803603810190610993919061308a565b611773565b6040516109a591906130e5565b60405180910390f35b3480156109ba57600080fd5b506109d560048036038101906109d09190613100565b611796565b005b3480156109e357600080fd5b506109fe60048036038101906109f99190613100565b61185e565b604051610a0b91906130e5565b60405180910390f35b348015610a2057600080fd5b50610a2961187e565b604051610a3691906130e5565b60405180910390f35b348015610a4b57600080fd5b50610a666004803603810190610a619190613264565b611891565b005b348015610a7457600080fd5b50610a8f6004803603810190610a8a9190613157565b611942565b005b348015610a9d57600080fd5b50610aa66119dd565b604051610ab3919061313c565b60405180910390f35b348015610ac857600080fd5b50610ae36004803603810190610ade9190613157565b6119e3565b604051610af091906130e5565b60405180910390f35b348015610b0557600080fd5b50610b0e611ac4565b604051610b1b919061313c565b60405180910390f35b348015610b3057600080fd5b50610b4b6004803603810190610b4691906132d1565b611aca565b604051610b58919061313c565b60405180910390f35b348015610b6d57600080fd5b50610b76611b51565b604051610b83919061313c565b60405180910390f35b348015610b9857600080fd5b50610bb36004803603810190610bae9190613100565b611b57565b005b348015610bc157600080fd5b50610bca611bda565b604051610bd79190613370565b60405180910390f35b348015610bec57600080fd5b50610bf5611c00565b604051610c02919061313c565b60405180910390f35b610c13611c06565b8160128190555080601381905550601354601254610c3191906133ba565b6011819055506103e86011541115610c7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c759061343a565b60405180910390fd5b5050565b606060038054610c9190613489565b80601f0160208091040260200160405190810160405280929190818152602001828054610cbd90613489565b8015610d0a5780601f10610cdf57610100808354040283529160200191610d0a565b820191906000526020600020905b815481529060010190602001808311610ced57829003601f168201915b5050505050905090565b600080610d1f611c84565b9050610d2c818585611c8c565b600191505092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b6000600254905090565b610d69611c06565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60145481565b610e37611c06565b670de0b6b3a76400006103e86001610e4d610d57565b610e5791906134ba565b610e61919061352b565b610e6b919061352b565b811015610ead576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea4906135ce565b60405180910390fd5b670de0b6b3a764000081610ec191906134ba565b600a8190555050565b600080610ed5611c84565b9050610ee2858285611e55565b610eed858585611ee1565b60019150509392505050565b61dead81565b60006012905090565b600080610f13611c84565b9050610f34818585610f258589611aca565b610f2f91906133ba565b611c8c565b600191505092915050565b600d60009054906101000a900460ff1681565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610fb0611c06565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611060573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110849190613603565b90508073ffffffffffffffffffffffffffffffffffffffff1663e6a4390530601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016110e3929190613630565b602060405180830381865afa158015611100573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111249190613603565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361129b578073ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401611217929190613630565b6020604051808303816000875af1158015611236573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125a9190613603565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b6112c8600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611464565b6112f5600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611464565b611322600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001612852565b5050565b61132e611c06565b81600f8190555080601081905550601054600f5461134c91906133ba565b600e819055506103e8600e541115611399576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113909061343a565b60405180910390fd5b5050565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b600d60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61142c611c06565b61143660006128f3565b565b6000611442611c06565b6000600d60006101000a81548160ff0219169083151502179055506001905090565b61146c611c06565b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b6114fb611c06565b6001600d60016101000a81548160ff0219169083151502179055506001600d60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60125481565b611591611c06565b80600d60026101000a81548160ff02191690831515021790555050565b6060600480546115bd90613489565b80601f01602080910402602001604051908101604052809291908181526020018280546115e990613489565b80156116365780601f1061160b57610100808354040283529160200191611636565b820191906000526020600020905b81548152906001019060200180831161161957829003601f168201915b5050505050905090565b611648611c06565b8173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ad906136cb565b60405180910390fd5b6116c08282612852565b5050565b60105481565b60155481565b60135481565b6000806116e1611c84565b905060006116ef8286611aca565b905083811015611734576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172b9061375d565b60405180910390fd5b6117418286868403611c8c565b60019250505092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008061177e611c84565b905061178b818585611ee1565b600191505092915050565b61179e611c06565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60196020528060005260406000206000915054906101000a900460ff1681565b600d60019054906101000a900460ff1681565b611899611c06565b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161193691906130e5565b60405180910390a25050565b61194a611c06565b670de0b6b3a76400006103e86005611960610d57565b61196a91906134ba565b611974919061352b565b61197e919061352b565b8110156119c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b7906137ef565b60405180910390fd5b670de0b6b3a7640000816119d491906134ba565b600c8190555050565b600a5481565b60006119ed611c06565b620186a060016119fb610d57565b611a0591906134ba565b611a0f919061352b565b821015611a51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4890613881565b60405180910390fd5b6103e86005611a5e610d57565b611a6891906134ba565b611a72919061352b565b821115611ab4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aab90613913565b60405180910390fd5b81600b8190555060019050919050565b600e5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b611b5f611c06565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611bce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc5906139a5565b60405180910390fd5b611bd7816128f3565b50565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b611c0e611c84565b73ffffffffffffffffffffffffffffffffffffffff16611c2c611533565b73ffffffffffffffffffffffffffffffffffffffff1614611c82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7990613a11565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611cfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf290613aa3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6190613b35565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e48919061313c565b60405180910390a3505050565b6000611e618484611aca565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611edb5781811015611ecd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec490613ba1565b60405180910390fd5b611eda8484848403611c8c565b5b50505050565b60008103611efa57611ef5838360006129b9565b61284d565b600d60009054906101000a900460ff16156123f557611f17611533565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611f855750611f55611533565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611fbe5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611ff8575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120115750600760149054906101000a900460ff16155b156123f457600d60019054906101000a900460ff1661210b57601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806120cb5750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61210a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210190613c0d565b60405180910390fd5b5b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156121ae5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561225557600a548111156121f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ef90613c9f565b60405180910390fd5b600c54612204836113dc565b8261220f91906133ba565b1115612250576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224790613d0b565b60405180910390fd5b6123f3565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156122f85750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561234757600a54811115612342576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233990613d9d565b60405180910390fd5b6123f2565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166123f157600c546123a4836113dc565b826123af91906133ba565b11156123f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e790613d0b565b60405180910390fd5b5b5b5b5b5b6000612400306113dc565b90506000600b5482101590508080156124255750600d60029054906101000a900460ff165b801561243e5750600760149054906101000a900460ff16155b80156124945750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156124ea5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156125405750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612584576001600760146101000a81548160ff021916908315150217905550612568612c2f565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061263a5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561264457600090505b6000811561283d57601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126a757506000601154115b1561273457612710601154866126bd91906134ba565b6126c7919061352b565b9050601154601354826126da91906134ba565b6126e4919061352b565b601560008282546126f591906133ba565b925050819055506011546012548261270d91906134ba565b612717919061352b565b6014600082825461272891906133ba565b92505081905550612819565b601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561278f57506000600e54115b1561281857612710600e54866127a591906134ba565b6127af919061352b565b9050600e54601054826127c291906134ba565b6127cc919061352b565b601560008282546127dd91906133ba565b92505081905550600e54600f54826127f591906134ba565b6127ff919061352b565b6014600082825461281091906133ba565b925050819055505b5b600081111561282e5761282d8730836129b9565b5b808561283a9190613dbd565b94505b6128488787876129b9565b505050505b505050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1f90613e63565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8e90613ef5565b60405180910390fd5b612aa2838383612d1f565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612b28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1f90613f87565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612c16919061313c565b60405180910390a3612c29848484612d24565b50505050565b6000612c3a306113dc565b90506000601554601454612c4e91906133ba565b90506000821480612c5f5750600081145b15612c6b575050612d1d565b6014600b54612c7a91906134ba565b821115612c93576014600b54612c9091906134ba565b91505b60008160145484612ca491906134ba565b612cae919061352b565b905060008184612cbe9190613dbd565b9050612cec82600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612d29565b612d1881600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612d29565b505050505b565b505050565b505050565b6000600267ffffffffffffffff811115612d4657612d45613fa7565b5b604051908082528060200260200182016040528015612d745781602001602082028036833780820191505090505b5090503081600081518110612d8c57612d8b613fd6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110612dfd57612dfc613fd6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612e6430600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685611c8c565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d7958460008486426040518663ffffffff1660e01b8152600401612ec89594939291906140fe565b600060405180830381600087803b158015612ee257600080fd5b505af1158015612ef6573d6000803e3d6000fd5b50505050505050565b600080fd5b6000819050919050565b612f1781612f04565b8114612f2257600080fd5b50565b600081359050612f3481612f0e565b92915050565b60008060408385031215612f5157612f50612eff565b5b6000612f5f85828601612f25565b9250506020612f7085828601612f25565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612fb4578082015181840152602081019050612f99565b60008484015250505050565b6000601f19601f8301169050919050565b6000612fdc82612f7a565b612fe68185612f85565b9350612ff6818560208601612f96565b612fff81612fc0565b840191505092915050565b600060208201905081810360008301526130248184612fd1565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006130578261302c565b9050919050565b6130678161304c565b811461307257600080fd5b50565b6000813590506130848161305e565b92915050565b600080604083850312156130a1576130a0612eff565b5b60006130af85828601613075565b92505060206130c085828601612f25565b9150509250929050565b60008115159050919050565b6130df816130ca565b82525050565b60006020820190506130fa60008301846130d6565b92915050565b60006020828403121561311657613115612eff565b5b600061312484828501613075565b91505092915050565b61313681612f04565b82525050565b6000602082019050613151600083018461312d565b92915050565b60006020828403121561316d5761316c612eff565b5b600061317b84828501612f25565b91505092915050565b60008060006060848603121561319d5761319c612eff565b5b60006131ab86828701613075565b93505060206131bc86828701613075565b92505060406131cd86828701612f25565b9150509250925092565b6131e08161304c565b82525050565b60006020820190506131fb60008301846131d7565b92915050565b600060ff82169050919050565b61321781613201565b82525050565b6000602082019050613232600083018461320e565b92915050565b613241816130ca565b811461324c57600080fd5b50565b60008135905061325e81613238565b92915050565b6000806040838503121561327b5761327a612eff565b5b600061328985828601613075565b925050602061329a8582860161324f565b9150509250929050565b6000602082840312156132ba576132b9612eff565b5b60006132c88482850161324f565b91505092915050565b600080604083850312156132e8576132e7612eff565b5b60006132f685828601613075565b925050602061330785828601613075565b9150509250929050565b6000819050919050565b600061333661333161332c8461302c565b613311565b61302c565b9050919050565b60006133488261331b565b9050919050565b600061335a8261333d565b9050919050565b61336a8161334f565b82525050565b60006020820190506133856000830184613361565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006133c582612f04565b91506133d083612f04565b92508282019050808211156133e8576133e761338b565b5b92915050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b6000613424601d83612f85565b915061342f826133ee565b602082019050919050565b6000602082019050818103600083015261345381613417565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806134a157607f821691505b6020821081036134b4576134b361345a565b5b50919050565b60006134c582612f04565b91506134d083612f04565b92508282026134de81612f04565b915082820484148315176134f5576134f461338b565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061353682612f04565b915061354183612f04565b925082613551576135506134fc565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006135b8602f83612f85565b91506135c38261355c565b604082019050919050565b600060208201905081810360008301526135e7816135ab565b9050919050565b6000815190506135fd8161305e565b92915050565b60006020828403121561361957613618612eff565b5b6000613627848285016135ee565b91505092915050565b600060408201905061364560008301856131d7565b61365260208301846131d7565b9392505050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006136b5603983612f85565b91506136c082613659565b604082019050919050565b600060208201905081810360008301526136e4816136a8565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613747602583612f85565b9150613752826136eb565b604082019050919050565b600060208201905081810360008301526137768161373a565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006137d9602483612f85565b91506137e48261377d565b604082019050919050565b60006020820190508181036000830152613808816137cc565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061386b603583612f85565b91506138768261380f565b604082019050919050565b6000602082019050818103600083015261389a8161385e565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006138fd603483612f85565b9150613908826138a1565b604082019050919050565b6000602082019050818103600083015261392c816138f0565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061398f602683612f85565b915061399a82613933565b604082019050919050565b600060208201905081810360008301526139be81613982565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006139fb602083612f85565b9150613a06826139c5565b602082019050919050565b60006020820190508181036000830152613a2a816139ee565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613a8d602483612f85565b9150613a9882613a31565b604082019050919050565b60006020820190508181036000830152613abc81613a80565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613b1f602283612f85565b9150613b2a82613ac3565b604082019050919050565b60006020820190508181036000830152613b4e81613b12565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613b8b601d83612f85565b9150613b9682613b55565b602082019050919050565b60006020820190508181036000830152613bba81613b7e565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613bf7601683612f85565b9150613c0282613bc1565b602082019050919050565b60006020820190508181036000830152613c2681613bea565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000613c89603583612f85565b9150613c9482613c2d565b604082019050919050565b60006020820190508181036000830152613cb881613c7c565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000613cf5601383612f85565b9150613d0082613cbf565b602082019050919050565b60006020820190508181036000830152613d2481613ce8565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000613d87603683612f85565b9150613d9282613d2b565b604082019050919050565b60006020820190508181036000830152613db681613d7a565b9050919050565b6000613dc882612f04565b9150613dd383612f04565b9250828203905081811115613deb57613dea61338b565b5b92915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613e4d602583612f85565b9150613e5882613df1565b604082019050919050565b60006020820190508181036000830152613e7c81613e40565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613edf602383612f85565b9150613eea82613e83565b604082019050919050565b60006020820190508181036000830152613f0e81613ed2565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613f71602683612f85565b9150613f7c82613f15565b604082019050919050565b60006020820190508181036000830152613fa081613f64565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b600061402a61402561402084614005565b613311565b612f04565b9050919050565b61403a8161400f565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6140758161304c565b82525050565b6000614087838361406c565b60208301905092915050565b6000602082019050919050565b60006140ab82614040565b6140b5818561404b565b93506140c08361405c565b8060005b838110156140f15781516140d8888261407b565b97506140e383614093565b9250506001810190506140c4565b5085935050505092915050565b600060a082019050614113600083018861312d565b6141206020830187614031565b818103604083015261413281866140a0565b905061414160608301856131d7565b61414e608083018461312d565b969550505050505056fea264697066735822122060185ef5fbc05498f6adfb1fa9a2bb7d0ccafd6b1a5be4f312e3a3e89d80e8a464736f6c63430008120033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000007251338ccaf681226e90c3100975cf41f6f8c9030000000000000000000000007b6fa491b2b9a734766a23648b8f02add266559e000000000000000000000000af88d065e77c8cc2239327c5edb3a432268e5831

-----Decoded View---------------
Arg [0] : _marketingAddress (address): 0x7251338ccAF681226e90c3100975cF41f6F8C903
Arg [1] : _devWallet (address): 0x7b6fA491B2B9a734766A23648b8f02add266559e
Arg [2] : _pairedTokenAddress (address): 0xaf88d065e77c8cC2239327C5EDb3A432268e5831

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000007251338ccaf681226e90c3100975cf41f6f8c903
Arg [1] : 0000000000000000000000007b6fa491b2b9a734766a23648b8f02add266559e
Arg [2] : 000000000000000000000000af88d065e77c8cc2239327c5edb3a432268e5831


Deployed Bytecode Sourcemap

26362:12838:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32753:320;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15293:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17653:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27345:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16422:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34004:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27087:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31508:277;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18434:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26479:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16264:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19104:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26756:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34169:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29955:655;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32432:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27163:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26980:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26836:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16593:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8730:103;;;;;;;;;;;;;:::i;:::-;;30828:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32059:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26571:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26910;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30664:112;;;;;;;;;;;;;:::i;:::-;;8089:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26608:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27015:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32324:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15512:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33271:297;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26947:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27127:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27053:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19845:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26446:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16926:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33772:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27566:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26796:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33081:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31793:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26641:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31019:481;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26876:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17182:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26683:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8988:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26407:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26723:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32753:320;7975:13;:11;:13::i;:::-;32891::::1;32872:16;:32;;;;32928:7;32915:10;:20;;;;32981:10;;32962:16;;:29;;;;:::i;:::-;32946:13;:45;;;;33027:4;33010:13;;:21;;33002:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;32753:320:::0;;:::o;15293:100::-;15347:13;15380:5;15373:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15293:100;:::o;17653:201::-;17736:4;17753:13;17769:12;:10;:12::i;:::-;17753:28;;17792:32;17801:5;17808:7;17817:6;17792:8;:32::i;:::-;17842:4;17835:11;;;17653:201;;;;:::o;27345:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;16422:108::-;16483:7;16510:12;;16503:19;;16422:108;:::o;34004:157::-;7975:13;:11;:13::i;:::-;34111:9:::1;;;;;;;;;;;34083:38;;34100:9;34083:38;;;;;;;;;;;;34144:9;34132;;:21;;;;;;;;;;;;;;;;;;34004:157:::0;:::o;27087:33::-;;;;:::o;31508:277::-;7975:13;:11;:13::i;:::-;31645:4:::1;31637;31632:1;31616:13;:11;:13::i;:::-;:17;;;;:::i;:::-;31615:26;;;;:::i;:::-;31614:35;;;;:::i;:::-;31604:6;:45;;31582:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;31768:8;31758:6;:19;;;;:::i;:::-;31735:20;:42;;;;31508:277:::0;:::o;18434:261::-;18531:4;18548:15;18566:12;:10;:12::i;:::-;18548:30;;18589:38;18605:4;18611:7;18620:6;18589:15;:38::i;:::-;18638:27;18648:4;18654:2;18658:6;18638:9;:27::i;:::-;18683:4;18676:11;;;18434:261;;;;;:::o;26479:53::-;26525:6;26479:53;:::o;16264:93::-;16322:5;16347:2;16340:9;;16264:93;:::o;19104:238::-;19192:4;19209:13;19225:12;:10;:12::i;:::-;19209:28;;19248:64;19257:5;19264:7;19301:10;19273:25;19283:5;19290:7;19273:9;:25::i;:::-;:38;;;;:::i;:::-;19248:8;:64::i;:::-;19330:4;19323:11;;;19104:238;;;;:::o;26756:33::-;;;;;;;;;;;;;:::o;34169:126::-;34235:4;34259:19;:28;34279:7;34259:28;;;;;;;;;;;;;;;;;;;;;;;;;34252:35;;34169:126;;;:::o;29955:655::-;7975:13;:11;:13::i;:::-;30054:14:::1;30026:6;;:43;;;;;;;;;;;;;;;;;;30080:25;30126:6;;;;;;;;;;;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30080:63;;30168:7;:15;;;30192:4;30199:18;;;;;;;;;;;30168:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30154:11;;:64;;;;;;;;;;;;;;;;;;30256:1;30233:25;;:11;;;;;;;;;;;:25;;::::0;30229:174:::1;;30289:7;:18;;;30334:4;30358:18;;;;;;;;;;;30289:102;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30275:11;;:116;;;;;;;;;;;;;;;;;;30229:174;30423:48;30457:6;;;;;;;;;;;30466:4;30423:25;:48::i;:::-;30482:53;30516:11;;;;;;;;;;;30530:4;30482:25;:53::i;:::-;30546:56;30583:11;;;;;;;;;;;30597:4;30546:28;:56::i;:::-;30015:595;29955:655:::0;:::o;32432:313::-;7975:13;:11;:13::i;:::-;32568::::1;32550:15;:31;;;;32604:7;32592:9;:19;;;;32655:9;;32637:15;;:27;;;;:::i;:::-;32622:12;:42;;;;32699:4;32683:12;;:20;;32675:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;32432:313:::0;;:::o;27163:33::-;;;;;;;;;;;;;:::o;26980:28::-;;;;:::o;26836:31::-;;;;;;;;;;;;;:::o;16593:127::-;16667:7;16694:9;:18;16704:7;16694:18;;;;;;;;;;;;;;;;16687:25;;16593:127;;;:::o;8730:103::-;7975:13;:11;:13::i;:::-;8795:30:::1;8822:1;8795:18;:30::i;:::-;8730:103::o:0;30828:121::-;30880:4;7975:13;:11;:13::i;:::-;30914:5:::1;30897:14;;:22;;;;;;;;;;;;;;;;;;30937:4;30930:11;;30828:121:::0;:::o;32059:169::-;7975:13;:11;:13::i;:::-;32216:4:::1;32174:31;:39;32206:6;32174:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;32059:169:::0;;:::o;26571:30::-;;;;;;;;;;;;;:::o;26910:::-;;;;:::o;30664:112::-;7975:13;:11;:13::i;:::-;30735:4:::1;30719:13;;:20;;;;;;;;;;;;;;;;;;30764:4;30750:11;;:18;;;;;;;;;;;;;;;;;;30664:112::o:0;8089:87::-;8135:7;8162:6;;;;;;;;;;;8155:13;;8089:87;:::o;26608:24::-;;;;;;;;;;;;;:::o;27015:31::-;;;;:::o;32324:100::-;7975:13;:11;:13::i;:::-;32409:7:::1;32395:11;;:21;;;;;;;;;;;;;;;;;;32324:100:::0;:::o;15512:104::-;15568:13;15601:7;15594:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15512:104;:::o;33271:297::-;7975:13;:11;:13::i;:::-;33417:4:::1;33409:12;;:4;:12;;::::0;33387:119:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;33519:41;33548:4;33554:5;33519:28;:41::i;:::-;33271:297:::0;;:::o;26947:24::-;;;;:::o;27127:27::-;;;;:::o;27053:25::-;;;;:::o;19845:436::-;19938:4;19955:13;19971:12;:10;:12::i;:::-;19955:28;;19994:24;20021:25;20031:5;20038:7;20021:9;:25::i;:::-;19994:52;;20085:15;20065:16;:35;;20057:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;20178:60;20187:5;20194:7;20222:15;20203:16;:34;20178:8;:60::i;:::-;20269:4;20262:11;;;;19845:436;;;;:::o;26446:26::-;;;;;;;;;;;;;:::o;16926:193::-;17005:4;17022:13;17038:12;:10;:12::i;:::-;17022:28;;17061;17071:5;17078:2;17082:6;17061:9;:28::i;:::-;17107:4;17100:11;;;16926:193;;;;:::o;33772:224::-;7975:13;:11;:13::i;:::-;33925:15:::1;;;;;;;;;;;33882:59;;33905:18;33882:59;;;;;;;;;;;;33970:18;33952:15;;:36;;;;;;;;;;;;;;;;;;33772:224:::0;:::o;27566:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;26796:33::-;;;;;;;;;;;;;:::o;33081:182::-;7975:13;:11;:13::i;:::-;33197:8:::1;33166:19;:28;33186:7;33166:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;33237:7;33221:34;;;33246:8;33221:34;;;;;;:::i;:::-;;;;;;;;33081:182:::0;;:::o;31793:258::-;7975:13;:11;:13::i;:::-;31933:4:::1;31925;31920:1;31904:13;:11;:13::i;:::-;:17;;;;:::i;:::-;31903:26;;;;:::i;:::-;31902:35;;;;:::i;:::-;31892:6;:45;;31870:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;32034:8;32024:6;:19;;;;:::i;:::-;32012:9;:31;;;;31793:258:::0;:::o;26641:35::-;;;;:::o;31019:481::-;31116:4;7975:13;:11;:13::i;:::-;31190:6:::1;31185:1;31169:13;:11;:13::i;:::-;:17;;;;:::i;:::-;31168:28;;;;:::i;:::-;31155:9;:41;;31133:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;31345:4;31340:1;31324:13;:11;:13::i;:::-;:17;;;;:::i;:::-;31323:26;;;;:::i;:::-;31310:9;:39;;31288:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;31461:9;31440:18;:30;;;;31488:4;31481:11;;31019:481:::0;;;:::o;26876:27::-;;;;:::o;17182:151::-;17271:7;17298:11;:18;17310:5;17298:18;;;;;;;;;;;;;;;:27;17317:7;17298:27;;;;;;;;;;;;;;;;17291:34;;17182:151;;;;:::o;26683:33::-;;;;:::o;8988:201::-;7975:13;:11;:13::i;:::-;9097:1:::1;9077:22;;:8;:22;;::::0;9069:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;9153:28;9172:8;9153:18;:28::i;:::-;8988:201:::0;:::o;26407:32::-;;;;;;;;;;;;;:::o;26723:24::-;;;;:::o;8254:132::-;8329:12;:10;:12::i;:::-;8318:23;;:7;:5;:7::i;:::-;:23;;;8310:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8254:132::o;6527:98::-;6580:7;6607:10;6600:17;;6527:98;:::o;23838:346::-;23957:1;23940:19;;:5;:19;;;23932:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24038:1;24019:21;;:7;:21;;;24011:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24122:6;24092:11;:18;24104:5;24092:18;;;;;;;;;;;;;;;:27;24111:7;24092:27;;;;;;;;;;;;;;;:36;;;;24160:7;24144:32;;24153:5;24144:32;;;24169:6;24144:32;;;;;;:::i;:::-;;;;;;;;23838:346;;;:::o;24475:419::-;24576:24;24603:25;24613:5;24620:7;24603:9;:25::i;:::-;24576:52;;24663:17;24643:16;:37;24639:248;;24725:6;24705:16;:26;;24697:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24809:51;24818:5;24825:7;24853:6;24834:16;:25;24809:8;:51::i;:::-;24639:248;24565:329;24475:419;;;:::o;34303:3602::-;34441:1;34431:6;:11;34427:93;;34459:28;34475:4;34481:2;34485:1;34459:15;:28::i;:::-;34502:7;;34427:93;34536:14;;;;;;;;;;;34532:1694;;;34597:7;:5;:7::i;:::-;34589:15;;:4;:15;;;;:49;;;;;34631:7;:5;:7::i;:::-;34625:13;;:2;:13;;;;34589:49;:86;;;;;34673:1;34659:16;;:2;:16;;;;34589:86;:128;;;;;34710:6;34696:21;;:2;:21;;;;34589:128;:158;;;;;34739:8;;;;;;;;;;;34738:9;34589:158;34567:1648;;;34787:13;;;;;;;;;;;34782:223;;34859:19;:25;34879:4;34859:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;34888:19;:23;34908:2;34888:23;;;;;;;;;;;;;;;;;;;;;;;;;34859:52;34825:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;34782:223;35079:25;:31;35105:4;35079:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;35136:31;:35;35168:2;35136:35;;;;;;;;;;;;;;;;;;;;;;;;;35135:36;35079:92;35053:1147;;;35258:20;;35248:6;:30;;35214:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;35466:9;;35449:13;35459:2;35449:9;:13::i;:::-;35440:6;:22;;;;:::i;:::-;:35;;35406:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;35053:1147;;;35644:25;:29;35670:2;35644:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;35699:31;:37;35731:4;35699:37;;;;;;;;;;;;;;;;;;;;;;;;;35698:38;35644:92;35618:582;;;35823:20;;35813:6;:30;;35779:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;35618:582;;;35980:31;:35;36012:2;35980:35;;;;;;;;;;;;;;;;;;;;;;;;;35975:225;;36100:9;;36083:13;36093:2;36083:9;:13::i;:::-;36074:6;:22;;;;:::i;:::-;:35;;36040:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;35975:225;35618:582;35053:1147;34567:1648;34532:1694;36238:28;36269:24;36287:4;36269:9;:24::i;:::-;36238:55;;36306:12;36345:18;;36321:20;:42;;36306:57;;36394:7;:35;;;;;36418:11;;;;;;;;;;;36394:35;:61;;;;;36447:8;;;;;;;;;;;36446:9;36394:61;:110;;;;;36473:25;:31;36499:4;36473:31;;;;;;;;;;;;;;;;;;;;;;;;;36472:32;36394:110;:153;;;;;36522:19;:25;36542:4;36522:25;;;;;;;;;;;;;;;;;;;;;;;;;36521:26;36394:153;:194;;;;;36565:19;:23;36585:2;36565:23;;;;;;;;;;;;;;;;;;;;;;;;;36564:24;36394:194;36376:326;;;36626:4;36615:8;;:15;;;;;;;;;;;;;;;;;;36647:10;:8;:10::i;:::-;36685:5;36674:8;;:16;;;;;;;;;;;;;;;;;;36376:326;36714:12;36730:8;;;;;;;;;;;36729:9;36714:24;;36840:19;:25;36860:4;36840:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;36869:19;:23;36889:2;36869:23;;;;;;;;;;;;;;;;;;;;;;;;;36840:52;36836:100;;;36919:5;36909:15;;36836:100;36948:12;37053:7;37049:803;;;37105:25;:29;37131:2;37105:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;37154:1;37138:13;;:17;37105:50;37101:602;;;37210:5;37193:13;;37184:6;:22;;;;:::i;:::-;37183:32;;;;:::i;:::-;37176:39;;37272:13;;37258:10;;37251:4;:17;;;;:::i;:::-;37250:35;;;;:::i;:::-;37234:12;;:51;;;;;;;:::i;:::-;;;;;;;;37354:13;;37334:16;;37327:4;:23;;;;:::i;:::-;37326:41;;;;:::i;:::-;37304:18;;:63;;;;;;;:::i;:::-;;;;;;;;37101:602;;;37429:25;:31;37455:4;37429:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;37479:1;37464:12;;:16;37429:51;37425:278;;;37534:5;37518:12;;37509:6;:21;;;;:::i;:::-;37508:31;;;;:::i;:::-;37501:38;;37595:12;;37582:9;;37575:4;:16;;;;:::i;:::-;37574:33;;;;:::i;:::-;37558:12;;:49;;;;;;;:::i;:::-;;;;;;;;37675:12;;37656:15;;37649:4;:22;;;;:::i;:::-;37648:39;;;;:::i;:::-;37626:18;;:61;;;;;;;:::i;:::-;;;;;;;;37425:278;37101:602;37730:1;37723:4;:8;37719:91;;;37752:42;37768:4;37782;37789;37752:15;:42::i;:::-;37719:91;37836:4;37826:14;;;;;:::i;:::-;;;37049:803;37864:33;37880:4;37886:2;37890:6;37864:15;:33::i;:::-;34416:3489;;;;34303:3602;;;;:::o;33576:188::-;33693:5;33659:25;:31;33685:4;33659:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;33750:5;33716:40;;33744:4;33716:40;;;;;;;;;;;;33576:188;;:::o;9349:191::-;9423:16;9442:6;;;;;;;;;;;9423:25;;9468:8;9459:6;;:17;;;;;;;;;;;;;;;;;;9523:8;9492:40;;9513:8;9492:40;;;;;;;;;;;;9412:128;9349:191;:::o;20751:806::-;20864:1;20848:18;;:4;:18;;;20840:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20941:1;20927:16;;:2;:16;;;20919:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;20996:38;21017:4;21023:2;21027:6;20996:20;:38::i;:::-;21047:19;21069:9;:15;21079:4;21069:15;;;;;;;;;;;;;;;;21047:37;;21118:6;21103:11;:21;;21095:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;21235:6;21221:11;:20;21203:9;:15;21213:4;21203:15;;;;;;;;;;;;;;;:38;;;;21438:6;21421:9;:13;21431:2;21421:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;21488:2;21473:26;;21482:4;21473:26;;;21492:6;21473:26;;;;;;:::i;:::-;;;;;;;;21512:37;21532:4;21538:2;21542:6;21512:19;:37::i;:::-;20829:728;20751:806;;;:::o;38497:700::-;38536:23;38562:24;38580:4;38562:9;:24::i;:::-;38536:50;;38597:25;38646:12;;38625:18;;:33;;;;:::i;:::-;38597:61;;38694:1;38675:15;:20;:46;;;;38720:1;38699:17;:22;38675:46;38671:85;;;38738:7;;;;38671:85;38811:2;38790:18;;:23;;;;:::i;:::-;38772:15;:41;38768:115;;;38869:2;38848:18;;:23;;;;:::i;:::-;38830:41;;38768:115;38895:26;38978:17;38943:18;;38925:15;:36;;;;:::i;:::-;38924:71;;;;:::i;:::-;38895:100;;39006:20;39047:18;39029:15;:36;;;;:::i;:::-;39006:59;;39078:56;39098:18;39118:15;;;;;;;;;;;39078:19;:56::i;:::-;39145:44;39165:12;39179:9;;;;;;;;;;;39145:19;:44::i;:::-;38525:672;;;;38497:700;:::o;25494:91::-;;;;:::o;26189:90::-;;;;:::o;37913:576::-;38054:21;38092:1;38078:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38054:40;;38123:4;38105;38110:1;38105:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;38149:18;;;;;;;;;;;38139:4;38144:1;38139:7;;;;;;;;:::i;:::-;;;;;;;:28;;;;;;;;;;;38180:53;38197:4;38212:6;;;;;;;;;;;38221:11;38180:8;:53::i;:::-;38272:6;;;;;;;;;;;:60;;;38347:11;38373:1;38419:4;38438:2;38455:15;38272:209;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37983:506;37913:576;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:246::-;1531:1;1541:113;1555:6;1552:1;1549:13;1541:113;;;1640:1;1635:3;1631:11;1625:18;1621:1;1616:3;1612:11;1605:39;1577:2;1574:1;1570:10;1565:15;;1541:113;;;1688:1;1679:6;1674:3;1670:16;1663:27;1512:184;1450:246;;;:::o;1702:102::-;1743:6;1794:2;1790:7;1785:2;1778:5;1774:14;1770:28;1760:38;;1702:102;;;:::o;1810:377::-;1898:3;1926:39;1959:5;1926:39;:::i;:::-;1981:71;2045:6;2040:3;1981:71;:::i;:::-;1974:78;;2061:65;2119:6;2114:3;2107:4;2100:5;2096:16;2061:65;:::i;:::-;2151:29;2173:6;2151:29;:::i;:::-;2146:3;2142:39;2135:46;;1902:285;1810:377;;;;:::o;2193:313::-;2306:4;2344:2;2333:9;2329:18;2321:26;;2393:9;2387:4;2383:20;2379:1;2368:9;2364:17;2357:47;2421:78;2494:4;2485:6;2421:78;:::i;:::-;2413:86;;2193:313;;;;:::o;2512:126::-;2549:7;2589:42;2582:5;2578:54;2567:65;;2512:126;;;:::o;2644:96::-;2681:7;2710:24;2728:5;2710:24;:::i;:::-;2699:35;;2644:96;;;:::o;2746:122::-;2819:24;2837:5;2819:24;:::i;:::-;2812:5;2809:35;2799:63;;2858:1;2855;2848:12;2799:63;2746:122;:::o;2874:139::-;2920:5;2958:6;2945:20;2936:29;;2974:33;3001:5;2974:33;:::i;:::-;2874:139;;;;:::o;3019:474::-;3087:6;3095;3144:2;3132:9;3123:7;3119:23;3115:32;3112:119;;;3150:79;;:::i;:::-;3112:119;3270:1;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3241:117;3397:2;3423:53;3468:7;3459:6;3448:9;3444:22;3423:53;:::i;:::-;3413:63;;3368:118;3019:474;;;;;:::o;3499:90::-;3533:7;3576:5;3569:13;3562:21;3551:32;;3499:90;;;:::o;3595:109::-;3676:21;3691:5;3676:21;:::i;:::-;3671:3;3664:34;3595:109;;:::o;3710:210::-;3797:4;3835:2;3824:9;3820:18;3812:26;;3848:65;3910:1;3899:9;3895:17;3886:6;3848:65;:::i;:::-;3710:210;;;;:::o;3926:329::-;3985:6;4034:2;4022:9;4013:7;4009:23;4005:32;4002:119;;;4040:79;;:::i;:::-;4002:119;4160:1;4185:53;4230:7;4221:6;4210:9;4206:22;4185:53;:::i;:::-;4175:63;;4131:117;3926:329;;;;:::o;4261:118::-;4348:24;4366:5;4348:24;:::i;:::-;4343:3;4336:37;4261:118;;:::o;4385:222::-;4478:4;4516:2;4505:9;4501:18;4493:26;;4529:71;4597:1;4586:9;4582:17;4573:6;4529:71;:::i;:::-;4385:222;;;;:::o;4613:329::-;4672:6;4721:2;4709:9;4700:7;4696:23;4692:32;4689:119;;;4727:79;;:::i;:::-;4689:119;4847:1;4872:53;4917:7;4908:6;4897:9;4893:22;4872:53;:::i;:::-;4862:63;;4818:117;4613:329;;;;:::o;4948:619::-;5025:6;5033;5041;5090:2;5078:9;5069:7;5065:23;5061:32;5058:119;;;5096:79;;:::i;:::-;5058:119;5216:1;5241:53;5286:7;5277:6;5266:9;5262:22;5241:53;:::i;:::-;5231:63;;5187:117;5343:2;5369:53;5414:7;5405:6;5394:9;5390:22;5369:53;:::i;:::-;5359:63;;5314:118;5471:2;5497:53;5542:7;5533:6;5522:9;5518:22;5497:53;:::i;:::-;5487:63;;5442:118;4948:619;;;;;:::o;5573:118::-;5660:24;5678:5;5660:24;:::i;:::-;5655:3;5648:37;5573:118;;:::o;5697:222::-;5790:4;5828:2;5817:9;5813:18;5805:26;;5841:71;5909:1;5898:9;5894:17;5885:6;5841:71;:::i;:::-;5697:222;;;;:::o;5925:86::-;5960:7;6000:4;5993:5;5989:16;5978:27;;5925:86;;;:::o;6017:112::-;6100:22;6116:5;6100:22;:::i;:::-;6095:3;6088:35;6017:112;;:::o;6135:214::-;6224:4;6262:2;6251:9;6247:18;6239:26;;6275:67;6339:1;6328:9;6324:17;6315:6;6275:67;:::i;:::-;6135:214;;;;:::o;6355:116::-;6425:21;6440:5;6425:21;:::i;:::-;6418:5;6415:32;6405:60;;6461:1;6458;6451:12;6405:60;6355:116;:::o;6477:133::-;6520:5;6558:6;6545:20;6536:29;;6574:30;6598:5;6574:30;:::i;:::-;6477:133;;;;:::o;6616:468::-;6681:6;6689;6738:2;6726:9;6717:7;6713:23;6709:32;6706:119;;;6744:79;;:::i;:::-;6706:119;6864:1;6889:53;6934:7;6925:6;6914:9;6910:22;6889:53;:::i;:::-;6879:63;;6835:117;6991:2;7017:50;7059:7;7050:6;7039:9;7035:22;7017:50;:::i;:::-;7007:60;;6962:115;6616:468;;;;;:::o;7090:323::-;7146:6;7195:2;7183:9;7174:7;7170:23;7166:32;7163:119;;;7201:79;;:::i;:::-;7163:119;7321:1;7346:50;7388:7;7379:6;7368:9;7364:22;7346:50;:::i;:::-;7336:60;;7292:114;7090:323;;;;:::o;7419:474::-;7487:6;7495;7544:2;7532:9;7523:7;7519:23;7515:32;7512:119;;;7550:79;;:::i;:::-;7512:119;7670:1;7695:53;7740:7;7731:6;7720:9;7716:22;7695:53;:::i;:::-;7685:63;;7641:117;7797:2;7823:53;7868:7;7859:6;7848:9;7844:22;7823:53;:::i;:::-;7813:63;;7768:118;7419:474;;;;;:::o;7899:60::-;7927:3;7948:5;7941:12;;7899:60;;;:::o;7965:142::-;8015:9;8048:53;8066:34;8075:24;8093:5;8075:24;:::i;:::-;8066:34;:::i;:::-;8048:53;:::i;:::-;8035:66;;7965:142;;;:::o;8113:126::-;8163:9;8196:37;8227:5;8196:37;:::i;:::-;8183:50;;8113:126;;;:::o;8245:152::-;8321:9;8354:37;8385:5;8354:37;:::i;:::-;8341:50;;8245:152;;;:::o;8403:183::-;8516:63;8573:5;8516:63;:::i;:::-;8511:3;8504:76;8403:183;;:::o;8592:274::-;8711:4;8749:2;8738:9;8734:18;8726:26;;8762:97;8856:1;8845:9;8841:17;8832:6;8762:97;:::i;:::-;8592:274;;;;:::o;8872:180::-;8920:77;8917:1;8910:88;9017:4;9014:1;9007:15;9041:4;9038:1;9031:15;9058:191;9098:3;9117:20;9135:1;9117:20;:::i;:::-;9112:25;;9151:20;9169:1;9151:20;:::i;:::-;9146:25;;9194:1;9191;9187:9;9180:16;;9215:3;9212:1;9209:10;9206:36;;;9222:18;;:::i;:::-;9206:36;9058:191;;;;:::o;9255:179::-;9395:31;9391:1;9383:6;9379:14;9372:55;9255:179;:::o;9440:366::-;9582:3;9603:67;9667:2;9662:3;9603:67;:::i;:::-;9596:74;;9679:93;9768:3;9679:93;:::i;:::-;9797:2;9792:3;9788:12;9781:19;;9440:366;;;:::o;9812:419::-;9978:4;10016:2;10005:9;10001:18;9993:26;;10065:9;10059:4;10055:20;10051:1;10040:9;10036:17;10029:47;10093:131;10219:4;10093:131;:::i;:::-;10085:139;;9812:419;;;:::o;10237:180::-;10285:77;10282:1;10275:88;10382:4;10379:1;10372:15;10406:4;10403:1;10396:15;10423:320;10467:6;10504:1;10498:4;10494:12;10484:22;;10551:1;10545:4;10541:12;10572:18;10562:81;;10628:4;10620:6;10616:17;10606:27;;10562:81;10690:2;10682:6;10679:14;10659:18;10656:38;10653:84;;10709:18;;:::i;:::-;10653:84;10474:269;10423:320;;;:::o;10749:410::-;10789:7;10812:20;10830:1;10812:20;:::i;:::-;10807:25;;10846:20;10864:1;10846:20;:::i;:::-;10841:25;;10901:1;10898;10894:9;10923:30;10941:11;10923:30;:::i;:::-;10912:41;;11102:1;11093:7;11089:15;11086:1;11083:22;11063:1;11056:9;11036:83;11013:139;;11132:18;;:::i;:::-;11013:139;10797:362;10749:410;;;;:::o;11165:180::-;11213:77;11210:1;11203:88;11310:4;11307:1;11300:15;11334:4;11331:1;11324:15;11351:185;11391:1;11408:20;11426:1;11408:20;:::i;:::-;11403:25;;11442:20;11460:1;11442:20;:::i;:::-;11437:25;;11481:1;11471:35;;11486:18;;:::i;:::-;11471:35;11528:1;11525;11521:9;11516:14;;11351:185;;;;:::o;11542:234::-;11682:34;11678:1;11670:6;11666:14;11659:58;11751:17;11746:2;11738:6;11734:15;11727:42;11542:234;:::o;11782:366::-;11924:3;11945:67;12009:2;12004:3;11945:67;:::i;:::-;11938:74;;12021:93;12110:3;12021:93;:::i;:::-;12139:2;12134:3;12130:12;12123:19;;11782:366;;;:::o;12154:419::-;12320:4;12358:2;12347:9;12343:18;12335:26;;12407:9;12401:4;12397:20;12393:1;12382:9;12378:17;12371:47;12435:131;12561:4;12435:131;:::i;:::-;12427:139;;12154:419;;;:::o;12579:143::-;12636:5;12667:6;12661:13;12652:22;;12683:33;12710:5;12683:33;:::i;:::-;12579:143;;;;:::o;12728:351::-;12798:6;12847:2;12835:9;12826:7;12822:23;12818:32;12815:119;;;12853:79;;:::i;:::-;12815:119;12973:1;12998:64;13054:7;13045:6;13034:9;13030:22;12998:64;:::i;:::-;12988:74;;12944:128;12728:351;;;;:::o;13085:332::-;13206:4;13244:2;13233:9;13229:18;13221:26;;13257:71;13325:1;13314:9;13310:17;13301:6;13257:71;:::i;:::-;13338:72;13406:2;13395:9;13391:18;13382:6;13338:72;:::i;:::-;13085:332;;;;;:::o;13423:244::-;13563:34;13559:1;13551:6;13547:14;13540:58;13632:27;13627:2;13619:6;13615:15;13608:52;13423:244;:::o;13673:366::-;13815:3;13836:67;13900:2;13895:3;13836:67;:::i;:::-;13829:74;;13912:93;14001:3;13912:93;:::i;:::-;14030:2;14025:3;14021:12;14014:19;;13673:366;;;:::o;14045:419::-;14211:4;14249:2;14238:9;14234:18;14226:26;;14298:9;14292:4;14288:20;14284:1;14273:9;14269:17;14262:47;14326:131;14452:4;14326:131;:::i;:::-;14318:139;;14045:419;;;:::o;14470:224::-;14610:34;14606:1;14598:6;14594:14;14587:58;14679:7;14674:2;14666:6;14662:15;14655:32;14470:224;:::o;14700:366::-;14842:3;14863:67;14927:2;14922:3;14863:67;:::i;:::-;14856:74;;14939:93;15028:3;14939:93;:::i;:::-;15057:2;15052:3;15048:12;15041:19;;14700:366;;;:::o;15072:419::-;15238:4;15276:2;15265:9;15261:18;15253:26;;15325:9;15319:4;15315:20;15311:1;15300:9;15296:17;15289:47;15353:131;15479:4;15353:131;:::i;:::-;15345:139;;15072:419;;;:::o;15497:223::-;15637:34;15633:1;15625:6;15621:14;15614:58;15706:6;15701:2;15693:6;15689:15;15682:31;15497:223;:::o;15726:366::-;15868:3;15889:67;15953:2;15948:3;15889:67;:::i;:::-;15882:74;;15965:93;16054:3;15965:93;:::i;:::-;16083:2;16078:3;16074:12;16067:19;;15726:366;;;:::o;16098:419::-;16264:4;16302:2;16291:9;16287:18;16279:26;;16351:9;16345:4;16341:20;16337:1;16326:9;16322:17;16315:47;16379:131;16505:4;16379:131;:::i;:::-;16371:139;;16098:419;;;:::o;16523:240::-;16663:34;16659:1;16651:6;16647:14;16640:58;16732:23;16727:2;16719:6;16715:15;16708:48;16523:240;:::o;16769:366::-;16911:3;16932:67;16996:2;16991:3;16932:67;:::i;:::-;16925:74;;17008:93;17097:3;17008:93;:::i;:::-;17126:2;17121:3;17117:12;17110:19;;16769:366;;;:::o;17141:419::-;17307:4;17345:2;17334:9;17330:18;17322:26;;17394:9;17388:4;17384:20;17380:1;17369:9;17365:17;17358:47;17422:131;17548:4;17422:131;:::i;:::-;17414:139;;17141:419;;;:::o;17566:239::-;17706:34;17702:1;17694:6;17690:14;17683:58;17775:22;17770:2;17762:6;17758:15;17751:47;17566:239;:::o;17811:366::-;17953:3;17974:67;18038:2;18033:3;17974:67;:::i;:::-;17967:74;;18050:93;18139:3;18050:93;:::i;:::-;18168:2;18163:3;18159:12;18152:19;;17811:366;;;:::o;18183:419::-;18349:4;18387:2;18376:9;18372:18;18364:26;;18436:9;18430:4;18426:20;18422:1;18411:9;18407:17;18400:47;18464:131;18590:4;18464:131;:::i;:::-;18456:139;;18183:419;;;:::o;18608:225::-;18748:34;18744:1;18736:6;18732:14;18725:58;18817:8;18812:2;18804:6;18800:15;18793:33;18608:225;:::o;18839:366::-;18981:3;19002:67;19066:2;19061:3;19002:67;:::i;:::-;18995:74;;19078:93;19167:3;19078:93;:::i;:::-;19196:2;19191:3;19187:12;19180:19;;18839:366;;;:::o;19211:419::-;19377:4;19415:2;19404:9;19400:18;19392:26;;19464:9;19458:4;19454:20;19450:1;19439:9;19435:17;19428:47;19492:131;19618:4;19492:131;:::i;:::-;19484:139;;19211:419;;;:::o;19636:182::-;19776:34;19772:1;19764:6;19760:14;19753:58;19636:182;:::o;19824:366::-;19966:3;19987:67;20051:2;20046:3;19987:67;:::i;:::-;19980:74;;20063:93;20152:3;20063:93;:::i;:::-;20181:2;20176:3;20172:12;20165:19;;19824:366;;;:::o;20196:419::-;20362:4;20400:2;20389:9;20385:18;20377:26;;20449:9;20443:4;20439:20;20435:1;20424:9;20420:17;20413:47;20477:131;20603:4;20477:131;:::i;:::-;20469:139;;20196:419;;;:::o;20621:223::-;20761:34;20757:1;20749:6;20745:14;20738:58;20830:6;20825:2;20817:6;20813:15;20806:31;20621:223;:::o;20850:366::-;20992:3;21013:67;21077:2;21072:3;21013:67;:::i;:::-;21006:74;;21089:93;21178:3;21089:93;:::i;:::-;21207:2;21202:3;21198:12;21191:19;;20850:366;;;:::o;21222:419::-;21388:4;21426:2;21415:9;21411:18;21403:26;;21475:9;21469:4;21465:20;21461:1;21450:9;21446:17;21439:47;21503:131;21629:4;21503:131;:::i;:::-;21495:139;;21222:419;;;:::o;21647:221::-;21787:34;21783:1;21775:6;21771:14;21764:58;21856:4;21851:2;21843:6;21839:15;21832:29;21647:221;:::o;21874:366::-;22016:3;22037:67;22101:2;22096:3;22037:67;:::i;:::-;22030:74;;22113:93;22202:3;22113:93;:::i;:::-;22231:2;22226:3;22222:12;22215:19;;21874:366;;;:::o;22246:419::-;22412:4;22450:2;22439:9;22435:18;22427:26;;22499:9;22493:4;22489:20;22485:1;22474:9;22470:17;22463:47;22527:131;22653:4;22527:131;:::i;:::-;22519:139;;22246:419;;;:::o;22671:179::-;22811:31;22807:1;22799:6;22795:14;22788:55;22671:179;:::o;22856:366::-;22998:3;23019:67;23083:2;23078:3;23019:67;:::i;:::-;23012:74;;23095:93;23184:3;23095:93;:::i;:::-;23213:2;23208:3;23204:12;23197:19;;22856:366;;;:::o;23228:419::-;23394:4;23432:2;23421:9;23417:18;23409:26;;23481:9;23475:4;23471:20;23467:1;23456:9;23452:17;23445:47;23509:131;23635:4;23509:131;:::i;:::-;23501:139;;23228:419;;;:::o;23653:172::-;23793:24;23789:1;23781:6;23777:14;23770:48;23653:172;:::o;23831:366::-;23973:3;23994:67;24058:2;24053:3;23994:67;:::i;:::-;23987:74;;24070:93;24159:3;24070:93;:::i;:::-;24188:2;24183:3;24179:12;24172:19;;23831:366;;;:::o;24203:419::-;24369:4;24407:2;24396:9;24392:18;24384:26;;24456:9;24450:4;24446:20;24442:1;24431:9;24427:17;24420:47;24484:131;24610:4;24484:131;:::i;:::-;24476:139;;24203:419;;;:::o;24628:240::-;24768:34;24764:1;24756:6;24752:14;24745:58;24837:23;24832:2;24824:6;24820:15;24813:48;24628:240;:::o;24874:366::-;25016:3;25037:67;25101:2;25096:3;25037:67;:::i;:::-;25030:74;;25113:93;25202:3;25113:93;:::i;:::-;25231:2;25226:3;25222:12;25215:19;;24874:366;;;:::o;25246:419::-;25412:4;25450:2;25439:9;25435:18;25427:26;;25499:9;25493:4;25489:20;25485:1;25474:9;25470:17;25463:47;25527:131;25653:4;25527:131;:::i;:::-;25519:139;;25246:419;;;:::o;25671:169::-;25811:21;25807:1;25799:6;25795:14;25788:45;25671:169;:::o;25846:366::-;25988:3;26009:67;26073:2;26068:3;26009:67;:::i;:::-;26002:74;;26085:93;26174:3;26085:93;:::i;:::-;26203:2;26198:3;26194:12;26187:19;;25846:366;;;:::o;26218:419::-;26384:4;26422:2;26411:9;26407:18;26399:26;;26471:9;26465:4;26461:20;26457:1;26446:9;26442:17;26435:47;26499:131;26625:4;26499:131;:::i;:::-;26491:139;;26218:419;;;:::o;26643:241::-;26783:34;26779:1;26771:6;26767:14;26760:58;26852:24;26847:2;26839:6;26835:15;26828:49;26643:241;:::o;26890:366::-;27032:3;27053:67;27117:2;27112:3;27053:67;:::i;:::-;27046:74;;27129:93;27218:3;27129:93;:::i;:::-;27247:2;27242:3;27238:12;27231:19;;26890:366;;;:::o;27262:419::-;27428:4;27466:2;27455:9;27451:18;27443:26;;27515:9;27509:4;27505:20;27501:1;27490:9;27486:17;27479:47;27543:131;27669:4;27543:131;:::i;:::-;27535:139;;27262:419;;;:::o;27687:194::-;27727:4;27747:20;27765:1;27747:20;:::i;:::-;27742:25;;27781:20;27799:1;27781:20;:::i;:::-;27776:25;;27825:1;27822;27818:9;27810:17;;27849:1;27843:4;27840:11;27837:37;;;27854:18;;:::i;:::-;27837:37;27687:194;;;;:::o;27887:224::-;28027:34;28023:1;28015:6;28011:14;28004:58;28096:7;28091:2;28083:6;28079:15;28072:32;27887:224;:::o;28117:366::-;28259:3;28280:67;28344:2;28339:3;28280:67;:::i;:::-;28273:74;;28356:93;28445:3;28356:93;:::i;:::-;28474:2;28469:3;28465:12;28458:19;;28117:366;;;:::o;28489:419::-;28655:4;28693:2;28682:9;28678:18;28670:26;;28742:9;28736:4;28732:20;28728:1;28717:9;28713:17;28706:47;28770:131;28896:4;28770:131;:::i;:::-;28762:139;;28489:419;;;:::o;28914:222::-;29054:34;29050:1;29042:6;29038:14;29031:58;29123:5;29118:2;29110:6;29106:15;29099:30;28914:222;:::o;29142:366::-;29284:3;29305:67;29369:2;29364:3;29305:67;:::i;:::-;29298:74;;29381:93;29470:3;29381:93;:::i;:::-;29499:2;29494:3;29490:12;29483:19;;29142:366;;;:::o;29514:419::-;29680:4;29718:2;29707:9;29703:18;29695:26;;29767:9;29761:4;29757:20;29753:1;29742:9;29738:17;29731:47;29795:131;29921:4;29795:131;:::i;:::-;29787:139;;29514:419;;;:::o;29939:225::-;30079:34;30075:1;30067:6;30063:14;30056:58;30148:8;30143:2;30135:6;30131:15;30124:33;29939:225;:::o;30170:366::-;30312:3;30333:67;30397:2;30392:3;30333:67;:::i;:::-;30326:74;;30409:93;30498:3;30409:93;:::i;:::-;30527:2;30522:3;30518:12;30511:19;;30170:366;;;:::o;30542:419::-;30708:4;30746:2;30735:9;30731:18;30723:26;;30795:9;30789:4;30785:20;30781:1;30770:9;30766:17;30759:47;30823:131;30949:4;30823:131;:::i;:::-;30815:139;;30542:419;;;:::o;30967:180::-;31015:77;31012:1;31005:88;31112:4;31109:1;31102:15;31136:4;31133:1;31126:15;31153:180;31201:77;31198:1;31191:88;31298:4;31295:1;31288:15;31322:4;31319:1;31312:15;31339:85;31384:7;31413:5;31402:16;;31339:85;;;:::o;31430:158::-;31488:9;31521:61;31539:42;31548:32;31574:5;31548:32;:::i;:::-;31539:42;:::i;:::-;31521:61;:::i;:::-;31508:74;;31430:158;;;:::o;31594:147::-;31689:45;31728:5;31689:45;:::i;:::-;31684:3;31677:58;31594:147;;:::o;31747:114::-;31814:6;31848:5;31842:12;31832:22;;31747:114;;;:::o;31867:184::-;31966:11;32000:6;31995:3;31988:19;32040:4;32035:3;32031:14;32016:29;;31867:184;;;;:::o;32057:132::-;32124:4;32147:3;32139:11;;32177:4;32172:3;32168:14;32160:22;;32057:132;;;:::o;32195:108::-;32272:24;32290:5;32272:24;:::i;:::-;32267:3;32260:37;32195:108;;:::o;32309:179::-;32378:10;32399:46;32441:3;32433:6;32399:46;:::i;:::-;32477:4;32472:3;32468:14;32454:28;;32309:179;;;;:::o;32494:113::-;32564:4;32596;32591:3;32587:14;32579:22;;32494:113;;;:::o;32643:732::-;32762:3;32791:54;32839:5;32791:54;:::i;:::-;32861:86;32940:6;32935:3;32861:86;:::i;:::-;32854:93;;32971:56;33021:5;32971:56;:::i;:::-;33050:7;33081:1;33066:284;33091:6;33088:1;33085:13;33066:284;;;33167:6;33161:13;33194:63;33253:3;33238:13;33194:63;:::i;:::-;33187:70;;33280:60;33333:6;33280:60;:::i;:::-;33270:70;;33126:224;33113:1;33110;33106:9;33101:14;;33066:284;;;33070:14;33366:3;33359:10;;32767:608;;;32643:732;;;;:::o;33381:831::-;33644:4;33682:3;33671:9;33667:19;33659:27;;33696:71;33764:1;33753:9;33749:17;33740:6;33696:71;:::i;:::-;33777:80;33853:2;33842:9;33838:18;33829:6;33777:80;:::i;:::-;33904:9;33898:4;33894:20;33889:2;33878:9;33874:18;33867:48;33932:108;34035:4;34026:6;33932:108;:::i;:::-;33924:116;;34050:72;34118:2;34107:9;34103:18;34094:6;34050:72;:::i;:::-;34132:73;34200:3;34189:9;34185:19;34176:6;34132:73;:::i;:::-;33381:831;;;;;;;;:::o

Swarm Source

ipfs://60185ef5fbc05498f6adfb1fa9a2bb7d0ccafd6b1a5be4f312e3a3e89d80e8a4
[ 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.