ETH Price: $3,456.43 (+2.32%)
Gas: 7 Gwei

Token

Pepe 2.0 (PEPE2.0)
 

Overview

Max Total Supply

469,000,000,000,000 PEPE2.0

Holders

11,704 (0.00%)

Market

Price

$0.00 @ 0.000000 ETH (+0.95%)

Onchain Market Cap

$20,465,284.00

Circulating Supply Market Cap

$20,465,450.00

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
Metamask: Swap Router
Balance
6,663,609,600 PEPE2.0

Value
$290.77 ( ~0.0841244111980074 Eth) [0.0014%]
0x881d40237659c251811cec9c364ef91dc08d300c
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Pepe 2.0 is a meme coin aiming to provide utilities secured, branding on point and an outreach second to none.

Market

Volume (24H):$3,419,907.00
Market Capitalization:$20,465,450.00
Circulating Supply:469,000,000,000,000.00 PEPE2.0
Market Data Source: Coinmarketcap

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
PEPE20

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-01-02
*/

/*
 * SPDX-License-Identifier: MIT
 * https://t.me/Pepe2Portal
 * https://pepe20.vip/
 * https://twitter.com/pepe2coineth
 */

pragma solidity 0.8.19;

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

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

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

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

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

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

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

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

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

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

interface IDexFactory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    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(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB, uint256 liquidity);

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);

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

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

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

contract PEPE20 is ERC20, Ownable {
    IDexRouter private immutable dexRouter;
    address public immutable dexPair;

    bool public tradingOpen = false;

    // Swapback
    bool private swapping;
    bool private swapbackEnabled = false;
    uint256 private swapBackValueMin;
    uint256 private swapBackValueMax;

    // Fees
    address private feeReceiver;

    uint256 private buyFee;
    uint256 private sellFee;

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

    mapping(address => bool) private isFeeExempt;
    mapping(address => bool) private automatedMarketMakerPairs;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount

    event TradingEnabled();
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event BuyFeeUpdated(uint256 newFee, uint256 oldFee);
    event SellFeeUpdated(uint256 newFee, uint256 oldFee);

    event SwapbackSettingsUpdated(
        bool enabled,
        uint256 swapBackValueMin,
        uint256 swapBackValueMax
    );

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

    constructor() ERC20("Pepe 2.0", "PEPE2.0") {
        IDexRouter _dexRouter = IDexRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        dexRouter = _dexRouter;

        dexPair = IDexFactory(_dexRouter.factory()).createPair(
            address(this),
            _dexRouter.WETH()
        );
        _setAutomatedMarketMakerPair(address(dexPair), true);

        uint256 _buyFee = 5;
        uint256 _sellFee = 5;

        uint256 totalSupply = 469_000_000_000_000 * 10 ** decimals();

        swapBackValueMin = (totalSupply * 1) / 1000;
        swapBackValueMax = (totalSupply * 1) / 100;

        buyFee = _buyFee;
        sellFee = _sellFee;
        feeReceiver = address(0xb45facF73FEa542Db61D12A2eb3141Ec1Db79664);

        // exclude from paying fees or having max transaction amount
        excludeFromTaxes(msg.sender, true);
        excludeFromTaxes(address(this), true);
        excludeFromTaxes(address(0xdead), true);
        excludeFromTaxes(feeReceiver, true);

        transferOwnership(msg.sender);

        /*
            _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 {}

    /**
     * @notice  Opens public trading for the token
     * @dev     onlyOwner.
     */
    function openTrading() external onlyOwner {
        tradingOpen = true;
        swapbackEnabled = true;
        emit TradingEnabled();
    }

    /**
     * @notice sets if swapback is enabled and sets the minimum and maximum amounts
     * @dev onlyOwner.
     * Emits an {SwapbackSettingsUpdated} event
     * @param _enabled If swapback is enabled
     * @param _min The minimum amount of tokens the contract must have before swapping tokens for ETH. Base 100000, so 1% = 1000.
     * @param _max The maximum amount of tokens the contract can swap for ETH. Base 100000, so 1% = 1000.
     */
    function setSwapBackSettings(
        bool _enabled,
        uint256 _min,
        uint256 _max
    ) external onlyOwner {
        require(
            _min >= 1,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(_max >= _min, "maximum amount cant be higher than minimum");

        swapbackEnabled = _enabled;
        swapBackValueMin = (totalSupply() * _min) / 100000;
        swapBackValueMax = (totalSupply() * _max) / 100000;
        emit SwapbackSettingsUpdated(_enabled, _min, _max);
    }

    /**
     * @notice Sets the fees for buys
     * @dev onlyOwner.
     * Emits a {BuyFeeUpdated} event
     * @param _newFee The fee for the marketing wallet. Has to be lower than the current fee
     */
    function setBuyFee(uint256 _newFee) external onlyOwner {
        require(
            _newFee <= buyFee,
            "New fee has to be lower than the current fee"
        );
        emit BuyFeeUpdated(_newFee, buyFee);
        buyFee = _newFee;
    }

    /**
     * @notice Sets the fees for sells
     * @dev onlyOwner.
     * Emits a {SellFeeUpdated} event
     * @param _newFee The fee for the marketing wallet. Has to be lower than the current fee
     */
    function setSellFee(uint256 _newFee) external onlyOwner {
        require(
            _newFee <= sellFee,
            "New fee has to be lower than the current fee"
        );
        emit SellFeeUpdated(_newFee, sellFee);
        sellFee = _newFee;
    }

    /**
     * @notice Sets if an address is excluded from fees
     * @dev onlyOwner.
     * Emits an {ExcludeFromFees} event
     * @param account The wallet to update
     * @param excluded If the wallet is excluded or not
     */
    function excludeFromTaxes(address account, bool excluded) public onlyOwner {
        isFeeExempt[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    /**
     * @notice Sets an address as a new liquidity pair. You probably dont want to do this.
     * @dev onlyOwner.
     * Emits a {SetAutomatedMarketMakerPair} event
     * @param pair the address of the pair
     * @param value If the pair is a automated market maker pair or not
     */
    function setAutomatedMarketMakerPair(
        address pair,
        bool value
    ) public onlyOwner {
        require(
            pair != dexPair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

    /**
     * @notice Sets the marketing wallet
     * @dev onlyOwner.
     * Emits an {feeReceiverUpdated} event
     * @param newWallet The new marketing wallet
     */
    function setFeeReceiver(address newWallet) external onlyOwner {
        emit feeReceiverUpdated(newWallet, feeReceiver);
        feeReceiver = newWallet;
    }

    /**
     * @notice  Information about the swapback settings
     * @return  _swapbackEnabled  if swapback is enabled
     * @return  _swapBackValueMin  the minimum amount of tokens in the contract balance to trigger swapback
     * @return  _swapBackValueMax  the maximum amount of tokens in the contract balance to trigger swapback
     */
    function swapbackInfo()
        external
        view
        returns (
            bool _swapbackEnabled,
            uint256 _swapBackValueMin,
            uint256 _swapBackValueMax
        )
    {
        _swapbackEnabled = swapbackEnabled;
        _swapBackValueMin = swapBackValueMin;
        _swapBackValueMax = swapBackValueMax;
    }

    /**
     * @notice Fees for buys, sells, and transfers
     * @return _buyFee The total fee for buys
     * @return _sellFee The total fee for sells
     * @return _feeReceiver The address that receives the fees
     */
    function feeInfo()
        external
        view
        returns (uint256 _buyFee, uint256 _sellFee, address _feeReceiver)
    {
        _buyFee = buyFee;
        _sellFee = sellFee;
        _feeReceiver = feeReceiver;
    }

    /**
     * @notice  If the wallet is excluded from fees and max transaction amount and if the wallet is a automated market maker pair
     * @param   _target  The wallet to check
     * @return  _isFeeExempt  If the wallet is excluded from fees
     * @return  _automatedMarketMakerPairs If the wallet is a automated market maker pair
     */
    function checkMappings(
        address _target
    )
        external
        view
        returns (bool _isFeeExempt, bool _automatedMarketMakerPairs)
    {
        _isFeeExempt = isFeeExempt[_target];
        _automatedMarketMakerPairs = automatedMarketMakerPairs[_target];
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

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

        if (
            from != owner() &&
            to != owner() &&
            to != address(0) &&
            to != address(0xdead) &&
            !swapping
        ) {
            if (!tradingOpen) {
                require(
                    isFeeExempt[from] || isFeeExempt[to],
                    "_transfer:: Trading is not active."
                );
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapBackValueMin;

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

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (isFeeExempt[from] || isFeeExempt[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] && sellFee > 0) {
                fees = (amount * sellFee) / (100);
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyFee > 0) {
                fees = (amount * buyFee) / (100);
            }

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

            amount -= fees;
        }

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

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

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

        // make the swap
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            feeReceiver,
            block.timestamp
        );
    }

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

        if (contractBalance > swapBackValueMax) {
            contractBalance = swapBackValueMax;
        }

        uint256 amountToSwapForETH = contractBalance;

        swapTokensForEth(amountToSwapForETH);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldFee","type":"uint256"}],"name":"BuyFeeUpdated","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":false,"internalType":"uint256","name":"newFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldFee","type":"uint256"}],"name":"SellFeeUpdated","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":"bool","name":"enabled","type":"bool"},{"indexed":false,"internalType":"uint256","name":"swapBackValueMin","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapBackValueMax","type":"uint256"}],"name":"SwapbackSettingsUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingEnabled","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":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"feeReceiverUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"}],"name":"checkMappings","outputs":[{"internalType":"bool","name":"_isFeeExempt","type":"bool"},{"internalType":"bool","name":"_automatedMarketMakerPairs","type":"bool"}],"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":"dexPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeInfo","outputs":[{"internalType":"uint256","name":"_buyFee","type":"uint256"},{"internalType":"uint256","name":"_sellFee","type":"uint256"},{"internalType":"address","name":"_feeReceiver","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newFee","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setFeeReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newFee","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_min","type":"uint256"},{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapbackInfo","outputs":[{"internalType":"bool","name":"_swapbackEnabled","type":"bool"},{"internalType":"uint256","name":"_swapBackValueMin","type":"uint256"},{"internalType":"uint256","name":"_swapBackValueMax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526000600560146101000a81548160ff0219169083151502179055506000600560166101000a81548160ff0219169083151502179055503480156200004757600080fd5b506040518060400160405280600881526020017f5065706520322e300000000000000000000000000000000000000000000000008152506040518060400160405280600781526020017f50455045322e30000000000000000000000000000000000000000000000000008152508160039081620000c5919062000c6a565b508060049081620000d7919062000c6a565b505050620000fa620000ee6200047d60201b60201c565b6200048560201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000193573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b9919062000dbb565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000221573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000247919062000dbb565b6040518363ffffffff1660e01b81526004016200026692919062000dfe565b6020604051808303816000875af115801562000286573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ac919062000dbb565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620002f460a05160016200054b60201b60201c565b600060059050600060059050600062000312620005ec60201b60201c565b600a62000320919062000fbb565b6601aa8d926650006200033491906200100c565b90506103e86001826200034891906200100c565b62000354919062001086565b60068190555060646001826200036b91906200100c565b62000377919062001086565b6007819055508260098190555081600a8190555073b45facf73fea542db61d12a2eb3141ec1db79664600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003f3336001620005f560201b60201c565b62000406306001620005f560201b60201c565b6200041b61dead6001620005f560201b60201c565b62000450600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620005f560201b60201c565b62000461336200072f60201b60201c565b6200047333826200084460201b60201c565b50505050620012ee565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60006012905090565b620006056200047d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200062b620009bc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000684576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200067b906200111f565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200072391906200115e565b60405180910390a25050565b6200073f6200047d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000765620009bc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620007be576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007b5906200111f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000830576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200082790620011f1565b60405180910390fd5b62000841816200048560201b60201c565b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620008b6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008ad9062001263565b60405180910390fd5b620008ca60008383620009e660201b60201c565b8060026000828254620008de919062001285565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000935919062001285565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200099c9190620012d1565b60405180910390a3620009b860008383620009eb60201b60201c565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000a7257607f821691505b60208210810362000a885762000a8762000a2a565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000af27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000ab3565b62000afe868362000ab3565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000b4b62000b4562000b3f8462000b16565b62000b20565b62000b16565b9050919050565b6000819050919050565b62000b678362000b2a565b62000b7f62000b768262000b52565b84845462000ac0565b825550505050565b600090565b62000b9662000b87565b62000ba381848462000b5c565b505050565b5b8181101562000bcb5762000bbf60008262000b8c565b60018101905062000ba9565b5050565b601f82111562000c1a5762000be48162000a8e565b62000bef8462000aa3565b8101602085101562000bff578190505b62000c1762000c0e8562000aa3565b83018262000ba8565b50505b505050565b600082821c905092915050565b600062000c3f6000198460080262000c1f565b1980831691505092915050565b600062000c5a838362000c2c565b9150826002028217905092915050565b62000c7582620009f0565b67ffffffffffffffff81111562000c915762000c90620009fb565b5b62000c9d825462000a59565b62000caa82828562000bcf565b600060209050601f83116001811462000ce2576000841562000ccd578287015190505b62000cd9858262000c4c565b86555062000d49565b601f19841662000cf28662000a8e565b60005b8281101562000d1c5784890151825560018201915060208501945060208101905062000cf5565b8683101562000d3c578489015162000d38601f89168262000c2c565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000d838262000d56565b9050919050565b62000d958162000d76565b811462000da157600080fd5b50565b60008151905062000db58162000d8a565b92915050565b60006020828403121562000dd45762000dd362000d51565b5b600062000de48482850162000da4565b91505092915050565b62000df88162000d76565b82525050565b600060408201905062000e15600083018562000ded565b62000e24602083018462000ded565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000eb95780860481111562000e915762000e9062000e2b565b5b600185161562000ea15780820291505b808102905062000eb18562000e5a565b945062000e71565b94509492505050565b60008262000ed4576001905062000fa7565b8162000ee4576000905062000fa7565b816001811462000efd576002811462000f085762000f3e565b600191505062000fa7565b60ff84111562000f1d5762000f1c62000e2b565b5b8360020a91508482111562000f375762000f3662000e2b565b5b5062000fa7565b5060208310610133831016604e8410600b841016171562000f785782820a90508381111562000f725762000f7162000e2b565b5b62000fa7565b62000f87848484600162000e67565b9250905081840481111562000fa15762000fa062000e2b565b5b81810290505b9392505050565b600060ff82169050919050565b600062000fc88262000b16565b915062000fd58362000fae565b9250620010047fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000ec2565b905092915050565b6000620010198262000b16565b9150620010268362000b16565b9250828202620010368162000b16565b9150828204841483151762001050576200104f62000e2b565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620010938262000b16565b9150620010a08362000b16565b925082620010b357620010b262001057565b5b828204905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062001107602083620010be565b91506200111482620010cf565b602082019050919050565b600060208201905081810360008301526200113a81620010f8565b9050919050565b60008115159050919050565b620011588162001141565b82525050565b60006020820190506200117560008301846200114d565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000620011d9602683620010be565b9150620011e6826200117b565b604082019050919050565b600060208201905081810360008301526200120c81620011ca565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200124b601f83620010be565b9150620012588262001213565b602082019050919050565b600060208201905081810360008301526200127e816200123c565b9050919050565b6000620012928262000b16565b91506200129f8362000b16565b9250828201905080821115620012ba57620012b962000e2b565b5b92915050565b620012cb8162000b16565b82525050565b6000602082019050620012e86000830184620012c0565b92915050565b60805160a05161354f6200132960003960008181610e2901526114e801526000818161233501528181612416015261243d015261354f6000f3fe6080604052600436106101855760003560e01c8063995b5aae116100d1578063d08893581161008a578063efdcd97411610064578063efdcd974146105a6578063f242ab41146105cf578063f2fde38b146105fa578063ffb54a99146106235761018c565b8063d088935814610502578063dd62ed3e1461052b578063e13b2007146105685761018c565b8063995b5aae146103ee5780639a7a23d61461041b578063a457c2d714610444578063a9059cbb14610481578063ae7ed567146104be578063c9567bf9146104eb5761018c565b8063313ce5671161013e578063715018a611610118578063715018a6146103585780638b4cee081461036f5780638da5cb5b1461039857806395d89b41146103c35761018c565b8063313ce567146102b357806339509351146102de57806370a082311461031b5761018c565b806306fdde0314610191578063095ea7b3146101bc5780630cc835a3146101f957806318160ddd14610222578063226036611461024d57806323b872dd146102765761018c565b3661018c57005b600080fd5b34801561019d57600080fd5b506101a661064e565b6040516101b39190612585565b60405180910390f35b3480156101c857600080fd5b506101e360048036038101906101de9190612640565b6106e0565b6040516101f0919061269b565b60405180910390f35b34801561020557600080fd5b50610220600480360381019061021b91906126b6565b6106fe565b005b34801561022e57600080fd5b50610237610804565b60405161024491906126f2565b60405180910390f35b34801561025957600080fd5b50610274600480360381019061026f9190612739565b61080e565b005b34801561028257600080fd5b5061029d60048036038101906102989190612779565b610933565b6040516102aa919061269b565b60405180910390f35b3480156102bf57600080fd5b506102c8610a2b565b6040516102d591906127e8565b60405180910390f35b3480156102ea57600080fd5b5061030560048036038101906103009190612640565b610a34565b604051610312919061269b565b60405180910390f35b34801561032757600080fd5b50610342600480360381019061033d9190612803565b610ae0565b60405161034f91906126f2565b60405180910390f35b34801561036457600080fd5b5061036d610b28565b005b34801561037b57600080fd5b50610396600480360381019061039191906126b6565b610bb0565b005b3480156103a457600080fd5b506103ad610cb6565b6040516103ba919061283f565b60405180910390f35b3480156103cf57600080fd5b506103d8610ce0565b6040516103e59190612585565b60405180910390f35b3480156103fa57600080fd5b50610403610d72565b6040516104129392919061285a565b60405180910390f35b34801561042757600080fd5b50610442600480360381019061043d9190612739565b610dab565b005b34801561045057600080fd5b5061046b60048036038101906104669190612640565b610ec3565b604051610478919061269b565b60405180910390f35b34801561048d57600080fd5b506104a860048036038101906104a39190612640565b610fae565b6040516104b5919061269b565b60405180910390f35b3480156104ca57600080fd5b506104d3610fcc565b6040516104e293929190612891565b60405180910390f35b3480156104f757600080fd5b50610500610ff2565b005b34801561050e57600080fd5b50610529600480360381019061052491906128c8565b6110d2565b005b34801561053757600080fd5b50610552600480360381019061054d919061291b565b61127d565b60405161055f91906126f2565b60405180910390f35b34801561057457600080fd5b5061058f600480360381019061058a9190612803565b611304565b60405161059d92919061295b565b60405180910390f35b3480156105b257600080fd5b506105cd60048036038101906105c89190612803565b6113aa565b005b3480156105db57600080fd5b506105e46114e6565b6040516105f1919061283f565b60405180910390f35b34801561060657600080fd5b50610621600480360381019061061c9190612803565b61150a565b005b34801561062f57600080fd5b50610638611601565b604051610645919061269b565b60405180910390f35b60606003805461065d906129b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610689906129b3565b80156106d65780601f106106ab576101008083540402835291602001916106d6565b820191906000526020600020905b8154815290600101906020018083116106b957829003601f168201915b5050505050905090565b60006106f46106ed611614565b848461161c565b6001905092915050565b610706611614565b73ffffffffffffffffffffffffffffffffffffffff16610724610cb6565b73ffffffffffffffffffffffffffffffffffffffff161461077a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077190612a30565b60405180910390fd5b6009548111156107bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b690612ac2565b60405180910390fd5b7f28e297c7c282931a994191b735b01eaf17558295f761512a7047f4e1b8dc3b0b816009546040516107f2929190612ae2565b60405180910390a18060098190555050565b6000600254905090565b610816611614565b73ffffffffffffffffffffffffffffffffffffffff16610834610cb6565b73ffffffffffffffffffffffffffffffffffffffff161461088a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088190612a30565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051610927919061269b565b60405180910390a25050565b60006109408484846117e5565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061098b611614565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610a0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0290612b7d565b60405180910390fd5b610a1f85610a17611614565b85840361161c565b60019150509392505050565b60006012905090565b6000610ad6610a41611614565b848460016000610a4f611614565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ad19190612bcc565b61161c565b6001905092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b30611614565b73ffffffffffffffffffffffffffffffffffffffff16610b4e610cb6565b73ffffffffffffffffffffffffffffffffffffffff1614610ba4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9b90612a30565b60405180910390fd5b610bae6000611e68565b565b610bb8611614565b73ffffffffffffffffffffffffffffffffffffffff16610bd6610cb6565b73ffffffffffffffffffffffffffffffffffffffff1614610c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2390612a30565b60405180910390fd5b600a54811115610c71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6890612ac2565b60405180910390fd5b7f5bafec153d96f8ef37761b64348732b41a6b477401d244a5070f9f82d689adce81600a54604051610ca4929190612ae2565b60405180910390a180600a8190555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610cef906129b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610d1b906129b3565b8015610d685780601f10610d3d57610100808354040283529160200191610d68565b820191906000526020600020905b815481529060010190602001808311610d4b57829003601f168201915b5050505050905090565b60008060006009549250600a549150600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050909192565b610db3611614565b73ffffffffffffffffffffffffffffffffffffffff16610dd1610cb6565b73ffffffffffffffffffffffffffffffffffffffff1614610e27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1e90612a30565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610eb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eac90612c72565b60405180910390fd5b610ebf8282611f2e565b5050565b60008060016000610ed2611614565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610f8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8690612d04565b60405180910390fd5b610fa3610f9a611614565b8585840361161c565b600191505092915050565b6000610fc2610fbb611614565b84846117e5565b6001905092915050565b6000806000600560169054906101000a900460ff16925060065491506007549050909192565b610ffa611614565b73ffffffffffffffffffffffffffffffffffffffff16611018610cb6565b73ffffffffffffffffffffffffffffffffffffffff161461106e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106590612a30565b60405180910390fd5b6001600560146101000a81548160ff0219169083151502179055506001600560166101000a81548160ff0219169083151502179055507f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c760405160405180910390a1565b6110da611614565b73ffffffffffffffffffffffffffffffffffffffff166110f8610cb6565b73ffffffffffffffffffffffffffffffffffffffff161461114e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114590612a30565b60405180910390fd5b6001821015611192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118990612d96565b60405180910390fd5b818110156111d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cc90612e28565b60405180910390fd5b82600560166101000a81548160ff021916908315150217905550620186a0826111fc610804565b6112069190612e48565b6112109190612eb9565b600681905550620186a081611223610804565b61122d9190612e48565b6112379190612eb9565b6007819055507f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c77983838360405161127093929190612891565b60405180910390a1505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600080600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169150600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050915091565b6113b2611614565b73ffffffffffffffffffffffffffffffffffffffff166113d0610cb6565b73ffffffffffffffffffffffffffffffffffffffff1614611426576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141d90612a30565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f94223efa5e0ef633fcdce676def839a7ea220f7f45a1c693a4540846bc1ee14d60405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b611512611614565b73ffffffffffffffffffffffffffffffffffffffff16611530610cb6565b73ffffffffffffffffffffffffffffffffffffffff1614611586576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157d90612a30565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036115f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ec90612f5c565b60405180910390fd5b6115fe81611e68565b50565b600560149054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361168b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168290612fee565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f190613080565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516117d891906126f2565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184b90613112565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ba906131a4565b60405180910390fd5b600081036118dc576118d783836000611fcf565b611e63565b6118e4610cb6565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156119525750611922610cb6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561198b5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156119c5575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156119de5750600560159054906101000a900460ff16155b15611ad957600560149054906101000a900460ff16611ad857600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611a985750600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611ad7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ace90613236565b60405180910390fd5b5b5b6000611ae430610ae0565b905060006006548210159050808015611b095750600560169054906101000a900460ff165b8015611b225750600560159054906101000a900460ff16155b8015611b785750600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611bce5750600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611c245750600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611c68576001600560156101000a81548160ff021916908315150217905550611c4c61224e565b6000600560156101000a81548160ff0219169083151502179055505b6000600560159054906101000a900460ff16159050600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611d1e5750600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611d2857600090505b60008115611e5357600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611d8b57506000600a54115b15611db1576064600a5486611da09190612e48565b611daa9190612eb9565b9050611e2f565b600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611e0c57506000600954115b15611e2e57606460095486611e219190612e48565b611e2b9190612eb9565b90505b5b6000811115611e4457611e43873083611fcf565b5b8085611e509190613256565b94505b611e5e878787611fcf565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361203e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203590613112565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a4906131a4565b60405180910390fd5b6120b883838361228c565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561213e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612135906132fc565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121d19190612bcc565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161223591906126f2565b60405180910390a3612248848484612291565b50505050565b600061225930610ae0565b905060008103612269575061228a565b6007548111156122795760075490505b600081905061228781612296565b50505b565b505050565b505050565b6000600267ffffffffffffffff8111156122b3576122b261331c565b5b6040519080825280602002602001820160405280156122e15781602001602082028036833780820191505090505b50905030816000815181106122f9576122f861334b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561239e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123c2919061338f565b816001815181106123d6576123d561334b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061243b307f00000000000000000000000000000000000000000000000000000000000000008461161c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac94783600084600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b81526004016124bf9594939291906134bf565b600060405180830381600087803b1580156124d957600080fd5b505af11580156124ed573d6000803e3d6000fd5b505050505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561252f578082015181840152602081019050612514565b60008484015250505050565b6000601f19601f8301169050919050565b6000612557826124f5565b6125618185612500565b9350612571818560208601612511565b61257a8161253b565b840191505092915050565b6000602082019050818103600083015261259f818461254c565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006125d7826125ac565b9050919050565b6125e7816125cc565b81146125f257600080fd5b50565b600081359050612604816125de565b92915050565b6000819050919050565b61261d8161260a565b811461262857600080fd5b50565b60008135905061263a81612614565b92915050565b60008060408385031215612657576126566125a7565b5b6000612665858286016125f5565b92505060206126768582860161262b565b9150509250929050565b60008115159050919050565b61269581612680565b82525050565b60006020820190506126b0600083018461268c565b92915050565b6000602082840312156126cc576126cb6125a7565b5b60006126da8482850161262b565b91505092915050565b6126ec8161260a565b82525050565b600060208201905061270760008301846126e3565b92915050565b61271681612680565b811461272157600080fd5b50565b6000813590506127338161270d565b92915050565b600080604083850312156127505761274f6125a7565b5b600061275e858286016125f5565b925050602061276f85828601612724565b9150509250929050565b600080600060608486031215612792576127916125a7565b5b60006127a0868287016125f5565b93505060206127b1868287016125f5565b92505060406127c28682870161262b565b9150509250925092565b600060ff82169050919050565b6127e2816127cc565b82525050565b60006020820190506127fd60008301846127d9565b92915050565b600060208284031215612819576128186125a7565b5b6000612827848285016125f5565b91505092915050565b612839816125cc565b82525050565b60006020820190506128546000830184612830565b92915050565b600060608201905061286f60008301866126e3565b61287c60208301856126e3565b6128896040830184612830565b949350505050565b60006060820190506128a6600083018661268c565b6128b360208301856126e3565b6128c060408301846126e3565b949350505050565b6000806000606084860312156128e1576128e06125a7565b5b60006128ef86828701612724565b93505060206129008682870161262b565b92505060406129118682870161262b565b9150509250925092565b60008060408385031215612932576129316125a7565b5b6000612940858286016125f5565b9250506020612951858286016125f5565b9150509250929050565b6000604082019050612970600083018561268c565b61297d602083018461268c565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806129cb57607f821691505b6020821081036129de576129dd612984565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612a1a602083612500565b9150612a25826129e4565b602082019050919050565b60006020820190508181036000830152612a4981612a0d565b9050919050565b7f4e6577206665652068617320746f206265206c6f776572207468616e2074686560008201527f2063757272656e74206665650000000000000000000000000000000000000000602082015250565b6000612aac602c83612500565b9150612ab782612a50565b604082019050919050565b60006020820190508181036000830152612adb81612a9f565b9050919050565b6000604082019050612af760008301856126e3565b612b0460208301846126e3565b9392505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000612b67602883612500565b9150612b7282612b0b565b604082019050919050565b60006020820190508181036000830152612b9681612b5a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612bd78261260a565b9150612be28361260a565b9250828201905080821115612bfa57612bf9612b9d565b5b92915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000612c5c603983612500565b9150612c6782612c00565b604082019050919050565b60006020820190508181036000830152612c8b81612c4f565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612cee602583612500565b9150612cf982612c92565b604082019050919050565b60006020820190508181036000830152612d1d81612ce1565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000612d80603583612500565b9150612d8b82612d24565b604082019050919050565b60006020820190508181036000830152612daf81612d73565b9050919050565b7f6d6178696d756d20616d6f756e742063616e742062652068696768657220746860008201527f616e206d696e696d756d00000000000000000000000000000000000000000000602082015250565b6000612e12602a83612500565b9150612e1d82612db6565b604082019050919050565b60006020820190508181036000830152612e4181612e05565b9050919050565b6000612e538261260a565b9150612e5e8361260a565b9250828202612e6c8161260a565b91508282048414831517612e8357612e82612b9d565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612ec48261260a565b9150612ecf8361260a565b925082612edf57612ede612e8a565b5b828204905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612f46602683612500565b9150612f5182612eea565b604082019050919050565b60006020820190508181036000830152612f7581612f39565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612fd8602483612500565b9150612fe382612f7c565b604082019050919050565b6000602082019050818103600083015261300781612fcb565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061306a602283612500565b91506130758261300e565b604082019050919050565b600060208201905081810360008301526130998161305d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006130fc602583612500565b9150613107826130a0565b604082019050919050565b6000602082019050818103600083015261312b816130ef565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061318e602383612500565b915061319982613132565b604082019050919050565b600060208201905081810360008301526131bd81613181565b9050919050565b7f5f7472616e736665723a3a2054726164696e67206973206e6f7420616374697660008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b6000613220602283612500565b915061322b826131c4565b604082019050919050565b6000602082019050818103600083015261324f81613213565b9050919050565b60006132618261260a565b915061326c8361260a565b925082820390508181111561328457613283612b9d565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006132e6602683612500565b91506132f18261328a565b604082019050919050565b60006020820190508181036000830152613315816132d9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050613389816125de565b92915050565b6000602082840312156133a5576133a46125a7565b5b60006133b38482850161337a565b91505092915050565b6000819050919050565b6000819050919050565b60006133eb6133e66133e1846133bc565b6133c6565b61260a565b9050919050565b6133fb816133d0565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613436816125cc565b82525050565b6000613448838361342d565b60208301905092915050565b6000602082019050919050565b600061346c82613401565b613476818561340c565b93506134818361341d565b8060005b838110156134b2578151613499888261343c565b97506134a483613454565b925050600181019050613485565b5085935050505092915050565b600060a0820190506134d460008301886126e3565b6134e160208301876133f2565b81810360408301526134f38186613461565b90506135026060830185612830565b61350f60808301846126e3565b969550505050505056fea264697066735822122090a44015638900c79c9c68d6bb82ca66ef4e59ba843e078039422b904521654364736f6c63430008130033

Deployed Bytecode

0x6080604052600436106101855760003560e01c8063995b5aae116100d1578063d08893581161008a578063efdcd97411610064578063efdcd974146105a6578063f242ab41146105cf578063f2fde38b146105fa578063ffb54a99146106235761018c565b8063d088935814610502578063dd62ed3e1461052b578063e13b2007146105685761018c565b8063995b5aae146103ee5780639a7a23d61461041b578063a457c2d714610444578063a9059cbb14610481578063ae7ed567146104be578063c9567bf9146104eb5761018c565b8063313ce5671161013e578063715018a611610118578063715018a6146103585780638b4cee081461036f5780638da5cb5b1461039857806395d89b41146103c35761018c565b8063313ce567146102b357806339509351146102de57806370a082311461031b5761018c565b806306fdde0314610191578063095ea7b3146101bc5780630cc835a3146101f957806318160ddd14610222578063226036611461024d57806323b872dd146102765761018c565b3661018c57005b600080fd5b34801561019d57600080fd5b506101a661064e565b6040516101b39190612585565b60405180910390f35b3480156101c857600080fd5b506101e360048036038101906101de9190612640565b6106e0565b6040516101f0919061269b565b60405180910390f35b34801561020557600080fd5b50610220600480360381019061021b91906126b6565b6106fe565b005b34801561022e57600080fd5b50610237610804565b60405161024491906126f2565b60405180910390f35b34801561025957600080fd5b50610274600480360381019061026f9190612739565b61080e565b005b34801561028257600080fd5b5061029d60048036038101906102989190612779565b610933565b6040516102aa919061269b565b60405180910390f35b3480156102bf57600080fd5b506102c8610a2b565b6040516102d591906127e8565b60405180910390f35b3480156102ea57600080fd5b5061030560048036038101906103009190612640565b610a34565b604051610312919061269b565b60405180910390f35b34801561032757600080fd5b50610342600480360381019061033d9190612803565b610ae0565b60405161034f91906126f2565b60405180910390f35b34801561036457600080fd5b5061036d610b28565b005b34801561037b57600080fd5b50610396600480360381019061039191906126b6565b610bb0565b005b3480156103a457600080fd5b506103ad610cb6565b6040516103ba919061283f565b60405180910390f35b3480156103cf57600080fd5b506103d8610ce0565b6040516103e59190612585565b60405180910390f35b3480156103fa57600080fd5b50610403610d72565b6040516104129392919061285a565b60405180910390f35b34801561042757600080fd5b50610442600480360381019061043d9190612739565b610dab565b005b34801561045057600080fd5b5061046b60048036038101906104669190612640565b610ec3565b604051610478919061269b565b60405180910390f35b34801561048d57600080fd5b506104a860048036038101906104a39190612640565b610fae565b6040516104b5919061269b565b60405180910390f35b3480156104ca57600080fd5b506104d3610fcc565b6040516104e293929190612891565b60405180910390f35b3480156104f757600080fd5b50610500610ff2565b005b34801561050e57600080fd5b50610529600480360381019061052491906128c8565b6110d2565b005b34801561053757600080fd5b50610552600480360381019061054d919061291b565b61127d565b60405161055f91906126f2565b60405180910390f35b34801561057457600080fd5b5061058f600480360381019061058a9190612803565b611304565b60405161059d92919061295b565b60405180910390f35b3480156105b257600080fd5b506105cd60048036038101906105c89190612803565b6113aa565b005b3480156105db57600080fd5b506105e46114e6565b6040516105f1919061283f565b60405180910390f35b34801561060657600080fd5b50610621600480360381019061061c9190612803565b61150a565b005b34801561062f57600080fd5b50610638611601565b604051610645919061269b565b60405180910390f35b60606003805461065d906129b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610689906129b3565b80156106d65780601f106106ab576101008083540402835291602001916106d6565b820191906000526020600020905b8154815290600101906020018083116106b957829003601f168201915b5050505050905090565b60006106f46106ed611614565b848461161c565b6001905092915050565b610706611614565b73ffffffffffffffffffffffffffffffffffffffff16610724610cb6565b73ffffffffffffffffffffffffffffffffffffffff161461077a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077190612a30565b60405180910390fd5b6009548111156107bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b690612ac2565b60405180910390fd5b7f28e297c7c282931a994191b735b01eaf17558295f761512a7047f4e1b8dc3b0b816009546040516107f2929190612ae2565b60405180910390a18060098190555050565b6000600254905090565b610816611614565b73ffffffffffffffffffffffffffffffffffffffff16610834610cb6565b73ffffffffffffffffffffffffffffffffffffffff161461088a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088190612a30565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051610927919061269b565b60405180910390a25050565b60006109408484846117e5565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061098b611614565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610a0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0290612b7d565b60405180910390fd5b610a1f85610a17611614565b85840361161c565b60019150509392505050565b60006012905090565b6000610ad6610a41611614565b848460016000610a4f611614565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ad19190612bcc565b61161c565b6001905092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b30611614565b73ffffffffffffffffffffffffffffffffffffffff16610b4e610cb6565b73ffffffffffffffffffffffffffffffffffffffff1614610ba4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9b90612a30565b60405180910390fd5b610bae6000611e68565b565b610bb8611614565b73ffffffffffffffffffffffffffffffffffffffff16610bd6610cb6565b73ffffffffffffffffffffffffffffffffffffffff1614610c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2390612a30565b60405180910390fd5b600a54811115610c71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6890612ac2565b60405180910390fd5b7f5bafec153d96f8ef37761b64348732b41a6b477401d244a5070f9f82d689adce81600a54604051610ca4929190612ae2565b60405180910390a180600a8190555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610cef906129b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610d1b906129b3565b8015610d685780601f10610d3d57610100808354040283529160200191610d68565b820191906000526020600020905b815481529060010190602001808311610d4b57829003601f168201915b5050505050905090565b60008060006009549250600a549150600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050909192565b610db3611614565b73ffffffffffffffffffffffffffffffffffffffff16610dd1610cb6565b73ffffffffffffffffffffffffffffffffffffffff1614610e27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1e90612a30565b60405180910390fd5b7f00000000000000000000000061bc0e018a1332107f5d7f730fa39f703e24688173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610eb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eac90612c72565b60405180910390fd5b610ebf8282611f2e565b5050565b60008060016000610ed2611614565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610f8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8690612d04565b60405180910390fd5b610fa3610f9a611614565b8585840361161c565b600191505092915050565b6000610fc2610fbb611614565b84846117e5565b6001905092915050565b6000806000600560169054906101000a900460ff16925060065491506007549050909192565b610ffa611614565b73ffffffffffffffffffffffffffffffffffffffff16611018610cb6565b73ffffffffffffffffffffffffffffffffffffffff161461106e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106590612a30565b60405180910390fd5b6001600560146101000a81548160ff0219169083151502179055506001600560166101000a81548160ff0219169083151502179055507f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c760405160405180910390a1565b6110da611614565b73ffffffffffffffffffffffffffffffffffffffff166110f8610cb6565b73ffffffffffffffffffffffffffffffffffffffff161461114e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114590612a30565b60405180910390fd5b6001821015611192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118990612d96565b60405180910390fd5b818110156111d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cc90612e28565b60405180910390fd5b82600560166101000a81548160ff021916908315150217905550620186a0826111fc610804565b6112069190612e48565b6112109190612eb9565b600681905550620186a081611223610804565b61122d9190612e48565b6112379190612eb9565b6007819055507f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c77983838360405161127093929190612891565b60405180910390a1505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600080600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169150600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050915091565b6113b2611614565b73ffffffffffffffffffffffffffffffffffffffff166113d0610cb6565b73ffffffffffffffffffffffffffffffffffffffff1614611426576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141d90612a30565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f94223efa5e0ef633fcdce676def839a7ea220f7f45a1c693a4540846bc1ee14d60405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f00000000000000000000000061bc0e018a1332107f5d7f730fa39f703e24688181565b611512611614565b73ffffffffffffffffffffffffffffffffffffffff16611530610cb6565b73ffffffffffffffffffffffffffffffffffffffff1614611586576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157d90612a30565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036115f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ec90612f5c565b60405180910390fd5b6115fe81611e68565b50565b600560149054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361168b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168290612fee565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f190613080565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516117d891906126f2565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184b90613112565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ba906131a4565b60405180910390fd5b600081036118dc576118d783836000611fcf565b611e63565b6118e4610cb6565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156119525750611922610cb6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561198b5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156119c5575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156119de5750600560159054906101000a900460ff16155b15611ad957600560149054906101000a900460ff16611ad857600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611a985750600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611ad7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ace90613236565b60405180910390fd5b5b5b6000611ae430610ae0565b905060006006548210159050808015611b095750600560169054906101000a900460ff165b8015611b225750600560159054906101000a900460ff16155b8015611b785750600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611bce5750600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611c245750600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611c68576001600560156101000a81548160ff021916908315150217905550611c4c61224e565b6000600560156101000a81548160ff0219169083151502179055505b6000600560159054906101000a900460ff16159050600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611d1e5750600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611d2857600090505b60008115611e5357600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611d8b57506000600a54115b15611db1576064600a5486611da09190612e48565b611daa9190612eb9565b9050611e2f565b600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611e0c57506000600954115b15611e2e57606460095486611e219190612e48565b611e2b9190612eb9565b90505b5b6000811115611e4457611e43873083611fcf565b5b8085611e509190613256565b94505b611e5e878787611fcf565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361203e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203590613112565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a4906131a4565b60405180910390fd5b6120b883838361228c565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561213e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612135906132fc565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121d19190612bcc565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161223591906126f2565b60405180910390a3612248848484612291565b50505050565b600061225930610ae0565b905060008103612269575061228a565b6007548111156122795760075490505b600081905061228781612296565b50505b565b505050565b505050565b6000600267ffffffffffffffff8111156122b3576122b261331c565b5b6040519080825280602002602001820160405280156122e15781602001602082028036833780820191505090505b50905030816000815181106122f9576122f861334b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561239e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123c2919061338f565b816001815181106123d6576123d561334b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061243b307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461161c565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac94783600084600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b81526004016124bf9594939291906134bf565b600060405180830381600087803b1580156124d957600080fd5b505af11580156124ed573d6000803e3d6000fd5b505050505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561252f578082015181840152602081019050612514565b60008484015250505050565b6000601f19601f8301169050919050565b6000612557826124f5565b6125618185612500565b9350612571818560208601612511565b61257a8161253b565b840191505092915050565b6000602082019050818103600083015261259f818461254c565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006125d7826125ac565b9050919050565b6125e7816125cc565b81146125f257600080fd5b50565b600081359050612604816125de565b92915050565b6000819050919050565b61261d8161260a565b811461262857600080fd5b50565b60008135905061263a81612614565b92915050565b60008060408385031215612657576126566125a7565b5b6000612665858286016125f5565b92505060206126768582860161262b565b9150509250929050565b60008115159050919050565b61269581612680565b82525050565b60006020820190506126b0600083018461268c565b92915050565b6000602082840312156126cc576126cb6125a7565b5b60006126da8482850161262b565b91505092915050565b6126ec8161260a565b82525050565b600060208201905061270760008301846126e3565b92915050565b61271681612680565b811461272157600080fd5b50565b6000813590506127338161270d565b92915050565b600080604083850312156127505761274f6125a7565b5b600061275e858286016125f5565b925050602061276f85828601612724565b9150509250929050565b600080600060608486031215612792576127916125a7565b5b60006127a0868287016125f5565b93505060206127b1868287016125f5565b92505060406127c28682870161262b565b9150509250925092565b600060ff82169050919050565b6127e2816127cc565b82525050565b60006020820190506127fd60008301846127d9565b92915050565b600060208284031215612819576128186125a7565b5b6000612827848285016125f5565b91505092915050565b612839816125cc565b82525050565b60006020820190506128546000830184612830565b92915050565b600060608201905061286f60008301866126e3565b61287c60208301856126e3565b6128896040830184612830565b949350505050565b60006060820190506128a6600083018661268c565b6128b360208301856126e3565b6128c060408301846126e3565b949350505050565b6000806000606084860312156128e1576128e06125a7565b5b60006128ef86828701612724565b93505060206129008682870161262b565b92505060406129118682870161262b565b9150509250925092565b60008060408385031215612932576129316125a7565b5b6000612940858286016125f5565b9250506020612951858286016125f5565b9150509250929050565b6000604082019050612970600083018561268c565b61297d602083018461268c565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806129cb57607f821691505b6020821081036129de576129dd612984565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612a1a602083612500565b9150612a25826129e4565b602082019050919050565b60006020820190508181036000830152612a4981612a0d565b9050919050565b7f4e6577206665652068617320746f206265206c6f776572207468616e2074686560008201527f2063757272656e74206665650000000000000000000000000000000000000000602082015250565b6000612aac602c83612500565b9150612ab782612a50565b604082019050919050565b60006020820190508181036000830152612adb81612a9f565b9050919050565b6000604082019050612af760008301856126e3565b612b0460208301846126e3565b9392505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000612b67602883612500565b9150612b7282612b0b565b604082019050919050565b60006020820190508181036000830152612b9681612b5a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612bd78261260a565b9150612be28361260a565b9250828201905080821115612bfa57612bf9612b9d565b5b92915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000612c5c603983612500565b9150612c6782612c00565b604082019050919050565b60006020820190508181036000830152612c8b81612c4f565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612cee602583612500565b9150612cf982612c92565b604082019050919050565b60006020820190508181036000830152612d1d81612ce1565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000612d80603583612500565b9150612d8b82612d24565b604082019050919050565b60006020820190508181036000830152612daf81612d73565b9050919050565b7f6d6178696d756d20616d6f756e742063616e742062652068696768657220746860008201527f616e206d696e696d756d00000000000000000000000000000000000000000000602082015250565b6000612e12602a83612500565b9150612e1d82612db6565b604082019050919050565b60006020820190508181036000830152612e4181612e05565b9050919050565b6000612e538261260a565b9150612e5e8361260a565b9250828202612e6c8161260a565b91508282048414831517612e8357612e82612b9d565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612ec48261260a565b9150612ecf8361260a565b925082612edf57612ede612e8a565b5b828204905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612f46602683612500565b9150612f5182612eea565b604082019050919050565b60006020820190508181036000830152612f7581612f39565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612fd8602483612500565b9150612fe382612f7c565b604082019050919050565b6000602082019050818103600083015261300781612fcb565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061306a602283612500565b91506130758261300e565b604082019050919050565b600060208201905081810360008301526130998161305d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006130fc602583612500565b9150613107826130a0565b604082019050919050565b6000602082019050818103600083015261312b816130ef565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061318e602383612500565b915061319982613132565b604082019050919050565b600060208201905081810360008301526131bd81613181565b9050919050565b7f5f7472616e736665723a3a2054726164696e67206973206e6f7420616374697660008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b6000613220602283612500565b915061322b826131c4565b604082019050919050565b6000602082019050818103600083015261324f81613213565b9050919050565b60006132618261260a565b915061326c8361260a565b925082820390508181111561328457613283612b9d565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006132e6602683612500565b91506132f18261328a565b604082019050919050565b60006020820190508181036000830152613315816132d9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050613389816125de565b92915050565b6000602082840312156133a5576133a46125a7565b5b60006133b38482850161337a565b91505092915050565b6000819050919050565b6000819050919050565b60006133eb6133e66133e1846133bc565b6133c6565b61260a565b9050919050565b6133fb816133d0565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613436816125cc565b82525050565b6000613448838361342d565b60208301905092915050565b6000602082019050919050565b600061346c82613401565b613476818561340c565b93506134818361341d565b8060005b838110156134b2578151613499888261343c565b97506134a483613454565b925050600181019050613485565b5085935050505092915050565b600060a0820190506134d460008301886126e3565b6134e160208301876133f2565b81810360408301526134f38186613461565b90506135026060830185612830565b61350f60808301846126e3565b969550505050505056fea264697066735822122090a44015638900c79c9c68d6bb82ca66ef4e59ba843e078039422b904521654364736f6c63430008130033

Deployed Bytecode Sourcemap

18771:11344:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4369:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6602:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22872:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5489:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23865:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7274:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5331:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8208:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5660:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15708:103;;;;;;;;;;;;;:::i;:::-;;23353:263;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15057:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4588:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25949:232;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;24351:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8997:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6016:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25358:353;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;21482:144;;;;;;;;;;;;;:::i;:::-;;22095:556;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6279:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26542:291;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;24837:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18857:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15966:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18898:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4369:100;4423:13;4456:5;4449:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4369:100;:::o;6602:194::-;6710:4;6727:39;6736:12;:10;:12::i;:::-;6750:7;6759:6;6727:8;:39::i;:::-;6784:4;6777:11;;6602:194;;;;:::o;22872:258::-;15288:12;:10;:12::i;:::-;15277:23;;:7;:5;:7::i;:::-;:23;;;15269:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22971:6:::1;;22960:7;:17;;22938:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;23065:30;23079:7;23088:6;;23065:30;;;;;;;:::i;:::-;;;;;;;;23115:7;23106:6;:16;;;;22872:258:::0;:::o;5489:108::-;5550:7;5577:12;;5570:19;;5489:108;:::o;23865:175::-;15288:12;:10;:12::i;:::-;15277:23;;:7;:5;:7::i;:::-;:23;;;15269:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23974:8:::1;23951:11;:20;23963:7;23951:20;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;24014:7;23998:34;;;24023:8;23998:34;;;;;;:::i;:::-;;;;;;;;23865:175:::0;;:::o;7274:529::-;7414:4;7431:36;7441:6;7449:9;7460:6;7431:9;:36::i;:::-;7480:24;7507:11;:19;7519:6;7507:19;;;;;;;;;;;;;;;:33;7527:12;:10;:12::i;:::-;7507:33;;;;;;;;;;;;;;;;7480:60;;7593:6;7573:16;:26;;7551:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;7703:57;7712:6;7720:12;:10;:12::i;:::-;7753:6;7734:16;:25;7703:8;:57::i;:::-;7791:4;7784:11;;;7274:529;;;;;:::o;5331:93::-;5389:5;5414:2;5407:9;;5331:93;:::o;8208:290::-;8321:4;8338:130;8361:12;:10;:12::i;:::-;8388:7;8447:10;8410:11;:25;8422:12;:10;:12::i;:::-;8410:25;;;;;;;;;;;;;;;:34;8436:7;8410:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;8338:8;:130::i;:::-;8486:4;8479:11;;8208:290;;;;:::o;5660:143::-;5750:7;5777:9;:18;5787:7;5777:18;;;;;;;;;;;;;;;;5770:25;;5660:143;;;:::o;15708:103::-;15288:12;:10;:12::i;:::-;15277:23;;:7;:5;:7::i;:::-;:23;;;15269:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15773:30:::1;15800:1;15773:18;:30::i;:::-;15708:103::o:0;23353:263::-;15288:12;:10;:12::i;:::-;15277:23;;:7;:5;:7::i;:::-;:23;;;15269:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23453:7:::1;;23442;:18;;23420:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;23548:32;23563:7;23572;;23548:32;;;;;;;:::i;:::-;;;;;;;;23601:7;23591;:17;;;;23353:263:::0;:::o;15057:87::-;15103:7;15130:6;;;;;;;;;;;15123:13;;15057:87;:::o;4588:104::-;4644:13;4677:7;4670:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4588:104;:::o;25949:232::-;26018:15;26035:16;26053:20;26101:6;;26091:16;;26129:7;;26118:18;;26162:11;;;;;;;;;;;26147:26;;25949:232;;;:::o;24351:300::-;15288:12;:10;:12::i;:::-;15277:23;;:7;:5;:7::i;:::-;:23;;;15269:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24497:7:::1;24489:15;;:4;:15;;::::0;24467:122:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;24602:41;24631:4;24637:5;24602:28;:41::i;:::-;24351:300:::0;;:::o;8997:475::-;9115:4;9132:24;9159:11;:25;9171:12;:10;:12::i;:::-;9159:25;;;;;;;;;;;;;;;:34;9185:7;9159:34;;;;;;;;;;;;;;;;9132:61;;9246:15;9226:16;:35;;9204:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;9362:67;9371:12;:10;:12::i;:::-;9385:7;9413:15;9394:16;:34;9362:8;:67::i;:::-;9460:4;9453:11;;;8997:475;;;;:::o;6016:200::-;6127:4;6144:42;6154:12;:10;:12::i;:::-;6168:9;6179:6;6144:9;:42::i;:::-;6204:4;6197:11;;6016:200;;;;:::o;25358:353::-;25446:21;25482:25;25522;25594:15;;;;;;;;;;;25575:34;;25640:16;;25620:36;;25687:16;;25667:36;;25358:353;;;:::o;21482:144::-;15288:12;:10;:12::i;:::-;15277:23;;:7;:5;:7::i;:::-;:23;;;15269:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21549:4:::1;21535:11;;:18;;;;;;;;;;;;;;;;;;21582:4;21564:15;;:22;;;;;;;;;;;;;;;;;;21602:16;;;;;;;;;;21482:144::o:0;22095:556::-;15288:12;:10;:12::i;:::-;15277:23;;:7;:5;:7::i;:::-;:23;;;15269:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22261:1:::1;22253:4;:9;;22231:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;22370:4;22362;:12;;22354:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22452:8;22434:15;;:26;;;;;;;;;;;;;;;;;;22515:6;22507:4;22491:13;:11;:13::i;:::-;:20;;;;:::i;:::-;22490:31;;;;:::i;:::-;22471:16;:50;;;;22576:6;22568:4;22552:13;:11;:13::i;:::-;:20;;;;:::i;:::-;22551:31;;;;:::i;:::-;22532:16;:50;;;;22598:45;22622:8;22632:4;22638;22598:45;;;;;;;;:::i;:::-;;;;;;;;22095:556:::0;;;:::o;6279:176::-;6393:7;6420:11;:18;6432:5;6420:18;;;;;;;;;;;;;;;:27;6439:7;6420:27;;;;;;;;;;;;;;;;6413:34;;6279:176;;;;:::o;26542:291::-;26648:17;26667:31;26731:11;:20;26743:7;26731:20;;;;;;;;;;;;;;;;;;;;;;;;;26716:35;;26791:25;:34;26817:7;26791:34;;;;;;;;;;;;;;;;;;;;;;;;;26762:63;;26542:291;;;:::o;24837:162::-;15288:12;:10;:12::i;:::-;15277:23;;:7;:5;:7::i;:::-;:23;;;15269:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24945:11:::1;;;;;;;;;;;24915:42;;24934:9;24915:42;;;;;;;;;;;;24982:9;24968:11;;:23;;;;;;;;;;;;;;;;;;24837:162:::0;:::o;18857:32::-;;;:::o;15966:238::-;15288:12;:10;:12::i;:::-;15277:23;;:7;:5;:7::i;:::-;:23;;;15269:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16089:1:::1;16069:22;;:8;:22;;::::0;16047:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;16168:28;16187:8;16168:18;:28::i;:::-;15966:238:::0;:::o;18898:31::-;;;;;;;;;;;;;:::o;3375:98::-;3428:7;3455:10;3448:17;;3375:98;:::o;12780:380::-;12933:1;12916:19;;:5;:19;;;12908:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13014:1;12995:21;;:7;:21;;;12987:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13098:6;13068:11;:18;13080:5;13068:18;;;;;;;;;;;;;;;:27;13087:7;13068:27;;;;;;;;;;;;;;;:36;;;;13136:7;13120:32;;13129:5;13120:32;;;13145:6;13120:32;;;;;;:::i;:::-;;;;;;;;12780:380;;;:::o;27037:2105::-;27185:1;27169:18;;:4;:18;;;27161:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27262:1;27248:16;;:2;:16;;;27240:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;27331:1;27321:6;:11;27317:93;;27349:28;27365:4;27371:2;27375:1;27349:15;:28::i;:::-;27392:7;;27317:93;27448:7;:5;:7::i;:::-;27440:15;;:4;:15;;;;:45;;;;;27478:7;:5;:7::i;:::-;27472:13;;:2;:13;;;;27440:45;:78;;;;;27516:1;27502:16;;:2;:16;;;;27440:78;:116;;;;;27549:6;27535:21;;:2;:21;;;;27440:116;:142;;;;;27574:8;;;;;;;;;;;27573:9;27440:142;27422:395;;;27614:11;;;;;;;;;;;27609:197;;27676:11;:17;27688:4;27676:17;;;;;;;;;;;;;;;;;;;;;;;;;:36;;;;27697:11;:15;27709:2;27697:15;;;;;;;;;;;;;;;;;;;;;;;;;27676:36;27646:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;27609:197;27422:395;27829:28;27860:24;27878:4;27860:9;:24::i;:::-;27829:55;;27897:12;27936:16;;27912:20;:40;;27897:55;;27983:7;:39;;;;;28007:15;;;;;;;;;;;27983:39;:65;;;;;28040:8;;;;;;;;;;;28039:9;27983:65;:114;;;;;28066:25;:31;28092:4;28066:31;;;;;;;;;;;;;;;;;;;;;;;;;28065:32;27983:114;:149;;;;;28115:11;:17;28127:4;28115:17;;;;;;;;;;;;;;;;;;;;;;;;;28114:18;27983:149;:182;;;;;28150:11;:15;28162:2;28150:15;;;;;;;;;;;;;;;;;;;;;;;;;28149:16;27983:182;27965:314;;;28203:4;28192:8;;:15;;;;;;;;;;;;;;;;;;28224:10;:8;:10::i;:::-;28262:5;28251:8;;:16;;;;;;;;;;;;;;;;;;27965:314;28291:12;28307:8;;;;;;;;;;;28306:9;28291:24;;28417:11;:17;28429:4;28417:17;;;;;;;;;;;;;;;;;;;;;;;;;:36;;;;28438:11;:15;28450:2;28438:15;;;;;;;;;;;;;;;;;;;;;;;;;28417:36;28413:84;;;28480:5;28470:15;;28413:84;28509:12;28614:7;28610:479;;;28666:25;:29;28692:2;28666:29;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;;;28709:1;28699:7;;:11;28666:44;28662:278;;;28760:3;28748:7;;28739:6;:16;;;;:::i;:::-;28738:26;;;;:::i;:::-;28731:33;;28662:278;;;28826:25;:31;28852:4;28826:31;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;28870:1;28861:6;;:10;28826:45;28822:118;;;28920:3;28909:6;;28900;:15;;;;:::i;:::-;28899:25;;;;:::i;:::-;28892:32;;28822:118;28662:278;28967:1;28960:4;:8;28956:91;;;28989:42;29005:4;29019;29026;28989:15;:42::i;:::-;28956:91;29073:4;29063:14;;;;;:::i;:::-;;;28610:479;29101:33;29117:4;29123:2;29127:6;29101:15;:33::i;:::-;27150:1992;;;;27037:2105;;;;:::o;16364:191::-;16438:16;16457:6;;;;;;;;;;;16438:25;;16483:8;16474:6;;:17;;;;;;;;;;;;;;;;;;16538:8;16507:40;;16528:8;16507:40;;;;;;;;;;;;16427:128;16364:191;:::o;26841:188::-;26958:5;26924:25;:31;26950:4;26924:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;27015:5;26981:40;;27009:4;26981:40;;;;;;;;;;;;26841:188;;:::o;9962:770::-;10120:1;10102:20;;:6;:20;;;10094:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;10204:1;10183:23;;:9;:23;;;10175:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;10259:47;10280:6;10288:9;10299:6;10259:20;:47::i;:::-;10319:21;10343:9;:17;10353:6;10343:17;;;;;;;;;;;;;;;;10319:41;;10410:6;10393:13;:23;;10371:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;10554:6;10538:13;:22;10518:9;:17;10528:6;10518:17;;;;;;;;;;;;;;;:42;;;;10606:6;10582:9;:20;10592:9;10582:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;10647:9;10630:35;;10639:6;10630:35;;;10658:6;10630:35;;;;;;:::i;:::-;;;;;;;;10678:46;10698:6;10706:9;10717:6;10678:19;:46::i;:::-;10083:649;9962:770;;;:::o;29727:385::-;29766:23;29792:24;29810:4;29792:9;:24::i;:::-;29766:50;;29850:1;29831:15;:20;29827:59;;29868:7;;;29827:59;29920:16;;29902:15;:34;29898:101;;;29971:16;;29953:34;;29898:101;30011:26;30040:15;30011:44;;30068:36;30085:18;30068:16;:36::i;:::-;29755:357;;29727:385;:::o;13760:125::-;;;;:::o;14489:124::-;;;;:::o;29150:569::-;29276:21;29314:1;29300:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29276:40;;29345:4;29327;29332:1;29327:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;29371:9;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29361:4;29366:1;29361:7;;;;;;;;:::i;:::-;;;;;;;:26;;;;;;;;;;;29400:56;29417:4;29432:9;29444:11;29400:8;:56::i;:::-;29495:9;:60;;;29570:11;29596:1;29640:4;29659:11;;;;;;;;;;;29685:15;29495:216;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29205:514;29150:569;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:118::-;3868:24;3886:5;3868:24;:::i;:::-;3863:3;3856:37;3781:118;;:::o;3905:222::-;3998:4;4036:2;4025:9;4021:18;4013:26;;4049:71;4117:1;4106:9;4102:17;4093:6;4049:71;:::i;:::-;3905:222;;;;:::o;4133:116::-;4203:21;4218:5;4203:21;:::i;:::-;4196:5;4193:32;4183:60;;4239:1;4236;4229:12;4183:60;4133:116;:::o;4255:133::-;4298:5;4336:6;4323:20;4314:29;;4352:30;4376:5;4352:30;:::i;:::-;4255:133;;;;:::o;4394:468::-;4459:6;4467;4516:2;4504:9;4495:7;4491:23;4487:32;4484:119;;;4522:79;;:::i;:::-;4484:119;4642:1;4667:53;4712:7;4703:6;4692:9;4688:22;4667:53;:::i;:::-;4657:63;;4613:117;4769:2;4795:50;4837:7;4828:6;4817:9;4813:22;4795:50;:::i;:::-;4785:60;;4740:115;4394:468;;;;;:::o;4868:619::-;4945:6;4953;4961;5010:2;4998:9;4989:7;4985:23;4981:32;4978:119;;;5016:79;;:::i;:::-;4978:119;5136:1;5161:53;5206:7;5197:6;5186:9;5182:22;5161:53;:::i;:::-;5151:63;;5107:117;5263:2;5289:53;5334:7;5325:6;5314:9;5310:22;5289:53;:::i;:::-;5279:63;;5234:118;5391:2;5417:53;5462:7;5453:6;5442:9;5438:22;5417:53;:::i;:::-;5407:63;;5362:118;4868:619;;;;;:::o;5493:86::-;5528:7;5568:4;5561:5;5557:16;5546:27;;5493:86;;;:::o;5585:112::-;5668:22;5684:5;5668:22;:::i;:::-;5663:3;5656:35;5585:112;;:::o;5703:214::-;5792:4;5830:2;5819:9;5815:18;5807:26;;5843:67;5907:1;5896:9;5892:17;5883:6;5843:67;:::i;:::-;5703:214;;;;:::o;5923:329::-;5982:6;6031:2;6019:9;6010:7;6006:23;6002:32;5999:119;;;6037:79;;:::i;:::-;5999:119;6157:1;6182:53;6227:7;6218:6;6207:9;6203:22;6182:53;:::i;:::-;6172:63;;6128:117;5923:329;;;;:::o;6258:118::-;6345:24;6363:5;6345:24;:::i;:::-;6340:3;6333:37;6258:118;;:::o;6382:222::-;6475:4;6513:2;6502:9;6498:18;6490:26;;6526:71;6594:1;6583:9;6579:17;6570:6;6526:71;:::i;:::-;6382:222;;;;:::o;6610:442::-;6759:4;6797:2;6786:9;6782:18;6774:26;;6810:71;6878:1;6867:9;6863:17;6854:6;6810:71;:::i;:::-;6891:72;6959:2;6948:9;6944:18;6935:6;6891:72;:::i;:::-;6973;7041:2;7030:9;7026:18;7017:6;6973:72;:::i;:::-;6610:442;;;;;;:::o;7058:430::-;7201:4;7239:2;7228:9;7224:18;7216:26;;7252:65;7314:1;7303:9;7299:17;7290:6;7252:65;:::i;:::-;7327:72;7395:2;7384:9;7380:18;7371:6;7327:72;:::i;:::-;7409;7477:2;7466:9;7462:18;7453:6;7409:72;:::i;:::-;7058:430;;;;;;:::o;7494:613::-;7568:6;7576;7584;7633:2;7621:9;7612:7;7608:23;7604:32;7601:119;;;7639:79;;:::i;:::-;7601:119;7759:1;7784:50;7826:7;7817:6;7806:9;7802:22;7784:50;:::i;:::-;7774:60;;7730:114;7883:2;7909:53;7954:7;7945:6;7934:9;7930:22;7909:53;:::i;:::-;7899:63;;7854:118;8011:2;8037:53;8082:7;8073:6;8062:9;8058:22;8037:53;:::i;:::-;8027:63;;7982:118;7494:613;;;;;:::o;8113:474::-;8181:6;8189;8238:2;8226:9;8217:7;8213:23;8209:32;8206:119;;;8244:79;;:::i;:::-;8206:119;8364:1;8389:53;8434:7;8425:6;8414:9;8410:22;8389:53;:::i;:::-;8379:63;;8335:117;8491:2;8517:53;8562:7;8553:6;8542:9;8538:22;8517:53;:::i;:::-;8507:63;;8462:118;8113:474;;;;;:::o;8593:308::-;8702:4;8740:2;8729:9;8725:18;8717:26;;8753:65;8815:1;8804:9;8800:17;8791:6;8753:65;:::i;:::-;8828:66;8890:2;8879:9;8875:18;8866:6;8828:66;:::i;:::-;8593:308;;;;;:::o;8907:180::-;8955:77;8952:1;8945:88;9052:4;9049:1;9042:15;9076:4;9073:1;9066:15;9093:320;9137:6;9174:1;9168:4;9164:12;9154:22;;9221:1;9215:4;9211:12;9242:18;9232:81;;9298:4;9290:6;9286:17;9276:27;;9232:81;9360:2;9352:6;9349:14;9329:18;9326:38;9323:84;;9379:18;;:::i;:::-;9323:84;9144:269;9093:320;;;:::o;9419:182::-;9559:34;9555:1;9547:6;9543:14;9536:58;9419:182;:::o;9607:366::-;9749:3;9770:67;9834:2;9829:3;9770:67;:::i;:::-;9763:74;;9846:93;9935:3;9846:93;:::i;:::-;9964:2;9959:3;9955:12;9948:19;;9607:366;;;:::o;9979:419::-;10145:4;10183:2;10172:9;10168:18;10160:26;;10232:9;10226:4;10222:20;10218:1;10207:9;10203:17;10196:47;10260:131;10386:4;10260:131;:::i;:::-;10252:139;;9979:419;;;:::o;10404:231::-;10544:34;10540:1;10532:6;10528:14;10521:58;10613:14;10608:2;10600:6;10596:15;10589:39;10404:231;:::o;10641:366::-;10783:3;10804:67;10868:2;10863:3;10804:67;:::i;:::-;10797:74;;10880:93;10969:3;10880:93;:::i;:::-;10998:2;10993:3;10989:12;10982:19;;10641:366;;;:::o;11013:419::-;11179:4;11217:2;11206:9;11202:18;11194:26;;11266:9;11260:4;11256:20;11252:1;11241:9;11237:17;11230:47;11294:131;11420:4;11294:131;:::i;:::-;11286:139;;11013:419;;;:::o;11438:332::-;11559:4;11597:2;11586:9;11582:18;11574:26;;11610:71;11678:1;11667:9;11663:17;11654:6;11610:71;:::i;:::-;11691:72;11759:2;11748:9;11744:18;11735:6;11691:72;:::i;:::-;11438:332;;;;;:::o;11776:227::-;11916:34;11912:1;11904:6;11900:14;11893:58;11985:10;11980:2;11972:6;11968:15;11961:35;11776:227;:::o;12009:366::-;12151:3;12172:67;12236:2;12231:3;12172:67;:::i;:::-;12165:74;;12248:93;12337:3;12248:93;:::i;:::-;12366:2;12361:3;12357:12;12350:19;;12009:366;;;:::o;12381:419::-;12547:4;12585:2;12574:9;12570:18;12562:26;;12634:9;12628:4;12624:20;12620:1;12609:9;12605:17;12598:47;12662:131;12788:4;12662:131;:::i;:::-;12654:139;;12381:419;;;:::o;12806:180::-;12854:77;12851:1;12844:88;12951:4;12948:1;12941:15;12975:4;12972:1;12965:15;12992:191;13032:3;13051:20;13069:1;13051:20;:::i;:::-;13046:25;;13085:20;13103:1;13085:20;:::i;:::-;13080:25;;13128:1;13125;13121:9;13114:16;;13149:3;13146:1;13143:10;13140:36;;;13156:18;;:::i;:::-;13140:36;12992:191;;;;:::o;13189:244::-;13329:34;13325:1;13317:6;13313:14;13306:58;13398:27;13393:2;13385:6;13381:15;13374:52;13189:244;:::o;13439:366::-;13581:3;13602:67;13666:2;13661:3;13602:67;:::i;:::-;13595:74;;13678:93;13767:3;13678:93;:::i;:::-;13796:2;13791:3;13787:12;13780:19;;13439:366;;;:::o;13811:419::-;13977:4;14015:2;14004:9;14000:18;13992:26;;14064:9;14058:4;14054:20;14050:1;14039:9;14035:17;14028:47;14092:131;14218:4;14092:131;:::i;:::-;14084:139;;13811:419;;;:::o;14236:224::-;14376:34;14372:1;14364:6;14360:14;14353:58;14445:7;14440:2;14432:6;14428:15;14421:32;14236:224;:::o;14466:366::-;14608:3;14629:67;14693:2;14688:3;14629:67;:::i;:::-;14622:74;;14705:93;14794:3;14705:93;:::i;:::-;14823:2;14818:3;14814:12;14807:19;;14466:366;;;:::o;14838:419::-;15004:4;15042:2;15031:9;15027:18;15019:26;;15091:9;15085:4;15081:20;15077:1;15066:9;15062:17;15055:47;15119:131;15245:4;15119:131;:::i;:::-;15111:139;;14838:419;;;:::o;15263:240::-;15403:34;15399:1;15391:6;15387:14;15380:58;15472:23;15467:2;15459:6;15455:15;15448:48;15263:240;:::o;15509:366::-;15651:3;15672:67;15736:2;15731:3;15672:67;:::i;:::-;15665:74;;15748:93;15837:3;15748:93;:::i;:::-;15866:2;15861:3;15857:12;15850:19;;15509:366;;;:::o;15881:419::-;16047:4;16085:2;16074:9;16070:18;16062:26;;16134:9;16128:4;16124:20;16120:1;16109:9;16105:17;16098:47;16162:131;16288:4;16162:131;:::i;:::-;16154:139;;15881:419;;;:::o;16306:229::-;16446:34;16442:1;16434:6;16430:14;16423:58;16515:12;16510:2;16502:6;16498:15;16491:37;16306:229;:::o;16541:366::-;16683:3;16704:67;16768:2;16763:3;16704:67;:::i;:::-;16697:74;;16780:93;16869:3;16780:93;:::i;:::-;16898:2;16893:3;16889:12;16882:19;;16541:366;;;:::o;16913:419::-;17079:4;17117:2;17106:9;17102:18;17094:26;;17166:9;17160:4;17156:20;17152:1;17141:9;17137:17;17130:47;17194:131;17320:4;17194:131;:::i;:::-;17186:139;;16913:419;;;:::o;17338:410::-;17378:7;17401:20;17419:1;17401:20;:::i;:::-;17396:25;;17435:20;17453:1;17435:20;:::i;:::-;17430:25;;17490:1;17487;17483:9;17512:30;17530:11;17512:30;:::i;:::-;17501:41;;17691:1;17682:7;17678:15;17675:1;17672:22;17652:1;17645:9;17625:83;17602:139;;17721:18;;:::i;:::-;17602:139;17386:362;17338:410;;;;:::o;17754:180::-;17802:77;17799:1;17792:88;17899:4;17896:1;17889:15;17923:4;17920:1;17913:15;17940:185;17980:1;17997:20;18015:1;17997:20;:::i;:::-;17992:25;;18031:20;18049:1;18031:20;:::i;:::-;18026:25;;18070:1;18060:35;;18075:18;;:::i;:::-;18060:35;18117:1;18114;18110:9;18105:14;;17940:185;;;;:::o;18131:225::-;18271:34;18267:1;18259:6;18255:14;18248:58;18340:8;18335:2;18327:6;18323:15;18316:33;18131:225;:::o;18362:366::-;18504:3;18525:67;18589:2;18584:3;18525:67;:::i;:::-;18518:74;;18601:93;18690:3;18601:93;:::i;:::-;18719:2;18714:3;18710:12;18703:19;;18362:366;;;:::o;18734:419::-;18900:4;18938:2;18927:9;18923:18;18915:26;;18987:9;18981:4;18977:20;18973:1;18962:9;18958:17;18951:47;19015:131;19141:4;19015:131;:::i;:::-;19007:139;;18734:419;;;:::o;19159:223::-;19299:34;19295:1;19287:6;19283:14;19276:58;19368:6;19363:2;19355:6;19351:15;19344:31;19159:223;:::o;19388:366::-;19530:3;19551:67;19615:2;19610:3;19551:67;:::i;:::-;19544:74;;19627:93;19716:3;19627:93;:::i;:::-;19745:2;19740:3;19736:12;19729:19;;19388:366;;;:::o;19760:419::-;19926:4;19964:2;19953:9;19949:18;19941:26;;20013:9;20007:4;20003:20;19999:1;19988:9;19984:17;19977:47;20041:131;20167:4;20041:131;:::i;:::-;20033:139;;19760:419;;;:::o;20185:221::-;20325:34;20321:1;20313:6;20309:14;20302:58;20394:4;20389:2;20381:6;20377:15;20370:29;20185:221;:::o;20412:366::-;20554:3;20575:67;20639:2;20634:3;20575:67;:::i;:::-;20568:74;;20651:93;20740:3;20651:93;:::i;:::-;20769:2;20764:3;20760:12;20753:19;;20412:366;;;:::o;20784:419::-;20950:4;20988:2;20977:9;20973:18;20965:26;;21037:9;21031:4;21027:20;21023:1;21012:9;21008:17;21001:47;21065:131;21191:4;21065:131;:::i;:::-;21057:139;;20784:419;;;:::o;21209:224::-;21349:34;21345:1;21337:6;21333:14;21326:58;21418:7;21413:2;21405:6;21401:15;21394:32;21209:224;:::o;21439:366::-;21581:3;21602:67;21666:2;21661:3;21602:67;:::i;:::-;21595:74;;21678:93;21767:3;21678:93;:::i;:::-;21796:2;21791:3;21787:12;21780:19;;21439:366;;;:::o;21811:419::-;21977:4;22015:2;22004:9;22000:18;21992:26;;22064:9;22058:4;22054:20;22050:1;22039:9;22035:17;22028:47;22092:131;22218:4;22092:131;:::i;:::-;22084:139;;21811:419;;;:::o;22236:222::-;22376:34;22372:1;22364:6;22360:14;22353:58;22445:5;22440:2;22432:6;22428:15;22421:30;22236:222;:::o;22464:366::-;22606:3;22627:67;22691:2;22686:3;22627:67;:::i;:::-;22620:74;;22703:93;22792:3;22703:93;:::i;:::-;22821:2;22816:3;22812:12;22805:19;;22464:366;;;:::o;22836:419::-;23002:4;23040:2;23029:9;23025:18;23017:26;;23089:9;23083:4;23079:20;23075:1;23064:9;23060:17;23053:47;23117:131;23243:4;23117:131;:::i;:::-;23109:139;;22836:419;;;:::o;23261:221::-;23401:34;23397:1;23389:6;23385:14;23378:58;23470:4;23465:2;23457:6;23453:15;23446:29;23261:221;:::o;23488:366::-;23630:3;23651:67;23715:2;23710:3;23651:67;:::i;:::-;23644:74;;23727:93;23816:3;23727:93;:::i;:::-;23845:2;23840:3;23836:12;23829:19;;23488:366;;;:::o;23860:419::-;24026:4;24064:2;24053:9;24049:18;24041:26;;24113:9;24107:4;24103:20;24099:1;24088:9;24084:17;24077:47;24141:131;24267:4;24141:131;:::i;:::-;24133:139;;23860:419;;;:::o;24285:194::-;24325:4;24345:20;24363:1;24345:20;:::i;:::-;24340:25;;24379:20;24397:1;24379:20;:::i;:::-;24374:25;;24423:1;24420;24416:9;24408:17;;24447:1;24441:4;24438:11;24435:37;;;24452:18;;:::i;:::-;24435:37;24285:194;;;;:::o;24485:225::-;24625:34;24621:1;24613:6;24609:14;24602:58;24694:8;24689:2;24681:6;24677:15;24670:33;24485:225;:::o;24716:366::-;24858:3;24879:67;24943:2;24938:3;24879:67;:::i;:::-;24872:74;;24955:93;25044:3;24955:93;:::i;:::-;25073:2;25068:3;25064:12;25057:19;;24716:366;;;:::o;25088:419::-;25254:4;25292:2;25281:9;25277:18;25269:26;;25341:9;25335:4;25331:20;25327:1;25316:9;25312:17;25305:47;25369:131;25495:4;25369:131;:::i;:::-;25361:139;;25088:419;;;:::o;25513:180::-;25561:77;25558:1;25551:88;25658:4;25655:1;25648:15;25682:4;25679:1;25672:15;25699:180;25747:77;25744:1;25737:88;25844:4;25841:1;25834:15;25868:4;25865:1;25858:15;25885:143;25942:5;25973:6;25967:13;25958:22;;25989:33;26016:5;25989:33;:::i;:::-;25885:143;;;;:::o;26034:351::-;26104:6;26153:2;26141:9;26132:7;26128:23;26124:32;26121:119;;;26159:79;;:::i;:::-;26121:119;26279:1;26304:64;26360:7;26351:6;26340:9;26336:22;26304:64;:::i;:::-;26294:74;;26250:128;26034:351;;;;:::o;26391:85::-;26436:7;26465:5;26454:16;;26391:85;;;:::o;26482:60::-;26510:3;26531:5;26524:12;;26482:60;;;:::o;26548:158::-;26606:9;26639:61;26657:42;26666:32;26692:5;26666:32;:::i;:::-;26657:42;:::i;:::-;26639:61;:::i;:::-;26626:74;;26548:158;;;:::o;26712:147::-;26807:45;26846:5;26807:45;:::i;:::-;26802:3;26795:58;26712:147;;:::o;26865:114::-;26932:6;26966:5;26960:12;26950:22;;26865:114;;;:::o;26985:184::-;27084:11;27118:6;27113:3;27106:19;27158:4;27153:3;27149:14;27134:29;;26985:184;;;;:::o;27175:132::-;27242:4;27265:3;27257:11;;27295:4;27290:3;27286:14;27278:22;;27175:132;;;:::o;27313:108::-;27390:24;27408:5;27390:24;:::i;:::-;27385:3;27378:37;27313:108;;:::o;27427:179::-;27496:10;27517:46;27559:3;27551:6;27517:46;:::i;:::-;27595:4;27590:3;27586:14;27572:28;;27427:179;;;;:::o;27612:113::-;27682:4;27714;27709:3;27705:14;27697:22;;27612:113;;;:::o;27761:732::-;27880:3;27909:54;27957:5;27909:54;:::i;:::-;27979:86;28058:6;28053:3;27979:86;:::i;:::-;27972:93;;28089:56;28139:5;28089:56;:::i;:::-;28168:7;28199:1;28184:284;28209:6;28206:1;28203:13;28184:284;;;28285:6;28279:13;28312:63;28371:3;28356:13;28312:63;:::i;:::-;28305:70;;28398:60;28451:6;28398:60;:::i;:::-;28388:70;;28244:224;28231:1;28228;28224:9;28219:14;;28184:284;;;28188:14;28484:3;28477:10;;27885:608;;;27761:732;;;;:::o;28499:831::-;28762:4;28800:3;28789:9;28785:19;28777:27;;28814:71;28882:1;28871:9;28867:17;28858:6;28814:71;:::i;:::-;28895:80;28971:2;28960:9;28956:18;28947:6;28895:80;:::i;:::-;29022:9;29016:4;29012:20;29007:2;28996:9;28992:18;28985:48;29050:108;29153:4;29144:6;29050:108;:::i;:::-;29042:116;;29168:72;29236:2;29225:9;29221:18;29212:6;29168:72;:::i;:::-;29250:73;29318:3;29307:9;29303:19;29294:6;29250:73;:::i;:::-;28499:831;;;;;;;;:::o

Swarm Source

ipfs://90a44015638900c79c9c68d6bb82ca66ef4e59ba843e078039422b9045216543
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.