ETH Price: $3,226.57 (+1.00%)

Token

X-Coin (X)
 

Overview

Max Total Supply

10,000,000,000 X

Holders

381

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000000000000000001 X

Value
$0.00
0xB49617b323F42132afA3F211c99cEaAD6DFd46c7
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
XCOIN

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 10000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

pragma solidity 0.8.19;

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

    function WETH() external pure returns (address);

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

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

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);

    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountA, uint amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountToken, uint amountETH);

    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapExactETHForTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable returns (uint[] memory amounts);

    function swapTokensForExactETH(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapExactTokensForETH(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapETHForExactTokens(
        uint amountOut,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable returns (uint[] memory amounts);

    function quote(
        uint amountA,
        uint reserveA,
        uint reserveB
    ) external pure returns (uint amountB);

    function getAmountOut(
        uint amountIn,
        uint reserveIn,
        uint reserveOut
    ) external pure returns (uint amountOut);

    function getAmountIn(
        uint amountOut,
        uint reserveIn,
        uint reserveOut
    ) external pure returns (uint amountIn);

    function getAmountsOut(
        uint amountIn,
        address[] calldata path
    ) external view returns (uint[] memory amounts);

    function getAmountsIn(
        uint amountOut,
        address[] calldata path
    ) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);

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

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

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

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

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

    function allPairs(uint) external view returns (address pair);

    function allPairsLength() external view returns (uint);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

library Address {
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

    function functionCall(
        address target,
        bytes memory data
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                0,
                "Address: low-level call failed"
            );
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        (bool success, bytes memory returndata) = target.call{value: value}(
            data
        );
        return
            verifyCallResultFromTarget(
                target,
                success,
                returndata,
                errorMessage
            );
    }

    function functionStaticCall(
        address target,
        bytes memory data
    ) internal view returns (bytes memory) {
        return
            functionStaticCall(
                target,
                data,
                "Address: low-level static call failed"
            );
    }

    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return
            verifyCallResultFromTarget(
                target,
                success,
                returndata,
                errorMessage
            );
    }

    function functionDelegateCall(
        address target,
        bytes memory data
    ) internal returns (bytes memory) {
        return
            functionDelegateCall(
                target,
                data,
                "Address: low-level delegate call failed"
            );
    }

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return
            verifyCallResultFromTarget(
                target,
                success,
                returndata,
                errorMessage
            );
    }

    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(
        bytes memory returndata,
        string memory errorMessage
    ) private pure {
        if (returndata.length > 0) {
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

interface IERC20Permit {
    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    function nonces(address owner) external view returns (uint256);

    // solhint-disable-next-line func-name-mixedcase
    function DOMAIN_SEPARATOR() external view returns (bytes32);
}

interface IERC20 {
    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );

    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address to, uint256 amount) external returns (bool);

    function allowance(
        address owner,
        address spender
    ) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
}

library SafeERC20 {
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.transfer.selector, to, value)
        );
    }

    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.transferFrom.selector, from, to, value)
        );
    }

    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.approve.selector, spender, value)
        );
    }

    function safeIncreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 oldAllowance = token.allowance(address(this), spender);
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(
                token.approve.selector,
                spender,
                oldAllowance + value
            )
        );
    }

    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        unchecked {
            uint256 oldAllowance = token.allowance(address(this), spender);
            require(
                oldAllowance >= value,
                "SafeERC20: decreased allowance below zero"
            );
            _callOptionalReturn(
                token,
                abi.encodeWithSelector(
                    token.approve.selector,
                    spender,
                    oldAllowance - value
                )
            );
        }
    }

    function forceApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        bytes memory approvalCall = abi.encodeWithSelector(
            token.approve.selector,
            spender,
            value
        );

        if (!_callOptionalReturnBool(token, approvalCall)) {
            _callOptionalReturn(
                token,
                abi.encodeWithSelector(token.approve.selector, spender, 0)
            );
            _callOptionalReturn(token, approvalCall);
        }
    }

    function safePermit(
        IERC20Permit token,
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal {
        uint256 nonceBefore = token.nonces(owner);
        token.permit(owner, spender, value, deadline, v, r, s);
        uint256 nonceAfter = token.nonces(owner);
        require(
            nonceAfter == nonceBefore + 1,
            "SafeERC20: permit did not succeed"
        );
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        bytes memory returndata = address(token).functionCall(
            data,
            "SafeERC20: low-level call failed"
        );
        require(
            returndata.length == 0 || abi.decode(returndata, (bool)),
            "SafeERC20: ERC20 operation did not succeed"
        );
    }

    function _callOptionalReturnBool(
        IERC20 token,
        bytes memory data
    ) private returns (bool) {
        (bool success, bytes memory returndata) = address(token).call(data);
        return
            success &&
            (returndata.length == 0 || abi.decode(returndata, (bool))) &&
            Address.isContract(address(token));
    }
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);
}

abstract contract ReentrancyGuard {
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        _status = _ENTERED;
    }

    function _nonReentrantAfter() private {
        _status = _NOT_ENTERED;
    }

    function _reentrancyGuardEntered() internal view returns (bool) {
        return _status == _ENTERED;
    }
}

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;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(
        address account
    ) public view virtual override returns (uint256) {
        return _balances[account];
    }

    function transfer(
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    function allowance(
        address owner,
        address spender
    ) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(
        address spender,
        uint256 amount
    ) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    function increaseAllowance(
        address spender,
        uint256 addedValue
    ) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(
            fromBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[from] = fromBalance - amount;

            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

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

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

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

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

    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(
                currentAllowance >= amount,
                "ERC20: insufficient allowance"
            );
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

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

    constructor() {
        _transferOwnership(_msgSender());
    }

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

contract XCOIN is Ownable, ReentrancyGuard, ERC20 {
    using SafeERC20 for IERC20;

    uint256 public liquidityTaxBuy;
    uint256 public liquidityTaxSell;

    uint256 public marketingTaxBuy;
    uint256 public marketingTaxSell;

    uint256 public immutable denominator;

    uint256 public liquidityTokenAmount;
    uint256 public marketingTokenAmount;

    address public marketingWallet;

    bool private swapping;
    uint256 public swapTokensAtAmount;
    bool public isSwapBackEnabled;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    mapping(address => bool) private _isAutomatedMarketMakerPair;
    mapping(address => bool) private _isExcludedFromFees;

    modifier inSwap() {
        swapping = true;
        _;
        swapping = false;
    }

    event UpdateBuyTax(uint256 liquidityTaxBuy, uint256 marketingTaxBuy);
    event UpdateSellTax(uint256 liquidityTaxSell, uint256 marketingTaxSell);
    event UpdateMarketingWallet(address indexed marketingWallet);
    event UpdateSwapTokensAtAmount(uint256 swapTokensAtAmount);
    event UpdateSwapBackStatus(bool status);
    event UpdateAutomatedMarketMakerPair(address indexed pair, bool status);
    event UpdateExcludeFromFees(address indexed account, bool isExcluded);

    constructor() ERC20("X-Coin", "X") {
        _transferOwnership(0x119c70D7A0D90A1Aa341BDd637c475E43Cf60Be4);
        _mint(owner(), 10_000_000_000 * (10 ** 18));

        liquidityTaxBuy = 0;
        liquidityTaxSell = 0;

        marketingTaxBuy = 0;
        marketingTaxSell = 0;

        denominator = 10_000;

        marketingWallet = 0x08cEEB0FbaF9194855609D16054416f47d556086;

        swapTokensAtAmount = totalSupply() / 100_000;
        isSwapBackEnabled = true;

        address router = getRouterAddress();
        uniswapV2Router = IUniswapV2Router02(router);
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(
            address(this),
            uniswapV2Router.WETH()
        );

        _approve(address(this), address(uniswapV2Router), type(uint256).max);

        _isAutomatedMarketMakerPair[address(uniswapV2Pair)] = true;

        _isExcludedFromFees[address(0xdead)] = true;
        _isExcludedFromFees[address(owner())] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[address(uniswapV2Router)] = true;
    }

    receive() external payable {}

    fallback() external payable {}

    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

    function getRouterAddress() public view returns (address) {
        if (block.chainid == 56) {
            return 0x10ED43C718714eb63d5aA57B78B54704E256024E;
        } else if (block.chainid == 97) {
            return 0xD99D1c33F9fC3444f8101754aBC46c52416550D1;
        } else if (block.chainid == 1 || block.chainid == 5) {
            return 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else {
            revert("Cannot found router on this network");
        }
    }

    function claimStuckTokens(address token) external onlyOwner {
        require(token != address(this), "Owner cannot claim native tokens");

        if (token == address(0x0)) {
            payable(msg.sender).transfer(address(this).balance);
            return;
        }
        IERC20 ERC20token = IERC20(token);
        uint256 balance = ERC20token.balanceOf(address(this));
        ERC20token.safeTransfer(msg.sender, balance);
    }

    function setBuyTax(
        uint256 _liquidityTaxBuy,
        uint256 _marketingTaxBuy
    ) external onlyOwner {
        require(
            liquidityTaxBuy != _liquidityTaxBuy ||
                marketingTaxBuy != _marketingTaxBuy,
            "Buy Tax already on that amount"
        );
        require(
            _liquidityTaxBuy + _marketingTaxBuy <= 1_000,
            "Buy Tax cannot be more than 10%"
        );

        liquidityTaxBuy = _liquidityTaxBuy;
        marketingTaxBuy = _marketingTaxBuy;

        emit UpdateBuyTax(_liquidityTaxBuy, _marketingTaxBuy);
    }

    function setSellTax(
        uint256 _liquidityTaxSell,
        uint256 _marketingTaxSell
    ) external onlyOwner {
        require(
            liquidityTaxSell != _liquidityTaxSell ||
                marketingTaxSell != _marketingTaxSell,
            "Sell Tax already on that amount"
        );
        require(
            _liquidityTaxSell + _marketingTaxSell <= 1_000,
            "Sell Tax cannot be more than 10%"
        );

        liquidityTaxSell = _liquidityTaxSell;
        marketingTaxSell = _marketingTaxSell;

        emit UpdateSellTax(_liquidityTaxSell, _marketingTaxSell);
    }

    function setMarketingWallet(address _marketingWallet) external onlyOwner {
        require(
            _marketingWallet != marketingWallet,
            "Marketing wallet is already that address"
        );
        require(
            _marketingWallet != address(0),
            "Marketing wallet cannot be the zero address"
        );
        require(
            !isContract(_marketingWallet),
            "Marketing wallet cannot be a contract"
        );

        marketingWallet = _marketingWallet;
        emit UpdateMarketingWallet(_marketingWallet);
    }

    function setSwapTokensAtAmount(uint256 amount) external onlyOwner {
        require(
            swapTokensAtAmount != amount,
            "SwapTokensAtAmount already on that amount"
        );
        require(
            amount >= totalSupply() / 1_000_000,
            "Amount must be equal or greater than 0.000001% of Total Supply"
        );

        swapTokensAtAmount = amount;

        emit UpdateSwapTokensAtAmount(amount);
    }

    function toggleSwapBack(bool status) external onlyOwner {
        require(isSwapBackEnabled != status, "SwapBack already on status");

        isSwapBackEnabled = status;
        emit UpdateSwapBackStatus(status);
    }

    function setAutomatedMarketMakerPair(
        address pair,
        bool status
    ) external onlyOwner {
        require(
            _isAutomatedMarketMakerPair[pair] != status,
            "Pair address is already the value of 'status'"
        );
        require(pair != address(uniswapV2Pair), "Cannot set this pair");

        _isAutomatedMarketMakerPair[pair] = status;

        emit UpdateAutomatedMarketMakerPair(pair, status);
    }

    function isAutomatedMarketMakerPair(
        address pair
    ) external view returns (bool) {
        return _isAutomatedMarketMakerPair[pair];
    }

    function setExcludeFromFees(
        address account,
        bool excluded
    ) external onlyOwner {
        require(
            _isExcludedFromFees[account] != excluded,
            "Account is already the value of 'excluded'"
        );
        _isExcludedFromFees[account] = excluded;

        emit UpdateExcludeFromFees(account, excluded);
    }

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

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            !swapping &&
            !_isAutomatedMarketMakerPair[from] &&
            isSwapBackEnabled &&
            liquidityTokenAmount + marketingTokenAmount > 0
        ) {
            swapBack();
        }

        bool takeFee = true;

        if (_isExcludedFromFees[from] || _isExcludedFromFees[to] || swapping) {
            takeFee = false;
        }

        if (takeFee) {
            uint256 tempLiquidityAmount;
            uint256 tempMarketingAmount;

            if (_isAutomatedMarketMakerPair[from]) {
                tempLiquidityAmount = (amount * liquidityTaxBuy) / denominator;
                tempMarketingAmount = (amount * marketingTaxBuy) / denominator;
            } else if (_isAutomatedMarketMakerPair[to]) {
                tempLiquidityAmount = (amount * liquidityTaxSell) / denominator;
                tempMarketingAmount = (amount * marketingTaxSell) / denominator;
            }

            liquidityTokenAmount += tempLiquidityAmount;
            marketingTokenAmount += tempMarketingAmount;

            uint256 fees = tempLiquidityAmount + tempMarketingAmount;

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

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

    function swapBack() internal inSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        uint256 contractTokenBalance = balanceOf(address(this));

        uint256 totalTax = liquidityTokenAmount + marketingTokenAmount;

        uint256 liquifyToken = (contractTokenBalance *
            (liquidityTokenAmount / 2)) / totalTax;

        uint256 swapBackAmount = contractTokenBalance - liquifyToken;

        totalTax -= (liquidityTokenAmount) / 2;

        try
            uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
                swapBackAmount,
                0,
                path,
                address(this),
                block.timestamp
            )
        {} catch {
            return;
        }

        uint256 newBalance = address(this).balance;

        uint256 marketingBNB = (newBalance * marketingTokenAmount) / totalTax;
        uint256 liquifyBNB = newBalance - marketingBNB;

        if (liquifyToken > 0 && liquifyBNB > 0) {
            try
                uniswapV2Router.addLiquidityETH{value: liquifyBNB}(
                    address(this),
                    liquifyToken,
                    0,
                    0,
                    address(0xdead),
                    block.timestamp
                )
            {} catch {}
        }

        if (marketingBNB > 0) {
            sendBNB(marketingWallet, marketingBNB);
        }

        liquidityTokenAmount = 0;
        marketingTokenAmount = 0;
    }

    function sendBNB(
        address _to,
        uint256 amount
    ) internal nonReentrant returns (bool) {
        if (address(this).balance < amount) return false;

        (bool success, ) = payable(_to).call{value: amount}("");

        return success;
    }

    function manualSwapBack() external {
        uint256 contractTokenBalance = balanceOf(address(this));

        require(contractTokenBalance > 0, "Cant Swap Back 0 Token!");

        swapBack();
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"UpdateAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"liquidityTaxBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingTaxBuy","type":"uint256"}],"name":"UpdateBuyTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"UpdateExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"marketingWallet","type":"address"}],"name":"UpdateMarketingWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"liquidityTaxSell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingTaxSell","type":"uint256"}],"name":"UpdateSellTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"UpdateSwapBackStatus","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapTokensAtAmount","type":"uint256"}],"name":"UpdateSwapTokensAtAmount","type":"event"},{"stateMutability":"payable","type":"fallback"},{"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":"token","type":"address"}],"name":"claimStuckTokens","outputs":[],"stateMutability":"nonpayable","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":"denominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRouterAddress","outputs":[{"internalType":"address","name":"","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":[{"internalType":"address","name":"pair","type":"address"}],"name":"isAutomatedMarketMakerPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSwapBackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityTaxBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityTaxSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityTokenAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingTaxBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTaxSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTokenAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityTaxBuy","type":"uint256"},{"internalType":"uint256","name":"_marketingTaxBuy","type":"uint256"}],"name":"setBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityTaxSell","type":"uint256"},{"internalType":"uint256","name":"_marketingTaxSell","type":"uint256"}],"name":"setSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"toggleSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e06040523480156200001157600080fd5b50604051806040016040528060068152602001652c16a1b7b4b760d11b815250604051806040016040528060018152602001600b60fb1b815250620000656200005f620003ac60201b60201c565b620003b0565b60018055600562000077838262000764565b50600662000086828262000764565b505050620000ae73119c70d7a0d90a1aa341bdd637c475e43cf60be4620003b060201b60201c565b620000d8620000c56000546001600160a01b031690565b6b204fce5e3e2502611000000062000400565b6000600781905560088190556009819055600a55612710608052600d80546001600160a01b0319167308ceeb0fbaf9194855609d16054416f47d556086179055620186a06200012660045490565b62000132919062000830565b600e55600f805460ff1916600117905560006200014e620004c9565b9050806001600160a01b031660a0816001600160a01b03168152505060a0516001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d1919062000853565b6001600160a01b031663c9c653963060a0516001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000221573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000247919062000853565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000295573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bb919062000853565b6001600160a01b031660c05260a051620002da90309060001962000593565b60c0516001600160a01b0316600090815260106020908152604082208054600160ff19918216811790925561dead84526011928390527f97847ee99463795296047093514439c3127772df3715e628aa85601cf8541716805490911682179055916200034e6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152601190935281832080548516600190811790915560a05190911683529120805490921617905550620008ad565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0382166200045c5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064015b60405180910390fd5b806004600082825462000470919062000885565b90915550506001600160a01b0382166000818152600260209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600046603803620004ed57507310ed43c718714eb63d5aa57b78b54704e256024e90565b466061036200050f575073d99d1c33f9fc3444f8101754abc46c52416550d190565b46600114806200051f5750466005145b156200053e5750737a250d5630b4cf539739df2c5dacb4c659f2488d90565b60405162461bcd60e51b815260206004820152602360248201527f43616e6e6f7420666f756e6420726f75746572206f6e2074686973206e6574776044820152626f726b60e81b606482015260840162000453565b6001600160a01b038316620005f75760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840162000453565b6001600160a01b0382166200065a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000453565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620006eb57607f821691505b6020821081036200070c57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620006bb57600081815260208120601f850160051c810160208610156200073b5750805b601f850160051c820191505b818110156200075c5782815560010162000747565b505050505050565b81516001600160401b03811115620007805762000780620006c0565b6200079881620007918454620006d6565b8462000712565b602080601f831160018114620007d05760008415620007b75750858301515b600019600386901b1c1916600185901b1785556200075c565b600085815260208120601f198616915b828110156200080157888601518255948401946001909101908401620007e0565b5085821015620008205787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000826200084e57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200086657600080fd5b81516001600160a01b03811681146200087e57600080fd5b9392505050565b80820180821115620008a757634e487b7160e01b600052601160045260246000fd5b92915050565b60805160a05160c0516129d962000915600039600081816104420152610e8501526000818161031901528181611bf601528181611d480152611e53015260008181610617015281816119dc01528181611a1701528181611a780152611ab301526129d96000f3fe60806040526004361061025f5760003560e01c8063715018a61161013e5780639a7a23d6116100bf578063d63cad2211610079578063e2f4560511610061578063e2f4560514610734578063f2fde38b1461074a578063f9d0831a1461076a57005b8063d63cad22146106ce578063dd62ed3e146106ee57005b8063a9059cbb116100a7578063a9059cbb14610679578063afa4f3b214610699578063d54f7d5e146106b957005b80639a7a23d614610639578063a457c2d71461065957005b80637949a403116101105780638da5cb5b116100f85780638da5cb5b146105d257806395d89b41146105f057806396ce07951461060557005b80637949a403146105835780638123bdc8146105bc57005b8063715018a61461052257806371afc71314610537578063721e62331461054d57806375f0a8741461056357005b8063248ba7ed116101e05780634fbee1931161019a5780635d098b38116101825780635d098b38146104b757806366eb3785146104d757806370a08231146104ec57005b80634fbee1931461046457806352dfc8d01461049d57005b806339509351116101c857806339509351146103fa57806342d0b0bc1461041a57806349bd5a5e1461043057005b8063248ba7ed146103c8578063313ce567146103de57005b80631694505e116102315780631f88a23e116102195780631f88a23e1461036857806323b872dd14610388578063247b912d146103a857005b80631694505e1461030757806318160ddd1461035357005b806305a1f36d1461026857806306fdde0314610288578063095ea7b3146102b35780630abc8e7b146102e357005b3661026657005b005b34801561027457600080fd5b50610266610283366004612584565b61078a565b34801561029457600080fd5b5061029d610899565b6040516102aa91906125ca565b60405180910390f35b3480156102bf57600080fd5b506102d36102ce366004612630565b61092b565b60405190151581526020016102aa565b3480156102ef57600080fd5b506102f960075481565b6040519081526020016102aa565b34801561031357600080fd5b5061033b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102aa565b34801561035f57600080fd5b506004546102f9565b34801561037457600080fd5b5061026661038336600461266a565b610945565b34801561039457600080fd5b506102d36103a336600461268e565b610a0d565b3480156103b457600080fd5b506102666103c3366004612584565b610a31565b3480156103d457600080fd5b506102f960085481565b3480156103ea57600080fd5b50604051601281526020016102aa565b34801561040657600080fd5b506102d3610415366004612630565b610b33565b34801561042657600080fd5b506102f9600a5481565b34801561043c57600080fd5b5061033b7f000000000000000000000000000000000000000000000000000000000000000081565b34801561047057600080fd5b506102d361047f3660046126cf565b6001600160a01b031660009081526011602052604090205460ff1690565b3480156104a957600080fd5b50600f546102d39060ff1681565b3480156104c357600080fd5b506102666104d23660046126cf565b610b72565b3480156104e357600080fd5b50610266610d5a565b3480156104f857600080fd5b506102f96105073660046126cf565b6001600160a01b031660009081526002602052604090205490565b34801561052e57600080fd5b50610266610dc2565b34801561054357600080fd5b506102f9600c5481565b34801561055957600080fd5b506102f960095481565b34801561056f57600080fd5b50600d5461033b906001600160a01b031681565b34801561058f57600080fd5b506102d361059e3660046126cf565b6001600160a01b031660009081526010602052604090205460ff1690565b3480156105c857600080fd5b506102f9600b5481565b3480156105de57600080fd5b506000546001600160a01b031661033b565b3480156105fc57600080fd5b5061029d610dd6565b34801561061157600080fd5b506102f97f000000000000000000000000000000000000000000000000000000000000000081565b34801561064557600080fd5b506102666106543660046126ec565b610de5565b34801561066557600080fd5b506102d3610674366004612630565b610f82565b34801561068557600080fd5b506102d3610694366004612630565b61102c565b3480156106a557600080fd5b506102666106b4366004612725565b61103a565b3480156106c557600080fd5b5061033b61117a565b3480156106da57600080fd5b506102666106e93660046126ec565b611259565b3480156106fa57600080fd5b506102f961070936600461273e565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561074057600080fd5b506102f9600e5481565b34801561075657600080fd5b506102666107653660046126cf565b61136d565b34801561077657600080fd5b506102666107853660046126cf565b6113fa565b610792611539565b816007541415806107a557508060095414155b6107f65760405162461bcd60e51b815260206004820152601e60248201527f4275792054617820616c7265616479206f6e207468617420616d6f756e74000060448201526064015b60405180910390fd5b6103e8610803828461279b565b11156108515760405162461bcd60e51b815260206004820152601f60248201527f427579205461782063616e6e6f74206265206d6f7265207468616e203130250060448201526064016107ed565b6007829055600981905560408051838152602081018390527f4350dcfc5e910c40b6d16fdf94cbbc788c1f4ac51a7dc561b081157d4b8ed4ec91015b60405180910390a15050565b6060600580546108a8906127ae565b80601f01602080910402602001604051908101604052809291908181526020018280546108d4906127ae565b80156109215780601f106108f657610100808354040283529160200191610921565b820191906000526020600020905b81548152906001019060200180831161090457829003601f168201915b5050505050905090565b600033610939818585611593565b60019150505b92915050565b61094d611539565b600f5481151560ff9091161515036109a75760405162461bcd60e51b815260206004820152601a60248201527f537761704261636b20616c7265616479206f6e2073746174757300000000000060448201526064016107ed565b600f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168215159081179091556040519081527fc2385a9c5843e4cd7e987e979b22e4d4748ec5dbbfc325ee4023a8c1914809b7906020015b60405180910390a150565b600033610a1b8582856116eb565b610a2685858561179b565b506001949350505050565b610a39611539565b81600854141580610a4c575080600a5414155b610a985760405162461bcd60e51b815260206004820152601f60248201527f53656c6c2054617820616c7265616479206f6e207468617420616d6f756e740060448201526064016107ed565b6103e8610aa5828461279b565b1115610af35760405162461bcd60e51b815260206004820181905260248201527f53656c6c205461782063616e6e6f74206265206d6f7265207468616e2031302560448201526064016107ed565b6008829055600a81905560408051838152602081018390527fb67587dc52452dfa7b987911428a2b47c610929d62284cda9f4aafb90435ad4e910161088d565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091906109399082908690610b6d90879061279b565b611593565b610b7a611539565b600d546001600160a01b0390811690821603610bfe5760405162461bcd60e51b815260206004820152602860248201527f4d61726b6574696e672077616c6c657420697320616c7265616479207468617460448201527f206164647265737300000000000000000000000000000000000000000000000060648201526084016107ed565b6001600160a01b038116610c7a5760405162461bcd60e51b815260206004820152602b60248201527f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a60448201527f65726f206164647265737300000000000000000000000000000000000000000060648201526084016107ed565b6001600160a01b0381163b15610cf85760405162461bcd60e51b815260206004820152602560248201527f4d61726b6574696e672077616c6c65742063616e6e6f74206265206120636f6e60448201527f747261637400000000000000000000000000000000000000000000000000000060648201526084016107ed565b600d80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517f335aad0eda24dacfa324b3d651daa091864338cf7d4af9d5087ba1c5ee1174f090600090a250565b3060009081526002602052604090205480610db75760405162461bcd60e51b815260206004820152601760248201527f43616e742053776170204261636b203020546f6b656e2100000000000000000060448201526064016107ed565b610dbf611b60565b50565b610dca611539565b610dd46000611f44565b565b6060600680546108a8906127ae565b610ded611539565b6001600160a01b03821660009081526010602052604090205481151560ff909116151503610e835760405162461bcd60e51b815260206004820152602d60248201527f50616972206164647265737320697320616c7265616479207468652076616c7560448201527f65206f662027737461747573270000000000000000000000000000000000000060648201526084016107ed565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603610f045760405162461bcd60e51b815260206004820152601460248201527f43616e6e6f74207365742074686973207061697200000000000000000000000060448201526064016107ed565b6001600160a01b03821660008181526010602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915591519182527fb6f1aed3b1ced30ce666a8b7f2e12b02aed514cdab677738640be9937f13320591015b60405180910390a25050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091908381101561101f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016107ed565b610a268286868403611593565b60003361093981858561179b565b611042611539565b80600e54036110b95760405162461bcd60e51b815260206004820152602960248201527f53776170546f6b656e734174416d6f756e7420616c7265616479206f6e20746860448201527f617420616d6f756e74000000000000000000000000000000000000000000000060648201526084016107ed565b620f42406110c660045490565b6110d09190612801565b8110156111455760405162461bcd60e51b815260206004820152603e60248201527f416d6f756e74206d75737420626520657175616c206f7220677265617465722060448201527f7468616e20302e30303030303125206f6620546f74616c20537570706c79000060648201526084016107ed565b600e8190556040518181527fe82283d0f679a15d3811ecbaa8b6a8afb1b110e22daa33b359c37bcae5a11e4890602001610a02565b60004660380361119d57507310ed43c718714eb63d5aa57b78b54704e256024e90565b466061036111be575073d99d1c33f9fc3444f8101754abc46c52416550d190565b46600114806111cd5750466005145b156111eb5750737a250d5630b4cf539739df2c5dacb4c659f2488d90565b60405162461bcd60e51b815260206004820152602360248201527f43616e6e6f7420666f756e6420726f75746572206f6e2074686973206e65747760448201527f6f726b000000000000000000000000000000000000000000000000000000000060648201526084016107ed565b611261611539565b6001600160a01b03821660009081526011602052604090205481151560ff9091161515036112f75760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f662060448201527f276578636c75646564270000000000000000000000000000000000000000000060648201526084016107ed565b6001600160a01b03821660008181526011602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915591519182527fee48373bc01f03d5728ce4cf0b4e1c35d75d7da201d5b5d5013a94e50941efe19101610f76565b611375611539565b6001600160a01b0381166113f15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107ed565b610dbf81611f44565b611402611539565b306001600160a01b0382160361145a5760405162461bcd60e51b815260206004820181905260248201527f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e7360448201526064016107ed565b6001600160a01b0381166114985760405133904780156108fc02916000818181858888f19350505050158015611494573d6000803e3d6000fd5b5050565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156114fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061151e919061283c565b90506115346001600160a01b0383163383611fac565b505050565b6000546001600160a01b03163314610dd45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107ed565b6001600160a01b03831661160e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016107ed565b6001600160a01b03821661168a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016107ed565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038381166000908152600360209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461179557818110156117885760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016107ed565b6117958484848403611593565b50505050565b6001600160a01b0383166118175760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016107ed565b6001600160a01b0382166118935760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016107ed565b806000036118a7576115348383600061202c565b30600090815260026020526040902054600e54811080159081906118e65750600d5474010000000000000000000000000000000000000000900460ff16155b801561190b57506001600160a01b03851660009081526010602052604090205460ff16155b80156119195750600f5460ff165b801561193457506000600c54600b54611932919061279b565b115b1561194157611941611b60565b6001600160a01b03851660009081526011602052604090205460019060ff168061198357506001600160a01b03851660009081526011602052604090205460ff165b806119a85750600d5474010000000000000000000000000000000000000000900460ff165b156119b1575060005b8015611b4d576001600160a01b038616600090815260106020526040812054819060ff1615611a55577f000000000000000000000000000000000000000000000000000000000000000060075487611a099190612855565b611a139190612801565b91507f000000000000000000000000000000000000000000000000000000000000000060095487611a449190612855565b611a4e9190612801565b9050611aed565b6001600160a01b03871660009081526010602052604090205460ff1615611aed577f000000000000000000000000000000000000000000000000000000000000000060085487611aa59190612855565b611aaf9190612801565b91507f0000000000000000000000000000000000000000000000000000000000000000600a5487611ae09190612855565b611aea9190612801565b90505b81600b6000828254611aff919061279b565b9250508190555080600c6000828254611b18919061279b565b9091555060009050611b2a828461279b565b90508015611b4957611b3c818861286c565b9650611b4989308361202c565b5050505b611b5886868661202c565b505050505050565b600d80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556040805160028082526060820183526000926020830190803683370190505090503081600081518110611bd457611bd461287f565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c7691906128ae565b81600181518110611c8957611c8961287f565b6001600160a01b039092166020928302919091018201523060009081526002909152604081205490506000600c54600b54611cc4919061279b565b90506000816002600b54611cd89190612801565b611ce29085612855565b611cec9190612801565b90506000611cfa828561286c565b90506002600b54611d0b9190612801565b611d15908461286c565b6040517f791ac9470000000000000000000000000000000000000000000000000000000081529093506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790611d869084906000908a90309042906004016128cb565b600060405180830381600087803b158015611da057600080fd5b505af1925050508015611db1575060015b611dbf575050505050611f1a565b600c5447906000908590611dd39084612855565b611ddd9190612801565b90506000611deb828461286c565b9050600085118015611dfd5750600081115b15611ee9576040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101869052600060448201819052606482015261dead60848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990839060c40160606040518083038185885af193505050508015611ee0575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611edd9181019061293c565b60015b15611ee9575050505b8115611f0757600d54611f05906001600160a01b031683612220565b505b50506000600b819055600c555050505050505b600d80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905261153490849061229c565b6001600160a01b0383166120a85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016107ed565b6001600160a01b0382166121245760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016107ed565b6001600160a01b038316600090815260026020526040902054818110156121b35760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016107ed565b6001600160a01b0380851660008181526002602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906122139086815260200190565b60405180910390a3611795565b600061222a612384565b8147101561223a57506000612293565b6000836001600160a01b03168360405160006040518083038185875af1925050503d8060008114612287576040519150601f19603f3d011682016040523d82523d6000602084013e61228c565b606091505b5090925050505b61093f60018055565b60006122f1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166123dd9092919063ffffffff16565b9050805160001480612312575080806020019051810190612312919061296a565b6115345760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107ed565b6002600154036123d65760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107ed565b6002600155565b60606123ec84846000856123f4565b949350505050565b60608247101561246c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016107ed565b600080866001600160a01b031685876040516124889190612987565b60006040518083038185875af1925050503d80600081146124c5576040519150601f19603f3d011682016040523d82523d6000602084013e6124ca565b606091505b50915091506124db878383876124e6565b979650505050505050565b6060831561255557825160000361254e576001600160a01b0385163b61254e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107ed565b50816123ec565b6123ec838381511561256a5781518083602001fd5b8060405162461bcd60e51b81526004016107ed91906125ca565b6000806040838503121561259757600080fd5b50508035926020909101359150565b60005b838110156125c15781810151838201526020016125a9565b50506000910152565b60208152600082518060208401526125e98160408501602087016125a6565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6001600160a01b0381168114610dbf57600080fd5b6000806040838503121561264357600080fd5b823561264e8161261b565b946020939093013593505050565b8015158114610dbf57600080fd5b60006020828403121561267c57600080fd5b81356126878161265c565b9392505050565b6000806000606084860312156126a357600080fd5b83356126ae8161261b565b925060208401356126be8161261b565b929592945050506040919091013590565b6000602082840312156126e157600080fd5b81356126878161261b565b600080604083850312156126ff57600080fd5b823561270a8161261b565b9150602083013561271a8161265c565b809150509250929050565b60006020828403121561273757600080fd5b5035919050565b6000806040838503121561275157600080fd5b823561275c8161261b565b9150602083013561271a8161261b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561093f5761093f61276c565b600181811c908216806127c257607f821691505b6020821081036127fb577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600082612837577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006020828403121561284e57600080fd5b5051919050565b808202811582820484141761093f5761093f61276c565b8181038181111561093f5761093f61276c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000602082840312156128c057600080fd5b81516126878161261b565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561291b5784516001600160a01b0316835293830193918301916001016128f6565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561295157600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561297c57600080fd5b81516126878161265c565b600082516129998184602087016125a6565b919091019291505056fea264697066735822122001df96e2f7994cfe71af58ae791874e87b00066df8932385504a12b0f453ca4a64736f6c63430008130033

Deployed Bytecode

0x60806040526004361061025f5760003560e01c8063715018a61161013e5780639a7a23d6116100bf578063d63cad2211610079578063e2f4560511610061578063e2f4560514610734578063f2fde38b1461074a578063f9d0831a1461076a57005b8063d63cad22146106ce578063dd62ed3e146106ee57005b8063a9059cbb116100a7578063a9059cbb14610679578063afa4f3b214610699578063d54f7d5e146106b957005b80639a7a23d614610639578063a457c2d71461065957005b80637949a403116101105780638da5cb5b116100f85780638da5cb5b146105d257806395d89b41146105f057806396ce07951461060557005b80637949a403146105835780638123bdc8146105bc57005b8063715018a61461052257806371afc71314610537578063721e62331461054d57806375f0a8741461056357005b8063248ba7ed116101e05780634fbee1931161019a5780635d098b38116101825780635d098b38146104b757806366eb3785146104d757806370a08231146104ec57005b80634fbee1931461046457806352dfc8d01461049d57005b806339509351116101c857806339509351146103fa57806342d0b0bc1461041a57806349bd5a5e1461043057005b8063248ba7ed146103c8578063313ce567146103de57005b80631694505e116102315780631f88a23e116102195780631f88a23e1461036857806323b872dd14610388578063247b912d146103a857005b80631694505e1461030757806318160ddd1461035357005b806305a1f36d1461026857806306fdde0314610288578063095ea7b3146102b35780630abc8e7b146102e357005b3661026657005b005b34801561027457600080fd5b50610266610283366004612584565b61078a565b34801561029457600080fd5b5061029d610899565b6040516102aa91906125ca565b60405180910390f35b3480156102bf57600080fd5b506102d36102ce366004612630565b61092b565b60405190151581526020016102aa565b3480156102ef57600080fd5b506102f960075481565b6040519081526020016102aa565b34801561031357600080fd5b5061033b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016102aa565b34801561035f57600080fd5b506004546102f9565b34801561037457600080fd5b5061026661038336600461266a565b610945565b34801561039457600080fd5b506102d36103a336600461268e565b610a0d565b3480156103b457600080fd5b506102666103c3366004612584565b610a31565b3480156103d457600080fd5b506102f960085481565b3480156103ea57600080fd5b50604051601281526020016102aa565b34801561040657600080fd5b506102d3610415366004612630565b610b33565b34801561042657600080fd5b506102f9600a5481565b34801561043c57600080fd5b5061033b7f0000000000000000000000009816800a8724cdcae1349f39ddbeb084d41fdb1d81565b34801561047057600080fd5b506102d361047f3660046126cf565b6001600160a01b031660009081526011602052604090205460ff1690565b3480156104a957600080fd5b50600f546102d39060ff1681565b3480156104c357600080fd5b506102666104d23660046126cf565b610b72565b3480156104e357600080fd5b50610266610d5a565b3480156104f857600080fd5b506102f96105073660046126cf565b6001600160a01b031660009081526002602052604090205490565b34801561052e57600080fd5b50610266610dc2565b34801561054357600080fd5b506102f9600c5481565b34801561055957600080fd5b506102f960095481565b34801561056f57600080fd5b50600d5461033b906001600160a01b031681565b34801561058f57600080fd5b506102d361059e3660046126cf565b6001600160a01b031660009081526010602052604090205460ff1690565b3480156105c857600080fd5b506102f9600b5481565b3480156105de57600080fd5b506000546001600160a01b031661033b565b3480156105fc57600080fd5b5061029d610dd6565b34801561061157600080fd5b506102f97f000000000000000000000000000000000000000000000000000000000000271081565b34801561064557600080fd5b506102666106543660046126ec565b610de5565b34801561066557600080fd5b506102d3610674366004612630565b610f82565b34801561068557600080fd5b506102d3610694366004612630565b61102c565b3480156106a557600080fd5b506102666106b4366004612725565b61103a565b3480156106c557600080fd5b5061033b61117a565b3480156106da57600080fd5b506102666106e93660046126ec565b611259565b3480156106fa57600080fd5b506102f961070936600461273e565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561074057600080fd5b506102f9600e5481565b34801561075657600080fd5b506102666107653660046126cf565b61136d565b34801561077657600080fd5b506102666107853660046126cf565b6113fa565b610792611539565b816007541415806107a557508060095414155b6107f65760405162461bcd60e51b815260206004820152601e60248201527f4275792054617820616c7265616479206f6e207468617420616d6f756e74000060448201526064015b60405180910390fd5b6103e8610803828461279b565b11156108515760405162461bcd60e51b815260206004820152601f60248201527f427579205461782063616e6e6f74206265206d6f7265207468616e203130250060448201526064016107ed565b6007829055600981905560408051838152602081018390527f4350dcfc5e910c40b6d16fdf94cbbc788c1f4ac51a7dc561b081157d4b8ed4ec91015b60405180910390a15050565b6060600580546108a8906127ae565b80601f01602080910402602001604051908101604052809291908181526020018280546108d4906127ae565b80156109215780601f106108f657610100808354040283529160200191610921565b820191906000526020600020905b81548152906001019060200180831161090457829003601f168201915b5050505050905090565b600033610939818585611593565b60019150505b92915050565b61094d611539565b600f5481151560ff9091161515036109a75760405162461bcd60e51b815260206004820152601a60248201527f537761704261636b20616c7265616479206f6e2073746174757300000000000060448201526064016107ed565b600f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168215159081179091556040519081527fc2385a9c5843e4cd7e987e979b22e4d4748ec5dbbfc325ee4023a8c1914809b7906020015b60405180910390a150565b600033610a1b8582856116eb565b610a2685858561179b565b506001949350505050565b610a39611539565b81600854141580610a4c575080600a5414155b610a985760405162461bcd60e51b815260206004820152601f60248201527f53656c6c2054617820616c7265616479206f6e207468617420616d6f756e740060448201526064016107ed565b6103e8610aa5828461279b565b1115610af35760405162461bcd60e51b815260206004820181905260248201527f53656c6c205461782063616e6e6f74206265206d6f7265207468616e2031302560448201526064016107ed565b6008829055600a81905560408051838152602081018390527fb67587dc52452dfa7b987911428a2b47c610929d62284cda9f4aafb90435ad4e910161088d565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091906109399082908690610b6d90879061279b565b611593565b610b7a611539565b600d546001600160a01b0390811690821603610bfe5760405162461bcd60e51b815260206004820152602860248201527f4d61726b6574696e672077616c6c657420697320616c7265616479207468617460448201527f206164647265737300000000000000000000000000000000000000000000000060648201526084016107ed565b6001600160a01b038116610c7a5760405162461bcd60e51b815260206004820152602b60248201527f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a60448201527f65726f206164647265737300000000000000000000000000000000000000000060648201526084016107ed565b6001600160a01b0381163b15610cf85760405162461bcd60e51b815260206004820152602560248201527f4d61726b6574696e672077616c6c65742063616e6e6f74206265206120636f6e60448201527f747261637400000000000000000000000000000000000000000000000000000060648201526084016107ed565b600d80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517f335aad0eda24dacfa324b3d651daa091864338cf7d4af9d5087ba1c5ee1174f090600090a250565b3060009081526002602052604090205480610db75760405162461bcd60e51b815260206004820152601760248201527f43616e742053776170204261636b203020546f6b656e2100000000000000000060448201526064016107ed565b610dbf611b60565b50565b610dca611539565b610dd46000611f44565b565b6060600680546108a8906127ae565b610ded611539565b6001600160a01b03821660009081526010602052604090205481151560ff909116151503610e835760405162461bcd60e51b815260206004820152602d60248201527f50616972206164647265737320697320616c7265616479207468652076616c7560448201527f65206f662027737461747573270000000000000000000000000000000000000060648201526084016107ed565b7f0000000000000000000000009816800a8724cdcae1349f39ddbeb084d41fdb1d6001600160a01b0316826001600160a01b031603610f045760405162461bcd60e51b815260206004820152601460248201527f43616e6e6f74207365742074686973207061697200000000000000000000000060448201526064016107ed565b6001600160a01b03821660008181526010602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915591519182527fb6f1aed3b1ced30ce666a8b7f2e12b02aed514cdab677738640be9937f13320591015b60405180910390a25050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091908381101561101f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016107ed565b610a268286868403611593565b60003361093981858561179b565b611042611539565b80600e54036110b95760405162461bcd60e51b815260206004820152602960248201527f53776170546f6b656e734174416d6f756e7420616c7265616479206f6e20746860448201527f617420616d6f756e74000000000000000000000000000000000000000000000060648201526084016107ed565b620f42406110c660045490565b6110d09190612801565b8110156111455760405162461bcd60e51b815260206004820152603e60248201527f416d6f756e74206d75737420626520657175616c206f7220677265617465722060448201527f7468616e20302e30303030303125206f6620546f74616c20537570706c79000060648201526084016107ed565b600e8190556040518181527fe82283d0f679a15d3811ecbaa8b6a8afb1b110e22daa33b359c37bcae5a11e4890602001610a02565b60004660380361119d57507310ed43c718714eb63d5aa57b78b54704e256024e90565b466061036111be575073d99d1c33f9fc3444f8101754abc46c52416550d190565b46600114806111cd5750466005145b156111eb5750737a250d5630b4cf539739df2c5dacb4c659f2488d90565b60405162461bcd60e51b815260206004820152602360248201527f43616e6e6f7420666f756e6420726f75746572206f6e2074686973206e65747760448201527f6f726b000000000000000000000000000000000000000000000000000000000060648201526084016107ed565b611261611539565b6001600160a01b03821660009081526011602052604090205481151560ff9091161515036112f75760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f662060448201527f276578636c75646564270000000000000000000000000000000000000000000060648201526084016107ed565b6001600160a01b03821660008181526011602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915591519182527fee48373bc01f03d5728ce4cf0b4e1c35d75d7da201d5b5d5013a94e50941efe19101610f76565b611375611539565b6001600160a01b0381166113f15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107ed565b610dbf81611f44565b611402611539565b306001600160a01b0382160361145a5760405162461bcd60e51b815260206004820181905260248201527f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e7360448201526064016107ed565b6001600160a01b0381166114985760405133904780156108fc02916000818181858888f19350505050158015611494573d6000803e3d6000fd5b5050565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156114fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061151e919061283c565b90506115346001600160a01b0383163383611fac565b505050565b6000546001600160a01b03163314610dd45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107ed565b6001600160a01b03831661160e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016107ed565b6001600160a01b03821661168a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016107ed565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038381166000908152600360209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461179557818110156117885760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016107ed565b6117958484848403611593565b50505050565b6001600160a01b0383166118175760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016107ed565b6001600160a01b0382166118935760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016107ed565b806000036118a7576115348383600061202c565b30600090815260026020526040902054600e54811080159081906118e65750600d5474010000000000000000000000000000000000000000900460ff16155b801561190b57506001600160a01b03851660009081526010602052604090205460ff16155b80156119195750600f5460ff165b801561193457506000600c54600b54611932919061279b565b115b1561194157611941611b60565b6001600160a01b03851660009081526011602052604090205460019060ff168061198357506001600160a01b03851660009081526011602052604090205460ff165b806119a85750600d5474010000000000000000000000000000000000000000900460ff165b156119b1575060005b8015611b4d576001600160a01b038616600090815260106020526040812054819060ff1615611a55577f000000000000000000000000000000000000000000000000000000000000271060075487611a099190612855565b611a139190612801565b91507f000000000000000000000000000000000000000000000000000000000000271060095487611a449190612855565b611a4e9190612801565b9050611aed565b6001600160a01b03871660009081526010602052604090205460ff1615611aed577f000000000000000000000000000000000000000000000000000000000000271060085487611aa59190612855565b611aaf9190612801565b91507f0000000000000000000000000000000000000000000000000000000000002710600a5487611ae09190612855565b611aea9190612801565b90505b81600b6000828254611aff919061279b565b9250508190555080600c6000828254611b18919061279b565b9091555060009050611b2a828461279b565b90508015611b4957611b3c818861286c565b9650611b4989308361202c565b5050505b611b5886868661202c565b505050505050565b600d80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556040805160028082526060820183526000926020830190803683370190505090503081600081518110611bd457611bd461287f565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c7691906128ae565b81600181518110611c8957611c8961287f565b6001600160a01b039092166020928302919091018201523060009081526002909152604081205490506000600c54600b54611cc4919061279b565b90506000816002600b54611cd89190612801565b611ce29085612855565b611cec9190612801565b90506000611cfa828561286c565b90506002600b54611d0b9190612801565b611d15908461286c565b6040517f791ac9470000000000000000000000000000000000000000000000000000000081529093506001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790611d869084906000908a90309042906004016128cb565b600060405180830381600087803b158015611da057600080fd5b505af1925050508015611db1575060015b611dbf575050505050611f1a565b600c5447906000908590611dd39084612855565b611ddd9190612801565b90506000611deb828461286c565b9050600085118015611dfd5750600081115b15611ee9576040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101869052600060448201819052606482015261dead60848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990839060c40160606040518083038185885af193505050508015611ee0575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611edd9181019061293c565b60015b15611ee9575050505b8115611f0757600d54611f05906001600160a01b031683612220565b505b50506000600b819055600c555050505050505b600d80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905261153490849061229c565b6001600160a01b0383166120a85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016107ed565b6001600160a01b0382166121245760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016107ed565b6001600160a01b038316600090815260026020526040902054818110156121b35760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016107ed565b6001600160a01b0380851660008181526002602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906122139086815260200190565b60405180910390a3611795565b600061222a612384565b8147101561223a57506000612293565b6000836001600160a01b03168360405160006040518083038185875af1925050503d8060008114612287576040519150601f19603f3d011682016040523d82523d6000602084013e61228c565b606091505b5090925050505b61093f60018055565b60006122f1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166123dd9092919063ffffffff16565b9050805160001480612312575080806020019051810190612312919061296a565b6115345760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107ed565b6002600154036123d65760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107ed565b6002600155565b60606123ec84846000856123f4565b949350505050565b60608247101561246c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016107ed565b600080866001600160a01b031685876040516124889190612987565b60006040518083038185875af1925050503d80600081146124c5576040519150601f19603f3d011682016040523d82523d6000602084013e6124ca565b606091505b50915091506124db878383876124e6565b979650505050505050565b6060831561255557825160000361254e576001600160a01b0385163b61254e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107ed565b50816123ec565b6123ec838381511561256a5781518083602001fd5b8060405162461bcd60e51b81526004016107ed91906125ca565b6000806040838503121561259757600080fd5b50508035926020909101359150565b60005b838110156125c15781810151838201526020016125a9565b50506000910152565b60208152600082518060208401526125e98160408501602087016125a6565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6001600160a01b0381168114610dbf57600080fd5b6000806040838503121561264357600080fd5b823561264e8161261b565b946020939093013593505050565b8015158114610dbf57600080fd5b60006020828403121561267c57600080fd5b81356126878161265c565b9392505050565b6000806000606084860312156126a357600080fd5b83356126ae8161261b565b925060208401356126be8161261b565b929592945050506040919091013590565b6000602082840312156126e157600080fd5b81356126878161261b565b600080604083850312156126ff57600080fd5b823561270a8161261b565b9150602083013561271a8161265c565b809150509250929050565b60006020828403121561273757600080fd5b5035919050565b6000806040838503121561275157600080fd5b823561275c8161261b565b9150602083013561271a8161261b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561093f5761093f61276c565b600181811c908216806127c257607f821691505b6020821081036127fb577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600082612837577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006020828403121561284e57600080fd5b5051919050565b808202811582820484141761093f5761093f61276c565b8181038181111561093f5761093f61276c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000602082840312156128c057600080fd5b81516126878161261b565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561291b5784516001600160a01b0316835293830193918301916001016128f6565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561295157600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561297c57600080fd5b81516126878161265c565b600082516129998184602087016125a6565b919091019291505056fea264697066735822122001df96e2f7994cfe71af58ae791874e87b00066df8932385504a12b0f453ca4a64736f6c63430008130033

Deployed Bytecode Sourcemap

23955:11276:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27588:599;;;;;;;;;;-1:-1:-1;27588:599:0;;;;;:::i;:::-;;:::i;17583:100::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18581:226;;;;;;;;;;-1:-1:-1;18581:226:0;;;;;:::i;:::-;;:::i;:::-;;;1626:14:1;;1619:22;1601:41;;1589:2;1574:18;18581:226:0;1461:187:1;24047:30:0;;;;;;;;;;;;;;;;;;;1799:25:1;;;1787:2;1772:18;24047:30:0;1653:177:1;24477:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2025:55:1;;;2007:74;;1995:2;1980:18;24477:51:0;1835:252:1;17904:108:0;;;;;;;;;;-1:-1:-1;17992:12:0;;17904:108;;29868:224;;;;;;;;;;-1:-1:-1;29868:224:0;;;;;:::i;:::-;;:::i;18815:295::-;;;;;;;;;;-1:-1:-1;18815:295:0;;;;;:::i;:::-;;:::i;28195:617::-;;;;;;;;;;-1:-1:-1;28195:617:0;;;;;:::i;:::-;;:::i;24084:31::-;;;;;;;;;;;;;;;;17803:93;;;;;;;;;;-1:-1:-1;17803:93:0;;17886:2;3064:36:1;;3052:2;3037:18;17803:93:0;2922:184:1;19118:263:0;;;;;;;;;;-1:-1:-1;19118:263:0;;;;;:::i;:::-;;:::i;24161:31::-;;;;;;;;;;;;;;;;24535:38;;;;;;;;;;;;;;;31097:128;;;;;;;;;;-1:-1:-1;31097:128:0;;;;;:::i;:::-;-1:-1:-1;;;;;31189:28:0;31165:4;31189:28;;;:19;:28;;;;;;;;;31097:128;24439:29;;;;;;;;;;-1:-1:-1;24439:29:0;;;;;;;;28820:580;;;;;;;;;;-1:-1:-1;28820:580:0;;;;;:::i;:::-;;:::i;35023:205::-;;;;;;;;;;;;;:::i;18020:143::-;;;;;;;;;;-1:-1:-1;18020:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;18137:18:0;18110:7;18137:18;;;:9;:18;;;;;;;18020:143;23400:103;;;;;;;;;;;;;:::i;24288:35::-;;;;;;;;;;;;;;;;24124:30;;;;;;;;;;;;;;;;24332;;;;;;;;;;-1:-1:-1;24332:30:0;;;;-1:-1:-1;;;;;24332:30:0;;;30564:154;;;;;;;;;;-1:-1:-1;30564:154:0;;;;;:::i;:::-;-1:-1:-1;;;;;30677:33:0;30653:4;30677:33;;;:27;:33;;;;;;;;;30564:154;24246:35;;;;;;;;;;;;;;;;23165:87;;;;;;;;;;-1:-1:-1;23211:7:0;23238:6;-1:-1:-1;;;;;23238:6:0;23165:87;;17691:104;;;;;;;;;;;;;:::i;24201:36::-;;;;;;;;;;;;;;;30100:456;;;;;;;;;;-1:-1:-1;30100:456:0;;;;;:::i;:::-;;:::i;19389:498::-;;;;;;;;;;-1:-1:-1;19389:498:0;;;;;:::i;:::-;;:::i;18171:218::-;;;;;;;;;;-1:-1:-1;18171:218:0;;;;;:::i;:::-;;:::i;29408:452::-;;;;;;;;;;-1:-1:-1;29408:452:0;;;;;:::i;:::-;;:::i;26635:490::-;;;;;;;;;;;;;:::i;30726:363::-;;;;;;;;;;-1:-1:-1;30726:363:0;;;;;:::i;:::-;;:::i;18397:176::-;;;;;;;;;;-1:-1:-1;18397:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;18538:18:0;;;18511:7;18538:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;18397:176;24399:33;;;;;;;;;;;;;;;;23511:238;;;;;;;;;;-1:-1:-1;23511:238:0;;;;;:::i;:::-;;:::i;27133:447::-;;;;;;;;;;-1:-1:-1;27133:447:0;;;;;:::i;:::-;;:::i;27588:599::-;23124:13;:11;:13::i;:::-;27755:16:::1;27736:15;;:35;;:91;;;;27811:16;27792:15;;:35;;27736:91;27714:171;;;::::0;-1:-1:-1;;;27714:171:0;;4761:2:1;27714:171:0::1;::::0;::::1;4743:21:1::0;4800:2;4780:18;;;4773:30;4839:32;4819:18;;;4812:60;4889:18;;27714:171:0::1;;;;;;;;;27957:5;27918:35;27937:16:::0;27918;:35:::1;:::i;:::-;:44;;27896:125;;;::::0;-1:-1:-1;;;27896:125:0;;5439:2:1;27896:125:0::1;::::0;::::1;5421:21:1::0;5478:2;5458:18;;;5451:30;5517:33;5497:18;;;5490:61;5568:18;;27896:125:0::1;5237:355:1::0;27896:125:0::1;28034:15;:34:::0;;;28079:15:::1;:34:::0;;;28131:48:::1;::::0;;5771:25:1;;;5827:2;5812:18;;5805:34;;;28131:48:0::1;::::0;5744:18:1;28131:48:0::1;;;;;;;;27588:599:::0;;:::o;17583:100::-;17637:13;17670:5;17663:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17583:100;:::o;18581:226::-;18689:4;17043:10;18745:32;17043:10;18761:7;18770:6;18745:8;:32::i;:::-;18795:4;18788:11;;;18581:226;;;;;:::o;29868:224::-;23124:13;:11;:13::i;:::-;29943:17:::1;::::0;:27;::::1;;:17;::::0;;::::1;:27;;::::0;29935:66:::1;;;::::0;-1:-1:-1;;;29935:66:0;;6494:2:1;29935:66:0::1;::::0;::::1;6476:21:1::0;6533:2;6513:18;;;6506:30;6572:28;6552:18;;;6545:56;6618:18;;29935:66:0::1;6292:350:1::0;29935:66:0::1;30014:17;:26:::0;;;::::1;::::0;::::1;;::::0;;::::1;::::0;;;30056:28:::1;::::0;1601:41:1;;;30056:28:0::1;::::0;1589:2:1;1574:18;30056:28:0::1;;;;;;;;29868:224:::0;:::o;18815:295::-;18946:4;17043:10;19004:38;19020:4;17043:10;19035:6;19004:15;:38::i;:::-;19053:27;19063:4;19069:2;19073:6;19053:9;:27::i;:::-;-1:-1:-1;19098:4:0;;18815:295;-1:-1:-1;;;;18815:295:0:o;28195:617::-;23124:13;:11;:13::i;:::-;28366:17:::1;28346:16;;:37;;:95;;;;28424:17;28404:16;;:37;;28346:95;28324:176;;;::::0;-1:-1:-1;;;28324:176:0;;6849:2:1;28324:176:0::1;::::0;::::1;6831:21:1::0;6888:2;6868:18;;;6861:30;6927:33;6907:18;;;6900:61;6978:18;;28324:176:0::1;6647:355:1::0;28324:176:0::1;28574:5;28533:37;28553:17:::0;28533;:37:::1;:::i;:::-;:46;;28511:128;;;::::0;-1:-1:-1;;;28511:128:0;;7209:2:1;28511:128:0::1;::::0;::::1;7191:21:1::0;;;7228:18;;;7221:30;7287:34;7267:18;;;7260:62;7339:18;;28511:128:0::1;7007:356:1::0;28511:128:0::1;28652:16;:36:::0;;;28699:16:::1;:36:::0;;;28753:51:::1;::::0;;5771:25:1;;;5827:2;5812:18;;5805:34;;;28753:51:0::1;::::0;5744:18:1;28753:51:0::1;5597:248:1::0;19118:263:0;17043:10;19231:4;18538:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;18538:27:0;;;;;;;;;;19231:4;;17043:10;19287:64;;17043:10;;18538:27;;19312:38;;19340:10;;19312:38;:::i;:::-;19287:8;:64::i;28820:580::-;23124:13;:11;:13::i;:::-;28946:15:::1;::::0;-1:-1:-1;;;;;28946:15:0;;::::1;28926:35:::0;;::::1;::::0;28904:125:::1;;;::::0;-1:-1:-1;;;28904:125:0;;7570:2:1;28904:125:0::1;::::0;::::1;7552:21:1::0;7609:2;7589:18;;;7582:30;7648:34;7628:18;;;7621:62;7719:10;7699:18;;;7692:38;7747:19;;28904:125:0::1;7368:404:1::0;28904:125:0::1;-1:-1:-1::0;;;;;29062:30:0;::::1;29040:123;;;::::0;-1:-1:-1;;;29040:123:0;;7979:2:1;29040:123:0::1;::::0;::::1;7961:21:1::0;8018:2;7998:18;;;7991:30;8057:34;8037:18;;;8030:62;8128:13;8108:18;;;8101:41;8159:19;;29040:123:0::1;7777:407:1::0;29040:123:0::1;-1:-1:-1::0;;;;;26596:19:0;;;:23;29174:116:::1;;;::::0;-1:-1:-1;;;29174:116:0;;8391:2:1;29174:116:0::1;::::0;::::1;8373:21:1::0;8430:2;8410:18;;;8403:30;8469:34;8449:18;;;8442:62;8540:7;8520:18;;;8513:35;8565:19;;29174:116:0::1;8189:401:1::0;29174:116:0::1;29303:15;:34:::0;;;::::1;-1:-1:-1::0;;;;;29303:34:0;::::1;::::0;;::::1;::::0;;;29353:39:::1;::::0;::::1;::::0;-1:-1:-1;;29353:39:0::1;28820:580:::0;:::o;35023:205::-;35118:4;35069:28;18137:18;;;:9;:18;;;;;;35145:24;35137:60;;;;-1:-1:-1;;;35137:60:0;;8797:2:1;35137:60:0;;;8779:21:1;8836:2;8816:18;;;8809:30;8875:25;8855:18;;;8848:53;8918:18;;35137:60:0;8595:347:1;35137:60:0;35210:10;:8;:10::i;:::-;35058:170;35023:205::o;23400:103::-;23124:13;:11;:13::i;:::-;23465:30:::1;23492:1;23465:18;:30::i;:::-;23400:103::o:0;17691:104::-;17747:13;17780:7;17773:14;;;;;:::i;30100:456::-;23124:13;:11;:13::i;:::-;-1:-1:-1;;;;;30241:33:0;::::1;;::::0;;;:27:::1;:33;::::0;;;;;:43;::::1;;:33;::::0;;::::1;:43;;::::0;30219:138:::1;;;::::0;-1:-1:-1;;;30219:138:0;;9149:2:1;30219:138:0::1;::::0;::::1;9131:21:1::0;9188:2;9168:18;;;9161:30;9227:34;9207:18;;;9200:62;9298:15;9278:18;;;9271:43;9331:19;;30219:138:0::1;8947:409:1::0;30219:138:0::1;30392:13;-1:-1:-1::0;;;;;30376:30:0::1;:4;-1:-1:-1::0;;;;;30376:30:0::1;::::0;30368:63:::1;;;::::0;-1:-1:-1;;;30368:63:0;;9563:2:1;30368:63:0::1;::::0;::::1;9545:21:1::0;9602:2;9582:18;;;9575:30;9641:22;9621:18;;;9614:50;9681:18;;30368:63:0::1;9361:344:1::0;30368:63:0::1;-1:-1:-1::0;;;;;30444:33:0;::::1;;::::0;;;:27:::1;:33;::::0;;;;;;;;:42;;;::::1;::::0;::::1;;::::0;;::::1;::::0;;;30504:44;;1601:41:1;;;30504:44:0::1;::::0;1574:18:1;30504:44:0::1;;;;;;;;30100:456:::0;;:::o;19389:498::-;17043:10;19507:4;18538:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;18538:27:0;;;;;;;;;;19507:4;;17043:10;19668:15;19648:16;:35;;19626:122;;;;-1:-1:-1;;;19626:122:0;;9912:2:1;19626:122:0;;;9894:21:1;9951:2;9931:18;;;9924:30;9990:34;9970:18;;;9963:62;10061:7;10041:18;;;10034:35;10086:19;;19626:122:0;9710:401:1;19626:122:0;19784:60;19793:5;19800:7;19828:15;19809:16;:34;19784:8;:60::i;18171:218::-;18275:4;17043:10;18331:28;17043:10;18348:2;18352:6;18331:9;:28::i;29408:452::-;23124:13;:11;:13::i;:::-;29529:6:::1;29507:18;;:28:::0;29485:119:::1;;;::::0;-1:-1:-1;;;29485:119:0;;10318:2:1;29485:119:0::1;::::0;::::1;10300:21:1::0;10357:2;10337:18;;;10330:30;10396:34;10376:18;;;10369:62;10467:11;10447:18;;;10440:39;10496:19;;29485:119:0::1;10116:405:1::0;29485:119:0::1;29663:9;29647:13;17992:12:::0;;;17904:108;29647:13:::1;:25;;;;:::i;:::-;29637:6;:35;;29615:147;;;::::0;-1:-1:-1;;;29615:147:0;;11007:2:1;29615:147:0::1;::::0;::::1;10989:21:1::0;11046:2;11026:18;;;11019:30;11085:34;11065:18;;;11058:62;11156:32;11136:18;;;11129:60;11206:19;;29615:147:0::1;10805:426:1::0;29615:147:0::1;29775:18;:27:::0;;;29820:32:::1;::::0;1799:25:1;;;29820:32:0::1;::::0;1787:2:1;1772:18;29820:32:0::1;1653:177:1::0;26635:490:0;26684:7;26708:13;26725:2;26708:19;26704:414;;-1:-1:-1;26751:42:0;;26635:490::o;26704:414::-;26815:13;26832:2;26815:19;26811:307;;-1:-1:-1;26858:42:0;;26635:490::o;26811:307::-;26922:13;26939:1;26922:18;:40;;;;26944:13;26961:1;26944:18;26922:40;26918:200;;;-1:-1:-1;26986:42:0;;26635:490::o;26918:200::-;27061:45;;-1:-1:-1;;;27061:45:0;;11438:2:1;27061:45:0;;;11420:21:1;11477:2;11457:18;;;11450:30;11516:34;11496:18;;;11489:62;11587:5;11567:18;;;11560:33;11610:19;;27061:45:0;11236:399:1;30726:363:0;23124:13;:11;:13::i;:::-;-1:-1:-1;;;;;30863:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;:40;::::1;;:28;::::0;;::::1;:40;;::::0;30841:132:::1;;;::::0;-1:-1:-1;;;30841:132:0;;11842:2:1;30841:132:0::1;::::0;::::1;11824:21:1::0;11881:2;11861:18;;;11854:30;11920:34;11900:18;;;11893:62;11991:12;11971:18;;;11964:40;12021:19;;30841:132:0::1;11640:406:1::0;30841:132:0::1;-1:-1:-1::0;;;;;30984:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;;::::1;::::0;::::1;;::::0;;::::1;::::0;;;31041:40;;1601:41:1;;;31041:40:0::1;::::0;1574:18:1;31041:40:0::1;1461:187:1::0;23511:238:0;23124:13;:11;:13::i;:::-;-1:-1:-1;;;;;23614:22:0;::::1;23592:110;;;::::0;-1:-1:-1;;;23592:110:0;;12253:2:1;23592:110:0::1;::::0;::::1;12235:21:1::0;12292:2;12272:18;;;12265:30;12331:34;12311:18;;;12304:62;12402:8;12382:18;;;12375:36;12428:19;;23592:110:0::1;12051:402:1::0;23592:110:0::1;23713:28;23732:8;23713:18;:28::i;27133:447::-:0;23124:13;:11;:13::i;:::-;27229:4:::1;-1:-1:-1::0;;;;;27212:22:0;::::1;::::0;27204:67:::1;;;::::0;-1:-1:-1;;;27204:67:0;;12660:2:1;27204:67:0::1;::::0;::::1;12642:21:1::0;;;12679:18;;;12672:30;12738:34;12718:18;;;12711:62;12790:18;;27204:67:0::1;12458:356:1::0;27204:67:0::1;-1:-1:-1::0;;;;;27288:21:0;::::1;27284:126;;27326:51;::::0;27334:10:::1;::::0;27355:21:::1;27326:51:::0;::::1;;;::::0;::::1;::::0;;;27355:21;27334:10;27326:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;35058:170:::0;35023:205::o;27284:126::-:1;27482:35;::::0;;;;27511:4:::1;27482:35;::::0;::::1;2007:74:1::0;27447:5:0;;27420:17:::1;::::0;-1:-1:-1;;;;;27482:20:0;::::1;::::0;::::1;::::0;1980:18:1;;27482:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27464:53:::0;-1:-1:-1;27528:44:0::1;-1:-1:-1::0;;;;;27528:23:0;::::1;27552:10;27464:53:::0;27528:23:::1;:44::i;:::-;27193:387;;27133:447:::0;:::o;23260:132::-;23211:7;23238:6;-1:-1:-1;;;;;23238:6:0;17043:10;23324:23;23316:68;;;;-1:-1:-1;;;23316:68:0;;13210:2:1;23316:68:0;;;13192:21:1;;;13229:18;;;13222:30;13288:34;13268:18;;;13261:62;13340:18;;23316:68:0;13008:356:1;21665:380:0;-1:-1:-1;;;;;21801:19:0;;21793:68;;;;-1:-1:-1;;;21793:68:0;;13571:2:1;21793:68:0;;;13553:21:1;13610:2;13590:18;;;13583:30;13649:34;13629:18;;;13622:62;13720:6;13700:18;;;13693:34;13744:19;;21793:68:0;13369:400:1;21793:68:0;-1:-1:-1;;;;;21880:21:0;;21872:68;;;;-1:-1:-1;;;21872:68:0;;13976:2:1;21872:68:0;;;13958:21:1;14015:2;13995:18;;;13988:30;14054:34;14034:18;;;14027:62;14125:4;14105:18;;;14098:32;14147:19;;21872:68:0;13774:398:1;21872:68:0;-1:-1:-1;;;;;21953:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;22005:32;;1799:25:1;;;22005:32:0;;1772:18:1;22005:32:0;;;;;;;21665:380;;;:::o;22053:502::-;-1:-1:-1;;;;;18538:18:0;;;22188:24;18538:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;22275:17;22255:37;;22251:297;;22355:6;22335:16;:26;;22309:117;;;;-1:-1:-1;;;22309:117:0;;14379:2:1;22309:117:0;;;14361:21:1;14418:2;14398:18;;;14391:30;14457:31;14437:18;;;14430:59;14506:18;;22309:117:0;14177:353:1;22309:117:0;22470:51;22479:5;22486:7;22514:6;22495:16;:25;22470:8;:51::i;:::-;22177:378;22053:502;;;:::o;31233:1889::-;-1:-1:-1;;;;;31365:18:0;;31357:68;;;;-1:-1:-1;;;31357:68:0;;14737:2:1;31357:68:0;;;14719:21:1;14776:2;14756:18;;;14749:30;14815:34;14795:18;;;14788:62;14886:7;14866:18;;;14859:35;14911:19;;31357:68:0;14535:401:1;31357:68:0;-1:-1:-1;;;;;31444:16:0;;31436:64;;;;-1:-1:-1;;;31436:64:0;;15143:2:1;31436:64:0;;;15125:21:1;15182:2;15162:18;;;15155:30;15221:34;15201:18;;;15194:62;15292:5;15272:18;;;15265:33;15315:19;;31436:64:0;14941:399:1;31436:64:0;31517:6;31527:1;31517:11;31513:93;;31545:28;31561:4;31567:2;31571:1;31545:15;:28::i;31513:93::-;31667:4;31618:28;18137:18;;;:9;:18;;;;;;31725;;31701:42;;;;;;;31774:33;;-1:-1:-1;31799:8:0;;;;;;;31798:9;31774:33;:84;;;;-1:-1:-1;;;;;;31825:33:0;;;;;;:27;:33;;;;;;;;31824:34;31774:84;:118;;;;-1:-1:-1;31875:17:0;;;;31774:118;:182;;;;;31955:1;31932:20;;31909;;:43;;;;:::i;:::-;:47;31774:182;31756:249;;;31983:10;:8;:10::i;:::-;-1:-1:-1;;;;;32053:25:0;;32017:12;32053:25;;;:19;:25;;;;;;32032:4;;32053:25;;;:52;;-1:-1:-1;;;;;;32082:23:0;;;;;;:19;:23;;;;;;;;32053:52;:64;;;-1:-1:-1;32109:8:0;;;;;;;32053:64;32049:112;;;-1:-1:-1;32144:5:0;32049:112;32177:7;32173:896;;;-1:-1:-1;;;;;32291:33:0;;32201:27;32291:33;;;:27;:33;;;;;;32201:27;;32291:33;;32287:440;;;32396:11;32377:15;;32368:6;:24;;;;:::i;:::-;32367:40;;;;:::i;:::-;32345:62;;32477:11;32458:15;;32449:6;:24;;;;:::i;:::-;32448:40;;;;:::i;:::-;32426:62;;32287:440;;;-1:-1:-1;;;;;32514:31:0;;;;;;:27;:31;;;;;;;;32510:217;;;32618:11;32598:16;;32589:6;:25;;;;:::i;:::-;32588:41;;;;:::i;:::-;32566:63;;32700:11;32680:16;;32671:6;:25;;;;:::i;:::-;32670:41;;;;:::i;:::-;32648:63;;32510:217;32767:19;32743:20;;:43;;;;;;;:::i;:::-;;;;;;;;32825:19;32801:20;;:43;;;;;;;:::i;:::-;;;;-1:-1:-1;32861:12:0;;-1:-1:-1;32876:41:0;32898:19;32876;:41;:::i;:::-;32861:56;-1:-1:-1;32938:8:0;;32934:124;;32967:14;32977:4;32967:14;;:::i;:::-;;;33000:42;33016:4;33030;33037;33000:15;:42::i;:::-;32186:883;;;32173:896;33081:33;33097:4;33103:2;33107:6;33081:15;:33::i;:::-;31346:1776;;;31233:1889;;;:::o;33130:1607::-;24739:8;:15;;;;;;;;33201:16:::1;::::0;;33215:1:::1;33201:16:::0;;;;;::::1;::::0;;-1:-1:-1;;33201:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;33201:16:0::1;33177:40;;33246:4;33228;33233:1;33228:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;33228:23:0::1;;;-1:-1:-1::0;;;;;33228:23:0::1;;;::::0;::::1;33272:15;-1:-1:-1::0;;;;;33272:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33262:4;33267:1;33262:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33262:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:32;33356:4:::1;33307:28;18137:18:::0;;;:9;:18;;;;;;;33307:55:::1;;33375:16;33417:20;;33394;;:43;;;;:::i;:::-;33375:62;;33450:20;33540:8;33534:1;33511:20;;:24;;;;:::i;:::-;33474:62;::::0;:20;:62:::1;:::i;:::-;33473:75;;;;:::i;:::-;33450:98:::0;-1:-1:-1;33561:22:0::1;33586:35;33450:98:::0;33586:20;:35:::1;:::i;:::-;33561:60;;33671:1;33647:20;;33646:26;;;;:::i;:::-;33634:38;::::0;;::::1;:::i;:::-;33702:223;::::0;;;;33634:38;;-1:-1:-1;;;;;;33702:15:0::1;:66;::::0;::::1;::::0;:223:::1;::::0;33787:14;;33820:1:::1;::::0;33840:4;;33871::::1;::::0;33895:15:::1;::::0;33702:223:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;33685:292;;33959:7;;;;;;;33685:292;34081:20;::::0;34010:21:::1;::::0;33989:18:::1;::::0;34105:8;;34068:33:::1;::::0;34010:21;34068:33:::1;:::i;:::-;34067:46;;;;:::i;:::-;34044:69:::0;-1:-1:-1;34124:18:0::1;34145:25;34044:69:::0;34145:10;:25:::1;:::i;:::-;34124:46;;34202:1;34187:12;:16;:34;;;;;34220:1;34207:10;:14;34187:34;34183:376;;;34259:264;::::0;;;;34340:4:::1;34259:264;::::0;::::1;17680:34:1::0;17730:18;;;17723:34;;;34403:1:0::1;17773:18:1::0;;;17766:34;;;17816:18;;;17809:34;34459:6:0::1;17859:19:1::0;;;17852:44;34489:15:0::1;17912:19:1::0;;;17905:35;34259:15:0::1;-1:-1:-1::0;;;;;34259:31:0::1;::::0;::::1;::::0;34298:10;;17591:19:1;;34259:264:0::1;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;34259:264:0::1;::::0;;::::1;;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;34238:310:::0;::::1;;;;;;34575:16:::0;;34571:87:::1;;34616:15;::::0;34608:38:::1;::::0;-1:-1:-1;;;;;34616:15:0::1;34633:12:::0;34608:7:::1;:38::i;:::-;;34571:87;-1:-1:-1::0;;34693:1:0::1;34670:20;:24:::0;;;34705:20:::1;:24:::0;-1:-1:-1;;;;;;24765:1:0::1;24777:8:::0;:16;;;;;;33130:1607::o;23757:191::-;23831:16;23850:6;;-1:-1:-1;;;;;23867:17:0;;;;;;;;;;23900:40;;23850:6;;;;;;;23900:40;;23831:16;23900:40;23820:128;23757:191;:::o;12130:214::-;12267:58;;;-1:-1:-1;;;;;18454:55:1;;12267:58:0;;;18436:74:1;18526:18;;;;18519:34;;;12267:58:0;;;;;;;;;;18409:18:1;;;;12267:58:0;;;;;;;;;;12290:23;12267:58;;;12213:123;;12247:5;;12213:19;:123::i;19895:714::-;-1:-1:-1;;;;;20026:18:0;;20018:68;;;;-1:-1:-1;;;20018:68:0;;14737:2:1;20018:68:0;;;14719:21:1;14776:2;14756:18;;;14749:30;14815:34;14795:18;;;14788:62;14886:7;14866:18;;;14859:35;14911:19;;20018:68:0;14535:401:1;20018:68:0;-1:-1:-1;;;;;20105:16:0;;20097:64;;;;-1:-1:-1;;;20097:64:0;;15143:2:1;20097:64:0;;;15125:21:1;15182:2;15162:18;;;15155:30;15221:34;15201:18;;;15194:62;15292:5;15272:18;;;15265:33;15315:19;;20097:64:0;14941:399:1;20097:64:0;-1:-1:-1;;;;;20247:15:0;;20225:19;20247:15;;;:9;:15;;;;;;20295:21;;;;20273:109;;;;-1:-1:-1;;;20273:109:0;;18766:2:1;20273:109:0;;;18748:21:1;18805:2;18785:18;;;18778:30;18844:34;18824:18;;;18817:62;18915:8;18895:18;;;18888:36;18941:19;;20273:109:0;18564:402:1;20273:109:0;-1:-1:-1;;;;;20418:15:0;;;;;;;:9;:15;;;;;;20436:20;;;20418:38;;20473:13;;;;;;;;;;:23;;;;;;20525:26;;;;;;20450:6;1799:25:1;;1787:2;1772:18;;1653:177;20525:26:0;;;;;;;;20564:37;27133:447;34745:270;34847:4;16487:21;:19;:21::i;:::-;34892:6:::1;34868:21;:30;34864:48;;;-1:-1:-1::0;34907:5:0::1;34900:12;;34864:48;34926:12;34952:3;-1:-1:-1::0;;;;;34944:17:0::1;34969:6;34944:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;34925:55:0;;-1:-1:-1;;;16519:1:0::1;16531:20:::0;16303:1;16776:22;;16727:79;15238:380;15319:23;15345:106;15387:4;15345:106;;;;;;;;;;;;;;;;;15353:5;-1:-1:-1;;;;;15345:27:0;;;:106;;;;;:::i;:::-;15319:132;;15484:10;:17;15505:1;15484:22;:56;;;;15521:10;15510:30;;;;;;;;;;;;:::i;:::-;15462:148;;;;-1:-1:-1;;;15462:148:0;;19633:2:1;15462:148:0;;;19615:21:1;19672:2;19652:18;;;19645:30;19711:34;19691:18;;;19684:62;19782:12;19762:18;;;19755:40;19812:19;;15462:148:0;19431:406:1;16567:152:0;16347:1;16625:7;;:19;16617:63;;;;-1:-1:-1;;;16617:63:0;;20044:2:1;16617:63:0;;;20026:21:1;20083:2;20063:18;;;20056:30;20122:33;20102:18;;;20095:61;20173:18;;16617:63:0;19842:355:1;16617:63:0;16347:1;16693:7;:18;16567:152::o;6935:229::-;7072:12;7104:52;7126:6;7134:4;7140:1;7143:12;7104:21;:52::i;:::-;7097:59;6935:229;-1:-1:-1;;;;6935:229:0:o;7536:612::-;7706:12;7778:5;7753:21;:30;;7731:118;;;;-1:-1:-1;;;7731:118:0;;20404:2:1;7731:118:0;;;20386:21:1;20443:2;20423:18;;;20416:30;20482:34;20462:18;;;20455:62;20553:8;20533:18;;;20526:36;20579:19;;7731:118:0;20202:402:1;7731:118:0;7861:12;7875:23;7902:6;-1:-1:-1;;;;;7902:11:0;7921:5;7942:4;7902:55;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7860:97;;;;7988:152;8033:6;8058:7;8084:10;8113:12;7988:26;:152::i;:::-;7968:172;7536:612;-1:-1:-1;;;;;;;7536:612:0:o;9652:477::-;9837:12;9866:7;9862:260;;;9894:10;:17;9915:1;9894:22;9890:123;;-1:-1:-1;;;;;26596:19:0;;;9937:60;;;;-1:-1:-1;;;9937:60:0;;21103:2:1;9937:60:0;;;21085:21:1;21142:2;21122:18;;;21115:30;21181:31;21161:18;;;21154:59;21230:18;;9937:60:0;20901:353:1;9937:60:0;-1:-1:-1;10034:10:0;10027:17;;9862:260;10077:33;10085:10;10097:12;10573:17;;:21;10569:299;;10716:10;10710:17;10773:15;10760:10;10756:2;10752:19;10745:44;10569:299;10843:12;10836:20;;-1:-1:-1;;;10836:20:0;;;;;;;;:::i;14:248:1:-;82:6;90;143:2;131:9;122:7;118:23;114:32;111:52;;;159:1;156;149:12;111:52;-1:-1:-1;;182:23:1;;;252:2;237:18;;;224:32;;-1:-1:-1;14:248:1:o;267:250::-;352:1;362:113;376:6;373:1;370:13;362:113;;;452:11;;;446:18;433:11;;;426:39;398:2;391:10;362:113;;;-1:-1:-1;;509:1:1;491:16;;484:27;267:250::o;522:455::-;671:2;660:9;653:21;634:4;703:6;697:13;746:6;741:2;730:9;726:18;719:34;762:79;834:6;829:2;818:9;814:18;809:2;801:6;797:15;762:79;:::i;:::-;893:2;881:15;898:66;877:88;862:104;;;;968:2;858:113;;522:455;-1:-1:-1;;522:455:1:o;982:154::-;-1:-1:-1;;;;;1061:5:1;1057:54;1050:5;1047:65;1037:93;;1126:1;1123;1116:12;1141:315;1209:6;1217;1270:2;1258:9;1249:7;1245:23;1241:32;1238:52;;;1286:1;1283;1276:12;1238:52;1325:9;1312:23;1344:31;1369:5;1344:31;:::i;:::-;1394:5;1446:2;1431:18;;;;1418:32;;-1:-1:-1;;;1141:315:1:o;2092:118::-;2178:5;2171:13;2164:21;2157:5;2154:32;2144:60;;2200:1;2197;2190:12;2215:241;2271:6;2324:2;2312:9;2303:7;2299:23;2295:32;2292:52;;;2340:1;2337;2330:12;2292:52;2379:9;2366:23;2398:28;2420:5;2398:28;:::i;:::-;2445:5;2215:241;-1:-1:-1;;;2215:241:1:o;2461:456::-;2538:6;2546;2554;2607:2;2595:9;2586:7;2582:23;2578:32;2575:52;;;2623:1;2620;2613:12;2575:52;2662:9;2649:23;2681:31;2706:5;2681:31;:::i;:::-;2731:5;-1:-1:-1;2788:2:1;2773:18;;2760:32;2801:33;2760:32;2801:33;:::i;:::-;2461:456;;2853:7;;-1:-1:-1;;;2907:2:1;2892:18;;;;2879:32;;2461:456::o;3342:247::-;3401:6;3454:2;3442:9;3433:7;3429:23;3425:32;3422:52;;;3470:1;3467;3460:12;3422:52;3509:9;3496:23;3528:31;3553:5;3528:31;:::i;3594:382::-;3659:6;3667;3720:2;3708:9;3699:7;3695:23;3691:32;3688:52;;;3736:1;3733;3726:12;3688:52;3775:9;3762:23;3794:31;3819:5;3794:31;:::i;:::-;3844:5;-1:-1:-1;3901:2:1;3886:18;;3873:32;3914:30;3873:32;3914:30;:::i;:::-;3963:7;3953:17;;;3594:382;;;;;:::o;3981:180::-;4040:6;4093:2;4081:9;4072:7;4068:23;4064:32;4061:52;;;4109:1;4106;4099:12;4061:52;-1:-1:-1;4132:23:1;;3981:180;-1:-1:-1;3981:180:1:o;4166:388::-;4234:6;4242;4295:2;4283:9;4274:7;4270:23;4266:32;4263:52;;;4311:1;4308;4301:12;4263:52;4350:9;4337:23;4369:31;4394:5;4369:31;:::i;:::-;4419:5;-1:-1:-1;4476:2:1;4461:18;;4448:32;4489:33;4448:32;4489:33;:::i;4918:184::-;4970:77;4967:1;4960:88;5067:4;5064:1;5057:15;5091:4;5088:1;5081:15;5107:125;5172:9;;;5193:10;;;5190:36;;;5206:18;;:::i;5850:437::-;5929:1;5925:12;;;;5972;;;5993:61;;6047:4;6039:6;6035:17;6025:27;;5993:61;6100:2;6092:6;6089:14;6069:18;6066:38;6063:218;;6137:77;6134:1;6127:88;6238:4;6235:1;6228:15;6266:4;6263:1;6256:15;6063:218;;5850:437;;;:::o;10526:274::-;10566:1;10592;10582:189;;10627:77;10624:1;10617:88;10728:4;10725:1;10718:15;10756:4;10753:1;10746:15;10582:189;-1:-1:-1;10785:9:1;;10526:274::o;12819:184::-;12889:6;12942:2;12930:9;12921:7;12917:23;12913:32;12910:52;;;12958:1;12955;12948:12;12910:52;-1:-1:-1;12981:16:1;;12819:184;-1:-1:-1;12819:184:1:o;15345:168::-;15418:9;;;15449;;15466:15;;;15460:22;;15446:37;15436:71;;15487:18;;:::i;15518:128::-;15585:9;;;15606:11;;;15603:37;;;15620:18;;:::i;15840:184::-;15892:77;15889:1;15882:88;15989:4;15986:1;15979:15;16013:4;16010:1;16003:15;16029:251;16099:6;16152:2;16140:9;16131:7;16127:23;16123:32;16120:52;;;16168:1;16165;16158:12;16120:52;16200:9;16194:16;16219:31;16244:5;16219:31;:::i;16285:1026::-;16547:4;16595:3;16584:9;16580:19;16626:6;16615:9;16608:25;16652:2;16690:6;16685:2;16674:9;16670:18;16663:34;16733:3;16728:2;16717:9;16713:18;16706:31;16757:6;16792;16786:13;16823:6;16815;16808:22;16861:3;16850:9;16846:19;16839:26;;16900:2;16892:6;16888:15;16874:29;;16921:1;16931:218;16945:6;16942:1;16939:13;16931:218;;;17010:13;;-1:-1:-1;;;;;17006:62:1;16994:75;;17124:15;;;;17089:12;;;;16967:1;16960:9;16931:218;;;-1:-1:-1;;;;;;;17205:55:1;;;;17200:2;17185:18;;17178:83;-1:-1:-1;;;17292:3:1;17277:19;17270:35;17166:3;16285:1026;-1:-1:-1;;;16285:1026:1:o;17951:306::-;18039:6;18047;18055;18108:2;18096:9;18087:7;18083:23;18079:32;18076:52;;;18124:1;18121;18114:12;18076:52;18153:9;18147:16;18137:26;;18203:2;18192:9;18188:18;18182:25;18172:35;;18247:2;18236:9;18232:18;18226:25;18216:35;;17951:306;;;;;:::o;19181:245::-;19248:6;19301:2;19289:9;19280:7;19276:23;19272:32;19269:52;;;19317:1;19314;19307:12;19269:52;19349:9;19343:16;19368:28;19390:5;19368:28;:::i;20609:287::-;20738:3;20776:6;20770:13;20792:66;20851:6;20846:3;20839:4;20831:6;20827:17;20792:66;:::i;:::-;20874:16;;;;;20609:287;-1:-1:-1;;20609:287:1:o

Swarm Source

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